Писане на функции
Да пресметнем стойността на влог с начална сума 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 |