на главную страницу
визитка
темы

Семинары доктора Марцинкевича
(занятие десятое)

029.12 Описание программы

    На сегодняшнем занятии рассмотрим программу Ptable5, являющейся дальнейшей версией программы PTable3.
   Общая характеристика
   Программа PTable5 представляет собой запоминающий и воспроизводящий механизм.
   Она выполняет три режима запоминания и исполнения: режим маршрута, режим собственных операций и режим операций по умолчанию.
   Основная идея режима маршрута состоит  в воспроизведении однажды выбранной последовательности ячеек. (Следующим шагом в этом направлении должна быть программа, основывающаяся на том, что с каждой из ячеек связывается подпрограмма, которая выполняется при "входе в ячейку", а маршрут в целом в этом случае реализует некоторую программу. Отсюда получаем, что когда мы с каждой из ячеек соотносим некоторую подпрограмму, то разные маршруты будут позволять выполнять разные программы, если хотите, разные действия. С другой стороны, каждая из ячеек может содержать в себе адрес таблицы с подобными же свойствами её ячеек, последняя, в свою очередь... и т.д.)
    Режим операций по умолчанию отличается от режима маршрута тем, что по умолчанию задаётся множество операций, и пользователь, используя их, самостоятельно прокладывает маршрут по полю ячеек или выполняет какие-то иные задачи
    Наконец, режим собственных операций дополняет режим операций по умолчанию тем, что прежде, чем прокладывать маршрут, пользователь вводит собственные операции.
    Под операциями понимается правило перехода от ячейки к последующей. Операцию можно понимать как отдельное простое действие перехода от ячейки к другой по некоторому правилу; из последовательности таких действий складывается сложное действие. Имя в виде номера операции тождественно со строкой таблицы.
   Все три режима программы объединены одной идей - "восприятия" некоторого правила или научения ему, его запоминания и действия в соответствии с ним. Программа носит технический характер и представляет  идею того, как может нечто быть воспринято, запомнено и воспроизведено.

   Структура программы
   Программа построена по одноуровневому принципу, который позволяет избежать вложений операторов switch  Следует отслеживать  обращения к одним и тем же подпрограммам  различных управляющих программ, т.к. управляющая программа должна задавать подпрограмме свой адрес с тем, чтобы возврат из подпрограммы происходил именно в актуальную ("задавшую задачу") управляющую программу. На рис.1 показано, что главной является управляющая программа 15. Она обращается к субуправляющим программам 12, 13, 14. Программы 1-4, 6-11 - подпрограммы.
   

   Порядок работы программы.
   Независимо от выбранного режима, программа должна выполнить ряд общих операций. Она должна подготовить таблицу для работы. Для этого в таблицу должны быть введены соответствующие надписи, а также должна существовать возможность иметь перед глазами выбираемые операции, если это режимы собственных операций или операций по умолчанию;  или это будут адреса ячеек, если находимся в режиме маршрута. Для этой цели предназначено информационное поле, в исходном состоянии заполненное нолями, образованное первым (подсчет столбцов начинается с ноля: 0,1,2...) и вторым столбцами таблицы. Если мы находимся в режиме операций по умолчанию, то  должны загрузить в информационную область  операции, если находимся в режиме собственных операций, то, начиная с первой строки информационной области, мы должны заменить ноли значениями приращений относительно произвольной ячейки т.о., что в первый столбец очередной строки информационного поля занесём величину приращения   столбца, во второй  столбец - приращения строки относительно произвольной ячейки. После того, как все операции выбраны или после того, как мы занесли в таблицу операции по умолчанию, мы должны их запомнить. Затем переходим в поле выполнения операций и выполняем их. Для этой цели используем окно Esodu, в которое  заносим номер операции, которую хотим выполнить. По окончании работы очищаем таблицу, и программа готова для следующего выбора режима работы)
   В режиме маршрута  сначала прокладываем маршрут, а затем, как обычно, запоминаем его, открываем поле выполнения, выполняем и по окончании работы устанавливаем программу в начальное состояние.

   Немного о принципах построения   программы .
   Запустите программу и убедитесь, что LEIst1=12, все остальные окна имеют значение ноль, в LEypr  информация отсутствует.
   Нажмите на кнопку Пуск. Высветится диалоговое окно: "Введёте маршрут?" Если отвечаете "нет", появляется следующее окно: "Подпрограмма 1. Введёте собственные операции?" Если отвечаете нет, появится диалоговое окно "Введите операции по умолчанию".
   Допустим, на вопрос "Введёте маршрут?" вы ответили "Да"
    Приведем логику управляющей программы 12 в этом режиме. Но сначала договоримся об обозначениях.
   1. А→В  = "Объект (если это постоянная) или содержание объекта А заносится в содержание объекта В"
   2. А-->B = "Если А, то В"
   3. A==B   !"А равно В"
   4. a,b - "операция b выполняется вслед за операцией a"
   5. ↓ программное нажатие на кнопку
6.† на кнопку нажимает пользователь

   В режиме маршрута работает управляющая программа 12, которая имеет вид:
   1. Eanti→anti  начальная установка. Заносится в окно. В настоящей программе это ноль.
   2. (anti==0)  --> (1→LEIst1, ↓)
   3. (anti==100) --> (6→LEIst1, ↓)
   4. (anti==6) --> (9→LEIst1),†,†,...
   5. (anti==11) --> (8→LEIst1, ↓)
   6. (anti==8)-->(10→LEIst1, ↓)
   7. (anti==10)-->(7→LEIst1, ↓)
  Пример демонстрирует принцип построения управляющих программ, определяющий порядок выполнения подпрограмм и заключающийся в том, что следующей выполняется программа, для которой выполнены условия выполнения и которая по порядку выполнения программы "сверху вниз" стоит раньше.
   Реализация принципа состоит в том, что создаётся специальная одна или несколько переменных, в которых содержится информация о выполненных программах и создаваемых их результатами условиях. На основании анализа этих условий даётся задание на выполнение следующей программы. В настоящей программе для этой цели применяется одна переменная anti.
   Обратим также внимание на способ выставления управляющей программой адреса и ответа ей подпрограмм. Для этого вначале управляющей программы заносится, к примеру,  выражение
    ypr=13;  если это  управляющая программа 13, и для информации значение этой переменной выводится в окно:
   LEypr->Text=IntToStr(ypr);
   а в конец подпрограмм заносится  условное выражение: если задан адрес управляющей программы 12, то возврат из подпрограммы в управляющую программу 12. И т.д. по числу управляющих программ:
    if (ypr==12)
    LEIst1->Text=IntToStr(12);
    if (ypr==13)
    LEIst1->Text=IntToStr(13);
    if (ypr==14)
   LEIst1->Text=IntToStr(14);
  В данном случае это программы 12, 13, 14

   Панель управления программы имеет вид:


   Панель управления состоит из таблицы, окон, меток и кнопки.
   Все метки носят информационный характер. Окна носят как информационный, так и технический характер. Окно LEIst1 информирует о программе, которая будет выполняться после нажатия на кнопку Пуск. Окно Eanti показывает, какая программа была выполнена. Окно marsh2 используется в режиме маршрута, показывая номер по порядку очередной введенной в маршрут ячейки. Окно Esodu применяется для задания имени (номера) очередной  операции, выбранной для выполнения   в режимах собственных операций и операций по умолчанию. Окно LЕypr показывает, какая из текущих управляющих субпрограмм "управляет".

   Метки col, row, sodu информируют о параметрах выбранной ячейки - её столбце, строке и  содержании
   Метки di, dj показывают текущие приращения относительно столбца и строки ячейки. Метки masI, masJ информируют о ячейках массивов, из которых берутся данные. Кроме того, есть невидимая метка, которая информирует о параметрах выделенной ячейки.

    Пример.    
   Я запустил программу. В ней в LEIstr1=15, в остальных окнах и метках ноли или отсутствует информация. Нажимаю на кн. Пуск. В LEIstr1 появляется 1 и появляется окно: "Введете маршрут?" Могу и ввести. Нажимаю на yes. И получаю "многие изменения". Для того, чтобы упростить текст, сведём последовательность шагов в таблицу.

    LEIst1 Esodu marsh2 Eanti LEypr Диалог. окно ответ кнопка  
1   15 0 0 0 0      
2   1 0 0 0 0 Введёте маршрут? yes    
3   6 0 0 100 12 Маршрутное поле ок    
4   9 0 0 6 12 Сформируйте маршрут... ок    
5    Формируется маршрут путём кликания мышью на ячейках+ . Адреса ячеек автомат вносятся в инф.поле.                                                   Затем в LEIst1 вводится 11,
6   11 0 0 6 12 Запомнить ок    
7   8 0 0 11 12 Поле маршрута ок    
8   10 0 0 8 12 Выполнить маршрут ок    
9   7 0 0 10 12 Очистить таблицу ок    
10   15 0 0 0 0      
11   1 0 0 0 0 Введёте маршрут? no    
12   1 0 0 0 0 Введёте собственные операции? no    
13   2 0 0 102 14 Загрузить операции по умолчанию ок    
14   3 0 0 2 14 Запись и проверка введенных значений ок    
15   4 0 0 3 14 Записать в sodu № операции и выбрать ячейку ок    
16   7 0 0 4 14      
17   7 0 0 4 14 Очистить таблицу    
18   15 0 0 0 0      
19   1 0 0 0 0 Введете маршрут? no    
20   1 0 0 0 0 Введете собственные операции? yes    
21   1 0 0 0 0 Введите операции yes    
22   Ввод операций  
23   3 0 0 101 13      
24   3 0 0 101 13 Запись и проверка введенных значений ок    
25   4 0 0 3 13 Записать в sodu № операции и выбрать ячейку ок    
26   7 0 0 4 13      
27   7 0 0 4 13 Очистить таблицу ок    
28   15 0 0 0 0        
29                    

    Формирование маршрута.
   Клик на ячейке 3:1,† в информационном поле в строке с именем 1 записывается операция 0 с параметрами 3:1. Затем клик на ячейке 7:5. В строке с именем 2 информационного поля записывается записывается операция 1 = ячейке 7:5 и т.д.
   Соответственно в окне marsh2 ведется подсчёт числа записываемых операций
   Выполненный маршрут обозначается цифрами, отражающими последовательность выбранных ячеек

   Собственные операции.
   Собственные операции формируются изменением значений нолей посредством клика мы на них и их исправления. Исполнение операций осуществляется путём введения в Esodu имени (номера) операции и клика на ячейке. Клик на ячейке вызовет звёздочку, отстоящую от ячейки на расстояние, обусловленное выбранной операцией.

   Как и другие технические программы, настоящая включает ряд принципов, имеющих значение для разработки  последующих приложений.

   29.01.09 г.