Задача 4 Урок 19
Primary tabs
Дан текстовый файл, в котором с в ASCII-стиле нарисованы цепочки из цифр, которые связаны по горизонтали и вертикали.
Все цепочки составляют одно дерево, которое устроено так:
всегда есть общий корень и это цифра
по горизонтали цепочка не разрывается пробелами, соединяется же с помощью последовательностей знака - (тире).
по вертикали цепочка не разрывается переносом строк, соединяется же с помощью вертикальных последовательностей символа | (вертикального разделителя).
Размер схемы не более чем 100 на 100 символов.
Задача: вывести длина самой длинной цепочки.
var f1: text; fileName, s, baseStr: string; maxLen: integer; flag: boolean; function count_num(str: string; start, stop: integer): integer; //подсчет количества цифр во фрагменте строки var k: integer; begin k := 0; while(start <= stop) do begin if ((str[start] >= '0') AND (str[start] <= '9')) then k += 1; start += 1; end; result := k; end; procedure get_max(str, base: string; var max: integer); //находим самую длинную цепочку var i, currLen, // длина текущей цепочки endBase: integer;// конец фрагмента базовой строки, на котором цепочка идет вниз begin i := 1; while(i <= length(str)) do begin if(str[i] = '-') then begin endBase := i - 1; currLen := count_num(str, i, length(str)) + count_num(base, 1, endBase); // длина текущей строки + длина корня if(currLen > max) then max := currLen; break; end; i += 1; end; end; begin fileName := 'D:\User\Pascal\lesson18\task_4\input.txt'; assign(f1, fileName); reset(f1); flag := true; while(NOT eof(f1)) do begin readln(f1, s); if(flag) then begin baseStr := s; maxLen := count_num(s, 1, length(s)); flag := false; end else get_max(s, baseStr, maxLen); writeln(s); end; writeln(); writeln('Maksimalnaya dlina: ', maxLen); readln(); end.
- Log in to post comments
- 965 reads