401.91K
Категория: ПрограммированиеПрограммирование

Логические операции. Математические функции. Преобразование типов. Символьные данные

1.

Логические операции.
Математические функции.
Преобразование типов.
Символьные данные

2.

Логические операции
условные;
побитовые.
Результат условной логической операции:
1, если выражение истинно;
0, если выражение ложно.

3.

Основные условные логические операции:
&& — И (бинарная) — требуется одновременное выполнение
всех операций отношения;
|| — ИЛИ (бинарная) — требуется выполнение хотя бы одной
операции отношения;
! — НЕ (унарная) — требуется невыполнение операции
отношения.

4.

Таблица истинности
#include <iostream>
using namespace std;
int main()
{
bool a1 = true, a2 = false, a3 = true, a4 = false;
cout << "Tablica istinnosti log operacii &&" << endl;
cout << "true && false: " << (a1 && a2) << endl //
логическое И
<< "false && true: " << (a2 && a1) << endl
<< "true && true: " << (a1 && a3) << endl
<< "false && false: " << (a2 && a4) << endl;
cout << "Tablica istinnosti log operacii ||" << endl;
cout << "true || false: " << (a1 || a2) << endl //
логическое ИЛИ
<< "false || true: " << (a2 || a1) << endl
<< "true || true: " << (a1 || a3) << endl
<< "false || false: " << (a2 || a4) << endl;
cout << "Tablica istinnosti log operacii !" << endl;
cout << "!true: " << (!a1) << endl // логическое НЕ
<< "!false: " << (!a2) << endl;
return 0;
}

5.

Дана точка A с координатами (x, y). Составить программу, которая
печатает true, если точка принадлежит заштрихованной области, и
false в противном случае.
#include <iostream>
using namespace std;
int main() {
double x, y;
cout << "x = "; cin >> x;
cout << "y = "; cin >> y;
cout << boolalpha
<< (x * x + y * y < 25 &&
(x < -3 || x > 3))
<< endl;
return 0;
}

6.

Основные побитовые логические операции:
& конъюнкция (логическое И) — бинарная операция, результат
которой равен 1 только когда оба операнда единичны (в общем случае
— когда все операнды единичны);
| дизъюнкция (логическое ИЛИ) — бинарная операция, результат
которой равен 1 когда хотя бы один из операндов равен 1;
~ инверсия (логическое НЕ) — унарная операция, результат
которой равен 0 если операнд единичный, и равен 1, если операнд
нулевой;
^ исключающее ИЛИ — бинарная операция, результат которой
равен 1, если только один из двух операндов равен 1 (в общем случае
если во входном наборе операндов нечетное число единиц).

7.

Предположим, что размер типа данных
составляет 4 бита:
4 = 0100
~ 4 = 1011 (двоичное) = 11 (десятичное)
Предположим, что размер типа данных
составляет 8 бит:
4 = 0000 0100
~ 4 = 1111 1011 (двоичное) = 251 (десятичное)

8.

5 | 6 обрабатывается следующим образом:
0 1 0 1 // 5
0 1 1 0 // 6
-------------0 1 1 1 // 7
Результат:
0111 (двоичное) = 7 (десятичное)

9.

5 & 6:
0 1 0 1 // 5
0 1 1 0 // 6
-------------0 1 0 0 // 4
6 ^ 3:
0 1 1 0 // 6
0 0 1 1 // 3
-------------0 1 0 1 // 5

10.

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a = 5 | 2;
int b = 6 & 2;
int c = 5 ^ 2;
int d = ~9;
cout << "a: " << a << endl
<< "b: " << b << endl
<< "c: " << c << endl
<< "d: " << d << endl;
return 0;
}

11.

Сдвиговые операции
>> — сдвиг вправо;
<< — сдвиг влево.
объект = выражение сдвиг
КоличествоРазрядов;
Арифметический сдвиг целого
числа вправо >> на 1 разряд
соответствует делению числа на
2.
Арифметический сдвиг целого
числа влево << на 1 разряд
соответствует умножению числа
на 2.

12.

В следующих примерах мы будем работать с 4-битными двоичными значениями. Рассмотрим
число 3, которое в двоичной системе равно 0011:
3 = 0011
3 << 1 = 0110 = 6
3 << 2 = 1100 = 12
3 << 3 = 1000 = 8
В последнем третьем случае один бит перемещается за пределы самого литерала! Биты,
сдвинутые за пределы двоичного числа, теряются навсегда.
Оператор побитового сдвига вправо (>>) сдвигает биты вправо. Например:
12 = 1100
12 >> 1 = 0110 = 6
12 >> 2 = 0011 = 3
12 >> 3 = 0001 = 1
В третьем случае мы снова переместили бит за пределы литерала. Он также потерялся
навсегда.

13.

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a, b, c, d, e, f;
a = 15;
b = -5;
// сдвиг влево - умножение
c = a << 1;
d = b << 2;
// сдвиг вправо - деление
e = a >> 3;
f = b >> 1;
cout << "c: " << c << endl
<< "d: " << d << endl
<< "e: " << e << endl
<< "f: " << f << endl;
return 0;
}

14.

Например, вместо х = х << 1; мы можем написать х <<= 1

15.

Задание №1
Какой результат 0110 >> 2 в двоичной системе счисления?
Задание №2
Какой результат 5 | 12 в десятичной системе счисления?
Задание №3
Какой результат 5 & 12 в десятичной системе счисления?
Задание №4
Какой результат 5 ^ 12 в десятичной системе счисления?
Задание №5: 1 | 4 | 6; 1 & 3 & 7; 1 ^ 3 ^ 7

16.

Математические функции
В языке C++ нужно указывать название заголовочного файла так:
#include <cmath>
Функция от одного аргумента вызывается, например, так: sin(x). Вместо
числа x может быть любое число, переменная или выражение. Функция
возвращает значение, которое можно вывести на экран, присвоить
другой переменной или использовать в выражении:y = sin(x);
Также в файле cmath есть набор полезных числовых констант, например,
константа M_PI хранит значение числа π.
В компиляторе Visual C++ для использования этих констант необходимо
объявить директиву препроцессора _USE_MATH_DEFINES перед
подключения заголовочного файла cmath.
#define _USE_MATH_DEFINES
#include <cmath>

17.

Символ
Expression
Значение
M_E
e
2.71828182845904523536
M_LOG2E
log2(e)
1.44269504088896340736
M_LOG10E
log10(e)
0.434294481903251827651
M_LN2
ln(2)
0.693147180559945309417
M_LN10
ln(10)
2.30258509299404568402
M_PI
pi
3.14159265358979323846
M_PI_2
pi/2
1.57079632679489661923
M_PI_4
pi/4
0.785398163397448309616
M_1_PI
1/pi
0.318309886183790671538
M_2_PI
2/pi
0.636619772367581343076
M_2_SQRTPI
2/sqrt(pi)
1.12837916709551257390
M_SQRT2
sqrt(2)
1.41421356237309504880
M_SQRT1_2
1/sqrt(2)
0.707106781186547524401

18.

Функция
Описание
Округление
round
Округляет число по правилам арифметики, то есть round(1.5) == 2, round(-1.5) == -2
floor
Округляет число вниз (“пол”), при этом floor(1.5) == 1, floor(-1.5) == -2
ceil
Округляет число вверх (“потолок”), при этом ceil(1.5) == 2, ceil(-1.5) == -1
trunc
fabs
Округление в сторону нуля (отбрасывание дробной части), при этом trunc(1.5) == 1, trunc(-1.5) == -1
Модуль (абсолютная величина)
Корни, степени, логарифмы
sqrt
cbrt
pow
exp
log
log10
Квадратный корень. Использование: sqrt(x)
Кубический корень. Использование: cbrt(x)
Возведение в степень, возвращает ab. Использование: pow(a,b)
Экспонента, возвращает ex. Использование: exp(x)
Натуральный логарифм
Десятичный логарифм
Тригонометрия
sin
cos
Синус угла, задаваемого в радианах
Косинус угла, задаваемого в радианах

19.

20.

21.

Преобразование типов
С++ позволяет нам преобразовывать данные одного типа в данные другого
– это известно как преобразование типов. В C++ существует два типа
преобразования:
• Неявное преобразование.
• Явное преобразование (также известное, как приведение типов).

22.

Неявное приведение типа при
арифметических операциях
типы
операндов
float / float
float / int
int / float
int / int
тип
результата
float
float
float
int
Заметим, что в последнем
случае (и только в нем)
осуществляется целочисленное
деление с отбрасыванием
остатка.

23.

Явное преобразование
Есть три основных способа использования явного преобразования в C++:
1. Приведение типов в C-style (также известное, как обозначение
приведения).
2. Обозначение функций (также известное, как приведение типов в
старом стиле С++)
3. Операторы преобразования типов.

24.

C-style
Синтаксис этого стиля: (data_type)expression;
Например:
// initializing int variable
int num_int = 26;
// declaring double variable
double num_double;
// converting from int to double
num_double = (double)num_int;

25.

Использование функционального стиля
Синтаксис: data_type(expression);
Например:
// initializing int variable
int num_int = 26;
// declaring double variable
double num_double;
// converting from int to
double num_double = double(num_int);

26.

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
// initializing a double variable
double num_double = 3.56;
cout << "num_double = " << num_double << endl;
// C-style conversion from double to int
int num_int1 = (int)num_double;
cout << "num_int1 = " << num_int1 << endl;
// function-style conversion from double to int
int num_int2 = int(num_double);
cout << "num_int2 = " << num_int2 << endl;
return 0;
}

27.

Символьный тип данных char
Для хранения символов был разработан тип данных char.
Символом может быть одна буква, цифра, знак или пробел.
Тип данных char является целочисленным типом, что означает, что
базовое значение хранится как целое число. Подобно тому, как
логическое значение 0 интерпретируется как false, а ненулевое
значение интерпретируется как true, целое число, хранимое
переменной char, интерпретируется как символ ASCII.

28.

Размер, диапазон и знак типа сhar
В языке С++ для переменных типа char всегда выделяется 1 байт. По
умолчанию, char может быть как signed, так и unsigned (хотя обычно signed).
Если вы используете char для хранения ASCII-символов, то вам не нужно
указывать знак переменной (поскольку signed и unsigned могут содержать
значения от 0 до 127).
Но если вы используете тип char для хранения небольших целых чисел, то
тогда следует уточнить знак. Переменная типа char signed может хранить
числа от -128 до 127. Переменная типа char unsigned имеет диапазон от 0
до 255.

29.

Инициализация переменных char
• Вы можете инициализировать переменные типа char, используя
символьные литералы:
// инициализировать кодовым обозначением для 'a' (хранится как целое
число 97) (предпочтительно)
char ch2 {'a’};
• Вы также можете инициализировать переменные типа char целыми
числами, но этого, если возможно, следует избегать.
// инициализировать целым числом 97 ('a') (не рекомендуется)
char ch1 {97};

30.

Будьте осторожны, чтобы не перепутать символы чисел с целыми
числами. Следующие две инициализации не эквивалентны:
char ch {5}; // инициализируем целым числом 5 (сохраняется как
целое число 5)
char ch {'5'}; // инициализируем кодовым обозначением для '5'
(хранится как целое число 53)
Символы чисел предназначены для использования, когда мы хотим
представить числа в виде текста, а не в виде чисел и применения к
ним математических операций.

31.

Вывод символов
При выводе переменных типа char, объект cout выводит символы вместо цифр:
#include <iostream>
int main()
{
char ch(97); // несмотря на то, что мы инициализируем переменную ch целым числом
std::cout << ch << std::endl; // cout выводит символ
return 0;
}
Результат: a
Также вы можете выводить литералы типа char напрямую:
std::cout << 'b' << std::endl;
Результат: b

32.

Оператор static_cast
Лучшим способом является конвертация переменной из одного
типа данных в другой с помощью оператора static_cast.
Синтаксис static_cast выглядит следующим образом:
static_cast<новый_тип_данных>(выражение)
Оператор static_cast принимает значение из (выражения) в
качестве входных данных и конвертирует его в указанный вами
<новый_тип_данных>.

33.

Пример использования оператора static_cast
для преобразования типа char в тип int:
#include <iostream>
using namespace std;
int main()
{
char ch(97);
cout << ch << endl;
cout << static_cast<int>(ch) << endl;
cout << ch << endl;
return 0;
}

34.

Ввод символов
#include <iostream>
using namespace std;
int main()
{
char ch;
cout << "Input a keyboard character: ";
cin >> ch;
cout << ch << " has ASCII code " << static_cast<int>(ch) << endl;
return 0;
}

35.

Обратите внимание, что std::cin позволяет
вводить несколько символов. Однако
переменная ch может содержать только 1
символ.
Следовательно, в переменную ch извлекается
только первый входной символ. Остальная часть
пользовательского ввода остается во входном
буфере, который использует std::cin, и может
быть извлечена с помощью последующих
вызовов std::cin.

36.

1.
Задания
2. Дано вещественное число а. Пользуясь только
операцией умножения, получить:
a21 за шесть операций;
3. Даны два целых числа a и b. Если a делится на b
или b делится на a, то вывести 1, иначе — любое
другое число. Условные операторы и операторы
цикла не использовать;
4. Дано четырехзначное число (к примеру 5678),
вывести на экран в обратном порядке цифры из
которых это число состоит.
English     Русский Правила