Ladies_Man

DZ-1 - good one (not my)

May 30th, 2014
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 32.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <string.h>
  4. #include <locale.h>
  5. #define ALL 1000000 //Размер структуры со студентами
  6. #define OLD 1000000//Размер структуры с самыми старыми студентами
  7. #define MAX_UNIVERCITY 90        //Максимальное число университетов
  8. #define MAX_FACULTY 80 // Максимально число факультетов
  9. #define MAX_STUD_GROUP 40 //Максимальное число студентов в группе
  10. void sort_firstName(struct data a[], int first, int last);
  11. void sort_univercity(struct data a[], int first, int last);
  12. void sort_faculty(struct data a[], int first, int last);
  13. void sort_department(struct data a[], int first, int last);
  14. void sort_cours(struct data a[], int first, int last);
  15. void sort_group(struct data a[], int first, int last);
  16. void swap(struct data s[], int s1, int s2);
  17. struct data{
  18.         char firstName[30];
  19.         char secondName[30];
  20.         char univercity[30];
  21.         char faculty[30];
  22.         char department[30];
  23.         int age;
  24.         int cours;
  25.         int group;
  26.         char city[30];
  27.     };
  28. int main(){
  29.         setlocale( LC_ALL,"Russian" );
  30.         int x=0, z=0, size_young_group=0, size_old_group=0, cours=0;
  31.         int i=0, j=0, g=0, h=0, v=0, u=0, k=0, all_group=0,
  32.                 all=0, bachelor=0, master=0, max_age=0, all_old_students=0,
  33.                 all_faculty=0, all_faculty_univ=0,
  34.                 all_department_univ=0, all_department_fac=0,
  35.                 bachelors_univ=0, masters_univ=0,
  36.                 bachelors_fac=0, masters_fac=0,
  37.                 bachelors_dep=0, masters_dep=0,
  38.                 one_cours_fac=0,two_cours_fac=0,three_cours_fac=0,
  39.                 four_cours_fac=0,five_cours_fac=0,six_cours_fac=0,
  40.                 one_cours_dep=0,two_cours_dep=0,three_cours_dep=0,
  41.                 four_cours_dep=0,five_cours_dep=0,six_cours_dep=0,
  42.                 all_stud_cours[7], all_group_cours[7], all_stud_in_group=0;
  43.         float age_abit_univ=0.0, age_bach_univ=0.0,age_mast_univ=0.0,
  44.                 age_abit_fac=0.0, age_bach_fac=0.0, age_mast_fac=0.0,
  45.                 age_abit_dep=0.0, age_bach_dep=0.0, age_mast_dep=0.0,
  46.                 sum_abit_univ=0.0, sum_bach_univ=0.0, sum_mast_univ=0.0,
  47.                 sum_abit_fac=0.0, sum_bach_fac=0.0, sum_mast_fac=0.0,
  48.                 sum_abit_dep=0.0, sum_bach_dep=0.0, sum_mast_dep=0.0,
  49.                 age_min=50.0, age_max=0.0, age_group=0.0, avg_age_group=0.0;
  50.         struct data* students;
  51.     struct data* old_students;
  52.         struct data* old_group;
  53.         struct data* young_group;
  54.         students = (struct data *)malloc(sizeof(struct data)*ALL);
  55.     old_students = (struct data *)malloc(sizeof(struct data)*OLD);
  56.         old_group = (struct data *)malloc(sizeof(struct data)*MAX_STUD_GROUP);
  57.         young_group = (struct data *)malloc(sizeof(struct data)*MAX_STUD_GROUP);
  58.     FILE *fp;
  59.     fp = fopen("C:\\dz\\students_6.csv", "r");
  60.     if (fp==NULL){
  61.         printf("Error\n");
  62.     }else{
  63.                 //Считываем данные из файла и считаем число студентов
  64.                 printf("Чтение файла...\n");
  65.                 fscanf (fp, "%*[a-zA-Z];%*[a-zA-Z];%*[a-zA-Z];%*[a-zA-Z];%*[a-zA-Z];%*[a-zA-Z];%*[a-zA-Z];%*[a-zA-Z];%*[a-zA-Z];");
  66.                 while(fscanf(fp, "%[^;];%[^;];%[^;];%[^;];%[^;];%d;%d;%d;%[^;];\n",
  67.              students[i].firstName, students[i].secondName, students[i].univercity,
  68.              students[i].faculty, students[i].department, &(students[i].age),
  69.              &(students[i].cours), &(students[i].group), students[i].city)==9){
  70.                                 i++;    
  71.                 }
  72.                 fclose(fp);
  73.                 printf("Файл был успешно прочитан\n");
  74.         }
  75.         all=i;
  76.         //Cчитаем бакалавров и магистров
  77.         printf("Выполняется задание №1\n");
  78.         for(i=0; i<all; i++){
  79.                 if (students[i].cours == 5 || students[i].cours == 6){
  80.                         master++;
  81.                 }else{
  82.                         bachelor++;
  83.                 }
  84.         }
  85.         FILE *num1;
  86.     num1 = fopen("num1.txt", "w");
  87.     if (num1==NULL){
  88.         printf("Error1\n");
  89.         }else{
  90.                 i=0;
  91.                sort_firstName(students, i, all); //Сортируем по firstName
  92.                 fprintf(num1,"Задание №1.\nВсего студентов: %d\nВсего бакалавров: %d\nВсего магистров: %d\n\n", all, bachelor, master);
  93.                 for(i =0 ; i < all; i++){
  94.                         fprintf(num1,"Номер: %d\nИмя: %s\nФамилия: %s\nУниверситет: %s\nФакультет: %s\nКафедра: %s\nВозраст: %d\nКурс: %d\nГруппа: %d\nГород: %s\n\n",
  95.                                         i+1, students[i].firstName, students[i].secondName, students[i].univercity,
  96.                                         students[i].faculty, students[i].department, students[i].age,
  97.                                         students[i].cours, students[i].group, students[i].city);
  98.                         }
  99.                 fclose(num1);
  100.                 printf("Результаты задания №1 успешно записаны в соответствующий файл\n");
  101.                 }
  102.         //Сортируем университеты, их факультеты, соответствующие факультетам кафедры по алфавиту, а потом по номеру курса и группе.
  103.         h=0;
  104.         printf("Идет сортировка...\n");
  105.         sort_univercity(students, h, all);
  106.         for(j=0; j<all; j++){
  107.                 while(strcmp(students[j].univercity, students[j+1].univercity)==0){
  108.                         j++;
  109.                         }
  110.                 sort_faculty(students, h, j);
  111.                 h=j+1;
  112.         }
  113.         h=0;
  114.         for(j=0; j<all; j++){
  115.                 if((j+1)>all) break;
  116.                 while(strcmp(students[j].faculty, students[j+1].faculty)==0){
  117.                         j++;
  118.                 }
  119.                 sort_department(students, h, j);
  120.                 h=j+1;
  121.         }
  122.         h=0;
  123.         for(j=0; j<all; j++){
  124.                 if((j+1)>all) break;
  125.                 while(strcmp(students[j].department, students[j+1].department)==0){
  126.                         j++;
  127.                 }
  128.                 sort_cours(students, h, j);
  129.                 h=j+1;
  130.         }
  131.         h=0;
  132.         for(j=0; j<all; j++){
  133.                 if((j+1)>all) break;
  134.                 while(students[j].cours == students[j+1].cours){
  135.                         j++;
  136.                 }
  137.                 sort_group(students, h, j);
  138.                 h=j+1;
  139.         }
  140.         FILE *test;
  141.                 test = fopen("sort.csv", "w");
  142.                 if (test==NULL){
  143.                         printf("ErrorSort\n");
  144.                  }else{
  145.                          i=0;
  146.                          while(i<all){
  147.                                  fprintf(test, "%s; %s; %s; %s; %s; %d; %d; %d; %s;\n", students[i].firstName, students[i].secondName, students[i].univercity,
  148.                                 students[i].faculty, students[i].department, students[i].age,
  149.                                 students[i].cours, students[i].group, students[i].city);
  150.                          i++;
  151.                          }
  152.                          fclose(test);
  153.                          printf("Результаты сортировки записаны в соответствующий файл\n");
  154.                 }
  155.        
  156.         //Считаем максимальный возраст студентов
  157.         printf("Выполняется задание №2\n");
  158.         for(i = 0; i <= all; i++){
  159.                 if(i == 0){
  160.                         max_age = students[i].age;
  161.                         old_students[j] = students[i];
  162.                         j++;
  163.                         all_old_students++;
  164.                 }else{
  165.                         if(max_age == students[i].age){
  166.                                 old_students[j]=students[i];
  167.                                 j++;
  168.                                 all_old_students++;
  169.                         }
  170.                         if(max_age < students[i].age){
  171.                                 max_age=students[i].age;
  172.                                 j = 0;
  173.                                 all_old_students = 0;
  174.                                 old_students[j] = students[i];
  175.                                 j++;
  176.                         }
  177.                 }
  178.         }
  179.         FILE *num2;
  180.         num2=fopen("num2.txt", "w");
  181.         if(num2==NULL){
  182.         printf("Error2\n");
  183.         }else{
  184.         fprintf(num2,"Задание №2. Вариант 2.\nМаксимальный возраст студента: %d\nCамые старые студенты:\n", max_age);
  185.         for(j = 0; j<= all_old_students; j++){
  186.                 fprintf(num2,"%d. Имя: %s\nФамилия: %s\nУниверситет: %s\nФакультет: %s\nКафедра: %s\nВозраст: %d\nКурс: %d\nГруппа: %d\nГород: %s\n\n", j+1,
  187.                                 old_students[j].firstName, old_students[j].secondName, old_students[j].univercity,
  188.                                 old_students[j].faculty, old_students[j].department, old_students[j].age,
  189.                                 old_students[j].cours, old_students[j].group, old_students[j].city);
  190.         }
  191.         fclose(num2);
  192.         printf("Результаты задания №2 успешно записаны в соответствующий файл\n");
  193.         }
  194.         i = 0;
  195.         printf("Выполняется задание №3\n");
  196.         FILE *num3;
  197.         num3=fopen("num3.txt", "w");
  198.         if (num3==NULL){
  199.                 printf("Error3\n");
  200.         }else{
  201.                 h=0;
  202.                 for(j=0; j<all; j++){
  203.                         fprintf(num3,"Университет: %s\n", students[j].univercity);
  204.                         while(strcmp(students[j].univercity, students[j+1].univercity)==0){
  205.                                 if(strcmp(students[j].faculty, students[j+1].faculty)!=0){
  206.                                                 all_faculty++;
  207.                                         }
  208.                        
  209.                                 if(h<j){
  210.                                         fprintf(num3,"\tФакультет: %s\n", students[h].faculty);
  211.                                         while(1){
  212.                                                 h++;
  213.                                                 if(strcmp(students[h-1].faculty, students[h].faculty)!=0)
  214.                                                 break;
  215.                                                
  216.                                         }
  217.                                 }
  218.                                 j++;
  219.                         }
  220.                 }
  221.                 fclose(num3);
  222.                 printf("Результаты задания №3 успешно записаны в соответствующий файл\n");
  223.         }
  224.         FILE *num4;
  225.         num4 = fopen("num4.txt", "w");
  226.         //Ниже ищем всю информацию по заданию 4
  227.         printf("Выполняется задание №4\n");
  228.         h=0;
  229.         if(num4==NULL){
  230.         printf("Error4\n");
  231.         }else{
  232.                 for(j=0; j<all; j++){
  233.                         //Информация по университетам
  234.                         fprintf(num4,"Задание №4. Вариант 2.\n");
  235.                         fprintf(num4,"Университет: %s\n", students[j].univercity);
  236.                         while(1){
  237.                                 switch(students[j].cours){
  238.                                 case 1:
  239.                                         age_abit_univ=age_abit_univ+students[j].age;
  240.                                         sum_abit_univ++;
  241.                                         bachelors_univ++;
  242.                                         break;
  243.                                 case 2:
  244.                                         bachelors_univ++;
  245.                                         break;
  246.                                 case 3:
  247.                                         bachelors_univ++;
  248.                                         break;
  249.                                 case 4:
  250.                                         age_bach_univ=age_bach_univ+students[j].age;
  251.                                         sum_bach_univ++;
  252.                                         bachelors_univ++;
  253.                                         break;
  254.                                 case 5:
  255.                                         masters_univ++;
  256.                                         break;
  257.                                 case 6:
  258.                                         age_mast_univ=age_mast_univ+students[j].age;
  259.                                         sum_mast_univ++;
  260.                                         masters_univ++;
  261.                                         break;
  262.                                 }
  263.                                 if(strcmp(students[j].faculty, students[j+1].faculty)!=0){
  264.                                         all_faculty_univ++;
  265.                                 }
  266.  
  267.                                 if(strcmp(students[j].department, students[j+1].department)!=0){
  268.                                         all_department_univ++;
  269.                                 }
  270.                                 //Информация по факультетам
  271.                                 if(h<j){
  272.                                 fprintf(num4,"\tФакультет: %s\n", students[h].faculty);
  273.                                 while(1){
  274.                                         switch(students[h].cours){
  275.                                 case 1:
  276.                                         age_abit_fac=age_abit_fac+students[h].age;
  277.                                         sum_abit_fac++;
  278.                                         bachelors_fac++;
  279.                                         one_cours_fac++;
  280.                                         break;
  281.                                 case 2:
  282.                                         bachelors_fac++;
  283.                                         two_cours_fac++;
  284.                                         break;
  285.                                 case 3:
  286.                                         bachelors_fac++;
  287.                                         three_cours_fac++;
  288.                                         break;
  289.                                 case 4:
  290.                                         age_bach_fac=age_bach_fac+students[h].age;
  291.                                         sum_bach_fac++;
  292.                                         bachelors_fac++;
  293.                                         four_cours_fac++;
  294.                                         break;
  295.                                 case 5:
  296.                                         masters_fac++;
  297.                                         five_cours_fac++;
  298.                                         break;
  299.                                 case 6:
  300.                                         age_mast_fac=age_mast_fac+students[h].age;
  301.                                         sum_mast_fac++;
  302.                                         masters_fac++;
  303.                                         six_cours_fac++;
  304.                                         break;
  305.                                 }
  306.                                 if(strcmp(students[h].department, students[h+1].department)!=0){
  307.                                         all_department_fac++;
  308.                                 }
  309.                                 //Информация о кафедрах
  310.                                 if(k<h){
  311.                                         fprintf(num4,"\t\tКафедра: %s\n", students[k].department);
  312.                                 while(1){
  313.                                 switch(students[k].cours){
  314.                                 case 1:
  315.                                         age_abit_dep=age_abit_dep+students[k].age;
  316.                                         sum_abit_dep++;
  317.                                         bachelors_dep++;
  318.                                         one_cours_dep++;
  319.                                         break;
  320.                                 case 2:
  321.                                         bachelors_dep++;
  322.                                         two_cours_dep++;
  323.                                         break;
  324.                                 case 3:
  325.                                         bachelors_dep++;
  326.                                         three_cours_dep++;
  327.                                         break;
  328.                                 case 4:
  329.                                         age_bach_dep=age_bach_dep+students[k].age;
  330.                                         sum_bach_dep++;
  331.                                         bachelors_dep++;
  332.                                         four_cours_dep++;
  333.                                         break;
  334.                                 case 5:
  335.                                         masters_dep++;
  336.                                         five_cours_dep++;
  337.                                         break;
  338.                                 case 6:
  339.                                         age_mast_dep=age_mast_dep+students[k].age;
  340.                                         sum_mast_dep++;
  341.                                         masters_dep++;
  342.                                         six_cours_dep++;
  343.                                         break;
  344.                                 }
  345.                                         k++;
  346.                                         if(strcmp(students[k].department, students[k+1].department)!=0)
  347.                                                 break;
  348.                                 }
  349.                                 fprintf(num4, "\t\tКол-во бакалавров: %d\n\t\tКол-во магистров: %d\n\t\t1 курс: %d чел.\n\t\t2 курс: %d чел.\n\t\t3 курс: %d чел.\n\t\t4 курс: %d чел.\n\t\t5 курс: %d чел.\n\t\t6 курс: %d чел.\n\t\tСредний возраст абитуриента: %.2f\n\t\tСредний возраст выпускника(бакалавра): %.2f\n\t\tСредний возраст выпускника(магистра): %.2f\n\n ",
  350.                                         bachelors_dep, masters_dep,
  351.                                         one_cours_dep,two_cours_dep,three_cours_dep,four_cours_dep,five_cours_dep,six_cours_dep,
  352.                                         (age_abit_dep/sum_abit_dep), (age_bach_dep)/(sum_bach_dep), (age_mast_dep)/(sum_mast_dep));
  353.  
  354.                                 bachelors_dep=0, masters_dep=0, one_cours_dep=0, two_cours_dep=0, three_cours_dep=0, four_cours_dep=0, five_cours_dep=0, six_cours_dep=0, age_abit_dep=0.0, sum_abit_dep=0.0, age_bach_dep=0.0, sum_bach_dep=0.0, age_mast_dep=0.0, sum_mast_dep=0.0;
  355.                                 }
  356.                                 h++;
  357.                                 if(strcmp(students[h].faculty, students[h+1].faculty)!=0)
  358.                                 break;
  359.                                 }
  360.                                
  361.                                 fprintf(num4, "\tКол-во кафедр: %d\n\tКол-во бакалавров: %d\n\tКол-во магистров: %d\n\t1 курс: %d чел.\n\t2 курс: %d чел.\n\t3 курс: %d чел.\n\t4 курс: %d чел.\n\t5 курс: %d чел.\n\t6 курс: %d чел.\n\tСредний возраст абитуриента: %.2f\n\tСредний возраст выпускника(бакалавра): %.2f\n\tСредний возраст выпускника(магистра): %.2f\n\n ",
  362.                                         (all_department_fac+1), bachelors_fac, masters_fac,
  363.                                         one_cours_fac,two_cours_fac,three_cours_fac,four_cours_fac,five_cours_fac,six_cours_fac,
  364.                                         (age_abit_fac/sum_abit_fac), (age_bach_fac)/(sum_bach_fac), (age_mast_fac)/(sum_mast_fac));
  365.                        
  366.                                 all_department_fac=0, bachelors_fac=0, masters_fac=0, one_cours_fac=0, two_cours_fac=0, three_cours_fac=0, four_cours_fac=0, five_cours_fac=0, six_cours_fac=0, age_abit_fac=0.0, sum_abit_fac=0.0, age_bach_fac=0.0, sum_bach_fac=0.0, age_mast_fac=0.0, sum_mast_fac=0.0;
  367.                                 }
  368.                                
  369.                                 j++;
  370.                                 if(strcmp(students[j].univercity, students[j+1].univercity)!=0)
  371.                                     break;
  372.                         }
  373.                         fprintf(num4, "Кол-во ф-тов: %d\nКол-во кафедр: %d\nКол-во бакалавров: %d\nКол-во магистров: %d\nСредний возраст абитуриента: %.2f\nСредний возраст выпускника(бакалавра): %.2f\nСредний возраст выпускника(магистра): %.2f\n\n",
  374.                                  (all_faculty_univ+1), (all_department_univ+1), bachelors_univ, masters_univ,
  375.                                 (age_abit_univ/sum_abit_univ),(age_bach_univ/sum_bach_univ),(age_mast_univ/sum_mast_univ));
  376.                 g++;
  377.                 bachelors_univ=0, masters_univ=0, age_abit_univ=0.0, sum_abit_univ=0.0, age_bach_univ=0.0,sum_bach_univ=0.0,age_mast_univ=0.0,sum_mast_univ=0.0, all_faculty_univ=0, all_department_univ=0;
  378.  
  379.                 }
  380.                         fclose(num4);
  381.                         printf("Результаты задания №4 успешно записаны в соответствующий файл\n");
  382.                 }
  383.                 printf("Выполняется задание №5\n");
  384.                 FILE *num5;
  385.                 num5=fopen("num5.txt","w");
  386.                 if(num5==NULL){
  387.                 printf("Error5\n");
  388.                 }else{
  389.                         int index_max_age=0, index_min_age=0;
  390.                         for(k=1; k<7; k++){
  391.                                 all_stud_cours[k]=0;
  392.                                 all_group_cours[k]=0;
  393.                         }
  394.                         for(i=0; i<=all; i++){
  395.                                 all_stud_in_group++;
  396.                                 if(students[i].group!=students[i+1].group || students[i].cours!=students[i+1].cours){
  397.                                         switch (students[i].cours){
  398.                                         case 1 :
  399.                                                 all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
  400.                                                 all_group_cours[students[i].cours]++;
  401.                                                 break;
  402.                                         case 2:
  403.                                                 all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
  404.                                                 all_group_cours[students[i].cours]++;
  405.                                                 break;
  406.                                         case 3:
  407.                                                 all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
  408.                                                 all_group_cours[students[i].cours]++;
  409.                                                 break;
  410.                                         case 4:
  411.                                                 all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
  412.                                                 all_group_cours[students[i].cours]++;
  413.                                                 break;
  414.                                         case 5:
  415.                                                 all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
  416.                                                 all_group_cours[students[i].cours]++;
  417.                                                 break;
  418.                                         case 6:
  419.                                                 all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
  420.                                                 all_group_cours[students[i].cours]++;
  421.                                                 break;
  422.                                         }
  423.                                         fprintf(num5,"Университет: %s\nФакультет: %s\nКафедра: %s\nКурс: %d\nГруппа: %d\n",
  424.                                                 students[i].univercity,students[i].faculty,students[i].department,students[i].cours,students[i].group);
  425.                                        
  426.                                         for(j=0; j<all_stud_in_group; j++){
  427.                                                 fprintf(num5,"\t%d. %s\t%s\n", (j+1),students[j].firstName, students[j].secondName);
  428.                                                 age_group=age_group+students[j].age;
  429.                                         }
  430.                                         avg_age_group=age_group/all_stud_in_group;
  431.                                         if(avg_age_group < age_min){
  432.                                                 age_min = avg_age_group;
  433.                                                 index_min_age=i;
  434.                                                 }
  435.                                        
  436.                                         if(age_max < avg_age_group){
  437.                                                 age_max = avg_age_group;
  438.                                                 index_max_age=i;
  439.                                                 }
  440.                                        
  441.                                         all_stud_in_group=0;
  442.                                         avg_age_group=0;
  443.                                         age_group=0;
  444.                                 }
  445.                         }
  446.                         for(cours=1; cours<=6; cours++ ){
  447.                                 fprintf(num5, "В среднем в группе %d курса %d чел.\n", cours, (all_stud_cours[cours]/all_group_cours[cours]));
  448.                         }
  449.                         fprintf(num5, "Возраст самой молодой группы: %.2f\n", age_min);
  450.                         fprintf(num5, "Cамая молодая группа:\nУниверситет: %s\nФакультет: %s\nКафедра: %s\nКурс: %d\nГруппа: %d\n ",
  451.                                 students[index_min_age].univercity, students[index_min_age].faculty, students[index_min_age].department, students[index_min_age].cours, students[index_min_age].group );
  452.                         fprintf(num5, "Возраст самой старой группы: %.2f\n", age_max);
  453.                         fprintf(num5, "Cамая старая группа:\nУниверситет: %s\nФакультет: %s\nКафедра: %s\nКурс: %d\nГруппа: %d\n ",
  454.                                 students[index_max_age].univercity, students[index_max_age].faculty, students[index_max_age].department, students[index_max_age].cours, students[index_max_age].group);
  455.                         fclose(num5);
  456.                         printf("Результаты задания №5 успешно записаны в соответствующий файл\n");
  457.                        
  458.                 }
  459.         free(old_group);
  460.         free(young_group);
  461.         free(students);
  462.         free(old_students);
  463. }
  464.  
  465. void sort_firstName(struct data a[], int first, int last) {
  466.         int k = first - 1, j = last, p = first - 1, q = last, s; char *x;
  467.         x = a[last].firstName;
  468.         if (last <= first) return;
  469.         for (;;) {
  470.                 while (strcmp(a[++k].firstName, x) < 0);
  471.                 while (strcmp(x, a[--j].firstName) < 0) if (j == first) break;
  472.                 if (k >= j) break;
  473.                 swap(a, k, j);
  474.                 if (strcmp(a[k].firstName, x) == 0) { p++; swap(a, p, k); }
  475.                 if (strcmp(x, a[j].firstName) == 0) { q--; swap(a, j, q); }
  476.         }
  477.         swap(a, k, last);
  478.         j = k - 1; k = k + 1;
  479.         for (s = first; s < p; s++, j--) swap(a, s, j);
  480.         for (s = last - 1; s > q; s--, k++) swap(a, k, s);
  481.         if (first < j) sort_firstName(a, first, j);
  482.         if (k < last) sort_firstName(a, k, last);
  483. }
  484. void sort_univercity(struct data a[], int first, int last){
  485.         int k = first - 1, j = last, p = first - 1, q = last, s; char *x;
  486.         x = a[last].univercity;
  487.         if (last <= first) return;
  488.         for (;;) {
  489.                 while (strcmp(a[++k].univercity, x) < 0);
  490.                 while (strcmp(x, a[--j].univercity) < 0) if (j == first) break;
  491.                 if (k >= j) break;
  492.                 swap(a, k, j);
  493.                 if (strcmp(a[k].univercity, x) == 0) { p++; swap(a, p, k); }
  494.                 if (strcmp(x, a[j].univercity) == 0) { q--; swap(a, j, q); }
  495.         }
  496.         swap(a, k, last);
  497.         j = k - 1; k = k + 1;
  498.         for (s = first; s < p; s++, j--) swap(a, s, j);
  499.         for (s = last - 1; s > q; s--, k++) swap(a, k, s);
  500.         if (first < j) sort_univercity(a, first, j);
  501.         if (k < last) sort_univercity(a, k, last);
  502. }
  503. void sort_faculty(struct data a[], int first, int last) {
  504.         int k = first - 1, j = last, p = first - 1, q = last, s; char *x;
  505.         x = a[last].faculty;
  506.         if (last <= first) return;
  507.         for (;;) {
  508.                 while (strcmp(a[++k].faculty, x) < 0);
  509.                 while (strcmp(x, a[--j].faculty) < 0) if (j == first) break;
  510.                 if (k >= j) break;
  511.                 swap(a, k, j);
  512.                 if (strcmp(a[k].faculty, x) == 0) { p++; swap(a, p, k); }
  513.                 if (strcmp(x, a[j].faculty) == 0) { q--; swap(a, j, q); }
  514.         }
  515.         swap(a, k, last);
  516.         j = k - 1; k = k + 1;
  517.         for (s = first; s < p; s++, j--) swap(a, s, j);
  518.         for (s = last - 1; s > q; s--, k++) swap(a, k, s);
  519.         if (first < j) sort_faculty(a, first, j);
  520.         if (k < last) sort_faculty(a, k, last);
  521.                 }
  522. void sort_department(struct data a[], int first, int last) {
  523.         int k = first - 1, j = last, p = first - 1, q = last, s; char *x;
  524.                 x = a[last].department;
  525.         if (last <= first) return;
  526.         for (;;) {
  527.                 while (strcmp(a[++k].department, x) < 0);
  528.                 while (strcmp(x, a[--j].department) < 0) if (j == first) break;
  529.                 if (k >= j) break;
  530.                 swap(a, k, j);
  531.                 if (strcmp(a[k].department, x) == 0) { p++; swap(a, p, k); }
  532.                 if (strcmp(x, a[j].department) == 0) { q--; swap(a, j, q); }
  533.         }
  534.         swap(a, k, last);
  535.         j = k - 1; k = k + 1;
  536.         for (s = first; s < p; s++, j--) swap(a, s, j);
  537.         for (s = last - 1; s > q; s--, k++) swap(a, k, s);
  538.         if (first < j) sort_department(a, first, j);
  539.         if (k < last) sort_department(a, k, last);
  540.                 }
  541. void sort_cours(struct data a[], int first, int last) {
  542.         int k = first - 1, j = last, p = first - 1, q = last, s; int x;
  543.                 x = a[last].cours;
  544.         if (last <= first) return;
  545.         for (;;) {
  546.                 while (a[++k].cours < x);
  547.                 while (x < a[--j].cours) if (j == first) break;
  548.                 if (k >= j) break;
  549.                 swap(a, k, j);
  550.                 if (a[k].cours == x) { p++; swap(a, p, k); }
  551.                 if (x == a[j].cours) { q--; swap(a, j, q); }
  552.         }
  553.         swap(a, k, last);
  554.         j = k - 1; k = k + 1;
  555.         for (s = first; s < p; s++, j--) swap(a, s, j);
  556.         for (s = last - 1; s > q; s--, k++) swap(a, k, s);
  557.         if (first < j) sort_cours(a, first, j);
  558.         if (k < last) sort_cours(a, k, last);
  559.                 }
  560. void sort_group(struct data a[], int first, int last) {
  561.         int k = first - 1, j = last, p = first - 1, q = last, s; int x;
  562.                 x = a[last].group;
  563.         if (last <= first) return;
  564.         for (;;) {
  565.                 while (a[++k].group < x);
  566.                 while (x < a[--j].group) if (j == first) break;
  567.                 if (k >= j) break;
  568.                 swap(a, k, j);
  569.                 if (a[k].group == x) { p++; swap(a, p, k); }
  570.                 if (x == a[j].group) { q--; swap(a, j, q); }
  571.         }
  572.         swap(a, k, last);
  573.         j = k - 1; k = k + 1;
  574.         for (s = first; s < p; s++, j--) swap(a, s, j);
  575.         for (s = last - 1; s > q; s--, k++) swap(a, k, s);
  576.         if (first < j) sort_group(a, first, j);
  577.         if (k < last) sort_group(a, k, last);
  578.                 }
  579. void swap(struct data s[], int s1, int s2) {
  580.         struct data temp;
  581.         temp = s[s1];
  582.         s[s1] = s[s2];
  583.         s[s2] = temp;
  584. }
Add Comment
Please, Sign In to add comment