Дан файл, содержащий сведения о учениках школы. Выяснить, имеются ли в школе однофамильцы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учился. Дан файл, содержащий сведения о учениках школы. Выяснить, имеются ли в школе однофамильцы. Имеются ли однофамильцы в параллельных классах классах. Имеются ли однофамильцы в каком-нибудь классе.
#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");
     
}
Это всё, что смог сделать,не знаю как сверить всё со всеми и как сделать так, чтобы количество строк для считывания задавалось в файле 1 строкой. Файл вида: 5 \\ кол-во строк в файле ФФФФФФ ИИИИИ ВВВВ ФФФФФФ ИИИИИ ВВВВ ФФФФФФ ИИИИИ ВВВВ ФФФФФФ ИИИИИ ВВВВ ФФФФФФ ИИИИИ ВВВВ Не против других способов решения. Обязательно наличие класса. Если не сложно сделайте готовом варианте. Заранее огромное спасибо.

Решение задачи: «Дан файл, содержащий сведения о учениках школы. Выяснить, имеются ли в школе однофамильцы»

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");
   
}

Объяснение кода листинга программы

  1. Структура данных, используемая в программе, - это массив структур list с именем mys. Каждая структура содержит поля для хранения фамилии, имени и дня рождения ученика.
  2. Программа считывает из файла list.txt информацию об учениках и сохраняет ее в массиве mys.
  3. Затем программа выводит на экран информацию о каждом ученике.
  4. Далее программа сравнивает фамилии учеников и подсчитывает количество однофамильцев. Если количество однофамильцев больше 0, программа выводит сообщение FOUND.
  5. Затем программа выводит количество учеников, имеющих одинаковые фамилии и разные дни рождения, и количество учеников, имеющих одинаковые фамилии и одинаковые дни рождения.
  6. В конце программы выводится сообщение PAUSE, чтобы пользователь мог увидеть результаты.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы