Что входит в основы программирования
Основы программирования в школе — это умение записать алгоритм на языке, который понимает компьютер, и прочитать чужую программу, чтобы понять, что она выведет. В 8–11 классах чаще всего используют Pascal и Python, реже C++, Scilab и другие языки. Тема связана с алгоритмами и исполнителями: сначала придумывают алгоритм, потом записывают его кодом.
В заданиях по основам алгоритмизации и программирования встречаются четыре типа:
- определить, что выведет программа;
- найти и исправить ошибки в готовой программе;
- написать свою программу по условию;
- ответить на вопрос по теории, например про трансляторы.
Из чего состоит любая программа
Язык может быть любым, набор кирпичиков одинаковый:
- переменные — именованные ячейки памяти. Присваивание в Pascal:
n := 10, в Python:n = 10; - ввод и вывод —
readlnиwritelnв Pascal,input()иprint()в Python; - ветвление —
ifвыполняет действие, только если условие истинно; - циклы —
whileповторяет действия, пока условие истинно,forповторяет их заданное число раз.
Условия строятся по правилам логики. Остаток от деления записывается как mod в Pascal и % в Python, целочисленное деление — div и //. Проверка на равенство в Pascal пишется =, в Python ==.
Как разобрать программу с циклом while по шагам
Возьмём программу:
Паскаль: Python:
s := 3; s = 3
n := 10; n = 10
while s < 20 do begin while s < 20:
s := s + 4; s = s + 4
n := n + 2 n = n + 2
end; print(n)
writeln(n)
Нужно определить, что выведет программа.
- Запиши начальные значения: s = 3, n = 10.
- Проверь условие s < 20. Оно истинно, тело цикла выполняется: s = 7, n = 12.
- Снова проверь условие и выполни тело. Получится по порядку: s = 11, n = 14; s = 15, n = 16; s = 19, n = 18; s = 23, n = 20.
- Теперь 23 < 20 ложно, цикл заканчивается.
- После цикла выполняется вывод, на экране будет 20.
Проверка: тело выполнилось 5 раз, и каждый раз n росло на 2, поэтому n = 10 + 5 × 2 = 20. Условие проверяется до выполнения тела, а новое значение s учитывается только при следующей проверке. Поэтому нельзя остановиться, как только s перешло границу 20, не доделав шаг.
Как найти ошибку в программе и подобрать данные
В задании «программист написал программу неправильно» обычно просят три вещи: узнать, что программа выведет на заданных числах, подобрать числа, на которых ответ случайно верный, и исправить ошибки.
Пусть программа должна считать, сколько среди четырёх чисел кратных 4, а в условии стоит проверка a % 2 == 0. Это проверка на чётность, а не на кратность 4.
- На числах 4, 8, 44, 6 программа насчитает 4, хотя верный ответ 3: числа 4, 8 и 44 кратны 4, а 6 нет.
- На числах 1, 3, 5, 7 она выведет 0, и это верно, потому что нечётных кратных 4 не бывает. Ошибка есть, но на этих данных не видна.
- Исправление:
a % 4 == 0в Python иa mod 4 = 0в Pascal.
Для поиска ошибки прогони программу вручную и записывай значения переменных в таблицу. Проверь, обнулён ли счётчик до цикла, считается ли количество, а не сумма, и стоит ли увеличение счётчика внутри условия.
Где ошибаются чаще всего
- Путают
=и:=. В Pascal присваивание пишется:=, а=только сравнивает. В Python присваивание=, а сравнение==. - Неверно читают
range. Циклfor i in range(1, 7)даёт i от 1 до 6, число 7 не входит. Чтобы перебрать отрезок [100000; 120000] включительно, пишиrange(100000, 120001). - Ошибаются на последнем проходе цикла. Условие проверяется до тела, поэтому значения после последнего прохода нужно дописать в таблицу, пока условие не станет ложным.
- Теряют отступы в Python. Строки внутри
while,forиifдолжны быть сдвинуты на одинаковое число пробелов, иначе программа работает по-другому или не запускается. - Перепутывают
/и//./в Python даёт дробное число,//отбрасывает дробную часть.
Какие задания присылают ученики и как пользоваться страницей
По этой теме ученики присылают в основном анализ программ с циклами while и for на Pascal и Python, поиск и исправление ошибок в программах про кратность чисел, перебор чисел с условиями на делители и сумму цифр. Есть и вопросы про трансляторы, графики в Scilab и вычисление кусочно-заданной функции.
Найди в списке выше задание, похожее на твоё: у каждого есть полный ход решения. Если подходящего нет, сфотографируй своё условие и отправь, чтобы получить решение с объяснением. Для заданий с массивами пригодится тема массивы и строки, для длинных программ — подпрограммы и рекурсия.