Получить отсортированных людей по курсам, далее по группам - C (СИ)
Формулировка задачи:
В общем есть такая прога:
Она после ввода сортирует людей по кафедрам и в пределах каждой сортирует их по алфавиту.
Мне же из этого нужно получить отсортированных людей по курсам, далее по группам и в пределах группы сортировать имя по алфавиту. Можно ли переделать, если да, то как?
Спасибо огромное заранее. Мне нужно хотя бы объяснить как работает прога, остальное думаю сам сделаю, но иногда бывает проще просто переделать, чем объяснять как оно работает. Прошу что-то одно... Еще раз спасибо всем откликнувшимся...
#include<stdio.h> #include<conio.h> #include<string.h> #include<ctype.h> #include<stdlib.h> #include<io.h> struct spec {int code; char text [10]; }; struct student {char fac [10], kaf [10], fio [20]; spec sp; int kurs; char group[10]; int marks[3]; }; struct list_elem { struct student data; struct list_elem *next; }; struct student st; struct list_elem *s0,*s1,*s2,*se; int i,n,k,j; char c, caf[10]; void main () {clrscr(); s1=new(struct list_elem); s0=s1; do { printf ("=================== Add student =================== \n"); printf ("Faculty: "); scanf("%s", st.fac); printf ("Kafedra: "); scanf("%s", st.kaf); printf ("Name: "); scanf("%s", st.fio); printf ("Speciality Code: "); scanf("%i", st.sp.code); printf (" Text: "); scanf("%s", st.sp.text); printf ("Kurs: "); scanf("%i", st.kurs); printf ("Group: "); scanf("%s", st.group); for (int j=0; j<3; j++) {printf ("Ocеnka za %i ekzamen: ", j+1); scanf ("%i", st.marks[j]); }; s1->next=(struct list_elem*)malloc(sizeof(struct list_elem)); s1->data=st; s1=s1->next; printf ("Continue? (Y/N) \n" ); c=getch(); } while (c=='y' || c=='Y'); se=s1; s1=s0; do {if (islower(s1->data.fio[0])) s1->data.fio[0]=toupper(s1->data.fio[0]); for(j=1;j<strlen(s1->data.fio);j++) if(isupper(s1->data.fio[j])) s1->data.fio[j]=tolower(s1->data.fio[j]); s1=s1->next;} while (s1!=se); s1=s0; do{ s2=s1; do{ if(strcmp(s1->data.fio,s2->data.fio)>0) {st=s1->data; s1->data=s2->data; s2->data=st; } s2=s2->next; } while(s2!=se); s1=s1->next; } while(s1!=se); s1=s0; do{ strcpy(caf,s1->data.kaf); s2=s1->next; do{ if(strcmp(caf,s2->data.kaf)==0) {s1=s1->next; st=s1->data; s1->data=s2->data; s2->data=st;} s2=s2->next; } while (s2!=se); s1=s1->next;} while (s1!=se); printf("\nFaculty Kafedra Name Spec.code Spec.text Kurs Group Marks \n" ); printf("----------------------------------------------------------------------------\n"); s1=s0; do{ printf("%s | %s | %s | %i | %s | %i | %s | %i, %i, %i \n", (*s1).data.fac,(*s1).data.kaf,(*s1).data.fio,(*s1).data.sp.code,(*s1).data.sp.text,(*s1).data.kurs, (*s1).data.group,(*s1).data.marks[0],(*s1).data.marks[1],(*s1).data.marks[2]); s1=s1->next; } while (s1!=se); getch(); }
Решение задачи: «Получить отсортированных людей по курсам, далее по группам»
textual
Листинг программы
scanf("%i", st.kurs);
Объяснение кода листинга программы
- Вводится число с помощью функции scanf и сохраняется в переменной st.kurs.