Файл: Отчет по практическому занятию (в отчете напишите выполнения задания 1 и листинги программ задания 2 и скриныэкранов работающих программ).docx
Добавлен: 10.01.2024
Просмотров: 32
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Практическое занятие 15. Решение задач.
Цель занятия: изучить:
-
Вложенные циклы. Принцип работы -
Графическое представление вложенных циклов -
Оператор break и continue во вложенных циклах
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ И ФОРМА ОТЧЕТНОСТИ.
Задание 1. Написать сжатый конспект основных команд, по теме используя раздел теория.
Задание 2. Напишите программы примеров рассматриваемых на практическом занятии, запустите их на исполнения.
Задание 3. Напишите отчет по практическому занятию (в отчете напишите выполнения задания 1 и листинги программ задания 2 и скрины-экранов работающих программ).
РАЗДЕЛ ТЕОРИЯ.
Вложенные циклы. Принцип работы
Часто бывают ситуации, когда один и тот же набор действий необходимо выполнить несколько раз для каждого повторяющегося действия. Например, мы уже несколько раз сталкивались с задачами, когда программа получает от пользователя данные до сигнала остановки, — для этого используется цикл. А теперь представьте, что после ввода данных или числа с ними надо сделать какие-либо действия, которые тоже требуют цикла (например, вычислить факториал), тогда нам нужен еще один цикл, внутри первого.
Вложенные циклы
Циклы называются вложенными (т. е. один цикл находится внутри другого), если внутри одного цикла во время каждой итерации необходимо выполнить другой цикл. Так для каждого витка внешнего цикла выполняются все витки внутреннего цикла. Основное требование для таких циклов: чтобы все действия вложенного цикла располагались внутри внешнего.
При использовании вложенных циклов стоит помнить, что изменения, внесенные внутренним циклом в какие-либо данные, могут повлиять на внешний.
Давайте рассмотрим следующую задачу: необходимо вывести в строку таблицу умножения для заданного числа. Задача решается так:
Пример_1:
А если нам нужно вывести таблицу умножения для всех чисел от 1 до k?
Очевидно, что в этом случае предыдущую программу нужно повторить
k раз, где вместо k будут использоваться числа от 1 до k включительно.
Эту задачу можно записать двумя циклами, где для каждого значения внешнего цикла будут выполняться все значения внутреннего цикла.
Программа будет выглядеть так:
Пример_2:
Проанализируем работу данной программы. Выполнение программы начинается с внешнего цикла. Итератор j внешнего цикла for меняет свое значение от начального (1) до конечного (k). Обратите внимание: чтобы включить число k в рассматриваемый диапазон, в заголовке цикла указавается промежуток от 1 до k + 1. Затем циклически выполняется следующее:
-
Проверяется условие j < k + 1. -
Если оно соблюдается, выполняется оператор в теле цикла, т. е. выполняется внутренний цикл.
-
Итератор i внутреннего цикла for будет изменять свои значения от начального (1) до конечного (10), не включая 10
Затем циклически выполняется следующее:
-
Проверяется условие i < 10 -
Если оно удовлетворяется, выполняется оператор в теле цикла, т. е. оператор print(i, '*', j, '=', j * i, sep='', end='\t'), выводящий на экран строку таблицы умножения в соответствии с текущими значениями переменных i и j -
Затем значение итератора i внутреннего цикла увеличивается на единицу, и оператор внутреннего цикла for проверяет условие i < 10. Если условие соблюдается, выполняется тело внутреннего цикла при неизменном значении итератора внешнего цикла до тех пор, пока выполняется условие i < 10 -
Если условие i < 10 не удовлетворяется, т. е. как только i станет равен или больше 10, оператор тела цикла не выполняется, внутренний цикл завершается и управление в программе передается за пределы оператора for внутреннего цикла, т. е. выполняется перевод строки, вызванный использованием функции print() (строка 5), а затем возвращается к оператору for внешнего цикла
Значение итератора внешнего цикла j увеличивается на единицу, и проверяется условие j < k + 1. Если условие не соблюдается, т. е. как только j станет больше k, оператор тела цикла не выполняется, внешний цикл завершается и управление в программе передается за пределы оператора
for внешнего цикла, т. е. в данном случае программа завершает работу.
Таким образом, на примере печати таблицы умножения показано, что при вложении циклов внутренний цикл выполняется полностью от начального до конечного значения параметра при неизменном значении параметра внешнего цикла. Затем значение параметра внешнего цикла изменяется на единицу, и опять от начала и до конца выполняется вложенный цикл. И так до тех пор, пока значение параметра внешнего цикла не станет больше конечного значения, определенного в операторе for внешнего цикла.
Графическое представление вложенных циклов
Работу циклов можно сравнить с вращением связанных шестеренок разного размера:
Внешний цикл — это как бы большая шестеренка, за один свой оборот (виток цикла) внешний цикл заставляет вращаться вложенный цикл (меньшую шестеренку) несколько раз.
Обратите внимание: такая иллюстрация точна в случае, если число повторов вложенного цикла не зависит от того, какой именно (1-й, n-й или иной) виток делает внешний цикл, а так бывает не всегда.
Оператор break и continue во вложенных циклах
Рассмотрим другую задачу: представьте, что необходимо распечатать все строки таблицы умножения для чисел от 1 до 10, кроме строки для числа k.
Тогда нам нужно будет пропустить выполнение внутреннего цикла, когда придет k-я строка.
Это можно сделать через оператор continue, который просто прервет выполнение данного витка цикла и перейдет к следующей итерации цикла:
Пример_3:
Важно!
Обратите внимание: если оператор break или continue расположен внутри вложенного цикла, он действует именно на вложенный цикл, а не на внешний. Нельзя выскочить из вложенного цикла сразу на самый верхний уровень.
А теперь попробуйте вывести всю таблицу умножения, кроме столбца k.
Вот еще одна программа, которая использует вложенные циклы и оператор break. Она учит пользователя вводить числа палиндромы — программа выполняется до тех пор, пока не будет введено число палиндром:
Пример_4: