У цьому розділі ми розглянемо функції, які мають декілька вхідних параметрів і декілька значеннь, що повертаються.
Існує багато способів повернути з функції декілька значень. Розглянемо два з них:
Написати функцію Swap, яка міняє місцями значення двох цілих змінних.
Не виводить на екран значення змінних в іншому порядку, а саме змінює значення змінних.
Напишемо цю функцію двома способами.
Функція отримує як параметри дві змінні цілого типу А і В, а повертає структуру, у якої значення першого поля дорівнює В, а значення другого поля А.
Результат роботи програми

Код програми з структурою
#include <iostream>
using namespace std;
struct TwoIntNums
{
int n1;
int n2;
};
TwoIntNums Swap(int, int);
int main()
{
int a,b;
cin>>a>>b;
//Присвоює результат функції структурі
TwoIntNums t=Swap(a,b);
//Виводить поля структури
cout<<t.n1<<" "<<t.n2;
}
TwoIntNums Swap(int x, int y)
{
TwoIntNums p;
p.n1=y; p.n2=x;
//Повертає структуру
return p;
}
Функція отримує як параметри посилання на дві змінні цілого типу. Результат роботи функції буде теж в цих змінних. Тобто, це параметри і вхідні, і вихідні одночасно. Не завжди це так.
Посилання — це ще одне ім'я одного місця в оперативній пам'яті.
У цьому прикладі змінна X це ще одне ім'я змінної A, а змінна Y ще одне ім'я змінної B. Тому, змінюючи місцями значення X і Y всередині функції, ми змінюємо місцями значення змінних A і B в main.
Код програми з посиланнями
#include <iostream>
using namespace std;
//Параметри функції вказані як посилання
void Swap(int&, int&);
int main()
{
int a,b;
cin >> a >> b;
Swap(a,b);
cout << a << " " << b;
}
void Swap(int &x, int &y)
{
//Меняємо значення x і y
int t;
t=x; x=y; y=t;
}
Якщо параметри передаються за посиланням і є і вхідними, і вихідними одночасно, важливо пам'ятати, що повертаються в main вже змінені функцією значення.
Написати функцію ArithAndGeoMean, яка знаходить середнє арифметичне та середнє геометричне двох чисел А та В. Напишемо цю функцію теж двома способами.
Середнє арифметичне двох чисел a і b визначається як їх сума поділена на 2.
Середнє геометричне двох чисел a і b визначається як квадратний корінь з їхнього добутку.
Функція отримує як параметри дві змінні цілого типу А і В, а повертає структуру, у якої значення першого поля є середнє арифметичне, а значення другого поля середнє геометричне.
Результат роботи програми

Код програми з структурою
#include <iostream>
using namespace std;
#include <cmath>
//Структура TwoRealNums
struct TwoRealNums
{
double n1;
double n2;
};
TwoRealNums ArthAndGeoMean(int, int);
int main()
{
int a,b;
cin >> a >> b;
//Присвоює результат структурі
TwoRealNums t=ArthAndGeoMean(a,b);
//Виводить результат із заданою точністю
cout << fixed << setprecision(3);
cout << t.n1 << " " << t.n2;
}
TwoRealNums ArthAndGeoMean(int x, int y)
{
TwoRealNums p;
p.n1=(x+y)/2.0; p.n2=sqrt(x*y);
//Повертає структуру
return p;
}
У функції 4 параметри. Два параметра вхідні, вони передаються по значенню. Два параметри вихідні, вони передаються за посиланням.
У цьому прикладі змінна n1 це ще одне ім'я змінної X, а змінна n2 ще одне ім'я змінної Y. Тому, змінюючи значення n1 і n2 всередині функції, ми змінюємо значення змінних X і Y в main.
Код програми з посиланнями
#include <iostream>
using namespace std;
#include <cmath>
void ArthAndGeoMean(int, int, double&, double&);
int main()
{
int a,b;
double x,y;
cin >> a >> b;
//4 параметра
ArthAndGeoMean(a,b,x,y);
cout << fixed; cout << setprecision(3);
cout << x << " " << y;
}
void ArthAndGeoMean(int x, int y, double &n1, double &n2)
{
//2 входних параметра, передаються по значенню
//2 вихідних параметра, передаються по ссилке
n1=(x+y)/2.0; n2=sqrt(x*y);
}
Кожен із варіантів для цього завдання має свої переваги та недоліки. У другого варіанта код коротший, ніж у першого. Але у першого варіанта кількість параметрів функції менше, ніж у другого.
Написати функцію ReduceFraction, яка скорочує простий дріб. Для цього будемо використовувати вже написану функцію GcdOfAB, яка знаходить найбльший спільний дільник за алгоритмом Евкліда. Напишемо цю функцію теж двома способами.
Функція отримує як параметр структуру, яка описує простий дріб, а повертає структуру, яка містить дріб після скорочення.
Результат роботи програми

Код програми з структурою
#include <iostream>
using namespace std;
struct ComFraction { // структура проста дріб
int numerator; // чисельник
int denominator; // знаменник
};
int GcdOfAB(int, int); // знаходження НСД
// скорочуємо дріб
ComFraction ReduceFraction (ComFraction);
int main()
{
ComFraction d1, d2;
cin >> d1.numerator >> d1.denominator;
d2=ReduceFraction (d1);
cout << d2.numerator << "/" << d2.denominator;
}
int GcdOfAB(int a, int b)
{
while (a!=b)
{
if (a>b) {a=a-b;}
else {b=b-a;}
}
return a;
}
ComFraction ReduceFraction (ComFraction f1)
{
ComFraction f2;
// Для вхідної дробі
// знаходимо НСД чисельника і знаменника
int nod=GcdOfAB (f1.numerator, f1.denominator);
// скорочуємо дріб
f2.numerator=f1.numerator/nod;
f2.denominator=f1.denominator/nod;
// Повертаємо скорочену дріб
return f2;
}
Код програми з посиланнями
#include <iostream>
using namespace std;
struct ComFraction { // структура проста дріб
int numerator; // чисельник
int denominator; // знаменник
};
int GcdOfAB(int, int);
void ReduceFraction (ComFraction &);
int main()
{
ComFraction d;
cin >> d.numerator >> d.denominator;
ReduceFraction (d);
cout << d.numerator << "/" << d.denominator;
}
int GcdOfAB(int a, int b)
{
while (a != b)
{
if (a > b) {a = a - b;}
else {b = b - a;}
}
return a;
}
void ReduceFraction (ComFraction &f)
{
// Знаходимо НСД чисельника і знаменника
int nod = GcdOfAB (f.numerator, f.denominator);
// скорочуємо дріб
f.numerator = f.numerator / nod;
f.denominator = f.denominator / nod;
}
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури ціле число a - сторону квадрата. Знайдіть площу та периметр цього квадрата. | SquarePerimArea |
| 2 | Ввести з клавіатури три цілих числа. Вивести ці числа за зростанням. | Incr |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури два цілих числа - сторони прямокутника. Знайдіть площу та периметр цього прямокутника. | RectanglePerimArea |
| 2 | Ввести з клавіатури три цілих числа. Вивести ці числа за спаданням. | Decr |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури ціле число - ребро куба. Знайдіть площу поверхні та об’єм цього куба. | CubeSurfaceAreaVol |
| 2 | Ввести з клавіатури три цілих числа А, В та С. Для цих чисел виконати праве циклічне зміщення: значення А переходить у В, значення В - в С, значення С - в А. Було 3 4 5, стало 5 3 4. | CycleRight |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури три цілих числа - ребра паралелепіпеда. Знайдіть площу поверхні та об’єм цього паралелепіпеда. | ParSurfaceAreaVol |
| 2 | Ввести з клавіатури три цілих числа А, В та С. Для цих чисел виконати ліве циклічне зміщення: значення В переходить у А, значення С - в В, значення А - в С. Було 3 4 5, стало 4 5 3. | CycleLeft |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури 4 цілих числа, що є чисельниками та знаменниками двох простих дробів. Знайдіть суму цих дробів та скоротить результат. | SumFraction |
| 2 | Ввести з клавіатури ціле число r - радіус кола. Знайдіть площу та довжину кола з таким радіусом. | CircLengthArea |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури 4 цілих числа, що є чисельниками та знаменниками двох простих дробів. Знайдіть різницю цих дробів та скоротить результат. | SubtrFraction |
| 2 | Ввести з клавіатури ціле число r - радіус кола. Знайдіть довжину кола, площу кола та об'єм кулі з таким радіусом | CircLengthAreaVol |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури 4 цілих числа, що є чисельниками та знаменниками двох простих дробів. Знайдіть добуток цих дробів та скоротить результат. | MulFraction |
| 2 | Ввести з клавіатури два цілих числа – радіус основи та висоту циліндра. Знайти площу його поверхні та об’єм. | CylSurfaceAreaVol |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури 4 цілих числа, що є чисельниками та знаменниками двох простих дробів. Знайдіть частку цих дробів та скоротить результат. | DivFraction |
| 2 | Ввести з клавіатури два цілих числа – радіус основи та висоту конуса. Знайти площу його поверхні та об’єм. | ConeSurfaceAreaVol |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури три натуральних числа. Якщо вони можуть бути сторонами трикутника, то знайти його периметр та площу. Якщо ні, то вивести повідомлення. | TrianglePerimArea, IsSide |
| 2 | Дано n натуральних чисел T1, T2 , … Tn, кожне з яких є часом в секундах. Для кожного з цих чисел визначити: скільки у ньому міститься цілих годин, хвилин і секунд. Наприклад, 7503 сек = 2ч 5 мін 3 сек. | GetHourMinSec |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури два цілих числа - радіус основи та висоту циліндра. Знайдіть площу поверхні та об’єм цього циліндра. | CylSurfaceAreaVol |
| 2 | Ввести з клавіатури 2 цілих числа, що є чисельником та знаменником простого дробу. Якщо дріб неправильний, то виділить цілу частину та скоротить результат. Наприклад, 10/4=2 і 1/2. | GetIntFraction |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури координати трьох точок на площині. Якщо вони можуть бути координатами вершин трикутника, то знайти його периметр та площу. Якщо ні, то вивести повідомлення. | TrianglePerimArea, IsCoord |
| 2 | Ввести з клавіатури 4 цілих числа, що є чисельниками та знаменниками двох простих дробів. Знайти найбільший дріб. | MaxFraction |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури координати трьох точок на площині. Якщо вони можуть бути координатами вершин трикутника, то знайти радіус і площу кола вписаного у трикутник. Якщо ні, то вивести повідомлення. | InCircRadArea, IsCoord, LengthByCoords |
| 2 | Ввести з клавіатури 4 цілих числа, що є чисельниками та знаменниками двох простих дробів. Знайти найменший дріб. | MinFraction |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури координати трьох точок на площині. Якщо вони можуть бути координатами вершин трикутника, то знайти радіус і площу кола описаного навколо трикутника. Якщо ні, то вивести повідомлення. | ExCircRadArea, IsCoord, LengthByCoords |
| 2 | Ввести з клавіатури два натуральних числа. Знайти їх найбільший спільний дільник та найменше спільне кратне | MaxDivMinMult |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури два цілих числа - координати точки на плоскості. Знайдіть відстань від цієї точки до початку координат та номер чверті, в якій знаходиться точка. | PointDistQuart |
| 2 | Ввести з клавіатури три цілих числа та число T . Якщо ці числа можуть бути часом (години, хвилини, секунди), то збільшить цей час на T секунд. Якщо ні, то вивести повідомлення. | TimePlusOneSec, IsTime |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури три цілих числа. Якщо ці числа можуть бути сторонами трикутника, то знайти 3 його бісектриси. Якщо ні, то вивести повідомлення. | TriangleBisector, IsSide |
| 2 | Ввести з клавіатури три цілих числа. Якщо ці числа можуть бути датою , то знайдіть дату завтрашнього дня. Якщо ні, то вивести повідомлення. | Tomorrow, IsDate |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури три цілих числа. Якщо ці числа можуть бути сторонами трикутника, то знайти 3 його висоти. Якщо ні, то вивести повідомлення. | TriangleAltitude, IsSide |
| 2 | Ввести з клавіатури три цілих числа. Якщо ці числа можуть бути датою, то знайдіть дату вчорашнього дня. Якщо ні, то вивести повідомлення. | Yesterday, IsDate |
Кожну програму написати двома способами:
Функції потрібно писати відповідно до вказаних прототипів. Прототипи функцій, а також необхідні структури, дивитись у розділі «Довідник власних функцій». Вони згруповані за змістом та відсортовані за їх іменами.
| № задачі | Умова задачі | Які функції потрібні |
|---|---|---|
| 1 | Ввести з клавіатури три цілих числа. Якщо ці числа можуть бути сторонами трикутника, то знайти 3 його медіани. Якщо ні, то вивести повідомлення. | TriangleMedian, IsSide |
| 2 | Дано n натуральних парних чисел. Кожне з них більше двох. Для кожного з чисел перевірити гіпотезу Гольдбаха: кожне парне число представляється у вигляді суми двох простих чисел. Вивести ці два простих числа, для кожного з введених парних чисел. | CalcTwoPrimes |