Похожие презентации:
АиП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.cppCPP
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.
GitHub1.Зарегистрироваться
https://github.com/
2.Вписать имя пользователя в таблицу
https://docs.google.com/spreadsheets/d/1AAvoh556JGdQY_jhIkkk0qgGEUuH
sEP6jZEZhdP2kqA/edit?usp=sharing
64.
GitHub1.1 Зайти на https://github.com/
65.
GitHub1.2. Зарегистрироваться (нужна почта)
66.
GitHub1.3. Войти
67.
GitHub1.4. Войти в свой профиль
68.
GitHub2. Вписать имя пользователя в таблицу
https://docs.google.com/spreadsheets/d/1AAvoh556JGdQY_jhIkkk0qgGEUuH
sEP6jZEZhdP2kqA/edit?usp=sharing
Программирование