Файл: Какая страна в среднем показала наилучший результат? - Pascal ABC
Формулировка задачи:
Условие задачи:
В судейском журнале участников летней олимпиады имеется список с
результатами спортсменов-пловцов. Одна запись этого списка содержит:
Ф.И.О. спортсмена, какую страну он представляет, стартовый номер, три
результата в секундах для трех заплывов.
СУБД должна выдавать следующие сведения:
- Определить, участвовал ли спортсмен Х в соревнованиях;
- Ф.И.О. спортсмена, занявшего первое место по сумме времени в трех заплывах;
- Какая страна в среднем показала наилучший результат.
Я написала эту программу через массивы, я не могу написать её через файлы. Помогите, пожалуйста, написать эту же программу через файлы.
Код программы(через массивы)
Решение задачи: «Файл: Какая страна в среднем показала наилучший результат?»
textual
Листинг программы
program Olimp;
uses crt;
type Spisok1=record //список всех спортсменов
fio:string[30];
strana:string[30];
num: integer;
zap1,zap2,zap3:real;
vsegozap:real;
end;
Spisok2=record //список стран-участниц
strana:string[30];
rez:real;//средний результат
kol:integer;//количество спортсменов от страны
end;
var f:file of Spisok1; //файл записей
men:Spisok1;
strn:array[1..30] of Spisok2;//массив стран
n,m,i,j,k,p:integer;
x,pob,stpob:string[30];
min:real;
Begin
Write('Введите количество спортсменов - ');
Readln(n);
assign(f,'spisok');
rewrite(f);
for i:=1 to n do
With men do
begin
Writeln('Информация о ',i,' спортсмене ');
Write('Введите название страны: ');
Readln(strana);
Write('Номер спортсмена: ');
Readln(num);
Write('Ф.И.О.: ');
Readln(fio);
Writeln('Введите результаты заплывов ',i,'-го пловца в секундах');
Write('Первый заплыв: ');
Readln(zap1);
Write('Второй заплыв: ');
Readln(zap2);
Write('Третий заплыв: ');
Readln(zap3);
Vsegozap:=zap1+zap2+zap3;
write(f,men);
End;
write('Ввдите Ф.И.О. спортсмена для поиска: ');
readln(x);
//решаем задачу
reset(f);
k:=0;//участвовал или нет
m:=0;//количество разных стран
for i:=0 to filesize(f)-1 do
begin
read(f,men);
if men.fio=x then k:=1; //определяем участвовал или нет
//ищем победителя
if i=0 then //пусть сначала минимальный(не максимальный!!!) результат будет первый
begin
min:=men.vsegozap;
pob:=men.fio;
end
else if men.vsegozap<min then //если меньше мин., то это мин.
begin
min:=men.vsegozap;
pob:=men.fio;
end;
//составляем массив стран-участниц
if i=0 then //первая по списку
begin
m:=1;
strn[m].strana:=men.strana;//название
strn[m].kol:=1; //кол. спортсменов
strn[m].rez:=men.vsegozap;//суммарный результат
end
else //если не первая
begin
p:=0;
j:=1;
while(j<=m)and(p=0) do///проверяем была уже или нет
if strn[j].strana=men.strana then p:=1
else j:=j+1;
if p=0 then //если не было
begin
m:=m+1; //добавляем ее
strn[m].strana:=men.strana;
strn[m].kol:=1;
strn[m].rez:=men.vsegozap;
end
else //если была
begin
strn[m].kol:=strn[m].kol+1;//+1 спортсмен
strn[m].rez:=strn[m].rez+men.vsegozap; //+ его суммарный результат
end
end;
end;
close(f);
if k=1 then writeln('Спортсмен ',x,' участвовал в соревнованиях')
else writeln('Спортсмен ',x,' не участвовал в соревнованиях');
writeln('Первое место занял: ',pob);
min:=strn[1].rez/strn[1].kol;
stpob:=strn[1].strana;
for i:=2 to m do
if strn[i].rez/strn[i].kol<min then
begin
min:=strn[i].rez/strn[i].kol;
stpob:=strn[i].strana;
end;
writeln('Наилучший средний результат показала страна: ',stpob);
end.
Объяснение кода листинга программы
Этот код написан на языке Pascal ABC и выполняет следующие действия:
- Запрашивает у пользователя количество спортсменов, для которых нужно записать информацию.
- Создает файл
spisokи записывает в него информацию о каждом спортсмене. - Создает массив строк
strn, который будет содержать информацию о странах-участницах. - Проходит по всем странам-участницам и записывает информацию о каждой из них в файл.
- Определяет наилучший средний результат среди всех стран-участниц.
- Выводит на экран информацию о спортсмене, который ищет, и наилучшую страну.
- Сохраняет наилучший средний результат и страну, которая его показала, в переменных min и stpob соответственно.
- Закрывает файл и выводит на экран информацию о наилучшей стране.