12. Подпрограми в С++

12.1. Подпрограми функции
• Дефиниране на функция
• Извикване на функция за изпълнение. Примери и задачи с функции

12.2. Подпрограми процедури
• Дефиниране на процедура
• Извикване на процедурата за изпълнение. Пример

12.3. Предаване на параметри между подпрограмите
• Предаване на параметри по стойност. Пример
• Предаване на параметри чрез адрес. Примери
• Едномерните масиви като формални параметри на подпрограмите. Пример
• Многомерните масиви като формални параметри на подпрограми. Пример

12.4. Понятие за прототип / декларация на подпрограма/. Пример

преди план следва
 
 

12.3. Предаване на параметри между подпрограмите


При подпрограмите могат да се различат три вида формални параметри:
- параметри – входни данни, необходими за извършване на изчисленията;
- параметри – резултати от изпълнението;
- смесени параметри - в началото те съдържат входните данни, а след изпълнението в тях се записват резултатите.

В езика С/С++ предаването на параметри между подпрограмата и главната програма може да се извърши по стойност и чрез адрес.

• Предаване на параметри по стойност. Пример

В този случай промяната на формалния параметър в подпрограмата не се отразява на съответния му фактически параметър. Така на подпрограмата /процедура или функция / се предават входните данни.

Пример. Функцията funA изчислява произведението на две цели числа. Формалният параметър х, получил стойност от фактическия параметър a =5, претърпява промяна в блока на функцията : x=x+y; Това обаче не се отразява на стойността на a в главната програма:
#include < iostream.h >
int  funA(int x, int y)
{
   x=x+y;
   return x*y;
}
int main(){
   int a=5,  b=10;
   cout<< a<<"*"<< b<<"="<< funA(a,b)<< endl;
   cout<<"a ="<< a<<" b = "<< b;                           // извежда:  a = 5 b = 10
   return 0;
}
• Предаване на параметри чрез адрес. Примери

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

За да се предадат параметрите чрез адрес е необходимо формалният параметър да бъде указател. В този случай съответният му фактически параметър трябва да бъде адрес на променлива.

Пример: Процедурата swap разменя стойностите на две въведени цели числа. Проследете изпълнението чрез аплета:




Фактическият параметър - адресът на a / & a/ се предава на формалния параметър - указателя х. Указателят y получава като стойност адреса на b. Помощната променлива pom взема стойността, сочена от указателя х, т.е. на а, променливата а взема стойността на b, променливата b взема стойността на pom.

Параметрите могат да се предадат чрез адрес и когато формалният параметър се предшества от знака &. В този случай съответният му фактическият параметър трябва да бъде променлива:

Пример:
void Incr(int &A)
{
  A=A+1;
}
int main()
{
  int B=6;
  Incr(B);
  cout<<"B = "<< B;         // извежда 7
  return 0;
}
В този пример, фактическият параметър B предава своята начална стойност 6 на формалния параметър А. Последният нараства с единица в процедурата, което се отразява на фактическия параметър B във функцията main.
 
 
 
 
преди план следва