Алгоритмическая задача №2 IFF 2020

Алгоритмическая задача №2

В некоем виртуальном пространстве есть виртуальные, опять же, ASCII-счеты, с 7-ю спицами по 10 костяшек на каждой, в сброшенном состоянии (условный ноль) они выглядят так:

---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
Задание: визуализируйте на счетах введенное пользователем число. Примеры:
Пользователь вводит: 7
Получаем:
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
+++++++---+++
Пользователь вводит: 28
Получаем:
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
++---++++++++
++++++++---++
Пользователь вводит: 2021
А наша программа отвечает:
---++++++++++
---++++++++++
---++++++++++
++---++++++++
---++++++++++
++---++++++++
+---+++++++++
program abacus_virt;
  var  numb_input : string;
    i,j,k,numb,count,fix_numb,rows,code: integer;

begin
 writeln('input value: ');
 readln(numb_input);  // считываем строку  типа string
 k := 1; // индекс  строки
 Val(numb_input[k], numb, code); // преобразуем элемент строки в число
 count:= 13;
 fix_numb:= 3;
 rows:= 7;
 j:= 1;

{ цикл от 1 до 91 , где 91 общее количество элементов в счетах }
 for i:=1 to 91 do
 begin
  // блок вывода  строк стандартного вида '---++++++++++' если длина считываемой
  // строки  из readln(numb_input) меньше  7
   if (rows - high(numb_input) <> 0) then
   begin
        if(i <= fix_numb) then
        begin
            write('-');
            count -= 1;
            j += 1;
        end
        else
        begin
            write('+');
            count -= 1;
            j += 1;
            if(count = 0) then
            begin
                writeln();
                count := 13;
                fix_numb += 13;
                rows -= 1;
            end;
        end;
   end
    else
    // блок вывода строк, где в нужнoм месте подставляется или '+' или '-'
    begin
        if (0 < numb) then
        begin
            write('+');
            count -= 1;
            numb -= 1;
            j += 1;
        end
        else
        begin
            if(i >= j + 3) then
            begin
                write('+');
                count -= 1;
            end
            else
            begin
                write('-');
                count -= 1;
            end;
            if(count = 0) and (k <> high(numb_input)) then
            begin
                count := 13;
                fix_numb += 13 ;
                k += 1;
                j := i + 1;
                writeln();
                Val(numb_input[k], numb, code); // преобразуем в число
            end;
        end;
     end;
 end;
end.