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

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

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

Добавлен: 12.01.2024

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

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

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

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

print ( "Ошибка программы" ) много раз!def Error(): print( "Ошибка программы" )n = int ( input() )if n < 0: Error() вызов процедурыПроцедура:define определить

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

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

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

Задача. Вывести на экран запись целого числа (0..255) в 8-битном двоичном коде. много раз!Алгоритм:178101100102 Как вывести первую цифру? ?7 6 5 4 3 2 1 01 0 1 1 0 0 1 02 разрядыn:=n // 128n % 128 Как вывести вторую цифру? ?n1 // 64

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

Задача. Вывести на экран запись целого числа (0..255) в 8-битном двоичном коде. Решение:k = 128while 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

17810110010 Результат зависит от 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 = 5def qq(): a = 1 print ( a )qq()print ( a ) глобальная переменная локальная переменная 1 5a = 5def qq(): print ( a )qq() 5a = 5def qq(): global a a = 1qq()print ( a ) 1global a работаем с глобальной переменной

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

x = 5; y = 10def xSum(): print ( x+y )xSum() Что плохо? ?def xSum(): print ( x+y ) процедура связана с глобальными переменными, нельзя перенести в другую программу печатает только сумму x и y, нельзя напечатать сумму других переменных или сумму x*y и 3x Как исправить? ? передавать данные через параметры

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

x = 5; y = 10Sum2( x, y )z=17; w=3Sum2( z, w )Sum2( z+x, y*w )def Sum2(a, b): print ( a+b )a
b
x

5

y

10


17


3

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

Задачи

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

Задачи

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

Пример:Введите натуральное число:2013MMXIII § 60. Функции

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

Функция – это вспомогательный алгоритм, который возвращает значение-результат (число, символ или объект другого типа).s = input()n = int( s )x = randint( 10, 20 )

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

def lastDigit( n ): d = n % 10 return dЗадача. Написать функцию, которая вычисляет младшую цифру числа (разряд единиц). lastDigit число последняя цифра 1234 4return d передача результата результат работы функции – значение d# вызов функцииk = lastDigit( 1234 )print( k )

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

def sumDigits( n ): sum = 0 while n!= 0: sum += n % 10 n = n // 10 return sumreturn 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, md – частное,m – остатокa, b = divmod ( 7, 3 )print ( a, b ) # 2 1q = divmod ( 7, 3 )print ( q ) # (2, 1)(2, 1) кортеж – набор элементовq[0]q[1]

Задачи

«A»: Напишите функцию, которая переставляет три переданные ей числа в порядке возрастания. Пример:Введите три натуральных числа:10 15 55 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 Trueelse: 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 не гиперпростое.