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