Knoledge_v0
This commit is contained in:
7
Языки программирования/Curses - ввод текста.md
Normal file
7
Языки программирования/Curses - ввод текста.md
Normal file
@@ -0,0 +1,7 @@
|
||||
В [[curses]] есть возможность создавать специальный обьект для ввода текста.
|
||||
Для ввода текста импортирутется специальный обьект textpad.
|
||||
|
||||
```python
|
||||
from curses.textpad import Textbox
|
||||
```
|
||||
|
||||
113
Языки программирования/Curses - оконные объекты.md
Normal file
113
Языки программирования/Curses - оконные объекты.md
Normal file
@@ -0,0 +1,113 @@
|
||||
В [[Curses]], существуют объекты, сразными параметрами, для разметки и ореинтации в консоли.
|
||||
Ранее добавленный объект `stdscr`, является по сути объектом окна нашей консоли.
|
||||
### Управление выводом текста
|
||||
- `addch(y, x, ch[, attr])` – вывести символ.
|
||||
- `addstr(y, x, str[, attr])` – вывести строку.
|
||||
- `insstr([y, x,] str[, attr])` – вставить строку.
|
||||
- `delch([y, x])` – удалить символ.
|
||||
|
||||
### Управление положением курсора
|
||||
- `move(y, x)` – переместить курсор.
|
||||
- `getyx()` – получить текущие координаты курсора.
|
||||
- `getbegyx()` – координаты верхнего-левого угла окна.
|
||||
- `getmyx()` – размеры окна (строки, колонки).
|
||||
|
||||
### Чтение ввода
|
||||
- `getch([y, x])` – получить символ/код клавиши.
|
||||
- `getkey([y, x])` – то же, но как строка (например `"KEY_LEFT"`).
|
||||
- `getstr([y, x])` – считать строку.
|
||||
- `nodelay(flag)` – включить/выключить неблокирующий ввод.
|
||||
- `timeout(ms)` – задать таймаут ожидания ввода.
|
||||
-
|
||||
### Работа с экраном/окном
|
||||
- `clear()` – очистить окно.
|
||||
- `erase()` – стереть содержимое (похоже на `clear`, но без обновления).
|
||||
- `refresh()` – обновить экран, показать изменения.
|
||||
- `noutrefresh()` – отложенное обновление (для `doupdate()`).
|
||||
- `redrawwin()` – перерисовать окно.
|
||||
|
||||
### Атрибуты и цвет
|
||||
- `attron(attr)` – включить атрибут.
|
||||
- `attroff(attr)` – выключить атрибут.
|
||||
- `attrset(attr)` – установить атрибуты.
|
||||
- `bkgd(ch[, attr])` – задать символ/атрибут фона.
|
||||
- `bkgdset(ch[, attr])` – задать "фон по умолчанию".
|
||||
- `color_pair(n)` – использовать цветовую пару.
|
||||
|
||||
### Управление окнами
|
||||
- `subwin(nlines, ncols, begin_y, begin_x)` – создать подокно.
|
||||
- `derwin(nlines, ncols, begin_y, begin_x)` – "деривативное" окно.
|
||||
- `overlay(win)` – скопировать содержимое (не заменяя пробелы).
|
||||
- `overwrite(win)` – полностью переписать.
|
||||
- `box([vertch, horch])` – нарисовать рамку вокруг окна.
|
||||
- `border([...])` – нарисовать рамку со своими символами.
|
||||
|
||||
### Прокрутка
|
||||
- `scroll([n])` – прокрутить содержимое вверх.
|
||||
- `scrollok(flag)` – разрешить/запретить автопрокрутку.
|
||||
### Дополнительно
|
||||
- `keypad(flag)` – включить/выключить поддержку функциональных клавиш.
|
||||
- `idlok(flag)` – оптимизировать обновление при вставке/удалении строк.
|
||||
- `leaveok(flag)` – разрешить оставлять курсор "где попало".
|
||||
- `touchwin()` – пометить всё окно для перерисовки.
|
||||
- `untouchwin()` – снять метки.
|
||||
- `is_wintouched()` – проверить, есть ли изменения.
|
||||
|
||||
### Обьекты окон
|
||||
|
||||
В curses так же можно создавать окна отдельно от основного.
|
||||
|
||||
Вот несколько обьектов окон для разметки в curses:
|
||||
|
||||
#### newwin - обычное окно
|
||||
|
||||
- Создаётся функцией `curses.newwin(nlines, ncols, begin_y, begin_x)`.
|
||||
- Можно сделать несколько таких окон в пределах `stdscr`.
|
||||
- Каждый объект — независимый `_curses.window`.
|
||||
|
||||
Пример:
|
||||
|
||||
```python
|
||||
win = curses.newwin()
|
||||
```
|
||||
|
||||
#### subwin - подокно
|
||||
|
||||
- Создаётся как "срез" другого окна.
|
||||
- Разделяет память с родительским окном: изменения в одном видны в другом.
|
||||
- Удобно, если хочешь "разбить экран на части".
|
||||
|
||||
Пример:
|
||||
|
||||
```python
|
||||
sub = stdscr.subwin(5, 20, 2, 5)
|
||||
```
|
||||
|
||||
#### derwin - Дочернее окно
|
||||
|
||||
- Похоже на subwin, но привязано к координатам внутри родительского окна, а не всего экрана.
|
||||
- Тоже разделяет буфер с родителем.
|
||||
|
||||
Пример:
|
||||
|
||||
```python
|
||||
der = win.derwin(5, 20, 1, 1)
|
||||
```
|
||||
|
||||
### newpad - Pad
|
||||
|
||||
- "Большое окно", которое может быть больше экрана.
|
||||
- Сам не отображается, нужно явно указывать какую часть показывать через pad.refresh().
|
||||
- Удобно для скроллинга длинных текстов, логов и т. п.
|
||||
|
||||
Пример:
|
||||
|
||||
```python
|
||||
pad = curses.newpad(100, 100)
|
||||
pad.refresh(pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)
|
||||
```
|
||||
|
||||
где
|
||||
- **`pminrow, pmincol`** — координаты внутри pad (откуда брать данные).
|
||||
- **`sminrow, smincol`** — верхний левый угол области на экране, куда будет выведен кусок pad.
|
||||
- **`smaxrow, smaxcol`** — нижний правый угол области на экране (включительно).
|
||||
20
Языки программирования/Curses.md
Normal file
20
Языки программирования/Curses.md
Normal file
@@ -0,0 +1,20 @@
|
||||
Это библиотека написаная для языка [[Python]], которая позволяет писать консольные приложения.
|
||||
|
||||
# Начало
|
||||
для того что бы консольное приложение запустилось необходимо импортировать библиотеку curses. Так же можно импортировать обьект wrapper, для удобства, который позволит обрабатывать ваше приложение, что по сути является оберткой.
|
||||
|
||||
```python
|
||||
import curses
|
||||
from curses import wrapper
|
||||
```
|
||||
|
||||
Действия происходят внутри функции main, в котороую wrapper помещает объект - текущее окно консоли, с которым и происходит основное взаимодействие.
|
||||
|
||||
```python
|
||||
def main(stdscr): # Созддаем функцию с объектом окна консоли stdscr
|
||||
pass
|
||||
wrapper(main) # Оборачиваем функцию в wrapper
|
||||
```
|
||||
|
||||
# Возможности:
|
||||
### [Оконные объекты](Curses%20-%20оконные%20объекты)
|
||||
9
Языки программирования/Алгоритм сортировки массива.md
Normal file
9
Языки программирования/Алгоритм сортировки массива.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Это алгоритм для упорядочивания элементов в массиве.
|
||||
#### Виды алгоритмов сортировки
|
||||
В [языках программирования](язык%20программирования) существует множество способов сортировки массива, у каждого своя область применения.
|
||||
- [[Сортировка пузырьком]]
|
||||
- [[Сортировка перемешиванием]]
|
||||
- [[Сортировка вставками]]
|
||||
- [[Блочная сортировка]]
|
||||
- [[Быстрая сортировка]]
|
||||
- [[Сортировка Шелла]]
|
||||
2
Языки программирования/Двоичный код.md
Normal file
2
Языки программирования/Двоичный код.md
Normal file
@@ -0,0 +1,2 @@
|
||||
Это способ представления информации с помощью двух символов: 0 и 1.
|
||||
Именно в таком виде компьютер хранит и обрабатывает любые данные: числа, текст, изображения, звук, программы. Двоичный код часто изпользуется в [языках программирования](Язык%20программирования).
|
||||
32
Языки программирования/Оценка сложности алгоритма.md
Normal file
32
Языки программирования/Оценка сложности алгоритма.md
Normal file
@@ -0,0 +1,32 @@
|
||||
Это определение асимптотической сложности — того, как растут время или объём памяти при увеличении размера входных данных. Эта оценка используется для подсчета сложности выполнения функций в [языках программирования](Язык%20программирования).
|
||||
Функция временной сложности в некоторых случаях может быть определена точно, но в большинстве своем это бессмысленно. Поэтому входные данные всегда $n\ ->\infty$.
|
||||
|
||||
## Время выполнение задачи
|
||||
|
||||
#### Полиномиальное время
|
||||
Алгоритм типа: $O(n^k)$
|
||||
Алгоритмы которые решаются за полиномиальное время. Практически решаемые задачи с реальными данным, сложность.
|
||||
###### Характеристики:
|
||||
- Рост времени - умеренный
|
||||
- Предсказуемое и стабильное время работы
|
||||
- Большинство классических алгоритмов работают за это время
|
||||
- Не требуют перебора всех вариантов
|
||||
- Можно применять оптимизации, динамическое программирование, жадные стратегии.
|
||||
###### Примеры задач:
|
||||
- Сортировка массива - $O(nlog(n))$
|
||||
- Поиск кратчайшего пути - $O(n+m)$
|
||||
- Умножение матриц - $O(n^3)$
|
||||
- Проверка простаты - полиномиальный тест
|
||||
|
||||
#### Экспоненциальное время
|
||||
Алгоритм типа $O(k^n),O(n!)$
|
||||
Алгоритмы которые решаются за экспоненциальное время. Такие алгоритмы практически не решаемые с реальными данными.
|
||||
|
||||
###### Характеристики:
|
||||
- Рост времени - взрывной
|
||||
- Алгоритм часто основан на полном переборе вариантов
|
||||
###### Примеры задач
|
||||
- Перебор всех подмножеств $O(2^n)$
|
||||
- Задача коммивояжера перебором - $O(n!)$
|
||||
- Раскрытие графа brut force
|
||||
- SAT полный перебор
|
||||
1
Языки программирования/Парадигма программирования.md
Normal file
1
Языки программирования/Парадигма программирования.md
Normal file
@@ -0,0 +1 @@
|
||||
Это совокупность идей и понятий, которые определяют стиль написания программ на [языке программирования](Язык%20программирования). Стиль - это подход к решению задач, самые популярные это [императивный](Императивность) и [декларотивный](Декларотивность).
|
||||
@@ -0,0 +1,54 @@
|
||||
Компьютер воспринимает все данные в виде [двоичного кода](двоичный%20код), в том числе из цифры
|
||||
|
||||
## Представление целых чисел
|
||||
#### 1. Натуральные числа (unsignet)
|
||||
Диапазон значений:
|
||||
$N=\begin{cases}N\geqslant0\\ N<2^N\end{cases}$ - где N число бит. $2^N-1$ - Максимальное число
|
||||
`Пример: 13 в 8 битной системе, это - 1101`
|
||||
#### 2. Целые числа (signet)
|
||||
Есть три системы представления отрицательных чисел:
|
||||
1. Прямой код (sign-magnitude) - меняем последний бит числа в системе разрядности на 1, для отрицательных чисел, тем самым отмечая число как "отрицательное"
|
||||
Данная система используется для обучения, но в компьютере числа так не хранятся
|
||||
`Пример: 33 (16 bit) = 100001; -33 (16 bit) = 1000000000100001`
|
||||
2. Обратный код (one\`s complement) - реверсивно записываем биты, для отрицательных чисел, меняя 0 на 1 и наоборот.
|
||||
Данная система так же не используется в компьютере
|
||||
`Пример: 33 (16 bit) = 100001; -33 (16 bit) = 1111111111011110`
|
||||
3. Дополнительный код (two\`s compliment) - реверсивно записываем биты, для отрицательных чисел, меня 0 на 1 и наоборот, а так же сдвигаем все числа, увеличивая на 1 бит.
|
||||
Такая система используется во всех современных компьютерах, она удобна для вычислений.
|
||||
`Пример: 33 (16 bit) = 100001; -33 (16 bit) = 1111111111011111`
|
||||
|
||||
## Перевод чисел в двоичную систему счисления
|
||||
1. Перевод из 10 в 2:
|
||||
1. Раскладываем числа на сумму степеней двоек
|
||||
$13=8+4+1=2^3+2^2+2^0$ (8 bit, из 2 в 10)
|
||||
2. Каждой степени двойки приравниваем порядковый бит
|
||||
$0_7 0_6 0_5 0_4 0_3 0_2 0_1 0_0$
|
||||
$2^3+2^2+2^0 = 0_7 0_6 0_5 0_4 1_3 1_2 0_1 1_0$
|
||||
2. Перевод из $2^N$ в 2:
|
||||
1. Раскладываем число на составляющие цифры:
|
||||
$123_{16}=1_2 2_1 3_0$ (16 bit, из 16 в 2)
|
||||
2. Каждую цифру приравниваем к N битам в двоичном коде
|
||||
$\begin{cases}1_2=0001\\ 2_1=0010\\ 3_0=0011\end{cases}=>1|0010|0011_2$
|
||||
3. Перевод из N в 2:
|
||||
1. Переводим число из N в 10
|
||||
$123_7=1\cdot7^2+2\cdot7^1+3\cdot7^0=66_10$ (8bit, из 7 в 2)
|
||||
2. Переводим из 10 в 2
|
||||
$66_10=64+2=2^6+2^1=1000010_2$
|
||||
## Перевод чисел из двоичной системы счисления
|
||||
1. Перевод из 2 в 10:
|
||||
1. Каждой степени двойки приравниваем порядковый бит
|
||||
$0_7 0_6 0_5 0_4 0_3 0_2 0_1 0_0$
|
||||
$0_7 0_6 0_5 0_4 1_3 1_2 0_1 1_0=2^3+2^2+2^0$ (8bit, из 2 в 10)
|
||||
2. Раскладываем числа на сумму степеней двоек
|
||||
$2^3+2^2+2^0=8+4+1=13$
|
||||
2. Перевод из 2 в $2^N$:
|
||||
1. Раскладываем число на составляющие N биты:
|
||||
$1|0010|0011_2=>\begin{cases}1_2=0001\\ 2_1=0010\\ 3_0=0011\end{cases}$ - (16 bit, из 16 в 2)
|
||||
2. Собираем из полученных цифр число
|
||||
$1_2 2_1 3_0=123_{16}$
|
||||
3. Перевод из 2 в N
|
||||
1. Переводим из 2 в 10:
|
||||
$1000010_2=64+2=2^6+2^1=66_10$ - (8bit, из 2 в 7)
|
||||
2. Переводим число из N в 10
|
||||
$66_10=1\cdot7^2+2\cdot7^1+3\cdot7^0=123_7$
|
||||
|
||||
1
Языки программирования/Семантика.md
Normal file
1
Языки программирования/Семантика.md
Normal file
@@ -0,0 +1 @@
|
||||
совокупность правил, определяющих смысл [синтаксически](Синтаксис) корректных конструкций [языка](Язык%20программирования).
|
||||
1
Языки программирования/Синтаксис.md
Normal file
1
Языки программирования/Синтаксис.md
Normal file
@@ -0,0 +1 @@
|
||||
Совокупность правил, определяющих допустимые конструкции [языка](Язык%20программирования). В отличи от [семантики](Семантика)
|
||||
2
Языки программирования/Словарь.md
Normal file
2
Языки программирования/Словарь.md
Normal file
@@ -0,0 +1,2 @@
|
||||
Это динамическая структура данных python информация в которой хранится в виде пары: "ключ": "значение"
|
||||
значения повторяться могут, ключи - нет.
|
||||
2
Языки программирования/Сортировка вставками.md
Normal file
2
Языки программирования/Сортировка вставками.md
Normal file
@@ -0,0 +1,2 @@
|
||||
Это алгоритм, в котором элементы входной последовательности просматриваются по одному, и каждый новый поступивший элемент размещается в подходящее место среди ранее упорядоченных элементов. [Сложность алгоритма](Оценка%20сложности%20алгоритма): $O(n^2)$.
|
||||
#### Алгоритм
|
||||
29
Языки программирования/Сортировка перемешиванием.md
Normal file
29
Языки программирования/Сортировка перемешиванием.md
Normal file
@@ -0,0 +1,29 @@
|
||||
Сортировка перемешиванием, или шейкерная сортировка, или двунаправленная - разновидность [Сортировки пузырьком](Сортировка%20пузырьком). [Сложность алгоритма](Оценка%20сложности%20алгоритма): $O(n^2)$.
|
||||
#### Алгоритм
|
||||
Анализируя метод пузырьковой сортировки, можно отметить два обстоятельства.
|
||||
|
||||
1. Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, её можно исключить из рассмотрения.
|
||||
|
||||
2. Во-вторых, при движении от конца массива к началу минимальный элемент «всплывает» на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо.
|
||||
#### Пример
|
||||
![[sort_shaker.gif]]
|
||||
#### В виде кода
|
||||
|
||||
```python
|
||||
def shaker_sort(a):
|
||||
n = len(a)
|
||||
left = 0
|
||||
right = n - 1
|
||||
while left < right:
|
||||
# Проход слева направо
|
||||
for i in range(left, right):
|
||||
if a[i] > a[i + 1]:
|
||||
a[i], a[i + 1] = a[i + 1], a[i]
|
||||
right -= 1
|
||||
|
||||
# Проход справа налево
|
||||
for i in range(right, left, -1):
|
||||
if a[i] < a[i - 1]:
|
||||
a[i], a[i - 1] = a[i - 1], a[i]
|
||||
left += 1
|
||||
```
|
||||
19
Языки программирования/Сортировка пузырьком.md
Normal file
19
Языки программирования/Сортировка пузырьком.md
Normal file
@@ -0,0 +1,19 @@
|
||||
сортировка простыми обменами, метод сортировки обменами. По сравнению с другими алгоритмами считается простейшим для понимания и реализации. Эффективен для массивов небольшого размера. n - размер массива, количество элементов массива. [Сложность алгоритма](Оценка%20сложности%20алгоритма): $O(n^2)$.
|
||||
#### Алгоритм
|
||||
Выполняется некоторое количество проходов по массиву - начиная от начала массива, перебираются пары соседних элементов массива. Если 1-й элемент пары больше 2-го, элементы переставляются (выполняется обмен).
|
||||
|
||||
Пары элементов массива перебираются (проходы по массиву повторяются) либо $(n-1)$ раз, либо до тех пор, пока на очередном проходе не обнаружится, что более не требуется выполнять перестановки (обмены) (массив отсортирован).
|
||||
|
||||
При каждом проходе алгоритма по внутреннему циклу очередной наибольший элемент массива ставится на своё место в конце массива рядом с предыдущим «наибольшим элементом», а наименьший элемент перемещается на одну позицию к началу массива (как бы «всплывает» до нужной позиции, как пузырёк в воде - откуда и название алгоритма
|
||||
#### Пример
|
||||
![[sort_bubble.gif]]
|
||||
#### В виде кода
|
||||
|
||||
```python
|
||||
def bubble_sort(a):
|
||||
n = len(a)
|
||||
for i in range(n):
|
||||
for j in range(0, n - 1 - i):
|
||||
if a[j] > a[j + 1]:
|
||||
a[j], a[j + 1] = a[j + 1], a[j]
|
||||
```
|
||||
@@ -0,0 +1,34 @@
|
||||
Это два разных подхода к тому, как [языки программирования](Язык%20программирования) работают с [типами данных](Типы%20данных.md) (числа, строки, списки и т.п.).
|
||||
|
||||
## Статическая типизация
|
||||
Тип переменной известен на этапе компиляции, до запуска программы.
|
||||
|
||||
Примеры языков: C, C++, Java, Rust, Go, C#.
|
||||
#### Особенности
|
||||
- Типы переменных объявляются заранее.
|
||||
- Ошибки несоответствия типов обнаруживаются **до запуска**.
|
||||
- Код работает быстрее.
|
||||
- Программист должен строго следить за типами.
|
||||
### Плюсы
|
||||
- Раннее обнаружение ошибок.
|
||||
- Быстрая работа.
|
||||
- Легче оптимизировать.
|
||||
### Минусы
|
||||
- Много “служебного” кода.
|
||||
- Менее гибко.
|
||||
|
||||
## Динамическая типизация
|
||||
**Тип переменной определяется во время выполнения программы**.
|
||||
|
||||
Примеры: **Python, JavaScript, Ruby, PHP, Lua**.
|
||||
#### Особенности
|
||||
- Можно присвоить переменной значение любого типа.
|
||||
- Ошибки типов проявляются только во время выполнения.
|
||||
- Код гибче и короче.
|
||||
### Плюсы
|
||||
- Гибкость.
|
||||
- Быстрая разработка.
|
||||
- Меньше кода.
|
||||
### Минусы
|
||||
- Ошибки типов могут проявиться поздно.
|
||||
- Немного медленнее, потому что типы проверяются на ходу.
|
||||
23
Языки программирования/Структуры данных.md
Normal file
23
Языки программирования/Структуры данных.md
Normal file
@@ -0,0 +1,23 @@
|
||||
Это способ хранения данных (тех же переменных) в памяти компьютера, который позволяет эффективно организовать работу функций с данными.
|
||||
|
||||
## Типы структур данных
|
||||
1. Простые
|
||||
- Числовые
|
||||
- Символьные
|
||||
- Логические
|
||||
- Интервалы
|
||||
- Указатели
|
||||
2. Статические
|
||||
- Векторы
|
||||
- Массивы
|
||||
- Множества
|
||||
- Таблицы
|
||||
3. Полустатические
|
||||
- Стеки
|
||||
- Деки
|
||||
- Срезы
|
||||
- Строки
|
||||
4. Динамические
|
||||
- Списки
|
||||
- Графы
|
||||
- Деревья
|
||||
8
Языки программирования/Типы данных.md
Normal file
8
Языки программирования/Типы данных.md
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
Типы данных обеспечивают удобную работу в [языке](Язык%20программирования), помогая программисту писать код, а так же различать компилятору сколько памяти выделять под ту или иную переменную, какие операции с ней можно производить, какое значение может храниться.
|
||||
## Примитивные типы данных
|
||||
- Целые числа
|
||||
- Вещественные числа
|
||||
- Логические типы
|
||||
- Символы
|
||||
- Строки
|
||||
1
Языки программирования/Язык программирования.md
Normal file
1
Языки программирования/Язык программирования.md
Normal file
@@ -0,0 +1 @@
|
||||
Язык программирования — это формальный язык, с помощью которого человек может давать компьютеру инструкции (алгоритмы) в виде программ. Он определяет [[синтаксис]] (как пишутся команды) и [семантику](Семантика) (как они выполняются). Так же стиль программирования называемый [[Парадигма программирования]]
|
||||
Reference in New Issue
Block a user