Задача 3 Урок 19
Primary tabs
Имеется текстовый файл в котором содержится не более 30 строк,
в каждой строке не более 30 символов (пробелы тоже считаются символами).
Цифры и другие символы перемешаны в каждой строке.
Задание: найдите максимальное число, c учетом того,
что числом считаются подряд идущие цифры не только по горизонтали,
но и по вертикали.Примеры:
fsd334rgd rfg46gdfg ter5tge56 123gergf Ответ: 345 fsd334rgd r fg ter5tge56 123gergf Ответ: 334 fsd334rgd r16hyj3f7 23tge6f57 123gergf7 Ответ: 777 \|/ -->*<-- /o\ /_\_\ /_/_0_\ /_o_\_\_\ /_/_/_/_/o\ /@\_\_\@\_\_\ /_/_/O/_/_/_/_\ /_\_\_\_\_\o\_\_\ /_/0/_/_/20_/_/@/_\ /_\_\_\_\_0_\_\_\_\_\ /_/o/_/_/@/2/_/o/_/0/_\ [_2_] Ответ: 2022
type cArr = array[1..30, 1..30] of char; function getWinHorizont(charArr: cArr): integer; //ищем наибольшее из чисел в горизонтали в массиве var newInt1, winInt, errorCode, loopCount1, loopCount2: integer; stringToInt: string; flag: boolean; begin newInt1 := 0; winInt := 0; errorCode := 0; stringToInt := ''; flag := false; for loopCount1 := 1 to 30 do //следующая строка begin for loopCount2 := 1 to 30 do //след ячейка массива begin //ищу число if (charArr[loopCount1, loopCount2] >= '0') and (charArr[loopCount1, loopCount2] <= '9') then //если символ - цифра begin flag := true; stringToInt := stringToInt + charArr[loopCount1, loopCount2]; // то добавляю цифру в числовую строку end else //если символ не цифра begin if flag then //и флаг поднят begin val(stringToInt, newInt1, errorCode); //то получаем число stringToInt := '';//обнуляем строку для получения следующего числа //WriteLn('Число: ', newInt1); flag := false; if newInt1 > winInt then //если новое число больше прошлого большего winInt := newInt1; end; end; end; val(stringToInt, newInt1, errorCode); //получаем число из последнего набора цифр if newInt1 > winInt then //если новое число больше прошлого большего winInt := newInt1; //writeln('Проверки захода в горизонталь'); end; //WriteLn('Число в конце горизонтали: ', winInt); getWinHorizont := winInt; end; function getWinVertical(charArr: cArr): integer; var newInt1, winInt, errorCode, loopCount1, loopCount2: integer; stringToInt: string; flag: boolean; begin newInt1 := 0; winInt := 0; errorCode := 0; stringToInt := ''; flag := false; for loopCount2 := 1 to 30 do //след ячейка массива begin for loopCount1 := 1 to 30 do //след строка массива begin if (charArr[loopCount1, loopCount2] >= '0') and (charArr[loopCount1, loopCount2] <= '9') then //если символ - цифра begin flag := true; stringToInt := stringToInt + charArr[loopCount1, loopCount2]; // то добавляю цифру в числовую строку end else //если символ не цифра begin if flag then //и флаг поднят begin val(stringToInt, newInt1, errorCode); //то получаем число stringToInt := '';//обнуляем строку для получения следующего числа flag := false; if newInt1 > winInt then //если новое число больше прошлого большего winInt := newInt1; //WriteLn('Число: ', winInt); end; end; end; val(stringToInt, newInt1, errorCode); //получаем число из последнего набора цифр if newInt1 > winInt then //если новое число больше прошлого большего winInt := newInt1; //writeln('Проверки захода в вертикаль'); end; //WriteLn('Число в конце вертикали: ', winInt); getWinVertical := winInt; end; procedure sendToArr(s: string; sCount: integer; var charArr: cArr); var loopCount: integer; begin for loopCount := 1 to length(s) do begin charArr[sCount, loopCount] := s[loopCount]; end; if length(s) < 30 then begin for loopCount := length(s) + 1 to 30 do begin charArr[sCount, loopCount] := ' '; end; end; end; procedure fillArr(sCount: integer; var charArr: cArr); var loopCount1, loopCount2: integer; begin if sCount < 30 then begin for loopCount1 := sCount + 1 to 30 do //след ячейка массива begin for loopCount2 := 1 to 30 do //след строка массива begin charArr[loopCount1, loopCount2] := ' '; end; end; end; end; procedure fileContent(var f1: text; filename: string; charArr: cArr); //выводим контент файла и получаем большее число var s: string; sCount, winInt, intOfFunction: integer; begin sCount := 0;//счетчик строк - чисто для себя winInt := 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); // считаю строки чисто для себя sendToArr(s, sCount, charArr); //отправляем строку для записи в массив end; end; if sCount < 30 then fillArr(sCount, charArr); intOfFunction := getWinHorizont(charArr); if intOfFunction > winInt then winInt := intOfFunction; intOfFunction := getWinVertical(charArr); if intOfFunction > winInt then winInt := intOfFunction; WriteLn('===Конец файла==='); WriteLn(); //WriteLn('Число строк в файле ', sCount); WriteLn('Наибольшее число ', winInt); end; var f1: text; filename: string; charArr: cArr; begin filename := 'C:\Pascal\19\input3.txt'; fileContent(f1, filename, charArr); readln(); end.
КОНСОЛЬ
Файл существует, вот его содержимое: ===Начало файла=== \|/ -->*<-- /o\ /_\_\ /_/_0_\ /_o_\_\_\ /_/_/_/_/o\ /@\_\_\@\_\_\ /_/_/O/_/_/_/_\ /_\_\_\_\_\o\_\_\ /_/0/_/_/20_/_/@/_\ /_\_\_\_\_0_\_\_\_\_\ /_/o/_/_/@/2/_/o/_/0/_\ [_2_] ===Конец файла=== Наибольшее число 2022
- Log in to post comments
- 484 reads