Задача 3 Урок 20
Primary tabs
Задача 3 Урок 20 Имеется текстовый файл в котором содержится не более 30 строк, в каждой строке не более 30 символов (пробелы тоже считаются символами). Цифры и другие символы перемешаны в каждой строке.
Задание: найдите максимальное число, c учетом того, что числом считаются подряд идущие цифры не только по горизонтали, но и по вертикали.
var f1: text; filename, s, n: string; i, j, c, int, o, max, smax: integer; a: array [1..30] of string; begin filename := 'C:\Users\user\Documents\bolshee po gorver.txt'; // путь к файлу assign(f1, filename); // связывание переменной дескриптора с путём к файлу reset(f1); // открываем файла для чтения while not eof(f1) do // пока не достигнут конец файла begin readln(f1, s); // читаем из него очередную строку c += 1; // плюс к счётчику a[c] := s; // записываем строку в массив n := ''; if smax < length(s) then smax := length(s); // если переменная smax меньше длинны строки то записываем длинну строки в smax // (в блоке от 6 до 26 ищем самую большую строку по горизонтали) for i := 1 to length(s) + 1 do // цикл до максимальной длинны +1(если последняя будет цифра чтобы переменная попала в val) begin val(s[i], int, o); // отправляем превый символ из строки s для проверки число или нет if o = 0 then n += s[i] // если o(code)=0 то это число значит n прибавляем на это число else // если нет begin val(n, int, o);// в подпрог для преобразования строки n в число if int > max then max := int;// если n больше max значит записываем int в max n := ''; end; end; end; for i := 1 to c do // внешний цикл от 1 до смотря сколько количества строк for j := 1 to smax do // внутренний цикл от одного до максимального количество символов в одной из строки if length(a[i]) < smax then a[i] += ' '; // если максимальная длинна строки в массиве меньше самой максимальной строки то + пробел ( нужно для выравнивания всех сторк особенно нужно если большие цифры стоят по вертикали) for i := 1 to smax do // внешний цикл от 1 до максимального количества символов(горизонталь) begin n := ''; // обнуляем for j := 1 to c do // внутренний цикл от 1 до смотря сколшько количества строк (вертикаль) // (в блоке от 28 до 58 ищем самую большую строку по вертикали) begin val(a[j][i], int, o); // отправляем превый символ из строки для проверки число или нет if o = 0 then // если число begin n += a[j][i];//то плюс это число к n if j = c then val(n, int, o); //если достигнут конец цикла то преобразуем n в число(если данной ком не будет и цифра будет в последней строке то преобразования не случ) end else // если нет begin val(n, int, o); // n := ''; // обнуляем n end; if int > max then max := int; // если n больше max значит записываем int в max end; end; for i := 1 to c do writeln(a[i], '|'); // вывод строчек нга экран writeln('MAX: ', max); // вывод максимального readln(); end.
Вывод консоли:
\|/ | -->*<-- | /o\ | /_\_\ | /_/_0_\ | /_o_\_\_\ | /_/_/_/_/o\ | /@\_\_\@\_\_\ | /_/_/O/_/_/_/_\ | /_\_\_\_\_\o\_\_\ | /_/0/_/_/20_/_/@/_\ | /_\_\_\_\_0_\_\_\_\_\ | /_/o/_/_/@/2/_/o/_/0/_\| [_1_] | MAX: 2021
- Log in to post comments
- 176 reads