Файл: Зачем нужны процедуры.ppt

ВУЗ: Не указан

Категория: Решение задач

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 89

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

§ 59. Процедуры




Зачем нужны процедуры?





print ( "Ошибка программы" )


много раз!


def Error():
print( "Ошибка программы" )


n = int ( input() )
if n < 0:
Error()


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


Процедура:


define определить

Что такое процедура?





Процедура – вспомогательный алгоритм, который выполняет некоторые действия.


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

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





Задача. Вывести на экран запись целого числа (0..255) в 8-битном двоичном коде.


много раз!


Алгоритм:


178





101100102


Как вывести первую цифру?


?


7 6 5 4 3 2 1 0


1 0 1 1 0 0 1 02


разряды


n:=


n // 128


n % 128


Как вывести вторую цифру?


?


n1 // 64

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





Задача. Вывести на экран запись целого числа (0..255) в 8-битном двоичном коде.


Решение:


k = 128
while k > 0:
print ( n // k,
end = "" )
n = n % k
k = k // 2


n


k


вывод


178


128


1


50


64


0


50


32


1


18


16


1


2


8


0


2


4


0


2


2


1


0


1


0


0


0


178





10110010


Результат зависит от n!


!

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





printBin ( 99 )


значение параметра (аргумент)


def printBin( n ):
k = 128
while k > 0:
print ( n // k, end = "" )
n = n % k;

k = k // 2


Параметры – данные, изменяющие работу процедуры.


локальная переменная


def printSred( a, b ):
print ( (a + b)/2 )


Несколько параметров:

Локальные и глобальные переменные





a = 5
def qq():
a = 1
print ( a )
qq()
print ( a )


глобальная переменная


локальная переменная


1


5


a = 5
def qq():
print ( a )
qq()


5


a = 5
def qq():
global a
a = 1
qq()
print ( a )


1


global a


работаем с глобальной переменной

Неправильная процедура





x = 5; y = 10
def xSum():
print ( x+y )
xSum()


Что плохо?


?


def xSum():
print ( x+y )


процедура связана с глобальными переменными, нельзя перенести в другую программу печатает только сумму x и y, нельзя напечатать сумму других переменных или сумму x*y и 3x


Как исправить?


?


передавать данные через параметры

Правильная процедура





x = 5; y = 10
Sum2( x, y )
z=17; w=3
Sum2( z, w )
Sum2( z+x, y*w )


def Sum2(a, b):
print ( a+b )


a


b


x


5


y


10


17


3


z


w


5


10


17


3


22


30


15
20
52


Глобальные:


Локальные:


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

Задачи





«A»: Напишите процедуру, которая принимает параметр – натуральное число N – и выводит на экран линию из N символов '–'.
Пример:
Введите N:
10
----------
«B»: Напишите процедуру, которая выводит на экран в столбик все цифры переданного ей числа, начиная с первой.
Пример:
Введите натуральное число:
1234
1
2
3
4

Задачи





«C»: Напишите процедуру, которая выводит на экран запись переданного ей числа в римской системе счисления.


Пример:
Введите натуральное число:
2013
MMXIII


§ 60. Функции




Что такое функция?





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


s = input()
n = int( s )
x = randint( 10, 20 )

Что такое функция?





def lastDigit( n ):
d = n % 10
return d


Задача. Написать функцию, которая вычисляет младшую цифру числа (разряд единиц).


lastDigit


число


последняя цифра


1234


4


return d


передача результата


результат работы функции – значение d


# вызов функции
k = lastDigit( 1234 )
print( k )

Сумма цифр числа





def sumDigits( n ):
sum = 0
while n!= 0:
sum += n % 10
n = n // 10
return sum


return sum


передача результата


Задача. Написать функцию, которая вычисляет сумму цифр числа.


# основная программа
sumDigits(12345)


# сразу вывод на экран
print ( sumDigits(12345) )


Что плохо?


?


# сохранить в переменной
n = sumDigits(12345)

Использование функций





x = 2*sumDigits( n+5 )
z = sumDigits( k ) + sumDigits( m )
if sumDigits( n ) % 2 == 0:
print ( "Сумма цифр чётная" )
print ( "Она равна", sumDigits( n ) )


Функция, возвращающая целое число, может использоваться везде, где и целая величина!


!


Одна функция вызывает другую:


def middle ( a, b, c ):
mi = min ( a, b, c )
ma = max ( a, b, c )
return a + b + c - mi - ma


вызываются min и max


Что вычисляет?


?

Задачи





«A»: Напишите функцию, которая находит наибольший общий делитель двух натуральных чисел.
Пример:
Введите два натуральных числа:
7006652 112307574
НОД(7006652,112307574) = 1234.
«B»: Напишите функцию, которая определяет сумму цифр переданного ей числа.
Пример:
Введите натуральное число:
123
Сумма цифр числа 123 равна 6.

Задачи





«C»: Напишите функцию, которая «переворачивает» число, то есть возвращает число, в котором цифры стоят в обратном порядке.
Пример:
Введите натуральное число:

1234
После переворота: 4321.

Как вернуть несколько значений?





def divmod ( x, y ):
d = x // y
m = x % y
return d, m


d – частное,
m – остаток


a, b = divmod ( 7, 3 )
print ( a, b ) # 2 1


q = divmod ( 7, 3 )
print ( q ) # (2, 1)


(2, 1)


кортеж – набор элементов


q[0]


q[1]

Задачи





«A»: Напишите функцию, которая переставляет три переданные ей числа в порядке возрастания.
Пример:
Введите три натуральных числа:
10 15 5
5 10 15
«B»: Напишите функцию, которая сокращает дробь вида M/N.
Пример:
Введите числитель и знаменатель дроби:
25 15
После сокращения: 5/3

Задачи





«C»: Напишите функцию, которая вычисляет наибольший общий делитель и наименьшее общее кратное двух натуральных чисел.
Пример:
Введите два натуральных числа:
10 15
НОД(10,15)=5
НОК(10,15)=30

Логические функции





def even(n):
if n % 2 == 0:
return True
else:
return False


Логическая функция – это функция, возвращающая логическое значение (True/False).


def even(n):
return (n % 2 == 0)


k = int( input() )
if even( k ):
print( "Число", k, "чётное." )
else:
print( "Число", k, "нечётное." )

Логические функции





Задача. Найти все простые числа в диапазоне от 2 до 1000.


for i in range(2,1001):
if  i - простое  :
print ( i )


i - простое


isPrime(i)


функция, возвращающая логическое значение (True/False)

Функция: простое число или нет?





Какой алгоритм?


?


def isPrime ( n ):
k = 2
while k*k <= n and n % k != 0:
k += 1
return (k*k > n)


return (k*k > n)


if k*k > n:
return True
else:
return False

Логические функции: использование





n = int ( input() )
while isPrime(n):
print ( n, "– простое число" )
n = int ( input() )


Функция, возвращающая логическое значение, может использоваться везде, где и логическая величина!


!

Задачи





«A»: Напишите логическую функцию, которая определяет, является ли переданное ей число совершенным, то есть, равно ли оно сумме своих делителей
, меньших его самого.
Пример:
Введите натуральное число:
28
Число 28 совершенное.
Пример:
Введите натуральное число:
29
Число 29 не совершенное.

Задачи





«B»: Напишите логическую функцию, которая определяет, являются ли два переданные ей числа взаимно простыми, то есть, не имеющими общих делителей, кроме 1.
Пример:
Введите два натуральных числа:
28 15
Числа 28 и 15 взаимно простые.
Пример:
Введите два натуральных числа:
28 16
Числа 28 и 16 не взаимно простые.

Задачи





«С»: Простое число называется гиперпростым, если любое число, получающееся из него откидыванием нескольких цифр, тоже является простым. Например, число 733 – гиперпростое, так как и оно само, и числа 73 и 7 – простые. Напишите логическую функцию, которая определяет, верно ли, что переданное ей число – гиперпростое. Используйте уже готовую функцию isPrime, которая приведена в учебнике.
Пример:
Введите натуральное число:
733
Число 733 гиперпростое.
Пример:
Введите натуральное число:
19
Число 19 не гиперпростое.