1. Функции
Използване на функции
   cout << sqrt(x);
* Входна стойност или стойност на параметъра: променлива, израз, константа
- различен брой на параметрите:
 main(), sqrt(x), pow(x,y)
- неявни параметри - за член-функции:
 harry.get_salary(), t.add_seconds(10)
- всеки параметър е от определен тип:
 fabs(x), getline(cin,s), 
* Изходна стойност или стойност на функцията
- стойността има определен тип:
 sqrt(x), main(), c.get_center(), m.get_text(), getline(cin,s)

Писане на функции
Да пресметнем стойността на влог с начална сума 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
#include <iostream>
using namespace std;
long factorial(int n)
{  if (n == 0) return 1;
   else
   {  long result = n * factorial(n - 1);
      return result;   }
}
int main()
{  cout << "Please enter a number: ";
   int n;
   cin >> n;
   cout << n << "! = " << factorial(n) << "\n";
   return 0;
}