Главная страница

Подпрограммы


Скачать 1.36 Mb.
НазваниеПодпрограммы
Дата11.11.2022
Размер1.36 Mb.
Формат файлаpptx
Имя файлаPython-911.pptx
ТипПрограмма
#782112

ПРОЦЕДУРЫ И ФУНКЦИИ

Подпрограммы


Подпрограмма – это отдельная функционально независимая часть программы, имеющая имя и решающая отдельную задачу.

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

  • последствиям при модификациях программы.

Два типа подпрограмм


Процедуры

Функции

Подпрограммы

выполняют

действия

выполняют действия, возвращают

некоторый результат

В Python нет формального разделения

функции и

подпрограмм на процедуры (как,

например, в Паскале или Си), и

процедурой можно считать

функцию, возвращающую пустое

в основном единственный

значение – используется

термин – функция.

Общий вид процедуры


def name_procedury(параметры):

тело процедуры

define – определить

имя процедуры, даётся тем, кто пишет

программу

если параметры не нужны ставят пустые скобки ()

пишут в скобках имена одной или нескольких переменных через запятую: (n) или (a,b,c,d)

Параметр – это переменная, от значения которой зависит работа подпрограммы.

Вызов процедуры


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

Аргумент – это значение параметра, которое передаётся подпрограмме при её вызове.

Аргументом может быть не только постоянное значение (число, символ), но также переменная, и даже арифметическое выражение.

name_procedury()

или

name_procedury(n)

или

name_procedury(a,b,c,d)

Простая процедура


вызов

процедуры

процедура

основная часть программы
  • можно вызывать

  • сколько угодно раз
  • нет дублирования кода
  • изменять в одном месте

Процедура с параметрами


символьная строка

Общий вид функции


def name_function(параметры):

тело функции

return (результат)

define – определить

имя функции, даётся тем, кто пишет

программу

Выражение,

стоящее

после ключевого слова return будет

возвращаться в качестве

результата вызова функции.

Результат вызова функции можно:
  • присвоить переменной,
  • использовать его в качестве операндов математических выражений, т.е. составлять более сложные выражения.

Функция – это вспомогательный алгоритм, который возвращает результат (число, строку символов и др.).

Функция


Пример.

которая

Написать вычисляет

функцию, среднее целых

арифметическое двух

чисел.

исходные данные

результат функции

def Avg(a, b): return (a+b)/2

a = 2; b = 5

print(Avg(a,b))

Что делает

программа?

Ещё пример.

Функция


Пример. Написать функцию, которая вычисляет наименьший общий делитель двух целых чисел.

Переменные, которые введены в основной программе, называются глобальными (общими). Их могут использовать все подпрограммы (процедуры и функции).

Переменные, которые используются только внутри процедуры или функции, называются локальными (местными). К ним можно обращаться только внутри этой подпрограммы, остальные подпрограммы и основная программа их не видят. Такой прием называется инкапсуляцией (от латинского «помещение в капсулу»).

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

Имена локальных переменных в каждой подпрограмме можно выбирать независимо от имён локальных переменных других подпрограмм.

def show():

print( s )

def showLocal():

s = 7 print( s)

def showGlobal(): global s

s = 7 print( s )

Процедура выводит значение s. После запуска транслятор сначала ищет локальную переменную с таким именем – её нет. Потом он начинает искать глобальную переменную: если такая переменная есть, на экран выводится её значение, если нет – будет выдано сообщение об ошибке.

Даже если существует глобальная переменная s, в первой строчке этой процедуры будет создана новая локальная переменная s, и её значение (7) появится на экране.

Эта процедура работает с глобальной переменной s. Она присвоит ей новое значение 7 (это «увидят» все остальные подпрограммы) и выведет его на экран.

Нужно стараться писать подпрограммы, которые не обращаются к глобальным переменным.

В данном коде

переменная b в функции

локальная или глобальная?

Не запуская код, ответьте на вопрос: что выведет на экран данная программа?

Не запуская код, выберите, какие из программ во время запуска получат ошибку выполнения.

Не запуская код, ответьте на вопрос: что выведет на экран данная программа?

Функция


Пример. Функция перевода десятичного

числа в двоичное.

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

  • выводится результат работы функции на экран,
  • иначе (когда введен 0) будем прерывать цикл оператором break.

Функция


Пример. Вам даны 4 отрезка.

Выведите YES, если среди них найдутся 3, из которых можно составить треугольник, и NO

в противном случае.

Для решения напишите функцию triangle(a, b, c), которая будет возвращать True, если из трёх заданных отрезков можно составить треугольник, и False иначе.

Задачи


1) Напишите процедуру, которая принимает

параметр – натуральное число N – и выводит на

экран две линии из N символов "–".

2) Напишите процедуру, которая принимает один

параметр – натуральное число N, –

на экран прямоугольник длиной N

и выводит и высотой

3 символа.

3) Напишите процедуру, которая выводит на экран

треугольник со стороной N символов. При запуске

программы N нужно ввести с клавиатуры.

Пример:

Длина цепочки: 7

-------

-------

Пример:

Длина прямоугольника: 7

ooooooo o o

ooooooo

Пример:

Сторона: 5

o oo ooo oooo

ooooo

Задачи

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

Найти все трехзначные простые числа

Задачи

  • Получить все шестизначные счастливые номера. Счастливым называют такое шестизначное число, в котором сумма его первых трёх цифр равна сумме его последних трёх цифр. (Определить функцию для расчета суммы цифр трёхзначного числа.)
  • Даны шесть различных чисел. Определить максимальное из них. (Определить функцию, находящую максимум из двух различных чисел.)
  • Составить программу, в результате которой величина а меняется значением с величиной b, а величина c – с величиной d. (Определить процедуру, осуществляющую обмен значениями двух переменных величин.)

Задачи


12) Даны стороны двух треугольников. Найти сумму их периметров и сумму их

площадей. (Определить процедуру для расчета периметра и площади

треугольника по его сторонам.)

13) Даны основания и высоты двух равнобедренных трапеций. Найти сумму их

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

Задачи

  • Напишите процедуру с параметрами n и s, которая выводит квадрат размером nxn из символа, который вводится с клавиатуры. Используя эту процедуру, напишите программу, которая запрашивает два значения – строну квадрата и символ, и вызывает процедуру рисования требуемого квадрата
  • Напишите процедуру, которая выводит на экран все делители числа N в одну строку через пробел. Используя данную процедуру, составьте программу, которая для всех введенных натуральных чисел (числа вводятся до 0, 0 - признак окончания ввода) выводит делители текущего числа.
  • Напишите логическую функцию isByte, которая возвращает значение True, если переданное ей число помещается в 8-битную ячейку памяти (вспомните, какое минимальное и какое максимальное числа можно записать с помощью 8 бит).

Задачи

  • Напишите логическую функцию pointInRect, которая возвращает значение True, если точка с заданными координатами находится внутри прямоугольника, для которого заданы координаты верхнего левого и правого нижнего углов. Стороны прямоугольника параллельны осям координат.
  • Напишите логическую функцию pointInTriangle, которая возвращает значение

True, если точка с заданными координатами находится внутри треугольника,

заданного координатами трёх своих вершин.

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

Рекурсия


Рекурсия – это определение объекта через такой же объект (или объекты), но с другими параметрами.

Рекурсивная подпрограмма вызывает саму себя напрямую или через другие подпрограммы.

Количество вложенных вызовов функции или процедуры называется глубиной рекурсии. По умолчанию глубина рекурсии в языке Питон ограничена 1000 вызовов.

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

Рекурсия


def F(n):

if n > 2:

return F(n-1)+ F(n-2) else: return 1

n=int(input()) print(F(n))

F(4)

F(3)

F(5)

+

F(2) + F(1)

1 1

F(3)

F(2)

F(1) 1

1

F(2) + 1

+

Рассмотрим рекурсию на примере:

Примеры

Рассмотрим пример функции вычисления факториала.

Программирование рекурсии выглядит

так:

  • Функция должна сначала проверить, не является ли переданный набор

параметров простым (крайним)

функция

случаем. В этом случае

должна вернуть значение (или

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

Примеры

Вычисление суммы натуральных чисел от 1 до n.

def sum(n):

if n == 1:

return 1 else:

return n + sum(n-1)


Быстрое возведение в степень

def power(a, n): if n == 0:

return 1

elif n % 2 == 1:

return power(a, n - 1) * a else:

return power(a, n // 2) ** 2

Задачи


Чему равна сумма всех

на

чисел, напечатанных экране при

выполнении

вызова F(1)?

def F(n): print(n) if n < 5:

F(n + 1)

F(n + 3)

def F(n): print(n) if n > 1:

F(n - 1)

F(n - 3)

def F(n): if n > 2:

return F(n-1) + G(n-2) else: return n

def G(n): if n > 2:

return G(n-1) + F(n-2) else: return n+1

Чему будет равно значение, вычисленное при выполнении вызова F(6)?


написать администратору сайта