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).
- Из большего числа вычитаем меньшее.
- Если получается 0, то числа равны друг другу, и значение НОД равно любому из этих чисел.
- Если результат вычитания не равен 0, то большее число заменяем на разность большего и меньшего.
- Переходим к пункту 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.