Разделы проекта и разработочные программы
В маленьких программах типа PaulRevere пошаговое совершенствование может быть выполнено естественно и непринужденно. Однако по мере того, как задачи и программы становятся более сложными, тщательное и систематический подход сохранит ваше время в конечном итоге.
В программировании существуют 2 различные фазы:
1. Проектирование – продумывание того, какой должна быть программа для надлежащего решения проблемы.
2. Разработка – ввод текста программы для использования Паскаль-машиной
При пошаговом совершенствовании текст программы, спроектированный, с целью решения задачи с большими деталями – называется разделом проекта. Каждый раздел проекта, в свою очередь может содержать более подробное описание задачи (в виде комментариев), что повлечет за собой написание дополнительный разделов. Результатом фазы проектирования будет иерархия разделов проекта, которые совместно решают проблему. Каждый раздел проекта при этом будет оператором Паскаля – обычно, это оператор BEGIN, IF или WHILE. Это операторы 5-15 строк длиной + 2-4 задачи, оставшиеся на следующем уровне.
После того, как программа целиком будет доведена до иерархии разделов проекта, можно приступать к трансляции в форму, понятную ЭВМ. На первый взгляд, это может покаазться простым шагом. Однако, если большая программа будет переведена в Паскаль машину даже с одной ошибкой, последствия могут быть катастрофическими. В самом лучшем случае эта ошибка будет обнаружена компилятором Паскаля. Это даст программисту второй шанс на трансляцию программы. Если программа будет запущена на исполнение, то она может выдавать неправильные результаты, однако программист может не подозревать об этом и потратитm время изучая проект на наличие ошибок. Результаты могут быть настолько причудливыми и странными, что будет трудно связать их с исходным текстом. Например, неверное условие, например, < вместо >, может завести во время выполнения в неожиданное место программы, в общем, ошибки будут расти как снежный ком. В самом худшем случае будет казаться, что программа работает корректно, поскольку тестирование не выявило ошибку во время трансляции.
Последовательность исполняемых программ, каждая и которых отражает бОльший раздел проекта, может содействовать правильной и систематической трансляции в код для Паскаль-машины. Каждая программа из такой последовательности будет называться разработочной программой. Разработочные программы – являются накоплением разделов проекта, которая растет в размере до тех пор, пока весь проект не будет преобразован в Паскаль-программу. Каждая разработочная программа определяется таким образом, чтоб она может быть выполнена и оттестирована для поверки корректной трансляции на каждом этапе разработки.
На практике, трансляция проекта в Паскаль-программу может быть выполнена при помощи блоков больших, чем один шаг проекта, обычно 15-50 строк за один раз. Таким образом успешная разработочная программа создается при помощи комбинации нескольких частей проекта в окончательно оттестированную разработочную программу. Для проверки корректного исполнения может быть необходимо добавить временные операторы WRITE для создания видимого вывода.
Письмо Sarah Rever
“Dear Paul: I have been to the Chelsea headland…”
BEGIN {сдвигаем окно}
W1 := W2;
W2 := W3;
W3 := W4;
READ(W4)
END
{Проверка на ‘land’}
IF W1 = ‘l’
THEN
IF W2 = ‘a’
THEN
IF W3 = ‘n’
THEN
IF W4 = ‘d’
THEN {‘land’ было найдено}
WHILE {‘land’ или ‘sea’ не найдены}
DO
BEGIN
{сдвигаем окно}
{проверка на ‘land’}
{проверка на 'sea'}
END
Looking | Смысл |
Y | Продолжаем искать |
L | Британцы наступают с земли |
S | Британцы наступают с моря |
N | В конце ввода, ни land, ни sea не были найдены |
Раздел проекта 1
PROGRAM SarahRevere(INPUT,OUPUT)
{выводит сообщение о том, как наступают британцы, в зависимости от того, найдено ‘land’ или ‘sea’}
VAR
W1, W2, W3, W4, Looking : CHAR;
BEGIN {SarahRevere}
{инициализируем переменные W1, W2, W3, W4, Looking}
WHILE {‘land’ или ‘sea’ не найдены}
DO
BEGIN
{сдвигаем окно, проверяем на конец данных}
{проверка на ‘land’}
{проверка на 'sea'}
END
{Создаем письмо Сары}
END. {SarahRevere}
Раздел проекта 1.1
BEGIN {инициализируем переменные W1, W2, W3, W4, Looking}
W1 := ‘ ‘;
W2 := ‘ ‘;
W3 := ‘ ‘;
W4 := ‘ ‘;
Looking := ‘Y‘;
END
Раздел проекта 1.2
BEGIN {сдвигаем окно, проверяем на конец данных}
W1 := W2;
W2 := W3;
W3 := W4;
READ(W4);
IF W4 = ‘#’
THEN {конец данных}
Looking := ‘N’
END
Раздел проекта 1.3
BEGIN {Проверка на ‘land’}
IF W1 = ‘l’
THEN
IF W2 = ‘a’
THEN
IF W3 = ‘n’
THEN
IF W4 = ‘d’
THEN {‘land’ было найдено}
Looking := ‘L’
END
Раздел проекта 1.4
BEGIN {Проверка на ‘sea'}
IF W2 = ‘s’
THEN
IF W3 = ‘e’
THEN
IF W4 = ‘a’
THEN {‘sea’ было найдено}
Looking := ‘S’
END
Раздел проекта 1.4
BEGIN {Создаем письмо Сары}
IF Looking = ‘L’
THEN
WRITELN(‘The British are coming by land.’)
ELSE
IF Looking = ‘S’
THEN
WRITELN(‘The British are coming by sea.’)
ELSE
WRITELN(‘Sarah didn’’t say’)
END
Стадия разработки программы «Письмо Sarah Revere»
Разработочная программа 1А
PROGRAM SarahRevere(INPUT,OUPUT)
{выводит сообщение о том, как наступают британцы, в зависимости от того, найдено ‘land’ или ‘sea’}
VAR
W1, W2, W3, W4, Looking : CHAR;
BEGIN {SarahRevere}
BEGIN {инициализируем переменные W1, W2, W3, W4, Looking}
W1 := ‘ ‘;
W2 := ‘ ‘;
W3 := ‘ ‘;
W4 := ‘ ‘;
Looking := ‘Y‘;
END;
WHILE Looking = ‘Y’
DO
BEGIN
BEGIN {сдвигаем окно, проверяем на конец данных}
W1 := W2;
W2 := W3;
W3 := W4;
READ(W4);
IF W4 = ‘#’
THEN {конец данных}
Looking := ‘N’
END;
WRITE(W1,W2,W3,W4,‘,’); {тестовый оператор}
{проверка на ‘land’}
{проверка на 'sea'}
END
{Создаем письмо Сары}
END. {SarahRevere}
Результаты выполнения программы:
INPUT :#
OUTPUT: #,
INPUT :D#
OUTPUT: D, D#,
INPUT :De#
OUTPUT: D, De, De#,
INPUT :Dea#
OUTPUT: D, De, Dea,Dea#
INPUT :Dear Pau#
OUTPUT: D, De, Dea,Dear, ear ,ar P,r Pa, Pau,Pau#,
Разработочная программа 1B
PROGRAM SarahRevere(INPUT,OUPUT)
{выводит сообщение о том, как наступают британцы, в зависимости от того, найдено ‘land’ или ‘sea’}
VAR
W1, W2, W3, W4, Looking : CHAR;
BEGIN {SarahRevere}
BEGIN {инициализируем переменные W1, W2, W3, W4, Looking}
W1 := ‘ ‘;
W2 := ‘ ‘;
W3 := ‘ ‘;
W4 := ‘ ‘;
Looking := ‘Y‘;
END;
WHILE Looking = ‘Y’
DO
BEGIN
BEGIN {сдвигаем окно, проверяем на конец данных}
W1 := W2;
W2 := W3;
W3 := W4;
READ(W4);
IF W4 = ‘#’
THEN {конец данных}
Looking := ‘N’
END;
BEGIN {Проверка на ‘land’}
IF W1 = ‘l’
THEN
IF W2 = ‘a’
THEN
IF W3 = ‘n’
THEN
IF W4 = ‘d’
THEN {‘land’ было найдено}
Looking := ‘L’
END;
BEGIN {Проверка на ‘sea}
IF W2 = ‘s’
THEN
IF W3 = ‘e’
THEN
IF W4 = ‘a’
THEN {‘sea’ было найдено}
Looking := ‘S’
END
END;
WRITELN(‘Looking is ’, Looking); {тестовый оператор}
{Создаем письмо Сары}
END. {SarahRevere}
Результаты:
INPUT :Dear Paul: I have been #
OUTPUT:Looking is N
INPUT :Dear Paul: I have been to Chelsea #
OUTPUT:Looking is S
INPUT :Dear Paul: My land lies along the sea #
OUTPUT:Looking is L
Разработочная программа 1C
PROGRAM SarahRevere(INPUT,OUPUT)
{выводит сообщение о том, как наступают британцы, в зависимости от того, найдено ‘land’ или ‘sea’}
VAR
W1, W2, W3, W4, Looking : CHAR;
BEGIN {SarahRevere}
BEGIN {инициализируем переменные W1, W2, W3, W4, Looking}
W1 := ‘ ‘;
W2 := ‘ ‘;
W3 := ‘ ‘;
W4 := ‘ ‘;
Looking := ‘Y‘;
END;
WHILE Looking = ‘Y’
DO
BEGIN
BEGIN {сдвигаем окно, проверяем на конец данных}
W1 := W2;
W2 := W3;
W3 := W4;
READ(W4);
IF W4 = ‘#’
THEN {конец данных}
Looking := ‘N’
END;
BEGIN {Проверка на ‘land’}
IF W1 = ‘l’
THEN
IF W2 = ‘a’
THEN
IF W3 = ‘n’
THEN
IF W4 = ‘d’
THEN {‘land’ было найдено}
Looking := ‘L’
END;
BEGIN {Проверка на ‘sea}
IF W2 = ‘s’
THEN
IF W3 = ‘e’
THEN
IF W4 = ‘a’
THEN {‘sea’ было найдено}
Looking := ‘S’
END
END;
BEGIN {Создаем письмо Сары}
IF Looking = ‘L’
THEN
WRITELN(‘The British are coming by land.’)
ELSE
IF Looking = ‘S’
THEN
WRITELN(‘The British are coming by sea.’)
ELSE
WRITELN(‘Sarah didn’’t say’)
END
END. {SarahRevere}