Основы программирования
Программирование — это разработка программ по заданному алгоритму для решения задач на компьютере. В теме важно понимать, чем отличаются алгоритм, программа и язык программирования, как записываются данные и какие этапы проходит задача от условия до проверки результата.
Основные понятия
Алгоритм — точное и конечное описание последовательности действий, которые приводят к решению задачи. Исполнитель алгоритма должен уметь выполнять команды, а каждая команда должна быть понятной и однозначной. Алгоритм обычно обладает определённостью, результативностью, конечностью и массовостью: он решает не один пример, а целый класс однотипных задач.
Программа — алгоритм, записанный на языке программирования и предназначенный для выполнения компьютером. Алгоритм может быть представлен словами, таблицей, блок-схемой или псевдокодом, а программа использует строгие правила конкретного языка.
Для записи программ применяют языки программирования. Python, Pascal и C++ относятся к языкам высокого уровня: их команды близки к математической записи и понятны человеку. Компьютер непосредственно выполняет машинные инструкции, поэтому исходный текст нужно обработать транслятором — компилятором или интерпретатором.
Любой язык имеет формальный язык|формальный язык с точными правилами. Его алфавит языка программирования содержит допустимые символы. Из символов образуются лексемы, например имена, числа, знаки операций и ключевые слова. Правила построения команд образуют синтаксис, а смысл команд описывает семантика. В отличие от формального языка, неформальный язык|неформальная речь допускает двусмысленность, что недопустимо в программе.
Как представляют алгоритмы
Алгоритм можно записать несколькими способами. Словесное описание удобно для объяснения, но может быть неточным. Блок-схема показывает ход действий графически: прямоугольник обозначает действие, ромб — условие, овал — начало или конец, параллелограмм — ввод или вывод. Псевдокод использует понятные человеку команды без привязки к конкретному языку. Программный код предназначен для непосредственного выполнения после обработки транслятором.
| Способ | Особенности | Когда удобен |
|---|---|---|
| Словесный | Описание обычными словами | Для постановки задачи |
| Блок-схема | Графическое представление ветвлений и повторений | Для анализа хода алгоритма |
| Псевдокод | Упрощённая запись команд | Для планирования решения |
| Программа | Точная запись на языке программирования | Для запуска на компьютере |
Основные алгоритмические конструкции: следование, ветвление и цикл. Следование означает выполнение команд по порядку. Ветвление выбирает один из вариантов в зависимости от условия. Цикл повторяет действия, пока выполняется условие или пока не достигнуто заданное число повторений.
Чтобы убедиться в правильности алгоритма, проследите его выполнение на нескольких наборах данных: обычном, граничном и особом. Граничные данные соответствуют минимуму или максимуму, а особые могут содержать ноль, одинаковые значения или пустой результат.
Какая конструкция нужна, если действие повторяется, пока условие истинно?
Структура программы и данные
Структура программы зависит от языка, но обычно включает подключение библиотек, описание данных, основную часть и вспомогательные процедуры или функции. Переменная хранит значение, которое может изменяться во время работы. Константа не меняется. Тип данных определяет множество допустимых значений и операций над ними.
- Целые числа используются для счёта: \(-7\), \(0\), \(25\).
- Вещественные числа могут иметь дробную часть: \(2.5\), \(-0.01\).
- Логический тип имеет два значения: истина и ложь.
- Символьный тип хранит один символ, а строковый — последовательность символов.
Ввод получает исходные данные от пользователя, файла или другой системы, а вывод сообщает результат. Подробнее связь этих операций с программой описывает страница ввод и вывод данных. Важно различать значение и его текстовое представление: строка «12» и число \(12\) могут выглядеть одинаково, но участвуют в разных операциях.
Большую программу разделяют на независимые части — модули, функции и процедуры. Модульность программы упрощает чтение, повторное использование и проверку кода. Отдельная часть должна выполнять одну понятную задачу и получать данные через параметры или возвращать результат.
1a = int(input()) 2b = int(input()) 3if a > b: 4 print(a) 5else: 6 print(b)
Программа считывает два целых числа, сравнивает их и выводит большее. Сначала выполняется ввод, затем проверяется условие \(a>b\). Если оно истинно, выводится \(a\); иначе выводится \(b\). При \(a=b\) сработает ветвь else, но результат всё равно будет правильным.
Этапы решения задачи
- Понять условие: определить, что дано, что требуется найти и какие ограничения указаны.
- Выбрать математическую модель: формулу, правило, таблицу или набор состояний.
- Разработать алгоритм и проверить его на простых примерах вручную.
- Выбрать язык и записать программу, соблюдая его синтаксис.
- Провести тестирование на обычных, граничных и особых данных.
- Исправить найденные ошибки, оценить скорость и объём используемой памяти.
Ошибки бывают синтаксическими, семантическими и логическими. Синтаксическая ошибка нарушает правила записи и обычно обнаруживается до запуска. Семантическая возникает, когда допустимая команда используется не в том смысле. Логическая ошибка не мешает запуску, но приводит к неверному ответу. Отладка программы включает поиск причины ошибки, исправление и повторную проверку.
Оценка \(O(n)\) означает, что время работы растёт примерно пропорционально размеру входа \(n\). Два вложенных цикла, каждый из которых выполняется около \(n\) раз, обычно дают \(O(n^2)\). На экзамене важно учитывать ограничения: алгоритм, подходящий для \(n=100\), может быть слишком медленным для \(n=10^5\).
Задача: найти сумму всех целых чисел от 1 до \(n\). Перебор даёт алгоритм \(O(n)\), а формула Гаусса — \(O(1)\). Для \(n=5\) получаем \(S=\frac{5\cdot6}{2}=15\). При записи программы нужно выбрать тип, способный хранить результат: для больших \(n\) произведение \(n(n+1)\) может не поместиться в небольшой целочисленный тип.
Не путайте знак сравнения \(>\) со знаком \(\ge\): равенство может относиться к другой ветви. Проверяйте границы циклов, чтобы не получить лишнее или пропущенное повторение. Не смешивайте строки и числа без явного преобразования. Следите за целочисленным делением, при котором дробная часть отбрасывается. Наконец, проверяйте не только пример из условия: он может не обнаружить логическую ошибку.
Программа и пользователь
Пользователь взаимодействует с программой через интерфейс. Элемент интерфейса — кнопка, поле ввода, список, окно сообщения и другие части, позволяющие получать данные или управлять действиями. Даже консольная программа имеет простой интерфейс: порядок ввода, формат данных и вид вывода. Хороший интерфейс сообщает, что вводить, и выдаёт однозначный результат.
Сделайте короткую трассировку: выпишите значения переменных после каждой важной команды. Если фактический ход отличается от задуманного, ошибка обычно находится в условии, границе цикла или изменении переменной.
Проверь себя
Главное
- Алгоритм — точная последовательность действий, а программа — его запись на языке программирования.
- Язык имеет алфавит, лексемы, синтаксис и семантику; компьютер выполняет программу после обработки транслятором.
- Базовые конструкции алгоритмов — следование, ветвление и цикл.
- Решение проходит этапы от анализа условия и модели до программирования, тестирования и отладки.
- Сложность помогает оценить, справится ли алгоритм с ограничениями по времени и памяти.