Лабораторная работа № 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, 10):
    print(i)

Соединитель

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

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

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

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

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

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

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

Пример 2. Объём шара

Опишите функцию sphere_volume(r) вычисляющую объём шара. Для вычислений используйте следующую формулу:

\[ V=\frac{4}{3}\pi r^3 \]

Рассчитайте объём шара радиуса 8 и выведите ответ на экран.

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

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

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

Использовано попыток: 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. Какая форма ветвления будет исполльзоваться - полная или сокращённая?

# прочерки в коде замените на подходящий код
N = _____
for i in _____________:
    if _______ :
        print(i)

Задание 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)

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

На множестве натуральных чисел от A до B найти все избыточные числа и их количество. Число называется избыточным, если сумма всех его положительных делителей, отличных от самого этого числа, превышает это число. Например, число 48 (сумма делителей \(1 + 2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 = 76\), \(76 \gt 48\)).

На множестве натуральных чисел от A до B найти все автоморфные числа и их количество. Число называется автоморфным, если квадрат этого числа оканчивается на само число. Например, число 25 (\(25^2 = 625\)).

На множестве натуральных чисел от A до B найти все пары чисел близнецов и их количество. Близнецами называются простые числа \(n\) и \(n + 2\). Например, пара чисел 11 и 13.

На множестве натуральных чисел от A до B найти все совершенные числа и их количество. Число называется совершенным, если оно совпадает с сумой всех своих положительных делителей, отличных от самого этого числа. Например, число 6 (\(6 = 1 + 2 + 3\)).

На множестве натуральных чисел от A до B найти все перестановочные простые числа и их количество. Простое число называется перестановочным, если при записи этого числа в обратном порядке получим тоже простое число. Например, 13 и 31.

На множестве натуральных чисел от A до B найти все числа Армстронга и их количество. Натуральное n-значное число называется числом Армстронга, если сумма его цифр, возведенных в степень n, равна самому числу. Например, число 153 (\(153 = 1^3 + 5^3 + 3^3\)).

На множестве натуральных чисел от A до B найти все пары дружественных чисел и их количество. Числа называются дружественными, если сумма всех положительных делителей (отличных от самого этого числа) одного числа равна сумме всех положительных делителей (отличных от самого этого числа) другого числа. Например, пара чисел 220 и 284.

На множестве натуральных чисел от A до B найти все числа палиндромы и их количество. Число называется палиндромом, если читается одинаково слева направо и справа налево. Например, число 15651.

На множестве натуральных чисел от A до B найти все суперсовершенные числа и их количество. Число называется суперсовершенным, если сумма всех делителей данного числа, увеличенная на единицу, равна удвоенному данному числу. Например, 16. (делители 1, 2, 4, 8, 16, сумма делителей равна 31, \(31 + 1 = 16 \cdot 2\)).

На множестве натуральных чисел от A до B найти все числа, для которых сумма квадратов всех его делителей есть число четное. Например, число 77 (делители 1, 7, 11, 77; \(1^2 + 7^2 + 11^2 + 77^2 = 6100\)).

На множестве натуральных чисел от A до B найти все числа, сумма квадратов цифр которых является простым числом. Подсчитайте количество таких чисел. Например, число 38 (\(3^2 + 8^2 = 73\), 73 — простое число).

На множестве натуральных чисел от A до B найти все номера «счастливых билетов» и их количество. Натуральное n-значное число с четным количеством цифр называется номером «счастливого билета», если сумма первых \(n/2\) цифр равна сумме последних \(n/2\) цифр (если количество цифр нечетно, то среднюю цифру не учитывают). Например, числа 457169 (\(4 + 5 + 7 = 1 + 6 + 9\)), 65847 (\(6 + 5 = 4 + 7\)).

На множестве натуральных чисел от A до B найти все триморфные числа и их количество. Число называется триморфным, если десятичная запись куба этого числа оканчивается цифрами самого этого числа. Например, число 49 (\(49^3 = 117649\)).

На множестве натуральных чисел от A до B найти все пары взаимно простых чисел. Два числа называются взаимно простыми, если их наибольший общий делитель равен 1. Например, 25 и 36 (НОД(25, 36) = 1).