задача 3 урок 19

задача 3 урок 19

Имеется текстовый файл в котором содержится не более 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/_\
         [_1_]

Ответ: 2021

program task_3_lesson19;
type str = array[1..31] of string; // строка
     str2x = array[1..31] of str;  // массив строк - 2х мерный

procedure printArr(a: str2x);     // печать массива
var i, j: integer;
begin
  for i := 1 to 30 do
    begin
    for j := 1 to 30 do
      write(a[i][j], ' ');
    writeln();
    end;
end;

function strText(s: string) : str;   // заполнение одной строки массива
var i: integer;
    s1: str;
begin
  for i := 1 to length(s) do
   s1[i] := s[i];
  result := s1;
end;

function maxGor(s: str2x): integer;  // максимум по горизонтали
var i, j, n, m, code: integer;
    p: string;
begin
  p := '';
  m := 0;
  for i := low(s) to high(s) do
   for j := low(s[i]) to high(s[i]) do
     begin
     if ((s[i][j] >= '0') and (s[i][j] <= '9')) then
       p := p + s[i][j]
     else
       begin
         val(p, n, code);
         p := '';
       end;
     if (n >= m) then
       m := n;
     end;
  result := m;
end;
function maxVer(s: str2x) : integer;  // максимум по вертикали
var i, j, n, m, code: integer;
    p: string;
begin
  p := '';
  m := 0;
  for i := 1 to 30 do
   for j := 1 to 31 do
    begin
     if ((s[j][i] >= '0') and (s[j][i] <= '9')) then
       p := p + s[j][i]
     else
       begin
         val(p, n, code);
         p := '';
       end;
     if (n >= m) then
       m := n;
    end;
  result := m;
end;

var  f1: text;
     s, filename: string;
     s1: str;
     s2: str2x;
     i, j: integer;
     numG, numV, numMax: integer;   // максимум по горизонтали и вертикали
begin
  i := 1;
  filename := 'C:\Users\XE\Documents\Pascal\input3.txt';
  assign(f1, filename);
  reset(f1);
  while not eof(f1) do
    begin
      readln(f1,s);
      s1 := strText(s);
      for j := 1 to 30 do
        s2[i][j] := s1[j];
      i := i + 1;
    end;
  printArr(s2);
  numG := maxGor(s2);
  numV := maxVer(s2);
  if (numG >= numV) then
    numMax := numG
  else
    numMax := numV;
  write('Maximalnoe chislo: ',numMax);
  readln
end.

Консоль

                    \ | /
                - - > * < - -
                    / o \
                  / _ \ _ \
                / _ / _ 0 _ \
              / _ 9 0 3 _ \ _ \
            / _ / _ / _ / _ / o \
          / @ \ _ \ _ \ @ \ _ \ _ \
        / _ / _ / O / _ / _ / _ / _ \
      / _ \ _ \ _ \ _ 7 _ \ o \ _ \ _ \
    / _ / 0 / _ / _ / 4 0 _ / _ / @ / _ \
  / _ \ _ 5 0 \ _ \ _ 0 _ \ _ \ _ \ _ \ _ \
/ _ / o / _ / _ / @ / 2 / _ / o / _ / 0 / _ \
                  | _ 1 _ :

Maximalnoe chislo: 74021
vedro-compota's picture

засчитано

_____________
матфак вгу и остальная классика =)