Задача 2 Урок 20
Primary tabs
Задача 2 Урок 20 У вас есть текстовый файл с информацией об итогах соревнований (каждая строка имеет формат: имя + произвольное число пробелов + балл 1 + произвольное число пробелов + балл
Вася 16 485
Коля 17 555
Юра 18 61
слева указаны имена участников, а справа число баллов.
Первое число в каждой строке -- штрафные баллы набранные участниками, а второе число -- "положительные баллы", то есть если у нас есть строка:
где N
-число шрафных баллов, а M
-число баллов положительных, то итоговая оценка Васи Z
вычисляется как разность:Z=M−N.
Напишите программу, которая определяет победителя и его итоговый балл (прочитав данный файл построчно).
По возможности разбивайте код на процедуры и функции.
type myarrs = array [1..100] of string; // массив для имени
myarri = array [1..100] of integer; // масств для балла
Var
f1:text; // тип для открытия текстового файла
filename, s: string; // для чтения файла
name : string; // переменная для изначального хранения имени
ball:integer; // переменная для изначального хранения баллла
namerecord : myarrs;
ballrecord : myarri;
i,j : integer; // счётчики
procedure writearray(h : string; var sname : string; var sbal:integer);
var i, c : integer; // подпрош для преоброазования и поиска строк и числе
n,m: string; // лок переменные для хранения чисел
n1,m1: integer; // лок переменные для расчёта балла
flag:boolean; // флаг для определения в какую переменную записывать
begin
flag:=false;
sname:='';
n:='';
m:='';
for i:=1 to length(h) do // цикл от начала до конца строки
begin
val(h[i], sbal, c); // в подпрог для определения где числа, а где строки
if (c<>0) then // если код<>0 то это строка
sname := sname + h[i]; // то запись в эту переменную(имя)
if (h[i]=' ') and (n<>'') then flag:=true; // если встретили пробел и n не пустует(штрафной балл), то флаг правда(начнётсяф запись в m)
if (h[i] >= '0') and (h[i] <= '9') and (flag=false) then // если цифра и флаг лож
n := n + h[i] // то запись в n(штрафные баллы)
else // если нет
if (h[i] >= '0') and (h[i] <= '9') then // если цифра
m:=m+h[i]; // то запись в m(победные баллы)
end;
val(n, sbal, c); // преобразуем строку в число
n1:=sbal;
val(m, sbal, c); // преобразуем строку в число
m1:=sbal;
sbal:=m1-n1; // расчитываем финальный балл
end;
procedure winner(namerecord : myarrs; ballrecord : myarri ; j:integer);
var w,i:integer;// счётчики
begin
w:=1;
for i:=2 to j do
if (ballrecord[i]>ballrecord[w]) then
w:=i;
writeln('winner: ',namerecord[w],' ',ballrecord[w]);
end;
begin
i:=0;
filename := 'C:\Users\user\Documents\sorevnovanie.txt'; // путь к файлу
assign(f1, filename); { связывание переменной дескриптора с путём к файлу }
reset(f1); // открываем файла для чтения
while not eof(f1) do // пока не достигнут конец файла
begin
readln(f1, s); // читаем из него очередную строку
writearray(s, name, ball); // в процедуру передаём строчку, имя и балл
j+=1; // плюс к счётчику
namerecord[j]:=name; // запись имени в массив
ballrecord[j]:=ball; // запись финального балла в массив
end;
for i:=1 to j do
writeln(namerecord[i],ballrecord[i]); // вывод на экран имён с баллами
winner (namerecord,ballrecord,j); // в процедуру для опр победителя
readln();
end.
Вывод консоли:
Vasilii 85 Ilia 90 Vova 125 Evgen 197 winner: Evgen 197
- Log in to post comments
- 471 reads