Продемонстрируем процесс проектирования КП на примере составления проекта КП для решения задачи о выборе максимального из трех заданных чисел. Будем исходить из спецификации этой КП, приведенной выше (см. п. 6.1.7).
В соответствии с методикой проектирования КП путем пошаговой детализации на нулевом шаге введем имя проектируемой КП – MAX_FROM_3.
В результате выполнения нулевого шага N0 = { MAX_FROM_3}, а P0 = Æ.
На первом шаге выберем для детализации схему ЛУЧ:
p1: MAX_FROM_3 ® <ввод исходных данных с контролем>; <поиск максимума>; <вывод результата>
В результате выполнения этого шага N1 = { MAX_FROM_3, <ввод исходных данных с контролем>, <поиск максимума>, <вывод результата> }, а P1 = { p1 }. Теперь надо выбрать для детализации какой-либо нетерминал из множества N1. Пусть это будет <ввод исходных данных с контролем >.
На втором шаге для детализации снова выберем схему ЛУЧ – в соответствии со спецификацией задачи в п.6.1.7:
p2: <ввод исходных данных с контролем> ® <ввод A с контролем>; <ввод B с контролем>; <ввод C с контролем>.
В результате второго шага N2 = N 1 È { <ввод A с контролем>, <ввод B с контролем>, <ввод C с контролем> }, а P2 = { p1, p2 }.
Для третьего шага детализации выберем нетерминал <ввод A с контролем> и схему ЛУЧ:
p3: <ввод A с контролем > ® Writeln (“Введите первое число”, G); Readln (G);
Writeln (“ А = ”, G); <контроль введенного данного>; A:= G;
После этого N3 = N2 È <контроль введенного данного>, P3 = { p1, p2, p3 }. Аналогично выполним следующие два шага детализации:
p4: <ввод B с контролем > ® Writeln (“Введите второе число”, G); Readln (G);
Writeln (“ B = ”, G); <контроль введенного данного>; B:= G;
p5: <ввод C с контролем > ® Writeln (“Введите третье число”, G); Readln (G);
Writeln (“ C = ”, G); <контроль введенного данного>; C:= G;
в результате выполнения которых N5 = N3 , а P5 = { p1, p2, p3, p4, p5 }.
На очередном шаге детализации выберем подходящую управляющую структуру для нетерминала <вывод результата> - это ЛУЧ, который в этом случае состоит из одного оператора:
p6: <вывод результата> ® Writeln (“A = ”, A, “B = ”, B, “C = ”, C, “ Самое большое число - ”, MAX, “.”).
Теперь N6 = N 2 , а P6 = { p1, p2, p3, p4, p5, p6}.
К этому моменту остался “непродетализированный” нетерминал <поиск максимума>. В соответствии со спецификацией задачи продетализируем его по схеме ЛУЧ:
p7: <поиск максимума> ® <максимум из двух>; <максимум из трех>,
в результате чего получим N7 = N2 È { <максимум из двух>, <максимум из трех> }, а P7 = { p1, p2, p3, p4, p5, p6, p7}.
Для детализации двух возникших на этом шаге нетерминалов понадобится схема ВЕТВЛЕНИЕ:
p8: < максимум из двух > ®
if A > B then Begin MAX:= A; Writeln (“Первое число не меньше второго.”)end
else Begin MAX:= B; Writeln (“Второе число больше первого.”)end
p9: < максимум из трех > ® if MAX < C then MAX:= C;
После девятогошага N9 = N7, а P9 = { p1, p2, p3, p4, p5, p6, p7, p8, p9 }. Теперь остался только один “непродетализированный” нетерминал - <контроль введенного данного>. Для его детализации используем схему ЦИКЛ (с предусловием):
P10: <контроль введенного данного> ® whileG < 0 OR G > 65535 do
Begin
<диагностическое сообщение об ошибке ввода>;
Writeln (“Повторите ввод!”); Readln (G);
Writeln (“Теперь Вы ввели ”, G);
End
После десятогошага N10 = N7 È <диагностическое сообщение об ошибке ввода>, а P10 = { p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 }.
Для детализации последнего нетерминала используем схему ВЕТВЛЕНИЕ:
P11: <диагностическое сообщение об ошибке ввода> ® if G > 99999
then Writeln (“Количество цифр во вводимом числе не должно быть больше 5.”)
else Writeln (“Вводимое число должно быть неотрицательным
И не должно превышать 65535.”)
Теперь N11= N10, а P11 = { p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 , p11 }.
Проектирование завершено. Тем самым построена КС-грамматика, в которой терминальные символы – это символы языка Паскаль, множество нетерминальных символов N = N11, аксиома - MAX_FROM_3, а множество правил P = P11.
9. 6. документ "Проект компьютерной программы"
В результате процесса проектирования компьютерной программы создаётся документ "Проект компьютерной программы решения задачи", состоящий из двух частей: "Проект структур данных" и "Проект алгоритма обработки данных".
В части " Проект структур данных" должны быть перечислены все введённые переменные с указанием их смысла (например, в виде комментария) и описаны типы этих переменных в терминах ЯП.
В части " Проект алгоритма обработки данных" должен быть представлен этот проект в виде текста на PDL.
Приведём в качестве примера документ проектирования КП решения задачи о выборе максимального из трёх чисел.
Проект Компьютерной Программы