C/C++

Как написать такую программу на C (си)?

В двумерном массиве A[5][3] ведется фиксация результатов
соревнований по метанию молота. При этом в элемент массива
А [a][b] спортсмену a записывается результат b попытки
бросания молота с точностью до сантиметра.
Победителем турнира является спортсмен, метнувший молот
дальше всех не зависимо от номера попытки.
1. Определить победителя соревнований. Если таких
спортсменов несколько, вывести всех.
2. Определить спортсменов, занявших второе и третье места.
Если таких спортсменов несколько, вывести всех.
3. Вывести рейтинг спортсменов в порядке убывания лучших
результатов метания молота всех спортсменов.
#include <stdlib.h>
#include <stdio.h>
#define ATHLETES 5
#define ATTEMPTS 3
// Фиксация результатов попыток
void fix_the_result(double* record, int athlete, int attempt) {
double result;
printf("Атлет № %i показал результат в %i попытке = ", ++athlete, ++attempt);
scanf_s("%lf", &result);
record[attempt - 1] = result;
}
// Поиск лучшего персонального результата
double personal_best(double* record) {
double best = record[0];
int i;
for (i = 0; i < ATTEMPTS; ++i) {
if (record[i] > best) {
best = record[i];
}
}
return best;
}
// Обмен данных
void dswap(double* value_a, double* value_b) {
double temporary = *value_a;
*value_a = *value_b;
*value_b = temporary;
}
void iswap(int* value_a, int* value_b) {
int temporary = *value_a;
*value_a = *value_b;
*value_b = temporary;
}
// Обмен строк массива
void swap_line(double* record_a, double* record_b) {
int i;
for (i = 0; i < ATTEMPTS; ++i) {
dswap(&record_a[i], &record_b[i]);
}
}
// Сортировка пузырьком строк по убыванию
void sort(double table[ATHLETES][ATTEMPTS], int* athletes) {
int i, j;
for (i = ATHLETES - 1; i > 0; --i) {
for (j = 0; j < i; ++j) {
if (personal_best(table[j]) < personal_best(table[j + 1])) {
swap_line(table[j], table[j + 1]);
iswap(&athletes[j], &athletes[j + 1]);
}
}
}
}
// Вывод результатов
void print_record(double* record) {
int i;
for (i = 0; i < ATTEMPTS; ++i) {
printf("%8.2lf", record[i]);
}
puts("");
}
int main(void) {
double table[ATHLETES][ATTEMPTS] = { 0 };
int athletes[ATHLETES] = { 0 };
int i, j;
double prevois, best;
int place;
system("chcp 1251 > nul");
for (i = 0; i < ATHLETES; ++i) athletes[i] = i + 1;
for (i = 0; i < ATHLETES; ++i) {
for (j = 0; j < ATTEMPTS; ++j) {
fix_the_result(table[i], i, j);
}
}
system("cls");
puts(" Таблица результатов: \n");
for (i = 0; i < ATHLETES; ++i) {
printf(" Атлет № %i", athletes[i]);
print_record(table[i]);
}
best = personal_best(table[0]);
for (i = 1; i < ATHLETES; ++i) {
double next = personal_best(table[i]);
if (next > best) {
best = next;
}
}
for (i = 0; i < ATHLETES; ++i) {
if (personal_best(table[i]) == best) {
printf("\n Победитель № %i\n\n", i + 1);
}
}
sort(table, athletes);
puts(" Занятные места: \n");
place = 1;
prevois = personal_best(table[0]);
for (i = 0; i < ATHLETES; ++i) {
best = personal_best(table[i]);
if (prevois != best) ++place;
printf("%2i. Атлет № %i с результатом: %.2lf\n", place, athletes[i], best);
prevois = best;
}
puts("\n Рейтинг лучших результатов: \n");
for (i = 0; i < ATHLETES; ++i) {
printf(" Атлет № %i = %.2lf\n", athletes[i], personal_best(table[i]));
}
system("pause > nul");
return 0;
}
Максим Шапов
Максим Шапов
54 881
Лучший ответ
Александр Скавыш А можно по отдельности их? Все 3 проги