[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Misha-_-rus

    Misha-_-rus New Member

    Joined:
    23 Apr 2009
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Нужно задав двумерную матрицу поменять в ней 1 столбец с последним, Помогите очень срочно надо.

    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(int argc, char* argv[])
    { int i,mas[25][25],o,n,m,q;

    printf("Yslovie 2\n ");
    printf("Vvesti matricy, 1 stolbec pome9t` mestami \n ");
    printf("Vvedite razmernost: ");
    scanf("%d", &o);
    for (n=0; n<=o; n++)
    for (m=0; m<=o; m++)
    {mas[n][m]=random(15)-7;}
    for (n=0; n<o; n++)
    {printf("\n");
    for (m=0; m<o; m++)
    {printf(" %d ", mas[n][m]);}}
    printf("\n");
    printf("\n");

    printf("S drygim stolbcom: \n");

    ????????????????? //Здесь должен быть код которй меняет один столбец местами с последним, и выводит измененый массив

    getch();
    return 0;
    }
     
  2. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    int main(int argc, char* argv[])
    { 
    int i,mas[25][25],o,n,m,tmp;
    clrscr();
    printf("Yslovie 2\n ");
    printf("Vvesti matricy, 1 stolbec pome9t` mestami \n ");
    printf("Vvedite razmernost: ");
    scanf("%d", &o);
    for(n=0; n<=o; n++){
       for(m=0; m<=o; m++)
       {
          mas[n][m]=random(15)-7;
          printf("%3d ", mas[n][m]);
       }
       printf("\n");
    }
    printf("S drygim stolbcom: \n");
    //замена столбцов
    for(i=0; i<=o; i++){
       tmp=mas[i][0];
       mas[i][0]=mas[i][o];
       mas[i][o]=tmp;
       }
    for(n=0; n<=o; n++){
       for(m=0; m<=o; m++)
          printf("%3d ", mas[n][m]);
       printf("\n");
    }
    getch();
    return 0;
    }
    
     
    #2762 fker, 25 Apr 2009
    Last edited: 25 Apr 2009
  3. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Неинициализированная перменная в языкам типа с++ есть очень опасное зло. Значение будет ровно таким, какое значение имела ячейка памяти. Так как переменная локальная - то лежит в стеке. Сталобыть значение может быть любым. Таким образом ты получишь магическую ошибку, которая трудновоспроизводима, ибо зависит от состояния памяти процесса(а суть в том, что EOF это просто символьное описание числа 0xFF, которое встречается в памяти довольно часто, и вполне вероятно его получить в неочищенном блоке памяти). И если бы такое приложение было комерческим, то чудесные часы дебагинга и анализа кода были бы обеспечены. Ну а потом промывка мозга на тему "почему не учтен warning C4700, который дал компилятор"

    По поводу кодов - так и пиши символы, зачем ты переводишь их в коды? Чтобы сложнее было понять суть проверки? if (ch >= '0' && ch <= '9') гораздо нагляднее. Опять же использование числовых констант ацки нерекомендуется нигде и никогда. Все константы должны иметь символические имена. #define WEEK_LENGTH 7 итп. Это помогает понять контекст кода просто глянув на него, без комментариев.

    ЗЫ: не учите плохому плз. ибо потом такие кодесы городят, что страшно смотреть.
     
    #2763 Ra$cal, 25 Apr 2009
    Last edited: 26 Apr 2009
  4. WALKMAN

    WALKMAN Elder - Старейшина

    Joined:
    30 Dec 2007
    Messages:
    61
    Likes Received:
    2
    Reputations:
    0
    у меня вопрос. Имееться две переменные типа int, к пример
    int a,b; //числитель и знаменатель
    как привести дробь к нормальному виду, тоесть нужно разделить a/b и присвоить к переменной. такая фишка не срабатывает:

    int a,b;
    float s;
    s=a/b;
    cout<<s;

    оно округляет значения. Подскажите как решить проблемму?
     
  5. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    ничего не удивительного ведь
    поэтому надо так
    Code:
    float a, b;
    float s;
    s = a / b;
    cout << s;
     
    1 person likes this.
  6. WALKMAN

    WALKMAN Elder - Старейшина

    Joined:
    30 Dec 2007
    Messages:
    61
    Likes Received:
    2
    Reputations:
    0
    Ясно, получаеться для правильной работы нужно вводить числа "с точкой" : 3.0, 2.0 .....
     
  7. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    2WALKMAN
    #include<iomanip.h>

    cout<<setprecision(3)<<s; //манипулятор setprecision(n) устанавливает точность вывода чисел типа float или double
     
    #2767 fker, 26 Apr 2009
    Last edited: 26 Apr 2009
    1 person likes this.
  8. CHIP:))

    CHIP:)) Elder - Старейшина

    Joined:
    17 Jan 2007
    Messages:
    81
    Likes Received:
    18
    Reputations:
    -3
    Люди подскажите как создать функцию которая примет структуру и вернет массив заполненый элементами из структуры. И как потом к этому массиву обращаться из мэйн. Че то сам писал писал так ничо и не получается. Желательно примерчик простенький.
    На си)
     
    #2768 CHIP:)), 26 Apr 2009
    Last edited: 26 Apr 2009
  9. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    А погуглить?
    http://www.java2s.com/Tutorial/Cpp/0160__Structure/Passstructuretoafunctionasapointer.htm
     
    _________________________
  10. v.tyshkev

    v.tyshkev New Member

    Joined:
    16 Mar 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Ругается на директиву.

    При компиляции выходит сообщение об ошибке по директиве #include<.h>:

    А вот и код:

    Code:
    #include <stdio.h>  
    #include <stdlib.h>    
    
    namespace az  
    {  	
         class Program  	
         {  		
             int main()
               {
    char *Remote_IP = getenv("REMOTE_ADDR");              char *Query_String = getenv("QUERY_STRING");                
    
    printf("Content-type: text/html\n\n");              
    printf("<html><body><h1>Привет</h1><p>");              printf("Ваш IP: %s", Remote_IP);             
     printf("<p>Переданные вами параметры: %s", Query_String);    			
    printf("</body></html>")
    
    return 0;  		
    }  	
          }  
              }
    Как от это исправить?
     
  11. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    ппц что это ты нагородил, выкинь этот говнокод и почитай книжки.
     
  12. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    Судя по тем кодам, что пишут в этой теме, мой код, действительно, совсем другой, не сказал бы, что он плохой... Слова добавлялись в дерево, вполне логично, по сравнению строк на больше/меньше. Никаких стеков, массивов нельзя - это глупо, да и на это стоит ограничение, просто, в данном случае, память является самым критичным ресурсом, поэтому разрастание стека при рекурсии - недопустимая роскошь. Привожу код с нерекурсивным обходом (не самый эллегантный алгоритм, но все же...), может кому пригодится, потому что задача не самая тривиальная... Если кто захочет компилить, то это делать надо в 99-м стандарте С.
    Code:
    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct tree_item_tag {
    	const char * word; 
    	size_t count;
    	struct tree_item_tag *left, *right, *parent;
    } tree_item_t;
    
    void insert(tree_item_t** first_item, const char* keyword, size_t * count) {
    	
    	tree_item_t** pcur = first_item, **prev =  first_item; 
    	int cmp_words;
    	
    	while (*pcur != NULL) { /* searching for already inserted word inc count */
    		if((cmp_words=strcmp(keyword, (*pcur)->word)) == 0) {
    			++(*pcur)->count;
    			return;
            }  
            prev = pcur;
    		pcur=(cmp_words<0) ? &((*pcur)->left) : &((*pcur)->right);
        } /* it is the first insert of this word */
    	*pcur = malloc( sizeof(tree_item_t) );
        (*pcur)->word = strcpy( malloc( strlen(keyword) + 1) , keyword);
        (*pcur)->count = 1;
        (*pcur)->parent = *prev;
        (*pcur)->left = (*pcur)->right = NULL;  
        ++(*count);
    }
    
    void printnotrec(tree_item_t* tree_item, size_t count) {
    	
    	size_t cur_count = 0;
    	tree_item_t * pcur = tree_item, * pprev = pcur, *tmppcur;
    	
    	while(cur_count != count) {
    		tmppcur = pcur;
    		if( (pcur->left==NULL && pprev!=pcur->right)
    		||pprev==pcur->left) {
    			(void)printf("%s %d\n",pcur->word, pcur->count);
    			++cur_count;
    			if( pcur->right == NULL ) {
    				if( pcur->parent->right == pcur ) {
    					pprev = pcur->parent;
    					pcur = pcur->parent->parent;
    					continue;
    				} else 
    					pcur = pcur->parent;
    			} else 
    				pcur = pcur->right;
    		}
    		else {
    			if(pprev == pcur->right)
    				pcur = pcur->parent;
    			else 
    				pcur = pcur->left;
    		}
    		pprev = tmppcur;
    	}
    }
    
    int get_word(char * buf_word, size_t buf_size) {
    	
    	int c; /* current read symbol */
    	size_t word_len = 0;
    	
    	while( (c=getchar()) != EOF) {
    		if(isalpha( (unsigned char) c) || (word_len > 0 && c == '\'')) {
    			buf_word[ word_len++ ] = (unsigned char) tolower(c);
    			if(word_len + 1 == buf_size) break; /* return only part of word */
    		} else if(word_len > 0) break; /* word can be returned */
    	}  
    	if(word_len > 0) {
    		buf_word[ word_len ]= '\0';
    		return 1;
    	} else return 0;
    }
    
    int main(void) {
    	
    	tree_item_t *first_item = NULL;
    	size_t buf_size = 50; /* must be bigger than 1 */
    	size_t count = 0;
    	char * buf_word = malloc(buf_size);
    	
    	while(get_word(buf_word, buf_size)) 
    		insert(&first_item, buf_word,&count);
    	
    	printnotrec(first_item,count);
    	printf("%d\n",count);
    	return EXIT_SUCCESS;
    }
     
    #2772 ss88, 26 Apr 2009
    Last edited: 26 Apr 2009
  13. CHIP:))

    CHIP:)) Elder - Старейшина

    Joined:
    17 Jan 2007
    Messages:
    81
    Likes Received:
    18
    Reputations:
    -3
    Спасибо за наводку, структуру передал, а как теперь вернуть массив?
     
  14. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    создай в куче и возвращай указатель на него.
     
  15. CHIP:))

    CHIP:)) Elder - Старейшина

    Joined:
    17 Jan 2007
    Messages:
    81
    Likes Received:
    18
    Reputations:
    -3
    Может я что то не так делаю, вот мой код может кто нить подскажет что не так?

    PHP:
    #include <stdio.h>
    #include <time.h>

    struct tm intime;  // создаю структуру типа tm которая описана в time.h
    intfunct(struct tm *p); // обьявление функции
    intfunct(struct tm *p// описание 
    {
    int temp[7];    // создаем массив который вернется
    temp[0] = p.tm_sec;    // присваиваем элементам массива, значения структуры
    temp[1] = p.tm_min// ..
    temp[2] = p.tm_hour;
    temp[3] = p.tm_mday;
    temp[4] = p.tm_mon;
    temp[5] = p.tm_year;
    temp[6] = '\0'// закрываем массив
    return temp;    // возвращаем массив
    }


    int main (void)
    {
    int *temp2;  // создаем указатель на массив который получим из функции
        
    {
            
    intime.tm_sec=10;    // присваиваем значения элементам нашей входной структуры
            
    intime.tm_min=19;
            
    intime.tm_hour=20;
            
    intime.tm_mday=14;
            
    intime.tm_mon=5;
            
    intime.tm_year=109;
        }
        
    temp2 funct(&intime); // пытаемся отправить структуру в функцию и ничего не выходит ((
    return 0;
    }

    Compiling source file(s)...
    gps.cpp
    gps
    .cppIn function `int* funct(tm*)':
    gps.cpp:9: error: 
    `tm_sec' has not been declared  //  здесь непонимаю почему ругается, ведь мы обьявили структуру в файле <time.h>
    gps.cpp:9: error: request for member of non-aggregate type before '
    ;' token
    gps.cpp:10: error: `tm_min' 
    has not been declared
    gps
    .cpp:10errorrequest for member of non-aggregate type before ';' token
    gps
    .cpp:11error: `tm_hour' has not been declared

    gps.cpp:8: warning: address of local variable 
    `temp' returned // здесь вроде ругается что возвращаем локальную а не глобальную переменную
     
  16. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    Code:
    temp[0] = p->tm_sec;    // присваиваем элементам массива, значения структуры
    temp[1] = p->tm_min; // ..
    temp[2] = p->tm_hour;
    temp[3] = p->tm_mday;
    ...
    насчет переменной локальной - она создается в стеке, а стек это такайа штука, которая после выхода из подпрограммы может быть использована другой подпрограммой - следовательно и данные будут испорчены.
     
    #2776 FrMn, 26 Apr 2009
    Last edited: 26 Apr 2009
  17. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    не знаю, сколько вам лет, но я ТАКОГО даже в школе не писал ))) Вас самих не пугает ТАКОЕ??? "Сколько не делай из говна конфету, получается либо слдкое говно, либо говняная конфета" (с) Я
     
  18. CHIP:))

    CHIP:)) Elder - Старейшина

    Joined:
    17 Jan 2007
    Messages:
    81
    Likes Received:
    18
    Reputations:
    -3
    Меня ТАКОЕ не пугает, просто потому что я неопытен в этой сфере. Если несложно можешь обьяснить конкретно что именно тебя так пугает в этом коде?
    Я учту это на будущее. Мне 21)
     
  19. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    CHIP:)), удаляй к чертям весь этот код, бери книжку по сям и садись читать её сначала и ну хотя бы страницы до сотой....
     
  20. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    убило
     
Thread Status:
Not open for further replies.