| Код | #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #define DL_FIO 22 #define DL_MAUTO 10 #define DL_NOM 7 #define STRMAX 200 struct AUTO { char fio [DL_FIO]; char mauto [DL_MAUTO]; char gosnom [DL_NOM+2]; }; struct EL_MAS { char fio [DL_FIO]; char gosnom [DL_NOM+2]; }; void sort (struct EL_MAS ms [],int n);
void AutoFIO (FILE *f);
void AutoKOL (FILE *f);
int main () { FILE *f; char r; clrscr (); f=fopen ("auto.txt", "r"); if (f==NULL) { puts ("fail ne najden\n"); getch (); clrscr (); return 1; } do { puts("Press any key for use Menu"); getch(); clrscr(); puts ("\n============================="); puts ("\n Vyberite punkt menyu"); puts ("\n 1. Familii vladelcev po marke avto"); puts ("\n 2. Kolichestvo avto kazhdoj marki"); puts ("\n 3. Exit"); puts ("\n=============================\n"); r=getche ();
switch (r) { case '1':clrscr(); AutoFIO (f);rewind(f); break; case '2': AutoKOL (f);rewind(f); break; case '3': break; default: puts ("\n Nado vvodit' nomer ot 1 do 3"); break; } } while (r!='3'); fclose (f); return 0; } void AutoKOL(FILE *f) { struct AUTO tz; int tab[31];int i; char mmauto[31][DL_MAUTO]; memset(tab, 0, sizeof(tab)); memset(mmauto, ' ', sizeof(mmauto)); while(fgets((char *)&tz, sizeof(struct AUTO), f)) { tz.mauto[DL_MAUTO-1]='\0'; for(i = 0; i < 31; ++i) if(strcmp(mmauto[i], tz.mauto) == 0) { tab[i]++; break; } else if(mmauto[i][0] == ' ') { strcpy(mmauto[i], tz.mauto); tab[i] = 1; break; } } printf("avto kolichestvo\n==================================\n"); for( i = 0; i < 31; ++i) { if(tab[i] == 0) break; printf("%s %d\n", mmauto[i], tab[i]); } getch(); clrscr(); }
void AutoFIO (FILE *f) { int k; struct EL_MAS ms [STRMAX]; int n; int i; char b[DL_MAUTO]; struct AUTO tz; puts ("vvedite marku avto"); scanf("%s",b); n=0; while (n<STRMAX && fgets((char *)&tz, sizeof (tz), f)!=NULL) { tz.mauto [DL_MAUTO-1]='\0'; tz.fio [DL_FIO-1]='\0';for(k=0;(tz.mauto[k]!='\0') && k<DL_MAUTO-1;k++) if(tz.mauto[k]==' ') tz.mauto[k]='\0'; if (strcmp(tz.mauto,b)==0) { strcpy (ms[n].gosnom, tz.gosnom); strcpy (ms[n].fio, tz.fio); n++; } } if (n==0) { puts ("net avto dannoj marki"); getch (); clrscr (); return ; } else { sort (ms, n); puts ("\n Spisok vladelcev:"); for (i=0; i<n; i++) { printf ("\n %d. %s %s", i+1, ms[i].fio, ms[i].gosnom); if ((i+1)%22==0) { puts ("dlya prodolzheniyz nazhmite lyubuyu klavishu"); getch (); clrscr (); } } } }
void sort (struct EL_MAS ms [],int n) { int k, i=0; struct EL_MAS s; for (k=n-1; k>=1; k--) if (strcmp (ms[i].fio, ms[i+1].fio)>0) { s=ms[i]; ms[i]=ms[i+1]; ms[i+1]=s; } }
|
Я уже писал эту программу. Но сейчас другой вопрос. Самая концовка:
| Код | void sort (struct EL_MAS ms [],int n) { int k, i=0; struct EL_MAS s; for (k=n-1; k>=1; k--) if (strcmp (ms[i].fio, ms[i+1].fio)>0) { s=ms[i]; ms[i]=ms[i+1]; ms[i+1]=s; } }
|
Задача: По введенной марке автомобиля вывести Фамилии (в алфавитном порядке) и госномера машин данной марки. В файле все фамилии по алфавиту. Но если переставить 2 фамилии местами, то вывод по алфавиту не происходит, т.е. массив не сортируется. Помогите решить. Скачать файл (auto.txt), в котором занесены фамилии владельцев, марки автомобилей и гос. номера можно тут http://webfile.ru/692750 З.Ы. Файл отсортирован по алфавиту, поменяйте местами 2 строки. Заранее спасибо. |