📘 CodingMarble Learn

Продвинутое программирование и его применение

Продвинутое программирование — это выбор подходящей структуры данных (массив, связный список, стек, очередь), написание и проверка кода в IDE, построение графиков и анимаций, функции электронных таблиц и надёжное хранение данных в реляционной базе, к которой мы обращаемся на языке SQL.

🎬 История по шагам

  1. У массива фиксированное число ячеек, здесь шесть. Размер выбирают заранее. Если все ячейки заняты, добавить ещё нельзя.
  2. Связный список растёт, когда нужно. Каждый узел хранит значение и ссылку на следующий узел. Последний указывает в пустоту (null). Нажми «Добавить».
  3. Стек похож на стопку тарелок. Кладёшь сверху и берёшь сверху. Последним пришёл — первым ушёл.
  4. Очередь похожа на очередь за билетами. Встаёшь в конец, уходишь из начала. Первым пришёл — первым ушёл.
  5. База данных хранит данные в таблицах. Две таблицы связывает ключ, номер id. SQL-запрос выбирает только нужные строки, здесь баллы от 50 и выше.
  6. Теперь твой ход. Выбери список, стек или очередь и нажимай кнопки, чтобы добавлять и убирать элементы.

Совет: тяни 3D-сцену, чтобы повернуть её. Двумя пальцами можно приблизить.

🤔 Частые сомнения — разобраны

Почему я не могу добавить в массив седьмой элемент?

Размер массива задаётся при его создании. На шаге 0 все шесть ячеек — это весь массив. Для растущей коллекции используй список.

Где связный список хранит порядок?

В ссылках. Каждый узел знает только следующий узел, поэтому мы идём по стрелкам. Смотри шаг 1.

Почему pop отдаёт тот элемент, который я добавил последним?

У стека один открытый конец — вершина. Самый новый элемент лежит сверху, поэтому уходит первым. Смотри шаг 2.

Чем очередь отличается от стека?

В очереди добавляют в конец, а убирают из начала, поэтому первым уходит самый старый элемент. Понажимай кнопки на шаге 3.

Зачем две таблицы, а не одна?

Чтобы каждый факт хранился один раз. Имена лежат в одной таблице, оценки в другой, а связывает их id. Тогда исправить имя нужно только в одном месте. Смотри шаг 4.

Какую структуру выбрать?

Нужен фиксированный размер и быстрый доступ по индексу: массив. Растущая коллекция: список. Отмена и «Назад»: стек. Очередь ожидания: очередь. Попробуй каждую на шаге 5.

Структуры данных: массив, связный список, стек, очередь

Структура данных — это способ расположить данные так, чтобы программа могла быстро и удобно с ними работать.

В библиотеках эти инструменты уже есть. В Python обычный list работает как стек (append, pop), а collections.deque — как быстрая очередь. Если готовое средство есть, пользуйся им и не пиши заново.

stack = []
stack.append(5); stack.append(8)
stack.pop()      # gives 8
from collections import deque
q = deque([4, 9]); q.append(2)
q.popleft()      # gives 4

Работа в IDE: писать, запускать, проверять

IDE (integrated development environment, интегрированная среда разработки) собирает в одном месте редактор, кнопку запуска, отладчик и другие инструменты. Она подсвечивает код цветом, подсказывает имена и показывает ошибки прямо во время набора.

2D- и 3D-визуализация и анимация

Картинки помогают увидеть закономерности. Программы умеют рисовать графики (столбчатые, линейные, точечные), двумерные рисунки и трёхмерные сцены. Анимация — это одна и та же картинка, нарисованная снова и снова с небольшим изменением (примерно 30–60 раз в секунду). Простой способ: заведи переменную, например x, на каждом кадре немного увеличивай её и перерисовывай. 3D на этой странице сделан так же, с помощью 3D-библиотеки.

Продвинутые функции электронных таблиц

Электронные таблицы с помощью функций могут делать работу, похожую на программирование:

Реляционные базы данных и SQL

Реляционная база данных хранит данные в таблицах из строк и столбцов. У каждой таблицы есть первичный ключ — столбец с неповторяющимися значениями (id). Другая таблица использует это значение как внешний ключ, чтобы сослаться на первую. Хороший проект хранит каждый факт один раз, без повторов.

SQL — это язык, на котором мы задаём вопросы и меняем данные:

SELECT name, score FROM students
JOIN marks ON students.id = marks.id
WHERE score >= 50 ORDER BY score DESC;

INSERT INTO marks (id, score) VALUES (5, 67);
UPDATE marks SET score = 55 WHERE id = 2;
DELETE FROM marks WHERE id = 5;

Целостность значит, что данные остаются верными: ключи уникальны, внешний ключ обязан указывать на настоящую строку, а значения имеют правильный тип. Безопасность — это пароли для пользователей, выдача каждому только нужных прав, резервные копии и правило никогда не собирать SQL-запрос склеиванием текста пользователя (используй параметры): так защищаются от SQL-инъекции.

Вклад в открытые ресурсы

Многие инструменты и библиотеки — с открытым исходным кодом (open source): любой может читать, использовать и улучшать их по лицензии. Помочь можно так: исправить ошибку, улучшить инструкцию, перевести страницу или добавить пример. Всегда читай лицензию, указывай авторов и пиши понятные, вежливые сообщения, когда предлагаешь изменение.

Попробуй сам

В 3D на шаге 5 положи в стек 3 элемента, потом достань их. Запиши порядок. Сделай то же самое с очередью. Потом сначала предскажи, а потом проверь: после добавления 4, 9, 2 и удаления одного элемента, какое значение осталось в начале очереди и на вершине стека?

Главные формулы и определения

Разобранные примеры

1. Элементы 5, 8 и 2 кладут в стек в таком порядке. Потом дважды делают pop. Что теперь на вершине?

Стек после добавления: 5, 8, 2 (2 сверху). Pop убирает 2, потом 8. Остаётся 5. Вершина = 5.

2. Элементы 4, 9, 2 встают в очередь в таком порядке. Делают один dequeue. Какой элемент теперь в начале?

Уходит тот, кто пришёл первым, то есть убирается 4. В начале теперь 9.

3. Таблица оценок: id от 1 до 4, баллы 72, 45, 88, 51. Сколько строк вернёт WHERE score >= 50?

72, 88 и 51 не меньше 50. Это 3 строки.

4. В ячейках B2:B5 числа 72, 45, 88, 51. Что даст =SUMIF(B2:B5,">=50")?

Складываются только 72, 88 и 51: 72 + 88 + 51 = 211.

5. Почему для проверки скобок в выражении, например ( [ ] ), используют стек?

Каждую открывающую скобку кладём в стек. Когда встречается закрывающая, достаём верхнюю и проверяем, что они подходят друг другу. Последняя открытая скобка должна закрыться первой (LIFO), а именно это и даёт стек. Если в конце стек пуст, скобки расставлены верно.

Частые ошибки

Тренировочный тест

1. Какая структура работает по принципу LIFO?
2. Какая структура растёт по одному узлу и связана ссылками?
3. Какая часть SQL выбирает строки, подходящие под правило?
4. Столбец с уникальным значением в каждой строке называется:
5. Что делает точка останова (breakpoint) в отладчике?

Практика: отвечай сам

Введи или выбери ответ и нажми «Проверить». Если застрял, возьми подсказку; полное решение появится после ответа.

Частые вопросы

Чем массив отличается от связного списка?

У массива фиксированный размер, и к любому элементу можно сразу перейти по индексу. Связный список может расти и уменьшаться, но чтобы добраться до элемента, нужно идти по ссылкам одну за другой.

Что такое первичный и внешний ключ?

Первичный ключ — это столбец, который даёт каждой строке уникальное значение, как номер в журнале. Внешний ключ — это столбец в другой таблице, где хранится это значение, чтобы связать две таблицы.

Чем опасна SQL-инъекция и как от неё защититься?

Если вставить текст пользователя прямо в SQL-команду, хитрый пользователь может дописать свои команды и прочитать или удалить данные. Используй параметризованные запросы: тогда текст всегда считается только данными.

Сначала изучи

Дальше изучай