Задача 4 Урок 13.2

Задача 4 Урок 13.2

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

---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++

Задание: визуализируйте на счетах введенное пользователем число.

Примеры:

Пользователь вводит: 7
Получаем:

---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
+++++++---+++

Пользователь вводит: 28
Получаем:

---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
++---++++++++
++++++++---++

ользователь вводит: 1984
Получаем:

---++++++++++
---++++++++++
---++++++++++
+---+++++++++
+++++++++---+
++++++++---++
++++---++++++

Пользователь вводит: 2021
А наша программа отвечает:

--++++++++++
---++++++++++
---++++++++++
++---++++++++
---++++++++++
++---++++++++
+---+++++++++
var B, A, i, N, k: integer;
begin
  writeln('vvedi ');
  readln(i);
  B := 0; //  записывается остаток на итерации для IF (для числа 302 набор остатков 0.0.0.0.3.0.2)
  N := i;
  for A := 7 downto 1 do // цикл перебора 7ми спиц на счетах
    begin
      k := 0; //счетчик по перебору остатков в репите(по результату последнего отрисовка)
      i := N; // восстанавливаем введеное пользователем число
      repeat  // перебираем остатки от введеного числа. с каждой итерацией FOR, цикл репит уменьшается.
        B := i mod 10;
        i := i div 10 ;
        k := k + 1;
      until(k = A) ; // А - уменьшается с каждым циклом не давая оставаться одному и тому же остатку постоянно.
      if(B = 0) then
        write('---++++++++++')
      else if(B = 1) then
        write('+---+++++++++')
      else if(B = 2) then
        write('++---++++++++')
      else if(B = 3) then
        write('+++---+++++++')
      else if(B = 4) then
        write('++++---++++++')
      else if(B = 5) then
        write('+++++---+++++')
      else if(B = 6) then
        write('++++++---++++')
      else if(B = 7) then
        write('+++++++---+++')
      else if(B = 8) then
        write('++++++++---++')
      else if(B = 9) then
        write('+++++++++---+');
      writeln();
    end;
  readln();
end.        
vedro-compota's picture

проверить форматирование

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

не обьявлена переменная "с"
наверное ,бесконечный цикл будет

vedro-compota's picture

if(B = 0) then
        write('---++++++++++')
      else if(B = 1) then
        write('+---+++++++++')
      else if(B = 2) then
        write('++---++++++++')
      else if(B = 3) then
        write('+++---+++++++')
      else if(B = 4) then
        write('++++---++++++')
      else if(B = 5) then
        write('+++++---+++++')
      else if(B = 6) then
        write('++++++---++++')
      else if(B = 7) then
        write('+++++++---+++')
      else if(B = 8) then
        write('++++++++---++')
      else if(B = 9) then
        write('+++++++++---+');
      writeln();

-- можно на цикл, зависящий от B

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

var B, A, i, N, k, j, m: integer;
begin
  writeln('vvedi ');
  readln(i);
  B := 0; //  записывается остаток на итерации для IF (для числа 302 набор остатков 0.0.0.0.3.0.2)
  N := i;
  for A := 7 downto 1 do // цикл перебора 7ми спиц на счетах
    begin
      k := 0; //счетчик по перебору остатков в репите(по результату последнего отрисовка)
      i := N; // восстанавливаем введеное пользователем число
      repeat  // перебираем остатки от введеного числа. с каждой итерацией FOR, цикл репит уменьшается.
        B := i mod 10;
        i := i div 10 ;
        k := k + 1;
      until(k = A) ; // А - уменьшается с каждым циклом не давая оставаться одному и тому же остатку постоянно.
      for j:=1 to 11 do
        begin
          if(j<=b) then  // отвечает за + перед ---
            write('+')
          else if((j > B) and ( j = (B + 1))) then
            write('---')
          else if(j > B) then // отвечает за + после ---
            write('+');
        end;
      writeln();
    end;
  readln();
end. 
vedro-compota's picture

else if((j > B) and ( j = (B + 1))) then

-- есть лишнее подвыражение

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

var B, A, i, N, k, j, m: integer;
begin
  writeln('vvedi ');
  readln(i);
  B := 0; //  записывается остаток на итерации для IF (для числа 302 набор остатков 0.0.0.0.3.0.2)
  N := i;
  for A := 7 downto 1 do // цикл перебора 7ми спиц на счетах
    begin
      k := 0; //счетчик по перебору остатков в репите(по результату последнего отрисовка)
      i := N; // восстанавливаем введеное пользователем число
      repeat  // перебираем остатки от введеного числа. с каждой итерацией FOR, цикл репит уменьшается.
        B := i mod 10;
        i := i div 10 ;
        k := k + 1;
      until(k = A) ; // А - уменьшается с каждым циклом не давая оставаться одному и тому же остатку постоянно.
      for j := 1 to 11 do
        begin
          if(j <= b) then  // отвечает за + перед ---
            write('+')
          else if(j = (B + 1)) then
            write('---')
          else if(j > B) then // отвечает за + после ---
            write('+');
        end;
      writeln();
    end;
  readln();
end.   
vedro-compota's picture

решение засчитано

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