Урок 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
- 519 reads
vedro-compota
Sun, 10/23/2022 - 17:35
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)