Введенные данные сгруппировать по возрастанию номера Школы, а в пределах Школы - по возрастанию Класса - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Начинается сессия и, как не прискорбно мне это говорить, на программирование времени не хватает По делу:

Суть задачи:

Есть структура состоящая из полей Имя/Фамилия, Школа и Класс. Мне необходима часть задачи, где нужно введенные данные сгруппировать по возрастанию номера Школы, а в пределах Школы - по возрастанию Класса. Поскольку времени было очень мало, сделал только считывание и вывод:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
        struct uchenik {
        char FSname[100];
        int school;
        int clas;
        }main_struct[6];
        int i,kilk;
    int school_max=1;
    printf("Количество учасников\n");
    scanf("%d",&kilk);
        fflush(stdin);
        for (i=1;i<=kilk;i++){
             printf("Имя и фамилия ученика\n");
             gets(main_struct[i].FSname);
             printf("Школа\n");
             scanf("\n%d",&main_struct[i].school);
             printf("Класс\n");
             scanf("\n%d",&main_struct[i].clas);
         fflush(stdin);
        }
        system("cls");
        for (i=1;i<=kilk;i++){   
             printf("%d-ученик:\n",i);
             printf("%s\n",main_struct[i].FSname);
             printf("%d\n",main_struct[i].school);
             printf("%d\n",main_struct[i].clas);
        }
    getch();
}
Помогите пожалуйста, сдать нужно уже во вторник

Решение задачи: «Введенные данные сгруппировать по возрастанию номера Школы, а в пределах Школы - по возрастанию Класса»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i,j,kilk,clas_9;
 
    struct zmaganya {
        char FSname[100];
        int school;
        int clas;
    } main_struct[4];
    
    zmaganya tmp,pmt;
    printf("Введіть кількість учасників\n");
    scanf("%d",&kilk);
    fflush(stdin);
 
    for (i=0;i<kilk;i++) {
        printf("Прізвище та ім'я %d-го учня\n",i+1);
        gets(main_struct[i].FSname);
        printf("Номер школи\n");
        scanf("\n%d",&main_struct[i].school);
        printf("Клас\n");
        scanf("\n%d",&main_struct[i].clas);
        fflush(stdin);
        }
 
    system("cls");
    for(i=0;i<kilk-1;i++){
        for(j=i+1;j<kilk;j++){
            if(main_struct[i].school>main_struct[j].school){
                tmp=main_struct[i];
                main_struct[i] = main_struct[j];
                main_struct[j] = tmp;
            }
            else if(main_struct[i].school==main_struct[j].school){
                if(main_struct[i].clas>main_struct[j].clas){
                    pmt=main_struct[i];
                    main_struct[i] = main_struct[j];
                    main_struct[j] = pmt;
                    //if(main_struct[i].clas==9) clas_9++;
                }
            }
        }
    }
 
    for (i=0;i<kilk;i++){   
        printf("%d-учень:\n",i+1);
        printf("Имя Фамилия %s\n",main_struct[i].FSname);
        printf("Його школа %d\n",main_struct[i].school);
        printf("Його клас %d\n",main_struct[i].clas);
        }
 
    getch();
}

Объяснение кода листинга программы

Код решает задачу сортировки данных о учениках по двум критериям: номеру школы и номеру класса в пределах школы. Список действий:

  1. Ввод количества участников.
  2. Ввод данных о каждом участнике:
    • Фамилия и имя участника.
    • Номер школы.
    • Номер класса.
  3. Система очистки консоли.
  4. Сортировка данных по номеру школы, а в пределах одной школы - по номеру класса.
  5. Вывод отсортированных данных.
  6. Получение ввода (нажатия клавиши) для завершения работы программы. Внутри цикла сортировки используется два вложенных цикла:
  7. Внешний цикл (i) - проходит по каждому элементу массива.
  8. Внутренний цикл (j) - проходит по элементам, начиная с i+1, т.е. со следующего элемента после текущего. Условие для внутреннего цикла: если номер школы текущего элемента больше номера школы следующего элемента, тогда выполняется сортировка. Внутри условия для внутреннего цикла (если номера школ равны), выполняется еще один вложенный цикл (j) для сортировки по номеру класса. Примечание: в коде есть неиспользуемая переменная clas_9, которая предназначена для подсчета количества учеников 9 класса, но в коде она не используется.

Оцени полезность:

15   голосов , оценка 3.667 из 5
Похожие ответы