Принципы проектирования и разработки программ
Фаза проектирования.
Решение задачи(выполняется совместно с проектированием программы)
1. Поймите дачу.В случае необходимости, напишите краткое изложение задачи и корректируйте его по мере обнаруживать путей решения проблемы.
2. Разработайте стратегию решения.Наметьте в общих чертах решение на русском языке с одним или несколькими уровнями детализации. Корректируйте стратегию решения по мере создания окончательного проекта программы.
3. Анализируйте и осуждайте свою стратегию решения.На каждом уровне детализации ищите простейшие пути решения задачи. Не является ли оно более сложным, нежели требуется?
4. Организуйте свое решение путем написания улучшенного проекта.Не требуется ли реорганизация отдельных разделов проекта для лучшей понятности? Могут ли быть обнаружены подобные операции и организованы в общих разделах проекта?
Проектирование программы(выполняется совместно с решением задачи)
1. Разработайте план написания путем преобразования вашей стратегии решения в иерархию разделов придуманного текста программы и комментариев. Эти описания задачи должны, в свою очередь, служить в качестве имен разделов проекта на следующем уровне детализации.
2.Как правило, разделы проекта не должны быть не более 15 строк, и должны иметь вразумительные и легко понимаемые комментарии. Удержание разделов проекта в таких маленьких размерах и тщательное комментирование требует дисциплинированности, но это впоследствии будет вознаграждено легкостью чтения исходных текстов.
3. Храните разделы вашего проекта физически отдельно для того, чтобы обеспечить гибкость их написания и переписывания, однако думайте об их иерархической структуре во время анализа и упрощения своей программы.
4. Пишите и переписывайте разделы вашего проекта и вашу стратегию решения.Решите задачу, отложите ее решение, и попытайтесь его улучшить.
Организация программ с процедурами (подпрограммами).
По мере роста программ, организация разделов проекта становится более важной при создании понятных программ.
Простые процедуры
PROCEDURE Copy;
BEGIN
READ(Ch);
WRITE(Ch);
END
PROGRAM UsingCopy(INPUT, OUTPUT);
{Копирует 2 символа из INPUT в OUTPUT. Выполнение программы прекращается, если INPUT пуст}
VAR
Ch: CHAR;
PROCEDURE Copy;
BEGIN
READ(Ch);
WRITE(Ch);
END;
BEGIN
Copy;
Copy;
WRITELN
END.
INPUT :ABCDE
OUTPUT:AB
SR6. <блок> ::= <оператор BEGIN>
| <раздел объявлений> ; <оператор BEGIN >
| <список процедур> ; <оператор BEGIN >
|<раздел объявлений> ; < список процедур> ; <оператор BEGIN >
SR11. <оператор> ::= <оператор READ>
| <оператор WRITE>
| <оператор присвоения>
| <пустой оператор>
| <оператор BEGIN>
| <оператор IF>
| <оператор WHILE>
| <оператор вызова процедуры>
SR26. <список процедур> ::= <описание процедуры>
| <список процедур> ; <описание процедуры>
SR27. <описание процедуры> ::= PROCEDURE <идентификатор> ; <оператор BEGIN>
SR28. <оператор вызова процедуры> ::= <идентификатор>
CR3. Любой идентификатор в операторе, не являющийся <оператором вызова процедуры>, отличный от стандартных идентификаторов вроде READ, WRITE и т.д. должен присутствовать в <списке идентификаторов> <раздела объявлений>.
CR4. Правило появления. <Идентификатор> <оператора вызова процедуры> должен появиться в роли идентификатора, следующего за словом PROCEDURE в <описании процедуры>, до своего появления в <операторе вызова процедуры>. Иными словами, процедура должна быть описана в тексте программы до своего первого использования.
Подсчет символов.
PROGRAM CountChars2(INPUT,OUTPUT);
VAR
Ch, Overflow, Ones, Tens, Hundreds: CHAR;
PROCEDURE BumpHundreds;
BEGIN
Tens := '0'
IF Hundreds = '0' THEN Hundreds := '1' ELSE
IF Hundreds = '1' THEN Hundreds := '2' ELSE
IF Hundreds = '2' THEN Hundreds := '3' ELSE
IF Hundreds = '3' THEN Hundreds := '4' ELSE
IF Hundreds = '4' THEN Hundreds := '5' ELSE
IF Hundreds = '5' THEN Hundreds := '6' ELSE
IF Hundreds = '6' THEN Hundreds := '7' ELSE
IF Hundreds = '7' THEN Hundreds := '8' ELSE
IF Hundreds = '8' THEN Hundreds := '9' ELSE
IF Hundreds = '9'
THEN
Overflow := 'Y'
END;
PROCEDURE BumpTens;
BEGIN
Ones := '0'
IF Tens = '0' THEN Tens := '1' ELSE
IF Tens = '1' THEN Tens := '2' ELSE
IF Tens = '2' THEN Tens := '3' ELSE
IF Tens = '3' THEN Tens := '4' ELSE
IF Tens = '4' THEN Tens := '5' ELSE
IF Tens = '5' THEN Tens := '6' ELSE
IF Tens = '6' THEN Tens := '7' ELSE
IF Tens = '7' THEN Tens := '8' ELSE
IF Tens = '8' THEN Tens := '9' ELSE
IF Tens = '9'
THEN
BumpHundrends
END;
PROCEDURE BumpOnes;
BEGIN
IF Ones = '0' THEN Ones := '1' ELSE
IF Ones = '1' THEN Ones := '2' ELSE
IF Ones = '2' THEN Ones := '3' ELSE
IF Ones = '3' THEN Ones := '4' ELSE
IF Ones = '4' THEN Ones := '5' ELSE
IF Ones = '5' THEN Ones := '6' ELSE
IF Ones = '6' THEN Ones := '7' ELSE
IF Ones = '7' THEN Ones := '8' ELSE
IF Ones = '8' THEN Ones := '9' ELSE
IF Ones = '9'
THEN
BumpTens
END;
PROCEDURE BumpCounter;
BEGIN
BumpOnes
END;
BEGIN
Overflow := 'N';
Ones := '0';
Tens := '0';
Hundreds := '0';
READ(Ch);
WHILE Ch <> '#'
DO
BEGIN
BumpCounter;
READ(Ch)
END;
IF Overflow = 'N'
THEN
WRITE('Number of characters is ', Hundreds, Tens, Ones)
ELSE
WRITE('Number of characters exceeds 999')
END.
Фаза разработки.
Разработка программ (совместно с тестированием программы)
1. Разработайте план сборки. Составьте части проекта (начав с простейшей программы) в последовательность все более сложных программ. План должен позволять выполнение программы на каждом шаге.
2.Как правило, на каждом шаге добавляйте не более 50 строк из проекта в разработку.
3. Не начинайте с первых 50 строк до тех пор, пока ваш проект не будет завершен.Записан должен быть ваш последний проект, а не первый.
4. Каждые 50 строк программы должны работать без ошибок с первого раза.Сосредоточенность в настоящем сохранит время и нервы в будущем.
Тестирование программы (совместно с разработкой программы)
1. Думайте серьезно о вашем плане сборки и о вашей конечной программе.Составьте правильную последовательность программ для получения положительной обратной связи на каждом этапе сборки программы.
2. Разработайте план тестирования. Создайте программы с временными операторами WRITE для получения выразительных результатов выполнения, несмотря на то, что это не окончательные результаты, необходимые вам.
3. Для каждого шага вашего плана сборки проведите тестовые испытания,и не забывайте об исключительных ситуациях, даже несмотря на их малую вероятность.