Описать структуру "Спортсмен" - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Функции 1. Ввод данных (ввод данных с клавиатуры, чтение данных с файла [предусмотреть запись данных в файл, чтение данных из файла]). 2. Обработка данных (добавление и удаление записей) 3. Поиск информации 4. Вывод упорядоченной информации (вывод результатов) 5. Выход из программы. Структура элемента массива спортсмен: фамилия, страна, год рождения, результат (в баллах), физические данные – рост, вес. Определить: ─ средний рост и вес спортсменов заданной страны; ─ найти лучшего спортсмена заданной страны; ─ список спортсменов заданного возраста с результатом, не хуже заданного.
Также нужно использовать процедуры

Решение задачи: «Описать структуру "Спортсмен"»

textual
Листинг программы
program Federal_Athletics;
uses crt;
Const MAX_Athletes = 100;
 
type
Athlete = record
Number:byte; Last_Name:string[20]; Country:string[20]; AGE_OF:integer; Score:integer; Growth:130..220; Weight:30..140;
 
end;
List_of_Athletes = array[1..MAX_Athletes] of Athlete;
 
var
a:List_of_Athletes; l:file of Athlete; i,j,n:byte; g:integer;
 
//
 
Procedure Enterface;
begin TextBackGround( White ); TextColor( Black );
clrscr; end;
 
//
 
Procedure WriteFromKeyboard(a:list_of_athletes; i:byte);
var s:byte; n:byte;
begin
i:= 0; J:= 0; 
repeat
inc(j); 
clrscr; 
inc(i);
write('  Номер : '); readln(a[i].number);
write('  Фамилия: '); readln(a[i].Last_Name);
write('  Страна: '); readln(a[i].Country);
write('  Рост(130..220): '); readln(a[i].Growth);
write('  Вес(30..140): '); readln(a[i].Weight);
write('  Возраст: '); readln(a[i].AGE_OF);
write('  Результат: '); readln(a[i].Score); writeln;
writeln(' Выход: - "1"'); 
writeln(' Продолжить: - "2" затем "ВВОД"');
readln(s); 
until s=1; 
assign(l, 'Athlete.dat'); 
rewrite(l); 
for i := 1 to n do 
write(l, A[i]); 
close(l); 
end;
 
//
 
Procedure Process(A:List_Of_Athletes; i:byte); //нужно A[i].Score,Growth,Weight,Country,Age_OF,Last_Name)
var gr,wg:real; max,res,age:integer; s1:string;  bol:boolean; m,k:byte;
begin 
write(' Страна: '); readln(s1);
write(' Результат: '); readln(res);
write(' Возраст: '); readln(age); 
writeln;
gr:=0; wg:=0; m:=0; max:=a[1].Score; k:=1; 
bol:= true;
for i:= 1 to Max_Athletes do 
if a[i].Country = s1 then 
begin 
inc(m);
gr:= gr + a[i].Growth; 
wg:= wg + a[i].Weight;
if a[i].Score>max 
then 
begin 
max:=a[i].Score; 
k:=i; 
end;     
if (a[i].AGE_OF=age) and (a[i].Score>=res) then 
begin
writeln('   Cписок спортсменов данного возраста с результатом, не хуже данного: ':69,a[i].Last_Name);
bol:= false; 
end; 
end;
if bol then 
writeln('   Спортсменов данного возраста с результатом, не хуже данного не найдено.');   
writeln('   Средний рост спортсменов ',s1,': ',gr/m:0:3);
writeln('   Средний вес спортсменов ',s1,': ',wg/m:0:3);
writeln('   Лучший спортсмен ',s1,': ',a[k].Last_Name);
readln;
end;
 
//
 
Procedure Output;
var i:byte;
begin
write('Введите кол-во записей');
readln(i); j:=i;
writeln('№':3,'Фамилия':10,'Страна':14,'Рост':6,'Вес':6,'Возраст':11,'Результат':11);
for i:=1 to j  do
writeln(i:3,a[i].Last_Name:10,a[i].Country:14,a[i].Growth:6,a[i].Weight:6,a[i].AGE_OF:11,a[i].Score:11);
end;
 
//
 
procedure add(n:byte); 
var 
i: integer;
begin 
Write('Введите количество атлетов которое хотите добавить: '); 
readln(n); 
Writeln('Ввод данных...'); 
for i := 1 to n do 
begin 
write('  Номер : '); readln(a[i].number);
write('  Фамилия: '); readln(a[i].Last_Name);
write('  Страна: '); readln(a[i].Country);
write('  Рост(130..220): '); readln(a[i].Growth);
write('  Вес(30..140): '); readln(a[i].Weight);
write('  Возраст: '); readln(a[i].AGE_OF);
write('  Результат: '); readln(a[i].Score); writeln;
end;
assign(l, 'Athlete.dat'); 
rewrite(l); 
for i := 1 to n do 
write(l, A[i]); 
close(l); 
end;
 
//
 
procedure scan; 
 
begin 
assign(l, 'Athlete.dat'); 
reset(l); 
i := 0; 
while not Eof(l) do 
begin 
i := i + 1; 
read(l,a[i]); 
end; 
close(l); 
writeln(i);
readln;
end;
 
//scan,add,process,WriteFromKeyboard,Output
 
begin
Enterface;
assign(l,'Athlete.dat');
rewrite(l);
writeln('Введите 1 для того чтобы записать в файл числа с клавиатуры');
writeln('Введите 2 для того чтобы считать с файл и выполнить вычисление');
writeln('Введите 3 для того чтобы считать с клавиатуры и выполнить вычисление');
writeln('Вывод данных с файла: 4');
write('Введите 5 для того чтобы добавить записи в файл');
writeln('для окончания "ВВОД"'); readln(g);
repeat
if g=1 then begin WriteFromKeyboard(A,i); end;
if g=2 then begin scan; process(a,i); end;
if g=3 then begin WriteFromKeyboard(a,i); process(a,i); end;
if g=4 then begin scan; Output; end;
if g=5 then begin add(n); end;
until g=6;
end.

Объяснение кода листинга программы

  1. Объявление переменных и структур:
    • MAX_Athletes - константа, определяющая максимальное количество спортсменов (100).
    • Athlete - структура, описывающая одного спортсмена. Содержит поля:
    • Number - номер спортсмена (тип byte).
    • Last_Name - фамилия спортсмена (тип string[20]).
    • Country - страна спортсмена (тип string[20]).
    • AGE_OF - возраст спортсмена (тип integer).
    • Score - результат спортсмена (тип integer).
    • Growth - рост спортсмена (тип integer, диапазон значений 130..220).
    • Weight - вес спортсмена (тип integer, диапазон значений 30..140).
    • List_of_Athletes - массив, содержащий список спортсменов. Каждый элемент массива - структура Athlete.
    • a - список спортсменов (тип List_of_Athletes).
    • l - файл спортсменов (тип file of Athlete).
    • i, j, n - переменные для подсчета количества спортсменов.
    • g - переменная для обработки различных команд (тип integer).
  2. Процедуры:
    • Enterface - вывод информации на экран и очистка экрана.
    • WriteFromKeyboard - ввод данных о спортсменах с клавиатуры и запись их в файл.
    • Process - обработка данных о спортсменах: поиск спортсменов определенной страны, вычисление среднего роста, веса, поиск спортсмена с лучшим результатом в указанном возрасте.
    • Output - вывод данных о спортсменах на экран.
    • Add - добавление новых спортсменов в список и запись обновленного списка в файл.
    • Scan - чтение данных из файла и обработка их.
  3. Основная часть программы:
    • Ввод команды пользователем (числа от 1 до 6).
    • Если команда равна 1, то выполняется процедура WriteFromKeyboard и данные записываются в файл.
    • Если команда равна 2, то выполняется процедура Scan, затем процедура Process и результаты вычислений выводятся на экран.
    • Если команда равна 3, то выполняется процедура WriteFromKeyboard, затем процедура Process и результаты вычислений выводятся на экран.
    • Если команда равна 4, то выполняется процедура Scan и результаты вычислений выводятся на экран.
    • Если команда равна 5, то выполняется процедура Add, которая добавляет новых спортсменов в список и записывает обновленный список в файл.
    • Если команда равна 6, то цикл завершается.

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы