Урок 19. Задача 2.
Primary tabs
У вас есть текстовый файл с информацией об итогах соревнований (каждая строка имеет формат: имя + произвольное число пробелов + балл 1 + произвольное число пробелов + балл 2):
Вася 16 485 Коля 17 555 Юра 18 61 ..........Напишите программу, которая определяет победителя и его итоговый балл (прочитав данный файл построчно).
По возможности разбивайте код на процедуры и функции.
type ar = array[1..20] of string;
type br = array[1..10] of integer;
Var f1:text; // тип для открытия текстового файла
filename, s: string;
aRs :ar;
bRs :br;
cnt, i :integer;
function count(var cnt :integer) :integer;
begin
cnt := cnt + 1;
count := cnt;
end;
procedure make_array_string(s :string);
var i :integer;
str :string;
fl :boolean;
begin
for i := 1 to length(s) do
if (i = length(s)) and (s[i] <> '.') then
begin
str := str + s[i];
count(cnt);
aRs[cnt] := str;
end
else
if (s[i] <> ' ') and (s[i] <> '.') then
begin
str := str + s[i];
fl := true;
end
else
if s[i] = ' ' then
if fl then
begin
count(cnt);
aRs[cnt] := str;
str := '';
fl := false;
end
else
continue;
end;
procedure make_array_integer(aRs :ar; cnt :integer);
var i, j, vl_I, vl_C :integer;
s :string;
begin
j := 1;
for i := 1 to cnt do
begin
s := aRs[i];
val(s, vl_I, vl_C);
if vl_C = 0 then
begin
bRs[j] := vl_I;
j := j + 1;
end;
end;
end;
begin
cnt := 1;
filename := 'C:\Pascal\U_0\input.txt'; // путь к файлу
assign(f1, filename);
{$I-} reset(f1); {$I+} // попытка открыть файл на чтение с подавлением ошибки
if IOResult <> 0 then // если есть ошибки
begin
writeLn('File ', filename, ' ne naiden!');
end else // если удалось открыть на чтение
begin
writeLn('File ', filename, ' suchectvuet. I vot ego soderzimoe:');
while not eof(f1) do
begin
readln(f1, s);
make_array_string(s);
end;
end;
make_array_integer(aRs, cnt);
if (bRs[2] - bRs[1] > bRs[4] - bRs[3]) and (bRs[6] - bRs[5] < bRs[4] - bRs[3]) then
writeln('Vasya - ', bRs[2] - bRs[1])
else
if bRs[6] - bRs[5] < bRs[4] - bRs[3] then
writeln('Kolya - ', bRs[4] - bRs[3])
else
writeln('Urya - ', bRs[6] - bRs[5]);
readln();
end.
File C:\Pascal\U_0\input.txt suchectvuet. I vot ego soderzimoe: Kolya - 538
- Log in to post comments
- 2022 reads
vedro-compota
Wed, 10/05/2022 - 19:14
Permalink
if s[i] = ' ' then
-- можно переписать без вложенности + ветка else когда находится в конце витка только с continue не нужна.
_____________
матфак вгу и остальная классика =)
Dennis80
Sun, 10/09/2022 - 12:16
Permalink
type ar = array[1..20] of
type ar = array[1..20] of string; type br = array[1..10] of integer; Var f1:text; // тип для открытия текстового файла filename, s: string; aRs :ar; bRs :br; cnt, i :integer; function count(var cnt :integer) :integer; begin cnt := cnt + 1; count := cnt; end; procedure make_array_string(s :string); var i :integer; str :string; fl :boolean; begin for i := 1 to length(s) do if (i = length(s)) and (s[i] <> '.') then begin str := str + s[i]; count(cnt); aRs[cnt] := str; end else if (s[i] <> ' ') and (s[i] <> '.') then begin str := str + s[i]; fl := true; end else if (s[i] = ' ') and fl then begin count(cnt); aRs[cnt] := str; str := ''; fl := false; end ; end; procedure make_array_integer(aRs :ar; cnt :integer); var i, j, vl_I, vl_C :integer; s :string; begin j := 1; for i := 1 to cnt do begin s := aRs[i]; val(s, vl_I, vl_C); if vl_C = 0 then begin bRs[j] := vl_I; j := j + 1; end; end; end; begin cnt := 1; filename := 'C:\Pascal\U_0\input.txt'; // путь к файлу assign(f1, filename); {$I-} reset(f1); {$I+} // попытка открыть файл на чтение с подавлением ошибки if IOResult <> 0 then // если есть ошибки begin writeLn('File ', filename, ' ne naiden!'); end else // если удалось открыть на чтение begin writeLn('File ', filename, ' suchectvuet. I vot ego soderzimoe:'); while not eof(f1) do begin readln(f1, s); make_array_string(s); end; end; make_array_integer(aRs, cnt); if (bRs[2] - bRs[1] > bRs[4] - bRs[3]) and (bRs[6] - bRs[5] < bRs[4] - bRs[3]) then writeln('Vasya - ', bRs[2] - bRs[1]) else if bRs[6] - bRs[5] < bRs[4] - bRs[3] then writeln('Kolya - ', bRs[4] - bRs[3]) else writeln('Urya - ', bRs[6] - bRs[5]); readln(); end.vedro-compota
Sun, 10/09/2022 - 14:05
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)