Учебник MAXIMUM Education

Интернет-энциклопедия по школьным предметам от Maximum Education. Учебник поможет решить домашнее задание, подготовиться к контрольной и вспомнить прошлые темы.

11 класс
Информатика

Основы программирования

Программирование – самый большой и самый сложный блок в экзамене по информатике, он насчитывает целых 8 заданий: №6, 16, 17, 22, 24, 25, 26, 27.

Для решения каждого из этих заданий требуются знания как минимум одного из четырех представленных в экзамене языков – Паскаль, C++, Python или Алгоритмический язык. Разумный выбор языка программирования для решения заданий экзамена – немаловажная вещь, т.к. простота и удобство языка во многом будут определять скорость и качество решения, не говоря уже о правильности написания собственных программ (только в заданиях №6 и 22 требуется проанализировать написанную программу, в остальных задания блока – написать свою программу). На курсе Maximum изучение программирования ведется на языке Python, как на одном из самых простых, и в то же время самых востребованных современных высокоуровневых языков. Подробное изложение основ программирования в целом, и в частности на Python, дается на уроках «Введение в программирование», тогда как цель данного раздела теории – лишь тезисно, в виде конспекта, перечислить основные языковые конструкции.

Переменные и типы данных

Переменная – это именованная область памяти, выделенная под определённый вид данных.

Переменная имеет имя и тип, который указывает на то, что хранится в этой переменной. Поскольку компьютерные программы – это, в первую очередь, средства обработки информации, то и хранить в программах можно лишь информацию в определенном виде (типе) – это могут быть числа, текстовые символы, логические значения и т.д. Полный список типов данных приведен в таблице:

Название Допустимые значения Обозначе-ние
Целочисленный -32 768… 32 768 int
Вещественный -9,2*1018… 9,2*1018 float
Символьный Любые символы char
Строковый Последовательность символов длинной менее 255 str
Логический True и False bool

Имена переменных не могут быть абсолютно любыми – в каждом языке программирования указываются свои правила выбора имен переменных. Для Python это следующие правила:

  1. Первый символ: a-z, A-Z, _

  2. Второй и далее символ: a-z, A-Z, _, 0-9

  3. Нельзя: знаки препинания и другие спец символы (@, $, %)

  4. Нельзя использовать служебные слова (например, «and» – это служебное слово)

  5. Переменные, отличающиеся регистром хоть одной из букв – разные переменные.

Пример.

Пускай надо создать переменную, назвать ее «num» и присвоить ей значение 3. Для этого в коде Python достаточно написать строку:

В этом случае переменная num будет иметь тип целое число. Теперь предположим, что надо переменной num присвоить значение "hello". Для этого напишем:

Если значение – строка, то ее надо писать строго в кавычках (можно одинарных или двойных). Обратите внимание, неважно – создаете ли вы переменную, или переопределяете значение существующей – синтаксис (правила написания) всегда один и тот же:

Стоит отметить, что переменная – не единственная конструкция-хранилище в языках программирования. Для экзамена понадобится еще один тип хранилища – массив, но знакомство с ним выходит за рамки данного раздела (ему будет посвящена отдельная тема).

Ввод и вывод данных на экран

Языки программирования должны уметь взаимодействовать с пользователем – иначе они будут бесполезны. Для реальных задач придумано огромное количество каналов взаимодействия, основанных на построении интерфейса (того, что видит пользователь). Со всеми ними вы познакомитесь, когда будете учиться в ВУЗе. Что касается ЕГЭ, то программы в нем с этой точки зрения крайне просты – достаточно знать лишь две базовых команды – ввод информации пользователем (команда input()) и вывод на предполагаемый экран (команда print()).

Пример.

У команды print есть параметр end, который показывает строку, которую следует поставить после всех объектов.

– после вывода переменной а произойдёт переход на новую строку.

По умолчанию именно переход к новой строке стоит в параметре end.

Математические операции

В Python (как, впрочем, и во всех остальных языках) поддерживаются все стандартные математические операции:

Операция Символ
Сложение +
Вычитание
Деление /
Умножение *
Возведение в степень **
Целая часть от деления //
Остаток от деления %

Поговорим дополнительно про операции // и %.

Операция целочисленного деления (//) позволяет при делении одного числа на другое получить исключительно целое число, отсюда и название операции, отбрасывая дробную часть полученного результата. Рассмотрим простой пример – нам нужно разделить 5 на 2. Используя простое деление (/), мы получим:

5 / 2 = 2.5 - дробная часть имеется.

Если же мы воспользуемся операцией //, то получим:

5 // 2 = 2 – дробная часть исчезла.

На нашем курсе часто будет встречаться целочисленное деление, поэтому важно усвоить принципы его работы.

Теперь поговорим про операцию нахождения остатка от деления (%) – самую неоднозначную операцию из таблицы выше, потому что обычно в математике мы не так часто ей пользуемся. Данная операция неразрывно связана с операцией целочисленного деления (//). Возьмем пример, рассмотренный выше, – 5 разделить на 2.

В результате мы получаем 2 и 1 в остатке. Если 2 – это результат целочисленного деления (5 // 2), то 1 – это как раз остаток от деления (5 % 2). Данная операция, как и операция //, будет часто встречаться в заданиях на программирование, иногда они будут встречаться вместо, о таких заданиях мы поговорим на соответствующих уроках.

Условный оператор

Для описания условий в программировании используется логический оператор

ЕСЛИ –ТО – ИНАЧЕ

который еще называется условным оператором. Это конструкция, которая описывает условие, и что делать, если условие выполняется, или не выполняется (отсюда и фрагмент ИНАЧЕ). На Python синтаксис условного оператора выглядит следующим образом:

Условий внутри одного оператора может быть несколько, в таком случае они проверяются последовательно и выполняются команды для того условия, которое первым окажется истинным:

Для проверки всех возможных условий используются операторы сравнения:

Символ Смысл Пример
> больше a > 5
< меньше a < 8
>= больше или равно a >= 7
<= меньше или равно a <= 9
== равно a == b
!= не равно a != b
and конъюнкция a > 5 and b < 5
or дизъюнкция a > 5 or b < 5
not логическое отрицание a > 5 and not(b < 5)

Пример.

Пускай нам надо написать программу, которая считает, хватит ли пользователю денег на Rolls-Royce (в вымышленной стране Rolls-Royce стоит 100 единиц). Программа будет выглядеть следующим образом:

Цикл while (ПОКА)

Смысл циклов заключается в том, что они повторяют определенный набор действий. При этом при каждом повторении что-то может меняться. В случае с циклом ПОКА набор команд повторяется, ПОКА что-то происходит (или пока что-то не произойдет):

ПОКА условие

действия, которые повторяются, пока условие верно

Синтаксис цикла ПОКА в Python прост. Командное слово для цикла – while, а команды цикла записываются на отступе от строки, инициализирующей цикл.

Пример.

В данном примере значение переменной i будет печататься всякий раз, пока она не станет больше 10-ти. Последняя строка в цикле – i +=1 – отвечает за постепенный рост величины переменной. Если бы этой строки не было, цикл выполнялся бы бесконечно – это означало бы программную ошибку (и, очевидно, ошибку на экзамене).

Цикл for (ДЛЯ)

Второй цикл, который очень часто встречается в заданиях ЕГЭ – это цикл ДЛЯ. Его отличие от ПОКА проще показать на примере:

  1. «пишу реферат, пока не напишу до конца»

  2. «пишу реферат с 8-ми до 10-ти»

Прекращение цикла ПОКА – это логическое условие («написал весь реферат»), а у цикла ДЛЯ задаются четкие границы. Обычно эти границы задаются с помощью переменной, которая меняет свое значение с некоторым шагом, и определенное значение является условием для выхода:

ДЛЯ i = 1, 2, 3, …, n

действия, который надо повторить n раз

В данном случае переменная i будет автоматически менять свое значение каждый раз, увеличиваясь на единицу (это внутреннее свойство и смысл цикла ДЛЯ). Такая переменная называется итерационной, т.к. она определяет итерации цикла. На Python синтаксис цикла ДЛЯ выглядит следующим образом:

Конструкция for i in range() заслуживает особого внимания. С помощью функции range() в Python можно задавать диапазон значений, которые будет принимать любая численная переменная с некоторым шагом. Эту конструкцию можно использовать как для создания наборов таких значений, так и для генерации итерационной переменной. Последнее ее применение наиболее эффективно и будет крайне полезным практически во всех заданиях на программирование в ЕГЭ. У функции range всего может быть три аргумента: начало, конец, шаг. Чаще всего используются только два – тогда она обозначают начало и конец с шагом 1: range(m, n). При этом при перечислении значений начало всегда ВКЛЮЧАЕТСЯ, а конец – ИСКЛЮЧАЕТСЯ из набора.

Пример.

Пример.

Пускай нам надо написать программу, которая будет считать факториал введенного числа. Факториал в математике – операция, определяемая только для натуральных чисел; факториал равен произведению всех натуральных чисел, предшествующих заданному. Например, факториал числа 4 равен 1*2*3*4 = 24, а факториал числа 7 равен 1*2*3*4*5*6*7 = 5040. Программа будет выглядеть следующим образом:

Поиск минимального/максимального значения

В заданиях ЕГЭ на программирование нередко встречается код, который находит максимальное значение среди всех чисел, которые были введены с клавиатуры, или минимальную цифру числа, и другие подобные задания.

Пусть у нас есть последовательность чисел. И нужно в ней найти минимальный элемент или

максимальный элемент. Основная идея заключается в следующем. Мы можем перебрать последовательно все числа, и при этом сравнивать элементы между собой для того, чтобы понять, какой из них минимальный/максимальный. Для перебора всех значений будем использовать цикл.

Этот алгоритм можно реализовать как циклом while, так и циклом for. А для сравнения внутри цикла будем использовать еще и условие if. Посмотрим на примере, как это можно сделать.

Пример. Пусть у нас есть n чисел, каждое из которых находится в промежутке от 1 до 100, и нужно среди них найти максимальное.

Для начала запустим цикл for и начнем в нем считывать наши числа:

Если мы будем в цикле записывать последовательно числа в переменную а, то на каждой итерации

будет обрабатываться новое введенное число.

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

m. Пусть в начале m = 0. Если внутри цикла мы натыкаемся на то число, которое больше m, то оно

становится претендентом на звание максимального:

И теперь мы его запишем вместо старого значения m.

А в конце выведем наш максимум

В итоге получим вот такую программу:

Обратите внимание на одну важную деталь. Если бы в начале инициализировали переменную m со значением, равным 100, то наша программа в любом случае вывела бы 100, даже если бы не вводили это число с клавиатуры. Получается, если надо найти максимальное значение, то начальное значение переменной для хранения максимума должны быть очень маленькое, а точнее – меньше минимального возможного. Такое число называется контрзначение.

Ниже представлен общий вид алгоритма для поиска максимального значения:

Отметим, что если нам нужно искать не минимальное, а максимальное значение, то первым делом придется поменять условие в цикле. В прошлый раз логика былая такая – если мы нашли a, которое больше текущего найденного максимума, то мы сохраняли значение переменной a в максимум. В этот раз нам нужно как можно более маленькое число. Поэтому наш if будет выглядеть так:

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

Ниже представлен общий вид алгоритма для поиска минимального значения: