initial commit

This commit is contained in:
StNicolay 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();
}

24
Python/OOP2/task1.py Normal file
View File

@ -0,0 +1,24 @@
from dataclasses import dataclass, field
from datetime import datetime, timedelta
@dataclass(order=True)
class Train:
id: int = field(compare=False)
to: str
leaves_at: datetime = field(default_factory=datetime.now)
now = datetime.now()
trains = [Train(i, f"somewhere{i}", now + timedelta(hours=i)) for i in range(1, 6)]
print(*trains, sep="\n", end="\n\n")
print(*sorted(trains), sep="\n")
def sort_by_id(trains: list[Train]) -> list[Train]:
return sorted(trains, key=lambda train: train.id)
def get_from_user() -> None:
id = int(input())
print(trains[id])

10
Python/OOP2/task10.py Normal file
View File

@ -0,0 +1,10 @@
from dataclasses import dataclass
@dataclass
class Foo1:
text: str
@dataclass
class Foo2(Foo1):
num:int

14
Python/OOP2/task2.py Normal file
View File

@ -0,0 +1,14 @@
from dataclasses import dataclass
from typing import Self
@dataclass
class Foo:
a: int
b: int
def sum(self: Self) -> int:
return self.a + self.b
def greater(self: Self) -> int:
return max(self.a, self.b)

21
Python/OOP2/task3.py Normal file
View File

@ -0,0 +1,21 @@
from typing import Self
from attrs import define, field, validators
@define
class time:
hours: int = field(validator=validators.in_(range(24)))
minutes: int = field(validator=validators.in_(range(60)))
seconds: int = field(validator=validators.in_(range(60)))
def change(
self: Self, hours: int | None, minutes: int | None, seconds: int | None
) -> Self:
if hours is not None:
self.hours += hours
if minutes is not None:
self.minutes += minutes
if seconds is not None:
self.seconds += seconds
return self

45
Python/OOP2/task4.py Normal file
View File

@ -0,0 +1,45 @@
import random
from dataclasses import dataclass, field
from typing import Self
@dataclass
class _Base:
id: int
level: int = 1
@dataclass
class Hero(_Base):
soliders: list["Solider"] = field(default_factory=list)
def level_up(self: Self) -> Self:
self.level += 1
return self
@dataclass
class Solider(_Base):
def follow(self: Self, hero: Hero) -> None:
print(f"Иду за героем {hero.id}")
def main() -> None:
amount_of_players = 2
heroes = [Hero(i) for i in range(2)]
for i in range(amount_of_players, amount_of_players * 3 + 1):
solider = Solider(i)
random.choice(heroes).soliders.append(solider)
amount_of_soliders = [len(hero.soliders) for hero in heroes]
winner_id = amount_of_soliders.index(max(amount_of_soliders))
winner = heroes[winner_id]
loser_id = amount_of_soliders.index(max(amount_of_soliders))
loser = heroes[loser_id]
winner.level_up()
print(winner)
random.choice(loser.soliders).follow(winner)
if __name__ == "__main__":
main()

14
Python/OOP2/task5.py Normal file
View File

@ -0,0 +1,14 @@
from dataclasses import dataclass
from typing import Self
@dataclass
class Person:
name: str
age: int
def move(self: Self) -> None:
print(f"{self.name} говорит")
def talk(self: Self) -> None:
print(f"{self.name} идёт")

12
Python/OOP2/task6.py Normal file
View File

@ -0,0 +1,12 @@
from dataclasses import dataclass
from typing import Self
@dataclass
class Game:
name: str
year: int
# НАХ?
def get_name(self: Self):
return self.name

0
Python/OOP2/task7.py Normal file
View File

26
Python/OOP2/task8.py Normal file
View File

@ -0,0 +1,26 @@
from dataclasses import dataclass
@dataclass
class Game:
year: int
name: str
def get_name(self) -> str:
return self.name
class PCGame(Game):
pass
class PS4Game(Game):
pass
class XboxGame(Game):
pass
class Mobiles(Game):
pass

19
Python/OOP2/task9.py Normal file
View File

@ -0,0 +1,19 @@
from dataclasses import dataclass
class Figure:
pass
@dataclass
class Triangle:
sides: tuple[int, int, int]
height: int
def area(self) -> int:
return self.sides[0] * self.height
@dataclass
class Circle:
pass

13
Python/OOP2/test.py Normal file
View File

@ -0,0 +1,13 @@
import asyncio
async def sleep_print(i: str) -> None:
print(i)
await asyncio.sleep(5)
async def main() -> int:
await asyncio.gather(*[sleep_print(i) for i in range(5)])
asyncio.run(main())

999
Python/OOP3/run1 Normal file
View File

@ -0,0 +1,999 @@
1 false
2 true
3 true
4 false
5 true
6 false
7 true
8 false
9 true
10 false
11 true
12 false
13 true
14 false
15 true
16 false
17 true
18 false
19 true
20 false
21 false
22 false
23 true
24 false
25 true
26 false
27 false
28 false
29 true
30 false
31 true
32 false
33 false
34 false
35 true
36 false
37 true
38 false
39 false
40 false
41 true
42 false
43 true
44 false
45 false
46 false
47 true
48 false
49 true
50 false
51 false
52 false
53 true
54 false
55 false
56 false
57 false
58 false
59 true
60 false
61 true
62 false
63 false
64 false
65 false
66 false
67 true
68 false
69 false
70 false
71 true
72 false
73 true
74 false
75 false
76 false
77 false
78 false
79 true
80 false
81 false
82 false
83 true
84 false
85 false
86 false
87 false
88 false
89 true
90 false
91 false
92 false
93 false
94 false
95 false
96 false
97 true
98 false
99 false
100 false
101 true
102 false
103 true
104 false
105 false
106 false
107 true
108 false
109 true
110 false
111 false
112 false
113 true
114 false
115 false
116 false
117 false
118 false
119 false
120 false
121 true
122 false
123 false
124 false
125 false
126 false
127 true
128 false
129 false
130 false
131 true
132 false
133 false
134 false
135 false
136 false
137 true
138 false
139 true
140 false
141 false
142 false
143 true
144 false
145 false
146 false
147 false
148 false
149 true
150 false
151 true
152 false
153 false
154 false
155 false
156 false
157 true
158 false
159 false
160 false
161 false
162 false
163 true
164 false
165 false
166 false
167 true
168 false
169 true
170 false
171 false
172 false
173 true
174 false
175 false
176 false
177 false
178 false
179 true
180 false
181 true
182 false
183 false
184 false
185 false
186 false
187 false
188 false
189 false
190 false
191 true
192 false
193 true
194 false
195 false
196 false
197 true
198 false
199 true
200 false
201 false
202 false
203 false
204 false
205 false
206 false
207 false
208 false
209 false
210 false
211 true
212 false
213 false
214 false
215 false
216 false
217 false
218 false
219 false
220 false
221 false
222 false
223 true
224 false
225 false
226 false
227 true
228 false
229 true
230 false
231 false
232 false
233 true
234 false
235 false
236 false
237 false
238 false
239 true
240 false
241 true
242 false
243 false
244 false
245 false
246 false
247 false
248 false
249 false
250 false
251 true
252 false
253 false
254 false
255 false
256 false
257 true
258 false
259 false
260 false
261 false
262 false
263 true
264 false
265 false
266 false
267 false
268 false
269 true
270 false
271 true
272 false
273 false
274 false
275 false
276 false
277 true
278 false
279 false
280 false
281 true
282 false
283 true
284 false
285 false
286 false
287 false
288 false
289 true
290 false
291 false
292 false
293 true
294 false
295 false
296 false
297 false
298 false
299 false
300 false
301 false
302 false
303 false
304 false
305 false
306 false
307 true
308 false
309 false
310 false
311 true
312 false
313 true
314 false
315 false
316 false
317 true
318 false
319 false
320 false
321 false
322 false
323 true
324 false
325 false
326 false
327 false
328 false
329 false
330 false
331 true
332 false
333 false
334 false
335 false
336 false
337 true
338 false
339 false
340 false
341 false
342 false
343 false
344 false
345 false
346 false
347 true
348 false
349 true
350 false
351 false
352 false
353 true
354 false
355 false
356 false
357 false
358 false
359 true
360 false
361 true
362 false
363 false
364 false
365 false
366 false
367 true
368 false
369 false
370 false
371 false
372 false
373 true
374 false
375 false
376 false
377 false
378 false
379 true
380 false
381 false
382 false
383 true
384 false
385 false
386 false
387 false
388 false
389 true
390 false
391 false
392 false
393 false
394 false
395 false
396 false
397 true
398 false
399 false
400 false
401 true
402 false
403 false
404 false
405 false
406 false
407 false
408 false
409 true
410 false
411 false
412 false
413 false
414 false
415 false
416 false
417 false
418 false
419 true
420 false
421 true
422 false
423 false
424 false
425 false
426 false
427 false
428 false
429 false
430 false
431 true
432 false
433 true
434 false
435 false
436 false
437 false
438 false
439 true
440 false
441 false
442 false
443 true
444 false
445 false
446 false
447 false
448 false
449 true
450 false
451 false
452 false
453 false
454 false
455 false
456 false
457 true
458 false
459 false
460 false
461 true
462 false
463 true
464 false
465 false
466 false
467 true
468 false
469 false
470 false
471 false
472 false
473 false
474 false
475 false
476 false
477 false
478 false
479 true
480 false
481 false
482 false
483 false
484 false
485 false
486 false
487 true
488 false
489 false
490 false
491 true
492 false
493 false
494 false
495 false
496 false
497 false
498 false
499 true
500 false
501 false
502 false
503 true
504 false
505 false
506 false
507 false
508 false
509 true
510 false
511 false
512 false
513 false
514 false
515 false
516 false
517 false
518 false
519 false
520 false
521 true
522 false
523 true
524 false
525 false
526 false
527 false
528 false
529 true
530 false
531 false
532 false
533 false
534 false
535 false
536 false
537 false
538 false
539 false
540 false
541 true
542 false
543 false
544 false
545 false
546 false
547 true
548 false
549 false
550 false
551 false
552 false
553 false
554 false
555 false
556 false
557 true
558 false
559 false
560 false
561 false
562 false
563 true
564 false
565 false
566 false
567 false
568 false
569 true
570 false
571 true
572 false
573 false
574 false
575 false
576 false
577 true
578 false
579 false
580 false
581 false
582 false
583 false
584 false
585 false
586 false
587 true
588 false
589 false
590 false
591 false
592 false
593 true
594 false
595 false
596 false
597 false
598 false
599 true
600 false
601 true
602 false
603 false
604 false
605 false
606 false
607 true
608 false
609 false
610 false
611 false
612 false
613 true
614 false
615 false
616 false
617 true
618 false
619 true
620 false
621 false
622 false
623 false
624 false
625 false
626 false
627 false
628 false
629 false
630 false
631 true
632 false
633 false
634 false
635 false
636 false
637 false
638 false
639 false
640 false
641 true
642 false
643 true
644 false
645 false
646 false
647 true
648 false
649 false
650 false
651 false
652 false
653 true
654 false
655 false
656 false
657 false
658 false
659 true
660 false
661 true
662 false
663 false
664 false
665 false
666 false
667 false
668 false
669 false
670 false
671 false
672 false
673 true
674 false
675 false
676 false
677 true
678 false
679 false
680 false
681 false
682 false
683 true
684 false
685 false
686 false
687 false
688 false
689 false
690 false
691 true
692 false
693 false
694 false
695 false
696 false
697 false
698 false
699 false
700 false
701 true
702 false
703 false
704 false
705 false
706 false
707 false
708 false
709 true
710 false
711 false
712 false
713 false
714 false
715 false
716 false
717 false
718 false
719 true
720 false
721 false
722 false
723 false
724 false
725 false
726 false
727 true
728 false
729 false
730 false
731 false
732 false
733 true
734 false
735 false
736 false
737 false
738 false
739 true
740 false
741 false
742 false
743 true
744 false
745 false
746 false
747 false
748 false
749 false
750 false
751 true
752 false
753 false
754 false
755 false
756 false
757 true
758 false
759 false
760 false
761 true
762 false
763 false
764 false
765 false
766 false
767 false
768 false
769 true
770 false
771 false
772 false
773 true
774 false
775 false
776 false
777 false
778 false
779 false
780 false
781 false
782 false
783 false
784 false
785 false
786 false
787 true
788 false
789 false
790 false
791 false
792 false
793 false
794 false
795 false
796 false
797 true
798 false
799 false
800 false
801 false
802 false
803 false
804 false
805 false
806 false
807 false
808 false
809 true
810 false
811 true
812 false
813 false
814 false
815 false
816 false
817 false
818 false
819 false
820 false
821 true
822 false
823 true
824 false
825 false
826 false
827 true
828 false
829 true
830 false
831 false
832 false
833 false
834 false
835 false
836 false
837 false
838 false
839 true
840 false
841 true
842 false
843 false
844 false
845 false
846 false
847 false
848 false
849 false
850 false
851 false
852 false
853 true
854 false
855 false
856 false
857 true
858 false
859 true
860 false
861 false
862 false
863 true
864 false
865 false
866 false
867 false
868 false
869 false
870 false
871 false
872 false
873 false
874 false
875 false
876 false
877 true
878 false
879 false
880 false
881 true
882 false
883 true
884 false
885 false
886 false
887 true
888 false
889 false
890 false
891 false
892 false
893 false
894 false
895 false
896 false
897 false
898 false
899 true
900 false
901 false
902 false
903 false
904 false
905 false
906 false
907 true
908 false
909 false
910 false
911 true
912 false
913 false
914 false
915 false
916 false
917 false
918 false
919 true
920 false
921 false
922 false
923 false
924 false
925 false
926 false
927 false
928 false
929 true
930 false
931 false
932 false
933 false
934 false
935 false
936 false
937 true
938 false
939 false
940 false
941 true
942 false
943 false
944 false
945 false
946 false
947 true
948 false
949 false
950 false
951 false
952 false
953 true
954 false
955 false
956 false
957 false
958 false
959 false
960 false
961 true
962 false
963 false
964 false
965 false
966 false
967 true
968 false
969 false
970 false
971 true
972 false
973 false
974 false
975 false
976 false
977 true
978 false
979 false
980 false
981 false
982 false
983 true
984 false
985 false
986 false
987 false
988 false
989 false
990 false
991 true
992 false
993 false
994 false
995 false
996 false
997 true
998 false
999 false

999
Python/OOP3/run2 Normal file
View File

@ -0,0 +1,999 @@
1 false
2 true
3 true
4 false
5 true
6 false
7 true
8 false
9 false
10 false
11 true
12 false
13 true
14 false
15 false
16 false
17 true
18 false
19 true
20 false
21 false
22 false
23 true
24 false
25 false
26 false
27 false
28 false
29 true
30 false
31 true
32 false
33 false
34 false
35 false
36 false
37 true
38 false
39 false
40 false
41 true
42 false
43 true
44 false
45 false
46 false
47 true
48 false
49 false
50 false
51 false
52 false
53 true
54 false
55 false
56 false
57 false
58 false
59 true
60 false
61 true
62 false
63 false
64 false
65 false
66 false
67 true
68 false
69 false
70 false
71 true
72 false
73 true
74 false
75 false
76 false
77 false
78 false
79 true
80 false
81 false
82 false
83 true
84 false
85 false
86 false
87 false
88 false
89 true
90 false
91 false
92 false
93 false
94 false
95 false
96 false
97 true
98 false
99 false
100 false
101 true
102 false
103 true
104 false
105 false
106 false
107 true
108 false
109 true
110 false
111 false
112 false
113 true
114 false
115 false
116 false
117 false
118 false
119 false
120 false
121 false
122 false
123 false
124 false
125 false
126 false
127 true
128 false
129 false
130 false
131 true
132 false
133 false
134 false
135 false
136 false
137 true
138 false
139 true
140 false
141 false
142 false
143 false
144 false
145 false
146 false
147 false
148 false
149 true
150 false
151 true
152 false
153 false
154 false
155 false
156 false
157 true
158 false
159 false
160 false
161 false
162 false
163 true
164 false
165 false
166 false
167 true
168 false
169 false
170 false
171 false
172 false
173 true
174 false
175 false
176 false
177 false
178 false
179 true
180 false
181 true
182 false
183 false
184 false
185 false
186 false
187 false
188 false
189 false
190 false
191 true
192 false
193 true
194 false
195 false
196 false
197 true
198 false
199 true
200 false
201 false
202 false
203 false
204 false
205 false
206 false
207 false
208 false
209 false
210 false
211 true
212 false
213 false
214 false
215 false
216 false
217 false
218 false
219 false
220 false
221 false
222 false
223 true
224 false
225 false
226 false
227 true
228 false
229 true
230 false
231 false
232 false
233 true
234 false
235 false
236 false
237 false
238 false
239 true
240 false
241 true
242 false
243 false
244 false
245 false
246 false
247 false
248 false
249 false
250 false
251 true
252 false
253 false
254 false
255 false
256 false
257 true
258 false
259 false
260 false
261 false
262 false
263 true
264 false
265 false
266 false
267 false
268 false
269 true
270 false
271 true
272 false
273 false
274 false
275 false
276 false
277 true
278 false
279 false
280 false
281 true
282 false
283 true
284 false
285 false
286 false
287 false
288 false
289 false
290 false
291 false
292 false
293 true
294 false
295 false
296 false
297 false
298 false
299 false
300 false
301 false
302 false
303 false
304 false
305 false
306 false
307 true
308 false
309 false
310 false
311 true
312 false
313 true
314 false
315 false
316 false
317 true
318 false
319 false
320 false
321 false
322 false
323 false
324 false
325 false
326 false
327 false
328 false
329 false
330 false
331 true
332 false
333 false
334 false
335 false
336 false
337 true
338 false
339 false
340 false
341 false
342 false
343 false
344 false
345 false
346 false
347 true
348 false
349 true
350 false
351 false
352 false
353 true
354 false
355 false
356 false
357 false
358 false
359 true
360 false
361 false
362 false
363 false
364 false
365 false
366 false
367 true
368 false
369 false
370 false
371 false
372 false
373 true
374 false
375 false
376 false
377 false
378 false
379 true
380 false
381 false
382 false
383 true
384 false
385 false
386 false
387 false
388 false
389 true
390 false
391 false
392 false
393 false
394 false
395 false
396 false
397 true
398 false
399 false
400 false
401 true
402 false
403 false
404 false
405 false
406 false
407 false
408 false
409 true
410 false
411 false
412 false
413 false
414 false
415 false
416 false
417 false
418 false
419 true
420 false
421 true
422 false
423 false
424 false
425 false
426 false
427 false
428 false
429 false
430 false
431 true
432 false
433 true
434 false
435 false
436 false
437 false
438 false
439 true
440 false
441 false
442 false
443 true
444 false
445 false
446 false
447 false
448 false
449 true
450 false
451 false
452 false
453 false
454 false
455 false
456 false
457 true
458 false
459 false
460 false
461 true
462 false
463 true
464 false
465 false
466 false
467 true
468 false
469 false
470 false
471 false
472 false
473 false
474 false
475 false
476 false
477 false
478 false
479 true
480 false
481 false
482 false
483 false
484 false
485 false
486 false
487 true
488 false
489 false
490 false
491 true
492 false
493 false
494 false
495 false
496 false
497 false
498 false
499 true
500 false
501 false
502 false
503 true
504 false
505 false
506 false
507 false
508 false
509 true
510 false
511 false
512 false
513 false
514 false
515 false
516 false
517 false
518 false
519 false
520 false
521 true
522 false
523 true
524 false
525 false
526 false
527 false
528 false
529 false
530 false
531 false
532 false
533 false
534 false
535 false
536 false
537 false
538 false
539 false
540 false
541 true
542 false
543 false
544 false
545 false
546 false
547 true
548 false
549 false
550 false
551 false
552 false
553 false
554 false
555 false
556 false
557 true
558 false
559 false
560 false
561 false
562 false
563 true
564 false
565 false
566 false
567 false
568 false
569 true
570 false
571 true
572 false
573 false
574 false
575 false
576 false
577 true
578 false
579 false
580 false
581 false
582 false
583 false
584 false
585 false
586 false
587 true
588 false
589 false
590 false
591 false
592 false
593 true
594 false
595 false
596 false
597 false
598 false
599 true
600 false
601 true
602 false
603 false
604 false
605 false
606 false
607 true
608 false
609 false
610 false
611 false
612 false
613 true
614 false
615 false
616 false
617 true
618 false
619 true
620 false
621 false
622 false
623 false
624 false
625 false
626 false
627 false
628 false
629 false
630 false
631 true
632 false
633 false
634 false
635 false
636 false
637 false
638 false
639 false
640 false
641 true
642 false
643 true
644 false
645 false
646 false
647 true
648 false
649 false
650 false
651 false
652 false
653 true
654 false
655 false
656 false
657 false
658 false
659 true
660 false
661 true
662 false
663 false
664 false
665 false
666 false
667 false
668 false
669 false
670 false
671 false
672 false
673 true
674 false
675 false
676 false
677 true
678 false
679 false
680 false
681 false
682 false
683 true
684 false
685 false
686 false
687 false
688 false
689 false
690 false
691 true
692 false
693 false
694 false
695 false
696 false
697 false
698 false
699 false
700 false
701 true
702 false
703 false
704 false
705 false
706 false
707 false
708 false
709 true
710 false
711 false
712 false
713 false
714 false
715 false
716 false
717 false
718 false
719 true
720 false
721 false
722 false
723 false
724 false
725 false
726 false
727 true
728 false
729 false
730 false
731 false
732 false
733 true
734 false
735 false
736 false
737 false
738 false
739 true
740 false
741 false
742 false
743 true
744 false
745 false
746 false
747 false
748 false
749 false
750 false
751 true
752 false
753 false
754 false
755 false
756 false
757 true
758 false
759 false
760 false
761 true
762 false
763 false
764 false
765 false
766 false
767 false
768 false
769 true
770 false
771 false
772 false
773 true
774 false
775 false
776 false
777 false
778 false
779 false
780 false
781 false
782 false
783 false
784 false
785 false
786 false
787 true
788 false
789 false
790 false
791 false
792 false
793 false
794 false
795 false
796 false
797 true
798 false
799 false
800 false
801 false
802 false
803 false
804 false
805 false
806 false
807 false
808 false
809 true
810 false
811 true
812 false
813 false
814 false
815 false
816 false
817 false
818 false
819 false
820 false
821 true
822 false
823 true
824 false
825 false
826 false
827 true
828 false
829 true
830 false
831 false
832 false
833 false
834 false
835 false
836 false
837 false
838 false
839 true
840 false
841 false
842 false
843 false
844 false
845 false
846 false
847 false
848 false
849 false
850 false
851 false
852 false
853 true
854 false
855 false
856 false
857 true
858 false
859 true
860 false
861 false
862 false
863 true
864 false
865 false
866 false
867 false
868 false
869 false
870 false
871 false
872 false
873 false
874 false
875 false
876 false
877 true
878 false
879 false
880 false
881 true
882 false
883 true
884 false
885 false
886 false
887 true
888 false
889 false
890 false
891 false
892 false
893 false
894 false
895 false
896 false
897 false
898 false
899 false
900 false
901 false
902 false
903 false
904 false
905 false
906 false
907 true
908 false
909 false
910 false
911 true
912 false
913 false
914 false
915 false
916 false
917 false
918 false
919 true
920 false
921 false
922 false
923 false
924 false
925 false
926 false
927 false
928 false
929 true
930 false
931 false
932 false
933 false
934 false
935 false
936 false
937 true
938 false
939 false
940 false
941 true
942 false
943 false
944 false
945 false
946 false
947 true
948 false
949 false
950 false
951 false
952 false
953 true
954 false
955 false
956 false
957 false
958 false
959 false
960 false
961 false
962 false
963 false
964 false
965 false
966 false
967 true
968 false
969 false
970 false
971 true
972 false
973 false
974 false
975 false
976 false
977 true
978 false
979 false
980 false
981 false
982 false
983 true
984 false
985 false
986 false
987 false
988 false
989 false
990 false
991 true
992 false
993 false
994 false
995 false
996 false
997 true
998 false
999 false

22
Python/OOP3/task1.py Normal file
View File

@ -0,0 +1,22 @@
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def move(self):
pass
class Cat(Animal):
def move(self):
print("No. Cat doesn't want to move his furry arse")
class Dog(Animal):
def move(self) -> None:
print("Dog's running towards you")
animals: list[Animal] = [Cat(), Dog()]
for animal in animals:
animal.move()

7
Python/OOP3/task2py Normal file
View File

@ -0,0 +1,7 @@
class SomeClass(object):
@classmethod
def hello(cls):
print("It's", cls.__name__)
SomeClass.hello()

9
Python/OOP3/task3.py Normal file
View File

@ -0,0 +1,9 @@
class SomeClass(object):
@staticmethod
def hello():
print("Hello world")
SomeClass.hello()
obj = SomeClass()
obj.hello()

17
Python/OOP3/task4.py Normal file
View File

@ -0,0 +1,17 @@
class Person:
def __init__(self, name: str):
self._name = name
@property
def name(self) -> str:
return self._name
@name.setter
def name(self, new_name) -> None:
self._name = new_name
p = Person("abc")
print(p.name)
p.name = "10"
print(p.name)

14
Python/OOP3/task5.py Normal file
View File

@ -0,0 +1,14 @@
from typing import Self
class CrazyNumber:
def __init__(self, number):
self.number = number
def __sub__(self, other: Self) -> float:
return self.number // other.number
n1 = CrazyNumber(1243)
n2 = CrazyNumber(2)
print(n1 - n2)

13
Python/OOP3/task6.py Normal file
View File

@ -0,0 +1,13 @@
class Singleton(object):
obj = None
def __new__(cls, *args, **kwards):
if cls.obj is None:
cls.obj = object.__new__(cls)
return cls.obj
sing1 = Singleton()
sing2 = Singleton()
print(id(sing1))
print(id(sing2))

27
Python/OOP3/test.cpp Normal file
View File

@ -0,0 +1,27 @@
#include <cmath>
#include <iostream>
bool isPrime(const int number) {
if (number == 1) {
return false;
}
if (number == 2 || number == 3) {
return true;
}
if (number % 2 == 0) {
return false;
}
int border = sqrt(number) + 1;
for (int i = 3; i < border; i += 2) {
if (number % i == 0) {
return false;
}
}
return true;
}
int main() {
for (int i = 1; i < 1000; i++) {
std::cout << i << ' ' << (isPrime(i) ? "true" : "false") << '\n';
}
}

View File

@ -0,0 +1,10 @@
a = [12, 34, 542, 12, 63653, 635, 635]
def foo(i):
print(i)
return i
seen = set()
print(not any(i in seen or seen.add(i) for i in a))

View File

@ -0,0 +1,11 @@
from random import randint
import numpy as np
SIZE = 10
a = [randint(0, 100_000) for _ in range(SIZE**2)]
a = np.array(a)
a = a.reshape((SIZE, SIZE))
print(a)
print(np.min(a), np.max(a))

View File

@ -0,0 +1,6 @@
a = [12, 34, 542, 63653, 635, 635, 20]
for id, i in enumerate(a):
if i == 20:
a[id] = 200
break

View File

@ -0,0 +1,16 @@
a = {
12: 30,
30: 40,
50: 60,
70: 80,
}
# Вар 1
for key, value in a.items():
print(a)
# Вар 2
for key in a:
print(key)
for value in a.values():
print(value)

View File

@ -0,0 +1,2 @@
a = {i: i**2 for i in range(1, 16)}
print(a)

View File

@ -0,0 +1,4 @@
with open("task5.txt") as f:
nums = map(int, f.read().split())
print(sum(nums))

View File

@ -0,0 +1 @@
10 20 30

View File

@ -0,0 +1,21 @@
from dataclasses import dataclass
from typing import Self
@dataclass
class Foo:
a: int
b: int
def print(self: Self) -> None:
print(self.a, self.b)
def max(self: Self) -> int:
return max(self.a, self.b)
def sum(self: Self) -> int:
return self.a + self.b
def change_vals(self: Self, a: int, b: int) -> None:
self.a = a
self.b = b

View File

@ -0,0 +1,3 @@
a = [10, 12, 34, 542, 63653, 635, 635]
b = [21, 5165, 623, 542, 10]
print(sorted(set(a).intersection(b)))

View File

@ -0,0 +1,4 @@
def sum_range(a: int, b: int, /) -> int:
if a > b:
a, b = b, a
return sum(range(a, b))

View File

@ -0,0 +1,4 @@
from collections import Counter
a = [12, 34, 542, 63653, 635, 635]
print(Counter(a))

4
Python/requirements.txt Normal file
View File

@ -0,0 +1,4 @@
attrs
black
flake8
isort

1
Python/telegram/.env Normal file
View File

@ -0,0 +1 @@
TG_TOKEN=5684427592:AAEwHcoWyLCaGi7uaT7Eso_BDzpFusWE6jY

39
Python/telegram/main.py Normal file
View File

@ -0,0 +1,39 @@
from io import BytesIO
from os import environ
import dotenv
from aiogram import Bot, Dispatcher, executor, types
from httpx import AsyncClient
dotenv.load_dotenv()
bot = Bot(token=environ["TG_TOKEN"])
dp = Dispatcher(bot)
@dp.message_handler(commands=["start"])
async def start(mes: types.Message) -> None:
await mes.reply(
f"Привет {mes.from_user.get_mention()}",
parse_mode="MarkdownV2",
)
@dp.message_handler(commands=["send_pic"])
async def send_pic(mes: types.Message) -> None:
async with AsyncClient() as client:
response = await client.get(
"https://loremflickr.com/320/240/dog",
follow_redirects=True,
)
photo = BytesIO(response.content)
photo.name = "dog.jpg"
await mes.reply_photo(photo, "Here you go")
@dp.message_handler(content_types=types.ContentTypes.TEXT)
async def message_handler(mes: types.Message) -> None:
await bot.send_message(mes.chat.id, mes.text)
print(mes.text)
executor.start_polling(dp)

27
Python/telegram/task1.py Normal file
View File

@ -0,0 +1,27 @@
import asyncio
from typing import Never
async def print_nums() -> Never:
num = 1
while True:
num += 1
print(num)
await asyncio.sleep(0.1)
async def print_time() -> Never:
count = 0
while True:
if not count % 3:
print(f"Time {count}")
count += 1
await asyncio.sleep(1)
async def main() -> Never:
await asyncio.gather(print_nums(), print_time())
if __name__ == "__main__":
asyncio.run(main())

37
Python/telegram/task2.py Normal file
View File

@ -0,0 +1,37 @@
import asyncio
import pathlib
from time import perf_counter
import aiofiles
from httpx import AsyncClient, Response
async def get_file(client: AsyncClient, url: str) -> Response:
return await client.get(url, follow_redirects=True)
async def write_file(response: Response) -> None:
file_name = response.url.path.rsplit("/", 1)[1]
print(file_name)
async with aiofiles.open(f"photos/{file_name}", "wb") as f:
await f.write(response.content)
async def download_file(client: AsyncClient, url: str) -> None:
await write_file(await get_file(client, url))
async def main():
pathlib.Path("photos").mkdir(exist_ok=True)
async with AsyncClient() as client:
await asyncio.gather(
*(
download_file(client, "https://loremflickr.com/320/240")
for _ in range(10)
)
)
start = perf_counter()
asyncio.run(main())
print(perf_counter() - start)

83
Unreal/Unreal.md Normal file
View File

@ -0,0 +1,83 @@
# Unreal (may the force be with us) Engine
* Unreal engine был создан Epic Games
* Первая игра - Unreal
* На нём делают много всего
## Ассет
Любой ресурс для создания аудио-визуального контента
## Меш
Геометрическая структура из вершин (vertices) и полигонов. Представляют собой сетку из этих самых полигонов
## Материалы
Материалы определяют цвет, прозрачность, блеск объектов. Могут быть наложены на Меши и частицы
**Параметры:**
* Base color
* Metallic
* Specular
* Roughness
## Ноды (узлы)
События, вызовы функции, управление потоками и переменные. Определяют функцианал графика и схемы, которые его содержат
## Текстурирование
Для текстурирования используется цветовая модель RGB (Red Green Blue)
## Частицы
Используются для взрывов, дождя, дыма. В unreal Engine используется Cascade
## Blueprints
### Типы данных
* boolean
* byte
* integer
* float
* name (название объекта)
* string
* text (произвольная длина)
* vector (кординаты)
* rotator (поворот)
* transform (положение, поворот, маштаб)
### Массив
Операции:
* get ref
* get copy
* set
* add
* insert
* remove
* clear
* P.S. тоже, что и в питоне
### Циклы
аналогично:
* for
* while
### Условный оператор
Они есть
* branch
* switch
* select
### Логические операторы
Классический набор

12
Unreal/foo.py Normal file
View File

@ -0,0 +1,12 @@
def prettify(val: str) -> str:
return val.removeprefix("<!--").removesuffix("-->").strip()
lines = []
while True:
try:
lines.append(prettify(input()))
except EOFError:
break
print("\n".join(lines))

377
sql/Databases.md Normal file
View File

@ -0,0 +1,377 @@
# Базы данных
## Основы
### Основные определения
*База данных* - набор структурированной информации или данных, которые хранятся в компьютерной системе
*СУБД* - система управления БД
*SQL* - основной интерфейс работы с реляционными базами данных
*Транзакция* - Последовательность операция над БД, рассматриваемых СУБД, как одно целое
### Классификация
* Простейшие базы двнных
* SQL базы данных (реляционные)
* NoSQL базы данных (нереляционные)
* Комбинированные типы
### Реляционные базы данных
> Набор данных с предопределенными связями между ними. Эти данные организованны в виде набора таблиц, состоящих из столбцов и строк. В таблицах хранится информация об объектах, представленных в виде данных
### NoSQL базы данных
> База данных, в которой не используется табличная система строк и столбцов
### Основные функции
* Управление данными во внешней памяти
* Управление данными в оперативной памяти
* Управление транзакциями
* Ведение журнала выполнения операций в базе данных
* поддержка языков баз данных
### Основные БД
* SQL
* Oracle (Вы любите деньги больше, чем надо)
* Microsoft SQL Server (Вы любите деньги больше, чем надо)
* PostgreSQL (Халява)
* NoSQL
* MongoDB
* DB2
* Cassandra
### Первичный и внеший ключ
* *Ключ* - это колонка или колонки,не имеющие дублирующих значений.
* *Первичный ключ* - это поле или набор полей со значением, которые являются уникальными для всей таблицы.
* *Естественные* являются свойствами моделируемого объекта интересными сами по себе, даже если никто не стремится сделать из них ключ
* *Искусственные (суррогатные)* - придуманные коды для ссылки на данные или объекты
* *Внешний ключ* - столбец или группа столбцов, используемых в SQL БД для связи данных между таблицами
### Типы связи в SQL БД
1. "Один к одному"
Образуется когда ключевой столбец присутствует в другой таблице, в которой тоже является ключом либо свойствами столбца задана его уникальность. Используется, когда нужно разделить данные одной таблицы на несколько отдельных таблиц.
2. "Один к многим"
Одной записи первой таблицы соответсвует неколько записей в другой таблие. Символ ключа связи указывает, что таблица,к которой этот конец прилегает, находится на стороне "один", а символ бесконечности находится на стороне "многие".
3. "Многие к многим"
Если нескольким записям одно таблицы соответсвует несколько запясей из другой таблицы. Связь организовывается посредством связывающей таблицы.
### Реляционная алгебра. Операции
* *Проекция* - это столбец фильтра. Получаем содержимое только части столбцов.
* *Выборка* - это фильтрование строки. Включает в себя выбор строк.
* *Декартово произведение* - Каждому элементу из множества R сопоставлен в соответсвие определенный элемент из множества S, то возникает множество, сопоставленное из пар элементов множества R и S.
* *Объединение* - это отношение, которое включает в себя все кортежи обоих отношений без повторов.
* *Вычитание* - это разность односхемных отношений R и S назывется множество кортежей R, не входящих в S.
* *Пересечение* - это пересечение двух односхемных отношений R и S есть подмножество кортежей, принадлежащих обоим отношениям. Это можно выразить через разность: R-(R-S).
* *Соединение* - эта операция определяет подмножество декартова произведения двух разносхемных отношений. Предназначена для обеспечения выборки данных из двух таблиц и включение этих данных в один результативный набор.
### Нормализация и Денормализация
*Нормальная форма* - Свойство отношения, характеризующее его с точки зрения избыточности
*Нормализация* - процесс минимизации избыточности отношения(приведение к НФ)
*Денормализация* - намеренное приведение структуры базы данных в состояние, не соотвествующее критериям нормализации
## Основы синтаксиса
### Идентификаторы и ключевые слова
* *SELECT*, *UPDATE* и *VALUES* являются примерами ключевых слов, то есть слов, имеющих фиксированное значение в языке SQL
* Ключевые слова и идентификаторы без кавычек воспринимаются системой без учета регистра.
* Есть и другой тип идентификаторов: отделённые идентификаторы, или идентификаторы в ковычках
```sql
UPDATE my_table SET a = 5;
UPDATE "my_table" SET "a" = 5;
```
### Константы
* *Строковая константа в SQL* - обычная последовательность символов, заключённая в одинарные ковычки
```sql
SELECT 'foobar'
```
* Ещё один способ записи строковых констант - "заключение строк в доллары".
```sql
$$Жанна д Арк$$
```
* Числовые константы
* 42
* 3.5
* 5e2
* 1.925e-3
* Битовые константы похожи на обычные с дополнительной буквой перед опострофом, показывающих систему счисления
* B'1001'
* X'1FF'
* Константы: Со спецпоследовательностями (начинается с буквы E перед апострофом)
* \b - "забой" (BackSpace)
* \f - подача формы
* \n - новая строка
* \r - возврат каретки
* \t - табуляция
### Операторы
* ^ - возведение в степень
* IS TRUE, IS FALSE
* ISNULL
### Специальные знаки (Вот вооще не операторы)
**Вот с#ка не забудь про ;**
### Коментарии
```sql
-- Коментарий
```
```sql
/* многострочный
коментарий */
```
## Типы данных
### Числовые типы
* *smallint* (2 байта) - целое в небольшом диапозоне
* *integer* (4 байта) - типичный выбор для целых чисел
* *bigint* (8 байт) - целое в большом диапозоне
* *numeric* / *decimal* (переменный) - десятичное с указанной точностью
* *real* (4 байта) - десятичное с переменной точностью
* *double precision* (8 байт) - вещественное число с переменной точностью
* *smallserial* (2 байта) - небольшое целое с автоувелечением
* *serial* (4 байта) - целое с автоувеличением
* *bigserial* (8 байт) - большое целое с автоувеличением
* *money* - два знака после запятой, денежный тип
### Символьные типы данных
* *character varing(n)* / *varchar(n)* - строка ограниченной переменной длины
* *character(n)* / *char(n)* - строка фиксированной длины с пробелами
* *text* - строка неограничсенной переменной длины
### Логический тип данных
* *boolean* (1 байт) - TRUE / FALSE / NULL
### Типы данных даты и времени
* *date* - дата без времени YYYY-MM-DD
* *timestamp* - дата и время с точностью до микросекунды
* *interval* - интервал между датами
* *time* - время без даты. Удобный тип данных чем-то похожий на interval, который работает по модулю 24 (часа), то есть интервал, в котором отстутствуют дни
## DDL - Data Defintion Language
* CREATE - создание таблиц
* ALTER - используется для изменения объектов БД
* DROP - оспользуется для удаления БД
### Примеры
* Создать базу данных:
```sql
CREATE DATABASE test;
```
* Создать таблицу
```sql
CREATE TABLE films(
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL,
did integer NOT NULL,
date_prod date,
kind varchar(10),
len interval hour to minute
);
```
* Добавить столбец
```sql
ALTER TABLE distributors ADD COLUMN adress varchar(30);
```
* Удалить столбец
```sql
ALTER TABLE distributors DROP COLUMN adress RESTRICT;
```
* Изменить тип данных
```sql
ALTER TABLE distributors
ALTER COLUMN address TYPE varchar(80),
ALTER COLUMN name TYPE varchar(100);
```
* Создать таблицу, если нет с таким же названием:
```sql
CREATE TABLE IF NOT EXISTS ... ;
```
* Получить всё из таблицы:
```sql
SELECT * FROM authors;
```
* Вставить что-то в таблицу:
```sql
INSERT INTO authors VALUES (1, 'Лёва Толстый');
```
## Фильтрация и компоновка данных
### Where
> Для осуществления фильтрации в SQL есть специальный оператор *WHERE*
```sql
SELECT * FROM stores WHERE amount > 10
```
### Агрегатные функции
> Агрегатные функции выполняют вычисления над набром значений и возвращает 1 значение. Агрегатные функции игранируют NULL значения (кроме COUNT)
* *СOUNT(\*)* - находит количество строк в запросе
* *COUNT(**expression**)* - находит количество строк в запросе, для которых **expression** не содержит значение NULL;
* *SUM* - сумма значений выьранных столбцов
* *MAX* - максимальное значение определённого столбца
* *MIN* - минимальное значение определённого столбца
* *AVG* - вычисление среднее значение столбца
### Группировка данных (*GROUP BY*)
> *GROUP BY* определяет, как строки будут группироваться, чтобы разделить их на логические наборы, благодаря чему становится возможном выполнение статических вычеслений отдельно в каждой группе
```sql
SELECT age, SUM(salary) as sum FROM workers GROUP BY age;
-- Сумма зарплат для каждого возраста
-- *as sum* меняет название столбца на нужное нам (было бы так, как написанно (SUM(salary)))
```
### Оператор *HAVING*
> Оператор *HAVING* позволяет определять условия выборки уже сгрупированных данных. *HAVING* применяется строго после GROUP_BY и может использовать результаты агрегатных функций
```sql
SELECT model, COUNT(model) as Qty_model, AVG(price) as Avg_price
FROM PC
GROUP BY model
HAVING AVG(price) < 800;
-- Фильтрует столбцы, которые были бы выданы после GROUP BY
```
### Оператор *SORT BY*
> *ORDER BY* используется для сортировки записей в наборе результатов запроса *SELECT*. Сортирует по возрастанию, но, если нужно сделать по убыванию, то используем *DESC* (от английского descending)
```sql
SELECT * FROM Sumproduct ORDER BY Amount DESC, City
-- Значала сортирует по Amount по убыванию, потом по городу по возростанию
```
### *LIMIT* и *OFFSET*
* *LIMIT* - макс количество выданных строк
* *OFFSET* - пропустить первые N строк
### Общий вид
```sql
SELECT столбцы
FROM ТАБЛИЦА
WHERE условие-фильтра
GROUP BY столбцы-для-группировки
HAVING фильтр-груп
ORDER BY столбцы для сортировки
LIMIT N
OFFSET K
```
```sql
SELECT name, AVG(salary) as avg_salary
FROM workers
GROUP BY name
HAVING name != 'JOHN'
ORDER BY avg_salary DESC
LIMIT 5
OFFSET 3
```
## Соединение и объединение таблиц
### *JOIN*
> *JOIN* позволяет соединения двух или более таблиц
#### Виды
* *JOIN* (только пересечение)
* *LEFT JOIN* (всё из первой и пересечение)
* *RIGHT JOIN* (всё из второй таблицы и пересечение)
* *FULL JOIN* (всё из обоих таблиц)
#### Пример
```sql
SELECT * FROM AUTHORS [LEFT/RIGHT/FULL/""] JOIN BOOKS
ON Author.id = Books.author_id
```
### *UNION*
> Выводит результаты двух *SELECT*. Удаляет дубликаты, если не *UNION ALL*. Кол-во и названия строк должны быть одинаковыми
#### Пример *UNION*
```sql
SELECT val1 FROM table1
UNION
SELECT val1 FROM table2
```
### *INTERSECT*
> Возвращает значения, которые выводят оба *SELECT*. Кол-во и названия строк должны быть одинаковыми. Синтаксис как у UNION
### *EXCEPT*
> Возвращает значения, которые выдал первый *SELECT*, но не второй. Кол-во и названия строк должны быть одинаковыми. Синтаксис как у UNION

12
sql/compose.yaml Normal file
View File

@ -0,0 +1,12 @@
services:
db:
image: postgres
environment:
- POSTGRES_USER=tester
- POSTGRES_PASSWORD=example123!
- POSTGRES_DB=testing
ports:
- 5432:5432/tcp
volumes:
- ./data:/var/lib/postgresql/data
restart: always

44
sql/task1.sql Normal file
View File

@ -0,0 +1,44 @@
/* CREATE TABLE IF NOT EXISTS stations(
id INT CONSTRAINT firstkey PRIMARY KEY,
city VARCHAR(21),
state VARCHAR(21),
lat_n INT,
long_w int
);
INSERT INTO stations VALUES (794, 'Kissee Mills', 'MO', 140, 73),
(824, 'Loma Mar', 'CA', 49, 131),
(603, 'Sandy Hook', 'CT', 72, 148),
(478, 'Tipton', 'IN', 34, 98),
(619, 'Arlington', 'CO', 75, 93),
(711, 'Turner', 'AR', 50, 101),
(839, 'Slidell', 'LA', 85, 152),
(411, 'Negreet', 'LA', 99, 105),
(588, 'Glencoe', 'KY', 46, 136),
(665, 'Chelsea', 'IA', 99, 60),
(342, 'Chignik Lagoon', 'AK', 103, 153),
(733, 'Pelahatchie', 'MS', 39, 28),
(441, 'Hanna City', 'IL', 51, 137),
(811, 'Dorrance', 'KS', 102, 122),
(698, 'Albany', 'CA', 50, 80),
(325, 'Monument', 'KS', 71, 142),
(414, 'Manchester', 'MD', 74, 37),
(113, 'Prescott', 'IA', 40, 66),
(971, 'Graettinger', 'IA', 95, 150),
(266, 'Cahone', 'CO', 116, 127),
(617, 'Sturgis', 'MS', 36, 126),
(495, 'Upperco', 'MD', 114, 30),
(473, 'Highwood', 'IL', 27, 151),
(756, 'Garden City', 'AL', 96, 105),
(225, 'Garden City', 'IA', 54, 119);
*/;
SELECT city, state FROM stations;
SELECT SUM(lat_n), SUM(long_W) FROM stations;
SELECT city FROM stations WHERE id % 2 = 0;
SELECT COUNT(city) - COUNT(DISTINCT(city)) FROM stations;
SELECT lat_n FROM stations WHERE lat_n BETWEEN 39 AND 137;
SELECT max(lat_n) FROM stations WHERE lat_n <= 137;
SELECT min(lat_n) FROM stations WHERE lat_n >= 39;
SELECT DISTINCT(city) FROM stations WHERE LOWER(RIGHT(city, 1)) in ('a', 'e', 'i', 'o', 'u', 'y');
SELECT DISTINCT(city) FROM stations WHERE LOWER(RIGHT(city, 1)) IN ('a', 'e', 'i', 'o', 'u', 'y') AND LOWER(LEFT(city, 1)) IN ('a', 'e', 'i', 'o', 'u', 'y');
SELECT DISTINCT(city) FROM stations WHERE LOWER(LEFT(city, 1)) NOT IN ('a', 'e', 'i', 'o', 'u', 'y');

47
sql/task2.sql Normal file
View File

@ -0,0 +1,47 @@
DROP TABLE IF EXISTS Salary CASCADE;
CREATE TABLE Salary(
id INT PRIMARY KEY,
salary INT
);
DROP TABLE IF EXISTS Positions CASCADE;
CREATE TABLE Positions(
id INT PRIMARY KEY,
title VARCHAR(255)
);
DROP TABLE IF EXISTS People;
CREATE TABLE People(
id INT PRIMARY KEY,
name VARCHAR(255),
position_id INT REFERENCES Positions(id),
salary_id INT REFERENCES Salary(id)
);
INSERT INTO Salary VALUES (1, 10000), (2, 20000), (3, 3000);
INSERT INTO Positions VALUES (1, 'Дизайнер'), (2, 'Редактор'), (3, 'Программист');
INSERT INTO PEOPLE VALUES (1, 'Владмир', 1, 1), (2, 'Татьяна', 2, 2), (3, 'Александр', NULL, 2), (4, 'Борис', 2, NULL);
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People JOIN Positions on People.position_id = Positions.id;
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People RIGHT JOIN Positions on People.position_id = Positions.id;
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People LEFT JOIN Positions on People.position_id = Positions.id
EXCEPT
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People JOIN Positions on People.position_id = Positions.id;
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People LEFT JOIN Positions on People.position_id = Positions.id
WHERE People.position_id ISNULL;
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People FULL JOIN Positions on People.position_id = Positions.id
WHERE Positions.id ISNULL OR People.id ISNULL;
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People LEFT JOIN Positions on People.position_id = Positions.id
UNION
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People RIGHT JOIN Positions on People.position_id = Positions.id
EXCEPT
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People JOIN Positions on People.position_id = Positions.id;
SELECT People.id, name, position_id, title, salary_id, salary FROM People
JOIN Positions on People.position_id = Positions.id
JOIN Salary ON People.salary_id = Salary.id;

154
sql/task3.sql Normal file
View File

@ -0,0 +1,154 @@
DROP TABLE IF EXISTS product;
CREATE TABLE product(
maker varchar(10),
model varchar(50) PRIMARY KEY,
type varchar(50)
);
INSERT INTO product VALUES
('A', '1001', 'pc'),
('A', '1002', 'pc'),
('A', '1003', 'pc'),
('A', '2004', 'laptop'),
('A', '2005', 'laptop'),
('A', '2006', 'laptop'),
('B', '1004', 'pc'),
('B', '1005', 'pc'),
('B', '1006', 'pc'),
('B', '2007', 'laptop'),
('C', '1007', 'pc'),
('D', '1008', 'pc'),
('D', '1009', 'pc'),
('D', '1010', 'pc'),
('D', '3004', 'printer'),
('D', '3005', 'printer'),
('E', '1011', 'pc'),
('E', '1012', 'pc'),
('E', '1013', 'pc'),
('E', '2001', 'laptop'),
('E', '2002', 'laptop'),
('E', '2003', 'laptop'),
('E', '3001', 'printer'),
('E', '3002', 'printer'),
('E', '3003', 'printer'),
('F', '2008', 'laptop'),
('F', '2009', 'laptop'),
('G', '2010', 'laptop'),
('H', '3006', 'printer'),
('H', '3007', 'printer');
DROP TABLE IF EXISTS pc;
CREATE TABLE pc(
code INT PRIMARY KEY,
model varchar(50),
speed real,
ram smallint,
hd real,
price real
);
INSERT INTO pc VALUES
(1, '1001',2.66,1024,250,2114),
(2, '1002',2.10,512,250,995),
(3, '1003',1.42,512,80,478),
(4, '1004',2.80,1024,250,649),
(5, '1005',3.20,512,250,630),
(6, '1006',3.20,1024,320,1049),
(7, '1007',2.20,1024,200,510),
(8, '1008',2.20,2048,250,770),
(9, '1009',2.00,1024,250,650),
(10, '1010',2.80,2048,300,770),
(11, '1011',1.86,2048,160,959),
(12, '1012',2.80,1024,160,649),
(13, '1013',3.06,512,80,529);
DROP TABLE IF EXISTS laptop;
CREATE TABLE laptop(
code int PRIMARY KEY,
model varchar(50),
speed real,
ram smallint,
hd real,
screen real,
price real
);
INSERT INTO laptop VALUES
(1, '2001', 2.00, 2048, 240, 20.1, 3673),
(2, '2002', 1.73, 1024, 80, 17.0, 949),
(3, '2003', 1.80, 512, 60, 15.4, 549),
(4, '2004', 2.00, 512, 60, 13.3, 1150),
(5, '2005', 2.16, 1024, 120, 17.0, 2500),
(6, '2006', 2.0, 2048, 80, 15.4, 1700),
(7, '2007', 1.83, 1024, 120, 13.3, 1429),
(8, '2008', 1.60, 1024, 100, 15.4, 900),
(9, '2009', 1.60, 512, 80, 14.1, 680),
(10, '2010', 2.00, 2048, 160, 15.4, 2300);
DROP TABLE IF EXISTS printer;
CREATE TABLE printer(
code int PRIMARY KEY,
model varchar(50),
color boolean,
type varchar(10),
price real
);
INSERT INTO printer VALUES
(1, '3001', true, 'ink-jet', 99),
(2, '3002', false, 'laser', 239),
(3, '3003', true, 'laser', 899),
(4, '3004', true, 'ink-jet', 120),
(5, '3005', false, 'laser', 120),
(6, '3006', true, 'ink-jet', 100),
(7, '3007', true, 'laser', 200);
SELECT model, speed, hd FROM pc WHERE price < 700;
SELECT DISTINCT maker FROM product WHERE type = 'printer';
SELECT model, hd, screen FROM laptop WHERE price > 1000;
SELECT * FROM printer WHERE color;
SELECT maker, speed FROM product JOIN laptop ON product.model = laptop.model
WHERE hd >= 10;
(SELECT product.model, price FROM product JOIN pc ON product.model = pc.model WHERE maker = 'B'
UNION
SELECT product.model, price FROM product JOIN laptop ON product.model = laptop.model WHERE maker = 'B'
UNION
SELECT product.model, price FROM product JOIN printer ON product.model = printer.model WHERE maker = 'B') ORDER BY model;
SELECT DISTINCT maker FROM product WHERE type = 'pc'
EXCEPT
SELECT DISTINCT maker FROM product WHERE type = 'laptop';
SELECT model FROM printer WHERE price = (SELECT MAX(price) FROM printer);
SELECT AVG(speed) FROM pc;
SELECT AVG(speed) FROM laptop WHERE price > 100;
SELECT AVG(speed) FROM product JOIN pc ON product.model = pc.model WHERE maker = 'A';
SELECT DISTINCT maker, type FROM product WHERE maker in
(SELECT maker FROM product GROUP BY maker HAVING COUNT(DISTINCT type) = 1);
SELECT hd FROM pc GROUP BY hd HAVING COUNT(hd) >= 2 ORDER BY hd;
SELECT model, speed FROM laptop WHERE speed < (SELECT MIN(speed) FROM pc);
SELECT maker, price FROM printer JOIN product ON printer.model = product.model WHERE price = (SELECT MIN(price) FROM printer WHERE color) AND color;
SELECT maker, AVG(screen) FROM laptop JOIN product ON laptop.model = product.model GROUP BY maker ORDER BY maker;
SELECT maker FROM product WHERE type = 'pc' GROUP BY maker HAVING COUNT(type) >= 3;
SELECT maker, MAX(price) FROM product JOIN pc ON pc.model = product.model GROUP BY maker ORDER BY maker;
WITH MAX_PRICES as (
SELECT MAX(price) as price FROM laptop UNION SELECT MAX(price) as price FROM pc UNION SELECT MAX(price) as price FROM printer
)
SELECT model FROM laptop WHERE price = (SELECT MAX(price) FROM MAX_PRICES)
UNION
SELECT model FROM PC WHERE price = (SELECT MAX(price) FROM MAX_PRICES)
UNION
SELECT model FROM printer WHERE price = (SELECT MAX(price) FROM MAX_PRICES);
WITH LEAST_RAM as (
SELECT MIN(ram) as ram FROM pc
)
SELECT DISTINCT maker FROM product JOIN pc on product.model = pc.model WHERE
ram = (SELECT ram FROM LEAST_RAM) AND speed = (SELECT MAX(speed) FROM pc WHERE ram = (SELECT ram FROM LEAST_RAM))
INTERSECT
SELECT DISTINCT maker FROM product WHERE type='printer';
SELECT AVG(price) FROM (SELECT price FROM pc JOIN product ON pc.model = product.model WHERE maker = 'A'
UNION
SELECT price FROM laptop JOIN product ON laptop.model = product.model WHERE maker = 'A') as foo;

25
sql/values.py Normal file
View File

@ -0,0 +1,25 @@
(794, 'Kissee Mills', 'MO', 140, 73),
(824, 'Loma Mar', 'CA', 49, 131),
(603, 'Sandy Hook', 'CT', 72, 148),
(478, 'Tipton', 'IN', 34, 98),
(619, 'Arlington', 'CO', 75, 93),
(711, 'Turner', 'AR', 50, 101),
(839, 'Slidell', 'LA', 85, 152),
(411, 'Negreet', 'LA', 99, 105),
(588, 'Glencoe', 'KY', 46, 136),
(665, 'Chelsea', 'IA', 99, 60),
(342, 'Chignik Lagoon', 'AK', 103, 153),
(733, 'Pelahatchie', 'MS', 39, 28),
(441, 'Hanna City', 'IL', 51, 137),
(811, 'Dorrance', 'KS', 102, 122),
(698, 'Albany', 'CA', 50, 80),
(325, 'Monument', 'KS', 71, 142),
(414, 'Manchester', 'MD', 74, 37),
(113, 'Prescott', 'IA', 40, 66),
(971, 'Graettinger', 'IA', 95, 150),
(266, 'Cahone', 'CO', 116, 127),
(617, 'Sturgis', 'MS', 36, 126),
(495, 'Upperco', 'MD', 114, 30),
(473, 'Highwood', 'IL', 27, 151),
(756, 'Garden City', 'AL', 96, 105),
(225, 'Garden City', 'IA', 54, 119)