Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С (для ИВТ) / Готовые лабы С / Лаба4 / Laba 4 (5)
.c#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
