• Описать структуру с именем STUDENT, содержащую следующие поля:-фамилия и инициалы;-номер группы;-успеваемость (массив из пяти элементов).Написать программу, выполняющую следующие действия: -ввод с клавиатуры данных в массив, состоящий из 10 структур типа STUDENT; записи должны быть упорядочены по возрастанию номера группы;вывод на дисплей фамилии и номеров групп для всех студентов включенных в массив если средний балл студента больше 4,0 ;если таких студентов нет вывести соответствующее сообщение.
    язык С++


Ответы 1

  • //--------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <windows.h> #pragma hdrstop   //---------------------------------------------------------------------------   #pragma argsused char *Rus(const char *text); const int l_name=20, l_ses=5; struct Student{ char name[l_name+1]; char ses[l_ses+1]; int group; float av; }; int compare(const void *student1, const void *student2); void recode(char *dest, char *source);   int main(int argc, char* argv[]) {Student student; FILE *fin=fopen("dbase.txt", "rt"); if (!fin) {puts(Rus("Невозможно открыть файл")); system("pause"); getch(); return 0;} FILE *fout=fopen("dbase.bin", "wb"); if (!fout) {puts(Rus("Невозможно открыть файл")); system("pause"); getch(); return 0;}   char name[l_name+1]; char ses[l_ses+1];   int ses1[5], sum; while(!feof(fin)){ sum=0; fgets(student.name, l_name, fin); fscanf(fin, "%i%s", &student.group, &student.ses); int code; for(int i=0; i<5; i++){ code=(int)student.ses[i]; switch(code){ case 49: {ses1[i]=1; break;} case 50: {ses1[i]=2; break;} case 51: {ses1[i]=3; break;} case 52: {ses1[i]=4; break;} case 53: {ses1[i]=5; break;} } sum+=ses1[i];} student.av=(float)sum/5;   recode(name, student.name); recode(ses, student.ses); printf("%s %i %s %.2f", name, student.group, ses, student.av);   fwrite(&student, sizeof(Student), 1, fout); } puts(""); fclose(fin); puts(Rus("Бинарный файл записан"));   fseek(fout, 0, SEEK_END); int n_record=ftell(fout)/sizeof(Student); fclose(fout);   FILE *fbin=fopen("dbase.bin", "rb"); if (!fbin) {puts(Rus("Невозможно открыть файл для чтения")); system("pause"); getch(); return 0;} Student *STUDENT=new Student[n_record]; fseek(fbin, 0, SEEK_SET); fread(STUDENT, sizeof(Student), n_record, fbin); fclose(fbin);   int i; puts(Rus("Упорядоченный по возрастанию среднего бала массив")); qsort(STUDENT, n_record, sizeof(Student), compare); for(i=0; i<n_record; i++){ recode(name, STUDENT[i].name); recode(ses, STUDENT[i].ses); printf("%s %i %s %.2f", name, STUDENT[i].group, ses, STUDENT[i].av);}   int j=0; puts(Rus("Поиск ударников:")); bool not_found=true; for (i=0; i<n_record; i++){ int k=1; for(j=0; j<l_ses; j++) if (STUDENT[i].ses[j]=='2' || STUDENT[i].ses[j]=='3') k=0; if(k!=0){recode(name, STUDENT[i].name); not_found=false; printf("%s %i", name, STUDENT[i].group);} } if(not_found) puts(Rus("Ударников нет"));   system("pause"); getch();         return 0; } //---------------------------------------------------------------------------   char bufRus[256];   char *Rus(const char *text){   CharToOem(text, bufRus);   return bufRus;             } //---------------------------------------------------------------------------   int compare(const void *student1, const void *student2){   int p;   if ( ((Student *) student1)->av < ((Student *) student2)->av) p=-1;   else if ( ((Student *) student1)->av==((Student *) student2)->av) p=0;   else p=1;   return p;                                              } //---------------------------------------------------------------------------   void recode(char *dest, char *source){   strcpy(dest, source);   CharToOem(dest, dest);                                        }

  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years