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

Алгоритмизация и программирование

1.

Алгоритмизация и
программирование
Занятие #4
Касилов Василий Александрович
volgarenok@gmail.com
Telegram: Volgarenok

2.

Стандартизация С++

3.

Стандарт С++ и реализации С++
This International Standard specifies requirements for implementations of the C++
programming language
[ISO/IEC 14882:2003 // [intro.scope]]
ISO – International Organization for Standardization
IEC - International Electrotechnical Commission
Публикации стандарта ISO/IEC 14882: 1998, 2003, 2011, 2014, 2017, …
Реализации языка С++ (в виде конкретных компиляторов):
GCC (The GNU Compiler Collection)
ICC (Intel C++ Compiler)
LLVM (Clang)
MSVC (Microsoft Visual C++)

The standard is not intended to teach how to use C++. It is
<…> a technical document intended primarily for people
writing C++ compilers and standard library implementations.
[isocpp.org // Standard C++ Foundation]

4.

Базовые типы

5.

Базовые типы
(Fundamental types)
[ISO/IEC 14882 // [basic.fundamental]]
Целые числа
Беззнаковые:
Знаковые:
signed char
short int
int
long int
(C++11) long long int
Суффиксы:
unsigned char
unsigned short int
unsigned int
unsigned long int
unsigned long long int
l/L/ul/UL
ll/LL/ull/ULL
sizeof(signed char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int) <= sizeof(long long)
Вещественные числа
Беззнаковые:
float
double
long double
Суффиксы:
f/F
l/L
sizeof(float) <= sizeof(double) <= sizeof(long double)

6.

Примеры. Числа
int main() {
long l1 = 10l;
long long l2 = 10ll;
int
int
int
int
//…
}
a
b
c
d
=
=
=
=
15;
0x15;
015;
0b11;
//15
//21
//13
//3 (C++14)
int main() {
float fl1 = 1.0f;
double db1 = 1.0;
long double ldb = 1.0l;
long double ldb2 = 123.0e-3l; //0.123
//…
}

7.

#include <iostream>
int main() {
char c1 = '0';
//'0'
char c2 = 48;
//'0'
char c3 = 0x30;
//'0'
std::cout << c1 << "\n";
std::cout << "0\n";
std::cout << "\x30\n";
}
#include <iostream>
int main() {
std::cout << "\n";
std::cout << "\t";
std::cout << "\v";
std::cout << "\b";
std::cout << "\r";
std::cout << "\f";
std::cout << "\a";
std::cout << "\\";
std::cout << "\?";
std::cout << "\'";
std::cout << "\077";
std::cout << "\x77";
}
Примеры. Символы
//перевод строки
//табуляция, "таб"
//вертикальная таб.
//забой, "бэкспейс"
//возврат каретки
//конец страницы
//звуковой сигнал
//символ "\"
//символ "?"
//апостроф
//символ с
//8-ным кодом ("?")
//символ с
//16-ным кодом ("w")
ASCII table

8.

Примеры. Булевы значения
bool = {true, false}
#include <iostream>
int main() {
bool is_alpha = true;
bool is_digit = false;
bool foo;
std::cout << ((foo == true) || (foo == false)) << "\n";
std::cout << (foo || !foo) << "\n";
}
//???
//???

9.

Понятия стандарта
[ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]
Implementation-defined behavior (Поведение, определяемое реализацией)
Поведение компилируемой программы, зависящее от реализации, требующее обязательного
документирования со стороны разработчиков компилятора
Пример: количество бит в char (хотя sizeof(char) == 1 и это поведение, определённое
стандартом)
Unspecified behavior (Неуточнённое поведение)
Поведение компилируемой программы, зависящее от реализации, но не подлежащее обязательному
документированию разработчиками компилятора. Как правило набор допустимых поведений
описывается в стандарте
Пример: порядок вычисления выражения, например: a * e + b * f
//сначала a * e или b * f?
Undefined behavior (Неопределённое поведение)
Поведение компилируемой программы, не описанное в стандарте и не подлежащее обязательному
документированию разработчиками компилятора. Поведение такой программы может быть
непредсказуемым и недетерминированным (например, меняться от запуска к запуску)
Пример: использование объявленной, но неопределённой переменной

10.

Примеры. Неопределённое поведение
bool = {true, false}
#include <iostream>
int main() {
bool foo; //объявленная, но неопределённая переменная
std::cout << ((foo == true) || (foo == false)) << "\n";
std::cout << (foo || !foo) << "\n";
}
//Undefined behavior
//Undefined behavior

11.

Составные типы

12.

Составные типы. Перечисления
(Compound types)
[ISO/IEC 14882 // [basic.compound] [dcl.enum]]
enum color_t {
COLOR_RED,
COLOR_GREEN,
COLOR_BLUE
};
//0
//1
//2
enum color_t {
COLOR_RED = 67, //67
COLOR_GREEN,
//68
COLOR_BLUE
//69
};
int main() {
color_t color = COLOR_RED;
//…
switch (color) {
case COLOR_RED:
//…
case COLOR_GREEN:
//…
case COLOR_BLUE:
//…
}
}
enum color_t {
COLOR_RED = 0x0000FF,
COLOR_GREEN = 0x00FF00,
COLOR_BLUE = 0xFF0000
};

13.

Составные типы. Перечисления C++11
(Compound types)
[ISO/IEC 14882 // [basic.compound] [dcl.enum]]
enum class color_t: int {
RED = 0x0000FF,
GREEN = 0x00FF00,
BLUE = 0xFF0000
};
int main() {
color_t color = color_t::RED;
//…
switch (color) {
case color_t::RED:
//…
case color_t::GREEN:
//…
case color_t::BLUE:
//…
}
}

14.

Составные типы. Массивы
(Compound types)
[ISO/IEC 14882 // [basic.compound] [dcl.array]]
#include <iostream>
int main() {
int arr[5] = {1, 2, 3};
std::cout << arr[0]; // 1
std::cout << arr[2]; // 3
std::cout << arr[5]; // Undefined behavior
}
1
2
3
0
0

15.

Составные типы. Многомерные массивы
(Compound types)
[ISO/IEC 14882 // [basic.compound] [dcl.array]]
#include <iostream>
int main() {
int matrix[2][3] = {
{11, 12, 13},
{21, 22, 23}
};
std::cout << matrix[1][1];
int matrix2[][2] = {
{1, 2},
{3, 4},
{5, 6}
};
int array[] = {1, 2, 3};
//…
}
11
12
13
// 22
//Пропуск размера (только "первый")
21
22
23

16.

Составные типы. Структуры
(Compound types)
[ISO/IEC 14882 // [basic.compound]]
[ISO/IEC 9899]
struct point_t {
double x;
double y;
double z;
};
struct line_t {
point_t begin;
point_t end;
};
x
y
begin
z
end
int main() {
point_t p1 = {1.5, 2.7, 3.8};
line_t line = {p1, {2.0, 3.0, 4.0}};
line_t lines[] = {line, {p1, {-1.0, -1.0, -1.0}}};
std::cout << lines[0].begin.x << "\n";
std::cout << lines[0].begin.y << "\n";
std::cout << lines[0].begin.z << "\n";
}

17.

Указатели и адресная арифметика
(в следующий раз)

18.

Домашнее задание
Задана функция вида:
f(x, y) = σ
English     Русский Правила