- •Программирование на языке Си
- •Программирование на языке Си
- •Программирование на языке Си
- •Оператор присваивания
- •Программирование на языке Си
- •Ввод чисел с клавиатуры
- •Что неправильно?
- •Программирование на языке Си
- •Программирование на языке Си
- •Программирование на языке Си
- •Программа
- •Программирование на языке Си
- •Программа
- •Последовательности
- •Программа
- •Программирование на языке Си
- •Программирование на языке Си
- •Программирование на языке Си
- •Система координат
- •Цвета
- •Управление цветом
- •Штриховка
- •Штриховка
- •Программирование на языке Си
- •Программа
- •Программирование на языке Си
- •Процедуры
- •Программа
- •Параметры-переменные
- •Программирование на языке Си
- •Программирование на языке Си
- •Программа
- •Логические функции
- •Программирование на языке Си
- •Программа
- •Основной цикл
Программирование на языке Си
Тема 12. Процедуры
© К.Ю. Поляков, 2007-2008
129
Процедуры
Задача: Построить фигуру:
? Можно ли решить известными методами?
Особенность: Три похожие фигуры. общее: размеры, угол поворота
отличия: координаты, цвет
?
130
Процедуры
Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.
Применение:
•выполнение одинаковых действий в разных местах программы
•разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия
Задача
Подзадача1 |
|
Подзадача2 |
|
Подзадача3 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3
131
Процедуры
Порядок разработки:
•выделить одинаковое или похожее (три фигуры)
•найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет)
•отличия записать в виде неизвестных переменных, они будут параметрами процедуры
(x, y-60) |
имя |
|
параметры |
|
процедуры |
|
|
60 |
void Tr( int x, int y, int c ) |
||
|
|||
(x, y) 100 (x+100, y) |
{ |
тело |
цвет |
|
... |
|
|
|
} |
|
координаты |
void – «пустой» (некоторые действия)
Процедуры |
132 |
|
формальные |
|
|
|
|
|
|
параметры |
(x, y-60)
60
(x, y) 100 (x+100, y)
тело процедуры
void Tr( int x, int y, int c )
{
moveto ( x, y ); lineto ( x, y-60 ); lineto ( x+100, y ); lineto ( x, y ); setfillstyle ( 1, c );
floodfill ( x+20, y-20, 15);
}
«Формальные параметры» могут изменяться, заранее неизвестны (обозначаются именами, как переменные).
Программа |
133 |
|
формальные |
||
|
параметры |
|
60
(100,100)
#include <conio. #include <graphics
void Tr( int x, int y, int c)
{
...
100 |
} |
|
|
main() |
процедура |
|
{ |
|
|
initwindow (400, 300); |
вызовы |
Tr (100, 100, COLOR(0,0,255)); |
процедуры |
Tr (200, 100, COLOR(0,255,0)); |
|
Tr (200, 160, COLOR(255,0,0)); |
|
getch(); |
|
closegraph(); |
} |
фактические |
|
параметры |
134
Процедуры
Особенности:
•обычно процедуры расположены выше основной программы
•в заголовке процедуры перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться
void Tr( int x, int y, int c )
•при вызове процедуры в скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке
Tr ( 200, 100, COLOR(255,0,0));
x |
y |
c |
135
Процедуры
Особенности:
•для каждого формального параметра в заголовке процедуры указывают его тип
void A ( int x, float y, char z ) { ... }
•внутри процедуры параметры используются так же, как и переменные
•в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к ним доступа
void A ( int x, float y, char z )
{ |
локальные |
|
int a2, bbc = 345; |
||
переменные |
||
... |
||
|
||
} |
|
136
Как поменять местами?
Задача: поменять местами |
2 |
содержимое двух чашек. |
1 |
|
3
Задача: поменять местами содержимое двух ячеек
памяти. |
x |
|
y |
c = x; |
6 |
2 |
4 |
x = y;
y = c;
? Можно ли обойтись без c?
1
4 c
3
137
Параметры-переменные
Задача: составить процедуру, которая меняет местами
значения двух переменных.
Особенности: надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе.
void Swap |
a, int |
эта процедура |
{ |
|
|
|
работает с |
|
int c; |
|
|
|
копиями |
|
c = a; a |
= c; |
параметров |
}
main() |
|
||
{ |
|
x = 1, y = 2 |
|
|
int x = 1, y = 2; |
||
|
Swap ( x, y ); |
|
|
|
printf ( "x = %d, |
y = %d", x, y ); |
}