Урок 19. Задача 3.

Урок 19. Задача 3.

Имеется текстовый файл в котором содержится не более 30 строк, в каждой строке не более 30 символов (пробелы тоже считаются символами). Цифры и другие символы перемешаны в каждой строке.
Задание: найдите максимальное число, c учетом того, что числом считаются подряд идущие цифры не только по горизонтали, но и по вертикали.

type AR = array[1..20, 1..20] of string;
type BR = array[1..100] of integer;
var arS :AR;
    arI :BR;
    f1 :text; // тип для открытия текстового файла
    filename, s, str1, str2 :string;
    count, i, max :integer;

function make_array(s :string; count :integer) :AR;
var i :integer;
begin
  for i := 1 to length(s) do
    arS[count, i] := s[i];
  make_array := arS;
end;

function make_array_int(str1 :string) :BR;
var i, v_I, ct :integer;
    st :string;
begin
  ct := 0;
  for i := 1 to length(str1) do
    if str1[i] <> ' ' then
      st := st + str1[i]
    else
    begin
      val(st, v_I);
      st := '';
      ct += 1;
      arI[ct] := v_I;
    end;
  make_array_int := arI;
end;

function make_string(var str1, str2 :string; arS :AR) :string;
var i, j :integer;
    fl_g, fl_v :boolean;
begin
  fl_g := false;
  fl_v := false;
  for i := low(arS) to high(arS) do
    for j := low(arS[i]) to high(arS[i]) do
    begin
      if (arS[i, j] >= '0') and (arS[i, j] <= '9') then
      begin
        fl_g := true;
        str1 := str1 + arS[i, j];
      end
      else
        if fl_g then
        begin
          str1 := str1 + ' ';
          fl_g := false;
        end;

      if (arS[j, i] >= '0') and (arS[j, i] <= '9') then
      begin
        fl_v := true;
        str2 := str2 + arS[j, i];
      end
      else
        if fl_v then
        begin
          str2 := str2 + ' ';
          fl_v := false;
        end;
    end;
  str1 := str1 + str2;
  make_string := str1;
end;

begin
  count := 0;
  filename := 'C:\Pascal\U_0\input.txt'; // путь к файлу

  assign(f1, filename);
  {$I-} reset(f1);  {$I+}  // попытка открыть файл на чтение с подавлением ошибки
  if IOResult <> 0 then    // если есть ошибки
  begin
    writeLn('File ', filename, ' ne naiden!');
  end else  // если удалось открыть на чтение
  begin
    writeLn('File ', filename, ' suchectvuet. I vot ego soderzimoe:');
    while not eof(f1) do
    begin
      count += 1;
      readln(f1, s);
      make_array(s, count);
    end;
   end;
  make_string(str1, str2, arS);
  make_array_int(str1);
  for i := 1 to high(arI) do
    if arI[i] > max then
      max := arI[i];
  write(max);
  readln();
end. 
vedro-compota's picture

засчитано

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

1