Задача 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
- 127 reads