В двумерном массиве A[5][3] ведется фиксация результатов
соревнований по метанию молота. При этом в элемент массива
А [a][b] спортсмену a записывается результат b попытки
бросания молота с точностью до сантиметра.
Победителем турнира является спортсмен, метнувший молот
дальше всех не зависимо от номера попытки.
1. Определить победителя соревнований. Если таких
спортсменов несколько, вывести всех.
2. Определить спортсменов, занявших второе и третье места.
Если таких спортсменов несколько, вывести всех.
3. Вывести рейтинг спортсменов в порядке убывания лучших
результатов метания молота всех спортсменов.
C/C++
Как написать такую программу на C (си)?
#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;
}
#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;
}
Александр Скавыш
А можно по отдельности их? Все 3 проги
Похожие вопросы
- Написать программу на языке Си
- Помогите написать программу на C++
- На каком языке программирования написан C (Си)?
- Написать программу на c++
- Написать программу на языке Си, которая решит эту задачу:
- Помоги пожалуйста написать программу на C++
- Написать программу на C++.Создать класс vector3d, задаваемый тройкой координат. Создать конструктор...
- Помогите написать программу на C++
- Программа на c++ не работает. Написать структуру и прочее. Подскажите, пожалуйста, что я делаю не так.
- Написать программу на C/C++. Найти количество отрицательных элементов под побочной диагональю.