§ 7. Использование основных алгоритмических конструкций для решения практических задач

7.1. Использование числовых последовательностей

Числовые последовательности позволяют описывать многие процессы, происходящие в природе и обществе.
Например, последовательность чисел 2, –1, 0, 2, 0, 1 –2 может задавать значения температуры по дням недели;
последовательность 2970, 3041, 3002 — значения средней заработной платы сотрудников по месяцам квартала и т. п.

Последовательности могут задаваться формулой, в которой значение элемента зависит от того, какой у него номер в последовательности (пример 7.1).

Другим способом задания элементов последовательности является определение значения нового элемента через значение предыдущего (пример 7.2).

Есть последовательности, которые можно задавать как первым способом, так и вторым (пример 7.3).

Последовательности могут строиться из случайных чисел.
Пример 7.4. Вывести на экран первые k чётных чисел.

Этапы выполнения задания.

I.  Исходные данные: k (количество чисел).
II.  Результат: k чётных чисел, начиная с 2.
III.  Алгоритм решения задачи:
1.  Ввод числа k.
2.  Для получения чётного числа запишем формулу: an = 2n.
3.  Так как количество чисел заранее известно, то для их получения можно воспользоваться циклом for.
4.  Текущее число будем хранить в переменной а. Значение a вычисляется по формуле и зависит от значения n — счётчика цикла. Переменная n будет изменяться от 1 (номер первого чётного числа) до k (номер последнего числа).
5.  Полученные числа будем выводить в цикле через пробел.
IV.  Описание переменных: k, a— int.

Пример 7.5. Вывести на экран все элементы последовательности Фибоначчи, меньшие x (x вводится).

Этапы выполнения задания.

I. Исходные данные: x (граница для чисел).
II. Результат: числа Фибоначчи, меньшие x.
III. Алгоритм решения задачи:
1. Ввод числа x.
2. Вывод первых двух элементов (0 и 1).
3. Числа Фибоначчи, начиная с третьего, получают по формуле: an = an – 1 + + an – 2. Для вывода чисел используются три переменные: значение, которое нужно вывести (а), и два предыдущих (b и c).

После вывода значения a нужно «сдвинуть» значения переменных: c = b; b = a.
4. Так как количество чисел заранее неизвестно, то для их вычисления нужно воспользоваться циклом while. Условие продолжения работы цикла: a < x.
5. В цикле выполняем следующие действия:
1) выводим текущее значение переменной a;
2) «сдвигаем» значения переменных по схеме, описанной в пункте 3: c = b; b = a;
3) получаем новое значение a: a = b + c.
IV. Описание переменных: x, a, b, c — int.

Пример 7.6. Катя и Петя решили организовать благотворительную лотерею. Для этого они случайным образом генерируют номер билета. Номера билетов принадлежат промежутку [1..100]. Выигрышным билетом будет тот, номер которого кратен 5. Определить, сколько будет выигрышных билетов среди n сгенерированных Катей и Петей.

Этапы выполнения задания.

I. Исходные данные: n (всего билетов).
II. Результат: k — выигрышные билеты.
III. Алгоритм решения задачи:
1. Ввод числа n.
2. До начала генерации выигрышных билетов не существует. Инициализируем переменную k нулём: k = 0.
3. Так как количество билетов заранее известно, то для получения их номеров можно воспользоваться циклом for.
4. В цикле выполняем следующие действия:
1) текущей номер билета будем хранить в переменной а. Номер билета будем получать как случайное число в промежутке от 1 до 100: a = randint(1, 100);
2) будем выводить сгенерированный номер билета на экран;
3) для каждого сгенерированного номера проверим, равен ли нулю остаток от деления числа на 5. И если равен, то увеличим значение переменной k на 1.
5. Вывод результата.
IV. Описание переменных: n, k, a — int.

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

Пример 7.7. В лаборатории выводят полезные бактерии. Экспериментально было установлено, что количество бактерий (в млн) зависит от номера дня, в который проводится эксперимент:

Определить, сколько бактерий вывели за m дней.

Этапы выполнения задания.

I. Исходные данные: m (число дней).
II. Результат: s (общее количество бактерий).
III. Алгоритм решения задачи:
1. Ввод числа m.
2. Для вычисления общего количества бактерий нужно последовательно добавлять количество бактерий, выведенных за текущий день, к уже полученной сумме. Сумму будем хранить в переменной s. Начальное значение суммы равно нулю (s = 0).
3. Так как количество дней заранее известно, для вычисления суммы можно воспользоваться циклом for. Переменная n (номер дня) будет изменяться от 1 до m (количество дней).
4. В цикле выполняем следующие действия:
1) количество бактерий в текущий день будем хранить в переменной а. Значение a зависит от значения n — номера дня. Вычислим значение а по формуле из условия задачи;
2) полученное значение переменной а добавим к переменной s, хранящей значение суммы.
5. Вывод результата s.
IV. Описание переменных: m — int, s, a — float.

7.3. Нахождение минимального и максимального элементов числовой последовательности

Пример 7.8. Последовательность из n целых положительных трёхзначных чисел генерируется случайным образом. Написать программу, которая определит, какое минимальное число было сгенерировано.

Этапы выполнения задания.

I. Исходные данные: n (количество чисел).
II. Результат: m (минимальное число).
III. Алгоритм решения задачи:
1. Ввод числа n.
2. До генерации последовательности определим значение m = 1000. Это число заведомо больше любого элемента последовательности.
3. Так как количество чисел заранее известно, для решения задачи можно воспользоваться циклом for.
4. На каждой итерации цикла будем сравнивать сгенерированное число a сo значением m. Если a окажется меньше m, то заменим m на a.
5. Вывод результата m.
IV. Описание переменных: m, n, a — int.

Для определения максимального элемента последовательности нужно внести в программу следующие изменения:

а) заменить начальное значение m на 0 (это число заведомо меньше любого элемента последовательности);
б) заменить знак «<» на знак «>» в условии команды ветвление:

if a > m:

7.4. Построение таблицы значений функции

Пример 7.9. Вывести на экран таблицу значений функции

Количество значений вводится. Начальное значение x = –3, значения аргумента выводятся с шагом h = 0.5.

Этапы выполнения задания.

I. Исходные данные: k (количество значений).
II. Результат: k значений аргумента и соответствующих им значений функции.
III. Алгоритм решения задачи:
1. Ввод числа k.
2. Для получения таблицы нужно в цикле вычислять и выводить значение аргумента и соответствующее ему значение функции:
1) начальное значение аргумента x = –3. Новое значение аргумента получаем, увеличивая текущее на шаг h;
2) значение функции вычисляется по формуле

3) вывод на экран. Для вывода значений строго одно под другим нужно использовать форматный вывод. Он определяет количество позиций для вывода числа и количество цифр после запятой.
Запись ‘{:7.2f}’ означает, что для вывода переменной типа float (буква f) используется 7 позиций, после запятой выводятся 2 цифры. Само значение выводится с использованием функции format.
3. Поскольку количество точек известно, воспользуемся циклом for.
IV. Описание переменных: k — int, x, y, h — float.

7.5*. Построение графиков функций

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

В Python для построения графиков можно использовать модуль matplotlib.pyplot, который обладает широкими возможностями. Графическая область, в которой строится график, представлена в примере 7.10.

Приведём некоторые функции модуля:

Запись
на Python
Описание
xlabel(» «) задаёт название горизонтальной оси
ylabel(» «) задаёт название вертикальной оси
title(» «) задаёт имя графика
legend()
выводит легенду
grid(f)
добавляет сетку на график; если значение f = True, то сетка видна, иначе — нет
scatter(x, y)
рисует точки с координатами из x по горизонтальной оси и из y по вертикальной оси
plot(x, y)
выполняется аналогично scatter, но точки соединяются в том порядке, в котором заданы их значения
show()
показывает нарисованный график

Дополнительно для построения графика потребуется функция linspace (x0, xn, k) из модуля numpy, которая определяет диапазон значений переменной x и количество точек, из которых будет состоять график.

Пример 7.11. Построить график функции

на промежутке от – 3 до 3.

Этапы выполнения задания.

I. Исходные данные: k (количество точек).
II. Результат: график функции.
III. Алгоритм решения задачи:
1. Задаём диапазон значений x.
2. Задаём формулу для получения значений y.
3. Производим настройки координатной плоскости.
4. Строим график. Если строить график с помощью функции plot, то при визуализации графика получим сплошную линию. Если точек мало, то линия будет выглядеть как ломаная. Для получения гладкой линии нужно не менее 50 точек. Если использовать функцию scatter, то получим отдельные точки.
5. Визуализируем график.
IV. Описание переменных: k — int, x, y — float.

В одной координатной плоскости можно построить графики нескольких функций. Для этого нужно задать новое значение y1 и выполнить команду plot(x, y1). Аргумент x должен быть одним и тем же, что и для значений y.
Графики разных функций рисуются разными цветами из некоторой заранее определённой последовательности цветов. Для регулировки цвета и типа линии графика после пары координат x и y вставляется форматная строка. Первая буква определяет цвет (‘r’ — красный, ‘b’ — синий и т. д.), дальше задаётся тип линии
(‘-‘ — сплошная, ‘—‘ — пунктирная, ‘-.’ — штрихпунктирная и т. д.). Параметр linewidth определяет толщину линии, а параметр label — текст, вводимый в легенде. В примере 7.12 добавлены график функции y = 0,3x2 и другие настройки графиков.

7.6. Выделение цифр из числа

Пример 7.13. Дано натуральное число n. Вывести цифры числа по одной в строке (начиная с разряда единиц). Определить, сколько цифр в числе.

Этапы выполнения задания.

I. Исходные данные: n (число).
II. Результат: z (текущая цифра числа), k (количество цифр в числе n).
III. Алгоритм решения задачи:
1. Ввод исходных данных — число n.
2. Определение начального значения счётчика для количества цифр (k = 0).
3. Количество цифр числа равно количеству десятичных разрядов в числе.
Для нахождения каждой цифры числа нужно:
1) найти остаток и целую часть от деления (остаток и будет очередной цифрой);
2) увеличить счётчик количества цифр;
3) вывести полученную цифру;
4) поскольку количество цифр в числе заранее неизвестно, будем использовать цикл while. Пока целая часть от деления больше 0, в числе ещё есть цифры и нужно перейти к выполнению пункта 1), иначе все цифры найдены.
4. Вывод значения переменной k.
IV. Описание переменных: k, n, z — int.

7.7. Наибольший общий делитель двух чисел

Наибольшим общим делителем (НОД) для двух целых чисел называют наибольший из их общих делителей. Пример: для чисел 42 и 24 наибольший общий делитель равен 6.

Существует несколько алгоритмов нахождения НОД. С одним из них вы знакомились на уроках математики. Нужно разложить каждое из чисел на простые множители, выбрать общие и перемножить.

Рассмотрим другой алгоритм, который называется алгоритм Евклида (пример 7.14).

  1. Из большего числа вычитаем меньшее.
  2. Если получается 0, то числа равны друг другу, и значение НОД равно любому из этих чисел.
  3. Если результат вычитания не равен 0, то большее число заменяем на разность большего и меньшего.
  4. Переходим к пункту 1.

Пример 7.15. Ира и Игорь коллекционируют значки. У Иры в коллекции a значков, а у Игоря — b. Поскольку значков много, ребята решили поделиться своими значками с друзьями. Какое наибольшее количество общих друзей может быть у Иры и Игоря, если каждый из них хочет разделить все свои значки между друзьями без остатка? Например, если a = 42 и b = 24, то значки можно разделить, если у Иры и Игоря 1, 2, 3 или 6 общих друзей.
Наибольшее количество — 6.

Этапы выполнения задания.

I.  Исходные данные: a и b (количество значков у Иры и у Игоря).
II.  Результат: наибольшее количество общих друзей.
III.  Алгоритм решения задачи:
1.  Ввод чисел a, b.
2.  Поскольку значки нужно делить без остатка, то ответом на задачу может быть только общий делитель чисел a и b. Среди всех делителей нужно найти наибольший.
3.  Для решения задачи опишем функцию nod(a,  b) для вычисления НОД (a, b) по алгоритму Евклида. Пока числа a и b не равны, выполняем следующее:
1)  сравниваем два числа;
2)  если a > b, заменяем a на разность a  –  b, иначе заменяем b на разность b  –  a;
3)  функция может вернуть как значение a, так и b (поскольку они равны).
4.  Вывод результата.
IV.  Описание переменных: a, b — int.

Пример 7.16. Написать программу вычисления НОД (x, y, z) и НОК (x, y, z).

Этапы выполнения задания.

I.  Исходные данные: x, y и z (три числа). Числа будем вводить в одной строке, записывая их через пробел.
II.  Результат: НОД и НОК для (x, y, z).
III.  Алгоритм решения задачи:
1.  Ввод чисел x, y, z.
2.  Воспользуемся функциями из библиотеки math.
3.  Вывод результата.
IV.  Описание переменных: x, y, z, d, f — int.

Подтверждением важности числовых последовательностей является тот факт, что создана целая энциклопедия числовых последовательностей.

Пример 7.1.

Элементы последовательности нечётных положительных чисел можно описать с помощью формулы an = 2n – 1. В этой формуле n — номер элемента в последовательности.
Минимальное значение числа n = 1. Используя формулу, получим последовательность: 1, 3, 5, 7…
Элементы последовательности могут быть рациональными числами.
Например, формула:

задаёт следующую последовательность: 0.5, 0.4, 0.3, 0.235…

Пример 7.2.

Одной из наиболее известных является последовательность Фибоначчи: 0, 1, 1, 2, 3, 5, 8, 13… Несложно заметить, что каждый её элемент, начиная с третьего, равен сумме двух предыдущих. Это можно записать так: an = an – 1 + an – 2, a1 = 0, a2 = 1.

Пример 7.3.

Задана последовательность 2, 4, 8, 16… Каждое число в этой последовательности является степенью 2, поэтому последовательность можно задать формулой an = 2n . С другой стороны, каждый элемент последовательности, начиная со второго, в два раза больше предыдущего. Получим формулу an = 2an – 1 (для n > 1, a1 = 2).

Пример 7.4.

V. Программа:

k = int(input(«k = «))
for n in range (1, k + 1):
    a = 2 * n
print (a, end = » «)

VI. Тестирование программы.

Запустить программу и ввести значения k = 5. Результат:Запустить программу и ввести значение k = 100. Результат:

Пример 7.5.

V. Программа:

x = int(input(«x = «))
c = 0; b = 1
# вывод первых двух элементов
print(c, b, end = » «)
a = c + b
while a < x:
# вывод текущего значения
    print(a, end = » «)
# сдвиг
    c = b
    b = a
# новый элемент
    a = b + c

VI. Тестирование программы.
Запустить программу и ввести значение x = 100. Результат:

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

x = int(input(«x = «))
c = 0
b = 1
print(c, b, end=» «)
a = b + c
k = 2
while a < x:
    print(a, end=» «)
    k += 1  # подсчёт количества
    c = b
    b = a
    a = b + c
print()
print(«k = «, k)

Результат для x = 1000:

Частное двух соседних чисел Фибоначчи \( \frac{233}{144}≈ 1,618. \) Эта пропорция известна как золотое сечение. Многие архитектурные памятники имеют пропорции, близкие к золотому сечению. Согласно схеме главного фасада Несвижского замка отношение высоты всего здания (синяя линия ≈23,4) к высоте нижней части (зелёная линия ≈14,5) равно 1,614.

Пример 7.6. 

V. Программа:

from random import *
n = int(input(«n = «))
k = 0
for _ in range(n):
    # случайное число
    a = randint(1, 100)
    print(a, end=» «)
    # проверка выигрыша
    if a % 5 == 0:
        k += 1
print()
print(«выиграло», k, «билета(ов)»)

VI. Тестирование программы.
Запустить программу и ввести значение n = 20. Результат может быть следующим:

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

Пример 7.7. 

V. Программа:

from math import *
m = int(input(«m = «))
# начальное значение суммы
s = 0
for n in range(1, m + 1):
    x = n**3
    # вычисление элемента
    # последовательности
    a = x / (sqrt(x) — n + 1)
    # изменение значения суммы
    s += a
print(«всего бактерий», s, «млн»)

Переменная х в программе используется для того, чтобы значение выражения n ** 3 не вычислялось дважды. Вместо записи n ** 3 можно использовать n * n * n.

VI. Тестирование программы.
Запустить программу и ввести значение m = 3. Результат:

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

Запустить программу и ввести значение m = 30. Результат:

Результаты работы программы для других исходных данных:

Пример 7.8. 

V. Программа:

from random import *

n = int(input(«n = «))
m = 1000
for _ in range(0, n):
# случайное число
    a = randint(100, 999)
    print(a, end=» «)
# сравнение с текущим
# минимумом
if a < m:
        m = a
print()
print(«min = «, m)

После генерации числа a его нужно вывести, чтобы увидеть все элементы последовательности.
VI. Тестирование программы.
Запустить программу и ввести значение n = 5. Результат:

VII. Программа (нахождение max):

from random import *

n = int(input(«n = «))
m = 0
for _ in range(0, n):
# случайное число
    a = randint(100, 999)
    print(a, end=» «)
# сравнение с текущим
# максимумом
if a > m:
        m = a
print()
print(«max = «, m)

VIII. Тестирование программы.
Запустить программу и ввести значение n = 5. Результат:

Пример 7.9. 

V. Программа:

k = int(input(«k = «))
x = -3
h = 0.5
for _ in range(k):
    # вычисление значения функции
    y = (x + 2) / (x * x + 3)
    # форматированный вывод чисел
    print(«{:7.2f}».format(x), «{:9.3f}».format(y))
    x += h

VI. Тестирование программы.
Запустить программу и ввести значение k = 5. Результат:

Добавим вывод границ таблицы:

k = int(input(«k = «))
x = -3
h = 0.5
print(«————————«)
print(«|       x       |       y      |»)
print(«————————«)
for _ in range(k):
    y = (x + 2) / (x * x + 3)
    print(«|», «{:7.2f}».format(x), » |», «{:9.3f}».format(y), » |»)
    x += h
print(«————————«)

Результат должен быть следующим:

Для вывода целого числа на заданном количестве позиций можно применять следующий форматный вывод:

print('{:6d}'.format(k))

Для вывода k отведено 6 позиций, буква d означает вывод целого числа.

Пример 7.10. Графическая область для построения графика и инструменты управления графиком.Пример 7.11. 

V. Программа:

import matplotlib.pyplot as pl
import numpy as np
k = int(input(«k = «))
# диапазон по х
x = np.linspace(-3, 3, k)
# функция
y = (x + 2) / (x * x + 3)
# надписи
pl.xlabel(«x»)
pl.ylabel(«y»)
pl.title(«График функции»)
# сетка
pl.grid(True)
# вывод графика
pl.plot(x, y)
pl.show()

VI. Тестирование программы.
Запустить программу и ввести значение k = 100. Результат:
Результат для k = 6:
Заменим команду plot на scatter и запустим программу для k = 10. Получим:

Пример 7.12. 

V. Программа:

import matplotlib.pyplot as pl
import numpy as np
k = int(input(«k = «))
x = np.linspace(-3, 3, k)
y = (x + 2) / (x * x + 3)
y1 = 0.3 * x**2
pl.xlabel(«x»)
pl.ylabel(«y»)
pl.title(«Графики функций»)
pl.grid(True)
pl.plot(x, y, «g-«, linewidth=2, label=«(x + 2)/(x*x + 3)»)
pl.plot(x, y1, «r—«, linewidth=2, label=«0.5 * x ** 2»)
pl.legend(fontsize=10)
pl.show()

Результат работы программы для k = 100:

Понятие «число» возникло в глубокой древности из практической потребности людей. Для записи чисел используют цифры. В компьютере с помощью всего двух цифр (0 и 1) представляется любая информация. Числовой код имеет каждая страна мира, цифры задают ПИН-код банковской карты. Сегодня с помощью цифр можно получить числовой образ практически любого объекта.

Пример 7.13. 

V. Программа:

n = int(input(«n = «))
k = 0
while n > 0:
   # текущая цифра
    z = n % 10
    print(z)
   #уменьшение числа в 10 раз
    n //= 10
    # подсчёт кол-ва цифр
    k += 1
print(«в числе», k, «цифр(а)»)

VI. Тестирование программы.
Запустить программу и ввести значение n = 13 579. Результат:Запустить программу и ввести значение n = 1. Результат:

Алгоритм Евклида — алгоритм для нахождения наибольшего общего делителя двух целых чисел. Алгоритм назван в честь древнегреческого математика Евклида (III в. до н. э.), который впервые описал его в книгах «Начала». Это один из старейших численных алгоритмов, используемых в наше время.

Пример 7.14. Алгоритм Евклида для чисел 42 и 24:

Пример 7.15. 

V. Программа:

def nod(a, b):
       while a != b:
            if a > b:
               a -= b
            else:
                b -= a
    return a
a = int(input(«у Иры a = «))
b = int(input(«У Игоря b = «))
c = nod(a, b)
print(«всего друзей =», c)

VI. Тестирование программы.
Запустить программу и ввести значения: а = 42, b = 24. Результат:

Для значений a = 1449, b = 596 получим:

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

В библиотеке math в Python есть функция gcd(), которая вычисляет наибольший общий делитель. Функция lcm() вычисляет наименьшее общее кратное. Обе функции могут иметь произвольное количество параметров.

В Python данные вводятся в виде строки. Ранее мы применяли функции int для преобразования строки в число. Функцию map используют для того, чтобы преобразование происходило не с одним числом, а с последовательностью чисел. Для выделения чисел из строки нужно указать разделитель. Функция split принимает разделитель в качестве параметра. Если он не указан, то по умолчанию в качестве разделителя определён пробел. Пример команды: a, b = map(int, input().split())

Пример 7.16. 

V. Программа:

from math import *
print(«три числа через пробел»)
x, y, z = map(int, input().split())
d = gcd(x, y, z)
# НОД
f = lcm(x, y, z)
# НОК
print(«НОД =», d)
print(«НОK =», f)

VI. Тестирование программы.
Запустить программу и ввести значения: x = 30, y = 40, z = 60. Результат:

Упражнения

1. Выполните задания для примера 7.4.

  1. Измените программу так, чтобы числа выводились в обратном порядке — от большего к 2.
  2. Измените программу так, чтобы выводились все чётные числа, меньшие введённого числа x.
  3. Измените программу так, чтобы можно было вывести первые k чисел последовательности, заданной формулой an = ​\( \frac{n}{n^2 + 1} \)​ (пример 7.4).

2. Выполните задания для примера 7.5.

  1. Запустите программу для разных значений x.
  2. Измените программу так, чтобы выводились первые k элементов последовательности Фибоначчи.
  3. Проверьте утверждение о том, что частное двух соседних элементов последовательности ≈1,618.

 

3. Напишите программу, которая будет выводить на экран элементы последовательности Фибоначчи — первые элементы последовательности: 0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149… Каждый элемент, начиная с четвёртого, равен сумме трёх предыдущих: an = an – 1 + an – 2 + an – 3.

  1. По заданному n вывести элемент последовательности.
  2. Для заданного x вывести элементы последовательности, меньшие x.

4. Выполните задания для примера 7.6.

  1. Запустите программу несколько раз для одного и того же значения (например, 20). Какое число получается в ответе чаще всего? Почему?
  2. Измените программу так, чтобы вычислялось количество чисел, кратных введённому числу x.

5. Выполните задания для примера 7.7.

  1. Замените в решении задачи цикл for на цикл while.
  2. Найдите значение для m = 2000, 10 000, 1 000 000.
  3. Что произойдёт, если ввести значение 10 000 000

6. Найдите сумму первых m элементов последовательности. Число m вводится. Элементы последовательности задаются формулой an = ​\( \frac{1}{n^3}. \)​ 

7. Факториалом числа n называют произведение всех натуральных чисел, не превосходящих n. Обозначают факториал так: n!. По определению факториал числа 0 равен 1. Напишите программу, которая вычислит значение факториала целого неотрицательного числа n. Для проверки можно использовать следующее: 0! = 1; 2! = 2; 5! = 120, 10! = 3 628 800.

8. Последовательность из n целых положительных двузначных чисел генерируется случайным образом. Напишите программу, которая определит, какое максимальное число было сгенерировано.

9*. Измените программу из примера 7.8 так, чтобы она генерировала как положительные, так и отрицательные целые трёхзначные числа.

10. Числа последовательности генерируются по формуле an = n * (–1)n%8. Напишите программу, которая определит, какое максимальное число было сгенерировано.

11. Постройте таблицы значений и графики для следующих функций:

  1. y = x2 – 5x – 3, x ∈ [–3, 3], вводится значение шага h.
  2. y = 2 + \( \frac{3x^3-7}{x}. \), x ∈ [a, b], вводятся значения a, b и k — количество точек (подсказка: h = \( \frac{a+b}{k-1}\)).

12. Выполните задания для примера 7.13.

  1. Команду print(‘в числе ‘, k, ‘ цифр’) заменили командой print(‘число ‘, n,’ состоит из ‘, k, ‘ цифр’). Какой результат будет получен и почему? Какие изменения нужно внести в программу для получения правильного результата?
  2. Изменится ли результат работы программы, если вместо условия цикла n  0 использовать условие n > 1?
  3. Проверьте работу программы для n = 0. Почему получился такой результат? Что нужно изменить в программе для получения правильного результата?

13. Программу из примера 7.13 изменили. Сформулируйте задачу, которая решается с помощью данной программы.

n = int(input(«n = «))
i = int(input(«i = «))
k = 0
while n > 0:
      z = n % 10 #текущая цифра
      k += 1
      if k == i:
           print(«в разряде», i, «стоит цифра», z)
      n //= 10 #уменьшение числа в 10 раз
if i > k:
      print(«в числе», k, » цифр, в разряде», i, «нет цифр»)
else:
      print(«в числе», k, «цифр(a)»)

14. Дано натуральное число n. Определите, каких цифр в числе больше — чётных или нечётных.

15. Дано натуральное число n. Выведите номера разрядов, в которых стоят цифры, кратные 3, или сообщение, что таких цифр нет.

16. Измените функцию nod из примера 7.14 так, чтобы наибольший общий делитель вычислялся следующим образом:

пока a > 0 and b > 0
      если a > b
           замени а остатком от деления на b
      иначе замени b остатком от деления на а
результат a + b
* Почему предложенный алгоритм можно использовать для вычисления НОД?

17. Измените программу из примера 7.16.

1. Найти НОД четырёх чисел.
2. Найти НОК четырёх чисел.
3. Ввести числитель и знаменатель правильной дроби. Сократить дробь.
4*. Две правильные дроби заданы своими числителями и знаменателями. Найти их сумму. Ответ вывести в виде смешанной дроби.

Проверь себя 1       Проверь себя 2