Урок 19. Задача 4.
Primary tabs
Дан текстовый файл, в котором с в ASCII-стиле нарисованы цепочки из цифр, которые связаны по горизонтали и вертикали.
Все цепочки составляют одно дерево, которое устроено так:
всегда есть общий корень и это цифра
по горизонтали цепочка не разрывается пробелами, соединяется же с помощью последовательностей знака - (тире).
по вертикали цепочка не разрывается переносом строк, соединяется же с помощью вертикальных последовательностей символа | (вертикального разделителя).
Размер схемы не более чем 100 на 100 символов.
type AR = array[1..10, 1..100] of string; var arS :AR; f1 :text; // тип для открытия текстового файла filename, s :string; count, i, max, itr_g, itr_v, max2 :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_int(var max :integer; itr_g, itr_v :integer; arS :AR) :integer; var i, res :integer; begin res := 0; for i := 1 to itr_v + 1 do if (arS[1, i] >= '0') and (arS[1, i] <= '9') then res += 1; res := res + itr_g; if max < res then max := res; make_int := max; end; procedure make_array_int(arS :AR); var i, j, itr_v, itr_g, len :integer; begin for i := high(arS) downto low(arS) do begin itr_g := 0; // сколько чисел по горизонту itr_v := 0; // узел на первой строке len := length(arS[i]); for j := high(arS[i]) downto low(arS[i]) do begin len -= 1; if (arS[i, j] >= '0') and (arS[i, j] <= '9') then itr_g += 1 else if arS[i, j] = '|' then begin itr_v := len; make_int(max, itr_g, itr_v, arS); end; end; end; end; begin count := 1; 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 readln(f1, s); make_array(s, count); count += 1; end; end; make_array_int(arS); // make_int(max, itr_g, itr_v, arS); for i := 1 to length(arS[1]) do begin if (arS[1, i] >= '0') and (arS[1, i] <= '9') then max2 += 1; end; if max > max2 then write(max) else write(max2); readln(); end.
- Log in to post comments
- 321 reads
vedro-compota
Sun, 10/23/2022 - 17:35
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)