initial commit
This commit is contained in:
50
C++/.vscode/settings.json
vendored
Normal file
50
C++/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,50 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"algorithm": "cpp",
|
||||
"iostream": "cpp",
|
||||
"numeric": "cpp",
|
||||
"array": "cpp",
|
||||
"atomic": "cpp",
|
||||
"bit": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"cctype": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"compare": "cpp",
|
||||
"concepts": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstddef": "cpp",
|
||||
"cstdint": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"deque": "cpp",
|
||||
"string": "cpp",
|
||||
"unordered_map": "cpp",
|
||||
"vector": "cpp",
|
||||
"exception": "cpp",
|
||||
"functional": "cpp",
|
||||
"iterator": "cpp",
|
||||
"memory": "cpp",
|
||||
"memory_resource": "cpp",
|
||||
"random": "cpp",
|
||||
"string_view": "cpp",
|
||||
"system_error": "cpp",
|
||||
"tuple": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"utility": "cpp",
|
||||
"initializer_list": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"new": "cpp",
|
||||
"numbers": "cpp",
|
||||
"ostream": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"typeinfo": "cpp",
|
||||
"ctime": "cpp",
|
||||
"cstring": "cpp"
|
||||
}
|
||||
}
|
547
C++/C++.md
Normal file
547
C++/C++.md
Normal file
@ -0,0 +1,547 @@
|
||||
# УДАЧИ НАМ
|
||||
|
||||
## Statement
|
||||
|
||||
> Наименьшая независимая еденица в языке C++
|
||||
|
||||
### Основные
|
||||
|
||||
* declaration:
|
||||
|
||||
```C++
|
||||
int i;
|
||||
```
|
||||
|
||||
* assigment :
|
||||
|
||||
```C++
|
||||
i = 5;
|
||||
```
|
||||
|
||||
* Output (хоть Коля и не согласен, что это основной)
|
||||
|
||||
```C++
|
||||
std::cout << i;
|
||||
```
|
||||
|
||||
declaration и assigment можно вместе
|
||||
|
||||
```C++
|
||||
int i = 5;
|
||||
```
|
||||
|
||||
## Expression
|
||||
|
||||
> Любое выражение: число, строка, вызов функции, мат(на английском). выражения
|
||||
|
||||
## Функции
|
||||
|
||||
> Последовательность statement'ов. Исполнение начинается с функции main()
|
||||
|
||||
## Библиотеки
|
||||
|
||||
> Набор скомпилированного кода, для использования в других программах
|
||||
|
||||
### Примеры библиотек
|
||||
|
||||
* iostream - для ввода / вывода
|
||||
|
||||
## Коментарии
|
||||
|
||||
* Однострочные
|
||||
|
||||
```C++
|
||||
// Коментарий
|
||||
```
|
||||
|
||||
* Многострочные
|
||||
|
||||
```C++
|
||||
/* Длинный
|
||||
Коментарий */
|
||||
```
|
||||
|
||||
## Пример простой программы
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
std::cout << "Hello, world!\n";
|
||||
}
|
||||
```
|
||||
|
||||
## Переменные
|
||||
|
||||
> В C++ есть переменные, они жрут оперативку
|
||||
|
||||
* Копирующая инициализация
|
||||
|
||||
```C++
|
||||
int val = 5;
|
||||
```
|
||||
|
||||
* Прямая инициализация
|
||||
|
||||
```C++
|
||||
int val(5);
|
||||
```
|
||||
|
||||
### Неинициализированные переменные
|
||||
|
||||
> Неинициализированные переменные могут иметь в себе мусор, что может привести к ошибкам
|
||||
|
||||
### Инициализация и объявление нескольких переменных
|
||||
|
||||
```C++
|
||||
int a, b;
|
||||
```
|
||||
|
||||
```C++
|
||||
int a = 5, b = 6;
|
||||
```
|
||||
|
||||
## Типы данных
|
||||
|
||||
* void - ничего
|
||||
|
||||
### Числа
|
||||
|
||||
* short - число 16 бит
|
||||
* int - число 16 или 32 бита
|
||||
* long - число 32 бита
|
||||
* long long - число 64 бита
|
||||
* char - число или символ. 8 бит
|
||||
|
||||
#### Отрицательные числа
|
||||
|
||||
* signed - может быть отрицательным (по умолчанию, кроме char)
|
||||
* unsigned - число не отрицательно
|
||||
|
||||
#### Переполнение
|
||||
|
||||
* Переполнение случается при потере бит из-за того, что значение после операции выходит за границу их значений
|
||||
|
||||
65635 как unsigned int + 1 выдаст 0
|
||||
|
||||
#### Целочисленное деление
|
||||
|
||||
Деление двух цилочисленных значений всегда выдаёт целое число (округление вниз)
|
||||
|
||||
### Символьные тип char
|
||||
|
||||
char представляет собой 1 символ (не всегда) и всегда весит 1 байт.
|
||||
|
||||
Для инициализации char символом используется *одинарные* ковычки
|
||||
|
||||
### Строки
|
||||
|
||||
Для строк используется библиотека string. Строки указываются в двойных ковычках
|
||||
|
||||
### Типы данных с плавающией точкой
|
||||
|
||||
Типы с плавающей могут показывать дробные числа
|
||||
|
||||
* float - 32 бита
|
||||
* double - 64 бита (двойная точность по сравнению с float)
|
||||
* long double - от 8 до 16 байт (зависит от компилятора)
|
||||
|
||||
### Логические значения
|
||||
|
||||
* true
|
||||
* false
|
||||
|
||||
## Константы
|
||||
|
||||
> Величины, которые остаются неизменными. Они должны быть инициализированны при объявлении
|
||||
|
||||
## IOSTREAM
|
||||
|
||||
### Подключение IOSTREAM
|
||||
|
||||
```C++
|
||||
#include <iostream>;
|
||||
```
|
||||
|
||||
### *cout*
|
||||
|
||||
> *cout* - объект для вывода в терминал
|
||||
|
||||
```C++
|
||||
#include <iostream>;
|
||||
|
||||
std::cout << 5 << '\n';
|
||||
```
|
||||
|
||||
### *endl*
|
||||
|
||||
> endl можно использовать как '\n'
|
||||
|
||||
```C++
|
||||
#include <iostream>;
|
||||
|
||||
std::cout << 5 << std::endl;
|
||||
```
|
||||
|
||||
### *cin*
|
||||
|
||||
> cin используется для ввода значений из терминала
|
||||
|
||||
```C++
|
||||
#include <iostream>;
|
||||
|
||||
int a = 0;
|
||||
std::cin >> a;
|
||||
```
|
||||
|
||||
## Ветвление
|
||||
|
||||
```C++
|
||||
#include <iostream>;
|
||||
|
||||
int a = 5;
|
||||
if (a == 5) {
|
||||
std::cout << 5 << '\n';
|
||||
} else if (a == 6) {
|
||||
std::cout << 6 << '\n';
|
||||
} else {
|
||||
std::cout << "Neither\n";
|
||||
}
|
||||
```
|
||||
|
||||
### Логические операторы
|
||||
|
||||
* && - и
|
||||
* || - или
|
||||
* ! - не
|
||||
|
||||
## Циклы
|
||||
|
||||
### Цикл for
|
||||
|
||||
> for (инициализация; условие; изменение)
|
||||
|
||||
```C++
|
||||
#include <iostream>;
|
||||
|
||||
// Выводит числа от 0 до 5 включительно
|
||||
for (int i = 0; i <= 5; i++) {
|
||||
std::cout << i << '\n';
|
||||
}
|
||||
```
|
||||
|
||||
### Цикл while (с пред условием)
|
||||
|
||||
```C++
|
||||
#include <iostream>;
|
||||
|
||||
// Аналогичен коду сверху
|
||||
int i = 0;
|
||||
while (i <= 5) {
|
||||
std::cout << i << '\n';
|
||||
i++;
|
||||
}
|
||||
```
|
||||
|
||||
### Цикл do while
|
||||
|
||||
> Цикл do while выполнит тело хотя бы один раз, даже если условие изначально false
|
||||
|
||||
```C++
|
||||
#include <iostream>;
|
||||
|
||||
|
||||
// Выведет 0 (не смотря на то, что 0 чётное) и 1
|
||||
int i = 0
|
||||
do {
|
||||
std::cout << i << '\n';
|
||||
i++;
|
||||
} while (i % 2 != 0)
|
||||
```
|
||||
|
||||
### Операторы прерывания
|
||||
|
||||
* *break*
|
||||
* *continue*
|
||||
|
||||
Они аналогичны оным из Python
|
||||
|
||||
## switch
|
||||
|
||||
```C++
|
||||
int a = 5;
|
||||
switch(a){
|
||||
case 1:
|
||||
std::cout << "1" << '\n';
|
||||
break;
|
||||
case 2:
|
||||
std::cout << "2" << '\n';
|
||||
break;
|
||||
default:
|
||||
std::cout << "Other" << '\n';
|
||||
break;
|
||||
}
|
||||
```
|
||||
|
||||
## Goto
|
||||
|
||||
> Goto позволяет перейти к исполнению другого блока кода. Если будете его использовать, то придёт страшный Николай и даст по рукам книжкой о правильном написании кода
|
||||
|
||||
```C++
|
||||
mark:
|
||||
// do-something
|
||||
|
||||
// 1 eternity later (возможно даже в другой функции)
|
||||
|
||||
goto mark;
|
||||
```
|
||||
|
||||
## Массивы
|
||||
|
||||
> Структура данных позволяющая хранить набор элементов одного типа. Объявление состоит из указания типа и размерности. Массивы в C++ имеют нумерацию элементов, начинающуюся с 0
|
||||
|
||||
### Объявление массива
|
||||
|
||||
```C++
|
||||
int number[5]; // пять интов. Массив называется numbers
|
||||
char chars[20];
|
||||
bool flags[3];
|
||||
```
|
||||
|
||||
### Инициализация массива
|
||||
|
||||
```C++
|
||||
int numbers[3] = {10, 20, 30};
|
||||
int foo[] = {10, 20, 30}; // Тоже будет на 3 элемента
|
||||
int bar[10] = {10, 20, 30} // Оставшиеся 8 не инициализированны
|
||||
```
|
||||
|
||||
### Обход массива
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
|
||||
int numbers[] = {10, 20, 30}
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
std::cout << i << '\n';
|
||||
}
|
||||
```
|
||||
|
||||
### Размер массива
|
||||
|
||||
```C++
|
||||
int arr[5];
|
||||
|
||||
int n = sizeof(arr) / sizeof(int); // n - длинна массива
|
||||
```
|
||||
|
||||
### Многомерные массивы
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
|
||||
int arr[2][2] = {{10, 20}, {30, 40}};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
for (int j = 0; j < 2; j++) {
|
||||
std::cout << arr[i][j] << '\n';
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Динамический массив
|
||||
|
||||
> Массив, размер которого может быть указан в runtime. Ключевое слово *new* используется для создания, a *delete* для освобождения памяти.
|
||||
|
||||
```C++
|
||||
int* dynamic_array = new int[5]; // dynamic_array - список из 5 чисел
|
||||
delete[] dynamic_array;
|
||||
```
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
|
||||
int n;
|
||||
std::cin >> n;
|
||||
int* nums = new int[n];
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
std::cin >> nums[i];
|
||||
}
|
||||
|
||||
for (int i = 0; i < n; i ++) {
|
||||
std::cout << nums[i] << ' ';
|
||||
}
|
||||
std::cout << std::endl;
|
||||
|
||||
delete[] nums;
|
||||
```
|
||||
|
||||
## Процедуры и функции
|
||||
|
||||
> Процедуры - функции, которые возвращают void
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
|
||||
// Функция, возвращает int который получила
|
||||
int foo(int n) {
|
||||
return n;
|
||||
}
|
||||
|
||||
// Процедура
|
||||
void bar(int n) {
|
||||
std::cout << n << '\n';
|
||||
}
|
||||
```
|
||||
|
||||
### Передача значений в функцию
|
||||
|
||||
> При передаче аргумента, как значения, создаётся его копия, а при передаче по ссылки, копия не создаётся и может менять его
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
|
||||
void increment1(int i) {
|
||||
i++;
|
||||
std::cout << i << '\n';
|
||||
}
|
||||
|
||||
void increment2(int& i) {
|
||||
i++;
|
||||
std::cout << i << '\n';
|
||||
}
|
||||
|
||||
int main() {
|
||||
int i = 5;
|
||||
increment1(i) // Выведет 6, но i останется 5
|
||||
increment2(i) // Выведет 6, и i станет 6
|
||||
}
|
||||
```
|
||||
|
||||
### Передача массивов в функцию
|
||||
|
||||
> При передаче массивов в функцию, нужно кинуть туда ещё и длину. Функция может менять оригинальный массив. Копия не создаётся
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
|
||||
void foo(int bar[], int size) {
|
||||
if (size >= 1) {
|
||||
std::cout << bar[1] << '\n';
|
||||
} else {
|
||||
std::cout << "Not enough elements\n";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Ссылки и указатели
|
||||
|
||||
> *Ссылка* (*reference*) - псевдоним джя существующей переменной. Может иметь не валидный адрес или быть не инициализированной
|
||||
|
||||
```C++
|
||||
int a = 5;
|
||||
int& b = a; // При изменении b, будет меняться a
|
||||
b++; // a и b станут 6
|
||||
```
|
||||
|
||||
> Указатель (*pointer*) содержит адрес существующей переменной
|
||||
|
||||
```C++
|
||||
int a = 5;
|
||||
int* b = &a; // При изменении b, будет меняться a
|
||||
(*b)++ // a станет равна 6
|
||||
```
|
||||
|
||||
## Строки (углубление)
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::string a = "abc";
|
||||
|
||||
// b - копия a
|
||||
std::string b = a;
|
||||
|
||||
// c содержит 'c'
|
||||
сhar c = a[2];
|
||||
|
||||
// последний символ a стал z
|
||||
a[2] = 'z'
|
||||
}
|
||||
```
|
||||
|
||||
### Перебор символов
|
||||
|
||||
```C++
|
||||
#include <string>
|
||||
|
||||
std::string a = "abc"
|
||||
for (char c: a) {
|
||||
std::cout << c << '\n';
|
||||
}
|
||||
|
||||
for (int i = 0; i < a.length(); i++) {
|
||||
std::cout << a[i] << '\n';
|
||||
}
|
||||
```
|
||||
|
||||
### Ввод строки с клавиатуры
|
||||
|
||||
```C++
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
std::string str;
|
||||
// Ввести 1 слово
|
||||
std::cin >> str;
|
||||
|
||||
// Ввести строку
|
||||
std::getLine(std::cin, str);
|
||||
```
|
||||
|
||||
### Полезные методы строк
|
||||
|
||||
* length(), size() - длина строки
|
||||
* substr(start,length) - извлекает часть строки
|
||||
* find(substring) - первое вхождение
|
||||
* replace(oldString, NewString) - заменяет все вхождения из старой в новую строку (ничего не возвращает, изменения на месте)
|
||||
* toupper(), tolower() - меняет регистр соответсвенно названию
|
||||
* empty() - проверяет пустая ли строка
|
||||
* compare() -сравнивает две строки. Возвращает 0, если строкми одинаковые.
|
||||
* insert(index,string) - вставляет строку в указанную позицию.
|
||||
* erase(start,length) - удалает часть строки
|
||||
|
||||
### Полезные функции для строк
|
||||
|
||||
* getLine(inputStream, string) - считывает строку из потока и тсохраняет в переменную str
|
||||
|
||||
## Способы передачи аргументов в функию
|
||||
|
||||
* по значению (pass by value) - создание копии
|
||||
* Изначальное не меняется
|
||||
* Создание копии может занимать много времени
|
||||
* Используется для передачи примитивов
|
||||
* по сслылке (pass by reference) - передача в функцию указатель на объект
|
||||
* Изначальное значение может меняться
|
||||
* Копия не создаётся
|
||||
* Используется для составных типов и больших объектов
|
||||
* Передача по указателю (pass by pointer) - pass by reference без кучки синтактического сахара
|
||||
Разименование - операция, которая позволяет получить доступ к значению, на которое указывает pointer.(*)
|
||||
|
||||
```C++
|
||||
void boo(int* ptr) {
|
||||
(*ptr)++;
|
||||
}
|
||||
```
|
||||
|
||||
## Возврат значений из функции
|
||||
|
||||
* Возврат по значению return
|
||||
* Важно не вернуть ссылку или указатель на локальную переменную
|
||||
|
||||
## Структуры
|
||||
|
||||
> Структура - тип данных, позоляющий объединить несколько переменных в одной еденице.
|
11
C++/THE_HARDEST_TASK.CPP
Normal file
11
C++/THE_HARDEST_TASK.CPP
Normal file
@ -0,0 +1,11 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int i = 2;
|
||||
mark:
|
||||
std::cout << i << '\n';
|
||||
if (i < 50) {
|
||||
i += 2;
|
||||
goto mark;
|
||||
}
|
||||
}
|
5
C++/lesson1/task1.cpp
Normal file
5
C++/lesson1/task1.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
std::cout << "Hello, world!\n";
|
||||
}
|
9
C++/lesson1/task2.cpp
Normal file
9
C++/lesson1/task2.cpp
Normal file
@ -0,0 +1,9 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::string a = "Hello";
|
||||
std::string b = "Привет";
|
||||
std::cout << a.length() << '\n';
|
||||
std::cout << b.length() << '\n';
|
||||
}
|
17
C++/lesson1/task3.cpp
Normal file
17
C++/lesson1/task3.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int min = 6;
|
||||
for (int i = 0; i < 5; i++) {
|
||||
int value;
|
||||
std::cin >> value;
|
||||
if (value < min) {
|
||||
min = value;
|
||||
}
|
||||
}
|
||||
if (min < 4) {
|
||||
std::cout << "Could be better\n";
|
||||
} else {
|
||||
std::cout << "Great!\n";
|
||||
}
|
||||
}
|
21
C++/lesson1/task4.cpp
Normal file
21
C++/lesson1/task4.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
int age1 = 1;
|
||||
int age2 = 1;
|
||||
int age3 = 1;
|
||||
int weight1 = 4;
|
||||
int weight2 = 4;
|
||||
int weight3 = 1;
|
||||
string color1 = "g";
|
||||
string color2 = "r";
|
||||
string color3 = "y";
|
||||
if (age1 == age2 && age2 == age3 && weight1 == weight2 && weight2 == weight3 && !(color1 == color2 && color2 == color3)) {
|
||||
cout << "YES\n";
|
||||
} else {
|
||||
cout << "NO\n";
|
||||
}
|
||||
}
|
13
C++/lesson1/task5.cpp
Normal file
13
C++/lesson1/task5.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
float age;
|
||||
std::cin >> age;
|
||||
if (age <= 1) {
|
||||
std::cout << "Молодая\n";
|
||||
} else if (age <= 5) {
|
||||
std::cout << "Взрослая\n";
|
||||
} else {
|
||||
std::cout << "Старая\n";
|
||||
}
|
||||
}
|
20
C++/lesson1/task6.cpp
Normal file
20
C++/lesson1/task6.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int a;
|
||||
std::cin >> a;
|
||||
switch (a) {
|
||||
case 1:
|
||||
std::cout << "Дизайн\n";
|
||||
break;
|
||||
case 2:
|
||||
std::cout << "Программирование\n";
|
||||
break;
|
||||
case 3:
|
||||
std::cout << "Веб\n";
|
||||
break;
|
||||
case 4:
|
||||
std::cout << "Сис-админ\n";
|
||||
break;
|
||||
}
|
||||
}
|
13
C++/lesson2/task1.cpp
Normal file
13
C++/lesson2/task1.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int num;
|
||||
|
||||
std::cin >> num;
|
||||
|
||||
for (int i = num; i >= 1; i--) {
|
||||
if (i % 3 == 0) {
|
||||
std::cout << i << '\n';
|
||||
}
|
||||
}
|
||||
}
|
17
C++/lesson2/task10.cpp
Normal file
17
C++/lesson2/task10.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::string value = std::string();
|
||||
std::cin >> value;
|
||||
int offset;
|
||||
std::cin >> offset;
|
||||
offset = offset % 26 - 'A';
|
||||
for (char& c : value) {
|
||||
if (c > 'Z' || c < 'A') {
|
||||
continue;
|
||||
}
|
||||
c = (c + offset) % 26 + 'A';
|
||||
}
|
||||
std::cout << value << '\n';
|
||||
}
|
14
C++/lesson2/task2.cpp
Normal file
14
C++/lesson2/task2.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
unsigned sum = 0;
|
||||
while (true) {
|
||||
int i;
|
||||
std::cin >> i;
|
||||
if (i < 0) {
|
||||
break;
|
||||
}
|
||||
sum += i;
|
||||
}
|
||||
std::cout << sum << '\n';
|
||||
}
|
12
C++/lesson2/task3.cpp
Normal file
12
C++/lesson2/task3.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
const int days[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
int month;
|
||||
std::cin >> month;
|
||||
if (month <= 0 || month > 12) {
|
||||
std::cout << "You are a bad person!\n";
|
||||
return 0;
|
||||
}
|
||||
std::cout << days[month - 1] << '\n';
|
||||
}
|
17
C++/lesson2/task4.cpp
Normal file
17
C++/lesson2/task4.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int sum = 0;
|
||||
int num;
|
||||
std::cin >> num;
|
||||
if (num < 0) {
|
||||
std::cout << "You are a bad person!\n";
|
||||
return 0;
|
||||
}
|
||||
while (num != 0) {
|
||||
int digit = num % 10;
|
||||
num /= 10;
|
||||
sum += digit;
|
||||
}
|
||||
std::cout << sum << '\n';
|
||||
}
|
21
C++/lesson2/task5.cpp
Normal file
21
C++/lesson2/task5.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include <iostream>
|
||||
#include <numeric>
|
||||
|
||||
int main() {
|
||||
int a, b;
|
||||
std::cin >> a;
|
||||
std::cin >> b;
|
||||
std::cout << std::lcm(a, b) << '\n';
|
||||
// int guess;
|
||||
// if (a > b) {
|
||||
// guess = a;
|
||||
// } else {
|
||||
// guess = b;
|
||||
// }
|
||||
// for (;; guess++) {
|
||||
// if (guess % a == 0 && guess % b == 0) {
|
||||
// std::cout << guess << '\n';
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
}
|
27
C++/lesson2/task6.cpp
Normal file
27
C++/lesson2/task6.cpp
Normal file
@ -0,0 +1,27 @@
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
int main() {
|
||||
int n;
|
||||
std::cin >> n;
|
||||
if (n < 0) {
|
||||
std::cout << "You are a bad person!\n";
|
||||
return 0;
|
||||
}
|
||||
std::vector<bool> values(n + 1, true);
|
||||
int root = sqrt(n);
|
||||
for (unsigned int i = 2; i <= root; i++) {
|
||||
if (values[i]) {
|
||||
std::cout << i << '\n';
|
||||
for (int j = i * i; j <= n; j += i) {
|
||||
values[j] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = root + 1; i <= n; i++) {
|
||||
if (values[i]) {
|
||||
std::cout << i << '\n';
|
||||
}
|
||||
}
|
||||
}
|
21
C++/lesson2/task7.cpp
Normal file
21
C++/lesson2/task7.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::string value = std::string();
|
||||
value.reserve(9);
|
||||
for (int count = 4; count >= 0; count--) {
|
||||
value.clear();
|
||||
for (int j = 0; j < count; j++) {
|
||||
value.push_back(' ');
|
||||
}
|
||||
int limit = 9 - count * 2;
|
||||
for (int j = 0; j < limit; j++) {
|
||||
value.push_back('*');
|
||||
}
|
||||
for (int j = 0; j < count; j++) {
|
||||
value.push_back(' ');
|
||||
}
|
||||
std::cout << value << '\n';
|
||||
}
|
||||
}
|
36
C++/lesson2/task8.cpp
Normal file
36
C++/lesson2/task8.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
int height;
|
||||
std::cin >> height;
|
||||
std::string value = std::string();
|
||||
for (int count = height - 1; count >= 0; count--) {
|
||||
value.clear();
|
||||
for (int j = 0; j < count; j++) {
|
||||
value.push_back(' ');
|
||||
}
|
||||
int limit = height * 2 - 1 - count * 2;
|
||||
for (int j = 0; j < limit; j++) {
|
||||
value.push_back('*');
|
||||
}
|
||||
for (int j = 0; j < count; j++) {
|
||||
value.push_back(' ');
|
||||
}
|
||||
std::cout << value << '\n';
|
||||
}
|
||||
for (int count = 1; count < height; count++) {
|
||||
value.clear();
|
||||
for (int j = 0; j < count; j++) {
|
||||
value.push_back(' ');
|
||||
}
|
||||
int limit = height * 2 - 1 - count * 2;
|
||||
for (int j = 0; j < limit; j++) {
|
||||
value.push_back('*');
|
||||
}
|
||||
for (int j = 0; j < count; j++) {
|
||||
value.push_back(' ');
|
||||
}
|
||||
std::cout << value << '\n';
|
||||
}
|
||||
}
|
23
C++/lesson2/task9.cpp
Normal file
23
C++/lesson2/task9.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
unsigned int sum = 0;
|
||||
while (true) {
|
||||
int num;
|
||||
std::cin >> num;
|
||||
if (num == 0) {
|
||||
break;
|
||||
}
|
||||
if (num < 0) {
|
||||
std::cout << "You are a bad person!\n";
|
||||
return 0;
|
||||
}
|
||||
sum += num;
|
||||
}
|
||||
if (sum > 1000) {
|
||||
sum += sum * 2 / 10;
|
||||
} else if (sum < 500) {
|
||||
sum -= sum / 10;
|
||||
}
|
||||
std::cout << sum << '\n';
|
||||
}
|
18
C++/lesson3/task0.cpp
Normal file
18
C++/lesson3/task0.cpp
Normal file
@ -0,0 +1,18 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int n;
|
||||
std::cin >> n;
|
||||
int* nums = new int[n];
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
std::cin >> nums[i];
|
||||
}
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
std::cout << nums[i] << ' ';
|
||||
}
|
||||
std::cout << std::endl;
|
||||
|
||||
delete[] nums;
|
||||
}
|
18
C++/lesson3/task1.cpp
Normal file
18
C++/lesson3/task1.cpp
Normal file
@ -0,0 +1,18 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int a[10] = {11, 34, 32, 5, 86, 34, 123, 456, 148, 3456};
|
||||
int min = a[0];
|
||||
int max = a[0];
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if (a[i] < min) {
|
||||
min = a[i];
|
||||
}
|
||||
if (a[i] > max) {
|
||||
max = a[i];
|
||||
}
|
||||
}
|
||||
std::cout << min << "\n";
|
||||
std::cout << max << "\n";
|
||||
}
|
19
C++/lesson3/task2.cpp
Normal file
19
C++/lesson3/task2.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int nums[10];
|
||||
std::srand(std::time(NULL));
|
||||
for (int i = 0; i < 10; i++) {
|
||||
nums[i] = rand() % 100 + 1;
|
||||
}
|
||||
|
||||
int sum = 0;
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
sum += nums[i];
|
||||
}
|
||||
|
||||
std::cout << sum / 10 << '\n';
|
||||
}
|
20
C++/lesson3/task3.cpp
Normal file
20
C++/lesson3/task3.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int n;
|
||||
std::cin >> n;
|
||||
|
||||
int* nums = new int[n];
|
||||
for (int i = 0; i < n; i++) {
|
||||
std::cin >> nums[i];
|
||||
}
|
||||
|
||||
int sum = 0;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
sum += nums[i];
|
||||
}
|
||||
|
||||
std::cout << sum << '\n';
|
||||
delete[] nums;
|
||||
}
|
26
C++/lesson3/task4.cpp
Normal file
26
C++/lesson3/task4.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int n;
|
||||
std::cin >> n;
|
||||
int a[n][n];
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
for (int j = 0; j < n; j++) {
|
||||
a[i][j] = i * j;
|
||||
std::cout << a[i][j] << " ";
|
||||
}
|
||||
std::cout << "\n";
|
||||
}
|
||||
|
||||
int s = 0;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
for (int j = 0; j < n; j++) {
|
||||
s += a[i][j];
|
||||
}
|
||||
int avg = s / n;
|
||||
std::cout << avg << "\n";
|
||||
s = 0;
|
||||
}
|
||||
}
|
23
C++/lesson3/task5.cpp
Normal file
23
C++/lesson3/task5.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
std::cout << a[i][j] << ' ';
|
||||
}
|
||||
std::cout << '\n';
|
||||
}
|
||||
|
||||
std::cout << '\n';
|
||||
|
||||
std::swap(a[0], a[2]);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
std::cout << a[i][j] << ' ';
|
||||
}
|
||||
std::cout << '\n';
|
||||
}
|
||||
}
|
22
C++/lesson3/task6.cpp
Normal file
22
C++/lesson3/task6.cpp
Normal file
@ -0,0 +1,22 @@
|
||||
#include <iostream>
|
||||
|
||||
void bubbleSort(int data[], int lenD) {
|
||||
int tmp = 0;
|
||||
for (int i = 0; i < lenD; i++) {
|
||||
for (int j = (lenD - 1); j >= (i + 1); j--) {
|
||||
if (data[j] < data[j - 1]) {
|
||||
tmp = data[j];
|
||||
data[j] = data[j - 1];
|
||||
data[j - 1] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
int a[3] = {1, 3, 5};
|
||||
int b[3] = {0, 2, 4};
|
||||
|
||||
int c[6];
|
||||
for (int)
|
||||
}
|
13
C++/lesson4/task1.cpp
Normal file
13
C++/lesson4/task1.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
#include <iostream>
|
||||
|
||||
void increment(int& num) {
|
||||
num++;
|
||||
std::cout << "Inside function: " << num << "\n";
|
||||
}
|
||||
|
||||
int main() {
|
||||
int x = 5;
|
||||
increment(x);
|
||||
std::cout << "Outside function: " << x << "\n";
|
||||
return 0;
|
||||
}
|
11
C++/lesson4/task2.cpp
Normal file
11
C++/lesson4/task2.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include <iostream>
|
||||
|
||||
void foo(int* bar) {
|
||||
(*bar)++;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int a[3] = {10, 20, 300};
|
||||
foo(a);
|
||||
std::cout << a[0];
|
||||
}
|
14
C++/lesson4/task3.cpp
Normal file
14
C++/lesson4/task3.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::string s;
|
||||
std::getline(std::cin, s);
|
||||
unsigned count = 1;
|
||||
for (char c : s) {
|
||||
if (c == ' ') {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
std::cout << count << '\n';
|
||||
}
|
17
C++/lesson4/task4.cpp
Normal file
17
C++/lesson4/task4.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
const std::string vovels = "aeiouAEIOU";
|
||||
std::string s;
|
||||
std::getline(std::cin, s);
|
||||
unsigned count = 0;
|
||||
|
||||
for (char c : s) {
|
||||
if (vovels.find(c) != std::string::npos) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << count << '\n';
|
||||
}
|
11
C++/lesson4/task5.cpp
Normal file
11
C++/lesson4/task5.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::string s;
|
||||
std::string sf;
|
||||
std::string sr;
|
||||
std::getline(std::cin, s);
|
||||
std::getline(std::cin, sf);
|
||||
std::getline(std::cin, sr);
|
||||
}
|
16
C++/lesson4/task6.cpp
Normal file
16
C++/lesson4/task6.cpp
Normal file
@ -0,0 +1,16 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::string s;
|
||||
std::string r;
|
||||
|
||||
std::getline(std::cin, s);
|
||||
r.reserve(s.length());
|
||||
|
||||
for (int i = s.length() - 1; i >= 0; i--) {
|
||||
r.push_back(s[i]);
|
||||
}
|
||||
|
||||
std::cout << r << '\n';
|
||||
}
|
20
C++/lesson4/task7.cpp
Normal file
20
C++/lesson4/task7.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::string s;
|
||||
std::string f;
|
||||
std::string r;
|
||||
|
||||
std::getline(std::cin, s);
|
||||
std::getline(std::cin, f);
|
||||
std::getline(std::cin, r);
|
||||
|
||||
size_t pos = s.find(f);
|
||||
while (pos != std::string::npos) {
|
||||
s.replace(pos, f.length(), r);
|
||||
pos = s.find(f);
|
||||
}
|
||||
|
||||
std::cout << s << '\n';
|
||||
}
|
14
C++/lesson5/task1.cpp
Normal file
14
C++/lesson5/task1.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
void addOne(int &x) {
|
||||
x = x + 1;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int a = 7;
|
||||
std::cout << "a = " << a << '\n';
|
||||
addOne(a);
|
||||
std::cout << "a = " << a << '\n';
|
||||
return 0;
|
||||
}
|
16
C++/lesson5/task2.cpp
Normal file
16
C++/lesson5/task2.cpp
Normal file
@ -0,0 +1,16 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
void boo(int *ptr) {
|
||||
*ptr = 7;
|
||||
}
|
||||
|
||||
int main(){
|
||||
|
||||
int value = 4;
|
||||
|
||||
std::cout << "value = " << value << '\n';
|
||||
boo(&value);
|
||||
std::cout << "value = " << value << '\n';
|
||||
return 0;
|
||||
}
|
30
C++/lesson7/task1.cpp
Normal file
30
C++/lesson7/task1.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
struct Good {
|
||||
std::string name;
|
||||
unsigned cost;
|
||||
unsigned amount;
|
||||
|
||||
Good(std::string name, unsigned cost, unsigned amount) {
|
||||
this->name = name;
|
||||
this->cost = cost;
|
||||
this->amount = amount;
|
||||
}
|
||||
|
||||
void information() {
|
||||
std::cout << '(' << name << ',' << cost << ',' << amount
|
||||
<< ")\n";
|
||||
}
|
||||
|
||||
void changeCost(unsigned cost) {
|
||||
this->cost = cost;
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
Good apple("Apple", 10, 20);
|
||||
apple.information();
|
||||
apple.changeCost(20);
|
||||
apple.information();
|
||||
}
|
43
C++/lesson7/task8.cpp
Normal file
43
C++/lesson7/task8.cpp
Normal file
@ -0,0 +1,43 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
enum EventKind {
|
||||
Lesson,
|
||||
Meeting,
|
||||
Celebration
|
||||
};
|
||||
|
||||
struct Event {
|
||||
std::string name;
|
||||
std::string time;
|
||||
std::string date;
|
||||
EventKind kind;
|
||||
|
||||
Event(std::string name, std::string time, std::string date, EventKind kind) {
|
||||
this->name = name;
|
||||
this->time = time;
|
||||
this->date = date;
|
||||
this->kind = kind;
|
||||
}
|
||||
|
||||
void information() {
|
||||
std::cout
|
||||
<< '(' << name << ',' << time << ',' << date << ',' << kind << ')' << '\n';
|
||||
}
|
||||
|
||||
~Event() {
|
||||
std::cout
|
||||
<< '(' << name << ',' << time << ',' << date << ',' << kind << ')' << " was deleted\n";
|
||||
}
|
||||
};
|
||||
|
||||
void display_events(Event events[], size_t length) {
|
||||
for (size_t i = 0; i < length; i++) {
|
||||
events[i].information();
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
Event m[3] = {Event("NewYear", "00:00", "31:12:2023", Celebration), Event("Breefing", "17:00", "15:06:2023", Meeting), Event("AI", "10:00", "03:07:2023", Lesson)};
|
||||
display_events(m, 3);
|
||||
}
|
160
C++/lesson7/task9.cpp
Normal file
160
C++/lesson7/task9.cpp
Normal file
@ -0,0 +1,160 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class Book {
|
||||
int id;
|
||||
std::string name;
|
||||
std::string writer;
|
||||
std::string year;
|
||||
|
||||
public:
|
||||
Book() {}
|
||||
|
||||
Book(unsigned id, std::string name, std::string writer, std::string year) {
|
||||
this->id = id;
|
||||
this->name = name;
|
||||
this->writer = writer;
|
||||
this->year = year;
|
||||
}
|
||||
|
||||
std::string& get_name() {
|
||||
return name;
|
||||
}
|
||||
std::string& get_writer() {
|
||||
return writer;
|
||||
}
|
||||
std::string& get_year() {
|
||||
return year;
|
||||
}
|
||||
|
||||
void setname(std::string name) {
|
||||
this->name = name;
|
||||
}
|
||||
void setwriter(std::string writer) {
|
||||
this->name = name;
|
||||
}
|
||||
void setyear(std::string year) {
|
||||
this->name = name;
|
||||
}
|
||||
};
|
||||
|
||||
class Reader {
|
||||
std::string name;
|
||||
unsigned number;
|
||||
|
||||
public:
|
||||
Reader() {}
|
||||
|
||||
Reader(std::string name, unsigned number) {
|
||||
this->name = name;
|
||||
this->number = number;
|
||||
}
|
||||
|
||||
std::string& getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
unsigned getNumber() {
|
||||
return number;
|
||||
}
|
||||
|
||||
void setName(std::string name) {
|
||||
this->name = name;
|
||||
}
|
||||
|
||||
void setNumber(unsigned number) {
|
||||
this->number = number;
|
||||
}
|
||||
};
|
||||
|
||||
class Library {
|
||||
public:
|
||||
Reader* readers;
|
||||
size_t amount_readers;
|
||||
Book* books;
|
||||
size_t amount_books;
|
||||
|
||||
Library() {
|
||||
readers = new Reader[0];
|
||||
amount_readers = 0;
|
||||
books = new Book[0];
|
||||
amount_books = 0;
|
||||
}
|
||||
|
||||
void addReader(Reader reader) {
|
||||
Reader* new_readers = new Reader[amount_readers + 1];
|
||||
for (size_t i = 0; i < amount_readers; i++) {
|
||||
new_readers[i] = readers[i];
|
||||
}
|
||||
new_readers[amount_readers] = reader;
|
||||
delete[] readers;
|
||||
readers = new_readers;
|
||||
amount_readers++;
|
||||
}
|
||||
|
||||
void addBook(Book book) {
|
||||
Book* new_books = new Book[amount_books + 1];
|
||||
for (size_t i = 0; i < amount_books; i++) {
|
||||
new_books[i] = books[i];
|
||||
}
|
||||
new_books[amount_books] = book;
|
||||
delete[] books;
|
||||
books = new_books;
|
||||
amount_books++;
|
||||
}
|
||||
|
||||
Book deleteBook(size_t n) {
|
||||
Book* new_books = new Book[amount_books - 1];
|
||||
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
new_books[i] = books[i];
|
||||
}
|
||||
|
||||
for (size_t j = n + 1; j < amount_books; j++) {
|
||||
new_books[j - 1] = books[j];
|
||||
}
|
||||
Book deleted = books[n];
|
||||
delete[] books;
|
||||
books = new_books;
|
||||
amount_books -= 1;
|
||||
return deleted;
|
||||
}
|
||||
|
||||
Book takeBook(size_t n) {
|
||||
Book taken = this->deleteBook(n);
|
||||
std::cout << "Book" << taken.get_name() << "is taken\n";
|
||||
return taken;
|
||||
}
|
||||
|
||||
void returnBook(Book book) {
|
||||
std::cout << "Book" << book.get_name() << "is returned\n";
|
||||
this->addBook(book);
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
Book WarAndPeace(0, "WarAndPeace", "Tolstoy", "1867");
|
||||
Book EugeneOnegin(1, "EugeneOnegin", "Pushkin", "1832");
|
||||
Book HeroOfOurTime(2, "HeroOfOurTime", "Lemontov", "1840");
|
||||
Book PortraitOfDorianGray(3, "PortraitOfDorianGray", "Wilde", "1890");
|
||||
|
||||
Library library;
|
||||
library.addBook(WarAndPeace);
|
||||
library.addBook(EugeneOnegin);
|
||||
library.addBook(HeroOfOurTime);
|
||||
library.addBook(PortraitOfDorianGray);
|
||||
|
||||
Reader petya("Petya", 0);
|
||||
Reader vasya("Vasya", 1);
|
||||
library.addReader(petya);
|
||||
library.addReader(vasya);
|
||||
|
||||
Book book1 = library.takeBook(0);
|
||||
Book book2 = library.takeBook(0);
|
||||
|
||||
library.returnBook(book1);
|
||||
library.returnBook(book2);
|
||||
|
||||
library.takeBook(3);
|
||||
}
|
105
C++/lesson8/ex5.cpp
Normal file
105
C++/lesson8/ex5.cpp
Normal file
@ -0,0 +1,105 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
class Character {
|
||||
public:
|
||||
std::string name;
|
||||
int level;
|
||||
int exp;
|
||||
int health;
|
||||
int attack;
|
||||
int protection;
|
||||
|
||||
Character(std::string name) {
|
||||
this->name = name;
|
||||
level = 0;
|
||||
exp = 0;
|
||||
health = 10;
|
||||
attack = 2;
|
||||
protection = 2;
|
||||
}
|
||||
|
||||
void levelUp() {
|
||||
level++;
|
||||
health += 5;
|
||||
attack++;
|
||||
protection++;
|
||||
}
|
||||
|
||||
void gainExp(int amount) {
|
||||
exp += amount;
|
||||
}
|
||||
|
||||
int getHelth() {
|
||||
return health;
|
||||
}
|
||||
|
||||
int getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
bool isAlive() {
|
||||
return health > 0;
|
||||
}
|
||||
|
||||
void attack_character(Character& target) {
|
||||
if (target.protection == 0) {
|
||||
target.health -= attack;
|
||||
std::cout << target.name << " was attacked\n";
|
||||
} else {
|
||||
target.protection--;
|
||||
std::cout << target.name << " has protection\n";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
Character vasiya("Вася");
|
||||
Character petyia("Петя");
|
||||
|
||||
vasiya.levelUp();
|
||||
vasiya.levelUp();
|
||||
vasiya.levelUp();
|
||||
|
||||
petyia.levelUp();
|
||||
petyia.levelUp();
|
||||
|
||||
vasiya.attack_character(petyia);
|
||||
vasiya.attack_character(petyia);
|
||||
|
||||
petyia.attack_character(vasiya);
|
||||
petyia.attack_character(vasiya);
|
||||
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
vasiya.attack_character(vasiya); // Вася не умный
|
||||
|
||||
if (vasiya.isAlive()) {
|
||||
std::cout << "Вася как-то выжил\n";
|
||||
} else {
|
||||
std::cout << "Вася умер\n";
|
||||
}
|
||||
|
||||
if (petyia.isAlive()) {
|
||||
std::cout << "Петя как-то выжил\n";
|
||||
} else {
|
||||
std::cout << "Петя умер\n";
|
||||
}
|
||||
}
|
162
C++/lesson8/ex7.cpp
Normal file
162
C++/lesson8/ex7.cpp
Normal file
@ -0,0 +1,162 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
class Passenger {
|
||||
std::string firstName;
|
||||
std::string lastName;
|
||||
int passportNamber;
|
||||
|
||||
public:
|
||||
Passenger() = default;
|
||||
|
||||
Passenger(std::string firstName, std::string lastName, int passportNamber) {
|
||||
this->firstName = firstName;
|
||||
this->lastName = lastName;
|
||||
this->passportNamber = passportNamber;
|
||||
}
|
||||
|
||||
void info() {
|
||||
std::cout << firstName << ", " << lastName << ", " << passportNamber << "\n";
|
||||
}
|
||||
};
|
||||
|
||||
class Plane {
|
||||
std::string model;
|
||||
int year;
|
||||
size_t seat_count;
|
||||
|
||||
public:
|
||||
Passenger* passengers;
|
||||
size_t passengerAmount;
|
||||
|
||||
Plane() = default;
|
||||
|
||||
Plane(std::string model, int year, size_t seat_count) {
|
||||
passengerAmount = 0;
|
||||
passengers = new Passenger[0];
|
||||
this->model = model;
|
||||
this->year = year;
|
||||
this->seat_count = seat_count;
|
||||
}
|
||||
|
||||
void info() {
|
||||
std::cout << model << ", " << year << ", " << seat_count << '\n';
|
||||
}
|
||||
|
||||
void PassengerInformation() {
|
||||
for (size_t i = 0; i < passengerAmount; i++) {
|
||||
passengers[i].info();
|
||||
}
|
||||
}
|
||||
|
||||
void addPassager(Passenger passenger) {
|
||||
Passenger* new_passengers = new Passenger[passengerAmount + 1];
|
||||
for (size_t i = 0; i < passengerAmount; i++) {
|
||||
new_passengers[i] = passengers[i];
|
||||
}
|
||||
new_passengers[passengerAmount] = passenger;
|
||||
delete[] passengers;
|
||||
passengers = new_passengers;
|
||||
passengerAmount++;
|
||||
}
|
||||
|
||||
void removePassenger(size_t n) {
|
||||
Passenger* new_passengers = new Passenger[passengerAmount - 1];
|
||||
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
new_passengers[i] = passengers[i];
|
||||
}
|
||||
|
||||
for (size_t j = n + 1; j < passengerAmount; j++) {
|
||||
new_passengers[j - 1] = passengers[j];
|
||||
}
|
||||
delete[] passengers;
|
||||
passengers = new_passengers;
|
||||
passengerAmount -= 1;
|
||||
}
|
||||
};
|
||||
|
||||
class FlyCompany {
|
||||
Plane* planes;
|
||||
size_t planeAmount;
|
||||
|
||||
public:
|
||||
FlyCompany() {
|
||||
planes = new Plane[0];
|
||||
planeAmount = 0;
|
||||
}
|
||||
|
||||
void addPlane(Plane plane) {
|
||||
Plane* new_planes = new Plane[planeAmount + 1];
|
||||
for (size_t i = 0; i < planeAmount; i++) {
|
||||
new_planes[i] = planes[i];
|
||||
}
|
||||
new_planes[planeAmount] = plane;
|
||||
delete[] planes;
|
||||
planes = new_planes;
|
||||
planeAmount++;
|
||||
}
|
||||
|
||||
void deletePlane(size_t n) {
|
||||
Plane* new_planes = new Plane[planeAmount - 1];
|
||||
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
new_planes[i] = planes[i];
|
||||
}
|
||||
|
||||
for (size_t j = n + 1; j < planeAmount; j++) {
|
||||
new_planes[j - 1] = planes[j];
|
||||
}
|
||||
delete[] planes;
|
||||
planes = new_planes;
|
||||
planeAmount--;
|
||||
}
|
||||
|
||||
void register_passenger(Passenger passanger, size_t plane_index) {
|
||||
planes[plane_index].addPassager(passanger);
|
||||
}
|
||||
|
||||
void unregister_passenger(size_t passenger_id, size_t plane_index) {
|
||||
planes[plane_index].removePassenger(passenger_id);
|
||||
}
|
||||
|
||||
void plane_info() {
|
||||
for (size_t i = 0; i < planeAmount; i++) {
|
||||
planes[i].info();
|
||||
}
|
||||
}
|
||||
|
||||
void passenger_info() {
|
||||
for (size_t i = 0; i < planeAmount; i++) {
|
||||
planes[i].PassengerInformation();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
FlyCompany company;
|
||||
|
||||
Plane boing("Boing", 2000, 10);
|
||||
Plane plane2("Plane2", -5, 3);
|
||||
|
||||
Passenger petiya("Петя", "Васильев", 112245326);
|
||||
Passenger pasha("Паша", "Александров", 531930186);
|
||||
Passenger vova("Вова", "Клепцов", 913573127);
|
||||
|
||||
company.addPlane(boing);
|
||||
company.addPlane(plane2);
|
||||
|
||||
company.register_passenger(petiya, 0);
|
||||
company.register_passenger(pasha, 1);
|
||||
company.register_passenger(vova, 1);
|
||||
|
||||
company.passenger_info();
|
||||
company.plane_info();
|
||||
std::cout << '\n';
|
||||
|
||||
company.deletePlane(0);
|
||||
company.unregister_passenger(0, 0);
|
||||
|
||||
company.passenger_info();
|
||||
company.plane_info();
|
||||
}
|
Reference in New Issue
Block a user