From 667f04f70e802d2184275d7a26f370b7a4fa92e6 Mon Sep 17 00:00:00 2001 From: Denys Sanchuk Date: Tue, 11 Mar 2025 13:39:10 +0000 Subject: [PATCH] =?UTF-8?q?P=C5=99idat=20du4/program.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- du4/program.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 du4/program.c diff --git a/du4/program.c b/du4/program.c new file mode 100644 index 0000000..63d3123 --- /dev/null +++ b/du4/program.c @@ -0,0 +1,83 @@ +#include +#include +#include + +#define MAX_LEN 256 +#define MAX_NAME_LEN 100 + +// Структура для хранения информации о студенте +typedef struct { + char name[MAX_NAME_LEN]; // имя студента + int votes; // количество голосов +} Student; + +// Функция для сравнения студентов по количеству голосов (сначала по количеству голосов, затем по имени) +int compare_students(const void *a, const void *b) { + Student *student_a = (Student *)a; + Student *student_b = (Student *)b; + + // Сначала сортируем по количеству голосов (по убыванию) + if (student_b->votes != student_a->votes) { + return student_b->votes - student_a->votes; + } + + // Если количество голосов одинаковое, сортируем по имени (по алфавиту) + return strcmp(student_a->name, student_b->name); +} + +int main() { + Student students[MAX_LEN]; // Массив для хранения информации о студентах + int student_count = 0; // Количество студентов, проголосовавших + + char line[MAX_LEN]; + + // Считываем ввод до конца + while (fgets(line, MAX_LEN, stdin)) { + int votes; + char name[MAX_NAME_LEN]; + + // Проверяем формат строки (первое число - количество голосов, затем имя) + if (sscanf(line, "%d %[^\n]", &votes, name) != 2) { + // Если формат неправильный, выводим ошибку и завершаем программу + if (student_count == 0) { + printf("CHYBA\n"); + return 0; + } + break; + } + + // Ищем студента в списке + int found = 0; + for (int i = 0; i < student_count; i++) { + if (strcmp(students[i].name, name) == 0) { + students[i].votes += votes; + found = 1; + break; + } + } + + // Если студент не найден, добавляем его в список + if (!found) { + if (student_count < MAX_LEN) { + strcpy(students[student_count].name, name); + students[student_count].votes = votes; + student_count++; + } else { + // Если достигнут предел студентов, прекращаем ввод + printf("CHYBA\n"); + return 0; + } + } + } + + // Недостающая часть: сортировка и вывод результатов (не завершено) + // qsort(students, student_count, sizeof(Student), compare_students); + + // Примерный вывод без сортировки + printf("Vysledky:\n"); + for (int i = 0; i < student_count; i++) { + printf("%d %s\n", students[i].votes, students[i].name); + } + + return 0; +}