initial commit

This commit is contained in:
2023-07-16 13:23:25 +00:00
commit c3fa5367c3
85 changed files with 4921 additions and 0 deletions

50
C++/.vscode/settings.json vendored Normal file
View 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
View 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
View File

@ -0,0 +1,11 @@
#include <iostream>
int main() {
int i = 2;
mark:
std::cout << i << '\n';
if (i < 50) {
i += 2;
goto mark;
}
}

BIN
C++/a.out Executable file

Binary file not shown.

5
C++/lesson1/task1.cpp Normal file
View File

@ -0,0 +1,5 @@
#include <iostream>
int main() {
std::cout << "Hello, world!\n";
}

9
C++/lesson1/task2.cpp Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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();
}