8-3 Python
8-3 Python
2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
§ 17. Введение
Ключевые слова:
• программирование • система программирования
• программист • транслятор
• программа • компилятор
• комментарий • интерпретатор
• оператор • отладчик
• вывод на экран
В курсе информатики 7 класса вы уже познакомились с
понятием алгоритма и составляли программы для исполните-
лей Робот и Рисователь. В этом году мы продолжим заниматься
программированием, используя язык Python 3. Этот язык сей-
час применяется во многих областях, в том числе для разработ-
ки веб-сайтов и решения задач искусственного интеллекта.
Алгоритмы
Сначала вспомним основные сведения из курса 7 класса,
которые нам понадобятся.
Алгоритм – это точное описание порядка действий для
некоторого исполнителя. Исполнителем называют человека,
животное или машину, способных понимать и выполнять неко-
1 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
торые команды. Формальный исполнитель любую команду все-
гда выполняет одинаково, не обдумывая её.
Любой алгоритм можно составить с помощью трёх базовых
конструкций: следования (последовательного выполнения ко-
манд), ветвлений (выбора одного из двух вариантов действий) и
циклов (повторения одинаковых действий).
Алгоритмы можно записывать на естественном (например,
русском) языке, в виде блок-схем или на языке программирова-
ния. Запись алгоритма на языке программирования называется
программой.
Программирование и программисты
Программирование – это создание программ для компьюте-
ров. Людей, которые этим занимаются, называют программи-
стами.
Программист должен уметь:
• анализировать поставленную задачу: определять входные
данные и результаты, устанавливать связь между ними,
выделять этапы решения задачи и т.д.;
• разрабатывать алгоритм решения;
• писать тексты программ на различных языках программи-
рования;
• отлаживать и тестировать программы;
• готовить описания программ и инструкции для пользовате-
лей (документацию);
• дорабатывать и сопровождать программы после сдачи за-
казчику.
В небольших фирмах все эти задачи часто решает один че-
ловек. В крупных компаниях есть разделение труда: анализом
задачи занимаются системные аналитики, разработкой алго-
ритма – алгоритмисты (специалисты в предметной области,
математики), написанием и отладкой программ – кодировщи-
ки, тестированием – тестировщики, а составлением докумен-
тации – технические писатели.
2 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
У каждого программиста есть своя специализация – об-
ласть, в которой он работает:
• системный программист разрабатывает операционные
системы, драйверы устройств, утилиты; эта работа требует
самых глубоких знаний и способностей к самообразованию,
она высоко ценится и оплачивается;
• прикладной программист создаёт прикладные програм-
мы, с которыми работают пользователи, в том числе про-
граммы для мобильных устройств;
• веб-программисты занимаются программированием веб-
сайтов;
• программисты баз данных разрабатывают программы,
которые управляют базами данных.
Первая программа
Давайте посмотрим, что представляет собой пустая про-
грамма на языке Python. Это такая программа, которая не со-
держит никаких команд, но удовлетворяет всем требованиям
языка программирования. Компьютер может выполнить её, но
делать она, разумеется, ничего не будет.
Python – один из тех языков программирования, в которых
пустая программа – действительно пустая, она не содержит ни
одной строчки. Мы можем создать пустой файл с расширением
.py, а затем выполнить его с помощью интерпретатора – так
называется программа, которая будет выполнять нашу про-
грамму на языке Python.
Интерпретатор — это программа, которая выполняет про-
грамму на языке программирования, обрабатывая её построчно.
Попробуем добавить в программу такую строчку:
# пустая программа
Символ # обозначает начало комментария – пояснительно-
го текста, который не обрабатывается транслятором.
Комментарии — это пояснения для человека внутри текста
программы.
3 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Комментарии служат для того, чтобы автору (и другим
программистам) было легче разобраться в программе. При за-
пуске такой программы также ничего не происходит. В про-
граммах на Python, в которых используются русские буквы, ча-
сто добавляют специальный комментарий:
# -*- coding: utf-8 -*-
который говорит о том, что будет использоваться кодировка
UTF-8.
Для того чтобы программа выполняла что-то полезное, она
должна содержать, кроме комментариев, команды языка про-
граммирования, которые называются операторами (от англ.
operate – работать).
Вывод текста
Давайте научим программу делать что-то полезное, напри-
мер, выводить текст на экран. Пусть она при запуске привет-
ствует вас:
Привет!
Вот как выглядит такая программа:
print( "Привет!" )
Чтобы вывести что-то на экран, используется встроенная функ-
ция (команда) print. В кавычках записывается текст для выво-
да – символьная строка, то есть последовательность символов.
В начале строки (слева от команды print) не должно быть про-
белов – таково требования языка Python.
Вместо кавычек можно использовать апострофы («одиноч-
ные кавычки»):
print( 'Привет!' )
Это полезно, например, тогда, когда необходимо вывести строку
с кавычками:
print( 'Смотрите фильм "Салют-7"!' )
За один раз можно выводить несколько символьных строк:
они перечисляются через запятую внутри круглых скобок.
Например, по команде
print( "Привет,", "Вася!" )
4 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
на экран выводится фраза
Привет, Вася!
Пробел между строками (элементами списка вывода) встав-
ляется автоматически, если он не нужен, при вызове функции
print нужно добавить ещё один аргумент с именем sep (от
англ. separator – разделитель), равный пустой строке "". Ко-
манда
print( "2", "+", "2", "=", "4", sep="" )
выведет все символы без пробелов:
2+2=4
Теперь попробуем вывести второе приветствие:
print( "Привет, Вася!" )
print( "Привет, Петя!" )
Такая программа выведет каждую фразу в отдельной строке:
Привет, Вася!
Привет, Петя!
Это значит, что после вывода всех данных функция print вы-
полняет переход на новую строку, так что следующий вызов
print будет выводить данные в новой строке.
Если нужно, чтобы несколько вызовов функции print вы-
водили информацию в одной строке, можно отменить переход
на новую строку, указав аргумент с именем end (по-английски –
конец), равный пустой строке "":
print( "1", end="" )
print( "23", end="" )
print( " 456" )
Такая программа выведет 123456.
Системы программирования
Для разработки новых программ используют инструмен-
тальные средства или системы программирования.
Система программирования – это программные средства для
создания новых программ.
5 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
В состав системы программирования обязательно входят
транслятор и отладчик.
Транслятор – это программа, которая переводит тексты других
программ в машинные коды (команды процессора).
Трансляторы бывают двух типов:
• компиляторы, которые переводят в машинные коды сразу
всю программу и строят исполняемый файл (в операционной
системе Windows он имеет расширение .exe);
• интерпретаторы, которые выполняют программу по ча-
стям: обработав очередной фрагмент программы, интерпре-
татор сразу исполняет его.
Отладчик – программа для поиска ошибок в разрабатываемых
программах.
Отладчик позволяет:
• выполнять программу в пошаговом режиме (по одной строч-
ке);
• просматривать значения переменных в памяти;
• устанавливать точки останова, то есть отмечать места в
программе, в которых выполнение программы временно
приостанавливается;
Часто редактор текста программ, транслятор и отладчик
объединяются вместе, получается среда программирования.
Для языка Python разработаны среды программирования
• Wing IDE ([Link]);
• PyCharm ([Link]/pycharm/);
• PyScripter ([Link]/projects/pyscripter/).
и другие.
Небольшие программы, использующие текстовый ввод и
вывод, можно отлаживать в онлайн-средах на специальных
сайтах в Интернете, например
• [Link]
• [Link]
• [Link]
6 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
• [Link]
Такие сайты позволяют сохранять программы в облачном хра-
нилище и делиться ссылками на них со своими знакомыми.
Выводы:
• Программирование – это создание программ для компьюте-
ров. Людей, которые этим занимаются, называют программи-
стами.
• Комментарии — это пояснения для человека внутри текста
программы.
• Оператор – это команда языка программирования.
• Система программирования – это программные средства для
создания новых программ.
• Транслятор – это программа, которая переводит в машинные
коды (команды процессора) тексты программ, написанных на
языке высокого уровня.
• Отладчик – программа для поиска ошибок в разрабатывае-
мых программах.
• Среда программирования обычно включает редактор текста
программ, транслятор и отладчик.
Интеллект-карта
системные
прикладные
программисты
веб-программисты
программисты баз данных
система
алгоритмы программирование программирования
операторы редактор
программа транслятор
комментарии
отладчик
Рис. 3.1.
Практическая работа №6. Вывод на экран
7 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Вопросы и задания
1. Как вы думаете, почему сейчас очень редко записывают ал-
горитмы в виде блок-схем?
2. Какими качествами, по вашему мнению, должен обладать
программист? Обсудите этот вопрос в классе.
3. Зачем пишут комментарии в программах? Подумайте, как
комментирование можно использовать при поиске ошибок в
программе.
4. Вспомните, что такое служебные (ключевые) слова языка
программирования.
Темы сообщений:
а) «Профессии в сфере информационных технологий»
б) «Какие бывают языки программирования?»
Интересные сайты:
• [Link] – онлайн-среда для программирования на раз-
ных языках.
• [Link] – онлайн-среда для программирова-
ния на разных языках.
• [Link] – онлайн-среда для программирования на раз-
ных языках.
• [Link]/[Link] – онлайн-
среда для программирования на разных языках.
• [Link] – онлайн-среда для программирования
на языке Python.
8 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Сумма чисел
Давайте научим компьютер складывать два целых числа.
Можно, например, сложить числа так:
print( 12345 + 67890 )
Но недостаток этой программы состоит в том, что она складыва-
ет только два заранее известных числа. Если нужно сложить
другие числа, придётся менять программу.
Чтобы программа могла выполнять расчёты при различных
исходных данных, их вводят с клавиатуры, из файла, с какого-
то устройства или через компьютерную сеть.
Напишем программу, которая
1) запрашивает у пользователя два целых числа;
2) складывает их и сохраняет результат в памяти;
3) выводит результат на экран.
Определите входные данные и результат работы этого
алгоритма.
Запишем программу, которая пока будет состоять из одних
комментариев:
# ввести два числа
# найти их сумму
# вывести результат
9 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Попробуйте запустить эту программу. Что получилось?
Почему?
Компьютер не может выполнить эту программу, потому что
команд «ввести два числа» и ей подобных, которые записаны в
комментариях, нет в его системе команд. Будем постепенно
расшифровывать комментарии – записывать вместо них опера-
торы языка Python.
Исходные данные (числа), которые введёт человек, нужно
сохранить в памяти компьютера. Для этого используют пере-
менные.
Переменные
Любая программа работает с данными – вводит их, обраба-
тывает, выводит на экран или в файл. К данным в памяти нуж-
но как-то обращаться. Первые программисты обращались к
ячейкам памяти через их адреса. Например, «взять число из
ячейки с адресом 123, увеличить его на 1 и записать в ячейку с
адресом 234.». Но это очень неудобно, прежде всего, потому, что
нужно точно знать, по каким адресам размещены нужные дан-
ные.
Современные программы могут загружаться в разные об-
ласти памяти, и узнать адреса данных чаще всего невозможно.
Поэтому придумали другой способ – дать данным имена. Участ-
ки памяти, к которым можно обращаться по именам, называют-
ся переменными.
Переменная — это величина, которая имеет имя, тип и значе-
ние. Значение переменной может изменяться во время выпол-
нения программы.
Таким образом, в переменных можно хранить данные во время
работы программы и использовать их при вычислениях, когда
они понадобятся.
Имя переменной называют идентификатором (от слова
идентифицировать – отличать один объект от другого).
Идентификатор — это имя переменной.
10 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Имена переменных в Python могут включать латинские
буквы (строчные и заглавные буквы различаются), цифры и
знак подчеркивания «_». Имя не может начинаться с цифры,
иначе транслятору будет сложно определить, где начинается
имя, а где – число.
Желательно давать переменным «говорящие» имена, чтобы
можно было сразу понять, зачем нужна та или иная перемен-
ная. Например, переменная с именем name, скорее всего, слу-
жит для хранения какого-то имени, а о назначении переменной
abc догадаться очень сложно.
Определите, какие из следующих идентификаторов до-
пустимы, а какие – нет.
1 Vasya СУ-27 @mail_ru
m11 Петя СУ_27 [Link]
1m Митин брат _27 "Pes barbos"
m1 Quo vadis СУ(27) <Ладья>
В отличие от многих языков программирования (Паскаль,
C, Java) переменные в языке Python не нужно объявлять. Па-
мять для переменной выделяется автоматически тогда, когда ей
присваивается новое значение.
Присвоим переменной значение 5:
a = 5
Знак «=» обозначает специальную команду – оператор
присваивания, с его помощью присваивают новое значение
переменной. Он выполняется так: вычисляется выражение
справа от символа «=», а затем результат записывается в пере-
менную, имя которой указано слева.
Оператор присваивания также позволяет изменить значе-
ние переменой:
name = "Платон"
name = "Сократ"
Переменная может хранить только одно значение. При за-
писи в неё нового значения «старое» стирается, и его уже никак
не восстановить. В языке Python при изменении значения пе-
11 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
ременной выделяется новая область памяти и связывается с тем
же именем (Рис. 3.2).
name Платон
Сократ
Рис. 3.2.
Теперь та область памяти, в которой было записано старое
значение («Платон»), уже недоступна, потому что с ней не свя-
зано ни одно имя. Эта память будет освобождена сборщиком
мусора – специальной программой, которая управляет памя-
тью. Поэтому в языке Python невозможно изменить простую пе-
ременную «на месте», например, нельзя изменить один символ
внутри символьной строки (но можно создать новую, изменён-
ную строку).
Заметим, что в большинстве языков программирования
(Паскаль, C++, Java) работа с переменными организована ина-
че: переменные заранее объявляются и им сразу выделяется
место в памяти. После объявления вся работа с переменной
происходит в одной и той же области памяти.
В языке Python каждая переменная имеет свой тип. Тип
нужен для того, чтобы определить,
• какие значения может принимать переменная;
• какие операции можно выполнять с этой переменной;
• как хранить её значения в памяти.
Определить тип переменной можно с помощью встроенной
функции type:
lang = "Котлин"
print( type(lang) )
cost = 123
print( type(cost) )
dist = 45.678
print( type(dist) )
Запустив эту программу, мы увидим:
<class 'str'>
12 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
<class 'int'>
<class 'float'>
Это означает, что переменные lang, cost и dist относятся со-
ответственно к типам (классам)
str – символьная строка (от англ. string),
int – целое число (от англ. integer),
float – вещественное число (от англ. float).
Выясните, что означает английские слова string, integer,
float.
Транслятор Python сам определяет тип переменной по то-
му значению, которое ей присваивается.
Работа с переменными
Для вывода значения переменной на экран используют тот
же оператор print, который раньше применяли для вывода
текста:
print( a )
Команда вывода (встроенная функция print) сначала
автоматически преобразует числовое значение в цепочку
символов (цифр), а затем выводит эти символы так же, как
обычный текст.
Что появится на экране после выполнения программы:
c = 5
print( с )
print( "c" )
Чем отличаются два оператора вывода в этой программе?
Что выведет на экран программма
a = 1
print( a )
a = 5
print( a )
Оператор
i = i + 1
13 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
заменяет значение i на i +1, то есть увеличивает значение пе-
ременной i на 1.
Что получится, если рассмотреть запись i = i + 1, как
равенство – уравнение относительно переменной i?
Чему будет равно значение переменной i после выполнения
оператора i = i + 1, если до этого оно было равно 17?
Вначале переменные имели значения a = 4 и b = 7.Чему
будут равны значения этих переменных после выполнения
программмы
a = a + 1
b = b + 1
a = a + b
b = b + a
a = a + 1
В языке Python можно использовать сокращённую запись
арифметических операций: например, a += b означает то же са-
мое, что и a = a + b, а a -= b – то же самое, что и a = a - b. Осо-
бенно часто используется увеличение переменной на единицу,
которая записывается, например, так: i += 1.
Пользователи программы не должны понимать её исход-
ный код, то есть запись алгоритма с помощью операторов языка
программирования. Для того чтобы пользователь смог как-то
поменять исходные данные, не изменяя программу, програм-
мист может предусмотреть ввод данных с клавиатуры 1.
Для ввода данных с клавиатуры используется встроенная
функция input. Введём два числа и запишем их в переменные
num1 и num2:
num1 = input()
num2 = input()
Заметим, что числа нужно вводить по одному в строчке, нажи-
мая клавишу Enter после каждого введённого значения.
Арифметические выражения
Арифметические выражения обычно записываются в одну
строчку. Они могут содержать константы (постоянные значе-
ния), имена переменных, знаки арифметических операций,
круглые скобки (для изменения порядка действий). Например,
присваивание
c + b −1
a← ⋅d
2
в программе запишется как
a = (c + b - 1)/2*d
Операция умножения обозначается знаком «*», а операция де-
ления – знаком «/».
Какое же действие будет выполняться первым, какое –
вторым и т.д.? Это определяется приоритетом (старшинством)
операций. Они выполняются в следующем порядке:
• сначала – действия в скобках;
• умножение и деление, слева направо;
• сложение и вычитание, слева направо.
Таким образом, умножение и деление имеют одинаковый прио-
ритет, более высокий, чем сложение и вычитание.
Определите порядок действий компьютера при вычис-
лении выражения:
a = c + b – 1 / 2 * 5
Запишите присваивание на языке Python:
18 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
b−5
z←a+
c +8
Результат деления (операции «/») может быть нецелым
числом, такие числа называются вещественными. Если в пе-
ременную записать вещественное число, она будет относиться к
типу float.
При записи вещественных чисел в программе целую и
дробную часть разделяют не запятой (как принято в России), а
точкой. Например
x = 123.456
В языке Python есть операция возведения в степень (для
целых и вещественных чисел), которая обозначается двумя
звездочками: «**». Например, присваивание y ← 2x2 + z3 запи-
шется так:
y = 2*x**2 + z**3
Возведение в степень имеет более высокий приоритет, чем
умножение и деление. Если подряд записаны несколько опера-
ций возведения в степень, они выполняются, в отличие от дру-
гих операций, справа налево. Например, 3**3**3 это то же са-
мое, что 3**(3**3).
19 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
С помощью этих операций удобно работать с отдельными
цифрами числа. Как мы увидели в главе 2, остаток от деления
числа на 10 – это последняя цифра его десятичной записи2.
N = 123
d1 = N % 10 # 3
Чему равен остаток от деления числа N на 100?
d12 = N % 100
Если разделить число на 10 и взять только целую часть,
мы «отбросим» последнюю цифру числа: значение 123//10 рав-
но 12.
N = 123
d = N // 10 # 12
Как с помощью операций // и % выделить вторую с конца
цифру числа?
21 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
ственное число, нужно затем преобразовать эту строку с помо-
щью функции float:
x = float( input() )
Теперь x – это вещественная переменная и команда
print( type(x) )
выведет
<class 'float'>
Несложно ввести несколько переменных в одной строке, ис-
пользуя тот же приём, что и для целых чисел:
x, y, z = map( float, input().split() )
Здесь вводятся значения трёх переменных, x, y и z.
При выводе вещественных значений по умолчанию (то есть,
если не сказано делать иначе) выводится 16 значащих цифр.
Например, команда
print( 16/7 )
выводит
2.2857142857142856
Если такой вариант не устраивает, применяют форматный
вывод, например:
x = 16/7
print( "x={:f}".format(x) ) # x=2.285714
Здесь после двоеточия указан формат f, по умолчанию он
оставляет 6 цифр в дробной части числа. Перед буквой f можно
записать два числа через точку.
Изучите следующую таблицу и выясните, что означают
два числа, которые записываются после двоеточия перед
буквой f.
Результат вывода
print("x={:10.3f}".format(x)) x=◦◦◦◦12.346
print("x={:8.2f}".format(x)) x=◦◦12.35
print("x={:2.2f}".format(x)) x=12.35
print("x={:0.2f}".format(x)) x=12.35
print("x={:0.1f}".format(x)) x=12.3
22 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Как вы поняли, первое число задаёт общее количество по-
зиций, отведённое на вывод значения, а второе – количество
цифр в дробной части:
print( "x={:10.3f}".format(x) ) # x=◦◦◦◦12.346
В этом варианте на число отводится всего 10 позиций, из них
3 – на дробную часть. Поскольку цифры и точка занимают 6 по-
зиций, слева добавляется ещё 4 пробела.
Если пробелы слева от числа не нужны, а требуется только
ограничить количество знаков в дробной части, вместо первого
числа пишут 0 или вообще ничего не пишут:
print("x={:.2f}".format(x)) #x=12.35
Для очень больших или очень маленьких чисел используют
научный формат (стандартный вид числа). Он обозначается
буквой e внутри фигурных скобок:
x = 1e10/7
print("x={:12.4e}".format(x)) # x=◦◦1.4286e+09
Число слева от точки в строке формата – это общее количество
позиций для вывода числа, а второе число – количество знаков
в дробной части мантиссы (для всех чисел, кроме числа 0, она
больше или равна 1 и меньше 10). Если первое число не указы-
вать, будет использовано наименьшее возможное место.
Что будет выведено в результате работы следующей
программы:
x = 172.3658
print( x )
print( "x={:f}".format(x) )
print( "x={:10.2f}".format(x) )
print( "x={:.8f}".format(x) )
Программа вывела числа в научном формате:
1.2345E+001 8.74E+00
2.345E+003 1.8752E-01
5.6E+005 3.462752E-03
Запишите их в «обычном» виде.
23 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Операции с вещественными числами
При работе с вещественными числами часто приходится
округлять их до ближайших целых чисел. Для этого в языке Py-
thon есть две функции:
• int(x) – отбрасывание дробной части числа x;
• round(x) – округление вещественного числа x к ближай-
шему целому числу.
Как можно выделить дробную часть положительного
вещественного числа в алгоритмическом языке?
Что будет выведено на экран в результате работы
следующей программы:
a = 1; b = 2; c = 3; d = 7
print( "{:0.2f}".format(a/b) )
x = b / c
print( "{:0.2f}{:2}".format(x, int(x)) )
print( "{:0.2f}".format(x-int(x)) )
x = d / c
print( "{:0.2f}{:2}".format(x, int(x)) )
print( "{:0.2f}".format(x-int(x)) )
Другие математические функции объединены в модуль
math. Модуль в языке Python – это файл, содержащий функции.
Для того чтобы вызывать математические функции из своей
программы, подключим (импортируем) модуль math с помощью
команды import:
import math
После этого можно применять функции из этого модуля. Вот так
можно вычислить и вывести на экран квадратный корень из
числа 5:
x = [Link](5)
print( "{:.3f}".format(x) ) # 2.236
Здесь из модуля math вызывается функция sqrt, которая вы-
числяет квадратный корень из числа 5, то есть находит число,
квадрат которого равен 5.
24 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Для обращения к функциям модуля используется точечная
запись: сначала записывают имя модуля, а затем через точку –
название функции.
Возможен и другой вариант, когда подключается не весь
модуль, а только некоторые функции из него:
from math import sqrt, pi
Этой строчкой к программе подключены из модуля math уже
знакомая вам функция sqrt и константа (постоянная) pi, рав-
ная иррациональному числу π (3,1415626…). В этом случае для
обращения к ним уже не нужно будет указывать имя модуля:
x = sqrt(5)
R = 12
circleLen = 2*pi*R
Можно подключить сразу все функции из модуля, если напи-
сать знак * вместо списка функций:
from math import *
Напишите программу, которая вычисляет квадратный
корень введённого числа. Вычислите с её помощью
квадратные корни из чисел 221841; 32005,21 и 15239,9025.
Вычисления с вещественными числами могут приводить к
вычислительным ошибкам. Вспомните, что число 1/3 не может
быть точно записано в десятичной системе – его дробная часть
содержит бесконечное число цифр. В компьютерах происходит
то же самое: на каждое число выделяется конечное число раз-
рядов, поэтому большинство вещественных чисел хранится в
памяти компьютера неточно. Следовательно, вычисления тоже
будут неточными.
1 1 1 1 n
Вычислите вручную сумму X=
+ + + = в виде
2 3 4 5 d
простой дроби. Затем проверьте, что выведет эта
программа (вместо многоточий добавьте полученные
значения n и d):
n = ...; d = ...
y = 1/2 + 1/3 + 1/4 + 1/5
25 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
x = n / d
print( x )
print( y )
print( x - y )
Сделайте выводы.
26 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
зуется один из наиболее совершенных алгоритмов для генера-
ции псевдослучайных чисел – «вихрь Мерсенна», разработан-
ный в 1997 году.
Для получения псевдослучайных чисел в заданном диапа-
зоне мы будем использовать функции из модуля random:
• randint(a,b) – случайное целое число на отрезке [a; b];
• uniform(a,b) – случайное вещественное число на отрез-
ке [a; b].
Для того чтобы записать в переменную n случайное число
на отрезке [1; 6] (результат бросания игрального кубика), можно
использовать такие команды:
from random import randint
n = randint( 1, 6 )
В первой строке из модуля random импортируется (загружается)
функция randint, во второй она вызывается для получения
случайного числа.
Вещественное случайное число на отрезке [5; 12] получается
так:
from random import uniform
x = uniform( 5, 12 )
Выводы:
• Переменная — это величина, которая имеет имя, тип и зна-
чение. Значение переменной может изменяться во время вы-
полнения программы.
• Идентификатор — это имя переменной.
• Основные операции с переменными – ввод, вывод, присваи-
вание нового значения.
• Если переменной присваивается новое значение, предыду-
щее стирается.
• Арифметические выражения обычно записываются в одну
строчку. Операция умножения обозначается знаком «*», а
операция деления – знаком «/».
27 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
• Для целочисленного деления в языке Python используется
оператор //, для вычисления остатка от деления – опера-
тор %.
• Арифметические операции выполняются в следующем по-
рядке:
1) действия в скобках;
2) возведение в степень, справа налево;
3) умножение, деление и взятие остатка, слева направо;
4) сложение и вычитание, слева направо.
• Случайные числа – это последовательность чисел, в которой
невозможно предсказать следующее число, даже зная все
предыдущие. На компьютере обычно используют псевдослу-
чайные числа, которые получают по некоторой формуле.
Интеллект-карта
целые
присваивание тип вещественные
ввод действия переменные строки
вывод имя (идентификатор)
значение
формат арифметическое
вывода выражение случайное
числа
скобки
** приоритет
знаки операций */ // %
+-
Рис. 3.3.
28 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Практическая работа №9. Операции с вещественными числами
Вопросы и задания
1. Во многих языках программирования (в том числе в школь-
ном алгоритмическом языке и в языке Паскаль) переменные
нужно заранее объявлять. Обсудите в классе, какие достоин-
ства и недостатки имеет такой подход.
2. Почему желательно выводить на экран подсказку перед вво-
дом данных?
3. Чем отличаются два оператора вывода:
print( a ) и print( "a" )
Какой из них может привести к ошибке во время выполне-
ния программы? В каком случае?
4. Когда можно вычислять результат прямо в операторе выво-
да, а когда нужно сохранять его в отдельной переменной?
5. В каком порядке выполняются операции, если они имеют
одинаковый приоритет?
6. Зачем используются скобки в арифметических выражениях?
7. Объясните, чем отличаются случайные числа от псевдослу-
чайных. Почему в компьютерах используются именно псев-
дослучайные числа?
Задачи
1. Что будет выведено при выполнении следующей команды
при a = 5 и b = 3?
а) print( a, ">", b, "!" )
б) print( "a>", "b!" )
в) print( "(", a, ")<(", a+b, ")" )
2. Запишите команду для вывода значений целых переменных
a = 5 и b = 3 в следующем формате:
а) 3+5=?
б) (5)(3)
в) a=5; b=3;
29 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
г) Ответ: (5;3)
3. Вычислите значение вещественной переменной c при a = 2 и
b = 3:
а) с = a + 1 / 3
б) с = a + 4 / 2 * 3 + 6
в) с = (a + 4) / 2 * 3
г) с = (a + 4) /(b + 3) * a
4. Вычислите значение целочисленной переменной c при a = 26
и b = 6:
а) c = a % b + b б) c = a // b + a
в) b = a // b г) b = a // b + b
c = a // b c = a % b + a
д) b = a % b + 4 е) b = a // b
c = a % b + 1 c = a % (b+1)
ж) b = a % b
c = a // (b+1)
5. *Выполните предыдущее задание при a = –22 и b = 4.
6. Напишите программу, которая находит сумму, произведение
и среднее арифметическое трёх целых чисел, введённых с
клавиатуры. Например, при вводе чисел 4, 5 и 7 мы должны
получить ответ
4+5+7=16
4*5*7=140
(4+5+7)/3=5.333333
7. Напишите программу, которая получает с клавиатуры коли-
чество секунд и выводит то же самое время в часах, минутах
и секундах.
8. Занятия в школе начинаются в 8-30. Урок длится 45 минут,
перерывы между уроками – 10 минут. Напишите программу,
которая получает с клавиатуры номер урока и выводит вре-
мя его окончания.
9. Напишите программу, которая вычисляет стоимость не-
скольких пирожков. Программа должна ввести три числа:
цену пирожка (два числа: рубли, потом – копейки) и количе-
30 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
ство пирожков. Требуется вывести сумму, которую нужно за-
платить (рубли и копейки).
10. В игре «Русское лото» из мешка случайным образом выби-
раются бочонки, на каждом из которых написано число от 1
до 90. Напишите программу, которая выводит наугад пер-
вые 5 выигрышных номеров.
11. *Доработайте программу «Русское лото» так, чтобы все 5
значений гарантированно были бы разными.
12. Игральный кубик бросается три раза (выпадает три слу-
чайных значения). Из этих чисел составляется целое число,
программа должна найти его квадрат.
13. Требовалось написать программу, которая меняет местами
значения двух переменных в памяти. Программист торо-
пился и написал программу так:
a = b
b = a
Что получится, если вначале значения переменных были
равны a = 1, b = 2? Как исправить программу?
31 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
начала, например, из числа 1234 должно получиться число
134.
19. Напишите программу, которая получает с клавиатуры че-
тырёхзначное число и удаляет из него первую и последнюю
цифры, например, из числа 1234 должно получиться число
23.
20. Напишите программу, которая получает с клавиатуры два
целых числа, а и b (a < b), и выводит на экран 5 случайных
целых чисел на отрезке [a; b].
21. Напишите программу, которая моделирует бросание двух
игральных кубиков: при запуске выводит случайное число
на отрезке [2; 12].
22. Напишите программу, которая случайным образом выбира-
ет дежурных: выводит два случайных числа на отрезке [1;
N], где N – количество учеников вашего класса. Какая про-
блема может при этом возникнуть?
23. Напишите программу, которая получает с клавиатуры два
вещественных числа, а и b (a < b), и выводит на экран 5
случайных вещественных чисел на отрезке [a; b].
Темы сообщений:
а) «Научный формат вывода чисел»
б) «Как получают псевдослучайные числа?»
32 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
§ 19. Ветвления
Ключевые слова:
• условный оператор • сложное условие
• полная форма условного • операция «И»
оператора • операция «ИЛИ»
• неполная форма условного • операция «НЕ»
оператора • логические переменные
• составной оператор • экспертная система
• вложенный условный опе-
ратор
Условный оператор
Сейчас мы умеем писать линейные программы, в которых
операторы выполняются последовательно друг за другом, и по-
рядок их выполнения не зависит от входных данных.
В большинстве реальных задач порядок действий может
несколько изменяться, в зависимости от того, какие данные по-
ступили. Например, программа для системы пожарной сигна-
лизации должна выдавать сигнал тревоги, если датчики пока-
зывают повышение температуры или задымленность.
Требуется записать в переменную M наибольшее из
значений переменных a и b. Сформулируйте алгоритм
решения задачи в словесной форме.
Для этой цели в языках программирования предусмотрены
условные операторы (ветвления). В 7 классе мы изучали раз-
ветвляющиеся алгоритмы для исполнителя Робот, а сейчас бу-
дем работать с числами. Например, для того, чтобы записать в
переменную M максимальное (наибольшее) из значений пере-
менных a и b, можно использовать оператор:
if a > b:
M = a
else:
M = b
33 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Найдите и запишите в тетрадь перевод английских слов
if, else.
Если истинно (верно) условие, записанное после слова if, то
выполняются все команды (также говорят «блок команд»), кото-
рые расположены до слова else. Если же условие после if
ложно (неверно), выполняются команды, стоящие после else.
В Python, в отличие от других языков, сдвиги операторов
относительно левой границы (отступы) влияют на работу про-
граммы.
Обратите внимание, что слова if и else записаны с первой
позиции (без отступов), а все команды внутренних блоков сдви-
нуты относительно этого уровня вправо на одно и то же рассто-
яние. Для сдвига используют пробелы (обычно не меньше двух)
или символы табуляции (которые вставляются при нажатии на
клавишу Tab).
Кроме знаков < и >, в условиях можно использовать другие
знаки отношений: <= (меньше или равно), >= (больше или рав-
но), == (равно, два знака «равно» без пробела, чтобы отличить от
оператора присваивания) и != (не равно).
Если в блоке всего один оператор, иногда бывает удобно за-
писать блок в той же строке, что и служебные слова if (else):
if a > b: M = a
else: M = b
Поскольку операция выбора максимального из двух значе-
ний нужна очень часто, в Python есть встроенная функция max,
которая вызывается так:
M = max( a, b )
Есть также и аналогичная функция min, которая выбирает ми-
нимальное (наименьшее) из двух или нескольких значений.
Если выбирается максимальное из двух чисел, можно ис-
пользовать особую форму условного оператора в Python:
M = a if a > b else b
34 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
которая работает так же, как и приведённый выше условный
оператор в полной форме: записывает в переменную M значе-
ние a, если a > b, и значение b, если это условие ложно.
35 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
*Напишите последовательность команд, с помощью
которой можно поменять значения двух переменных.
Составной оператор
Часто при выполнении какого-то условия нужно выпол-
нить сразу несколько действий. Например, в задаче сортировки
значений переменных a и b по возрастанию нужно поменять ме-
стами значения этих переменных, если a > b:
if a > b:
temp = a
a = b
b = temp
Здесь temp – это временная (вспомогательная) переменная (от
англ. temporary – временный). Все операторы, входящие в блок,
сдвинуты на одинаковое расстояние от левого края. Начало и
конец блока, который выполняется при истинном условии,
определяется именно этими сдвигами. Поэтому операторные
скобки – специальные ограничители блоков (как, например,
слова begin и end в языке Паскаль или фигурные скобки в С-
подобных языках) здесь не нужны.
Заметим, что в Python, в отличие от многих других языков
программирования, есть множественное присваивание, которое
позволяет выполнить такой обмен значительно проще:
a, b = b, a
36 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
end; }
В языке Паскаль оператор присваивания записывается в
виде последовательности символов «:=», а в языке C++ – так же,
как и в Python – с помощью одного знака «=». Оформление в
языке Паскаль более сложное: после условия пишут слово then
(по-английски – тогда), а составной оператор «охвачен» опера-
торными скобками – служебными словами begin и end. В язы-
ке С++ условие после if обязательно заключается в круглые
скобки, а составной оператор ограничивается фигурными скоб-
ками.
38 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Сложные условия
Предположим, что ООО «Кнут и Пряник» набирает сотруд-
ников, возраст которых от 25 до 40 лет включительно. Нужно
написать программу, которая запрашивает возраст претендента
и выдает ответ: «подходит» он или «не подходит» по этому при-
знаку.
Какое же условие должно быть истинно для того, чтобы че-
ловека приняли на работу? Одного условия «возраст >= 25» не
хватает, это условие соблюдается и для людей старше 40 лет. С
другой стороны, условия «возраст <= 40» тоже не хватает, так
как оно выполняется и для школьников. В этой задаче нужно,
чтобы два условия выполнялись одновременно: «возраст >=
25» и «возраст <= 40».
Пусть в переменной age записан возраст сотрудника.
Запишите решение задачи с помощью вложенных условных
операторов.
Эту задачу можно решить с помощью вложенного условного
оператора, но решение получается некрасивое: оно запутанное
и, кроме того, один и тот же ответ «не подходит» приходится вы-
водить в двух местах программы.
Почти во всех языках программирования в условном опе-
раторе можно использовать такое условие:
if age >= 25 and age <= 40:
print( "подходит" )
else:
print( "не подходит" )
Решение получилось короткое и понятное. В условном операто-
ре мы записали сложное условие
age >= 25 and age <= 40,
составленное из двух простых с помощью логической операции
«И». В языке Python эта операция обозначается словом and.
Операция «И» (and) означает одновременное выполнение двух
или нескольких условий.
39 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
В программа на языке Python можно сразу проверить вы-
полнение двойного неравенства:
if 25 <= age <= 40:
print("подходит")
else:
print("не подходит")
но во многих популярных языках программирования такая за-
пись приводит к ошибке.
Что будет выведено на экран после выполнения следующей
программы?
if a == 1 and a == 2:
print( "Да!" )
else:
print( "Нет." )
Предположим, что нам надо убедиться, что значение целой
переменной a – трёхзначное число, которое делится на 7. Для
этого нужно, чтобы одновременно выполнились три условия:
1) число не меньше 100;
2) число меньше 1000;
3) число делится на 7, то есть остаток от его деления на 7
равен нулю.
В условном операторе эти три простых условия должны быть
связаны с помощью двух операций «И»:
if 100 <= a and a < 1000 and a % 7 == 0:
print( "Да!" )
else:
print( "Нет." )
Рассмотрим ещё одну задачу. Самолёт из Санкт-Петербурга
в Барнаул летает только по понедельникам и четвергам. В пе-
ременной day записан номер дня недели (1 – понедельник, 7 –
воскресенье). Программа должна определить, полетит ли само-
лёт в этот день.
Если мы напишем условие «day = 1 and day = 4», то это бу-
дет неверно, потому что мы потребовали, чтобы значение пере-
менной day было одновременно равно и 1, и 4. Такого быть не
40 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
может, поэтому это условие всегда будет ложно. Значит, опера-
ция «И» не подходит. Вместо неё нужно применить другую опе-
рацию – «ИЛИ», которая требует выполнения хотя бы одного из
набора условий.
Операция «ИЛИ» означает выполнение хотя бы одного из двух
или нескольких условий.
Решение нашей задачи выглядит так:
if day == 1 or day == 4:
print( "Полетит!" )
else:
print( "Нет рейса." )
В языке Python операция «ИЛИ» обозначается словом «or» (по-
английски – «или»).
Напишите другой вариант решения последней задачи,
использующий операцию «И».
Существует ещё одна операция, которую можно использо-
вать в сложных условиях – «НЕ», в Python она обозначается
словом «not» (по-английски – «не»).
Операция «НЕ» означает обратное условие (противоположное
исходному).
Если исходное условие истинно, то обратное (противоположное)
ему – ложно, и наоборот.
Например, решение задачи с самолётом можно было запи-
сать так:
if not( day == 1 or day == 4 ):
print( "Нет рейса." )
else:
print( "Полетит!" )
Используя операцию «НЕ», можно записывать условия по-
разному, как нам удобнее в каждом случае. Например, условия
a==b и not(a!=b) истинны для одних и тех же значений a и b,
поэтому одно из них можно заменить на другое. Такие условия
называются равносильными.
41 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Запишите равносильные условия, не используя операцию
«НЕ»:
а) not (a < 6) б) not (b == c+d)
в) not (c != 15)
Приведём ещё примеры равносильных условий. Условие
not ( x >= 0 and x <= 10 )
означает «x не находится внутри отрезка [0; 10]». Это значит,
что значение x на числовой оси расположено левее нуля или
правее, чем 10. Поэтому его можно записать иначе, без исполь-
зования операции «НЕ»:
x < 0 or x > 10
Обратите внимание, что в исходном выражении простые усло-
вия были связаны с помощью операции «И», а в равносильном
обратные условия связаны с помощью «ИЛИ».
Условие not(x==2 or x==5) означает, что значение x не
равно ни двум, ни пяти, то есть истинно условие
x != 2 and x != 5
Здесь при переходе к равносильному условию без НЕ логиче-
ская операция «ИЛИ» была заменена на «И».
*Запишите равносильные условия, не используя операцию
«НЕ»:
а) not ( 7 < a and a < 12 )
б) not ( b != c or d < 5 )
42 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
4) операции «ИЛИ».
Изменить порядок действий можно с помощью круглых скобок.
Определите порядок операций при определении
истинности условия:
not (a > 10) or not (a < 10) and (a < b)
Определите, истинно или ложно это выражения при a = 5,
b = 10.
Для выражения в предыдущем задании запишите
равносильное выражение без использования операции «НЕ».
После этого расставьте одну пару скобок так, чтобы
значение выражения при a = 5, b = 10 изменилось на обрат-
ное.
Логические переменные
В языке Python можно использовать переменные, которые
принимают только логические значения – True («истина») или
False («ложь»):
b = True
b = False
В логической переменной можно хранить значение какого-
то условия и затем использовать его в условном операторе:
fly = (d == 1) or (d == 4)
if not fly:
print( "Нет рейса." )
else:
print( "Полетит!" )
С клавиатуры вводятся три числа и записываются в
переменные a, b и c. Напишите программу, которая запи-
сывает в логическую переменную значение «да» (True), если
среди них найдётся пара чисел, сумма которых равна 25.
43 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Экспертная система
Эксперт – это человек, который обладает глубокими теоре-
тическими знаниями и практическим опытом работы в некото-
рой области. Например, врач-эксперт хорошо ставит диагноз и
лечит потому, что имеет медицинское образование и большой
опыт лечения пациентов. Он не только знает факты, но пони-
мает их взаимосвязь, может объяснить причины явлений, сде-
лать прогноз, найти решение в конфликтной ситуации.
Экспертная система – это компьютерная программа, задача
которой – заменить человека-эксперта при выработке рекомен-
даций для принятия решений в сложной ситуации.
Экспертная система содержит базу знаний, в которой хра-
нятся не только факты, но и правила, по которым из этих фак-
тов делаются выводы.
Мы построим простейшую экспертную систему, которая за-
даёт пользователю вопросы и по его ответам определяет класс
животных.
Предположим, что в базу знаний внесены следующие пра-
вила:
• если у животного есть перья, то это – птица;
• если животное кормит детенышей молоком, то это – млеко-
питающее;
• если животное – млекопитающее и ест мясо, то это – хищ-
ник.
Диалог пользователя с экспертной системой может быть,
например, таким (ответы пользователя выделены курсивом):
Это животное кормит детей молоком? нет
Это животное имеет перья? да
Это птица.
Для того чтобы определить последовательность вопросов,
эксперт строит дерево решений, например, такое:
44 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
нет да
млекопитающее
нет да нет да
? птица ? хищник
Рис. 3.4.
В прямоугольниках записаны вопросы, которые задаёт си-
стема пользователю, у стрелок – его возможные ответы («да»
или «нет»). Фоном выделены выводы – результат работы экс-
пертной системы.
Постройте трёхуровневое дерево решений для своей
экспертной системы.
Конечно, эта система позволяет определить не все классы
животных: в некоторых местах на схеме стоят знаки вопроса. В
этих случаях наша программа будет выводить ответ «не знаю».
Человеку удобнее вводить ответ словами («да», «нет»), то
есть в виде символьной строки. Именно в такой форме возвра-
щает результат ввода функция input, с которой мы уже знако-
мы.
Программа начинает диалог с вопроса «Кормит детей моло-
ком?» и в зависимости от ответа выбирает одну из двух ветвей
дерева решений (см. Рис. 3.4).
otvet = input( "Кормит детей молоком? " )
if otvet == "да":
... # вариант 1
else:
... # вариант 2
Конечно, вместо многоточий должны быть добавлены команды,
которые нужно выполнить в каждом случае.
45 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Обратите внимание, что символьные строки можно сравни-
вать с помощью оператора «==» так же, как и числа.
Разберём дальнейшие действия системы при первом ответе
«да». Во-первых, нужно вывести первый результат: «Это млеко-
питающее». Во-вторых, задаём второй вопрос и в зависимости от
ответа на него сообщаем второй результат:
print( "Млекопитающее." )
otvet = input( "Ест мясо? " )
if otvet == "да":
print( "Хищник." )
else:
print( "Не знаю." )
Вторую ветку главного условного оператора (вариант 2) вы
можете написать самостоятельно.
Обратите внимание, что условие «otver == 'да'» сработа-
ет только тогда, когда пользователь введёт ответ именно так,
всеми строчными буквами. Если он наберёт «Да» (с заглавной
буквы) программа примет это как ответ «нет». Чтобы решить эту
проблему, нужно использовать сложное условие:
if otvet == "да" or otvet == "Да":
...
Итак, теперь вы умеете использовать переменные ещё од-
ного типа – символьные строки.
Выводы:
• Условный оператор служит для организации ветвления – вы-
бора одного из двух вариантов действий. Для выбора более,
чем из двух вариантов, нужно использовать несколько услов-
ных операторов.
• Условный оператор в полной форме содержит 1) условие, 2)
список команд, которые нужно выполнить, если условие ис-
тинно, и 3) список команд, которые нужно выполнить, если
условие ложно.
46 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
• Если условный оператор записан в неполной форме, то при
ложном условии никаких действий не выполняется.
• Условный оператор в полной форме можно заменить на два
условных оператора в неполной форме; условия в них долж-
ны быть взаимно обратными: если одно из них истинно, то
другое должно быть ложно.
• Внутри каждой ветки условного оператора можно использо-
вать любые операторы языка программирования, в том числе
и вложенные условные операторы.
• В сложных условиях для объединения нескольких условий
используются логические операции «И», «ИЛИ» и «НЕ». В
языке Python они обозначаются служебными словами and, or
и not.
• Операция «И» (and) означает одновременное выполнение
двух или нескольких условий.
• Операция «ИЛИ» (or) означает выполнение хотя бы одного
из двух или нескольких условий.
• Операция «НЕ» (not) означает обратное условие (противопо-
ложное исходному).
• Логическая переменная – это переменная, которая может
принимать только логические значения: «истина» и «ложь».
• Экспертная система – это компьютерная программа, задача
которой – заменить человека-эксперта при выработке реко-
мендаций для принятия решений в сложной ситуации.
47 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Интеллект-карта
ветвления
экспертная дерево
система решений
Рис. 3.5.
Практическая работа №11. Ветвления
Вопросы и задания
1. Какие задачи невозможно решить с помощью линейных ал-
горитмов?
2. Как вы думаете, хватит ли линейных алгоритмов и ветвле-
ний для разработки любой программы?
3. Почему нельзя выполнить обмен значений двух переменных
в два шага: a = b; b = a?
4. Можно ли переставлять операторы в приведённом алгоритме
обмена значений двух переменных? Если нет, приведите
контрпример, когда перестановка даст неверный результат.
5. Как вы думаете, можно ли обойтись только неполной формой
условных операторов?
6. Какие отношения вы знаете? Как обозначаются отношения
«равно» и «не равно»?
48 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
7. Чем отличаются операторы «=» и «==»?
8. Как определяется порядок вычислений в сложном условии?
Как его изменить?
Задачи
1. Объясните, чем отличаются следующие фрагменты про-
грамм:
if a > b: a = b
a = c
и
if a > b: a = b
else: a = c
Приведите примеры исходных данных, для которых резуль-
таты выполнения обеих программ (значение переменной a)
будут одинаковыми, и примеры данных, для которых они бу-
дут различными.
2. Объясните, чем отличаются следующие фрагменты про-
грамм:
if a > b: a = b
if a > c: a = c
и
if a > b: a = b
elif a > c: a = c
Приведите примеры исходных данных, для которых резуль-
таты выполнения обеих программ (значение переменной a)
будут одинаковыми, и примеры данных, для которых они бу-
дут различными.
3. Требовалось записать в переменную М максимальное из трёх
чисел, хранящихся в переменных a, b и c. Программист спе-
шил и написал программу так:
if a > b: M = a
else: M = b
if c > b: M = c
else: M = b
49 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Приведите контрпример, то есть значения переменных, при
котором в переменной M будет получен неверный ответ. Как
нужно изменить программу, чтобы она всегда работала пра-
вильно?
4. Напишите программу, которая получает с клавиатуры два
целых числа и находит наибольшее и наименьшее из них.
5. Напишите программу, которая получает с клавиатуры три
целых числа и находит наибольшее и наименьшее из них.
6. *Напишите программу, которая получает с клавиатуры воз-
расты трёх человек (Антона, Бориса и Виктора) и определя-
ет, кто из них старше.
7. Напишите программу, которая получает три числа – рост
трёх спортсменов, и выводит сообщение «По росту.», если
числа введены по возрастанию (неубыванию), или сообщение
«Не по росту!», если они введены в другом порядке.
8. Напишите программу, которая получает с клавиатуры номер
месяца и выводит название соответствующего ему времени
года или сообщение об ошибке.
9. *Напишите программу, которая получает с клавиатуры воз-
раст человека (целое число, не превышающее 120) и выводит
этот возраст со словом «год», «года» или «лет». Например, «21
год», «22 года», «25 лет».
10. Напишите программу, которая получает с клавиатуры це-
лое число и выводит ответ на вопрос: «Верно ли, что было
получено трёхзначное число?».
11. Напишите программу, которая получает с клавиатуры трёх-
значное число и выводит ответ на вопрос: «Верно ли, что
введённое число – палиндром?» (число-палиндром читается
одинаково слева направо и справа налево, например, число
151).
12. *Напишите программу, которая получает с клавиатуры
трёхзначное число и выводит ответ на вопрос: «Верно ли,
что все цифры введённого числа одинаковы?».
50 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
13. *Напишите программу, которая выбирает максимальное и
минимальное из пяти введённых чисел.
14. Напишите программу, которая определяет, принадлежит
ли число x отрезку [a; b]. Все числа вещественные, значения
x, a и b вводятся с клавиатуры. Разработайте два варианта
программы: с использованием вложенных условных опера-
торов и со сложным условием.
15. *Напишите программу, которая получает трёхзначное чис-
ло и определяет, верно ли, что все его цифры разные (про-
грамма должна вывести ответ «да» или «нет»).
16. *Напишите программу, которая получает трёхзначное чис-
ло и определяет, верно ли, в его записи есть одинаковые
цифры (программа должна вывести ответ «да» или «нет»).
17. *Напишите программу, которая получает четырёхзначное
число и определяет, верно ли, что оно является палиндро-
мом (программа должна вывести ответ «да» или «нет»).
Например, число 2332 – палиндром, а 2342 – нет.
18. Напишите программу, которая решает линейное уравнение
a⋅x = b. Значения a и b известны (вводятся с клавиатуры), а
x нужно найти. Все числа вещественные. Подумайте, зачем
в этой задаче нужны ветвления.
19. Напишите программу, которая получает с клавиатуры но-
мер месяца и определяет, сколько дней в этом месяце. При
вводе неверного номера месяца должно быть выведено со-
общение об ошибке.
20. Напишите программу, которая размещает случайным обра-
зом две ладьи на шахматной доске и определяет, бьют ли
эти ладьи друг друга.
21. Напишите программу, которая размещает случайным обра-
зом двух слонов на шахматной доске и определяет, стоят ли
они на полях одного цвета.
22. *Напишите программу, которая получает с клавиатуры ко-
ординаты двух ферзей на шахматной доске и определяет,
бьют ли эти ферзи друг друга.
51 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
23. *Напишите программу, которая получает с клавиатуры ко-
ординаты двух коней на шахматной доске и определяет,
бьют ли эти кони друг друга.
24. *Напишите программу, которая получает с клавиатуры но-
мер месяца и день, и определяет, сколько дней осталось до
Нового года. При вводе неверных данных должно быть вы-
ведено сообщение об ошибке.
25. *Напишите программу, которая получает целое число, не
превышающее 100, и выводит его прописью, например,
21 → «двадцать один».
26. Какую часть дерева решений нужно расширить, чтобы экс-
пертная система, приведённая в параграфе, могла опреде-
лять рыб по условию «если животное дышит жабрами, то это
рыба»? Доработайте программу и отладьте её.
27. Разработайте небольшую экспертную систему для той обла-
сти, которая вам интересна.
Темы сообщений:
а) «Выбор из многих вариантов»
б) «Экспертные системы»
52 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Циклы с условием
Цикл, в котором проверка условия выполняется при входе
(перед выполнением очередного шага) называется циклом с
предусловием, то есть циклом с предварительной проверкой
условия. Перед тем, как начать выполнение цикла, мы прове-
ряем, нужно ли это делать вообще. Это можно сравнить с такой
ситуацией: перед тем, как прыгнуть в бассейн, нужно прове-
рить, есть ли в нём вода.
Все циклы, записанные в начале параграфа – это циклы с
предусловием. У них есть два важных свойства:
• цикл не выполнится ни разу, если условие в самом начале
ложно;
• как только нарушается условие в заголовке цикла, его рабо-
та заканчивается.
Рассмотрим ещё одну задачу, которая решается с помощью
цикла с условием. Требуется ввести с клавиатуры натуральное
число и найти сумму цифр его десятичной записи. Например,
если ввели число 123, программа должна вывести сумму 1+2+3
= 6.
Сначала составим алгоритм решения это задачи. Предпо-
ложим, что число записано в переменной N. Нам нужно как-то
разбить число на отдельные цифры.
Запишите команды, с помощью которых можно:
• записать в переменную d последнюю цифру числа,
находящегося в переменной N;
• отбросить последнюю цифру числа, находящегося в
переменной N;
• добавить значение переменной d к значению, находя-
щемуся в переменной s.
55 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Вспомним, что остаток от деления числа на 10 равен по-
следней цифре его десятичной записи. Запишем эту цифру в
переменную digit:
digit = N % 10
Сумму цифр будем хранить в целой переменной summa. В самом
начале, пока ни одну цифру ещё не обработали, значение этой
переменной равно нулю:
summa = 0
Для того чтобы добавить к предыдущей сумме новую цифру,
нужно заменить значение переменной summa на summa+digit, то
есть выполнить присваивание
summa += digit
Для того чтобы затем отсечь последнюю цифру числа N, разде-
лим N на 10 (основание системы счисления):
N = N // 10
Эти три операции – выделение последней цифры числа,
увеличение суммы и отсечение последней цифры – нужно вы-
полнять несколько раз, пока все цифры не будут обработаны (и
отсечены!) и в переменной N не останется ноль:
N = int( input("Введите число: ") )
summa = 0
while N != 0:
digit = N % 10
summa += digit
N = N // 10
print( "Сумма цифр", summa )
Выполните ручную прокрутку программы при N = 123.
Определите итоговое значение переменной summa.
Для введённого числа 123 программа должна выдать ответ
6 (последнее значение переменной sum). Это правильный ответ.
В отличие от предыдущего примера, здесь количество ша-
гов цикла заранее неизвестно, оно определяется количеством
цифр введённого числа.
56 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Сколько раз выполнится цикл, если ввести однозначное
число? двузначное? K-значное? число 0?
Какова может быть сумма цифр двузначного числа?
трёхзначного? K-значного?
Докажем, что эта программа не зациклится, то есть не бу-
дет работать бесконечно. Цикл завершается, когда переменная
N становится равна нулю, поэтому нужно доказать, что это обя-
зательно случится. По условию заданное число – натуральное,
на каждом шаге цикла оно делится на 10 (остаток отбрасывает-
ся), поэтому значение переменной N каждый раз уменьшается.
В результате после очередного уменьшения оно обязательно
станет равно нулю.
Алгоритм Евклида
Алгоритм Евклида позволяет найти наибольший общий
делитель (НОД) двух натуральных чисел.
Алгоритм Евклида для натуральных чисел: заменять
бóльшее из двух заданных чисел на их разность до тех пор, пока
они не станут равны. Полученное число и есть их НОД.
Этот вариант алгоритма работает довольно медленно, если
одно из чисел значительно меньше другого, например, для па-
ры чисел 2 и 2020. Значительно быстрее выполняется улучшен-
ный (модифицированный) алгоритм Евклида.
Модифицированный алгоритм Евклида для натуральных
чисел: заменять бóльшее из двух заданных чисел на остаток от
деления бóльшего на меньшее, пока этот остаток не станет ра-
вен нулю. Тогда второе число и есть их НОД.
Мы видим, что здесь тоже нужно выполнять некоторые
операции несколько раз, причём сколько раз – заранее неиз-
вестно. Но нас выручит цикл с условием, ведь мы знаем, когда
нужно остановиться – когда какое-нибудь из двух чисел станет
равно нулю.
57 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Запишите условие, которое означает «одно из значений
переменных a или b равно нулю». После этого запишите
обратное условие.
Теперь мы готовы записать цикл:
while a != 0 and b != 0:
if a > b:
a = a % b
else:
b = b % a
Остаётся вывести результат – ненулевое значение пере-
менной a или b.
Запишите условный оператор, который выводит
результат, проверяя одну из переменных на равенство
нулю.
Из двух переменных, a и b, одна (неизвестно какая) равна
нулю, а вторая – не ноль. Запишите арифметическое
выражение, которое всегда равно второй (ненулевой)
переменной.
Количество итераций такого цикла заранее неизвестно и
зависит от исходных данных. Дополним программу так, чтобы
она считала ещё и количество сделанных итераций. Для этого
нужно ввести переменную-счётчик целого типа. Перед началом
цикла счётчик обнуляется (в него записывается ноль), и после
каждой итерации значение счётчика увеличивается на едини-
цу:
count = 0
while a != 0 and b != 0:
...
count += 1
print( a + b )
print( "Шагов:", count )
Вместо многоточия нужно вставить условный оператор, как
и в предыдущем варианте программы. Обратите внимание, что
58 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
оператор, увеличивающий значение счётчика, записывается с
отступом – он находится в теле цикла.
59 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
переменных: в переменной x будем хранить последнее введён-
ное число, а в переменной summa – накапливать сумму.
Какое начальное значение нужно присвоить переменной
summa?
Как добавить к значению переменной summa значение
переменной x?
Сначала запишем основной цикл программ, «скрыв» шаги
алгоритма в комментариях:
while x != 0:
# добавить x к сумме
# прочитать следующее число
Однако перед таким циклом нужно прочитать первое число,
иначе неясно, откуда возьмётся значение x при первой проверке
условия. В итоге получается такая программа:
summa = 0
x = int( input() )
while x != 0:
summa += x
x = int( input() )
print( "Сумма", summa )
Как нужно изменить программу для того, чтобы она
вычисляла сумму только положительных чисел?
Циклы по переменной
Вернёмся снова к задаче, которую мы обсуждали в одном из
параграфов – вывести на экран несколько раз слово «привет».
Фактически нам нужно организовать цикл, в котором блок опе-
раторов выполнится заданное число. Для этого можно приме-
нить ещё один вид цикла – цикл по переменной (или цикл с па-
раметром). На языке Python он записывается так:
for i in range(10):
print( "привет" )
60 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Здесь слово for означает «для», переменная i (её называют
переменной цикла) изменяется в диапазоне (in range) от 0 до
10, не включая 10 (то есть от 0 до 9 включительно). Таким обра-
зом, цикл выполняется для i = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 – ровно 10
раз. Переменная i – это счётчик выполненных итераций цикла.
Можно было записать этот цикл и по-другому:
for i in [0,1,2,3,4,5,6,7,8,9]:
print( "привет" )
В квадратных скобках через запятую перечислены все значения
переменной, при которых выполняется цикл. Если их много,
такой способ неудобен, лучше использовать встроенную функ-
цию range.
Обратите внимание, что последовательность, которую стро-
ит функция range, не бесконечна, то есть цикл с переменной
всегда заканчивается, программа не может зациклиться.
Рассмотрим ещё один пример. В информатике важную роль
играют степени числа 2 (2, 4, 8, 16 и т.д.). Давайте выведем на
экран все степени двойки от 21 до 210. Для решения этой задачи
мы можем написать программу, использующую цикл с услови-
ем:
power = 1
N = 2
while power <= 10 :
print( N )
N *= 2
power += 1
Вы наверняка заметили, что переменная power использу-
ется трижды (см. блоки, выделенные фоном): в операторе при-
сваивания начального значения, в условии выполнения цикла
и в теле цикла (увеличение на 1).
Чтобы собрать все действия с переменной power в один опе-
ратор, применим цикл по переменной. Нам нужно выполнить
тело цикла при power = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Чтобы получить
такой набор значений, нужно вызвать функцию range с двумя
61 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
аргументами: первый – это начальное значение (1), а второй –
ограничитель, не входящий в последовательность (11):
N = 2
for power in range(1,11):
print( N )
N *= 2
Запись цикла получилась проще, и поэтому меньше шан-
сов сделать ошибку.
Выясните, как переводятся на русский язык английские
слова for, range и power.
Запишите циклы, с помощью которых можно вывести на
экран
• целые числа от a до b (a ≤ b);
• квадраты целых чисел от a до b (a ≤ b).
Однако не любой цикл с условием может быть переписан
как цикл с переменной. Если количество повторений цикла не-
известно и не может быть найдено заранее (как в задаче с вы-
числением суммы цифр числа), цикл по переменной использо-
вать не удаётся.
С другой стороны, любой цикл по переменной можно заме-
нить на равносильный цикл с условием: вместо вызова функции
range придётся задать отдельно начальное значение перемен-
ной цикла, условие продолжения цикла и правило изменения
переменной цикла.
Рассмотрим ещё одну задачу – найдём сумму всех нату-
ральных чисел от 1 до 1000. Для накопления суммы будем ис-
пользовать переменную, которую назовём summa. В цикле дру-
гая переменная (скажем, i) изменяется от 1 до 1000, и на каж-
дом шаге этого цикла к сумме добавляется очередное значе-
ние i:
summa = 0
for i in range(1,1001):
summa += i
Запишите циклы, с помощью которых можно вычислить
62 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
• сумму целых чисел от a до b (a ≤ b);
• сумму квадратов целых чисел от a до b (a ≤ b).
63 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
В языке Паскаль переменная i изменяется в диапазоне от
1 до 1000 (включительно), каждое из этих значений добавляется
к значению переменной summa.
В языке Python с помощью вызова стандартной функции
range задаётся диапазон изменения переменной i от 1 до 1000,
причём последнее указанное число (1001) в этот диапазон не
входит.
Измените программы на языках Паскаль и Python так,
чтобы они вычисляли сумму квадратов натуральных
чисел от 5 до 25.
Выводы:
• С помощью циклов в программе можно выполнять повторя-
ющиеся действия.
• Различают два вида циклов: циклы с условием и циклы по
переменной.
• Цикл с условием выполняется до тех пор, пока некоторое
условие (условие продолжения работы цикла) не станет лож-
ным. Если это условие никогда не станет ложным, программа
зацикливается.
• Проверка условия в циклах с предусловием происходит перед
выполнением очередного шага цикла. Цикл с предусловием
не выполняется ни разу, если условие в заголовке цикла
ложно перед входом в цикл.
64 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
• Цикл по переменной применяют тогда, тогда количество ша-
гов цикла заранее известно или может быть вычислено до
начала цикла. В заголовке цикла по переменной указывают
начальное значение, конечное значение и шаг изменения
переменной цикла.
Интеллект-карта
циклы
с условием по переменной
while условие: for i in range(n):
... ...
for i in range(a,b):
...
for i in range(a,b,d):
...
Рис. 3.6.
Вопросы и задания
1. В каком случае программа, содержащая цикл с условием,
может зациклиться?
2. В каких случаях цикл с условием не выполняется ни разу?
3. В каких случаях цикл по переменной не выполняется ни ра-
зу?
4. Может ли цикл по переменной работать бесконечно?
5. Сравните цикл по переменной и цикл с условием. Какие
преимущества и недостатки есть у каждого из них?
6. Верно ли, что любой цикл по переменной можно заменить
циклом с условием? Верно ли обратное утверждение?
7. В каком случае можно заменить цикл с условием на цикл по
переменной?
65 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Задачи
1. Значения переменных a и b равны a = 4 и b = 6. Определите,
сколько раз выполнится цикл, и чему будут равны значения
этих переменных после его завершения:
а) while a < b:
a += 1
б) while a < b:
a += b
в) while a > b:
a = a + 1;
г) while a < b:
b = a - b;
д) while a < b:
a = a - 1;
2. Найдите ошибку в программе:
k = 0
while k < 10:
print( "привет" )
Как её можно исправить?
3. Что будет выведено на экран в результате работы следующе-
го цикла?
а) k = 1
while k < 5:
print( k, end=" " )
k += 1
б) k = 4
while k < 10:
print( k*k, end=" " )
k += 1
в) k = 12
while k > 3:
print( 2*k-1, end=" " )
k -= 1
г) k = 5
while k < 10:
66 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
print( k*k, end=" " )
k += 1
д) k = 15
while k > 6:
print( k-1, end=" " )
k -= 1
4. Значение переменной a равно 1. Определите, сколько раз
выполнится цикл и чему будет равно значение этой пере-
менной после его завершения:
а) for i in range(3):
a += 1
б) for i in range(3,0):
a += 1
в) for i in range(1,3,-1):
a += i
г) for i in range(3,0,-1):
a += i
5. Что будет выведено на экран в результате работы следующе-
го цикла?
а) k = 1
for i in range(1,6):
print( i, end="" )
б) k = 1
for i in range(1,6):
print( i+k, end="" )
в) k = 1
for i in range(1,6):
print( k*k, end="" )
k += 2
г) k = 8
for i in range(5,0,-1):
print( i, end="" )
k -= 2
д) k = 8
for i in range(5,0,-1):
print( 2*i-k, end="" )
67 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
k -= 2
6. Напишите программу, которая получает с клавиатуры коли-
чество повторений и выводит столько же раз какое-нибудь
сообщение.
7. Напишите программу, которая получает с клавиатуры нату-
ральное число и определяет, сколько раз в его десятичной
записи встречается цифра 1.
8. Напишите программу, которая получает с клавиатуры нату-
ральное число и находит наибольшую цифру в его десятич-
ной записи.
9. *Напишите программу, которая получает с клавиатуры
натуральное число и определяет, есть ли в его десятичной
записи две одинаковые цифры, стоящие рядом.
10. Напишите программу, которая получает с клавиатуры два
натуральных числа и находит их НОД с помощью алгорит-
ма Евклида. Программа должна подсчитать количество ша-
гов цикла.
11. Напишите программу, которая получает с клавиатуры два
натуральных числа и сравнивает количество шагов для вы-
числения их НОД с помощью «обычного» и модифициро-
ванного алгоритмов Евклида.
12. На вход программы поступает неизвестное количество чи-
сел целых, ввод заканчивается нулём. Определить, сколько
чисел получено.
13. На вход программы поступает неизвестное количество чи-
сел целых, ввод заканчивается нулём. Определить, сколько
получено чисел, которые делятся на 3.
14. На вход программы поступает неизвестное количество чи-
сел целых, ввод заканчивается нулём. Определить, сколько
получено двузначных чисел, которые заканчиваются на 3.
15. На вход программы поступает неизвестное количество чи-
сел целых, ввод заканчивается нулём. Найти максимальное
из введённых чётных чисел.
68 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
16. Напишите программу, которая предлагает ввести пароль и
не переходит к выполнению основной части, пока не введён
правильный пароль. Основная часть – вывод на экран «сек-
ретных сведений».
17. Напишите программу, которая получает с клавиатуры
натуральное число и определяет, простое оно или нет. Для
этого нужно делить число на все натуральные числа, начи-
ная с 2, пока не получится деление без остатка.
18. Напишите программу, которая получает с клавиатуры два
целых числа и вычисляет их произведение, используя толь-
ко операции сложения. Учтите, что числа могут быть отри-
цательными.
19. Напишите программу, которая получает с клавиатуры
натуральное число и вычисляет целую часть квадратного
корня из него – наибольшее число, квадрат которого не
больше данного числа.
20. Ипполит задумал трёхзначное число, которое при делении
на 15 даёт в остатке 11, а при делении на 11 даёт в остатке
9. Напишите программу, которая находит все такие числа.
21. С клавиатуры вводится натуральное число N. Программа
должна найти факториал этого числа (обозначается как N!)
– произведение всех натуральных чисел от 1 до N. Напри-
мер,
5! = 1 · 2 · 3 · 4 · 5 = 120.
22. Натуральное число называется числом Армстронга, если
сумма цифр числа, возведенных в N-ю степень (где N – ко-
личество цифр в числе) равна самому числу. Например, 153
= 13 + 53 + 33. Найдите все трёхзначные Армстронга.
69 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
25. Напишите программу, которая получает с клавиатуры
натуральное число N и находит сумму всех натуральных
чисел от 1 до N. Используйте сначала цикл с условием, а
потом – цикл по переменной.
26. Напишите программу, которая получает с клавиатуры
натуральное число N и выводит первые N чётных нату-
ральных чисел.
27. Напишите программу, которая получает с клавиатуры
натуральные числа a и b, и выводит квадраты всех нату-
ральных чисел на отрезке [a; b]. Например, если ввести 4 и
6, программа должна вывести
4*4=16
5*5=25
6*6=36
28. Напишите программу, которая получает с клавиатуры
натуральные числа a и b, и выводит сумму квадратов всех
натуральных чисел на отрезке [a; b].
29. Напишите программу, которая получает с клавиатуры
натуральное число N и выводит на экран N случайных це-
лых чисел. Запустите её несколько раз, объясните результа-
ты опыта.
30. *Напишите программу, которая строит последовательность
из N случайных чисел на отрезке от 0 до 1 и определяет,
сколько из них попадает в полуинтервалы [0;. 0,25), [0,25;
0,5), [0,5; 0,75) и [0,75; 1). Сравните результаты, полученные
при N = 10, 100, 1000, 10000.
31. *Автоморфные числа. Натуральное число называется авто-
морфным, если оно совпадает с последними цифрами своего
квадрата. Например, 252 = 625. Напишите программу, кото-
рая получает с клавиатуры натуральное число N и выводит
на экран все автоморфные числа, не превосходящие N.
32. Напишите программу, которая считает количество чётных
цифр введённого числа.
70 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
33. *Напишите программу, которая определяет, верно ли, что
введённое число состоит из одинаковых цифр (как, напри-
мер, 222).
34. Используя сначала цикл с условием, а потом – цикл по пе-
ременной, напишите программу, которая выводит на экран
чётные степени числа 2, от 210 до 22, в порядке убывания.
35. Напишите программу, которая получает с клавиатуры 10
чисел и вычисляет их сумму и произведение.
36. Напишите программу, которая получает с клавиатуры чис-
ла до тех пор, пока не будет введено число 0. В конце рабо-
ты программы на экран выводится произведение введенных
чисел (не считая 0).
37. Напишите программу, которая получает с клавиатуры чис-
ла до тех пор, пока не будет введено число 0. В конце рабо-
ты программы на экран выводится минимальное и макси-
мальное из введённых чисел (не считая 0).
38. Напишите программу, которая получает с клавиатуры чис-
ла до тех пор, пока не будет введено число 0. В конце рабо-
ты программы на экран выводится среднее арифметическое
введенных чисел (не считая 0).
39. Напишите программу, которая получает с клавиатуры
натуральные числа A и N и вычисляет AN без использова-
ния операции возведения в степень.
40. Напишите программу, которая получает с клавиатуры
натуральное число N и определяет сумму всех его делите-
лей, меньших самого числа. Например, для числа 8 эта
сумма равна 1 + 2 + 4 = 7.
41. *Напишите программу, которая выводит на экран в столбик
все цифры числа, начиная с первой.
42. *В магазине продается мастика в ящиках по 15 кг, 17 кг,
21 кг. Как купить ровно 185 кг мастики, не вскрывая ящи-
ки? Сколькими способами можно это сделать?
71 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Темы сообщений:
«Два вида циклов: сравнение»
72 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
§ 21. Массивы
Ключевые слова:
• массив • заполнение массива
• индекс элемента • вывод массива
• значение элемента • ввод массива
73 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Создание массива
Массив (список) можно создать перечислением элементов
через запятую в квадратных скобках, например, так:
A = [1, 3, 4, 23, 5]
print( type(A) )
Такая программа выведет
<class 'list'>
74 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Это означает, что с точки зрения языка Python массив – это объ-
ект типа list.
Массив можно составить не только из чисел, но и из данных
любых типов, например, символьных строк:
A = ["Вася","Петя","Коля","Маша","Даша"]
Массивы можно «складывать» с помощью знака +, напри-
мер, приведённый выше числовой массив можно было постро-
ить сложением нескольких списков:
A = [1, 3] + [4, 23] + [5]
Сложение одинаковых массивов заменяется умножением *.
Оператор
A = [0]*10
создаёт новый массив из 10 элементов (выделяет для них место
в памяти) и заполняет их нулями.
Длина массива (количество элементов в нём) определяется с
помощью функции len:
N = len(A)
Таким образом, в любой момент массив «знает» свой размер.
Иногда размер массива хранят в отдельной переменной:
N = 10
A = [0]*N
В этом случае очень легко переделать программу для работы с
массивом другого размера: достаточно просто изменить значе-
ние N в первой строке программы.
массив A 0 1 2 3 4
23 12 7 43 51
A[0] A[1] A[2] A[3] A[4]
обращение
к элементу
Рис. 3.7.
Как вы думаете, что делают эти операторы:
print( A[2] )
A[2] = 5
A[0] = A[1] + 2*A[2]
Индексом может быть также значение целой переменной
или арифметического выражения, результат которого – целое
число. Например, для массива на Рис. 3.7 программа
i = 1
print( A[i], A[i+1], A[3*i+1], A[i-1] )
выведет то же самое, что и программа
print( A[1], A[2], A[4], A[0] )
Определите, что выведет этот фрагмент программы для
массива на Рис. 3.7:
i = 1
A[2] = A[i] + 2*A[i-1] + A[3*i]
print( A[2] + A[4] )
Найдите ошибки в этом фрагменте программы:
A = [1, 2, 3, 4, 5]
x = 1
print( A[x-3] )
A[x+4] = A[x-1] + A[2*x]
В чём заключаются ошибки?
76 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
при i = 1 получаем
i = 1 ⇒ 2*i = 2 ⇒ A[2*i] = A[2] = 0 ⇒ A[A[2*i]] = A[0] = 4.
Определите, что выведет этот фрагмент программы для
последнего рассмотренного массива:
print( A[0] )
print( A[A[0]] )
print( A[A[A[0]]] )
print( A[A[A[A[0]]]] )
print( A[A[A[A[A[0]]]]] )
77 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Далее везде будем считать, что N – это текущий размер
массива A, с которым мы работаем, то есть то значение, которое
возвращает вызов функции len(A).
Генераторы списков
Методы заполнения массивов, использующие цикл,
работают в большинстве языков программирования. В языке
Python есть особые возможности, которые позволяют решать
многие задачи кратко и надёжно.
Например, две операции – создание и заполнение массива –
можно объединить в одну с помощью генератора списка – вы-
ражения, напоминающего цикл:
A = [i for i in range(N)]
Как вы знаете, цикл for i in range(N) перебирает все
значения i от 0 до N–1. Выражение перед словом for (в данном
случае – i) – это то, что записывается в очередной элемент мас-
сива для каждого i. В приведённом примере массив заполняет-
ся значениями, которые последовательно принимает перемен-
ная i, то есть при N=10 мы построим такой массив:
A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
80 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Тот же результат можно получить, если использовать функ-
цию list для того, чтобы создать список из данных, которые
получаются с помощью функции range:
A = list( range(N) )
Для заполнения массива квадратами этих чисел можно ис-
пользовать такой генератор списка:
A = [ i*i for i in range(N) ]
В конце записи генератора списка можно добавить условие
отбора. В этом случае в массив включаются лишь те из элемен-
тов, перебираемых в цикле, которые удовлетворяют этому усло-
вию. Например следующий генератор списка составляет массив
из всех чисел в диапазоне от 0 до 99, которые делятся на 7:
A = [i for i in range(100)
if i % 7 == 0]
Обратите внимание, что длина этого массива будет меньше
100, и цикл
for i in range(100):
print( A[i] )
приведёт к ошибке – выходу за границы массива.
Вывод массива
Массив – это набор элементов, поэтому во многих языках
программирования нельзя вывести массив одной командой.
Однако в языке Python такая возможность есть
print( A )
В этом случае весь массив выводится в квадратных скобках, его
элементы разделяются запятыми:
A = [1, 2, 3, 4, 5]
print( A ) # [1, 2, 3, 4, 5]
Можно вывести элементы массива на экран по одному, ис-
пользуя цикл:
for i in range(len(A)):
print( A[i], end=" " )
81 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Параметр end определяет, что после вывода каждого элемента
добавляется пробел, а не символ перехода на новую строку.
Удобно записывать такой цикл несколько иначе:
for x in A:
print( x, end=" " )
Здесь не используются переменная-индекс i и функция len, а
просто перебираются все элементы массива. На каждой итера-
ции цикла в переменную x заносится значение очередного эле-
мента массива (в порядке возрастания индексов). Такой цикл
перебора очень удобен, если не нужно изменять значения эле-
ментов массива.
В языке Python существует ещё один замечательный способ
вывода всех элементов массива через пробел (без скобок):
print( *A )
Знак * перед именем массива означает, что нужно преобразо-
вать массив в набор отдельных значений, то есть для массива
A = [1, 2, 3, 4, 5]
эта команда сработает так же, как и
print( 1, 2, 3, 4, 5 )
82 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
При этом пользователь вводит данные «вслепую», то есть
программа не подсказывает ему, значение какого элемента вво-
дится в данный момент.
Значительно удобнее, если перед вводом появляется сооб-
щение с подсказкой:
for i in range(N):
print( "A[{}]=".format(i), end="" )
A[i] = int( input() )
В этом примере перед вводом очередного элемента массива
на экран выводится подсказка. Например, при вводе элемента с
индексом 3 будет выведено «A[3]=» и курсор (приглашение к
вводу) будет мигать справа от знака =.
83 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Выводы:
• Массив – это группа переменных одного типа, расположен-
ных в памяти друг за другом и имеющих общее имя. Массивы
используют для того, чтобы было удобно работать с большим
количеством данных.
84 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
• Индекс элемента массива – это значение, которое указывает
на конкретный элемент массива.
• При обращении к элементу массива индекс указывают в
квадратных скобках. Это может быть число, имя переменной
целого типа или арифметическое выражение, результат ко-
торого – целое число.
• Для перебора элементов массива удобно использовать цикл
по переменной, которая изменяется от минимального до мак-
симального значения индекса.
Интеллект-карта
тип тип
имя массив элемент массива
значение
размер
перебор обращение A[5]
элементов к элементу A[i]
A[2*i-1]
заполнение индекс
ввод
вывод
обработка
Рис. 3.8.
Практическая работа №20. Заполнение массивов
Вопросы и задания
1. Как вы думаете, почему элементы массива размещают в па-
мяти рядом?
2. Объясните разницу между терминами «индекс элемента мас-
сива» и «значение элемента массива».
3. Некоторые языки программирования разрешают обращаться
к элементам за пределами массива (при этом программа не
85 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
завершается аварийно). Обсудите достоинства и недостатки
такого решения.
4. Массив из 22 элементов требуется заполнить случайными
числами на отрезке [10; 30]. Будут ли в массиве одинаковые
элементы? Почему?
Задачи
1. Заполните все элементы массива значением X, введённым с
клавиатуры.
2. Заполните массив натуральными числами, начиная со зна-
чения X, введённого с клавиатуры.
3. Заполните массив натуральными числами в обратном по-
рядке, начиная со значения X, введённого с клавиатуры. По-
следний элемент должен быть равен X, предпоследний – X–1
и т.д.
4. Заполните массив степенями числа 2 (от 21 до 2N).
5. *Заполните массив степенями числа 2, начиная с конца, так
чтобы последний элемент массива был равен 1, а каждый
предыдущий был в 2 раза больше следующего.
6. *С клавиатуры вводится целое число X. Заполните массив,
состоящий из нечётного числа элементов, целыми числами,
так чтобы средний элемент массива был равен X, слева от не-
го элементы стояли по возрастанию, а справа – по убыванию.
Соседние элементы отличаются на единицу. Например, при
X = 3 массив из 5 элементов заполняется так: 1 2 3 2 1.
86 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
а) print( A[x+3] )
б) for i in range(3):
A[i+x] = A[i]
в) for i in range(x-2):
A[i] = 2*(x-i)
г) for i in range(4):
A[i+1] = A[i] + x
д) for i in range(x+1,x+6):
A[i] = x*x
е) for i in range(5):
A[i+2] = x + i
10. Чему будут равны элементы массива
A = [1, 2, 3, 4, 5]
после выполнения цикла? Здесь N = 5 – длина массива.
а) for i in range(N):
A[i] = A[i]*A[i]
б) for i in range(N-1):
A[i] = A[i+1]
в) for i in range(N-1):
A[i+1] = A[i]
г) for i in range(N-1,0,-1):
A[i] = A[i-1]
д) for i in range(1,N):
A[i] = A[i-1] + 1
е) for i in range(1,N):
A[i] = A[i-1]*2
11. *Дан фрагмент программы:
j = 1
for i in range(N):
if A[i] == A[j]:
j = i
При каком условии после выполнения этого фрагмента по-
лучится j = 0? j = 3? j = N – 1?
12. Введите с клавиатуры значения элементов массива, уве-
личьте каждый элемент в 2 раза и выведите полученный
массив на экран.
87 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
13. Введите с клавиатуры значения элементов массива и уве-
личьте на 5 значения всех элементов массива, кроме перво-
го и последнего.
14. В массиве чётное число элементов. Введите с клавиатуры
значения элементов массива и выполните две операции:
а) увеличьте на единицу значения всех элементов в первой
половине массива;
б) увеличьте в 2 раза значения всех элементов во второй
половине массива.
15. *Введите с клавиатуры значения элементов массива и
найдите их среднее арифметическое.
88 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
89 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Выполним трассировку («ручную прокрутку») программы. За-
пишем в таблице выполняемые команды (операторы) и измене-
ние всех переменных (сам массив A при этом не меняется):
Оператор i summa
1 summa = 0 0
2 i = 0 0
3 summa += A[0] 5
4 i += 1 1
5 summa += A[1] 7
6 i += 1 2
7 summa += A[2] 15
8 i += 1 3
9 summa += A[3] 18
10 i += 1 4
11 summa += A[4] 19
Фоном выделены команды, которые выполняются автома-
тически в цикле по переменной: в строке 2 переменной i при-
сваивается начальное значение, а в строках 4, 6, 8 и 10 после
очередной итерации цикла значение этой переменной увеличи-
вается на единицу.
Поскольку массив A не изменяется, сложить все его элемен-
ты удобно с помощью такого цикла:
summa = 0
for x in A:
summa += x
print( summa )
Заметим, что при этом не нужно хранить размер массива в пе-
ременной.
В языке Python есть встроенная функция sum, которая сразу
считает сумму элементов массива, так что задача решается в
одну строку:
print( sum(A) )
Для массива на Рис. 3.9 выполните ручную прокрутку
программы и определите, какое значение будет выведено:
90 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
summa = 0
for x in A:
if x % 2 == 0:
summa += x
print( summa )
Измените условие отбора в программе из предыдущего
задания, так чтобы при обработке массива на Рис. 3.9 в
переменной summa получилось число 13.
Напишите фрагмент программы, с помощью которых
можно найти в переменной p
а) произведение всех элементов массива;
б) произведение положительных элементов массива.
Подумайте, какое должно быть начальное значение
переменной p и как она должна изменяться на каждом
шаге цикла.
92 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
if x > 180:
summa += x
print( summa/N )
К какому типу ошибок относится эта ошибка?
Для решения задачи нам нужно считать и сумму, и коли-
чество элементов массива, которые больше 180:
count = 0
summa = 0
for x in A:
if x > 180:
count += 1
summa += x
print( summa/count )
Обратите внимание, что в теле условного оператора находятся
две команды (увеличение счётчика и увеличение суммы).
Решение «в стиле Python» предполагает построение нового
массива из нужных элементов массива A и использование двух
встроенных функций:
B = [ x for x in A if x > 180 ]
print( sum(B)/len(B) )
93 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
а) б)
A A[0]= 0 A
[1, 2, 3] [0, 2, 3]
B B
Рис. 3.10.
Поэтому при изменении списка A будет одновременно изме-
няться и список B, ведь фактически это один и тот же список, к
которому можно обращаться по двум разным именам. На Рис.
3.10, б, показана ситуация после выполнения оператора
A[0]=0.
Эту особенность Python нужно учитывать при работе со
списками. Если нам нужна именно копия списка (а не ещё одна
ссылка на него), можно использовать срез, включающий все
элементы:
B = A[:]
Теперь А и B – это независимые списки, и изменение одного из
них не меняет второй (Рис. 3.11).
а) б)
A [1, 2, 3] A[0]= 0 A [0, 2, 3]
B [1, 2, 3] B [1, 2, 3]
Рис. 3.11.
Вместо среза можно было вызвать функцию copy из моду-
ля copy:
import copy
A = [1, 2, 3]
B = [Link](A)
Это так называемая «поверхностная» копия – она не созда-
ёт полную копию, если список содержит какие-то изменяемые
объекты, например, другие списки. Для полного копирования
используется функция deepcopy из того же модуля:
import copy
A = [1, 2, 3]
B = [Link](A)
94 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Поиск максимального элемента в массиве
Представьте себе, что вы по очереди заходите в N комнат, в
каждой из которых лежит арбуз. Вес арбузов такой, что вы мо-
жете унести только один арбуз. Возвращаться в ту комнату, где
вы уже побывали, нельзя. Как выбрать самый большой арбуз?
Итак, вы вошли в первую комнату. По-видимому, нужно
забрать лежащий в ней арбуз. Действительно, вдруг он самый
большой? А вернуться сюда вы уже не сможете. С этим первым
арбузом идёте во вторую комнату и сравниваете, какой арбуз
больше – тот, который у вас в руках или новый. Если новый
больше, берёте его, а старый оставляете во второй комнате. Те-
перь в любом случае у вас в руках оказывается самый большой
арбуз из первых двух комнат. Действуя так же и в остальных
комнатах, вы гарантированно выберете самый большой арбуз
из всех.
На этой идее основан и поиск максимального элемента в
массиве. Для хранения максимального элемента выделим в
памяти целочисленную переменную M. Будем в цикле просмат-
ривать все элементы массива один за другим. Если очередной
элемент массива больше, чем максимальный из предыдущих
(находящийся в переменной M), запомним новое значение мак-
симального элемента в M.
Пусть требуется найти максимальное из значений
элементов массива A, который имеет размер N. Чего не
хватает в этом фрагменте программе:
for i in range(N):
if A[i] > M:
M = A[i]
print( M )
Остается решить, каково должно быть начальное значение
M.
Предположим, что в начале переменной M мы будем
присваивать значение 0.
M = 0
95 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Всегда ли это будет правильно?
Во-первых, можно записать в переменную M значение, за-
ведомо меньшее, чем значение любого из элементов массива.
Например, если в массиве записаны натуральные числа, можно
записать в M ноль.
Если же содержимое массива неизвестно, можно сразу за-
писать в M значение A[0] (сразу взять первый арбуз), а цикл пе-
ребора начать со второго по счёту элемента, A[1]:
M = A[0]
for i in range(1,N):
if A[i] > M:
M = A[i]
print( M )
Будет ли в этой задаче ошибкой цикл, начинающий
перебор с элемента A[0]:
for i in range(N):
...
Викентий решил написать первый оператор в пред-
ыдущем фрагменте так:
M = A[N-1]
Закончите программу Викентия.
Кирилл решил написать первый оператор в предыдущем
фрагменте так:
M = A[N%2]
Закончите программу Кирилла.
Более аккуратно смотрится вариант с другим типом цикла
for:
M = A[0]
for x in A:
if x > M: M = x
print( M )
Теперь найдём индекс максимального элемента. Казалось
бы, необходимо ввести еще одну переменную nMax для хранения
96 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
номера. Сначала в неё нужно записать 0 (считаем первый эле-
мент максимальным) и затем, когда нашли новый максималь-
ный элемент, запоминать его значение в переменной M, а ин-
декс – в переменной nMax:
M = A[0]
nMax = 0
for i in range(1,N):
if A[i] > M:
M = A[i]
nMax = i
print( "A[{}]={}".format( nMax, M ) )
Однако это не самый лучший вариант. В этой программе можно
обойтись без одной из переменных.
Можно ли, зная значение максимального элемента
массива M, сразу (без перебора!) найти его номер? Если да,
то как?
Можно ли, зная номер максимального элемента массива
nMax, сразу (без перебора!) найти его значение? Если да, то
как?
По индексу элемента i можно всегда определить значение
этого элемента: оно равно A[i]. Поэтому достаточно хранить
только индекс максимального элемента nMax, а его значение
заменить на A[nMax]:
nMax = 0
for i in range(1,N):
if A[i] > A[nMax]:
nMax = i
print( "A[{}]={}".format( nMax, A[nMax] ) )
Для поиска максимума можно использовать и встроенные
функции Python: сначала найти максимальный элемент, а по-
том его индекс с помощью функции index:
M = max(A)
nMax = [Link](M)
print( "A[{}]={}".format( nMax, M ) )
97 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
В этом случае фактически придётся выполнить два прохо-
да по массиву. Однако такой вариант работает быстрее, чем
«рукописный» цикл с одним проходом, потому что встроенные
функции написаны на языке C и подключаются в виде готового
машинного кода, а не выполняются относительно медленным
интерпретатором Python.
98 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Удалось ли найти максимальный отрицательный эле-
мент в первом случае? во втором?
Итак, если самый первый элемент массива, A[0], положи-
тельный (нам не подходит!), он оказывается больше всех подхо-
дящих элементов, и программа выводит его как (неверный) ре-
зультат. Есть два способа исправить программу
Во-первых, можно сначала найти первый отрицательный
элемент, записать его в переменную M, а потом перебирать в
цикле все оставшиеся.
Второй вариант проще – мы будем заменять значение M в
том случае, если очередной элемент A[i] – отрицательный, а
значение М – неотрицательное, то есть мы нашли самый пер-
вый подходящий элемент. Например, так:
M = A[0]
for i in range(1,N):
if A[i] < 0:
if M >= 0 or A[i] > M:
M = A[i]
print( M )
При каких значениях A[i] и M условия M ≥ 0 и A[i] > M во
вложенном условном операторе могут выполниться
одновременно?
Выделите все случаи, при которых в этой программе
будет изменяться значение М.
Что выведет программа, если в массиве нет отрицатель-
ных элементов? Как изменить окончание программы,
чтобы в этом случае было выведено сообщение
«Отрицательных элементов нет»?
99 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Практическая работа №22. Алгоритмы обработки массивов
Выводы:
• Для вычисления суммы элементов массива используется
вспомогательная переменная, в которой накапливается сум-
ма. Начальное значение этой переменной равно нулю. Для
добавления к сумме очередного элемента массива A[i] исполь-
зуют оператор вида
summa += A[i]
• При вычислении произведения начальное значение вспомо-
гательной переменной должно быть равно 1.
• Для подсчёта количества элементов, удовлетворяющих усло-
вию, используют переменную-счётчик. Начальное значение
счётчика должно быть равно нулю. При обнаружении оче-
редного подходящего элемента значение счётчика увеличи-
вается на 1:
count += 1
• При поиске максимального значения в массиве используют
вспомогательную переменную, в которой хранится макси-
мальное из всех уже просмотренных значений. Сначала в эту
переменную записывают значение первого элемента массива,
а затем просматривают все элементы, начиная со второго.
100 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Интеллект-карта
сумма summa = 0
элементов for i in range(N):
summa += A[i]
алгоритмы count = 0
обработки подсчёт
массивов элементов for i in range(N):
if A[i] < 0:
count += 1
поиск M = A[0]
максимума for i in range(1,N):
if A[i] > M:
M = A[i]
Вопросы и задания
1. Как можно проверить, что число делится одновременно на 7
и на 5? Предложите два способа.
2. Объясните, почему при поиске максимального элемента и
его номера не нужно запоминать само значение максималь-
ного элемента.
Задачи
1. Напишите программу, которая заполняет массив случайны-
ми целыми числами на отрезке [–2; 2] и считает сумму поло-
жительных элементов массива.
2. Напишите программу, которая заполняет массив случайны-
ми целыми числами на отрезке [2; 10] и считает отдельно
количество элементов с чётными и нечётными значениями.
3. Напишите программу, которая заполняет массив случайны-
ми целыми числами на отрезке [1000; 2000] и считает коли-
чество элементов, в десятичной записи которых вторая с
конца цифра (число десятков) – чётная.
4. Напишите программу, которая заполняет массив из 20 эле-
ментов случайными целыми числами на отрезке [50; 150] и
находит в нём минимальный и максимальный элементы и
их номера.
5. Напишите программу, которая получает с клавиатуры зна-
чения элементов массива и выводит количество элементов,
имеющих максимальное значение.
101 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
102 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
15. Заполните массив случайными целыми числами на отрезке
[1;100] и подсчитайте количество элементов массива, которые
делятся на 3 и не делятся на 5.
16. Напишите программу, которая заполняет массив из 20 эле-
ментов случайными целыми числами на отрезке [50; 150] и
находит в нём минимальный из чётных элементов и его но-
мер.
17. Напишите программу, которая заполняет массив из 20 эле-
ментов случайными целыми числами на отрезке [–100; 100]
и находит в нём максимальное значение, десятичная запись
которого оканчивается на 3, и его номер. Если такого эле-
мента нет, нужно вывести ответ "нет".
18. Напишите программу, которая заполняет массив из 20 эле-
ментов случайными трёхзначными целыми числами и нахо-
дит в нём элемент, у которого наибольшая сумма цифр, и его
номер.
19. Заполните массив случайными целыми числами на отрезке
[1; 100] и подсчитайте отдельно среднее значение всех эле-
ментов, которые меньше 50, и среднее значение всех элемен-
тов, которые больше или равны 50.
20. Заполните массив случайными целыми числами на отрезке
[0; 4] и выведите на экран номера всех элементов, равных
значению X (оно вводится с клавиатуры).
21. *Заполните массив с клавиатуры трёхзначными целыми
числами подсчитайте сумму всех элементов массива, в деся-
тичной записи которых все цифры одинаковые.
22. *Заполните массив случайными целыми числами на отрез-
ке [1; 1000] и подсчитайте количество элементов массива, у
которых последние две цифры одинаковые.
23. *Заполните массив случайными целыми числами на отрез-
ке [1; 1000] и подсчитайте сумму элементов массива, у кото-
рых число десятков (вторая цифра справа) больше, чем число
единиц (младшая цифра).
103 [Link]
15.12.2022
Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
24. *Введите с клавиатуры значения элементов массива и
найдите два минимальных элемента и их индексы. Если в
массиве есть несколько равных минимальных элементов,
нужно найти первые два из них.
25. *В массиве чётное число элементов. Заполните массив слу-
чайными целыми числами и переставьте соседние элементы,
поменяв 1-й элемент со 2-м, 3-й – с 4-м и т.д.
104 [Link]