Файл: Какая страна в среднем показала наилучший результат? - Pascal ABC

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

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

Условие задачи: В судейском журнале участников летней олимпиады имеется список с результатами спортсменов-пловцов. Одна запись этого списка содержит: Ф.И.О. спортсмена, какую страну он представляет, стартовый номер, три результата в секундах для трех заплывов. СУБД должна выдавать следующие сведения: - Определить, участвовал ли спортсмен Х в соревнованиях; - Ф.И.О. спортсмена, занявшего первое место по сумме времени в трех заплывах; - Какая страна в среднем показала наилучший результат. Я написала эту программу через массивы, я не могу написать её через файлы. Помогите, пожалуйста, написать эту же программу через файлы. Код программы(через массивы)
Листинг программы
  1. Program Olimp;
  2. Uses crt;
  3. Type
  4. Spisok=record
  5. Fio:string[30];
  6. Strana:string[30];
  7. X:string;
  8. Num: integer;
  9. Zap1,Zap2,Zap3:real;
  10. Vsegozap:real;
  11. End;
  12. Var
  13. Men:array[1..30] of spisok;
  14. I,n:integer;
  15. Stran,Pobedstran:string;
  16. Pobed:real;
  17. Sum,Kol,Sr,Max:real;
  18. Begin
  19. Write('Введите количество спортсменов - ');
  20. Readln(n);
  21. For i:=1 to n do
  22. With men[i] do begin
  23. Writeln('Информация о ',i,' спортсмене ');
  24. Write('Введите название страны: ');
  25. Readln(strana);
  26. Write('Номер спортсмена: ');
  27. Readln(num);
  28. Write('Ф.И.О.: ');
  29. Readln(fio);
  30. Write('Участвовал ли в соревнованиях : ');
  31. Readln(x);
  32. Writeln('Введите результаты заплывов ',i,'-го пловца в секундах');
  33. Write('Первый заплыв: ');
  34. Readln(zap1);
  35. Write('Второй заплыв: ');
  36. Readln(zap2);
  37. Write('Третий заплыв: ');
  38. Readln(zap3);
  39. End;
  40. For i:=1 to n do
  41. With men[i] do vsegozap:=zap1+zap2+zap3;
  42. For i:=1 to n do begin
  43. Sum:=0;
  44. Kol:=0;
  45. Stran:=men[i].strana;
  46. For i:=1 to n do begin
  47. If stran=men[i].strana then begin
  48. Sum:=men[i].vsegozap+sum;
  49. Kol:=kol+1;
  50. End;
  51. Sr:=sum/kol;
  52. End;
  53. If sr>max then begin
  54. Max:=sr;
  55. Pobedstran:=stran;
  56. End;
  57. End;
  58. Pobed:=0;
  59. For i:=1 to n do
  60. If men[i].vsegozap>pobed then pobed:=men[i].vsegozap;
  61. Writeln(' Участник занявший первое место на соревнованиях: ');
  62. For i:=1 to n do
  63. With men[i] do
  64. If pobed=men[i].vsegozap then begin
  65. Write(fio,' - ',vsegozap,' секунд');
  66. If (men[i].x=' Участвовал ') or (men[i].x=' участвовал ') then begin
  67. Writeln(' Спортсмен участволал в соревнованиях');
  68. End
  69. Else
  70. Writeln(' Спортсмен участвовал в соревнованиях');
  71. End;
  72. Writeln('Победитель среди стран: ');
  73. Writeln(pobedstran,'-Общее количество времени ',max,' секунд');
  74. End.

Решение задачи: «Файл: Какая страна в среднем показала наилучший результат?»

textual
Листинг программы
  1. program Olimp;
  2. uses crt;
  3. type Spisok1=record  //список всех спортсменов
  4.              fio:string[30];
  5.              strana:string[30];
  6.              num: integer;
  7.              zap1,zap2,zap3:real;
  8.              vsegozap:real;
  9.              end;
  10.     Spisok2=record //список стран-участниц
  11.             strana:string[30];
  12.             rez:real;//средний результат
  13.             kol:integer;//количество спортсменов от страны
  14.             end;
  15. var f:file of Spisok1; //файл записей
  16.     men:Spisok1;
  17.     strn:array[1..30] of Spisok2;//массив стран
  18.     n,m,i,j,k,p:integer;
  19.     x,pob,stpob:string[30];
  20.     min:real;
  21. Begin
  22. Write('Введите количество спортсменов - ');
  23. Readln(n);
  24. assign(f,'spisok');
  25. rewrite(f);
  26. for i:=1 to n do
  27. With men do
  28.  begin
  29.   Writeln('Информация о ',i,' спортсмене ');
  30.   Write('Введите название страны: ');
  31.   Readln(strana);
  32.   Write('Номер спортсмена: ');
  33.   Readln(num);
  34.   Write('Ф.И.О.: ');
  35.   Readln(fio);
  36.   Writeln('Введите результаты заплывов ',i,'-го пловца в секундах');
  37.   Write('Первый заплыв: ');
  38.   Readln(zap1);
  39.   Write('Второй заплыв: ');
  40.   Readln(zap2);
  41.   Write('Третий заплыв: ');
  42.   Readln(zap3);
  43.   Vsegozap:=zap1+zap2+zap3;
  44.   write(f,men);
  45.  End;
  46. write('Ввдите Ф.И.О. спортсмена для поиска: ');
  47. readln(x);
  48. //решаем задачу
  49. reset(f);
  50. k:=0;//участвовал или нет
  51. m:=0;//количество разных стран
  52. for i:=0 to filesize(f)-1 do
  53.  begin
  54.   read(f,men);
  55.   if men.fio=x then k:=1; //определяем участвовал или нет
  56.   //ищем победителя
  57.   if i=0 then  //пусть сначала минимальный(не максимальный!!!) результат будет первый
  58.    begin
  59.     min:=men.vsegozap;
  60.     pob:=men.fio;
  61.    end
  62.   else if men.vsegozap<min then //если меньше мин., то это мин.
  63.    begin
  64.     min:=men.vsegozap;
  65.     pob:=men.fio;
  66.    end;
  67.  //составляем массив стран-участниц
  68.   if i=0 then //первая по списку
  69.    begin
  70.     m:=1;
  71.     strn[m].strana:=men.strana;//название
  72.     strn[m].kol:=1; //кол. спортсменов
  73.     strn[m].rez:=men.vsegozap;//суммарный результат
  74.    end
  75.   else  //если не первая
  76.    begin
  77.     p:=0;
  78.     j:=1;
  79.     while(j<=m)and(p=0) do///проверяем была уже или нет
  80.     if strn[j].strana=men.strana then p:=1
  81.     else j:=j+1;
  82.     if p=0 then //если не было
  83.      begin
  84.       m:=m+1; //добавляем ее
  85.       strn[m].strana:=men.strana;
  86.       strn[m].kol:=1;
  87.       strn[m].rez:=men.vsegozap;
  88.      end
  89.    else  //если была
  90.     begin
  91.      strn[m].kol:=strn[m].kol+1;//+1 спортсмен
  92.      strn[m].rez:=strn[m].rez+men.vsegozap; //+ его суммарный результат
  93.     end
  94.   end;
  95.  end;
  96. close(f);
  97. if k=1 then writeln('Спортсмен ',x,' участвовал в соревнованиях')
  98. else writeln('Спортсмен ',x,' не участвовал в соревнованиях');
  99. writeln('Первое место занял: ',pob);
  100. min:=strn[1].rez/strn[1].kol;
  101. stpob:=strn[1].strana;
  102. for i:=2 to m do
  103. if strn[i].rez/strn[i].kol<min then
  104.  begin
  105.   min:=strn[i].rez/strn[i].kol;
  106.   stpob:=strn[i].strana;
  107.  end;
  108. writeln('Наилучший средний результат показала страна: ',stpob);
  109. end.

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

Этот код написан на языке Pascal ABC и выполняет следующие действия:

  1. Запрашивает у пользователя количество спортсменов, для которых нужно записать информацию.
  2. Создает файл spisok и записывает в него информацию о каждом спортсмене.
  3. Создает массив строк strn, который будет содержать информацию о странах-участницах.
  4. Проходит по всем странам-участницам и записывает информацию о каждой из них в файл.
  5. Определяет наилучший средний результат среди всех стран-участниц.
  6. Выводит на экран информацию о спортсмене, который ищет, и наилучшую страну.
  7. Сохраняет наилучший средний результат и страну, которая его показала, в переменных min и stpob соответственно.
  8. Закрывает файл и выводит на экран информацию о наилучшей стране.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы