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

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

Дан текстовый файл, в котором с в ASCII-стиле нарисованы цепочки из цифр, которые связаны по горизонтали и вертикали.
Все цепочки составляют одно дерево, которое устроено так:
всегда есть общий корень и это цифра
по горизонтали цепочка не разрывается пробелами, соединяется же с помощью последовательностей знака - (тире).
по вертикали цепочка не разрывается переносом строк, соединяется же с помощью вертикальных последовательностей символа | (вертикального разделителя).
Размер схемы не более чем 100 на 100 символов.

1------4--------------5-------6--------7
       |              |
       |              |-------5---------8
       |
       |-------6--------7--7-------9------8---1----5---3

Ответ: 10

Решение

program task_4_lesson19;
type str = array[1..50] of string;
// Печать файла
procedure printArr(a: str);
var i: integer;
    begin
      for i := 1 to 50 do
      begin
       write(a[i]);
       writeln();
      end;
    end;
//Считаю числа в первой строке до s[j]-го элемента
procedure FirstStr(var c1: integer; s: string; p: integer);
var i: integer;
begin
  for i := 1 to p do
    if ((s[i] >= '0') and (s[i] <= '9')) then
      c1 := c1 + 1;
end;
//Ститаю числа в I-ой строке от s[j]-го элемента
procedure secondStr(var c2: integer; s: string; p: integer);
var i: integer;
begin
  for i := p to length(s) do
    if ((s[i] >= '0') and (s[i] <= '9')) then
      c2 := c2 + 1;
end;

var f1: text;
    i,j: integer;
    st: str;
    s, filename: string;
    n: integer; // кол-во в первой строке
    c1: integer; //кол-во чисел в первой строке до I-го элемента
    c2: integer; //кол-во чисел в N-ой строке
    max: integer;
begin
  c1 := 0;
  c2 := 0;
  i := 1;
  n := 0;
  filename := 'C:\Users\XE\Documents\Pascal\input4.txt';
  assign(f1, filename);
  reset(f1);
  while not eof(f1) do
    begin
      readln(f1, s);
      st[i] := s;
      i += 1;
    end;
  firststr(n, st[1], 50);
  for i := 2 to high(st) do
  begin
    for j := 1 to length(st[i]) do
      if ((st[i][j] = '|') and (st[i][j+1] = '-')) then
      begin
        secondstr(c2, st[i], j);
        firststr(c1, st[1], j);
      end;
    max := c1 + c2;
    c1 := 0;
    c2 := 0;
    if max >= n then
      n := max;
  end;
  printArr(st);
  write(n);
  readln
end.

Консоль

1------4------8--------5-------6--------7
       |      |        |
       |      |        |-------5----9-----8
       |      |                
       |      |--------8-8-8---8----8-9
       |     
       |-------6--------7--7----5---5
       |--------------5-5--5--5---5---2
Otvet: 9
vedro-compota's picture

засчитано

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