Дорогие друзья! До этого момента все действия в наших программах выполнялись в порядке их следования (по порядку).Такие алгоритмы называются линейными. Настало время научиться ставить перед компьютером условие, чтобы он мог выполнять действия по одному или другому пути решения задачи. Такую алгоритмическую структуру называют ветвлением. Это как муравей, который собирается бежать по ветке и может пройти либо по одному пути, либо по другому.
ВЕТВЛЕНИЕ
УСЛОВНЫЙ ОПЕРАТОР
|
ОПЕРАТОР ВЫБОРАМНОЖЕСТВЕННЫЙ ВЫБОРОператор выбора позволяет выбрать одну из нескольких альтернатив. Когда условий очень много, то лучше использовать оператор выбора.
Например вы решили помыть руки и включили кран с водой.
Если вода холодная, тогда вы добавляете горячей; Если вода горячая, тогда вы добавляете холодной; Если вода теплая, тогда вы добавляете напор; Если вода ржавая, тогда выключаете кран; |
Важно!!! Вы уже заметили здесь ключевые слова "Если", "то", "иначе"?
Можно привести множество примеров где используется ветвление: Например, ваш блок бесперебойного питания начинает пищать, когда отключают электроэнергию. Вы принимаетесь за уборку комнаты, если в ней беспорядок. Отключается чайник, когда датчик температуры показывает температуру кипячения воды. Мы переходим дорогу, если для нас горит зеленый сигнал светофора. Мы выбираем одежду, в зависимости от температуры. |
ПОЛНОЕ ВЕТВЛЕНИЕ
if ( условие ) // заголовок с условием
{ ... // блок «если» — операторы, которые выполняются, // если условие в заголовке истинно } else { ... // блок «иначе» — операторы, которые выполняются, // если условие в скобках ложно } Важно!!! Если в блоке «если» или в блоке «иначе» только один оператор, то фигурные скобки можно не ставить.
|
if ( условие ) // заголовок с условием
then begin ... // блок «тогда» — операторы, которые выполняются, // если условие в заголовке истинно end else begin ... // блок «иначе» — операторы, которые выполняются, // если условие в скобках ложно end; Важно!!! Если в блоке «тогда» или в блоке «иначе» только один оператор, то begin и end можно не писать.
|
ПРИМЕРЫ
Определить положительное или отрицательное число ввел пользователь
cout<<"Введите число отличное от нуля "; //запрос
cin>>a; //ввод данных if (a>0) //условие cout<<"Это число положительное "<<endl; //если условие истинно else // ветка иначе cout<<"Это число отрицательное "<<endl; //если условие ложно Результат на экране:Введите любое число, отличное от нуля 2
Это число положительное
|
write('Введите любое число отличное от нуля '); //запрос
readln(a); //ввод данных if (a>0) //условие then //ветка "тогда" или ветка "то" writeln ('Это число положительное ') //если условие истинно else // ветка иначе writeln ('Это число отрицательное '); //если условие ложно Результат на экране:Введите любое число, отличное от нуля -3
Это число отрицательное
|
ВАЖНО!!! Если пользователь введет число равное нулю, тогда условие (a>0) будет ложным и алгоритм перейдет на ветку иначе, т.е на экране компьютера появиться сообщение, что 0 (ноль) - Это число отрицательное. Такую задачу лучше решать с вложенным условием.
ВЛОЖЕННОЕ УСЛОВИЕ
cout<<"Введите любое число ";
cin>>a; if (a>0) //условие 1 { cout<<"Это число положительное "<<endl;} //выполняется, если условие 1 истинно else //ветка иначе { if (a<0) //условие 2 выполняется, если условие 1 ложно {cout<<"Это число равно отрицательное "<<endl;} //выполняется, если условие 2 истинно else //ветка иначе {cout<<"Это число равно нулю "<<endl;} //выполняется, если условие 2 ложно }
|
write('Введите любое число отличное от нуля '); //запрос
readln(a); //ввод данных if (a>0) //условие 1 then //ветка "тогда" или ветка "то" writeln ('Это число положительное ') //если условие 1 истинно else // ветка иначе if a=0 //условие 2 выполняется если условие 1 ложно then //ветка "тогда" или ветка "то" writeln ('Это число равно нулю') //выполняется если условие 2 истинно else // ветка иначе writeln ('Это число отрицательное '); //если условие 2 ложно
|
КРАТКОЕ ВЕТВЛЕНИЕ
if ( условие ) // заголовок с условием
{ ... // блок «если» — операторы, которые выполняются, // если условие в заголовке истинно } |
if ( условие ) // заголовок с условием
then begin ... // блок «тогда» — операторы, которые выполняются, // если условие в заголовке истинно end; |
ПРИМЕРЫ
Найти модуль введенного числа
cout<<"Введите любое число "; //запрос
cin>>a; //ввод данных if (a<0) //условие { a=abs(a); } //выполняется, если условие истинно // если условие ложно, тогда ничего не происходит // переход на следующую команду cout<<"Модуль этого числа равен "<<a<<endl; |
write('Введите любое число '); //запрос
readln(a); //ввод данных if (a<0) //условие then //ветка "тогда" или ветка "то" a:=abs(a); //выполняется если условие истинно // если условие ложно, тогда ничего не происходит // переход на следующую команду writeln ('Модуль этого числа равен ',a); |
Результат выполнения программы:
Введите любое число -2
Модуль этого числа равен 2
Модуль этого числа равен 2
ВАЖНО!!! Понимать, что если условие в кратком ветвлении ложно, тогда ничего не происходит.
Будет выполняться следующая команда:
Будет выполняться следующая команда:
СЛОЖНОЕ УСЛОВИЕ
Сложное условие содержит логические операции (not-не, and- и,or-или для Паскаля) и (! -не, &&-и, ||-или для С++)
Рассмотрим сложное ветвление на примере задачи.
Рассмотрим сложное ветвление на примере задачи.
ТАБЛИЦЫ ИСТИННОСТИ ЛОГИЧЕСКИХ ОПЕРАЦИЙ
A |
!A (C++) not A (PASCAL) отрицание |
ИСТИНА |
ЛОЖЬ |
ЛОЖЬ |
ИСТИНА |
Операция "НЕ" — инверсирует логическое выражение
Операция "И" — требуется одновременное
выполнение двух условий! |
Операция "ИЛИ" — требуется выполнение хотя бы одного из двух условий (или обоих сразу)
|
Даны три отрезка. Можно ли из них построить треугольник?
Решение: Для любого треугольника сумма его двух сторон должна быть больше третьей стороны (неравенство треугольника). Если a, b, c – стороны предполагаемого треугольника, то нужно сравнить длину каждого отрезка с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольник из таких отрезков не построить.
Решение: Для любого треугольника сумма его двух сторон должна быть больше третьей стороны (неравенство треугольника). Если a, b, c – стороны предполагаемого треугольника, то нужно сравнить длину каждого отрезка с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольник из таких отрезков не построить.
cout<<"Введите длины сторон треугольника "; // вывод на экран запроса
cin>>a>>b>>c; // ожидание ввода сторон if ((a < b+c) && (b < a+c) && (c < a+b)) //сложное условие с операцией "И" будет истинно, если в каждом из выражений ИСТИНА cout<<"Можно построить треугольник"<<endl; //если условие истинно else //ветка иначе cout<<"Нельзя построить треугольник"<<endl; //если условие ложно
|
write (' Введите длины отрезков: '); //запрос
readln (a,b,c); // ввод данных if (a < b+c) and (b < a+c) and (c < a+b) //сложное условие c операцией "И" будет истинно, если в каждом из выражений ИСТИНА then //ветка тогда writeln ('Можно построить треугольник.') //если условие истинно else //ветка иначе writeln ('Нельзя построить треугольник.'); //если условие ложно
|
Результат выполнения программы: Введите длины отрезков: 5 4 7
Можно построить треугольник. |
ВАЖНО!!! В языке Паскаль перед else никогда не ставят точку с запятой.
|
ПРИМЕРЫ
switch (number % 2)
{ case 0 : cout<<number<<"- число четное"<<endl; //серия 1 для значения если number % 2 (остаток от деления)=0 default : cout<<number<<"- число не четное"<<endl; //серия по умолчанию }
|
case NUMBER mod 2 of
0 : writeln (NUMBER, ‘- число четное‘) //серия 1 для значения если number % 2 (остаток от деления)=0 else writeln (NUMBER, ‘- число нечетное‘); //серия ели ни одно из перечисленных альтернатив не подходит end;
|
switch (month)
{ case 1 : case 2 : case 3 : cout<<"Первый квартал"<<endl; break; case 4 : case 5 : case 6 : cout<<"Второй квартал"<<endl; break; case 7 : case 8 : case 9 : cout<<"Третий квартал"<<endl; break; case 10 : case 11 : case 12 : cout<<"Четвертый квартал"<<endl; break; }
|
case MONTH of
1, 2, 3 : writeln (‘Первый квартал‘); 4, 5, 6 : writeln (‘Второй квартал‘); 7, 8, 9 : writeln (‘Третий квартал‘); 10, 11, 12 : writeln (‘Четвёртый квартал‘); end;
|
ЗАДАЧА
Написать программу преобразования цифры в слово.
#include <stdio.h> //базовые библиотека ввода вывода
#include <conio.h> //базовые библиотека консоли ввода вывода #include <windows.h> //расширенная библиотека управления консолью #include <iomanip> // библиотека, в которой содержится модификаторы #include <iostream> //библиотека, в которой содержатся потоки ввода и вывода cin и cout #include <cmath> //библиотека математических функций using namespace std; // Использовать пространство стандартных имён short int a; //объявление переменной целого типа main() { SetConsoleCP(1251); // установка режима консоли для кириллицы SetConsoleOutputCP(1251); cout<<"Введите цифру "<<endl; cin>>a; if (a<0 || a>9) //сложное условие через || (или). cout<<"Это число не является цифрой"<<endl; //ветка "тогда" else //ветка "иначе" switch (a) //выражение множественного выбора { case 0 : cout<<"ноль"<<endl; break; case 1 : cout<<"один"<<endl; break; case 2 : cout<<"два"<<endl; break; case 3 : cout<<"три"<<endl; break; case 4 : cout<<"четыре"<<endl; break; case 5 : cout<<"пять"<<endl; break; case 6 : cout<<"шесть"<<endl; break; case 7 : cout<<"семь"<<endl; break; case 8 : cout<<"восемь"<<endl; break; case 9 : cout<<"девять"<<endl; break; } getch(); // задержка содержимого экрана до нажатия любой клавиши }
|
Program Cifra; //имя программы
Var a: shortint; //объявление переменной целого типа Begin writeln('Введите цифру '); readln(a); if (a<0) or (a>9) //сложное условие через or (или). then //ветка "тогда" writeln ('Это число не является цифрой') else //ветка "иначе" case a of //выражение множественного выбора 0 : writeln ('ноль'); 1 : writeln ('один'); 2 : writeln ('два'); 3 : writeln ('три'); 4 : writeln ('четыре'); 5 : writeln ('пять'); 6 : writeln ('шесть'); 7 : writeln ('семь'); 8 : writeln ('восемь'); 9 : writeln ('девять'); end; readln; // задержка содержимого экрана до нажатия клавиши ENTER End. Результат на экране:Введите цифру
3 три
|