Използване на функции в c++



Дата19.02.2017
Размер45.42 Kb.
#15307
ИЗПОЛЗВАНЕ НА ФУНКЦИИ В C++

Функциите са основни структурни единици в езика C++. Те представляват обособени самостоятелни части от програмата, т.е. нещо като подпрограми. Най-често във функции се обособява описанието на задачи, които често се изпълняват в различни програми, например въвеждане на елементи на масив, извеждане на елементи на масив, търсене на минимум или максимум, изчисляване на разстояние между точки и т.н.


Особеното за тях е, че те могат да връщат резултат към извикващата ги част от програмата. Това става с помощта на оператора return.
Примерно описание на функция за изчисляване на разстояние между две точки е:
float dist (float x1, float y1, float z1, float x2, float y2, float z2) {

float d;

d=sqrt(pow(x2-x1,2)+pow(y2-y1,2)+pow(z2-z1,2));

return d;

}
Името на функцията е dist. Типът на резултата, връщан от нея, е float. В този пример x1, y1, z1, x2, y2, z2 са формални параметри, които се предават от извикващата част към функцията. d е локална променлива за тази функция и принадлежи само към нея. Това означава, че тя има смисъл само в тази функция и не може да бъде извиквана или използвана в друга част от програмата. С помощта на оператора return d; стойността на d се връща към извикващата част от програмата. Функциите могат да използват и т.н. глобални променливи, принадлежащи на програмата и дефинирани преди самата функция.
Функцията от горния пример може да се извика по следния начин за изчисляване на разстояние между две точки в равнината:
z[k]=dist(x[i],y[i],0,x[j],y[j],0);
Към функцията се предават фактически стойности на константи, реални променливи или на елементи от реален масив. Изчисленият от функцията резултат се присвоява на реална променлива или на елемент от масив, както е в конкретния случай.
Възможно е функцията да има параметри от различен тип, а също и да не връща резултат, а само да изпълнява определена последователност от действия. В такъв случай функцията е от тип void:
void write_element(char Name, int i, float x) {

cout <

}
Извикването на тази функция става с:
write_element('A',i,A[i]);
В този случай трябва да се внимава броят и типът на данните в извикващата част да съответства на броя и типа на параметрите, описани в самата функция. Механизмът на работа на функцията е такъв, че нормално към функцията се предават копия на стойностите на параметрите. По тази причина промяната на стойностите на параметрите вътре в самата функция не се отразява на стойностите на съответните данни в извикващата част.
Най-често извикващата част предава данни на функцията, а функцията може да върне само една стойност чрез return. В някои случаи може да се наложи функцията да върне повече от една стойности или да промени стойностите на параметрите. Това може да стане чрез използването на указатели.
Типичен пример е функция, която трябва да размени стойностите на две променливи от еднакъв тип, например реални:
void swap_float(float *pa, float *pb){ //pa и pb са имена на указатели към две реални променливи

float c;

c=*pa; *pa=*pb; *pb=c;

}
Тази функция трябва да бъде извикана по следния начин:

swap_float(&a, &b);
По този начин към функцията се предават адресите на променливите a и b, които представляват стойности на указателите pa и pb. Размяната на стойностите на адресите, към които сочат указателите представлява размяна на самите стойности на променливите a и b.
Полезни функции:
1. Функция, която въвежда цяла променлива в определен диапазон:
int Input_N(char Prompt[40], int Nmin, int Nmax){ //Prompt е подсказващ текст при въвеждането

int N;

do {

cout <
>N;


}

while ((NNmax));

return N;

}
Функцията може да се извика по следния начин:

М=Input_N("Въведете брой редове М=", 1, 10);

N=Input_N("Въведете брой стълбове N=", 1, 10);

или


N=Input_N("Въведете брой точки N=", 2, 100);
2. Функция, която въвежда реален едномерен масив от клавиатурата:
const int Nmax=50;

void Input_Arr(char Name[10], int N, float X[Nmax]){

int i;

for (i=0; i<=N-1; i++) {

cout <

cin >>X[i];

}

}
Когато на функцията се предава масив, чиито стойности после искаме да бъдат върнати в извикващата част от програмата, както е в посочения пример, не е необходимо масивът да се предава с указател, защото това се реализира вътрешно от езика. В този случай стойностите, които са въвеждат в масива по време на изпълнение на функцията, на практика се записват по адресите на първоначалния масив, който се предава към функцията. Счита се, че името на масива е развнозначно на указателя към масива.
Функцията може да се извика по следния начин:

Input_Arr("X", N, X);

или


Input_Arr("Y", M, Y);
3. Функция, която извежда на екрана реален едномерен масив:
const int Nmax=50;

void Write_Arr(char Name[10], int N, float X[Nmax]){

int i;

for (i=0; i<=N-1; i++)

cout <

}
Функцията може да се извика по следния начин:

Write_Arr("X", N, X);

или


Write_Arr("Y", M, Y);

4. Функция, която въвежда реален двумерен масив от клавиатурата:
const int Nmax=50;

void Input_Matrix(char Name[10], int M, int N, float X[Nmax][Nmax]){

int i, j;

for (i=0; i<=M-1; i++)

for (j=0; j<=N-1; j++){

cout <

cin >>X[i][j];

}

}
Функцията може да се извика по следния начин:

Input_Matrix("A", M, N, A);

или


Input_Matrix("B", N, N, B);
5. Функция, която извежда на екрана реален двумерен масив:
const int Nmax=50;

void Write_Matrix(char Name[10], int M, int N, float X[Nmax][Nmax]){

int i, j;

for (i=0; i<=M-1; i++)

for (j=0; j<=N-1; j++)

cout <

}
Функцията може да се извика по следния начин:

Write_Matrix("A", M, N, A);

или


Write_Matrix("B", N, N, B);
6. Функция, която сортира във възходящ ред реален едномерен масив:
const int Nmax=50;

void Sort_Arr(int N, float X[Nmax]){

int i, j;

for (i=1; i<=N-1; i++)

for (j=0; j<=N-i-1; j++)

if (X[j] > X[j+1]) swap_float(&X[j], &X[j+1]);

}
Интересното в този случай е, че тази функция използва друга функция, описана по-горе, за размяна на две реални променливи.

Функцията може да се извика по следния начин:



Sort_Arr(N, Z);

Резултатът от извикването на тази функция е подреждането във възходящ ред на масива Z, който се предава от извикващата част на програмата към функцията и който се подрежда по време на изпълнение на тази функция.


7. Функция, която търси максимум на реален едномерен масив:
const int Nmax=50;

float Max_Arr(int N, float X[Nmax]){

int i;

float Max;

Max=X[0];

for (i=1; i<=N-1; i++)

if (Max

return Max;

}
Аналогично може да се създаде функция, която да търси минимум на масив.

Функцията може да се извика по следния начин:



MaxX=Max_Arr(N, X);
8. Функция, която изчислява сумата на елементите на реален едномерен масив:
const int Nmax=50;

float Sum_Arr(int N, float X[Nmax]){

int i;

float Sum=0;

for (i=0; i<=N-1; i++) Sum += X[i];

return Sum;

}
Функцията може да се извика по следния начин:

SumX=Sum_Arr(N, X);
Каталог: filebank -> acadstaff -> userfiles
userfiles -> Формати и стандарти
userfiles -> Комасация на земеделските земи. За понятието „комасация”
userfiles -> Конспект за изпита по история на архитектурата за специалност урбанизъм архитектурата на древен Египет
userfiles -> Годишник на университета по архитектура, строителство и геодезия – софия 2002-2003 annuaire de l’universite d’architecture, de genie civil et de geodesie – sofia
userfiles -> Изчисляване на конструкции на сеизмични въздействия
userfiles -> Examination topic list river morphology and river training works
userfiles -> Годишник на университета по архитектура, строителство и геодезия – софия 2002-2003 annuaire de l’universite d’architecture, de genie civil et de geodesie – sofia
userfiles -> Конспект въведение в управлението на проекти определение за проект. Видове проекти. Характеристика на проекта
userfiles -> Съвременни архитектурни явления лектори Вихрен Бакърджиев и Милена Металкова-Маркова теми


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница