Книга: Технологии программирования

5.8. КОДИРОВАНИЕ ТИПОВЫХ СТРУКТУР НА ЯЗЫКАХ ПРОГРАММИРОВАНИЯ

5.8. КОДИРОВАНИЕ ТИПОВЫХ СТРУКТУР НА ЯЗЫКАХ ПРОГРАММИРОВАНИЯ

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

Кодирование программы должно осуществляться только с использованием стандартных структур! Запрещено использование меток, операторов безусловного перехода на метку (go to), операторов досрочного выхода из структуры break!

При кодировании на языке С оператор break может использоваться только при кодировании структуры switch.

При использовании другого процедурно-ориентированного языка программирования (не Pascal) необходимо предварительно закодировать на используемом языке программирования все описанные в этом подразделе стандартные структуры без изменения их логики!

Так, при программировании на языке С структура УНИВЕРСАЛЬНЫЙ ЦИКЛ — "ДО" будет включать операцию "!" (НЕ):

/* подготовка цикла */
do
{
/* Тело цикла */

}
while (! (L));

В приведенной выше структуре ненулевое значение переменной L соответствует окончанию выполнения цикла, а не его продолжению выполнения, как в операторе языка программирования! Использование "линией" операции (!) НЕ никак не удлинит программу. Современные компиляторы автоматически инвертируют логическое условие завершения цикла.

Структуре СЛЕДОВАНИЕ в программах могут соответствовать: выполнение всей программы; вызов процедуры.

Согласно стандарту проекта, АЛЬТЕРНАТИВА имеет четыре конструкции. Рассмотрим их запись на языке программирования Pascal.

Конструкция для одной альтернативы:

if L then begin
{Действие при L=True}

end;

Конструкция для двух альтернатив:

if L then begin
{Действие при L=True}

end
else
begin
{Действие при L=False}

End;

Первый вариант конструкции для нескольких альтернатив (ВЫБОРА):

if L1 then Begin
{Действие при L1=True}
end;

if L2 then
begin
{Действие при L2=True}

end;
if L3 then
begin
{Действие при L3=True}

end;

Второй вариант конструкции для нескольких альтернатив (ВЫБОРА):

Switch:= 0;
L1:=…;
L2:=…;
L3:=…;

if L1 then Switch:= 1;
if L2 then Switch:= 2;
if L3 then Switch:= 3;

case Switch of
1:begin
{Действие при L1=True}

end;
2:begin
{Действие при L2=True}

end;
3:begin
{Действие при L3=True}

end;
else
begin
{Вывод сообщения об ошибочном кодировании модуля}

end;
end; {End of Case}

Рассмотрим запись вариантов кодирования структуры АЛЬТЕРНАТИВА на языке программирования С.

Конструкция для одной альтернативы:

if (L)
{
/*Действие при L ? 0*/

}

Конструкция для двух альтернатив:

if (L)
{
/*Действие при L ? 0*/

}
else
{
/*Действие при L = 0*/

}

Первый вариант конструкции для нескольких альтернатив (ВЫБОРА)

if (L1)
{
/*Действие при L1 ? 0*/

}
else if (L2)
{
/*Действие при L2 ? 0*/

}
else if(L3)
{
/*Действие при L3 ? 0*/

}

}

Второй вариант конструкции для нескольких альтернатив (ВЫБОРА):

Selector = 0;
L1 =…;
L2 =…;
L3 =…;

if (L1) Selector = 1;
else if (L2) Selector = 2;
else if (L3) Selector = 3;

switch (Selector)
case 1:
/*Действие при L1 ? 0*/

break;
case 2:
/*Действие при L2 ? 0*/

break;
case 3:
/*Действие при L3 ? 0*/

break;
default:
/*Вывод сообщения об ошибочном кодировании модуля*/
exit (-1);
} /*Конец switch*/

Правая конструкция соответствует очень сложной логике условий. В простейших случаях допускается упрощенная кодировка (первый пример на Pascal, второй на Q:

if a > b then x:=y+3 else x:=у+6; {Язык Pascal}
if (a > b) x=y+3; else x=у+6; /*Язык С*/

ВЫБОР из двух и более АЛЬТЕРНАТИВ нельзя кодировать при помощи вложения других структур простейших АЛЬТЕРНАТИВ из-за большой вероятности ошибок.

Порядок детализации структур АЛЬТЕРНАТИВА:

1) в зависимости от количества альтернативных действий записываются все операторы структуры;

2) определяются сами альтернативные действия как СЛЕДОВАНИЯ;

3) записываются логические условия альтернативных действий;

4) проверяется информационная согласованность логических условий и действий;

5) на нескольких текстовых примерах осуществляется проверка. ПОВТОРЕНИЯ в программировании называются циклами.

Обычно стандартом проекта предусмотрен ряд конструкций циклов. Неуниверсальный ЦИКЛ-ДО имеет две конструкции и используется для задания заданного числа повторений. Рассмотрим их запись на языке программирования Pascal.

Конструкция по возрастанию:

for i:=3 to 5 do begin
{тело цикла i=3,4,5}

end;

Конструкция по убыванию:

for i:=5 downto 3 do begin
{тело цикла i=5,4,3}

end;

Рассмотрим запись вариантов кодирования структуры неуниверсальный ЦИКЛ-ДО на языке программирования С.

Конструкция по возрастанию:

for (i=3; i<=5; i++)
{
/*тело цикла i=3,4,5*/

}

Конструкция по убыванию:

for (i=5; i>=3; i-)
{
/*тело цикла i=5,4,3*/

}

Здесь i — переменная цикла. Обычно эти циклы не требуют после кодирования дополнительного тестирования.

Универсальные циклы имеют конструкции ЦИКЛ-ДО и ЦИКЛ-ПОКА. Их запись на языке Pascal приведена ниже:

Универсальный ЦИКЛ-ПОКА:

{Подготовка}
while L do
begin
{Тело цикла}

end;

Универсальный цикл ЦИКЛ-ДО:

{Подготовка}
repeat
{Тело цикла}

until L;

Ниже приведена запись тех же структур на языке С:

Универсальный ЦИКЛ-ПОКА:

/*Подготовка*/
while (L)
{
/*Тело цикла*/

}

Универсальный ЦИКЛ-ДО:

/*Подготовка*/
do
{
/* Тело цикла */

}
while (!(L))

Здесь L логическое выражение. Его значение True является условием продолжения выполнения ЦИКЛ-ПОКА или условием окончания выполнения ЦИКЛ-ДО. Подготовка и тело цикла являются СЛЕДОВАНИЯМИ. Тело цикла выполняется столько раз, сколько и весь цикл. Признаком ЦИКЛ-ПОКА является возможность не выполнения тела цикла ни разу. При равноценности из двух конструкций ЦИКЛ-ДО и ЦИКЛ-ПОКА выбирают ту, запись которой короче.

Вообще ЦИКЛ-ДО можно закодировать структурой ЦИКЛ-ПОКА, если в подготовке записать некоторые действия из тела цикла. Из ЦИКЛА-ДО получается ЦИКЛ-ПОКА при его охвате структурой АЛЬТЕРНАТИВА.

Порядок декомпозиции циклов:

1) набирается "пустой" текст оператора цикла;

2) записывается логическое условие продолжения ЦИКЛ-ПОКА или завершения ЦИКЛ-ДО (при этом выявляется переменная цикла);

3) декомпозируется то действие тела цикла, которое изменяет логическое условие до невыполнения условия ЦИКЛ-ПОКА или до выполнения условия ЦИКЛ-ДО;

4) детализируется СЛЕДОВАНИЕ "Подготовка цикла";

5) детализируется оставшееся действие тела цикла как СЛЕДОВАНИЕ;

6) проводится проверка информационной согласованности всех элементов цикла;

7) проводится проверка правильности работы цикла с помощью безмашинного расчета трассы выполнения тестов с трехкратным (или более), однократным выполнением цикла и вообще без выполнения.

В текстах программ может использоваться еще одна вычислительная структура — РЕКУРСИЯ. Признаком этой структуры является наличие рекурсивных формул и вычислений. Все, что делает рекурсия, можно реализовать при помощи циклов и массивов. Однако если язык программирования допускает рекурсию, то ее использование может сократить код программы. Рекурсия всегда очень тщательно комментируется.

Оглавление книги


Генерация: 1.724. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз