Pascal Урок 18 Задача 2
Primary tabs
У вас есть текстовый файл с информацией об итогах соревнований (каждая строка имеет формат: имя + произвольное число пробелов + балл 1 + произвольное число пробелов + балл 2):
Вася 16 485
Коля 17 555
Юра 18 61
..........
-- где:
слева указаны имена участников, а справа число баллов.
Первое число в каждой строке -- штрафные баллы набранные участниками, а второе число -- "положительные баллы", то есть если у нас есть строка:
Vasya N M
где N -- число шрафных баллов, а M - число баллов положительных, то итоговая оценка Васи Z вычисляется как разность:
Z=M−N.
Напишите программу, которая определяет победителя и его итоговый балл (прочитав данный файл построчно).
По возможности разбивайте код на процедуры и функции.
program U18Z2; type a=array[1..3] of integer; b=array[1..3] of string; procedure ConsOlymp(var f1:text;s:string;var t:b;var l,m:a); var i,d,f,n: integer; w,k:string; v:boolean; begin d:=1; while not eof(f1) do // пока не достигнут конец файла begin v:=true; readln(f1, s); // читаем из него очередную строку for i:= 1 to length(s) do begin if (s[i]>='0')and(s[i]<='9')and(v=true) then begin w:=w+s[i]; val(w,f); l[d]:=f; end else if (s[i]<>' ')and(v=true) then begin k:=k+s[i]; t[d]:=k; end else if(s[i]=' ')and(l[d]<>0) then begin v:=false; w:=' '; end else if (v = false)and(l[d]<>0) then begin w:=w+s[i]; val(w,f); m[d]:=f; end; end; m[d]:=m[d]-l[d]; d:=d+1; w:=''; k:=''; end; end; procedure ResOlimp(t:b;m:a); var max,d,n:integer; begin max:=0; for d:= low(m) to high(m) do begin if m[d] > max then begin max:=m[d]; n:=d; end; end; d:=n; writeln('Pobeditel: ',t[d]); writeln('S kolichestvom ballov: ',max); end; var f1:text; // тип для открытия текстового файла filename,s: string; t:b; l,m:a; begin filename := 'C:\Users\User\Desktop\Pascal\U18Z2\7.txt'; // путь к файлу assign(f1, filename); { связывание переменной дескриптора с путём к файлу } reset(f1); // открываем файла для чтения ConsOlymp(f1,s,t,l,m); ResOlimp(t,m); readln(); end.
- Log in to post comments
- 3178 reads
vedro-compota
Sat, 09/05/2020 - 20:08
Permalink
v:=true;
-- дать осмысленно название.
2) Вынести в процедуру разбор строки:
3)
-- рискованное присваивание максимуму нуля, прокатит далеко не везде (хотя в этой задаче подходит).
_____________
матфак вгу и остальная классика =)
JimATI
Mon, 09/07/2020 - 18:04
Permalink
Доработка программы
vedro-compota
Wed, 09/09/2020 - 19:17
Permalink
рискованное присваивание
1) рискованное присваивание максимуму нуля сохранилось
2) ArrIsFull - имя лучше, но неточно
_____________
матфак вгу и остальная классика =)
JimATI
Sat, 09/12/2020 - 18:58
Permalink
Доработка программы
vedro-compota
Sat, 09/12/2020 - 20:16
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)