Задача 2 Урок 19
Primary tabs
У вас есть текстовый файл с информацией об итогах соревнований (каждая строка
имеет формат: имя + произвольное число пробелов + балл 1 + произвольное число пробелов + балл 2):Вася 16 485 Коля 17 555 Юра 18 61 ..........-- где:
слева указаны имена участников, а справа число баллов.
Первое число в каждой строке -- штрафные баллы набранные участниками,
а второе число -- "положительные баллы", то есть если у нас есть строка:Vasya N Mгде N -- число шрафных баллов, а M - число баллов положительных,
то итоговая оценка Васи Z вычисляется как разность: Z=M-N.Напишите программу, которая определяет победителя и его итоговый
балл (прочитав данный файл построчно).
По возможности разбивайте код на процедуры и функции.
function getDif(inputString: string; var name: string): integer; //ищем имя, проверяем разницу между очками и штрафом var score, fine, errorCode, loopCount: integer; stringToInt: string; flag: boolean; begin score := 0; fine := 0; errorCode := 0; stringToInt := ''; flag := false; name := ''; for loopCount := 1 to length(inputString) do //прохожу по строке begin //ищу число if (inputString[loopCount] >= '0') and (inputString[loopCount] <= '9') then //если символ - цифра begin flag := true; stringToInt := stringToInt + inputString[loopCount]; // то добавляю цифру в числовую строку end else //если символ не цифра begin if flag then //и флаг поднят begin val(stringToInt, fine, errorCode); //то получаем штраф из первого набора цифр stringToInt := '';//обнуляем строку для получения счета //WriteLn('Штрафы: ', fine); flag := false; end else if (inputString[loopCount] <> ' ') then //иначе, если не пробел begin name := name + inputString[loopCount]; //то собираем имя игрока из символов end; end; end; val(stringToInt, score, errorCode); //получаем счет из последнего набора цифр //WriteLn('Счет: ', score); //WriteLn('Разница: ', score - fine); getDif := score - fine; end; procedure fileContent(var f1: text; filename: string);//выводим контент файла var s, winName, name: string; sCount, winScore, maybeWin: integer; begin sCount := 0; winName := ''; name := ''; winScore := 0; assign(f1, filename); // ассоциируем переменную f1 с именем файла {$I-} reset(f1); {$I+} //проверка на ошибку при открытии файла if IOResult <> 0 then WriteLn('Файл ', filename, ' не найден!') else begin WriteLn('Файл существует, вот его содержимое:'); WriteLn(); WriteLn('===Начало файла==='); while not eof(f1) do //пока не конец файла begin readln(f1, s); WriteLn(s); inc(sCount); // считаю строки чисто для себя maybeWin := getDif(s, name); //чтобы не дергать функцию каждый раз if maybeWin > winScore then //смотрим победил ли новый участник предыдущего победителя по итоговому счету; если да, то записываем имя и счет победителя begin winScore := maybeWin; winName := name; end; end; WriteLn('===Конец файла==='); WriteLn(); WriteLn('Число строк в файле ', sCount); WriteLn('Победитель ', winName); WriteLn('С итоговым счетом ', winScore); end; end; var f1: text; filename: string; begin filename := 'C:\Pascal\19\input2.txt'; fileContent(f1, filename); readln(); end.
КОНСОЛЬ
Файл существует, вот его содержимое: ===Начало файла=== Вася 16 485 Коля 17 555 Юра 18 61 Саша 34 456 Андрей 44 67 Влад 2 51 Карл 8 8 Георгий 545 2000 ===Конец файла=== Число строк в файле 8 Победитель Георгий С итоговым счетом 1455
- Log in to post comments
- 347 reads