Как бы ни была сложна задача, схема алгоритма соответствующей программы всегда может быть представлена с использованием ограниченного набора базовых структур
37. Базовый набор управляющих структур
Примером одного из таких наборов базовых структур являются следующие три конструкции:
f THEN g- последовательность:
IF p THEN f ELSE g –выбор(ветвление):
WHILEpDOf –итерации (цикл с предусловием):
Эти базовые структуры могут соединяться между собой по тем же правилам, образуя более сложные структуры. При этом fи gмогут представлять собой очень сложные схемы алгоритмов с одним входом и одним выходом.
Наборов базовых структур может быть несколько.Например, если заменить последний элемент набора на DOfWHILEp -итерации (цикл с постусловием):
то получится еще один набор из трех базовых структур. Эти наборы эквивалентны, т.к. от WHILEpDOfлегко перейти к DOfWHILEpи наоборот:
Путем эквивалентных преобразований любую неструктурированную схему алгоритма можно привести к структурированному виду. Например:
В некоторых случаях структуризация алгоритмов может привести к появлению в них определенной избыточности (в последнем примере дважды осуществляется обращение к g), но такие “накладные расходы” полностью оправдываются достоинствами структурированных алгоритмов.
Для более эффективной разработки программ современные языки программирования кроме минимального набора управляющих структур содержат и их модификации.
38. Управляющие структуры и инструкции языка C++
Управляющие структуры используются для управления ходом выполнения программы. В языке C++ имеются три категории управляющих инструкций:
· инструкции выбора (ветвления):
o if - условная инструкция;
o switch – инструкция множественного выбора;
· итерационные (циклические) инструкции:
o while – цикл с предусловием;
o dowhile - цикл с постусловием;
o for – итерационный цикл;
· инструкции перехода:
o break – прекращение выполнения циклических инструкций и инструкции switch;
o continue – переход к следующей итерации цикла;
o return – прекращение выполнения функции
o goto – переход по метке.
39. Условная инструкция (if).
Условная инструкция ifпозволяет выбрать одно из двух направлений выполнения программы.
Имеются две формы записи этой инструкции:
if (<Выражение>)
<Инструкция 1>;
Else
<Инструкция 2>;
if (<Выражение>)
<Инструкция>;
Если под термином <Инструкция> понимаются несколько последовательных инструкций, то формат записи будет таким:
Блок инструкций представляет собой последовательность инструкций, каждая из которых заканчивается символом;. Блок можно рассматривать как одну инструкцию (составную инструкцию).
Термин <Выражение>представляет собой любое выражение C++, значение которого может трактоваться как значение логического типа (bool).
Примерзаписи:
intK;
cin>>K;
if (K>= 0)
cout<< “Вы ввели положительное число.” <<endl;
Else
cout<< “Вы ввели отрицательное число.” <<endl;
Здесь в качестве выражения использовано логическое выражение, значение которого равно trueили falseв зависимости от введенного с клавиатуры значения переменной K.
Еще один пример:
intK;
cin>>K;
if (K)// Здесь использовано арифметическое выражение
cout<< “Вы ввели число не равное 0.”<<endl;
Else
cout<< “Выввели0.”<<endl;
В этом примере выражение не является логическим, однако его значение может трактоваться как логическое (помним, что любое числовое значение, отличное от 0, соответствует значению true, а числовое значение 0– логическому значениюfalse).Этот пример можно было бы переписать так (эквивалент предыдущего примера):
int K;
cin>> K;
if (K != 0)// Здесь использовано логическое выражение
cout<< “Вы ввели число не равное 0.”<<endl;
Else
cout<< “Выввели0.”<<endl;
Способ записи выражения во втором (из последних двух) примере следует считать менее эффективным и с точки зрения написания текста, и с точки зрения использования ресурсов (расхода памяти и быстродействия).
А вот пример с использованием блока инструкций:
int Max, Min, B;
cin>> Max >> Min;
if (Min > Max)
{
B = Max;
Max = Min;
Min = B;
}
В этом примере используется “укороченная” (без ветви else) форма инструкции if, и в случае, когда переменная Minсодержит значение большее, чем переменная Max, выполняется последовательность инструкций (блок), осуществляющих перераспределение значений этих переменных так, что переменная Maxбудет содержать большее значение, а переменная Min - меньшее.
Выполняемые внутри оператора ifинструкции могут быть любыми инструкциями языка C++, в том числе и другими инструкциями if. То есть, другими словами, инструкции if могут вкладываться друг в друга.Количество уровней вложения if– инструкций в языке C++ ограничено 256 уровнями.
Рассмотрим несколько примеров вложений if- инструкций.
При анализе текстов подобных программ используют следующее правило: