Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <Windows.h>
- typedef struct
- {
- char name[33];
- char group[33];
- int ses[5];
- double aver;
- }student;
- void change(student *dr)
- {
- fflush(stdin);
- int i;
- double av=0;
- printf("введите имя:\n");
- fgets(dr->name,33,stdin);
- printf("введите группу:\n");
- fgets(dr->group,33,stdin);
- printf("введите оценки:\n");
- for(i=0;i<5;i++)
- {
- scanf("%d",&(dr->ses[i]));
- av+=(dr->ses[i]);
- }
- (dr->aver)=(av/5);
- }
- void changesize(student **dr,int x)
- {
- x=x+1;
- *dr=(student*)realloc(*dr,x*sizeof(student));
- }
- void changelement(student *dr,student *dr1)
- {
- student zamena;
- zamena=*dr;
- *dr=*dr1;
- *dr1=zamena;
- }
- student *del(student dr[5],int n)
- {
- int i;
- student *st,zamena;
- st=(student *) malloc (4*sizeof (student));
- zamena=dr[4];
- dr[4]=dr[n];
- dr[n]=zamena;
- for(i=0;i<4;i++)
- {
- st[i]=dr[i];
- }
- return st;
- }
- void out(student dr[4])
- {
- int j,i;
- for(i=0;i<4;i++)
- {
- printf("|----------------------|\n");
- printf(" фио:%5s",dr[i].name);
- printf("|----------------------|\n");
- printf(" группа:%s",dr[i].group);
- printf("|----------------------|\n");
- printf(" оценки:");
- for (j=0;j<5;j++)
- {
- printf("%d",dr[i].ses[j]);
- }
- printf("\n");
- printf("|----------------------|\n");
- printf(" ср.бал:%0.lf\n",dr[i].aver);
- printf("========================\n");
- }
- }
- student *sort1(student dr[4])
- {
- int i,j;
- student bufstud;
- for(j = 0;j < 3;j ++ )
- {
- if(dr[j].aver < dr[j+1].aver)
- {
- bufstud=dr[j];
- dr[j]=dr[j+1];
- dr[j+1]= bufstud;
- }
- }
- return dr;
- }
- student *sort2(student dr[4])
- {
- int i,j;
- student bufstud;
- for(i = 0;i < 4;i ++ )
- {
- for(j = 0;j < 3;j ++ )
- {
- if(dr[j].aver >dr[j+1].aver)
- {
- bufstud=dr[j];
- dr[j]=dr[j+1];
- dr[j+1]= bufstud;
- }
- }
- }
- return dr;
- }
- int main()
- {
- //установка кодовой страницы win-cp 1251 в поток ввода
- SetConsoleCP(1251);
- //установка кодовой страницы win-cp 1251 в поток
- SetConsoleOutputCP(1251);
- int i,j,pers,pers1,size,choice;
- char musor[10];
- student *students;
- FILE *f1;
- if(!(f1=fopen("f1.txt","r")))
- {
- perror ("error");
- }
- fscanf(f1,"%d",&size);
- fgets(musor,10,f1);
- if(!(students=(student*)
- malloc(size * sizeof(student))))
- {
- perror("errorss");
- }
- for(i=0;i<4;i++)
- {
- students[i].aver=0;
- fgets(students[i].name,33,f1);
- fgets(students[i].group,33,f1);
- for(j=0;j<5;j++)
- {
- fscanf(f1,"%d",&students[i].ses[j]);
- students[i].aver+=students[i].ses[j];
- }
- students[i].aver=students[i].aver/5;
- fgets(musor,10,f1);
- }
- ///функции:
- ///вывод
- out(students);
- ///изменение элемента массива струтур
- printf("\nу какой персоны вы хотите поменять данные:");
- scanf("%d",&pers);
- pers--;
- change(&students[pers]);
- ///дополнение дин.мас структур новым элементом
- changesize(&students,size);
- printf("\nвведите данные новой персоны:\n");
- change(&students[size]);
- ///замена мест двух элементов
- printf("\nданные каких персон вы хотите поменять местами:\n");
- scanf("%d %d",&pers,&pers1);
- pers--;
- pers1--;
- changelement(&students[pers],&students[pers1]);
- ///удаление элемента
- printf("\nданные какой персоны вы хотите удалить:\n");
- scanf("%d",&pers);
- pers--;
- students=del(students,pers);
- ///вывод
- out(students);
- ///упорядочивание по полю
- printf("Каким образом вы хотите упорядочить:\n");
- printf("1-по возрастанию оценок:\n");
- printf("2-по убыванию оценок:\n");
- scanf("%d",&choice);
- switch (choice)
- {
- case 1:sort1(students);
- break;
- case 2:sort2(students);
- break;
- default:printf("неверный ввод\n");
- exit(0);
- }
- printf("\n========================\n");
- ///вывод
- out(students);
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement