Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <malloc.h>
- #include <string.h>
- #include <locale.h>
- #define ALL 1000000 //Размер структуры со студентами
- #define OLD 1000000//Размер структуры с самыми старыми студентами
- #define MAX_UNIVERCITY 90 //Максимальное число университетов
- #define MAX_FACULTY 80 // Максимально число факультетов
- #define MAX_STUD_GROUP 40 //Максимальное число студентов в группе
- void sort_firstName(struct data a[], int first, int last);
- void sort_univercity(struct data a[], int first, int last);
- void sort_faculty(struct data a[], int first, int last);
- void sort_department(struct data a[], int first, int last);
- void sort_cours(struct data a[], int first, int last);
- void sort_group(struct data a[], int first, int last);
- void swap(struct data s[], int s1, int s2);
- struct data{
- char firstName[30];
- char secondName[30];
- char univercity[30];
- char faculty[30];
- char department[30];
- int age;
- int cours;
- int group;
- char city[30];
- };
- int main(){
- setlocale( LC_ALL,"Russian" );
- int x=0, z=0, size_young_group=0, size_old_group=0, cours=0;
- int i=0, j=0, g=0, h=0, v=0, u=0, k=0, all_group=0,
- all=0, bachelor=0, master=0, max_age=0, all_old_students=0,
- all_faculty=0, all_faculty_univ=0,
- all_department_univ=0, all_department_fac=0,
- bachelors_univ=0, masters_univ=0,
- bachelors_fac=0, masters_fac=0,
- bachelors_dep=0, masters_dep=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,
- one_cours_dep=0,two_cours_dep=0,three_cours_dep=0,
- four_cours_dep=0,five_cours_dep=0,six_cours_dep=0,
- all_stud_cours[7], all_group_cours[7], all_stud_in_group=0;
- float age_abit_univ=0.0, age_bach_univ=0.0,age_mast_univ=0.0,
- age_abit_fac=0.0, age_bach_fac=0.0, age_mast_fac=0.0,
- age_abit_dep=0.0, age_bach_dep=0.0, age_mast_dep=0.0,
- sum_abit_univ=0.0, sum_bach_univ=0.0, sum_mast_univ=0.0,
- sum_abit_fac=0.0, sum_bach_fac=0.0, sum_mast_fac=0.0,
- sum_abit_dep=0.0, sum_bach_dep=0.0, sum_mast_dep=0.0,
- age_min=50.0, age_max=0.0, age_group=0.0, avg_age_group=0.0;
- struct data* students;
- struct data* old_students;
- struct data* old_group;
- struct data* young_group;
- students = (struct data *)malloc(sizeof(struct data)*ALL);
- old_students = (struct data *)malloc(sizeof(struct data)*OLD);
- old_group = (struct data *)malloc(sizeof(struct data)*MAX_STUD_GROUP);
- young_group = (struct data *)malloc(sizeof(struct data)*MAX_STUD_GROUP);
- FILE *fp;
- fp = fopen("C:\\dz\\students_6.csv", "r");
- if (fp==NULL){
- printf("Error\n");
- }else{
- //Считываем данные из файла и считаем число студентов
- printf("Чтение файла...\n");
- 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];");
- while(fscanf(fp, "%[^;];%[^;];%[^;];%[^;];%[^;];%d;%d;%d;%[^;];\n",
- students[i].firstName, students[i].secondName, students[i].univercity,
- students[i].faculty, students[i].department, &(students[i].age),
- &(students[i].cours), &(students[i].group), students[i].city)==9){
- i++;
- }
- fclose(fp);
- printf("Файл был успешно прочитан\n");
- }
- all=i;
- //Cчитаем бакалавров и магистров
- printf("Выполняется задание №1\n");
- for(i=0; i<all; i++){
- if (students[i].cours == 5 || students[i].cours == 6){
- master++;
- }else{
- bachelor++;
- }
- }
- FILE *num1;
- num1 = fopen("num1.txt", "w");
- if (num1==NULL){
- printf("Error1\n");
- }else{
- i=0;
- sort_firstName(students, i, all); //Сортируем по firstName
- fprintf(num1,"Задание №1.\nВсего студентов: %d\nВсего бакалавров: %d\nВсего магистров: %d\n\n", all, bachelor, master);
- for(i =0 ; i < all; i++){
- fprintf(num1,"Номер: %d\nИмя: %s\nФамилия: %s\nУниверситет: %s\nФакультет: %s\nКафедра: %s\nВозраст: %d\nКурс: %d\nГруппа: %d\nГород: %s\n\n",
- i+1, students[i].firstName, students[i].secondName, students[i].univercity,
- students[i].faculty, students[i].department, students[i].age,
- students[i].cours, students[i].group, students[i].city);
- }
- fclose(num1);
- printf("Результаты задания №1 успешно записаны в соответствующий файл\n");
- }
- //Сортируем университеты, их факультеты, соответствующие факультетам кафедры по алфавиту, а потом по номеру курса и группе.
- h=0;
- printf("Идет сортировка...\n");
- sort_univercity(students, h, all);
- for(j=0; j<all; j++){
- while(strcmp(students[j].univercity, students[j+1].univercity)==0){
- j++;
- }
- sort_faculty(students, h, j);
- h=j+1;
- }
- h=0;
- for(j=0; j<all; j++){
- if((j+1)>all) break;
- while(strcmp(students[j].faculty, students[j+1].faculty)==0){
- j++;
- }
- sort_department(students, h, j);
- h=j+1;
- }
- h=0;
- for(j=0; j<all; j++){
- if((j+1)>all) break;
- while(strcmp(students[j].department, students[j+1].department)==0){
- j++;
- }
- sort_cours(students, h, j);
- h=j+1;
- }
- h=0;
- for(j=0; j<all; j++){
- if((j+1)>all) break;
- while(students[j].cours == students[j+1].cours){
- j++;
- }
- sort_group(students, h, j);
- h=j+1;
- }
- FILE *test;
- test = fopen("sort.csv", "w");
- if (test==NULL){
- printf("ErrorSort\n");
- }else{
- i=0;
- while(i<all){
- fprintf(test, "%s; %s; %s; %s; %s; %d; %d; %d; %s;\n", students[i].firstName, students[i].secondName, students[i].univercity,
- students[i].faculty, students[i].department, students[i].age,
- students[i].cours, students[i].group, students[i].city);
- i++;
- }
- fclose(test);
- printf("Результаты сортировки записаны в соответствующий файл\n");
- }
- //Считаем максимальный возраст студентов
- printf("Выполняется задание №2\n");
- for(i = 0; i <= all; i++){
- if(i == 0){
- max_age = students[i].age;
- old_students[j] = students[i];
- j++;
- all_old_students++;
- }else{
- if(max_age == students[i].age){
- old_students[j]=students[i];
- j++;
- all_old_students++;
- }
- if(max_age < students[i].age){
- max_age=students[i].age;
- j = 0;
- all_old_students = 0;
- old_students[j] = students[i];
- j++;
- }
- }
- }
- FILE *num2;
- num2=fopen("num2.txt", "w");
- if(num2==NULL){
- printf("Error2\n");
- }else{
- fprintf(num2,"Задание №2. Вариант 2.\nМаксимальный возраст студента: %d\nCамые старые студенты:\n", max_age);
- for(j = 0; j<= all_old_students; j++){
- fprintf(num2,"%d. Имя: %s\nФамилия: %s\nУниверситет: %s\nФакультет: %s\nКафедра: %s\nВозраст: %d\nКурс: %d\nГруппа: %d\nГород: %s\n\n", j+1,
- old_students[j].firstName, old_students[j].secondName, old_students[j].univercity,
- old_students[j].faculty, old_students[j].department, old_students[j].age,
- old_students[j].cours, old_students[j].group, old_students[j].city);
- }
- fclose(num2);
- printf("Результаты задания №2 успешно записаны в соответствующий файл\n");
- }
- i = 0;
- printf("Выполняется задание №3\n");
- FILE *num3;
- num3=fopen("num3.txt", "w");
- if (num3==NULL){
- printf("Error3\n");
- }else{
- h=0;
- for(j=0; j<all; j++){
- fprintf(num3,"Университет: %s\n", students[j].univercity);
- while(strcmp(students[j].univercity, students[j+1].univercity)==0){
- if(strcmp(students[j].faculty, students[j+1].faculty)!=0){
- all_faculty++;
- }
- if(h<j){
- fprintf(num3,"\tФакультет: %s\n", students[h].faculty);
- while(1){
- h++;
- if(strcmp(students[h-1].faculty, students[h].faculty)!=0)
- break;
- }
- }
- j++;
- }
- }
- fclose(num3);
- printf("Результаты задания №3 успешно записаны в соответствующий файл\n");
- }
- FILE *num4;
- num4 = fopen("num4.txt", "w");
- //Ниже ищем всю информацию по заданию 4
- printf("Выполняется задание №4\n");
- h=0;
- if(num4==NULL){
- printf("Error4\n");
- }else{
- for(j=0; j<all; j++){
- //Информация по университетам
- fprintf(num4,"Задание №4. Вариант 2.\n");
- fprintf(num4,"Университет: %s\n", students[j].univercity);
- while(1){
- switch(students[j].cours){
- case 1:
- age_abit_univ=age_abit_univ+students[j].age;
- sum_abit_univ++;
- bachelors_univ++;
- break;
- case 2:
- bachelors_univ++;
- break;
- case 3:
- bachelors_univ++;
- break;
- case 4:
- age_bach_univ=age_bach_univ+students[j].age;
- sum_bach_univ++;
- bachelors_univ++;
- break;
- case 5:
- masters_univ++;
- break;
- case 6:
- age_mast_univ=age_mast_univ+students[j].age;
- sum_mast_univ++;
- masters_univ++;
- break;
- }
- if(strcmp(students[j].faculty, students[j+1].faculty)!=0){
- all_faculty_univ++;
- }
- if(strcmp(students[j].department, students[j+1].department)!=0){
- all_department_univ++;
- }
- //Информация по факультетам
- if(h<j){
- fprintf(num4,"\tФакультет: %s\n", students[h].faculty);
- while(1){
- switch(students[h].cours){
- case 1:
- age_abit_fac=age_abit_fac+students[h].age;
- sum_abit_fac++;
- bachelors_fac++;
- one_cours_fac++;
- break;
- case 2:
- bachelors_fac++;
- two_cours_fac++;
- break;
- case 3:
- bachelors_fac++;
- three_cours_fac++;
- break;
- case 4:
- age_bach_fac=age_bach_fac+students[h].age;
- sum_bach_fac++;
- bachelors_fac++;
- four_cours_fac++;
- break;
- case 5:
- masters_fac++;
- five_cours_fac++;
- break;
- case 6:
- age_mast_fac=age_mast_fac+students[h].age;
- sum_mast_fac++;
- masters_fac++;
- six_cours_fac++;
- break;
- }
- if(strcmp(students[h].department, students[h+1].department)!=0){
- all_department_fac++;
- }
- //Информация о кафедрах
- if(k<h){
- fprintf(num4,"\t\tКафедра: %s\n", students[k].department);
- while(1){
- switch(students[k].cours){
- case 1:
- age_abit_dep=age_abit_dep+students[k].age;
- sum_abit_dep++;
- bachelors_dep++;
- one_cours_dep++;
- break;
- case 2:
- bachelors_dep++;
- two_cours_dep++;
- break;
- case 3:
- bachelors_dep++;
- three_cours_dep++;
- break;
- case 4:
- age_bach_dep=age_bach_dep+students[k].age;
- sum_bach_dep++;
- bachelors_dep++;
- four_cours_dep++;
- break;
- case 5:
- masters_dep++;
- five_cours_dep++;
- break;
- case 6:
- age_mast_dep=age_mast_dep+students[k].age;
- sum_mast_dep++;
- masters_dep++;
- six_cours_dep++;
- break;
- }
- k++;
- if(strcmp(students[k].department, students[k+1].department)!=0)
- break;
- }
- 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 ",
- bachelors_dep, masters_dep,
- one_cours_dep,two_cours_dep,three_cours_dep,four_cours_dep,five_cours_dep,six_cours_dep,
- (age_abit_dep/sum_abit_dep), (age_bach_dep)/(sum_bach_dep), (age_mast_dep)/(sum_mast_dep));
- 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;
- }
- h++;
- if(strcmp(students[h].faculty, students[h+1].faculty)!=0)
- break;
- }
- 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 ",
- (all_department_fac+1), bachelors_fac, masters_fac,
- one_cours_fac,two_cours_fac,three_cours_fac,four_cours_fac,five_cours_fac,six_cours_fac,
- (age_abit_fac/sum_abit_fac), (age_bach_fac)/(sum_bach_fac), (age_mast_fac)/(sum_mast_fac));
- 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;
- }
- j++;
- if(strcmp(students[j].univercity, students[j+1].univercity)!=0)
- break;
- }
- fprintf(num4, "Кол-во ф-тов: %d\nКол-во кафедр: %d\nКол-во бакалавров: %d\nКол-во магистров: %d\nСредний возраст абитуриента: %.2f\nСредний возраст выпускника(бакалавра): %.2f\nСредний возраст выпускника(магистра): %.2f\n\n",
- (all_faculty_univ+1), (all_department_univ+1), bachelors_univ, masters_univ,
- (age_abit_univ/sum_abit_univ),(age_bach_univ/sum_bach_univ),(age_mast_univ/sum_mast_univ));
- g++;
- 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;
- }
- fclose(num4);
- printf("Результаты задания №4 успешно записаны в соответствующий файл\n");
- }
- printf("Выполняется задание №5\n");
- FILE *num5;
- num5=fopen("num5.txt","w");
- if(num5==NULL){
- printf("Error5\n");
- }else{
- int index_max_age=0, index_min_age=0;
- for(k=1; k<7; k++){
- all_stud_cours[k]=0;
- all_group_cours[k]=0;
- }
- for(i=0; i<=all; i++){
- all_stud_in_group++;
- if(students[i].group!=students[i+1].group || students[i].cours!=students[i+1].cours){
- switch (students[i].cours){
- case 1 :
- all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
- all_group_cours[students[i].cours]++;
- break;
- case 2:
- all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
- all_group_cours[students[i].cours]++;
- break;
- case 3:
- all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
- all_group_cours[students[i].cours]++;
- break;
- case 4:
- all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
- all_group_cours[students[i].cours]++;
- break;
- case 5:
- all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
- all_group_cours[students[i].cours]++;
- break;
- case 6:
- all_stud_cours[students[i].cours]=all_stud_cours[students[i].cours]+all_stud_in_group;
- all_group_cours[students[i].cours]++;
- break;
- }
- fprintf(num5,"Университет: %s\nФакультет: %s\nКафедра: %s\nКурс: %d\nГруппа: %d\n",
- students[i].univercity,students[i].faculty,students[i].department,students[i].cours,students[i].group);
- for(j=0; j<all_stud_in_group; j++){
- fprintf(num5,"\t%d. %s\t%s\n", (j+1),students[j].firstName, students[j].secondName);
- age_group=age_group+students[j].age;
- }
- avg_age_group=age_group/all_stud_in_group;
- if(avg_age_group < age_min){
- age_min = avg_age_group;
- index_min_age=i;
- }
- if(age_max < avg_age_group){
- age_max = avg_age_group;
- index_max_age=i;
- }
- all_stud_in_group=0;
- avg_age_group=0;
- age_group=0;
- }
- }
- for(cours=1; cours<=6; cours++ ){
- fprintf(num5, "В среднем в группе %d курса %d чел.\n", cours, (all_stud_cours[cours]/all_group_cours[cours]));
- }
- fprintf(num5, "Возраст самой молодой группы: %.2f\n", age_min);
- fprintf(num5, "Cамая молодая группа:\nУниверситет: %s\nФакультет: %s\nКафедра: %s\nКурс: %d\nГруппа: %d\n ",
- 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 );
- fprintf(num5, "Возраст самой старой группы: %.2f\n", age_max);
- fprintf(num5, "Cамая старая группа:\nУниверситет: %s\nФакультет: %s\nКафедра: %s\nКурс: %d\nГруппа: %d\n ",
- 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);
- fclose(num5);
- printf("Результаты задания №5 успешно записаны в соответствующий файл\n");
- }
- free(old_group);
- free(young_group);
- free(students);
- free(old_students);
- }
- void sort_firstName(struct data a[], int first, int last) {
- int k = first - 1, j = last, p = first - 1, q = last, s; char *x;
- x = a[last].firstName;
- if (last <= first) return;
- for (;;) {
- while (strcmp(a[++k].firstName, x) < 0);
- while (strcmp(x, a[--j].firstName) < 0) if (j == first) break;
- if (k >= j) break;
- swap(a, k, j);
- if (strcmp(a[k].firstName, x) == 0) { p++; swap(a, p, k); }
- if (strcmp(x, a[j].firstName) == 0) { q--; swap(a, j, q); }
- }
- swap(a, k, last);
- j = k - 1; k = k + 1;
- for (s = first; s < p; s++, j--) swap(a, s, j);
- for (s = last - 1; s > q; s--, k++) swap(a, k, s);
- if (first < j) sort_firstName(a, first, j);
- if (k < last) sort_firstName(a, k, last);
- }
- void sort_univercity(struct data a[], int first, int last){
- int k = first - 1, j = last, p = first - 1, q = last, s; char *x;
- x = a[last].univercity;
- if (last <= first) return;
- for (;;) {
- while (strcmp(a[++k].univercity, x) < 0);
- while (strcmp(x, a[--j].univercity) < 0) if (j == first) break;
- if (k >= j) break;
- swap(a, k, j);
- if (strcmp(a[k].univercity, x) == 0) { p++; swap(a, p, k); }
- if (strcmp(x, a[j].univercity) == 0) { q--; swap(a, j, q); }
- }
- swap(a, k, last);
- j = k - 1; k = k + 1;
- for (s = first; s < p; s++, j--) swap(a, s, j);
- for (s = last - 1; s > q; s--, k++) swap(a, k, s);
- if (first < j) sort_univercity(a, first, j);
- if (k < last) sort_univercity(a, k, last);
- }
- void sort_faculty(struct data a[], int first, int last) {
- int k = first - 1, j = last, p = first - 1, q = last, s; char *x;
- x = a[last].faculty;
- if (last <= first) return;
- for (;;) {
- while (strcmp(a[++k].faculty, x) < 0);
- while (strcmp(x, a[--j].faculty) < 0) if (j == first) break;
- if (k >= j) break;
- swap(a, k, j);
- if (strcmp(a[k].faculty, x) == 0) { p++; swap(a, p, k); }
- if (strcmp(x, a[j].faculty) == 0) { q--; swap(a, j, q); }
- }
- swap(a, k, last);
- j = k - 1; k = k + 1;
- for (s = first; s < p; s++, j--) swap(a, s, j);
- for (s = last - 1; s > q; s--, k++) swap(a, k, s);
- if (first < j) sort_faculty(a, first, j);
- if (k < last) sort_faculty(a, k, last);
- }
- void sort_department(struct data a[], int first, int last) {
- int k = first - 1, j = last, p = first - 1, q = last, s; char *x;
- x = a[last].department;
- if (last <= first) return;
- for (;;) {
- while (strcmp(a[++k].department, x) < 0);
- while (strcmp(x, a[--j].department) < 0) if (j == first) break;
- if (k >= j) break;
- swap(a, k, j);
- if (strcmp(a[k].department, x) == 0) { p++; swap(a, p, k); }
- if (strcmp(x, a[j].department) == 0) { q--; swap(a, j, q); }
- }
- swap(a, k, last);
- j = k - 1; k = k + 1;
- for (s = first; s < p; s++, j--) swap(a, s, j);
- for (s = last - 1; s > q; s--, k++) swap(a, k, s);
- if (first < j) sort_department(a, first, j);
- if (k < last) sort_department(a, k, last);
- }
- void sort_cours(struct data a[], int first, int last) {
- int k = first - 1, j = last, p = first - 1, q = last, s; int x;
- x = a[last].cours;
- if (last <= first) return;
- for (;;) {
- while (a[++k].cours < x);
- while (x < a[--j].cours) if (j == first) break;
- if (k >= j) break;
- swap(a, k, j);
- if (a[k].cours == x) { p++; swap(a, p, k); }
- if (x == a[j].cours) { q--; swap(a, j, q); }
- }
- swap(a, k, last);
- j = k - 1; k = k + 1;
- for (s = first; s < p; s++, j--) swap(a, s, j);
- for (s = last - 1; s > q; s--, k++) swap(a, k, s);
- if (first < j) sort_cours(a, first, j);
- if (k < last) sort_cours(a, k, last);
- }
- void sort_group(struct data a[], int first, int last) {
- int k = first - 1, j = last, p = first - 1, q = last, s; int x;
- x = a[last].group;
- if (last <= first) return;
- for (;;) {
- while (a[++k].group < x);
- while (x < a[--j].group) if (j == first) break;
- if (k >= j) break;
- swap(a, k, j);
- if (a[k].group == x) { p++; swap(a, p, k); }
- if (x == a[j].group) { q--; swap(a, j, q); }
- }
- swap(a, k, last);
- j = k - 1; k = k + 1;
- for (s = first; s < p; s++, j--) swap(a, s, j);
- for (s = last - 1; s > q; s--, k++) swap(a, k, s);
- if (first < j) sort_group(a, first, j);
- if (k < last) sort_group(a, k, last);
- }
- void swap(struct data s[], int s1, int s2) {
- struct data temp;
- temp = s[s1];
- s[s1] = s[s2];
- s[s2] = temp;
- }
Add Comment
Please, Sign In to add comment