Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

RE: Вопросы по C/C++ (Для новичков)

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> RE: Вопросы по C/C++ (Для новичков)
Имя
Сообщение << Старые топики   Новые топики >>
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 19:07:04.913333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
quote:

ORIGINAL: iidsp

quote:

Я ничего не знаю, про тип переменной contents. Если это не хитрый класс с перегруженным оператором [] - то это всего-лишь обращение (читай: чтение) элемента массива и возврат копии значения этого элемента.

std::string contents;
значит - это всего лишь работа с копией!?


С чего ты взял, что с копией?

Ты обращаешься к символу в строке, с номером row + c. Получаешь его из строки. И копия символа - результат возвращаемые твоим методом.

int val = 10; int Get10( void ) { return val; // тут возвращается не сама переменная val, а её копия. } void test( void ) { int c; ( c = Get10() ) = 20; // В переменную c заносится копия значения val, а потом заносится 20. printf( "%d", val ); // выведет 10 }
Теперь такой пример:
int val = 10; int& Get10( void ) { return val; // тут возвращается ссылка на val } void test( void ) { int &c = Get10(); c = 20; // По ссылке c в переменную val заносится 20 printf( "%d", val ); // выведет 20 а не 10 }
Советую Страутструпа почитать.
Post #: 1161
RE: Вопросы по C/C++ (Для новичков) - 2010-02-25 22:13:18.773333   
craken

Сообщений: 15
Оценки: 0
Присоединился: 2009-07-17 20:06:16.480000
помогите пожалуйста, нужно прочитать содержимое файла и вывести на экран.
на экран выводится такая кулибяка
-842150451============='====='==='
-842150451=================

fgets пробовал не помогло

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; //--------------------------------------------| #include &lt;windows.h&gt; char bufRus [256]; char* Rus(const char* text) { &nbsp;&nbsp;&nbsp; CharToOem(text, bufRus); &nbsp;&nbsp;&nbsp; return bufRus; } //--------------------------------------------| const int l_pol=2; const int l_obroz=10; const int l_otvet=3; struct Man { &nbsp;&nbsp;&nbsp; int age; &nbsp;&nbsp;&nbsp; char pol[l_pol]; &nbsp;&nbsp;&nbsp; char obroz[l_obroz]; &nbsp;&nbsp;&nbsp; char otvet[l_otvet]; &nbsp;&nbsp;&nbsp; Man* next; }; Man* read_dbase(char* filename); Man* add(Man* beg, const Man&amp; man); void print_dbase(Man* deg); int main(){ &nbsp;&nbsp;&nbsp; Man* beg = read_dbase("dbase.txt"); &nbsp;&nbsp;&nbsp; if (!beg) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 1; &nbsp;&nbsp;&nbsp; print_dbase(beg); &nbsp;&nbsp;&nbsp; return 1; } //----------------------Чтение базы данных из файла| Man* read_dbase(char* filename) { &nbsp;&nbsp;&nbsp; FILE* fin; &nbsp;&nbsp;&nbsp; Man man, *deg = 0; &nbsp;&nbsp;&nbsp; if((fin = fopen(filename, "r")) == 0){ &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(Rus("Нет файла %s\n"), filename); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 0; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; while(!feof(fin)){ &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fscanf(fin, "%i%s%s%s",&amp;man.age, &amp;man.pol, &amp;man.obroz, &amp;man.otvet); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; deg = add(deg, man); &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; fclose(fin); &nbsp;&nbsp;&nbsp; return deg; } //----------------------Вывод базы на экран| void print_dbase(Man* beg) { &nbsp;&nbsp;&nbsp; Man* pv = beg; &nbsp;&nbsp;&nbsp; while (pv) { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("%i%s%s%s\n", pv-&gt;age, pv-&gt;pol, pv-&gt;obroz, pv-&gt;otvet); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pv=pv-&gt;next; &nbsp;&nbsp;&nbsp; } } //--------------------------------------------| Man* add(Man* beg, const Man&amp; man) { &nbsp;&nbsp;&nbsp; Man* pv = new Man; &nbsp;&nbsp;&nbsp; pv-&gt;next = 0; &nbsp;&nbsp;&nbsp; if (beg) { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Man* temp =beg; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while (temp-&gt;next) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp = temp-&gt;next; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp-&gt;next = pv; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; else &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; beg = pv; &nbsp;&nbsp;&nbsp; return beg; } //--------------------------------------------| //--------------------------------------------| //--------------------------------------------| //1)Ввод анкет из файла //2)Поиск людей, старше или моложе, м или ж, да или нет. //3)Вывод на экран //4)Вывод в файл //5) //6) //7) содержимое файла
32 s dffd g 43 d f g с кодировками тоже мудрил не помогает
Post #: 1162
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 11:50:52.746666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Сложно понять твою логику. На вскидку следующее, могу и ошибаться:
1. Не вижу инициализации списка. Функция add либо его инициализирует, либо добавляет одну запись. Так что при добавлении первого элемента - облом ;).
2. return deg; в функции read_dbase возвращает указатель на конец списка, а не на начало, как ожидаолсь. Не совсем понятно, как оно вообще что-то выводит.

———-

В этом я уже более-менее уверен:

3. В функции add ты забыл занести значения полей const Man& man в temp->… . Получается всё, что ты читаешь - ты читаешь впустую.
4. Попробуй такой fscanf:
fscanf(fin, "%d%s%s%s",&man.age, man.pol, man.obroz, man.otvet); // без некоторых амперсантов.
Post #: 1163
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 17:24:21.973333   
craken

Сообщений: 15
Оценки: 0
Присоединился: 2009-07-17 20:06:16.480000
вот исправил, как бы всё заработало))

в том смысле что выводится man.age, а всё остальное белеберда если не написать

&nbsp;&nbsp;&nbsp; pv-&gt;obroz=man.obroz; &nbsp;&nbsp; &nbsp;pv-&gt;obroz=man.obroz; &nbsp;&nbsp; &nbsp;pv-&gt;pol=man.pol; &nbsp;&nbsp; &nbsp;pv-&gt;otvet=man.otvet;
но вот вылетает ошибка

error C2440: '=' : cannot convert from 'const char [10]' to 'char [10]'
        There is no context in which this conversion is possible

//--------------------------------------------| Man* add(Man* beg, const Man &amp;man) { &nbsp;&nbsp; &nbsp;Man* pv = new Man; &nbsp;&nbsp; &nbsp;pv-&gt;next = 0; &nbsp;&nbsp; &nbsp;pv-&gt;age = man.age; &nbsp;&nbsp; &nbsp;pv-&gt;obroz=man.obroz; &nbsp;&nbsp; &nbsp;pv-&gt;obroz=man.obroz; &nbsp;&nbsp; &nbsp;pv-&gt;pol=man.pol; &nbsp;&nbsp; &nbsp;pv-&gt;otvet=man.otvet; &nbsp;&nbsp; &nbsp;if (beg) { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Man* temp =beg; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;while (temp-&gt;next) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp = temp-&gt;next; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp-&gt;next = pv; &nbsp;&nbsp; &nbsp;} &nbsp;&nbsp; &nbsp;else &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;beg = pv; &nbsp;&nbsp; &nbsp;return beg; } //--------------------------------------------|
Post #: 1164
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 17:52:57.373333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Учи основы языка Си, у тебя непонимание того, что такое строка ;). Для строк юзай strcpy.

P.S. можно проще:
Man* pv = new Man;
*pv = man;
pv->next = 0;
Post #: 1165
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 18:02:22.073333   
D1_F

Сообщений: 5
Оценки: 0
Присоединился: 2009-12-16 23:28:14.056666
товарищи программисты, ниже представлена программа которая реализовывает управление базой данных успеваемости студентов, помогите пожалуйста сделать так чтобы при ввооде номера группы больше 699, оценки больше 5ти или меньше 3х программа выдавала сообщение что данные введены неверно,и предлагала проделать данную операцию заново, заранее спасибо….
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;io.h&gt; #include &lt;fcntl.h&gt; #include &lt;string.h&gt; struct record { char surname[16]; char name[16]; char group[16]; int mat; int fiz; int inf; float sred; }; void ramka(int x1,int y1,int x2,char s[20],int flag) { int i; window(x1,y1,x2,y1+3); textmode(C80); textcolor(flag); gotoxy(x1,y1); cprintf("Ъ"); for (i=x1;i&lt;x2-1;i++) cprintf("Д"); cprintf("ї"); gotoxy(x1,y1+1); cprintf("і"); gotoxy(x2,y1+1); cprintf("і"); gotoxy(x1+3,y1+1); cprintf("%s",s); gotoxy(x1,y1+2); cprintf("А"); for (i=x1;i&lt;x2-1;i++) cprintf("Д"); cprintf("Щ"); } void menu(int mode) { clrscr(); switch(mode) { case 1: { ramka(27,4,53,"Џа®б¬®ваҐвм Ў §г",RED); ramka(27,7,53,"„®Ў ўЁвм § ЇЁбм",GREEN); ramka(27,10,53,"ђҐ¤ ЄвЁа®ў вм § ЇЁбм",GREEN); ramka(27,13,53,"“¤ «Ёвм § ЇЁбм",GREEN); ramka(27,16,53," Џ®ЁбЄ ",GREEN); ramka(27,19,53," ‚л室 ",GREEN); break; } case 2: { ramka(27,4,53,"Џа®б¬®ваҐвм Ў §г",GREEN); ramka(27,7,53,"„®Ў ўЁвм § ЇЁбм",RED); ramka(27,10,53,"ђҐ¤ ЄвЁа®ў вм § ЇЁбм",GREEN); ramka(27,13,53,"“¤ «Ёвм § ЇЁбм",GREEN); ramka(27,16,53," Џ®ЁбЄ ",GREEN); ramka(27,19,53," ‚л室 ",GREEN); break; } case 3: { ramka(27,4,53,"Џа®б¬®ваҐвм Ў §г",GREEN); ramka(27,7,53,"„®Ў ўЁвм § ЇЁбм",GREEN); ramka(27,10,53,"ђҐ¤ ЄвЁа®ў вм § ЇЁбм",RED); ramka(27,13,53,"“¤ «Ёвм § ЇЁбм",GREEN); ramka(27,16,53," Џ®ЁбЄ ",GREEN); ramka(27,19,53," ‚л室 ",GREEN); break; } case 4: { ramka(27,4,53,"Џа®б¬®ваҐвм Ў §г",GREEN); ramka(27,7,53,"„®Ў ўЁвм § ЇЁбм",GREEN); ramka(27,10,53,"ђҐ¤ ЄвЁа®ў вм § ЇЁбм",GREEN); ramka(27,13,53,"“¤ «Ёвм § ЇЁбм",RED); ramka(27,16,53," Џ®ЁбЄ ",GREEN); ramka(27,19,53," ‚л室 ",GREEN); break; } case 5: { ramka(27,4,53,"Џа®б¬®ваҐвм Ў §г",GREEN); ramka(27,7,53,"„®Ў ўЁвм § ЇЁбм",GREEN); ramka(27,10,53,"ђҐ¤ ЄвЁа®ў вм § ЇЁбм",GREEN); ramka(27,13,53,"“¤ «Ёвм § ЇЁбм",GREEN); ramka(27,16,53," Џ®ЁбЄ ",RED); ramka(27,19,53," ‚л室 ",GREEN); break; } case 6: { ramka(27,4,53,"Џа®б¬®ваҐвм Ў §г",GREEN); ramka(27,7,53,"„®Ў ўЁвм § ЇЁбм",GREEN); ramka(27,10,53,"ђҐ¤ ЄвЁа®ў вм § ЇЁбм",GREEN); ramka(27,13,53,"“¤ «Ёвм § ЇЁбм",GREEN); ramka(27,16,53," Џ®ЁбЄ ",GREEN); ramka(27,19,53," ‚л室 ",RED); break; } } } struct record addrec() { struct record rec; char n [16]; int i; int k; float j; clrscr(); printf("‚ўҐ¤ЁвҐ д ¬Ё«Ёо: "); scanf("%s",&n); for (k=0;k&lt;16;k++) { rec.surname[k]=n[k]; } printf("‚ўҐ¤ЁвҐ Ё¬п: "); scanf("%s",&n); for (k=0;k&lt;16;k++) { rec.name[k]=n[k]; } printf("‚ўҐ¤ЁвҐ ЈагЇЇг: "); scanf("%s",&n); for (k=0;k&lt;16;k++) { rec.group[k]=n[k]; } printf("‚ўҐ¤ЁвҐ ®жҐ­Єг Ї® ¬ вЁЄҐ: "); scanf("%i",&i); rec.mat=i; printf("‚ўҐ¤ЁвҐ ®жҐ­Єг Ї® дЁ§ЁЄҐ: "); scanf("%i",&i); rec.fiz=i; printf("‚ўҐ¤ЁвҐ ®жҐ­Єг Ї® Ё­д®а¬ вЁЄҐ: "); scanf("%i",&i); rec.inf=i; j=(rec.inf+rec.fiz+rec.mat); rec.sred=j/3; return(rec); } void printrec(struct record rec[30],int c,int c1,int flag) { int i; if (flag==0) { clrscr(); printf("|Ќ®¬|” ¬Ё«Ёп |€¬п |ѓагЇЇ  |Њ в|”Ё§|€­д|‘।|\n"); } for (i=c1;i&lt;c;i++) { printf("|%-3d|",i+1); printf("%-16s|",rec[i].surname); printf("%-16s|",rec[i].name); printf("%-8s|",rec[i].group); printf("%-3d|",rec[i].mat); printf("%-3d|",rec[i].fiz); printf("%-3d|",rec[i].inf); printf("%-1.2f|\n",rec[i].sred); } } void search(struct record rec[30],int c, int n) { float ff; int i,f,j,l,z=0; char q[16]="\0"; switch(n) { case 1: printf("‚ўҐ¤ЁвҐ бва®Єг Ї®ЁбЄ \n"); scanf("%s",&q); clrscr(); for (i=0;i&lt;c;i++) { l=0; for (j=0;j&lt;strlen(q);j++) { if (rec[i].surname[j]==q[j]) l=1; else l=0; } if (l==1) { printrec(rec,i+1,i,z); z++; } } if (z==0) printf("‘®ўЇ®¤Ґ­Ё© ­Ґ¤!!! Ё¤ЁвҐ ЁйЁвҐ ­  ᥢҐаҐ =)\n"); getch(); break; case 2: printf("‚ўҐ¤ЁвҐ бва®Єг Ї®ЁбЄ \n"); scanf("%s",&q); clrscr(); for (i=0;i&lt;c;i++) { l=0; for (j=0;j&lt;strlen(q);j++) { if (rec[i].name[j]==q[j]) l=1; else l=0; } if (l==1) { printrec(rec,i+1,i,z); z++; } } if (z==0) printf("‘®ўЇ®¤Ґ­Ё© ­Ґ¤!!! Ё¤ЁвҐ ЁйЁвҐ ­  ᥢҐаҐ =)\n"); getch(); break; case 3: printf("‚ўҐ¤ЁвҐ бва®Єг Ї®ЁбЄ \n"); scanf("%s",&q); clrscr(); for (i=0;i&lt;c;i++) { l=0; for (j=0;j&lt;strlen(q);j++) { if (rec[i].group[j]==q[j]) l=1; else l=0; } if (l==1) { printrec(rec,i+1,i,z); z++; } } if (z==0) printf("‘®ўЇ®¤Ґ­Ё© ­Ґ¤!!! Ё¤ЁвҐ ЁйЁвҐ ­  ᥢҐаҐ =)\n"); getch(); break; case 4: printf("‚‚Ґ¤ЁвҐ ®жҐ­Єг\n"); scanf("%i",&l); j=0; for (i=0; i&lt;c; i++) if (l==rec[i].mat) { printrec(rec,i+1,i,z); z++; j++; } if (j==0) printf("‘®ўЇ®¤Ґ­Ё© ­Ґ¤!!! Ё¤ЁвҐ ЁйЁвҐ ­  ᥢҐаҐ =)\n"); getch(); break; case 5: printf("‚‚Ґ¤ЁвҐ ®жҐ­Єг\n"); scanf("%i",&l); j=0; for (i=0; i&lt;c ;i++) if (l==rec[i].fiz) { printrec(rec,i+1,i,z); z++; j++; } if (j==0) printf("‘®ўЇ®¤Ґ­Ё© ­Ґ¤!!! Ё¤ЁвҐ ЁйЁвҐ ­  ᥢҐаҐ =)\n"); getch(); break; case 6: printf("‚‚Ґ¤ЁвҐ ®жҐ­Єг\n"); scanf("%i",&l); j=0; for (i=0;i&lt;c;i++) if (l==rec[i].inf) { printrec(rec,i+1,i,z); z++; j++; } if (j==0) printf("‘®ўЇ®¤Ґ­Ё© ­Ґ¤!!! Ё¤ЁвҐ ЁйЁвҐ ­  ᥢҐаҐ =)\n"); getch(); break; case 7: printf("‚‚Ґ¤ЁвҐ ®жҐ­Єг\n"); scanf("%f",&ff); j=0; for (i=0;i&lt;c;i++) if (ff==rec[i].sred) { printrec(rec,i+1,i,z); z++; j++; } if (j==0) printf("‘®ўЇ®¤Ґ­Ё© ­Ґ¤!!! Ё¤ЁвҐ ЁйЁвҐ ­  ᥢҐаҐ =)\n"); getch(); break; } } int main() { struct record base [30]; int nn; int c; int count=1; int basecount=0; int i,j; int fd; float q; fd=open("W:/LAB2_2/BAZA.DB",O_RDONLY); if (fd!=-1) { read(fd,&basecount,sizeof(int)); for (i=0;i&lt;basecount;i++) read(fd,&base[i],sizeof(struct record)); } close(fd); clrscr(); while (c!=283) { menu(count); c = bioskey(0); switch(c) { case 18432: if (count!=1) count--; break; case 20480: if (count!=6) count++; break; case 7181: { switch(count) { case 1:printrec(base,basecount,0,0); getch(); clrscr(); menu(count); break; case 2:base [basecount]=addrec(); basecount++; clrscr(); menu(count); break; case 3:clrscr(); printf("‚ўҐ¤ЁвҐ ­®¬Ґа । ЄвЁа㥬®© § ЇЁбЁ:\n"); scanf("%d",&nn); --nn; clrscr(); printf("‚л । ЄвЁагҐвҐ ¤ ­­го § ЇЁбм:\n"); printrec(base,nn+1,nn,0); getch(); clrscr(); base [nn]=addrec(); clrscr(); menu(count); break; case 4:clrscr(); printf("‚ўҐ¤ЁвҐ ­®¬Ґа г¤ «пҐ¬®© § ЇЁбЁ:\n"); scanf("%d",&nn); --nn; printrec(base,nn+1,nn,0); clrscr(); for(i=nn;i&lt;basecount-1;i++) { base[i]=base[i+1]; } basecount--; menu(count); break; case 5:clrscr(); printf("‚ўҐўЁвҐ Ї®«Ґ Ї®ЁбЄ :\n 1 - ” ¬Ё«Ёп\n 2 - €¬п\n 3 - ѓагЇЇ \n 4 - ЋжҐ­Є  Ї® ¬ вҐ¬ вЁЄҐ\n 5 - ЋжҐ­Є  Ї® дЁ§ЁЄҐ\n 6 - ЋжҐ­Є  Ї® Ё­д®а¬ вЁЄҐ\n 7 - ‘।­Ё© Ў «\n"); scanf("%d",&nn); search(base,basecount,nn); menu(count); break; case 6: fd=open("W:/LAB2_2/BAZA.DB",O_CREAT|O_RDWR|O_TRUNC); if (fd!=-1) { write(fd,&basecount,sizeof(int)); for (i=0;i&lt;basecount;i++) write(fd,&base[i],sizeof(struct record)); } close(fd); exit(); } } } } }
Post #: 1166
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 18:04:15.346666   
craken

Сообщений: 15
Оценки: 0
Присоединился: 2009-07-17 20:06:16.480000
ну ё маё, я и учу… ты предлагаеш чтобы тип был string а не char??? Можете помоч с данной задачей? мне главное отладить вывод, алгоритм сортировки и тд я сам напишу. делаю по книге павловская щупак, так там вообще половина всего не работало, просто новую тему начали проходить вот вопросы и возникают… если не охота разбиратся лучше так и сказать… я просто уже 2 день бьюсь над ней
Post #: 1167
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 18:21:46.290000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Для копирования строк используй strcpy, типа:

strcpy( pv->otvet, man.otvet );

Просто сильно много тебе объяснять ;), если хочется правильно сделать.
Post #: 1168
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 21:09:14.783333   
craken

Сообщений: 15
Оценки: 0
Присоединился: 2009-07-17 20:06:16.480000
спасибо буду разбираться))
Post #: 1169
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 23:32:44.030000   
craken

Сообщений: 15
Оценки: 0
Присоединился: 2009-07-17 20:06:16.480000
жесть, учебник называется((( половину кода пришлось переписать, вот чему нас учат??
p.s. есть хоть на кого свалить xD
Post #: 1170
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 23:41:31.503333   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
Всегда избегал объявление в теле цикла каких-либо переменных, думал, что при каждой итерации, они будут переобъявляться, и их адреса будут меняться(хз почему я так думал), но вот сейчас попробовал посмотреть адреса переменных в цикле и понял, что эти самые переменные объявляются 1 раз. правильно я понял?

#include &lt;iostream&gt; int main(void) { &nbsp;&nbsp;&nbsp; int i = 0; &nbsp;&nbsp;&nbsp; while(i &lt; 4) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a = 1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int *pA = &amp;a; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int b = 2; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int *pB = &amp;b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "*pA= " &lt;&lt; pA &lt;&lt; "\t*pB= " &lt;&lt; pB &lt;&lt;std::endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++i; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; system("PAUSE"); }
И мне кажется, что я не до конца понимаю разницу между объявлением и определением. Объявить переменную, как я понял - это значит, выделить для нее область памяти, соотв. ее типу и дать ей имя. А что тогда есть определить переменную?
Post #: 1171
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 23:49:01.466666   
Sрam

Сообщений: 2863
Оценки: 372
Присоединился: 2009-01-16 15:23:43.276666
Можно объявить переменную и инициализировать(определить) её
объявить: выделить под нее память, но не присваивать каких либо значений
инициализировать : присвоить ей какие либо значение… Понято?
Ошибочка….
пямять при обьявл не выделяется!
PS на сколько я знаю функция system использутся только совместно с библиотекой stdlib.h …
Post #: 1172
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 23:53:39.753333   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

PS на сколько я знаю функция system использутся только совместно с библиотекой stdlib.h …

в с++ - не надо подключать доп хедеров.

Значит определить переменную и инициализировать - это синонимы?! стыдно, конечно, задавать такие глупости, но это так сказать, всплыло что-то внезапно…
Post #: 1173
RE: Вопросы по C/C++ (Для новичков) - 2010-02-26 23:58:09.506666   
Sрam

Сообщений: 2863
Оценки: 372
Присоединился: 2009-01-16 15:23:43.276666
Нет, переменную нельзя проинициализировать не обьявив!!!
Post #: 1174
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 00:12:36.330000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: iidsp
Всегда избегал объявление в теле цикла каких-либо переменных, думал, что при каждой итерации, они будут переобъявляться, и их адреса будут меняться(хз почему я так думал), но вот сейчас попробовал посмотреть адреса переменных в цикле и понял, что эти самые переменные объявляются 1 раз. правильно я понял?

Да, ты правильно понял. Чтобы переменные, объявленные в блоке, создались повторно надо выйти из блока и войти снова. То есть цикл должен завершиться, и начаться заново, тогда это будут уже другие переменные.

quote:

ORIGINAL: iidsp
И мне кажется, что я не до конца понимаю разницу между объявлением и определением. Объявить переменную, как я понял - это значит, выделить для нее область памяти, соотв. ее типу и дать ей имя. А что тогда есть определить переменную?

Строго говоря всё не так. Объявление (declaration) переменной – это просто объявление. Это когда мы говорим компилятору что такая переменная должна быть, но не выделяем под неё память. А определение (definition) – это тоже самое но с выделением памяти. Определение может сопровождаться инициализацией. Например:extern int i; //чистой воды объявление. мы говорим что "есть переменная i с типом int" int j; //определение -- мы требуем от компилятора создать переменную j с типом int int k = 5; // определение с инициализацией Но, как правило, никто не следит за строгостью своего языка, и везде используют термин "объявление".
Post #: 1175
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 00:45:44.856666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

Да, ты правильно понял. Чтобы переменные, объявленные в блоке, создались повторно надо выйти из блока и войти снова. То есть цикл должен завершиться, и начаться заново, тогда это будут уже другие переменные.


к сожалению, у меня не получилось получить другие переменные(для меня другие переменные это те, у которых сменился адрес, мб я не прав)
#include &lt;iostream&gt; int main(void) { &nbsp;&nbsp; m1: &nbsp;&nbsp; for(int i = 0; i &lt; 2; ++i) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j = 0; j &lt; 2; ++j) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a = 1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int *pA = &amp;a; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int b = 2; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int *pB = &amp;b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "*pA= " &lt;&lt; pA &lt;&lt; "\t*pB= " &lt;&lt; pB &lt;&lt;std::endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; } &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; system("PAUSE"); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; goto m1;&nbsp;&nbsp; } да же первый(и последний) раз в жизни написал goto.

quote:

Но, как правило, никто не следит за строгостью своего языка, и везде используют термин "объявление".

спасибо, буду говорить правильно!
Post #: 1176
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 00:48:14.430000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

extern int i; //чистой воды объявление. мы говорим что "есть переменная i с типом int"
а в каком случае нам может это понадобиться?
Post #: 1177
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 00:50:51.270000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

quote:

extern int i; //чистой воды объявление. мы говорим что "есть переменная i с типом int"

а в каком случае нам может это понадобиться?

примерный ответ нашел тут http://www.rsdn.ru/forum/cpp/2706624.1.aspx
Post #: 1178
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 01:08:50.576666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: iidsp
quote:

Да, ты правильно понял. Чтобы переменные, объявленные в блоке, создались повторно надо выйти из блока и войти снова. То есть цикл должен завершиться, и начаться заново, тогда это будут уже другие переменные.


к сожалению, у меня не получилось получить другие переменные(для меня другие переменные это те, у которых сменился адрес, мб я не прав)

Сложный философский вопрос. На самом деле адрес новой переменной может просто совпасть со старым. Но я считаю, что если мы пишем: int k = 1; и после этого значение k всегда 1, то это значит что мы создаём новую переменную.
Я, кстати, не прав был. Переменные будут меняться при переходе от одной итерации к другой. Смотри: for (i = 0; i &lt; 10; i ++) { for (j = 0; j &lt; 3; j ++) { int k = 0; printf ("[%2d;%2d] k == %d\n", i, j, ++k); } p[i] = (char*)alloca (32); } выводит на экран:[ 0; 0] k == 1 [ 0; 1] k == 1 [ 0; 2] k == 1 [ 1; 0] k == 1 [ 1; 1] k == 1 [ 1; 2] k == 1 [ 2; 0] k == 1 [ 2; 1] k == 1 [ 2; 2] k == 1 [ 3; 0] k == 1 [ 3; 1] k == 1 [ 3; 2] k == 1 [ 4; 0] k == 1 ...Значение k ресетится каждый раз. Хм. Вот что значит иметь C-шную привычку объявлять все локальные переменные в начале функции. Такая важная особенность, а я не знаю.
Post #: 1179
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 01:57:38.460000   
craken

Сообщений: 15
Оценки: 0
Присоединился: 2009-07-17 20:06:16.480000
помогите ещё раз, вылетает ошибка

Laba_9.obj : error LNK2001: unresolved external symbol "void __cdecl find_u(struct Man *,int,char,char,char)" (?find_u@@YAXPAUMan@@HDDD@Z)

void find_u (Man* beg, int age, const char *pol,const char *obroz, const char *otvet){ &nbsp; &nbsp;Man* pv = beg; &nbsp; &nbsp;bool flak = false; &nbsp; &nbsp;while (pv){ &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; if (pv-&gt;age == age) &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (strcmp(pv-&gt;pol, pol)==0) &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (strcmp(pv-&gt;obroz, obroz)==0) &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (strcmp(pv-&gt;otvet, otvet)==0){ &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("%d,%s,%s,%s\n", pv-&gt;age, pv-&gt;pol, pv-&gt;obroz, pv-&gt;otvet); &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; flak=true; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }; &nbsp; &nbsp;}; &nbsp; &nbsp;if (!flak) &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; printf(Rus("Íåò òàêèõ àíêåò")); }
нужно просто сравнить pv->pol и pol, и т.д.

а там пораметры должны быть const
Post #: 1180
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 02:46:56.250000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

Значение k ресетится каждый раз. Хм. Вот что значит иметь C-шную привычку объявлять все локальные переменные в начале функции. Такая важная особенность, а я не знаю.

И это был бы неплохим вопросом на собеседовании =)

дак можно определять переменные внутри цикла - или это плохой стиль?

Post #: 1181
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 02:50:47.800000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
Читая Страуструпа, наткнулся на такой момент, который меня ввел в ступор
s1 = s1 + '\n';
s2 += '\n';

Он пишет, что оба способа эквивалентны, но он предпочитает второй, т.к, внимание, он скорее всего реализован более эффективно(3 спец издание стр. 85). Он что не уверен?
Post #: 1182
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 03:04:29.290000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

дак можно определять переменные внутри цикла - или это плохой стиль?

Да нет, вряд ли.
quote:

Он пишет, что оба способа эквивалентны, но он предпочитает второй, т.к, внимание, он скорее всего реализован более эффективно. Он что не уверен?

А как он может быть уверен в том, что все компиляторы C++ будут из s2+='\n' делать более эффективный код? Хуже того, я думаю что современные компиляторы C++ генерят одинаково эффективный код для обоих выражений. Они в состоянии понять, что семантически выражения одинаковы. А может на каких-то платформах (не на x86) нельзя += сделать как-то по-особенному. Это на x86 инструкция `add a, b' работает прямо как `a+=b', а на других может быть нету такой add, но есть инструкция `add a, b, c', которая эквивалентна `a=b+c', причём инструкция выкидывает исключение, если a и b – это одна и та же ячейка памяти. На такой гипотетической платформе += не будет лучше.
Но я подчеркну, вряд ли на x86 a+=b скомпилируется во что-то более эффективное чем a=a+b, я думаю компилятор заметит одинаковость и реализует оба варианта одним и тем же ассемблерным кодом, одной инструкцией add.
Post #: 1183
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 03:13:50.316666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

Да нет, вряд ли.


а почему тогда у Бьерна написано так
bool accept3() { &nbsp;&nbsp;&nbsp; int tries = 1; &nbsp;&nbsp;&nbsp; while(tries &lt; 4) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char answer = 0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin &gt;&gt; answer; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... &nbsp;&nbsp;&nbsp; }
Post #: 1184
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 03:33:56.146666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: iidsp
quote:

Да нет, вряд ли.

а почему тогда у Бьерна написано так

Я ж говорю: вряд ли это плохой стиль. Да и вообще, понятия о хорошем/плохом стиле очень расплывчаты. Важен не стиль, важно следование стилю. Хоть какому-нибудь.
Post #: 1185
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 11:45:18.446666   
Lost_boy

Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
iidsp главное чтобы ты знал, что ты делаешь и ясно понимал, что в твоем конкретном случае будет предпочтительней.
На счет объявления переменных в цикле, это абсолютно нормально, так что можешь не мучать свой мозг этим вопросом =)
Post #: 1186
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 18:01:10.893333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Попробуем "на пальцах":
int foo( void ) { int i; // Do something... for ( i = 0; i &lt; 10; ++i ) { int var; // Будем говорить про эту переменную. var = 5; } return 0; } В данном случае переменная var объявлена внутри какого-то блока. Память под переменную var будет выделена при входе в функцию, но при написании программы сама переменная будет "видна" только внутри блока for. Т.е. в коде переменные можно использовать только внутри того блока, в котором они объявлены.

Но если сделать такой выкрутас:
int foo( void ) { int i; int *p = 0; // Do something... for ( i = 0; i &lt; 10; ++i ) { int var; if ( p != &var ) { std::cout &lt;&lt; "Value of P changed" &lt;&lt; std::endl; // Будет выведено только 1 раз. p = &var; } } return 0; } То сообщение будет выведено только один раз, когда p (проинициализированный нулём) будет первый раз сравниваться.
Но такими "фичами" крайне не рекомендуется (да и незачем) пользоваться в языке С++, когда в роли переменной будут объекты. Для объектов деструктор будет вызываться сразу после выхода из блока, где объявлена переменная, но память будет освобождаться после выхода из функции.

В общем, правило простое: где объявил переменную - там её и используй. Стоит считать, что это каждый раз новая переменная. Но на использование памяти место объявления переменной никак не влияет.
Post #: 1187
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 21:47:27.150000   
craken

Сообщений: 15
Оценки: 0
Присоединился: 2009-07-17 20:06:16.480000
ребят чего за фигня такая??? если ввести a и b MMM и MMM
работает всё, а если mmm и mmm, то зацикливание.

а русские вообще не тянет

void sravnenie(const char *a,const char *b){ &nbsp;&nbsp; &nbsp;if (strcmp(a,b)==0) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;printf(Rus("Не равны\т")); &nbsp;&nbsp; &nbsp;else &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;printf(Rus("равны\n")); }
Post #: 1188
RE: Вопросы по C/C++ (Для новичков) - 2010-02-27 21:53:32.813333   
Sрam

Сообщений: 2863
Оценки: 372
Присоединился: 2009-01-16 15:23:43.276666
Полностью листинг покажи
Post #: 1189
RE: Вопросы по C/C++ (Для новичков) - 2010-02-28 01:58:17.570000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
используйте ли вы в своих программах typedef? Нужно ли это… 
Post #: 1190
RE: Вопросы по C/C++ (Для новичков) - 2010-02-28 04:34:05.690000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
quote:

ORIGINAL: iidsp

используйте ли вы в своих программах typedef? Нужно ли это… 


Смысл опроса? Юзать что-то вроде:
#ifdef UNICODE
typedef std::wstring string;
#else
typedef std::string string;
#endif

typedef обычно юзаю только для объявления указателей на функции, других ситуаций, где с ним было бы реально удобнее - не встречал (или не помню).

Примеры использования посмотри тут: http://code.google.com/intl/ru/query/#q=typedef
Post #: 1191
RE: Вопросы по C/C++ (Для новичков) - 2010-02-28 05:26:06.716666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
ни какой это не опрос, просто я изучаю с++ и то, что мне кажется на данном этапе непонятным в плане использования, я спрашиваю… так. что - это всего лишь моя гипер любознательность…
Post #: 1192
RE: Вопросы по C/C++ (Для новичков) - 2010-02-28 06:19:39.560000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Если загодя сделать тайпдеф, то потом запись можно нехило укоротить код и сделать его понятнее:
for (list&lt;vect&lt;GLfloat, 4&gt; &gt;::iterator i = p.begin(); i != p.end (); i++) Сравните с вариантом, когда вместо list<vect<GLfloat, 4> >::iterator стоит что-нибудь в стиле: vlist_iter_t
Post #: 1193
RE: Вопросы по C/C++ (Для новичков) - 2010-02-28 13:49:55.413333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
quote:


Сравните с вариантом, когда вместо list&lt;vect&lt;GLfloat, 4&gt; &gt;::iterator стоит что-нибудь в стиле: vlist_iter_t

Если проект большой и у него есть косяки в дизайне (приходилось одну софтину дописывать), то разные программисты могут начать плодить тайпдэфы. Причём разные на одни и те же типы данных. Очень сложно потом разобраться, где и что.

Укоротить код - да, сделать понятнее - не факт. Нужно жёстко заранее оговаривать правила именования типов, да и то, для надёжности придётся постоянно лазить и смотреть эти тайпдэфы. Лично мне всё понятно и без тайпдэфов. Хочется более лаконичного языка - вперёд, на C# ;). Хотя это тоже вопрос вкуса.

——-
Тут подумал, и решил дописать, что всё-таки всё зависит от области применения тайпдэфов. Лупить их везде подрят не стоит, но и лишними они тоже не будут.
Post #: 1194
RE: Вопросы по C/C++ (Для новичков) - 2010-03-01 13:42:26.383333   
little_programmer

Сообщений: 7
Оценки: 0
Присоединился: 2010-03-01 13:37:15.853333
Господа программисты, помогите решить вот такую задачу, а если и не решить, то хотя бы подскажите алгорит решения..

Задача. Имеются 5 значений в формате sasha_*набор разных символов* и 5 значений в формате masha_*набор разных символов*, каждому из которых соответствует определенный код md5 в формате 415cd536c9fa1a491b20ee6e9a75a377 . Задача: составить программу с интерфейсом 1 поле для ввода и 1 кнопка, которая после ввода кода 63946d05e8869f6498b60fea371a46aa и нажатия на кнопку анализировала бы его, подставляя имеющиеся в базе значения. Все символы определять не обязательно, достаточно определить только первую букву (s или m). Задача не решается с помощью словаря.

Таблица имеющихся данных:
sasha_5L27dhuVOB - 7345f8a66509c9371d7714a9552f81b4
sasha_2Yg2KFH56Y - 95009f023f870652545eb58205a7b5af
sasha_pRo6np0g2Y - 6f0a7fbab551e6c4d81e0017498ac482
sasha_O5sHB08x6T - 30d825ca30c1ed17ee8e9b38756d46ee
sasha_KVJ5cA64tK - afebc08dd424fdb0559d6523847db2fd
masha_tK4D5GPr75 - 3e55dcbc3487e59d5f8a020355eb643b
masha_0G2FRJ810N - e40a0cf8810252d79f3cc1f15a420864
masha_biR2Q7Lb7O - ccb5d49cfe6476f7a4dc1224881f53b1
masha_7OS1v03GiI - 2cf1287b62d3f3ec5eb57b2c518ba25e
masha_6KpkyQC237 - 2a6e425d56380293a8907e495e6888d6

Ответ: 63946d05e8869f6498b60fea371a46aa - ?asha_*набор разных символов*.
Post #: 1195
RE: Вопросы по C/C++ (Для новичков) - 2010-03-01 14:50:59.170000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
1. Берешь первое значение из базы, находишь его md5
2. Сравниваешь полученный хэш с введённым
3. Если остались ещё записи - переходишь к пункту 1.

P.S. А вообще нифига не понятно, что должно быть после слова "Ответ:"
Post #: 1196
RE: Вопросы по C/C++ (Для новичков) - 2010-03-01 14:53:21.040000   
sanday

Сообщений: 41
Оценки: 0
Присоединился: 2010-02-06 12:52:26.896666
quote:

Следующая моя задача - просят ввести число нечетное ( от 1 до 19) - и на основании этого числа, построить ромб, где введенное число - является числом строк в ромбе, так вот, если использовать выше написанный код, для данной задачи, уж очень большим и на вид не удобным получается код.


код:
//Программа для печати ромба с заданым числом строк #include &lt;iostream&gt; using namespace std; main() { &nbsp;&nbsp; int line, gap; &nbsp;&nbsp; cout &lt;&lt; "Введите нечетное число строк от 1 до 19: "; &nbsp;&nbsp; cin &gt;&gt; line; &nbsp;&nbsp; gap = (line - 1) / 2; &nbsp;&nbsp; &nbsp;&nbsp; for (int j = 0; j &lt;= gap; j++) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 1; i &lt;= gap - j; i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int a = 0; a &lt;= j; a++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int b = 0; b &lt;= j - 1; b++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; '*'; &nbsp;&nbsp; cout &lt;&lt; endl; &nbsp;&nbsp; } &nbsp;&nbsp; &nbsp;&nbsp; for (int k = 0; k &lt;= gap - 1; k++) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt;= k; i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; " "; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int a = 1; a &lt;= gap - k; a++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int b = 1; b &lt;= gap - k - 1; b++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "*"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; endl; &nbsp;&nbsp; &nbsp;&nbsp; } system("pause"); return 0; } немного попроще, с учетом моих знаний на данном этапе)))
Post #: 1197
RE: Вопросы по C/C++ (Для новичков) - 2010-03-01 15:14:47.650000   
little_programmer

Сообщений: 7
Оценки: 0
Присоединился: 2010-03-01 13:37:15.853333
Надо чтобы программа как-то сравнивала (как я не понимаю)..

А в ответе должна быть буква m или s. То есть нужно сделать такую программку и ввести в поле 63946d05e8869f6498b60fea371a46aa. Ответом является то, что выдаст программа.
Post #: 1198
RE: Вопросы по C/C++ (Для новичков) - 2010-03-01 16:04:04.410000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: little_programmer

Надо чтобы программа как-то сравнивала (как я не понимаю)..

А в ответе должна быть буква m или s. То есть нужно сделать такую программку и ввести в поле 63946d05e8869f6498b60fea371a46aa. Ответом является то, что выдаст программа.

Мне закономерность не понятна. В каком случае и что выводить. Опиши предполагаемый алгоритм работы программы. Телепаты в отпуске.
Post #: 1199
RE: Вопросы по C/C++ (Для новичков) - 2010-03-01 16:21:21.653333   
little_programmer

Сообщений: 7
Оценки: 0
Присоединился: 2010-03-01 13:37:15.853333
Работа программы такова: вводишь в строку md5 код 63946d05e8869f6498b60fea371a46aa и нажимаешь на кнопку, после чего программа дает ответ.
Алгоритм: после ввода md5 кода программа орбатится к своей базе данных. Грубо говоря, она состоит из 2-х столбцов: в первом все md5 коды, при расшифровке которых первая буква - s (т.е. sasha_*10 цифр*, это точно известно), во втором тоже самое, только для буквы m. Программа должна как-то сравнить введенное значение со значениями md5, имеющимися в базе. Если больше всего подойдет любой из md5 кодов "правого столбца", то программа выводит ответ "s", а если "левого" - "m". То есть программа выбирает одно из двух - s или m.

Я не могу понять, по какому принципу сравнивать введенный md5 код с md5 кодами в базе.
Post #: 1200
Страниц:  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Все форумы >> [Компилируемые языки] >> RE: Вопросы по C/C++ (Для новичков)







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.