Пусть требуется разработать программу вычисления выражения:
в которой возведение в степень выполняется функцией Step.
function Step(N: integer; X: real): real;
Write(‘Введите значение числа А и показатель степени М’);
else if M>0 then R:=Step(M,A)
Writeln(‘ Для А= ‘,А,’М= ‘,М,’ Значение выражения= ‘,Z);
В начале программы описываются переменная целого типа М и переменные вещественного типа А, Z, R, после этого описывается функция вычисления степени числа Step с формальными параметрами N и X, результат, возвращаемый функцией в точку вызова, — вещественного типа.
В описании функции вводятся две локальных (местных) переменных I и Y. Переменная I служит для подсчета числа повторений цикла, а в Y накапливается значение степени как произведения N одинаковых сомножителей. В заключение функции присваивается значение вычисленного произведения.
В начале выполнения основной программы на экран выводится запрос «Введите значение числа А и показатель степени М» и считывается с клавиатуры значение вещественного числа А и целого числа М.
Урок 3 Знакомство с объектами. Числа и операции над ними Python
Затем выполняется оператор:
Осуществляется вызов функции Step с передачей ей фактических параметров 5, А. Их значения присваиваются формальным параметрам функции N и X. По окончании вычисления степени числа значение функции Step, вычисленное для фактических параметров 5 и А, присваивается переменной Z. Аналогично в операторе:
Z:= Z + Step(3,l/A);
сначала осуществляется вызов функции Step с передачей ей фактических параметров 3, 1/A, после чего значение переменной Z увеличивается на величину возвращенного в основную программу результата вычисления функции Step.
if M=0 then R:=1
else if M>0 then R:=Step(M,A)
else R:=Step(- M,A);
проверяют условия М=0, М>0 и в зависимости от их соблюдения либо присваивает переменной R значение 1 (при М=О), либо выполняет вызов функции Step для фактических значений М, А или -М, А, а после вычисления значения функции Step присваивает его переменной R.
выполняет вычисление значения выражения, а затем присваивает вычисленное значение переменной Z.
В заключение программы стандартная процедура Writeln выводит на экран сообщение о результате вычислений степени М числа А.
Источник: megalektsii.ru
ЛР 2. Python лр часть А. Процедуры и Функции
Единственный в мире Музей Смайликов
Самая яркая достопримечательность Крыма
Скачать 391.83 Kb.
Python
ЛР 2. Часть А. Процедуры и Функции.
Подпрограммы прежде всего необходимы в ситуации, когда в разных
частях программы необходимо выполнять одни и те же действия несколько
раз. В таком случае повторяемые операторы оформляются в виде функции
#2.5 — Поколение Python курс для начинающих stepik org Ответы и решения. Целочисленная арифметика #2
или процедуры, к которой можно обращаться и вызывать ее выполнение из
разных частей программы.
В python существует два вида реализации подпрограмм: процедуры и
функции.
Рассмотрим синтаксис процедуры на примере:
Пример: создать процедуру для вывода сообщения об ошибке. Запрашивать у пользователя ввести положительное число, в случае ввода отрицательного числа, вызывать процедуру для вывода сообщения об ошибке.
✍
Решение:
def
Err
()
:
# определение процедуры
print
(
«Ошибка: неверные данные»
)
n
=
int
(
input
(
‘введите положительное число’
)
)
if
n
>>
a
=
[]
>>>
a.
append(
‘444’
)
>>>
a
[
‘444’
]
Пример:
Поиск нечетных элементов в массиве mas и копирование их в массив B.
✍
Решение:
B
=
[]
for
x
in
mas:
if
x %
2
!=
:
B.
append(
x
)
•
Удаление элемента:
>
a.
remove(
‘444’
)
>>>
a
[]
•
Удаление элемента по индексу:
>>>
del
a
[
]
>>>
a
[]
При копировании списков, т.е. присваивании одного списка другому, изменение первого списка влечет за собой изменение второго списка. Так как эти объекты связаны одной областью памяти (ссылка на список). mas1
=
[
1
,
2
,
3
]
mas2
=
mas1
# создается ссылка на список
mas1
[
]
=
4
print
(
mas2
)
#[4, 2, 3]
Чтобы создать не ссылку на список, а копию списка можно использовать либо срез либо функцию copy.
1. mas2
=
mas1
[
:
]
# используем срез
2.
import
copy mas1
=
[
1
,
2
,
3
]
mas2
=
copy copy
(
mas1
)
Задание 6_3: Проверить, является ли заданное слово палиндромом.
Примечание:
•
Пример палиндрома: казак, ABBA
•
Использовать функции.
•
Поскольку при присваивании одного списка другому, изменение первого ведет к аналогичному изменению второго списка, то необходимо использовать копию (
copy
).
Начало программы:
import
copy stroka
=
input
(
‘введите слово’
)
lst
=
list
(
stroka
)
# конвертируем строку в список
Генерация случайных чисел
Встроенный модуль Питона random позволяет генерировать псевдослучайные числа.
Модуль random включает в себя функцию random, которая возвращает действительное число в диапазоне от 0.0 до 1.0. Каждый раз при вызове функции возвращается число из длинного ряда.
Пример:
import
random
for
i
in
range
(
10
)
: x
=
random random
()
print
(
x
)
# 0.5185207383774904 0.78283351055836 0.23601341583293534 .
Чтобы получить случайное число между 0.0 и верхней границей high, просто умножьте x на high.
Например, от 0.0 до 15.0:
import
random
for
i
in
range
(
10
)
:
x
=
random random
()
print
(
x *
15
)
# 11.075319687990554 7.152253113207329 .
Для того, чтобы получить псевдослучайное целое число:
import
random random randint(
,
)
Для того, чтобы получить псевдослучайное вещественное число:
import
random random uniform(
,
)
Еще пример:
from
random
import
randint l
=
[
randint
(
10
,
80
)
for
x
in
range
(
10
)]
Задание Python 6_4:
Найдите в массиве все простые числа и скопируйте их в новый массив.
Задание Python 6_5:
Решить задачу поиска среднего значения в списке из N элементов (вводимых в виде строк). Использовать метод добавления элементов списка и суммирования элементов
Цикл for при работе со списками
mylist
=
[
1
,
2
,
3
,
4
,
5
]
for
item
in
mylist: item
=
# mylist
не меняется!
print
(
mylist
)
# [1, 2, 3, 4, 5]
n
=
5
for
i
in
range
(
n
)
: mylist
[
i
]
=
# mylist
меняется
print
(
mylist
)
# [0, 0, 0, 0, 0]
В списке чисел проверить, все ли элементы являются уникальными, т.е. каждое число встречается только один раз
✍
Решение:
Комментарии к программе:
Решать данную задачу на языке Python мы будем «классическим» вариантом
— брать по очереди элементы списка и сравнивать каждый элемент со стоящими за ним. При первом же совпадении элементов делается вывод, что в списке есть одинаковые элементы, и работа программы завершается.
Для выхода из цикла будем использовать метод quit()
import
random m
=
6
mass
=
[]
k
=
j
=
for
i
in
range
(
m
)
: mass.
append(
random randint(
—
10
,
10
))
print
(
mass
[
i
])
# -10 0 -8 0 -10 1
for
i
in
mass: k
=
k+
1
for
j
in
range
(
k
,
m
)
:
# j = 0 -8 0 -10 -> quit
if
(
i
==
mass
[
j
])
:
# -10==0 -10==-8 -10==0 -10==-10 -> quit
print
(
‘yes’
)
quit
()
Задание Python 6_6:
Определить индексы элементов массива (списка), значения которых принадлежат заданному диапазону (т.е. не меньше заданного минимума и не больше заданного максимума)
* в результате получили индексы элементов, значения которых находятся в диапазоне [5,15]
Алгоритм:
1.
Заполнить список (массив) случайными числами
2.
Запросить для ввода минимум и максимум диапазона
3.
Найти индексы элементов, значения которых входят в диапазон. Добавлять найденные индексы к новому списку
4.
Вывести общее число найденных индексов (функция len()) и отдельно все индексы
Задание Python 6_7:
Дополнить предыдущую программу следующим:
После того, как элемент с подходящим значением добавлен в новый список – удалять его из исходного списка
* Использовать цикл while , функцию len()
Источник: topuch.com
Возведение числа в степень через рекурсию
Для начала вспомним, какие частные случаи необходимо учесть при возведении в степень (очевидный вариант возведения положительного числа в положительную степень опустим):
- Возведение в отрицательную степень:
- х^(-p) = 1 / x^p
- x^0 = 1
- x^1 = x
- 0^p = 0
- 1^p = 1
- 0^p при p
Итак, начнем вычисление х^p. Сначала убедимся, что входные параметры не попадают под исключение (строка 2). Затем проверим частные случаи (строка 5):
public static double power(double x, int p) < if (x == 0 p if (x == 1 || x == 0) return x;
Вы могли обратить внимание на то, что мы упустили из виду один частный случай, а именно — возведение в первую степень x^1 = x.
Кроме того, поскольку речь идет о рекурсивном методе решения, логично было бы ожидать определение базового случая. Однако, прямо сейчас мы этого делать не будем, и уже скоро вы поймете, почему.
Следующим шагом напишем логику работы возведения в степень. Первая строка — возведение в положительную, вторая — в отрицательную.
if (p > 1) return x * power(x, —p); if (p < 1) return 1 / x * power(x, ++p);
Сейчас наша рекурсия будет отрабатывать, как задумано, пока степень p не станет равна 1. Это и есть наш последний частный случай! Поскольку при возведении в первую степень не требуется использовать рекурсию, мы можем сделать p = 1 нашим базовым случаем.
if (p > 1) return x * power(x, —p); if (p < 1) return 1 / x * power(x, ++p); return x;
Конечно, мы могли бы определить данный базовый случай где-то вначале. Но в данном решении это не требуется, поскольку мы минуем условные операторы только при p = 1.
Весь код целиком:
public static double power(double x, int p) < if (x == 0 p if (x == 1 || x == 0) return x; if (p > 1) return x * power(x, —p); if (p < 1) return 1 / x * power(x, ++p); return x; >
На первый взгляд, может показаться трудным для понимания сценарий возведения в отрицательную степень. А именно, почему используется p < 1? Давайте разберемся.
Допустим, мы имеем x = 2 и p = -1. В таком случае, после первой итерации мы получим:
if (p < 1) return 1 / 2 * power(2, 0);
if (p < 1) return 1 / 2 * 1 / 2 * power(2, 1);
По логике вещей, мы уже проскочили наш ответ, ведь 2^-1 = 1/2. Однако, поскольку на следующей итерации p = 1, результатом работы метода окажется x. Таким образом, в итоге наше выражение примет вид:
if (p < 1) return 1 / 2 * 1 / 2 * 2;
И в итоге мы получим верный ответ.
Источник: habr.com