4. Функции с параметрами

Занятие 4

Это надо знать

На прошлом уроке мы научились разбивать программу на вспомогательные программы - функции. И мы  использовали функции, чтобы "разгрузить" основную программу, но в этом случае мы могли нарисовать только по одному герою: одну лягушку, одну елку, один самокат, одного комара и одного аиста. А что необходимо сделать, чтобы можно было изобразить несколько одинаковых героев?

Как вы думаете, если мы напишем в основной программе следующие команды:

tree();
tree();
tree();
frog();
frog();


увидим ли мы три елки и две лягушки? Почему так произошло? Очевидно, что мы рисовали елки и лягушек в одних и тех же координатах и поэтому на экране видим одну лягушку и одну елку.

Мы можем написать функции tree и greentree, которые рисуют одинаковые елки, но в разных координатах и, вызвав их в основной программе, получим  две одинаковые елки. Аналогично можем поступить и с остальными героями. Но будет ли этот способ рациональным? А если нам надо нарисовать 20 елок и 15 лягушек? 

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

Координаты опорной точки самоката  (80, 280).
Команды, которые рисуют самокат:
 
    txCircle (80 -      5,  280 + 45, 25);
    txCircle (80 + 145,  280 + 45, 25);

    txLine (80 -    5,  280 + 45,  80 +   20,  280 -  80);
    txLine (80 -    5,  280 -  70,  80 +   40,  280 -  90);
    txLine (80 +   0,  280 +   0,  80 +   45,  280 + 45);
    txLine (80 + 45,  280 + 45,  80 + 145,  280 + 45);

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

    txCircle (х -      5,  y + 45, 25);
    txCircle (х + 145,  y + 45, 25);

    txLine (х -    5,  y + 45,  х +   20,  y -  80);
    txLine (х -    5,  y -  70,  х +   40,  y -  90);
    txLine (х +   0,  y +   0,  х +   45,  y + 45);
    txLine (х + 45,  y + 45,  х + 145,  y + 45);

И теперь при вызове функции мы просто укажем чему равно х и чему равно у.

Переменные х и у в программировании называют величинами.  Каждя величина имеет имя, значение и тип.

Имя величины может состоять из латинских букв (маленьких и больших), цифр и знака подчеркивания. Имя должно нести смысл, поясняющий назначение величины в  в программе, например, size_x  или sizeX– размер по горизонтали, sum – сумма.
В Си имена Name, NAME, name – различные объекты, так как  строчные и прописные буквы различаются.
Со значением величины все понятно, это в данном случае число, которому равна переменная.
В математике мы изучаем целые  и дробные числа. Указать тип величины - это сказать,  число целое или дробное. Мы рассмотрим int - целый тип (только целые числа) и dooble - вещественный тип (дробные и целые числа).

В нашем случае х и у - координаты точек на экране, следовательно, х и у - целые числа.
И в описании функции мы запишем в скобках после имени функции: int x, int y.

Так будет выглядеть программа, которая рисует три елки и две лягушки:



Пример

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

1. Заменим в каждой функции координаты опорных точек, которые указаны числами на х и у.
2. Изменим описание и прототипы функций: scooter (int x, int y);   frog (int x, int y);  tree (int x, int y);
3. В main вызовем  функцию scooter два раза, функцию frog два раза и функцию  tree три раза, указав в скобках координату точки, которая будет опорной (т. е. укажем место, в котором рисовать).

Посмотреть текст программы

Результат выполнения программы


Домашнее задание

1. Внести изменения в вашу программу, чтобы все функции были с параметрами, описывающими координаты  объектов.

2. В главной программе вызвать эти функции несколько раз с различными координатами.