Файл: Какая страна в среднем показала наилучший результат? - Pascal ABC
Формулировка задачи:
Условие задачи:
В судейском журнале участников летней олимпиады имеется список с
результатами спортсменов-пловцов. Одна запись этого списка содержит:
Ф.И.О. спортсмена, какую страну он представляет, стартовый номер, три
результата в секундах для трех заплывов.
СУБД должна выдавать следующие сведения:
- Определить, участвовал ли спортсмен Х в соревнованиях;
- Ф.И.О. спортсмена, занявшего первое место по сумме времени в трех заплывах;
- Какая страна в среднем показала наилучший результат.
Я написала эту программу через массивы, я не могу написать её через файлы. Помогите, пожалуйста, написать эту же программу через файлы.
Код программы(через массивы)
Листинг программы
- Program Olimp;
- Uses crt;
- Type
- Spisok=record
- Fio:string[30];
- Strana:string[30];
- X:string;
- Num: integer;
- Zap1,Zap2,Zap3:real;
- Vsegozap:real;
- End;
- Var
- Men:array[1..30] of spisok;
- I,n:integer;
- Stran,Pobedstran:string;
- Pobed:real;
- Sum,Kol,Sr,Max:real;
- Begin
- Write('Введите количество спортсменов - ');
- Readln(n);
- For i:=1 to n do
- With men[i] do begin
- Writeln('Информация о ',i,' спортсмене ');
- Write('Введите название страны: ');
- Readln(strana);
- Write('Номер спортсмена: ');
- Readln(num);
- Write('Ф.И.О.: ');
- Readln(fio);
- Write('Участвовал ли в соревнованиях : ');
- Readln(x);
- Writeln('Введите результаты заплывов ',i,'-го пловца в секундах');
- Write('Первый заплыв: ');
- Readln(zap1);
- Write('Второй заплыв: ');
- Readln(zap2);
- Write('Третий заплыв: ');
- Readln(zap3);
- End;
- For i:=1 to n do
- With men[i] do vsegozap:=zap1+zap2+zap3;
- For i:=1 to n do begin
- Sum:=0;
- Kol:=0;
- Stran:=men[i].strana;
- For i:=1 to n do begin
- If stran=men[i].strana then begin
- Sum:=men[i].vsegozap+sum;
- Kol:=kol+1;
- End;
- Sr:=sum/kol;
- End;
- If sr>max then begin
- Max:=sr;
- Pobedstran:=stran;
- End;
- End;
- Pobed:=0;
- For i:=1 to n do
- If men[i].vsegozap>pobed then pobed:=men[i].vsegozap;
- Writeln(' Участник занявший первое место на соревнованиях: ');
- For i:=1 to n do
- With men[i] do
- If pobed=men[i].vsegozap then begin
- Write(fio,' - ',vsegozap,' секунд');
- If (men[i].x=' Участвовал ') or (men[i].x=' участвовал ') then begin
- Writeln(' Спортсмен участволал в соревнованиях');
- End
- Else
- Writeln(' Спортсмен участвовал в соревнованиях');
- End;
- Writeln('Победитель среди стран: ');
- Writeln(pobedstran,'-Общее количество времени ',max,' секунд');
- End.
Решение задачи: «Файл: Какая страна в среднем показала наилучший результат?»
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 соответственно.
- Закрывает файл и выводит на экран информацию о наилучшей стране.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д