SlideShare a Scribd company logo
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
1
Лекция 3-4 (4 часа)
3.4. Логические выражения и оператор if
3.4.1 Условные конструкции. Пример условных конструкций
Условные конструкции позволяют в зависимости от условия выполнять блок
операторов, заключенный в фигурные скобки.
if( условие )
{
блок операторов;
}
Если условие удовлетворено, то
"блок операторов" в теле if
выполняется.
Если условие не удовлетворяется,
то "блок операторов"в теле if не
выполняется.
if( условие )
{
блок операторов 1;
}
else
{
блок операторов 2;
}
Если условие выполняется, то
выполняется "блок операторов 1".
Если условие не удовлетворено,
то выполняется "блок операторов
2".
Условия в операторах if могут быть образованы с помощью операций равенства и
отношений. В примере несколько операторов if сравнивают два вводимых
пользователем числа. Если в каком-либо из этих операторов условие удовлетворяется
(равно true) – выполняется связанный с данным if оператор вывода.
Если внутри условия только один оператор, допустимо не использовать
фигурные скобки. Если операторов 2 и более – использование фигурных скобок
обязательно.
// подключение библиотеки ввод-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// объявление переменных
int x,y;
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
2
cout<<"Enter two integers to compare: "; // запросить ввод
cin>>x>>y; // прочитать два введенных числа
if(x == y) // число x равно числу y ?
cout<<x<<" == "<<y<<endl;
if(x != y) // число x не равно числу y?
cout<<x<<" != "<<y<<endl;
if(x < y) // число x меньше числа y ?
cout<<x<<" < "<<y<<endl;
if(x > y) // число x больше числа y ?
cout<<x<<" > "<<y<<endl;
if(x <= y) // число x меньше либо равно числу y ?
cout<<x<<" <= "<<y<<endl;
if(x >= y) // число x больше либо равно числу y ?
cout<<x<<" >= "<<y<<endl;
}
/////////////////////////////////////////////////////////////////////////////
3.4.2 Логические выражения. Логические операции И, ИЛИ, НЕ (пример 5)
Выражение, находящееся внутри круглых скобок оператора if – логическое
выражение. Логическое выражение может принимать два значения – true (истинно)
или false (ложно). Рассмотрим еще один пример, который определяет, попала ли точка
с координатами x, y в прямоугольник:
// подключение библиотеки ввод-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// объявление переменных
double x,y;
cout<<"Enter point coordinate (x,y): "; // запросить ввод
cin>>x>>y; // прочитать два введенных числа
// первый вариант решения
// если точка находится внутри прямоугольника
if(x<2 && x>-2 && y>-1 && y<1)
cout<<"Point inside"<<endl;
else
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
3
cout<<"Point outside"<<endl;
// второй вариант решения
// если точка находится внутри прямоугольника
bool x_inside=x<2 && x>-2;
bool y_inside=y<1 && y>-1;
if(x_inside && y_inside)
cout<<"Point inside"<<endl;
else
cout<<"Point outside"<<endl;
}
/////////////////////////////////////////////////////////////////////////////
В C++ предусмотрены логические операции, которые используются для
образования более сложных условий путем комбинирования простых. Логическими
операциями являются:
· && - логическое И
· || - логическое ИЛИ
· ! - логическое НЕ
В данном примере, для определения попадания точки внутрь прямоугольника
нам надо проверить условие, которое математически можно записать как -1 < x < 1.
При записи этого выражения на С++ нам придется воспользоваться операцией &&
(логического И) для объединения двух условий:x<2&&x>-2. Это условие равно true в
том и только том случае, когда оба простых условия равны true. Логические операции
И, ИЛИ и НЕ имеют более высокий приоритет чем операции сравнения, поэтому
скобки не являются необходимыми. Однако, для удобства чтения можно добавить
круглые скобки:
(x<2)&&(x>-2).
Если бы нам надо было определить, что точка НЕ попадает внутрь
прямоугольника, нам потребовалась бы использовать оператор ИЛИ (координата x
либо меньше -2, либо больше 2):
(x >2)||(x<-2)
Либо можно было бы воспользоваться оператором НЕ (координата x НЕ лежит
внутри прямоугольника):
!( (x <2)&&(x >-2) )
Таблица показывает все четыре возможных комбинации значений false и true для
операций И и ИЛИ с двумя выражениями.
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
4
выражение
1
выражение
2
(выражение 1) &&
(выражение 2)
(выражение 1) ||
(выражение 2)
true true true true
true false false true
false true false true
false false false false
При написании выражений, содержащих много операций, справляйтесь с
таблицей старшинства и ассоциативности (приложение ?). Если вы не уверены
относительно порядка оценки в сложном выражении, используйте для задания
нужного порядка круглые скобки, как в алгебраических выражениях.
3.4.3 Типичные ошибки
if(x==1) //
правильно!
{
y=x+3;
z=y*5;
}
if(x=1) //
неправильно!
// выполняется
всегда!
{
y=x+3;
z=y*5;
}
ошибочное
употребление
операции
присваивания = вместо
операции равенства ==
if(x==1); //
неправильно!
// выполняется
всегда!
{
y=x+3;
z=y*5;
}
эквивалентно коду:
if(x==1)
{
[пустой
оператор];
}
y=x+3;
z=y*5;
if(x==1) //
неправильно!
y=x+3;
z=y*5;
отсутствуют фигурные
скобки, хотя в условии
задумано больше
одного оператора
эквивалентно коду:
if(x==1)
{
y=x+3;
}
z=y*5;
3.4.4 Вложенные условия
Для вложенных условий, когда одно условие находится внутри другого очень
важно соблюдать правильную последовательность операторов и правильно
расставлять фигурные скобки.
Например:
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
5
if( х > 5 )
if( У > 5 )
cout<<"x and у are > 5";
else
cout<<"x is <= 5";
Судя по отступам, в данном примере ожидается, что оператор else относится к
условию x>5. На самом же деле оператор else всегда относится к ближайшему к нему
оператору if. Данный пример будет выполняться так:
if( х > 5 )
if( У > 5 )
cout<<"x and у are > 5";
else
cout<<"x is <= 5";
Чтобы вложенный оператор if... else выполнялся так, как предполагалось сначала,
мы должны написать его следующим образом:
if( х > 5 )
{
if( У > 5 )
cout<<"x and у are > 5";
}
else
cout<<"x is <= 5";
3.5. Арифметический логический оператор
Арифметический логический оператор позволяет присвоить переменной одно из двух значений в
зависимости от выполнения условия:
[переменная] = [условие] ? [значение1] : [значение2];
Например:
int i=3;
int j=(i>0) ? 1 : -1; // j=1
Те же самые действия можно было бы записать более длинным способом при помощи
оператора if:
if(i>0)
{
j=1;
}
else
{
j=-1;
}
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
6
3.6. Селективные конструкции
3.6.1 Селективные конструкции. Пример определения оценки в зависимости от
количества баллов (пример 6)
Селективные конструкции позволяют осуществлять выбор блока операторов,
который будет выполняться в зависимости от условий. Селективную конструкцию
можно реализовать при помощи операторов if – if else – else или при помощи
оператора switch.
if( условие 1 )
{
блок операторов 1;
}
else if( условие 2 )
{
блок операторов 2;
}
else
{
блок операторов 3;
}
switch ( переменная )
{
case константа 1:
{
блок операторов 1;
break;
}
case константа 2:
{
блок операторов 2;
break;
}
default:
{
блок операторов 3;
}
}
Рассмотрим пример определения оценки в зависимости от количества баллов
// подключение библиотеки ввод-вывода
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
7
#include <iostream>
// подключение строковой библиотеки
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// количество баллов
int studentGrade;
// оценка (строка символов)
string studentMark;
// ввод баллов
cout<<"Please, input your grade: ";
cin>>studentGrade;
// определение оценки
if ( studentGrade >= 90 ) // 90 и более баллов - оценка 5А
studentMark="5А";
else if ( studentGrade >= 83 ) // 83-89 - оценка 4В
studentMark="4А";
else if ( studentGrade >= 74 ) // 74-83 - оценка 4С
studentMark="4С";
else if ( studentGrade >= 67 ) // 67-74 - оценка 3D
studentMark="3D";
else if ( studentGrade >= 60 ) // 60-67 - оценка 3D
studentMark="3E";
else // менее 60 - не сдано
studentMark="FX";
// вывод оценки на экран
// для вывода строки необходимо преобразовать ее в набор символов при помощи
функции c_str()
cout<<"Your mark is "<<studentMark.c_str()<<endl;
}
/////////////////////////////////////////////////////////////////////////////
В этом примере условие проверяется последовательно – вначале больше ли
studentGrade чем 90, если нет – проверяется следующее условие. Если ни одно из
условий не выполнено, выполняется блок else.
Если пропустить последний блок else – возможна ситуация когда ни одно из
условий не выполнится.
3.6.2 Оператор Switch. Пример меню с выбором действия
Оператор множественного выбора switch упрощает выполнение нескольких
различных действий в зависимости от возможных значений переменной или
выражения. Каждое действие выполняется в зависимости от значения некоторого
целого значения, которое может принимать переменная или выражение, проверяемое
в операторе switch.
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
8
// подключение библиотеки ввод-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// описание переменных
double a,b; // два вещественных числа для вычислений
int menu_number; // номер выбранного пункта меню
// ввод данных
cout<<"Enter two numbers: "; // запросить ввод
cin>>a>>b; // прочитать два введенных числа
// вывод меню
cout<<endl<<endl<<"Enter number of menu item: ";
cout<<"1. a+b"<<endl;
cout<<"2. a-b"<<endl;
cout<<"3. a*b"<<endl;
cout<<"4. a/b"<<endl;
// ввод номера пункта меню
cin>>menu_number;
// оператор выбора по номеру пункта меню
switch(menu_number)
{
// если menu_number==1
case 1:
{
cout<<"a+b="<<a+b<<endl;
// выход из оператора switch
break;
}
// если menu_number==2
case 2:
{
cout<<"a-b="<<a-b<<endl;
// выход из оператора switch
break;
}
// если menu_number==2
case 3:
{
cout<<"a*b="<<a*b<<endl;
// выход из оператора switch
break;
}
// если menu_number==2
case 4:
{
cout<<"a/b="<<a/b<<endl;
// выход из оператора switch
break;
}
// если ни один из предыдущих case не сработал
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
9
default :
{
cout<<"Wrong menu item"<<endl;
// оператор break не нужен, т.к. switch закончился
}
}
}
/////////////////////////////////////////////////////////////////////////////
Когда поток управления достигает оператора switch, программа оценивает
следующее за switch управляющее выражение (в данном случае menu _ number).
Оператор switch сравнивает значение управляющего выражения с каждой из меток
case. Оператор break заставляет программу перейти к первому оператору после
оператора switch.
Если в операторе switch не найдется ни одной метки case, совпадающей со
значением управляющего выражения, исполняется вариант default. В операторе switch,
не содержащем варианта default, программное управление в этом случае просто
перешло бы к первому оператору после switch.
Те же самые действия можно было бы описать и при помощи операторов if – else
if – else:
switch(menu_number)
{
case 1:
{
cout<<"a+b="<<a+b<<endl;
break;
}
case 2:
{
cout<<"a-b="<<a-b<<endl;
break;
}
case 3:
{
cout<<"a*b="<<a*b<<endl;
break;
}
case 4:
{
cout<<"a/b="<<a/b<<endl;
break;
}
default :
{
cout<<"Wrong menu
item"<<endl;
}
}
if(menu_number==1)
{
cout<<"a+b="<<a+b<<endl;
}
else if(menu_number==2)
{
cout<<"a-b="<<a-b<<endl;
}
else if(menu_number==3)
{
cout<<"a*b="<<a*b<<endl;
}
else if(menu_number==4)
{
cout<<"a/b="<<a/b<<endl;
}
else
{
cout<<"Wrong menu item"<<endl;
}
Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки
программирования»
10
Без операторов break всякий раз, когда в операторе switch обнаруживается
соответствие, будут исполняться операторы и всех последующих меток case, пока не
встретится оператор break или не будет достигнут конец switch.
switch(menu_number)
{
case 1:
{
cout<<"a+b="<<a+b<<endl;
}
case 2:
{
cout<<"a-b="<<a-b<<endl;
break;
}
case 3:
{
cout<<"a*b="<<a*b<<endl;
break;
}
case 4:
{
cout<<"a/b="<<a/b<<endl;
break;
}
default :
{
cout<<"Wrong menu
item"<<endl;
}
}
if(menu_number==1)
{
cout<<"a+b="<<a+b<<endl;
}
if(menu_number==1 || menu_number==2)
{
cout<<"a-b="<<a-b<<endl;
}
else if(menu_number==3)
{
cout<<"a*b="<<a*b<<endl;
}
else if(menu_number==4)
{
cout<<"a/b="<<a/b<<endl;
}
else
{
cout<<"Wrong menu item"<<endl;
}

More Related Content

What's hot

Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Dima Dzuba
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
Dima Dzuba
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
corehard_by
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
Dima Dzuba
 
2. java lecture syntax
2. java lecture syntax2. java lecture syntax
2. java lecture syntaxMERA_school
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
Dima Dzuba
 
Условный оператор
Условный операторУсловный оператор
Условный операторOlgaDask
 
Fiche Révision POO
Fiche Révision POOFiche Révision POO
Fiche Révision POO
Asmaa BENGUEDDACH
 
тестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентациятестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентация
Роман Растопшин
 
javascript_part1
javascript_part1javascript_part1
javascript_part1sovest
 
Конкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнерыКонкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнеры
corehard_by
 
Probabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignProbabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems Design
Iosif Itkin
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
OdessaFrontend
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
corehard_by
 

What's hot (17)

Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
2. java lecture syntax
2. java lecture syntax2. java lecture syntax
2. java lecture syntax
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Условный оператор
Условный операторУсловный оператор
Условный оператор
 
алгоритм
алгоритмалгоритм
алгоритм
 
Fiche Révision POO
Fiche Révision POOFiche Révision POO
Fiche Révision POO
 
тестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентациятестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентация
 
javascript_part1
javascript_part1javascript_part1
javascript_part1
 
Конкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнерыКонкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнеры
 
Probabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignProbabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems Design
 
C language. Introduction
C language. IntroductionC language. Introduction
C language. Introduction
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 

Similar to лек3 4

javascript
javascriptjavascript
javascriptsovest
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
Yandex
 
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajax
Yandex
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Базовые операторы Java
Базовые операторы JavaБазовые операторы Java
Базовые операторы Javametaform
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данных
Sergey Vasilyev
 
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
dfdkfjs
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
Sergey Schetinin
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Javametaform
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-Paste
Tatyanazaxarova
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
Alexander Byndyu
 

Similar to лек3 4 (20)

javascript
javascriptjavascript
javascript
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
 
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajax
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
course js day 2
course js day 2course js day 2
course js day 2
 
Lecture 1
Lecture 1Lecture 1
Lecture 1
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Базовые операторы Java
Базовые операторы JavaБазовые операторы Java
Базовые операторы Java
 
лек5 6
лек5 6лек5 6
лек5 6
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данных
 
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
 
лекция 2
лекция 2лекция 2
лекция 2
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-Paste
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 

More from Anastasia Snegina

птп по ппп 2013 2014
птп по ппп 2013 2014 птп по ппп 2013 2014
птп по ппп 2013 2014 Anastasia Snegina
 
прикл.прогр птп 13 14
прикл.прогр птп 13 14прикл.прогр птп 13 14
прикл.прогр птп 13 14Anastasia Snegina
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошинаAnastasia Snegina
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошинаAnastasia Snegina
 
рп по у пп практике в
рп по у пп практике врп по у пп практике в
рп по у пп практике вAnastasia Snegina
 
рп по пр практике в
рп по пр практике врп по пр практике в
рп по пр практике вAnastasia Snegina
 
рп по у сп практике в
рп по у сп практике врп по у сп практике в
рп по у сп практике вAnastasia Snegina
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике втAnastasia Snegina
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике втAnastasia Snegina
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике втAnastasia Snegina
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике втAnastasia Snegina
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике втAnastasia Snegina
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике втAnastasia Snegina
 

More from Anastasia Snegina (20)

птп по ппп 2013 2014
птп по ппп 2013 2014 птп по ппп 2013 2014
птп по ппп 2013 2014
 
прикл.прогр птп 13 14
прикл.прогр птп 13 14прикл.прогр птп 13 14
прикл.прогр птп 13 14
 
я.прогр птп
я.прогр птпя.прогр птп
я.прогр птп
 
пп кос вт
пп кос втпп кос вт
пп кос вт
 
пп кос в
пп кос впп кос в
пп кос в
 
пп кос в
пп кос впп кос в
пп кос в
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошина
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошина
 
пп кос вт
пп кос втпп кос вт
пп кос вт
 
рп по у пп практике в
рп по у пп практике врп по у пп практике в
рп по у пп практике в
 
рп по пр практике в
рп по пр практике врп по пр практике в
рп по пр практике в
 
рп по у сп практике в
рп по у сп практике врп по у сп практике в
рп по у сп практике в
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике вт
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике вт
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике вт
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике вт
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике вт
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике вт
 
лр18
лр18лр18
лр18
 
лр15
лр15лр15
лр15
 

лек3 4

  • 1. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 1 Лекция 3-4 (4 часа) 3.4. Логические выражения и оператор if 3.4.1 Условные конструкции. Пример условных конструкций Условные конструкции позволяют в зависимости от условия выполнять блок операторов, заключенный в фигурные скобки. if( условие ) { блок операторов; } Если условие удовлетворено, то "блок операторов" в теле if выполняется. Если условие не удовлетворяется, то "блок операторов"в теле if не выполняется. if( условие ) { блок операторов 1; } else { блок операторов 2; } Если условие выполняется, то выполняется "блок операторов 1". Если условие не удовлетворено, то выполняется "блок операторов 2". Условия в операторах if могут быть образованы с помощью операций равенства и отношений. В примере несколько операторов if сравнивают два вводимых пользователем числа. Если в каком-либо из этих операторов условие удовлетворяется (равно true) – выполняется связанный с данным if оператор вывода. Если внутри условия только один оператор, допустимо не использовать фигурные скобки. Если операторов 2 и более – использование фигурных скобок обязательно. // подключение библиотеки ввод-вывода #include <iostream> // подключение стандартного пространства имен для использования библиотек using namespace std; ///////////////////////////////////////////////////////////////////////////// // функция main начинает исполнение программы void main() { // объявление переменных int x,y;
  • 2. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 2 cout<<"Enter two integers to compare: "; // запросить ввод cin>>x>>y; // прочитать два введенных числа if(x == y) // число x равно числу y ? cout<<x<<" == "<<y<<endl; if(x != y) // число x не равно числу y? cout<<x<<" != "<<y<<endl; if(x < y) // число x меньше числа y ? cout<<x<<" < "<<y<<endl; if(x > y) // число x больше числа y ? cout<<x<<" > "<<y<<endl; if(x <= y) // число x меньше либо равно числу y ? cout<<x<<" <= "<<y<<endl; if(x >= y) // число x больше либо равно числу y ? cout<<x<<" >= "<<y<<endl; } ///////////////////////////////////////////////////////////////////////////// 3.4.2 Логические выражения. Логические операции И, ИЛИ, НЕ (пример 5) Выражение, находящееся внутри круглых скобок оператора if – логическое выражение. Логическое выражение может принимать два значения – true (истинно) или false (ложно). Рассмотрим еще один пример, который определяет, попала ли точка с координатами x, y в прямоугольник: // подключение библиотеки ввод-вывода #include <iostream> // подключение стандартного пространства имен для использования библиотек using namespace std; ///////////////////////////////////////////////////////////////////////////// // функция main начинает исполнение программы void main() { // объявление переменных double x,y; cout<<"Enter point coordinate (x,y): "; // запросить ввод cin>>x>>y; // прочитать два введенных числа // первый вариант решения // если точка находится внутри прямоугольника if(x<2 && x>-2 && y>-1 && y<1) cout<<"Point inside"<<endl; else
  • 3. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 3 cout<<"Point outside"<<endl; // второй вариант решения // если точка находится внутри прямоугольника bool x_inside=x<2 && x>-2; bool y_inside=y<1 && y>-1; if(x_inside && y_inside) cout<<"Point inside"<<endl; else cout<<"Point outside"<<endl; } ///////////////////////////////////////////////////////////////////////////// В C++ предусмотрены логические операции, которые используются для образования более сложных условий путем комбинирования простых. Логическими операциями являются: · && - логическое И · || - логическое ИЛИ · ! - логическое НЕ В данном примере, для определения попадания точки внутрь прямоугольника нам надо проверить условие, которое математически можно записать как -1 < x < 1. При записи этого выражения на С++ нам придется воспользоваться операцией && (логического И) для объединения двух условий:x<2&&x>-2. Это условие равно true в том и только том случае, когда оба простых условия равны true. Логические операции И, ИЛИ и НЕ имеют более высокий приоритет чем операции сравнения, поэтому скобки не являются необходимыми. Однако, для удобства чтения можно добавить круглые скобки: (x<2)&&(x>-2). Если бы нам надо было определить, что точка НЕ попадает внутрь прямоугольника, нам потребовалась бы использовать оператор ИЛИ (координата x либо меньше -2, либо больше 2): (x >2)||(x<-2) Либо можно было бы воспользоваться оператором НЕ (координата x НЕ лежит внутри прямоугольника): !( (x <2)&&(x >-2) ) Таблица показывает все четыре возможных комбинации значений false и true для операций И и ИЛИ с двумя выражениями.
  • 4. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 4 выражение 1 выражение 2 (выражение 1) && (выражение 2) (выражение 1) || (выражение 2) true true true true true false false true false true false true false false false false При написании выражений, содержащих много операций, справляйтесь с таблицей старшинства и ассоциативности (приложение ?). Если вы не уверены относительно порядка оценки в сложном выражении, используйте для задания нужного порядка круглые скобки, как в алгебраических выражениях. 3.4.3 Типичные ошибки if(x==1) // правильно! { y=x+3; z=y*5; } if(x=1) // неправильно! // выполняется всегда! { y=x+3; z=y*5; } ошибочное употребление операции присваивания = вместо операции равенства == if(x==1); // неправильно! // выполняется всегда! { y=x+3; z=y*5; } эквивалентно коду: if(x==1) { [пустой оператор]; } y=x+3; z=y*5; if(x==1) // неправильно! y=x+3; z=y*5; отсутствуют фигурные скобки, хотя в условии задумано больше одного оператора эквивалентно коду: if(x==1) { y=x+3; } z=y*5; 3.4.4 Вложенные условия Для вложенных условий, когда одно условие находится внутри другого очень важно соблюдать правильную последовательность операторов и правильно расставлять фигурные скобки. Например:
  • 5. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 5 if( х > 5 ) if( У > 5 ) cout<<"x and у are > 5"; else cout<<"x is <= 5"; Судя по отступам, в данном примере ожидается, что оператор else относится к условию x>5. На самом же деле оператор else всегда относится к ближайшему к нему оператору if. Данный пример будет выполняться так: if( х > 5 ) if( У > 5 ) cout<<"x and у are > 5"; else cout<<"x is <= 5"; Чтобы вложенный оператор if... else выполнялся так, как предполагалось сначала, мы должны написать его следующим образом: if( х > 5 ) { if( У > 5 ) cout<<"x and у are > 5"; } else cout<<"x is <= 5"; 3.5. Арифметический логический оператор Арифметический логический оператор позволяет присвоить переменной одно из двух значений в зависимости от выполнения условия: [переменная] = [условие] ? [значение1] : [значение2]; Например: int i=3; int j=(i>0) ? 1 : -1; // j=1 Те же самые действия можно было бы записать более длинным способом при помощи оператора if: if(i>0) { j=1; } else { j=-1; }
  • 6. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 6 3.6. Селективные конструкции 3.6.1 Селективные конструкции. Пример определения оценки в зависимости от количества баллов (пример 6) Селективные конструкции позволяют осуществлять выбор блока операторов, который будет выполняться в зависимости от условий. Селективную конструкцию можно реализовать при помощи операторов if – if else – else или при помощи оператора switch. if( условие 1 ) { блок операторов 1; } else if( условие 2 ) { блок операторов 2; } else { блок операторов 3; } switch ( переменная ) { case константа 1: { блок операторов 1; break; } case константа 2: { блок операторов 2; break; } default: { блок операторов 3; } } Рассмотрим пример определения оценки в зависимости от количества баллов // подключение библиотеки ввод-вывода
  • 7. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 7 #include <iostream> // подключение строковой библиотеки #include <iostream> // подключение стандартного пространства имен для использования библиотек using namespace std; ///////////////////////////////////////////////////////////////////////////// // функция main начинает исполнение программы void main() { // количество баллов int studentGrade; // оценка (строка символов) string studentMark; // ввод баллов cout<<"Please, input your grade: "; cin>>studentGrade; // определение оценки if ( studentGrade >= 90 ) // 90 и более баллов - оценка 5А studentMark="5А"; else if ( studentGrade >= 83 ) // 83-89 - оценка 4В studentMark="4А"; else if ( studentGrade >= 74 ) // 74-83 - оценка 4С studentMark="4С"; else if ( studentGrade >= 67 ) // 67-74 - оценка 3D studentMark="3D"; else if ( studentGrade >= 60 ) // 60-67 - оценка 3D studentMark="3E"; else // менее 60 - не сдано studentMark="FX"; // вывод оценки на экран // для вывода строки необходимо преобразовать ее в набор символов при помощи функции c_str() cout<<"Your mark is "<<studentMark.c_str()<<endl; } ///////////////////////////////////////////////////////////////////////////// В этом примере условие проверяется последовательно – вначале больше ли studentGrade чем 90, если нет – проверяется следующее условие. Если ни одно из условий не выполнено, выполняется блок else. Если пропустить последний блок else – возможна ситуация когда ни одно из условий не выполнится. 3.6.2 Оператор Switch. Пример меню с выбором действия Оператор множественного выбора switch упрощает выполнение нескольких различных действий в зависимости от возможных значений переменной или выражения. Каждое действие выполняется в зависимости от значения некоторого целого значения, которое может принимать переменная или выражение, проверяемое в операторе switch.
  • 8. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 8 // подключение библиотеки ввод-вывода #include <iostream> // подключение стандартного пространства имен для использования библиотек using namespace std; ///////////////////////////////////////////////////////////////////////////// // функция main начинает исполнение программы void main() { // описание переменных double a,b; // два вещественных числа для вычислений int menu_number; // номер выбранного пункта меню // ввод данных cout<<"Enter two numbers: "; // запросить ввод cin>>a>>b; // прочитать два введенных числа // вывод меню cout<<endl<<endl<<"Enter number of menu item: "; cout<<"1. a+b"<<endl; cout<<"2. a-b"<<endl; cout<<"3. a*b"<<endl; cout<<"4. a/b"<<endl; // ввод номера пункта меню cin>>menu_number; // оператор выбора по номеру пункта меню switch(menu_number) { // если menu_number==1 case 1: { cout<<"a+b="<<a+b<<endl; // выход из оператора switch break; } // если menu_number==2 case 2: { cout<<"a-b="<<a-b<<endl; // выход из оператора switch break; } // если menu_number==2 case 3: { cout<<"a*b="<<a*b<<endl; // выход из оператора switch break; } // если menu_number==2 case 4: { cout<<"a/b="<<a/b<<endl; // выход из оператора switch break; } // если ни один из предыдущих case не сработал
  • 9. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 9 default : { cout<<"Wrong menu item"<<endl; // оператор break не нужен, т.к. switch закончился } } } ///////////////////////////////////////////////////////////////////////////// Когда поток управления достигает оператора switch, программа оценивает следующее за switch управляющее выражение (в данном случае menu _ number). Оператор switch сравнивает значение управляющего выражения с каждой из меток case. Оператор break заставляет программу перейти к первому оператору после оператора switch. Если в операторе switch не найдется ни одной метки case, совпадающей со значением управляющего выражения, исполняется вариант default. В операторе switch, не содержащем варианта default, программное управление в этом случае просто перешло бы к первому оператору после switch. Те же самые действия можно было бы описать и при помощи операторов if – else if – else: switch(menu_number) { case 1: { cout<<"a+b="<<a+b<<endl; break; } case 2: { cout<<"a-b="<<a-b<<endl; break; } case 3: { cout<<"a*b="<<a*b<<endl; break; } case 4: { cout<<"a/b="<<a/b<<endl; break; } default : { cout<<"Wrong menu item"<<endl; } } if(menu_number==1) { cout<<"a+b="<<a+b<<endl; } else if(menu_number==2) { cout<<"a-b="<<a-b<<endl; } else if(menu_number==3) { cout<<"a*b="<<a*b<<endl; } else if(menu_number==4) { cout<<"a/b="<<a/b<<endl; } else { cout<<"Wrong menu item"<<endl; }
  • 10. Лекция №3-4 для дисциплин: «Прикладное программирование» и «Языки программирования» 10 Без операторов break всякий раз, когда в операторе switch обнаруживается соответствие, будут исполняться операторы и всех последующих меток case, пока не встретится оператор break или не будет достигнут конец switch. switch(menu_number) { case 1: { cout<<"a+b="<<a+b<<endl; } case 2: { cout<<"a-b="<<a-b<<endl; break; } case 3: { cout<<"a*b="<<a*b<<endl; break; } case 4: { cout<<"a/b="<<a/b<<endl; break; } default : { cout<<"Wrong menu item"<<endl; } } if(menu_number==1) { cout<<"a+b="<<a+b<<endl; } if(menu_number==1 || menu_number==2) { cout<<"a-b="<<a-b<<endl; } else if(menu_number==3) { cout<<"a*b="<<a*b<<endl; } else if(menu_number==4) { cout<<"a/b="<<a/b<<endl; } else { cout<<"Wrong menu item"<<endl; }