Лабораторная работа № 1. Итерационные методы

Теоретические сведения

Терминатор

Этим блоком обозначается начало и конец алгоритма. В контексте языка программирования, код между этими блоками может размещаться в процедуре, функции или методе класса.

Начало
Начало
Конец
Конец
Text is not SVG - cannot display
Рисунок 1

Комментарий

Поясняет назначение или особенность реализации блока. Может содержать имя процедуры или функции реализация которой изображена блок-схемой.

sum = 0
sum = 0
Начальное значение суммы
Начальное значение суммы
Text is not SVG - cannot display
Рисунок 2
sum = 0 # Начальное значение суммы

Выполнение операции

Блок-операция содержит последовательность инструкций. В одном блоке может размещаться несколько инструкций.

a = x
b = y
a = x…
a = x % y
a = x % y
Text is not SVG - cannot display
Рисунок 3
a = x
b = y
a = x % y # % - остаток от деления

Ввод, вывод данных

В начале блока помечается предназначен ли он для ввода или вывода данных. Подразумевается ввод данных с клавиатуры и вывод на экран компьютера.

Ввод
N
Ввод N
Вывод
cif
Вывод cif
Ввод
st
Ввод st
Ввод числа.
Понадобится
преобразование
типов
Ввод числа….
Ввод строки
Ввод строки
Text is not SVG - cannot display
Рисунок 4
st = input("Введите строку: ")
N = int(input("Введите число: "))
# или float() для вещественного числа
print(cif)

Ветвление

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

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

Да
Да
Нет
Нет
a > b
a > b
a = a - b
a = a - b
a = a + b
a = a + b
Text is not SVG - cannot display
Рисунок 5
if a > b:
    a = a - b
else:
    a = a + b

Цикл с предусловием:

Нет
Нет
N != 0
N != 0
N = N / 2
N = N / 2
Да
Да
Text is not SVG - cannot display
Рисунок 6
while N != 0:
    N = N // 2;

Начало и конец цикла

Блоки означают цикл с известным количеством повторений. В открывающем блоке циклу даётся имя, обозначается имя переменной цикла, начальное и конечное значение и шаг изменения переменной цикла. В закрывающем блоке записывается имя цикла.

Конец
Цикл А
Конец Цикл А
Цикл А
i = 0, 10, 1
Цикл А…
Вывод
i
Вывод i
Text is not SVG - cannot display
Рисунок 7
for i in range(0, 11):
    print(i)
ПредупреждениеОсобенности функции range

Второй параметр функции range() указывает на значение до которого будет создаваться последовательность целых чисел.

Соединитель

Вставляется на месте разрыва алгоритма. Всегда используется в паре. Обозначение внутри блока помогает отследить связь между элементами блок-схемы.

1
1
b = b - a
b = b - a
1
1
Вывод
b
Выводb…
Text is not SVG - cannot display
Рисунок 8

Задания для самостоятельной работы

Пример 1. Произведение чисел

Найдите произведение целых чисел от 1 до n и выведите его на экран.

Составьте код решения из предложенных строк, перетаскивая их из левой панели в правую.

Использовано попыток: 0
В коде есть ошибка.

Пример 2. Объём прямоугольный параллелепипед

Опишите функцию с именем volume вычисляющую объём прямоугольного параллелепипеда по длине \(a\), ширине \(b\) и высоте \(c\).

\[ V=a\cdot b \cdot c \]

Рассчитайте объём прямоугольный параллелепипед 3 х 5 х 7 и выведите ответ на экран.

Составьте код решения из предложенных строк, перетаскивая их из левой панели в правую.

ПредупреждениеВнимание

Не все из предложенных строк кода должны быть использованы в решении задачи.

Использовано попыток: 0
В коде есть ошибка.
ПредупреждениеВнимание

Для выполнения следующих заданий откройте среду разработки IDLE. Запишите код решения для каждой задачи и сохраните его на рабочем диске.

Задание 1. Цифры числа (sam01.py)

Выведите на экран все цифры числа N. Реализуйте алгоритм решения задачи по приведённой блок-схеме.

Начало
Начало
Ввод
N
Ввод N
Да
Да
N > 0
N > 0
Вывод
cif
Вывод cif
cif = N mod 10
cif = N mod 10
N = N div 10
N = N div 10
Конец
Конец
Нет
Нет
Text is not SVG - cannot display
Рисунок 9

Ввод значений организуется с помощью функции input(), которая возвращает введённое значение в форме строки. Это значение нужно преобразовать в подходящий числовой тип.

Обратите внимание, какой из циклов показан на блок-схеме: с предусловием (while) или с параметром (for)?

Не забывайте, что после двоеточия : в Python начинается блок инструкций - он обозначается отступом. Все инструкции, входящие в блок, должны иметь одинаковый отступ. Скорее всего, среда разработки добавит отсуп после : самостоятельно.

mod - остаток от деления, div - целочисленное деление. Самостоятельно найдите, как данные операторы записываются в Python.

Для вывода значений используйте функцию print().

# прочерки в коде замените на подходящий код
N = int(___)
while ____:
    cif = N __ 10
    print(___)
    N = _____

Задание 2. Поиск делителей числа (sam02.py)

Выведите на экран все делители числа N кроме единицы и самого числа N. Реализуйте алгоритм решения задачи по приведённой блок схеме.

Начало
Начало
Ввод
N
Ввод N
Цикл А
i = 2, N - 1, 1
Цикл А…
Конец
Цикл А
Конец Цикл А
Нет
Нет
N mod i == 0
N mod i == 0
Конец
Конец
Вывод
i
Вывод i
Да
Да
Text is not SVG - cannot display
Рисунок 10

Для записи алгоритма используйте цик с параметром for.

Чтобы задать начальное и конечно значение переменной цикла i, понадобится функция range().

Внутри цикла понадобится использовать инструкцию ветвления if. Какая форма ветвления будет исполльзоваться - полная или сокращённая?

Задание 3. Простые числа (sam03.py)

Напишите функцию isPrime() с помощью которой можно определить, является ли число простым или составным. Реализуйте алгоритм решения задачи по приведённой блок схеме.

Начало
Начало
isPrime(num) 
Функция определяет
является ли num 
простым числом
isPr…
Цикл А
i = 2, num div 2 + 1, 1
Цикл А…
Конец
Цикл А
Конец Цикл А
Нет
Нет
Да
Да
num mod i == 0
num mod i == 0
Конец
Конец
вернуть false
вернуть false
вернуть true
вернуть true
Text is not SVG - cannot display
Рисунок 11

Используйте следующий шаблон кода:

# функция принимает один параметр с именем num
def isPrime(num):
    # тело функции согласно блок-схеме
    

# проверка работы функции (не редактируйте это код)
res = isPrime(54) # сохраняем результат работы функции в переменной res
print(res)
print(isPrime(17))

Чтобы вернуть значение из функции, используйте инструкцию return.

Задание 4. НОД и НОК (sam04.py)

Реализуйте алгоритм Евклида для нахождения НОД двух целых чисел. Посчитайте НОК введённых чисел. Реализуйте алгоритм решения по приведённой блок-схеме.

Начало
Начало
Ввод
x, y
Ввод x, y
Нет
Нет
a != b
a != b
Да
Да
Нет
Нет
a > b
a > b
a = a - b
a = a - b
b = b - a
b = b - a
Вывод
a
Вывод a
Конец
Конец
Да
Да
1
1
1
1
a = x
b = y
a = x…
nok = x * y / a
nok = x * y / a
Вывод
nok
Вывод nok
Text is not SVG - cannot display
Рисунок 12

Задание 5 (sam05.py)

Решите задачу вашего варианта.

Найти сумму чётных цифр числа. Число вводится с клавиатуры.

Число: <{362}> ++enter++
8

Найти произведение чётных цифр числа. Число вводится с клавиатуры.

Число: <{362}> ++enter++
12

Найти сумму нечётных цифр числа. Число вводится с клавиатуры.

Число: <{12347}> ++enter++
11

Найти произведение нечётных цифр числа. Число вводится с клавиатуры.

Число: <{2347}> ++enter++
21

Найти сумму чётных делителей числа. Не учитывайте 1 и само число. Число вводится с клавиатуры.

Число: <{12}> ++enter++
12

Найти сумму нечётных делителей числа. Учитывайте 1 и само число. Число вводится с клавиатуры.

Число: <{12}> ++enter++
16

Найти произведение чётных делителей числа. Не учитывайте 1 и само число. Число вводится с клавиатуры.

Число: <{12}> ++enter++
48

Найти сумму чётных цифр числа. Число вводится с клавиатуры.

Число: <{362}> ++enter++
8

Найти произведение чётных цифр числа. Число вводится с клавиатуры.

Число: <{362}> ++enter++
12

Найти сумму нечётных цифр числа. Число вводится с клавиатуры.

Число: <{12347}> ++enter++
11

Найти произведение нечётных цифр числа. Число вводится с клавиатуры.

Число: <{2347}> ++enter++
21

Найти сумму чётных делителей числа. Не учитывайте 1 и само число. Число вводится с клавиатуры.

Число: <{12}> ++enter++
12

Найти сумму нечётных делителей числа. Учитывайте 1 и само число. Число вводится с клавиатуры.

Число: <{12}> ++enter++
16

Найти произведение чётных делителей числа. Не учитывайте 1 и само число. Число вводится с клавиатуры.

Число: <{12}> ++enter++
48

Задание 6 (sam06.py)

Решите задачу вашего варианта.

Найти натуральное число от \(n\) до \(k\), которое имеет наибольшее количество делителей.

Введите n <{10}> ++enter++
Введите k <{1000}> ++enter++
Ответ: 840

Найти все натуральные совершенные числа, меньшие \(n\). Число совершенно, если оно равно сумме всех своих делителей, за исключением самого числа.

Введите n: <{1500}> ++enter++
6
28
496

Дано натуральное число \(n\). Выяснить, имеются ли среди чисел \(n, n+1, ... , 2n\) числа близнецы, т.е. простые числа, разность между которыми равна 2.

Введите n: <{40}> ++enter++
41 43
59 61
71 73

Дано натуральное число \(n\). Получить все числа, взаимнопростые с \(n\) и меньше его.

Введите n: <{55}> ++enter++
1
5
7
11
13
17

Дано натуральное число \(n\). Получить все его простые делители.

Введите n: <{654}> ++enter++
1
2
3
109

Сократить дробь \(\frac{a}{b}\) (\(a\), \(b\) - натуральные числа).

Введите числитель a: <{64}> ++enter++
Введите знаменатель b: <{184}> ++enter++
Ответ: 8 / 23

Посчитать сумму цифр всех целых чисел от 1 до \(n\).

Введите n: <{149}> ++enter++
Ответ: 1275

Найти натуральное число от \(n\) до \(k\), которое имеет наибольшее количество делителей.

Введите n <{10}> ++enter++
Введите k <{1000}> ++enter++
Ответ: 840

Найти все натуральные совершенные числа, меньшие \(n\). Число совершенно, если оно равно сумме всех своих делителей, за исключением самого числа.

Введите n: <{1500}> ++enter++
6
28
496

Дано натуральное число \(n\). Выяснить, имеются ли среди чисел \(n, n+1, ... , 2n\) числа близнецы, т.е. простые числа, разность между которыми равна 2.

Введите n: <{40}> ++enter++
41 43
59 61
71 73

Дано натуральное число \(n\). Получить все числа, взаимнопростые с \(n\) и меньше его.

Введите n: <{55}> ++enter++
1
5
7
11
13
17

Дано натуральное число \(n\). Получить все его простые делители.

Введите n: <{654}> ++enter++
1
2
3
109

Сократить дробь \(\frac{a}{b}\) (\(a\), \(b\) - натуральные числа).

Введите числитель a: <{64}> ++enter++
Введите знаменатель b: <{184}> ++enter++
Ответ: 8 / 23

Посчитать сумму цифр всех целых чисел от 1 до \(n\).

Введите n: <{149}> ++enter++
Ответ: 1275