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) проводится проверка правильности работы цикла с помощью безмашинного расчета трассы выполнения тестов с трехкратным (или более), однократным выполнением цикла и вообще без выполнения.
В текстах программ может использоваться еще одна вычислительная структура — РЕКУРСИЯ. Признаком этой структуры является наличие рекурсивных формул и вычислений. Все, что делает рекурсия, можно реализовать при помощи циклов и массивов. Однако если язык программирования допускает рекурсию, то ее использование может сократить код программы. Рекурсия всегда очень тщательно комментируется.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Заполнение структур
Заполнение структур Структуры заполняются таким образом, чтобы каждый ее элемент имел естественное выравнивание. Например, рассмотрим следующую структуру данных на 32- разрядной машине.struct animal_struct { char dog; /* 1 байт */ unsigned long cat; /* 4 байт */ unsigned short pig; /* 2 байт
Инициализация структур
Инициализация структур Структуры необходимо инициализировать, используя метки полей. Это позволяет предотвратить некорректную инициализацию при изменении структур. Это также позволяет выполнять инициализацию не всех полей. К сожалению, в стандарте C99 принят довольно
Создание типовых тел
Создание типовых тел Построение типовых объемных тел во многом схоже с созданием типовых поверхностных моделей, рассмотренным в предыдущей главе.Чтобы построить одну из типовых объемных моделей, необходимо воспользоваться меню Draw ? Modeling (Черчение ? Моделирование),
78. Используйте vector (и string::c_str ) для обмена данными с API на других языках
78. Используйте vector (и string::c_str) для обмена данными с API на других языках Резюмеvector и string::c_str служат шлюзом для сообщения с API на других языках. Однако не полагайтесь на то, что итераторы являются указателями; для получения адреса элемента, на который ссылается vector<T>::iterator
Описание массива структур
Описание массива структур Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива: struct book libry [MAXBKS];Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book.
Создание типовых тел
Создание типовых тел Построение типовых объемных тел во многом схоже с созданием типовых поверхностных моделей, рассмотренным в предыдущей главе.Чтобы построить одну из типовых объемных моделей, необходимо воспользоваться меню Draw ? Modeling (Черчение ? Моделирование),
15.5. Знания о типовых ситуациях и механизм "советов"
15.5. Знания о типовых ситуациях и механизм "советов" В этом разделе рассматривается метод представления знаний о конкретной игре с использованием семейства Языков Советов. Языки Советов (Advice Languages) дают возможность пользователю декларативным способом описывать, какие
Глава 16 Программирование в терминах типовых конфигураций
Глава 16 Программирование в терминах типовых конфигураций В этой главе мы будем заниматься системами, ориентированными на типовые конфигурации ("образцы"), рассматривая их как некоторый специальный подход к программированию. Языком, ориентированным на образцы, можно
Справочник типовых анкет
Справочник типовых анкет Многим из нас в процессе трудовой деятельности либо при поиске работы приходилось сталкиваться с заполнением самых разнообразных анкет и участвовать в различного рода опросах. Чаще всего это приходится делать при поиске работы. Кроме этого,
У3.1 Модульность в языках программирования
У3.1 Модульность в языках программирования Рассмотрите модульные структуры в любом хорошо знакомом вам языке программирования и оцените, насколько они удовлетворяют критериям и принципам, изложенным в этой
Замечание о пустоте структур
Замечание о пустоте структур Предусловие в процедуре создания (конструкторе) make класса STACK1 требует комментария. Оно устанавливает n>=0 и, следовательно, допускает пустые стеки. Если n=0, то make вызовет процедуру создания для массивов, также имеющую имя make, с аргументами 1 и 0
1.12. ПРОБЛЕМА ТИПОВЫХ ЭЛЕМЕНТОВ В ПРОГРАММИРОВАНИИ
1.12. ПРОБЛЕМА ТИПОВЫХ ЭЛЕМЕНТОВ В ПРОГРАММИРОВАНИИ Под типовыми элементами, или "кубиками", понимаются какие-то отдельно изготовленные типовые части, из которых можно было бы собирать множество программ. Проблема "кубиков" присуща не только программированию, и в разных
8.5. ОСНОВНЫЕ ПОНЯТИЯ, ИСПОЛЬЗУЕМЫЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННЫХ ЯЗЫКАХ
8.5. ОСНОВНЫЕ ПОНЯТИЯ, ИСПОЛЬЗУЕМЫЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННЫХ ЯЗЫКАХ Класс в одном из значений этого термина обозначает тип структурированных данных.Объект — это структурированная переменная типа класс. Каждый объект является представителем (экземпляром)