You are on page 1of 6

Функции. Предаване на параметър.

1. Въведение
Основен принцип в програмирането е сложните програми да се
изграждат от множество подпрограми. Всяка подпрограма е предназначена
да извърши дейност, която може да се използва в описанието на друга
дейност. Програмите на езика С се изграждат от функции. Една от
функциите е главна изпълнението на програмата винаги започва с
изпълнението на тази функция.
Модулно програмиране
Може да се каже, че съвременният стил на програмиране се състои в
специфициране на подходящи функции и изграждане на главната
програма, която решава определена задача, като извикване в подходящ ред
на така съставените помощни функции. В теорията на програмирането тези
помощни функции се наричат подпрограми или програмни модули.
Програмирането, посредством разбиване програмата на подпрограми
(модули) се нарича модулно програмиране.
2. Дефиниране на функция:
[<тип>] <име>([<параметри>])
<тяло>
Имената на функциите се подчиняват на общите правила за имената в
езика С.
Тялото на функция е блок от оператори.
В скобите се поставя параметър или се изреждат параметри, разделени със
запетая, или пък не се поставя параметър. За параметъра (параметрите) се
записва типа и името.
a. Параметри на функция
За да си представим по-добре понятието параметър да разгледаме
дефиницията на математическата функция f(x,y)=x2-y2. Параметри на тази
функция са променливите x и y. .Тези параметри ще наричаме формални.
Когато искаме да пресметнем стойността на функцията за две зададени
стойности, например x=3 и y=2, в математиката записваме това като f(3,2).
Числата 2 и 3 също наричаме параметри на функцията,
но фактически параметри.
И така f(x,y)=x2-y2 е дефиниция на функцията f с формални
параметри x и y, а f(3,2) извикване на тази функция с фактически
параметри 3 и 2. Стойността на функцията за тези фактически параметри,
определена от дефиницията, е 5 и значи f(3,2)=5.
Програма на функцията f(x,y):

double f(double x, double y)


{
double z; //local variable,
z=x*x-y*y;
return z;
}

За всеки формален параметър на функцията в тялото й се заделя поле от


паметта, съответно на указания тип. Това става автоматично в момента, в
който функцията се извика за изпълнение. При това инициализацията на
полето на всеки формален параметър се извършва със стойността на
съответния фактически. Редът на задаване на формалните параметри е
съществен, важно е да се спазва и типът на параметрите.
b. Тип на функция
Подобно на променливите всяка функция има тип. Има два вида функции:
Функция, която изчислява и връща стойност типът на функцията е типът
на изчислената стойност;
Функция, която не връща стойност т.н. void функция (празна функция).
Могат да не съдържат оператор return.
c. Извикване на функция (обръщение към функция)
Функция, която извиква друга функция, се нарича извикваща.
Функция, която се извиква в главната програма или в друга функция, се
нарича извикана. При извикването на функция работата на извикващата се
прекратява до завършването на извиканата. След като извиканата функция
завърши, изпълнението на извикващата се възстановява в мястото на
извикването и продължава по обичайния си ред.
Когато функцията е от тип void извикването й става чрез името й, а в скоби
се поставят имената на фактическите параметри, разделени със запетая.
Това се нарича оператор за обръщение.
Пример: swap(x,y);
Когато функцията връща стойност, тя се извиква в рамките на някакъв
израз.
Пример: cout<<"f(x,y)="<<f(2,3)<<endl;

3. Декларация (прототип) на функция(защо?)


Някои програмисти предпочитат да поставят главната функция в началото
на програмата. Тогава е необходимо да бъде включена в главната функция
декларация (или прототип) на виканата функция. Декларирането на
функция става в оператор за деклариране, който за разлика от дефиницията
не съдържа тялото на функцията и имената на формалните параметри.
Синтаксис:
[<тип>] <име>([<параметри>]);
Пример:
double f(double, double);
4.Предаване на параметри
 Предаване по стойност параметри стойности
Фактическите параметри в езика С се предават в извиквната програма по
стойност. Това ще рече, че в извикваната програма се отделя памет за
стойностите им и те се копират там. Техните стойности могат да се
използват в изрази и да се променят с оператори за присвояване. При това,
понеже става дума за копия, промените няма да се отразят на стойностите
в извикващата програма. Фактическите параметри, както и всички
останали променливи, декларирани в тялото на функцията, ще бъдат
изгубени, след като завърши изпълнението й. Този вид променливи се
наричат автоматични.

#include
//Programm calling simple function
double f(double x, double y)
{
double z;
z=x*x-y*y;
return z;
}
int main()
{
double a,b;
cout<<a=;cin>>a;
cout<<b=;cin>>b;
cout<<"f(x,y)="<<f(a,b)<<endl;
}

 Предаване на параметри чрез указатели


Понякога се налага да се изменят стойностите на параметри и да се
използват изменените стойности при по-нататъшната работа на
програмата. За тази цел се използва не самата променлива, а указател към
нея.

#include
void swap(int a,int b)
{
int pom;
pom=a;a=b;b=pom;
}
void main()
{
int x,y;
cout<<"x="; cin>>x;
cout<<"y="; cin>>y;
swap(x,y);
cout<<"sled izvikvane na swap(x,y)n";
cout<<"x="<<x<<" "<<"y="<<y<<endl;
}

#include
//Finding max element of array
int maxel(int [ ], int);//declaration
void input(int [ ],int);//declaration
void main()
{
int n,a[100];
cout<<"vavedi br el n=";
cin>>n;
input(a,n);
cout<<"max element is:"<<maxel(a,n)<<endl;
}

void input(int mas[],int n)


{
for(int i=0;i
{
cout<<"mas["<<i<<"]=";
cin>>mas[i];
}
}

int maxel(int b[],int l)


{
int m=b[0],i;
for(i=1;i
if(b[i]>m) m=b[i];
return m;
}

#include
//Sorting array
void main()
{
int n,a[100];
int maxel(int [], int);//declaration
void input(int [],int);//declaration
void output(int [],int);//declaration
void select_sort(int [], int);//declaration

cout<<"vavedi br el n=";
cin>>n;

You might also like