Занятие 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. В главной программе вызвать эти функции несколько раз с различными координатами.