ТАБЛИЦА-СИЛУЭТ
> -- Илья Ермаков писал(а):
> И приходим к просто-табличному-представлению...
С учетом замечания Ильи Ермакова и правила структурного программирования,
рекомендующего четко разделять логику программы на логику верхнего уровня
и процедуры-обработчики, ввожу новую раскладку куба-силуэта на плоскость,
в которой самый ближний слой куба находится сверху, и называю ее
"ТАБЛИЦА-СИЛУЭТ".

Таблица-силуэт делится на 2 зоны: зону основного алгоритма и зону вызова
процедур-обработчиков.
Как видно из приведенного ниже алгоритма, основная логика таблицы-силуэта
полностью отделена от вызова процедур-обработчиков, в которых реально и
выполняются все действия.
Такой подход позволяет разделить все основные процедуры программы,
задающие последовательность выполнения технологического процесса, на
основную логику и отделенные от нее процедуры-обработчики.
Основная логика может быть написана специалистом-предметником, не желающим
разбираться в программистстких подробностях, а уже затем программист пишет
вызовы процедур-обработчиков и сами эти процедуры.

Ниже приведены скриншот и исходный код таблицы-силуэта:
Вложение:
tabsil.JPG [ 80.87 КБ | Просмотров: 21172 ]

## Код:
```
(* t.0. *)
unit u_test1;

interface   // что-нибудь  _>2.2  _>1#2 _>1#3  _>1.ququ  _>.2. _>.3. _>.4.

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

implementation

{$R *.DFM}

(* i.1. tablica_siluet *)

procedure  kub_siluet;
var n:integer;
   (*i CB *)  wetka := 1;   while (wetka <> 0)  do  begin
      (*i*)  if (wetka = 1)
         (*i*)  k := 1;
                n := 1;
         (*i*)  wetka := 2;
      (*i*)  end else if (wetka = 2)
         (*i*)  // вход в основной режим
         (*i*)  wetka := 61;
      (*i*)  end else if (wetka = 3)
         (*i*)  if (n = 2)  then begin      (*рис . . Д1 *)
            (*i*)  wetka := 62;   // подрежим 1
         (*i*)  end else if (n = 3) then begin   (*рис . . Д2 *)
            (*i*)  wetka := 63;   // подрежим 2
         (*i*)  end else if (n = 4) then begin   (*рис . . Д3 *)
            (*i*)  wetka := 64;   // подрежим 3
         (*i*)  end;
      (*i*)  end else if (wetka = 4)
         (*i*) // делаем что-нибудь
         (*i*)  wetka := 5;
      (*i*)  end else if (wetka = 5)
         (*i*) // делаем что-нибудь
         (*i*)  wetka := 6;
      (*i*)  end else if (wetka = 6)
         (*i*) // делаем что-нибудь
         (*i*)  wetka := 7;
      (*i*)  end else if (wetka = 7)
         (*i*) // делаем что-нибудь
         (*i*)  wetka := 11;
      (*i*)  end;
      (*i*)  if (wetka = 11)
         (*i*) // делаем что-нибудь
         (*i*)  wetka := 12;
      (*i*)  end else if (wetka = 12)
         (*i*) // делаем что-нибудь
         (*i*)  wetka := 13;
      (*i*)  end else if (wetka = 13)
         (*i*) // делаем что-нибудь
         (*i*)  wetka := 14;
      (*i*)  end else if (wetka = 14)
         (*i*) // делаем что-нибудь
         (*i*)  wetka := 15;
      (*i*)  end else if (wetka = 15)
         (*i*) // делаем что-нибудь
         (*i*)  inc(k);
         (*i*)  wetka := 16;
      (*i*)  end else if (wetka = 16)
         (*i*)  if (k < 10)  then begin
            (*i*)  wetka := 2;
         (*i*)  end else begin
            (*i*)  wetka := 17;
         (*i*)  end;
      (*i*)  end else if (wetka = 17)
         (*i*)  // обработка ошибок
         (*i*)  wetka := 0;
      (*i*)  end;
      (*i*)  if (wetka = 61)
         (*i*) // загрузка параметров
         (*i*) // вызов процедуры-обработчика
         (*i*) // обработка ответа процедуры обработчика
               // получаем значение n
         (*i*)  wetka := 3;
      (*i*)  end else if (wetka = 62)
         (*i*) // загрузка параметров
         (*i*) // вызов процедуры-обработчика
         (*i*) // обработка ответа процедуры обработчика
         (*i*)  wetka := 4;
      (*i*)  end else if (wetka = 63)
         (*i*) // загрузка параметров
         (*i*) // вызов процедуры-обработчика
         (*i*) // обработка ответа процедуры обработчика
         (*i*)  wetka := 4;
      (*i*)  end else if (wetka = 64)
         (*i*) // загрузка параметров
         (*i*) // вызов процедуры-обработчика
         (*i*) // обработка ответа процедуры обработчика
         (*i*)  wetka := 4;
      (*i*)  end;
   (*i CE *)  end;
   (*i ВЫХОД *)
   end;
(*i КОНЕЦ *)

(* t.100. *)

end.
```
