Процедура вызывает процедуру

01.03.2023 0 Автор : Марина Николаевна
Процедура вызывает процедуру

Процедура вызывает процедуру. Процедура может вызывать другие процедуры. Например, можно ввести в нашу программу еще одну процедуру home, которая рисует весь домик:

def home ()
frame ()
roof ()
window ()

Тогда вся основная программа будет представлять собой одну строку — вызов процедуры home:

home ()

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

Если попробовать вызвать только что написанную процедуру home дважды,то получится два домика. 

Эта процедура  неуправляема:  ничего нельзя изменить в ее работе, координаты и размеры всех фигур жёстко заданы внутри процедур frame, roof и window. При желании нарисовать несколько одинаковых домиков.

Эта задача решается при помощи метода базовой точки.

Сначала выбирается одна  из точек изображения  домика в качестве базовой, обозначаем ее координаты символами (например, Х и Y) и пересчитываем координаты всех отдельных точек через Х и Y.

Получается, что координаты Х и Y нужно передать процедуре home. Для этого служат круглые скобки, в которых нет никаких записей. Теперь можно ввести с клавиатуры координаты, записать их в переменные и передать процедуре, указав в скобках при вызове:

print ("Введите координаты домика")
х = int (input ("х = "))
y = int (input ("y = "))
home (x, y)

Данные, передаваемые в процедуру, называют аргументами (как y  функции в математике).

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

def home (x, y):
frame (x, y)
roof (x, y)
window (x, y)

В первой строке указано, что процедура готова принять два значения, обозначенные как x  и y. Данные, которые принимает процедура, называют параметрами.

Параметры — это данные, которые принимает процедура. В процедуре они обозначаются именами.

Параметры — это переменные, которые используются только внутри процедуры. Другие процедуры и основная программа не могут к ним обращаться.

Следующие сроки процедуры home говорят о том, что значения х и y передаются процедуры frame, roof и windows, которые вызываются из home. Эти процедуры тоже нужно переделать.

Например, процедура frame рисует квадрат со стороной 100 пикселей, поэтому если его верхний левый  угол  имеет координаты (x, y), то координаты правого нижнего угла получаются равными (х+100, y+100)

Вся процедура принимает вид:

def frame (x, y):
penColor ("black")
brushColor ("green")
rectangle (x, y, x+100, y+100)

Остальные процедуры также переделываются.

Далее , вызывая несколько раз процедуру home  с разными значениями x и y, рисовать домики в разных местах холста:

home (100, 100)
home (300, 100)

После выполнения такой программы видно, что все линии второго домика жирные. 

Внимание! Можно менять только координаты домика, так как они передаются в процедуре home. Другие свойства (например, ширину домика или цвета самого домика или его отдельных элементов) изменить пока нельзя. 

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