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; +}