
3 - Линейный _Ветвление.ppt
- Количество слайдов: 28
Линейный алгоритм. Ветвление.
В 1966 г. Боймом и Якопини доказано, что любой алгоритм можно составить из трёх базовых алгоритмических структур: линейного алгоритма, ветвления и цикла. Структурное программирование – программирование без “goto”.
§ 1. Линейный алгоритм – команды выполняются последовательно, друг за другом.
Пример линейной программы (объём цилиндра): #include "stdafx. h” //Подкл. файлы для компиляции #include <iostream> // Подключает потоковый в/в using namespace std; // Пространство имён std void main() { double h, r, v; const float PI=3. 14159; cout << “r =“; // Вывод подсказки cin >> r; // Ввод значения r cout << “h =“; // Вывод подсказки cin >> h; // Ввод значения h v = h*PI*r*r; cout << "Объём = “ << v ; // Вывод результата }
Начало Ввод r, h v = π r 2 h Вывод v Конец Бл. Блок-схема линейного алгоритма
Условные обозначения блоков Обработка, вычисления Ввод/Вывод Ветвление
Вспомогательный алгоритм Вывод на бумагу Чтение/запись на диск
Начало/Конец Соединитель Межстраничный соединитель Комментарий
§ 2. Ветвление содержит условие, в зависимости от выполнения которого выполняется та или иная последовательность команд. Два вида ветвления: полное и сокращённое.
Полное ветвление + Команда 1 Условие – Команда 2
Сокращённое + Команда 1 ветвление Условие –
Условный оператор if Ветвление в С++ реализуется с помощью условного оператора if : if (условие) Оператор1; [else Оператор2; ] Сначала вычисляется условие. Если оно ≠ 0 (true), выполняется Оператор1, иначе – Оператор2. Условие может содержать операции сравнения: < , >= (≥) , <= (≤) , == , != , а также логические связки: && (И), || (ИЛИ), ! (НЕ).
Условный оператор без else реализует неполное ветвление, с else – полное. Примеры : 1) if (x<0) y = –x; // неполное ветвление 2) if (x>=0 && x<=5) n++; else n--; // полное ветвление 3) if (a==0 || a==4) cout << “Деление на 0!” << endl; else { y = (a+3)/(a*(a-4)); cout << “y=” << y << endl; }
Задача 1 Ввести возраст человека. Определить, является ли человек совершеннолетним. #include “stdafx. h” #include <iostream> using namespace std; void main() { int age; setlocale(LC_ALL, ”Russian”); cout << “Возраст человека : ”; cin >> age; if (age>=18) cout <<“Совершеннолетний” << endl; else cout <<“Несовершеннолетний”<<endl; }
Начало Ввод age – age >=18 Вывод «Несовершеннолетний» + Вывод «Совершеннолетний» Конец
Задача 2 Определить, кратно ли введённое целое число Х трём или пяти. . . . if (X%3==0 || X%5==0) cout << “Кратно” << endl; else cout << “Не кратно” << endl; . . .
§ 3. Вложенное ветвление Если необходимо проверить последовательно на истинность несколько выражений, то применяется вложенная структура if-else : if (условие 1) Оператор1; else if (условие 2) Оператор2; . . . else if (условие. N-1) Оператор. N-1; else Оператор. N;
Задача 3 Оценить словесно результат ЕГЭ, если известно полученное количество баллов Balls: Вариант решения I: #include “stdafx. h” #include <iostream> using namespace std; void main() { int balls; setlocale(LC_ALL, ”Russian”); Metka: cout<<“Введите баллы : ”; cin >> balls; if (balls<0 || balls>100) goto Metka; if (balls>=85) cout << “Отлично”; else if (balls>=52) cout<<“Хорошо”; else if (balls>=35) cout<<“Удовлетворительно”; else cout<< “Плохо” ; cout<<endl; }
Начало Ввод balls Balls<0 или Balls>100 + – + balls >= 85 – balls >= 52 + Вывод «Отлично» Вывод «Хорошо» – balls >= 35 – Вывод «Плохо» Конец + Вывод «Удовлетворительно»
Вариант решения II: #include “stdafx. h” #include <iostream> using namespace std; void main() { int b; Metka: cout<<“Введите баллы : ”; cin >> b; if (b<0 || b>100) goto Metka; if (b>=85) cout <<“Отлично”; if(b>=52 && b<85) cout << “Хорошо”; if(b>=35 && b<52) cout<<“Удовлетворительно”; if (b<35) cout<< “Плохо”; cout<<endl; }
Задача 4 Вычислить (самостоятельно): Y= значение функции
Начало Ввод X X< – 3 – + -3 ≤ X ≤ 3 – Вывод Y Конец +
§ 4. Оператор выбора варианта switch Часто возникает задача выбора одного варианта решения задачи из многих существующих. Удобно использовать оператор switch (переключатель).
Формат оператора: switch(выражение) { case значение 1 : [оператор1; ][break; ] case значение 2 : [оператор2; ][break; ]. . . case значение. N : [оператор. N; ][break; ] [default : оператор; ] }
Здесь Выражение – имеет целочисленный тип, break – передаёт управление за пределы switch. Оператор после default выполняется, если в case нет соответствующего значения.
Задача Ввести экзаменационную оценку. Вывести словесную характеристику оценки. #include “stdafx. h” #include <iostream> using namespace std; void main() { int r; cout<< ”Введите оценку ”; cin >> r;
switch (r) { case 1: cout << “Ужасно”; break; case 2: cout << “Плохо”; break; case 3: cout << “Удов-о”; break; case 4: cout << “Хорошо”; break; case 5: cout << “Отлично”; break; default: cout << “Ошибка!”; } cout<<endl; }
switch в отличии от if может выполнять операции только строгого равенства и работает лишь с целочисленными типами (int, char, wchar_t, bool ).
3 - Линейный _Ветвление.ppt