Алгоритмизация и программирование
История С++
Стандарт С++ и реализации С++
Стандарт С++ и реализации С++ действующие лица
Стандарт С++ и реализации С++ действующие лица
Стандарт С++ и реализации С++ действующие лица
Основные конструкции языка …
Базовые типы
Базовые типы (Fundamental types) [ISO/IEC 14882 // [basic.fundamental]]
Примеры. Числа
Базовые типы (Fundamental types) [ISO/IEC 14882 // [basic.fundamental]]
Примеры. Числа
Базовые типы (Fundamental types) [ISO/IEC 14882 // [basic.fundamental]]
Примеры. Числа
Примеры. Символы
Примеры. Символы
Примеры. Логический тип
Понятия стандарта [ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]
Понятия стандарта [ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]
Понятия стандарта [ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]
Понятия стандарта [ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]
Примеры. Неопределённое поведение
Примеры. Неопределённое поведение
Составные типы
Функции
Определение и объявление
Деклараторы
Деклараторы [ISO/IEC 14882 // [basic.def]] Всё, что вводит новые имена
Деклараторы [ISO/IEC 14882 // [basic.def]]
Деклараторы [ISO/IEC 14882 // [basic.def]] Всё, что вводит новые имена
Трансляция программы С++
Реализации стандарта С++
Трансляция программы С++ [ISO/IEC 14882 // [lex.phases]]
Понятия стандарта [ISO/IEC 14882 // [lex.separate] [basic.def.odr]]
Эффект выражения и результат выражения
Виртуальная лаборатория
Домашнее задание
3.87M
Категория: ПрограммированиеПрограммирование

АиП1

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

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

2. История С++

1979 - 1983: Си с классами
1983: Си++
1989: Си++ 2.0
1990: Начало стандартизации в рамках ANSI/ISO
1998: ISO/IEC 14882:1998
2003: ISO/IEC 14882:2003
...

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. Стандарт С++ и реализации С++ действующие лица

Комитет по
стандартизации
Разработчики
компиляторов
Разработчики
прикладного ПО
Стандарт C++
Реализации С++
Прикладное ПО
Документация к
компилятору
Документация к
ПО

5. Стандарт С++ и реализации С++ действующие лица

Стандарт С++ и реализации С++
Комитет по
стандартизации
действующие лица
Редакции стандарта
Стандарт C++98
Стандарт C++03
Стандарт C++11
Стандарт C++14
Стандарт C++17
Стандарт
Стандарт C++23 C++20
Разработчики
прикладного ПО
Разработчики компиляторов
Разработчики
LLVM
Разработчики
GCC
Разработчики
MSVC
ПО
Документация на компилятор
Документация MSVC
Документация GCC
Документация LLVM
Компиляторы
Компилятор MSVC
Компилятор GCC
Компилятор LLVM
Документация
к ПО

6. Стандарт С++ и реализации С++ действующие лица

Комитет по
стандартизации
Стандарт C++
Разработчики
компиляторов
Разработчики
прикладного ПО
Реализации С++
Прикладное ПО
Документация к
компилятору
Документация к
ПО

7. Основные конструкции языка …

8. Базовые типы

9. Базовые типы (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

10. Примеры. Числа

#include <iostream>
#include <iostream>
int main() {
int a = 10;
long b = 10l;
unsigned long c = 10ul;
long long d = 10ll;
int main() {
int a = 15;
int b = 0x15;
int c = 015;
int d = 0b11;
std::cout << a;
std::cout << "\n" << b;
std::cout << "\n" << c;
std::cout << "\n" << d;
std::cout << "\n";
}
//15
//21
//13
//3 (C++14)
std::cout << a;
std::cout << "\n" << b;
std::cout << "\n" << c;
std::cout << "\n" << d;
std::cout << "\n";
}

11. Базовые типы (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)

12. Примеры. Числа

#include <iostream>
#include <iostream>
int main() {
int a = 10;
long b = 10l;
unsigned long c = 10ul;
long long d = 10ll;
int main() {
using std::cout;
cout << sizeof(int);
cout << "\n" << sizeof(long);
cout << "\n" << sizeof(unsigned long);
cout << "\n" << sizeof(long long);
cout << "\n";
std::cout << sizeof(a);
std::cout << "\n" << sizeof(b);
std::cout << "\n" << sizeof(c);
std::cout << "\n" << sizeof(d);
std::cout << "\n";
}
}

13. Базовые типы (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)

14. Примеры. Числа

int main() {
float fl = 1.0f;
double db1 = 1.0;
long double ldb = 1.0l;
long double ldb2 = 123.0e-3l; //0.123
int main() {
float fl = 1.0f;
double dbl = 1.0;
long double ldbl = 1.0l;
long double ldbl2 = 123.0e-3l; //0.123
std::cout << fl;
std::cout << "\n" << dbl;
std::cout << "\n" << ldb;
std::cout << "\n" << ldb2;
std::cout << "\n";
using std::cout;
cout << sizeof(fl);
cout << "\n" << sizeof(dbl);
cout << "\n" << sizeof(ldbl);
cout << "\n" << sizeof(ldbl2);
}
cout << sizeof(float);
cout << "\n" << sizeof(double);
cout << "\n" << sizeof(long double);
cout << "\n";
}

15. Примеры. Символы

#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

16. Примеры. Символы

#include <iostream>
int main() {
for (char i = 'a'; i <= 'z'; ++i) {
std::cout << i << "\n";
}
for (char i = 'A'; i <= 'Z'; ++i) {
std::cout << i << "\n";
}
}
#include <iostream>
int main() {
for (char i = '!'; i <= '~'; ++i) {
std::cout << i << "\n";
}
}
ASCII table

17. Примеры. Логический тип

bool = {true, false}
#include <iostream>
int main() {
bool foo;
std::cout << ((foo == true) || (foo == false)) << "\n";
std::cout << (foo || !foo) << "\n";
}
//???
//???

18. Понятия стандарта [ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]

Implementation-defined behavior (Поведение, определяемое реализацией)
Поведение компилируемой программы, зависящее от реализации, требующее обязательного
документирования со стороны разработчиков компилятора
Пример: количество бит в char

19. Понятия стандарта [ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]

Implementation-defined behavior (Поведение, определяемое реализацией)
Поведение компилируемой программы, зависящее от реализации, требующее обязательного
документирования со стороны разработчиков компилятора
Пример: количество бит в char
Unspecified behavior (Неуточнённое поведение)
Поведение компилируемой программы, зависящее от реализации, но не подлежащее обязательному
документированию разработчиками компилятора. Как правило набор допустимых поведений
описывается в стандарте
Пример: порядок вычисления выражения, например
int x = a * b + c * d;
//a * b или c * d?

20. Понятия стандарта [ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]

Implementation-defined behavior (Поведение, определяемое реализацией)
Поведение компилируемой программы, зависящее от реализации, требующее обязательного
документирования со стороны разработчиков компилятора
Пример: количество бит в char
Unspecified behavior (Неуточнённое поведение)
Поведение компилируемой программы, зависящее от реализации, но не подлежащее обязательному
документированию разработчиками компилятора. Как правило набор допустимых поведений
описывается в стандарте
Пример: порядок вычисления выражения, например
int x = a * b + c * d;
//a * b или c * d?
Undefined behavior (Неопределённое поведение)
Поведение компилируемой программы, не описанное в стандарте и не подлежащее обязательному
документированию разработчиками компилятора. Поведение такой программы может быть
непредсказуемым и недетерминированным (например, меняться от запуска к запуску)
Пример: использование определённой,
но неинициализированной переменной

21. Понятия стандарта [ISO/IEC 14882 // [defns.undefined] [defns.unspecified] [defns.impl.defined]]

Implementation-defined behavior (Поведение, определяемое реализацией)
Поведение компилируемой программы, зависящее от реализации, требующее обязательного
документирования со стороны разработчиков компилятора
Пример: количество бит в char
Unspecified behavior (Неуточнённое поведение)
Поведение компилируемой программы, зависящее от реализации, но не подлежащее обязательному
документированию разработчиками компилятора. Как правило набор допустимых поведений
описывается в стандарте
Пример: порядок вычисления выражения, например
int x = a * b + c * d;
//a * b или c * d?
Undefined behavior (Неопределённое поведение)
Поведение компилируемой программы, не описанное в стандарте и не подлежащее обязательному
документированию разработчиками компилятора. Поведение такой программы может быть
непредсказуемым и недетерминированным (например, меняться от запуска к запуску)
Пример: использование определённой,
но неинициализированной переменной
НЕ ПОНЯТИЕ СТАНДАРТА
«Well-defined behavior» (Описанное стандартом поведение)
Явно описанное в стандарте поведение компилятора или компилируемой программы
Пример: порядок вычисления выражения (начиная со стандарта С++17)
Стандарт требует, чтобы выражения вычислялись слева-направо
Ещё пример: sizeof(char) == 1

22. Примеры. Неопределённое поведение

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

23. Примеры. Неопределённое поведение

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

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

25.

Составные типы. Перечисления
(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
};

26.

Составные типы. Перечисления 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:
//…
}
}

27.

Составные типы. Массивы
(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

28.

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

29.

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

30.

Составные типы. Многомерные массивы
(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]; // 22
int matrix2[][2] = {
{1, 2},
{3, 4},
{5, 6}
};
int array[] = {1, 2, 3};
//…
}
11
12
13
21
22
//Пропуск размера (только "первый")
23

31.

Составные типы. Многомерные массивы
(Compound types)
[ISO/IEC 14882 // [basic.compound] [dcl.array]]
#include <iostream>
int main() {
int matrix[][3] = {
{11, 12, 13},
{21, 22, 23}
};
for (size_t i = 0ull; i < 2ull; ++i) {
for (size_t j = 0ull; i < 3ull; ++j) {
std::cout << matrix[i][j] << "\n";
}
}
}
11
12
13
21
22
23

32.

Упражнение. Многомерные массивы
(Compound types)
[ISO/IEC 14882 // [basic.compound] [dcl.array]]
Упражнение:
1. Сделайте свой двумерный массив (не больше, чем 5 на 5)
2. Выведите массив разными способами:
1. Построчно
2. По столбцам
3. Зарегестрируйтесь на github
4. Загрузите ответ на https://gist.github.com/discover
5. Вставьте ответ в табличку
#include <iostream>
int main() {
int matrix[][3] = {
{11, 12, 13},
{21, 22, 23}
};
Построчно:
11_12_13
21_22_23
По столбцам:
11_21
12_22
13_23
//...
}
ВМЕСТО ПРОБЕЛОВ ДЛЯ НАГЛЯДНОСТИ
ИСПОЛЬЗУЕТСЯ СИМВОЛ «_»

33.

Составные типы. Структуры
#include <iostream>
struct point_t {
double x;
double y;
double z;
};
(Compound types)
[ISO/IEC 14882 // [basic.compound]]
[ISO/IEC 9899]
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";
}

34.

Составные типы. Структуры
#include <iostream>
struct point_t {
double x;
double y;
double z;
};
(Compound types)
[ISO/IEC 14882 // [basic.compound]]
[ISO/IEC 9899]
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[1].begin.y << "\n";
std::cout << lines[0].end.z << "\n";
std::cout << lines[1].end.x << "\n";
}

35. Функции

36. Определение и объявление

unsigned long long int factorial(unsigned int n);
unsigned long long int factorial(unsigned int n)
{
unsigned long long int result = 1ull;
while (n > 1) {
result *= n--;
}
return result;
}
int main() {
unsigned long long int val = factorial(10);
}
//объявление и сигнатура
//параметр типа unsigned int
//определение
//аргумент - 10
Параметр – часть сигнатуры функции
Аргумент – передаётся непосредственно при вызове
функции и подставляется на место параметра

37. Деклараторы

38. Деклараторы [ISO/IEC 14882 // [basic.def]] Всё, что вводит новые имена

int foo(int, int);
extern int x;
struct point_t;
//объявление foo
//объявление x
//объявление point_t
int foo(int, int) {
return 0;
}
//определение foo
namespace N { int x; }
//опредение N и x
struct point_t {
double x;
double y;
};
//определение point_t

39. Деклараторы [ISO/IEC 14882 // [basic.def]]

int foo[5] = {…};
const int foo[3] = {…};
//foo – массив из 5 int
//foo – массив из 3 константных int
char * foo;
const char * foo;
const char * const foo = …;
char * const foo = …;
//foo – указатель на char
//foo – указатель на константный char
//foo – константный указатель на константный char
//foo – константный указатель на char
char ** argv;
//argv – указатель на указатель на char
double foo();
double foo(int, double);
//foo – функция, возвращающая double
//foo – функция с параметрами типа int и double,
//возвращающая double
char *(*(**foo[][8])())[];
//???

40. Деклараторы [ISO/IEC 14882 // [basic.def]] Всё, что вводит новые имена

Declaration (Объявление) – объявления задают только имя символа и контекст его использования.
int foo(int, int);
extern int x;
struct point_t;
//объявление foo
//объявление x
//объявление point_t
Definition (Определение) – задаёт всё остальное, связанное с определяемым символом
int foo(int, int) {
return 0;
}
//определение foo
namespace N { int x; }
//опредение N и x
struct point_t {
double x;
double y;
};
//определение point_t

41. Трансляция программы С++

42. Реализации стандарта С++

Реализации языка С++:
GCC (The GNU Compiler Collection)
ICC (Intel C++ Compiler)
LLVM (Clang)
MSVC (Microsoft Visual C++)

Препроцессор
(CPP)
Компилятор
(С++)
Компановщик
(Link)

43. Трансляция программы С++ [ISO/IEC 14882 // [lex.phases]]

main.cpp
CPP
C++
main.o
libc
program
Link
libc++

44. Понятия стандарта [ISO/IEC 14882 // [lex.separate] [basic.def.odr]]

Translation unit (Единица трансляции)
Файл с исходным текстом программы (с реализациями, с «определениями») и всеми включенными в
этот файл (с помощью препроцессорной директивы #include) заголовочными файлами* (с
«объявлениями»)
One definition rule (ODR, Правило одного определения)
Ни одна единица трансляции не должна содержать более одного определения переменной, функции,
типа (enum, struct, class) или шаблона

45. Эффект выражения и результат выражения

46.

Эффект выражения и результат
выражения
int main() {
int i = 5;
int j = ++i;
int k = i++;
}

47.

Эффект выражения и результат
выражения
#include <iostream>
int main() {
int i = 5;
int j = ++i; //j == 6; i == 6;
using std::cout;
cout << j << " " << i;
int k = i++; //k == 6; i == 7;
cout << "\n" << k << " " << i;
cout << "\n";
}

48.

Эффект выражения и результат
выражения
#include <iostream>
int main() {
int i = 5;
int j = ++i; //j == 6; i == 6;
using std::cout;
cout << j << " " << i;
int k = i++; //k == 6; i == 7;
cout << "\n" << k << " " << i;
cout << "\n";
}
Результат преинкремента
новое значение
Результат постинкремента
предыдущее значение
Эффект преинкремента и постинкремента
одинаковый
увеличить на 1

49.

Эффект выражения и результат
выражения
#include <iostream>
int main() {
int a = 0, b = 0;
using std::cout;
cout << a;
cout << " " << b;
cout << "\n";
}

50.

Эффект выражения и результат
выражения
#include <iostream>
int main() {
int a = 0, b = 0;
using std::cin;
cin >> a >> b;
using std::cout;
cout << a;
cout << " " << b;
cout << "\n";
}

51.

Эффект выражения и результат
выражения
#include <iostream>
Эффект оператора >>
int main() {
int a = 0, b = 0;
Эффект оператора <<
using std::cin;
cin >> a >> b;
using std::cout;
cout << a;
cout << " " << b;
cout << "\n";
}
Ввод из потока
Вывод из потока
Результат оператора >>
Поток, из которого вводили
Результат оператора <<
Поток, в который выводили

52.

Эффект выражения и результат
выражения
#include <iostream>
Эффект оператора >>
int main() {
int a = 0, b = 0;
Эффект оператора <<
using std::cin;
cin >> a >> b;
using std::cout;
cout << a;
cout << " " << b;
cout << "\n";
Ввод из потока
Вывод из потока
Результат оператора >>
Поток, из которого вводили
Результат оператора <<
Поток, в который выводили
cin >> a >> b >> c;
}
((cin >> a) >> b) >> c;
cin >> a;
(cin >> b) >> c;
cin >> a;
cin >> b;
cin >> c;

53. Виртуальная лаборатория

54.

Виртуальная лаборатория
Пример задания:
1. Вводятся два целых числа
2. Вывести сумму двух чисел
int main() {
}

55.

Виртуальная лаборатория
Пример задания:
1. Вводятся два целых числа
2. Вывести сумму двух чисел
#include <iostream>
int main() {
int a = 0, b = 0;
std::cout << a + b << "\n";
}

56.

Виртуальная лаборатория
Пример задания:
1. Вводятся два целых числа
2. Вывести сумму двух чисел
#include <iostream>
int main() {
int a = 0, b = 0;
std::cin >> a >> b;
std::cout << a + b << "\n";
}

57.

Виртуальная лаборатория
Пример задания:
1. Вводятся два целых числа
2. Вывести сумму двух чисел
#include <iostream>
int main() {
int a = 0, b = 0;
std::cin >> a >> b;
std::cout << a + b << "\n";
}
Основные моменты:
1. Все переменные базовых типов всегда должны
иметь начальное значение
2. Вывод в любой поток в конце программы всегда
должен завершаться символом конца строки

58.

Виртуальная лаборатория
Пример задания:
1. Вводятся два целых числа
2. Вывести сумму двух чисел
#include <iostream>
int main() {
int a = 0, b = 0;
std::cin >> a >> b;
std::cout << a + b << "\n";
}
Основные моменты:
1. Все переменные базовых типов всегда должны
иметь начальное значение
2. Вывод в любой поток в конце программы всегда
должен завершаться символом конца строки
3. Поток ввода: std::cin
4. Потоки вывода:
1. std::cout – вывод программы
2. std::clog – вывод промежуточных результатов
3. std::cerr – вывод ошибок

59.

Виртуальная лаборатория
Пример задания:
1. Вводятся два целых числа
2. Вывести сумму двух чисел
#include <iostream>
int main() {
int a = 0, b = 0;
std::cin >> a >> b;
if (!std::cin) {
std::cerr << "Not a number\n";
return 1;
}
std::cout << a + b << "\n";
}
Основные моменты:
1. Все переменные базовых типов всегда должны
иметь начальное значение
2. Вывод в любой поток в конце программы всегда
должен завершаться символом конца строки
3. Поток ввода: std::cin
4. Потоки вывода:
1. std::cout – вывод программы
2. std::clog – вывод промежуточных результатов
3. std::cerr – вывод ошибок
5. В простейшем* случае «проверяем поток» на успех
сразу после выполнения ВСЕГО ввода
*Сложные и типовые случаи
обсудим позже

60.

Виртуальная лаборатория
Пример задания:
1. Вводятся два целых числа
2. Вывести сумму двух чисел
#include <iostream>
int main() {
int a = 0, b = 0;
std::cin >> a >> b;
if (!std::cin) {
std::cerr << "Not a number\n";
return 1;
}
std::cout << a + b << "\n";
}
Основные моменты:
1. Все переменные базовых типов всегда должны
иметь начальное значение
2. Вывод в любой поток в конце программы всегда
должен завершаться символом конца строки
3. Поток ввода: std::cin
4. Потоки вывода:
1. std::cout – вывод программы
2. std::clog – вывод промежуточных результатов
3. std::cerr – вывод ошибок
5. В простейшем* случае «проверяем поток» на успех
сразу после выполнения ВСЕГО ввода
*Сложные и типовые случаи
обсудим позже

61. Домашнее задание

62.

Упражнение. Многомерные массивы
(Compound types)
[ISO/IEC 14882 // [basic.compound] [dcl.array]]
Упражнение:
1. Сделайте свой двумерный массив (не больше, чем 5 на 5)
2. Выведите массив разными способами:
1. Построчно
2. По столбцам
3. Зарегестрируйтесь на github
4. Загрузите ответ на https://gist.github.com/discover
5. Вставьте ответ в табличку
#include <iostream>
int main() {
int matrix[][3] = {
{11, 12, 13},
{21, 22, 23}
};
Построчно:
11_12_13
21_22_23
По столбцам:
11_21
12_22
13_23
//...
}
ВМЕСТО ПРОБЕЛОВ ДЛЯ НАГЛЯДНОСТИ
ИСПОЛЬЗУЕТСЯ СИМВОЛ «_»

63.

GitHub
1.Зарегистрироваться
https://github.com/
2.Вписать имя пользователя в таблицу
https://docs.google.com/spreadsheets/d/1AAvoh556JGdQY_jhIkkk0qgGEUuH
sEP6jZEZhdP2kqA/edit?usp=sharing

64.

GitHub
1.1 Зайти на https://github.com/

65.

GitHub
1.2. Зарегистрироваться (нужна почта)

66.

GitHub
1.3. Войти

67.

GitHub
1.4. Войти в свой профиль

68.

GitHub
2. Вписать имя пользователя в таблицу
https://docs.google.com/spreadsheets/d/1AAvoh556JGdQY_jhIkkk0qgGEUuH
sEP6jZEZhdP2kqA/edit?usp=sharing
English     Русский Правила