 Използване на функции
 Използване на функции
 Писане на функции
 Писане на функции
Да пресметнем стойността на влог с начална сума 10000 лв. след 10 години
при месечно начисляване на лихвата. Нека годишната лихва да е p%.
double future_value(double p)
{
 double b = 1000*pow(1 + p/(12*100),
12*10);
 return b;
}
Тип на резултата, име на функцията, тип на параметъра, име на парамeтъра.
#include <iostream>
#include <cmath>
using namespace std;
double future_value(double p)
{
 double b = 1000*pow(1 + p/(12*100),
12*10);
 return b;
}
int main()
{
 cout << "Please enter the
interest rate in percent: ";
 double rate;
 cin >> rate;
 double balance = future_value(rate);
 cout << "After 10 years, the
balance is " << balance << "\n";
 return 0;
}
 Документиране
на функции
 Документиране
на функции
 Връщане на
стойност
 Връщане на
стойност
* Оператор return
#include <iostream>
#include <cmath>
using namespace std;
double future_value(double initial_balance,
double p, int nyear)
{ if (nyear < 0) return 0;
  if (p < 0) returen 0;
   double b = 1000*pow(1 + p/(12*100),
12*10);
  return b;
}
int main()
{
 cout << "Interest rate in
percent: ";
 double rate;
 cin >> rate;
 double bal = future_value(10000,
rate, 10);
 cout << "After 10 years, the
balance is " << bal << "\n";
 return 0;
}
* Предикат - проверка дали точка лежи в кръг.
#include "ccc_win.cpp"
bool is_inside(Point p, Circle c)
/* PURPOSE: 
tests whether a point lies inside a circle
  RECEIVES: p - a point, c - a circle
  RETURNS:  true if p lies inside
c
*/
{  double dx = p.get_x() - c.get_center().get_x();
   double dy = p.get_y() - c.get_center().get_y();
   double r = c.get_radius();
   return dx * dx + dy * dy <=
r * r;
}
int main()
{  Circle c(Point(1, 1), 2);
   cwin << c;
   Point m = cwin.get_mouse("Please
click inside the circle.");
   if (is_inside(m, c))
      cwin <<
Message(Point(3, 3), "Congratulations!");
   else
      cwin <<
Message(Point(3, 3), "You missed!");
   return 0;
}
 Параметри
на функции
 Параметри
на функции
* Формални параметри  - параметри-променливи, декларират се при
дефиницията на функцията
* Фактически параметри - изрази за инициализация на параметрите-променливи,
задават се при извикване на функцията
 Процедури
 Процедури
* Функция, която не връща стойност се нарича процедура.
* Процедура за отпечатване на обект от тип Time
#include <iostream>
#include <iomanip>
using namespace std;
#include "ccc_time.cpp"
void print_time(Time t)
/* PURPOSE: 
Print a time in the format h:mm:ss
   RECEIVES: t - the time to
print
*/
{  cout << t.get_hours() <<
":";
   if (t.get_minutes() <
10) cout << "0";
   cout << t.get_minutes()
<< ":";
   if (t.get_seconds() <
10) cout << "0";
   cout << t.get_seconds();
}
int main()
{  Time liftoff(7, 0, 15);
   Time now;
   cout << "Liftoff: ";
   print_time(liftoff);
   cout << "\n";
   cout << "Now: ";
   print_time(now);
   cout << "\n";
   return 0;
}
 Параметри-псевдоними
 Параметри-псевдоними
* Параметър-псевдоним не е нова променлива, а псевдоним на съществуваща
променлива в извикващата функция.
#include <iostream>
using namespace std;
#include "ccc_empl.cpp"
void raise_salary(Employee& e, double
by)
/* PURPOSE: 
Raise an employee salary
   RECEIVES: e - employee receiving
raise
            
by - the percentage of the raise
*/
{  double new_salary = e.get_salary()
* (1 + by / 100);
   e.set_salary(new_salary);
}
int main()
{  Employee harry("Hacker, Harry",
45000.00);
   raise_salary(harry, 5);
   cout << "New salary:
" << harry.get_salary() << "\n";
   return 0;
}
 Постъпково
прецизиране, създаване на кода, проиграване
 Постъпково
прецизиране, създаване на кода, проиграване
 Рекурсия
 Рекурсия
* Функцията  n!  (n факториел),  n! = 1.2.3.4...n
 
| n | n! | 
| 0 | 1 | 
| 1 | 1 | 
| 2 | 2 | 
| 3 | 6 | 
| 4 | 24 | 
| 5 | 120 | 
| 6 | 720 | 
| 7 | 5040 |