Дан файл, содержащий сведения о учениках школы. Выяснить, имеются ли в школе однофамильцы - C (СИ)
Формулировка задачи:
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учился. Дан файл, содержащий сведения о учениках школы. Выяснить, имеются ли в школе однофамильцы. Имеются ли однофамильцы в параллельных классах классах. Имеются ли однофамильцы в каком-нибудь классе.
Это всё, что смог сделать,не знаю как сверить всё со всеми и как сделать так, чтобы количество строк для считывания задавалось в файле 1 строкой.
Файл вида:
5 \\ кол-во строк в файле
ФФФФФФ ИИИИИ ВВВВ
ФФФФФФ ИИИИИ ВВВВ
ФФФФФФ ИИИИИ ВВВВ
ФФФФФФ ИИИИИ ВВВВ
ФФФФФФ ИИИИИ ВВВВ
Не против других способов решения. Обязательно наличие класса. Если не сложно сделайте готовом варианте. Заранее огромное спасибо.
#include <stdio.h> #include <stdlib.h> #include <string.h> struct list { int q; char name[20]; char fam[30]; char dan[10]; }mys[5]; int main() { int k=0; FILE *fp; int i=0; if ((fp = fopen("list.txt","r+")) == NULL) printf("ERROR!"); else printf("File found!\n"); for(i=1;i<5;i++) fscanf(fp,"%s %s %s", mys[i].fam, mys[i].name,mys[i].dan); for(i=0;i<5;i++) { printf("%s %s %s", mys[i].name, mys[i].fam,mys[i].dan); printf("\n"); } for(i=0;i<5;i++) for(int j=i+1;j<5;j++) {printf ("%s %s\n",mys[i].fam, mys[j].fam); if( strcmp( mys[i].fam, mys[j].fam ) == 0 ) k++; } if(k>0) printf("FOUND\n"); else printf("NOT FOUND %d",k); system("PAUSE"); }
Решение задачи: «Дан файл, содержащий сведения о учениках школы. Выяснить, имеются ли в школе однофамильцы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> struct list { int q; char name[20]; char fam[30]; char dan[10]; }mys[5]; int main() { int k=0,n,odin_klass=0,drug_klass=0; FILE *fp; int i=0,j; if ((fp = fopen("list.txt","r")) == NULL) printf("ERROR!"); else printf("File found!\n"); fscanf(fp,"%d",&n); for(i=1;i<n;i++) fscanf(fp,"%s %s %s", mys[i].fam, mys[i].name,mys[i].dan); for(i=0;i<n;i++) { printf("%s %s %s", mys[i].name, mys[i].fam,mys[i].dan); printf("\n"); } for(i=0;i<n;i++) for(j=i+1;j<n;j++) { // printf ("%s %s\n",mys[i].fam, mys[j].fam); if( strcmp( mys[i].fam, mys[j].fam ) == 0 ) { k++; if( strcmp( mys[i].dan, mys[j].dan ) == 0 ) odin_klass++; else drug_klass++; } } if(k>0) printf("FOUND\n"); else printf("NOT FOUND %d\n",k); printf("\nV odnom klasse: %d\n",odin_klass); printf("V paral klassah: %d\n",drug_klass); system("PAUSE"); }
Объяснение кода листинга программы
- Структура данных, используемая в программе, - это массив структур
list
с именемmys
. Каждая структура содержит поля для хранения фамилии, имени и дня рождения ученика. - Программа считывает из файла
list.txt
информацию об учениках и сохраняет ее в массивеmys
. - Затем программа выводит на экран информацию о каждом ученике.
- Далее программа сравнивает фамилии учеников и подсчитывает количество однофамильцев. Если количество однофамильцев больше 0, программа выводит сообщение
FOUND
. - Затем программа выводит количество учеников, имеющих одинаковые фамилии и разные дни рождения, и количество учеников, имеющих одинаковые фамилии и одинаковые дни рождения.
- В конце программы выводится сообщение
PAUSE
, чтобы пользователь мог увидеть результаты.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д