Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
3.37 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>

int main() {
    int groups, students, exams;
    int ***session;
    double *subject_avg;
    int i, j, k;
    double min_avg;
    int hardest_subject;
    
    printf("Enter number of groups: ");
    scanf("%d", &groups);
    printf("Enter number of students per group: ");
    scanf("%d", &students);
    printf("Enter number of exams: ");
    scanf("%d", &exams);
    
    // Динамическое выделение памяти для 3D массива
    session = (int***)malloc(groups * sizeof(int**));
    for (i = 0; i < groups; i++) {
        session[i] = (int**)malloc(students * sizeof(int*));
        for (j = 0; j < students; j++) {
            session[i][j] = (int*)malloc(exams * sizeof(int));
        }
    }
    
    subject_avg = (double*)malloc(exams * sizeof(double));
    
    // Ввод данных
    printf("Enter session results (1-4, 1 - absence):\n");
    for (i = 0; i < groups; i++) {
        printf("Group %d:\n", i + 1);
        for (j = 0; j < students; j++) {
            printf("  Student %d: ", j + 1);
            for (k = 0; k < exams; k++) {
                scanf("%d", &session[i][j][k]);
                // Проверка корректности оценки
                if (session[i][j][k] < 1 || session[i][j][k] > 4) {
                    printf("Error: grade must be between 1 and 4\n");
                    return 1;
                }
            }
        }
    }
    
    // Вычисление средних баллов по предметам через индексацию
    for (k = 0; k < exams; k++) {
        double sum = 0;
        int count = 0;
        
        for (i = 0; i < groups; i++) {
            for (j = 0; j < students; j++) {
                // Не учитываем неявки (оценка 1)
                if (session[i][j][k] > 1) {
                    sum += session[i][j][k];
                    count++;
                }
            }
        }
        
        subject_avg[k] = (count > 0) ? sum / count : 0;
        printf("Subject %d average: %.2f\n", k + 1, subject_avg[k]);
    }
    
    // Поиск предмета с наименьшим средним баллом
    min_avg = subject_avg[0];
    hardest_subject = 0;
    
    for (k = 1; k < exams; k++) {
        if (subject_avg[k] < min_avg) {
            min_avg = subject_avg[k];
            hardest_subject = k;
        }
    }
    
    printf("\nThe most difficult subject is subject %d with average %.2f\n", 
           hardest_subject + 1, min_avg);
    
    // Через указатели
    min_avg = subject_avg[0];
    hardest_subject = 0;
    double *p_avg = subject_avg;
    
    for (k = 0; k < exams; k++) {
        if (*p_avg < min_avg) {
            min_avg = *p_avg;
            hardest_subject = k;
        }
        p_avg++;
    }
    
    printf("Via pointers: The most difficult subject is subject %d with average %.2f\n", 
           hardest_subject + 1, min_avg);
    
    // Освобождение памяти
    for (i = 0; i < groups; i++) {
        for (j = 0; j < students; j++) {
            free(session[i][j]);
        }
        free(session[i]);
    }
    free(session);
    free(subject_avg);
    
    return 0;
}
Соседние файлы в папке Лаба4