Назад Зміст Вперед

Функції з декількома цілими параметрами та одним значенням, що повертається

У цьому розділі ми розглянемо функції, які мають декілька вхідних параметрів і одне значення, що повертається.

Вхідні параметри мають цілий тип, а значення, що повертається цілого або дійсного типу, якщо функція щось обчислює, або логічного типу, якщо функція повинна відповісти на запитання: вірно чи не вірно.

Приклад 1

Написати функції:

  1. int PosFirstMinDig(int), яка знаходить порядковий номер першої мінімальної цифри. Цифри нумеруються зліва направо.
  2. int NumDig(int), яка знаходить кількість цифр натурального числа
  3. int DelDigCfromA(int A,int N), яка видаляє з числа А цифру за її номером N(повертає нове число). Цифри нумеруються зліва направо. Якщо число однозначне, повертається 0.

Особливість цих функцій у тому, що в параметрі вказується порядковий номер цифри, а цифри перебираються в числі починаючи з останньої. Тобто номер цифри залежатиме від того, з якого боку початок нумерації. Для перерахунку номера цифри потрібно знати кількість цифр числа. Тому тут потрібна функція NumDig.

Використовуючи ці функції написати таку програму: ввести з клавіатури N натуральних чисел. В кожному числі видалити першу мінімальну цифру.

Результат роботи програми

Код програми з функціями


#include <iostream>
#include <cmath>

using namespace std;

// Прототипи функцій
int PosFirstMinDig(int);
int NumDig(int);
int DelDigCfromA(int, int);

// Функція для знаходження позиції першої мінімальної цифри
int PosFirstMinDig(int num) {
    if (num <= 0) return -1;
    
    int minDig = 9, pos = 0, count = 0;
    int temp = num;
    
    // Знаходимо мінімальну цифру та її позицію справа
    while (temp > 0) {
        count++;
        int digit = temp % 10;
        if (digit <= minDig) {
            minDig = digit;
            pos = count;
        }
        temp /= 10;
    }
    
    // Переводимо позицію для відліку зліва
    return NumDig(num) - pos + 1;
}

// Функція для підрахунку кількості цифр у числі
int NumDig(int num) {
    if (num <= 0) return 0;
    return (int)log10(num) + 1;
}

// Функція для видалення цифри за номером N з числа A
int DelDigCfromA(int A, int N) {
    if (NumDig(A) == 1) return 0;
    
    int digits = NumDig(A);
    if (N < 1 || N > digits) return A;
    
    // Переводимо позицію зліва направо
    int posFromRight = digits - N + 1;
    
    int result = 0, power = 0;
    int temp = A;
    int count = 0;
    
    while (temp > 0) {
        count++;
        int digit = temp % 10;
        if (count != posFromRight) {
            result += digit * pow(10, power);
            power++;
        }
        temp /= 10;
    }
    
    return result;
}

int main() {
    int N;
    cout << "Введіть кількість чисел (N): ";
    cin >> N;
    
    for (int i = 0; i < N; i++) {
        int num;
        cout <<"Введіть число " << i + 1 << ": ";
        cin >> num;
        
        if (num <= 0) {
            cout << "Неправильне введення: число має бути додатним" << endl;
            continue;
        }
        
        int pos = PosFirstMinDig(num);
        if (pos == -1) {
            cout << "Помилка обробки числа" << endl;
            continue;
        }
        
        int result<<Число після видалення першої мінімальної цифри: " << result << endl;
    }
    
    return 0;
}

Приклад 2

Написати функцію bool IsPow(int A,int B), яка визначає, чи є число А ступенем числа В. Використовуючи цю функцію написати таку програму: ввести з клавіатури натуральні числа N, A та B. Знайти N чисел більших А, які є ступенем числа В

Результат роботи програми

Код програми Приклад коду на C++

#include <iostream>
using namespace std;

// Перевірка, чи є a степенем b
bool IsPow(int, int);

int main()
{
    int n, a, b, k = 0;
    cin >> n >> a >> b;
    do
    {
        a++;
        if (IsPow(a, b))
        {
            cout << a << " ";
            k++;
        }
    } while (k < n);
    return 0;
}

// Функція для перевірки, чи є a степенем b
bool IsPow(int a, int b)
{
    if (a <= 0 || b <= 0) return false;
    while (a % b == 0)
    {
        a = a / b;
    }
    if (a == 1) return true;
    else return false;
}

Приклад 3

Написати функцію LengthByCoords, яка знаходить довжину відрізка за координатами його кінців. Використовуючи цю функцію написати таку програму: ввести з клавіатури натуральне число N, та цілі числа A та B. Отримати N пар випадкових чисел X і Y, з інтервалу [A,B], що є координатами кінців відрізка. Знайти відрізок максимальної довжини (вивести довжину відрізка та координати кінців).

Результат роботи програми

Код програми Приклад коду на C++

#include <iostream>
using namespace std;
#include <cmath>
#include <cstdlib>
#include <ctime>

float LengthByCoords(int, int, int, int);

int main()
{
    srand(time(0));
    int n, a, b;
    float dl, mxd1=0;
    int x1, y1, x2, y2, mx1, my1, mx2, my2;
    cin >> n >> a >> b;
    for (int i=1; i<=n; i++)
    {
        x1=a+rand() % (b-a+1);
        y1=a+rand() % (b-a+1);
        x2=a+rand() % (b-a+1);
        y2=a+rand() % (b-a+1);
        printf("%%3d%%3d%%3d%%3d\n", x1, y1, x2, y2);
        dl=LengthByCoords(x1, y1, x2, y2);
        if (dl>mxd1)
        {
            mxd1=dl;
            mx1=x1; my1=y1;
            mx2=x2; my2=y2;
        }
    }
    printf("max dl=%%.2f\n", mxd1);
    printf("%%3d%%3d%%3d%%3d\n", mx1, my1, mx2, my2);
    return 0;
}

float LengthByCoords(int x1, int y1, int x2, int y2)
{
    float z;
    z=sqrt(pow(y2-y1, 2)+pow(x2-x1, 2));
    return z;
}

Варіанти задач

Варіант 1

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури натуральні числа A та N. Знайти N чисел більших А, в яких остання цифра зустрічається більше 1 разу. NumDigCofA
2 Вводити з клавіатури натуральні числа поки не буде введено число 0. У кожного числа видалити всі цифри, що співпадають з першою цифрою DelDigCfromA, FirstDig
3 Ввести з клавіатури натуральне число N та отримати випадковим чином і вивести на екран N трійок натуральних чисел. Для кожної трійки з’ясувати: якщо ці числа можуть бути сторонами трикутника, то знайти його периметр та площу. У іншому випадку вивести повідомлення. IsSide, TrianglePerimeter, TriangleArea

Варіант 2

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури натуральні числа A, В та N. Знайти N чисел більших А, в яких перша цифра зустрічається більше В раз. NumDigCofA, FirstDig
2 Ввести з клавіатури N натуральних чисел. У кожного числа видалити всі цифри, що співпадають з останньою цифрою. DelDigCfromA
3 Ввести з клавіатури натуральне число N та отримати випадковим чином і вивести на екран N трійок натуральних чисел. Для кожної трійки з’ясувати: якщо ці числа можуть бути сторонами трикутника, то знайти радіус кола, вписаного в цей трикутник. У іншому випадку вивести повідомлення. IsSide, RadIncircle

Варіант 3

№
задачі
Умова задачіЯкі функції
потрібні
1 Вводити з клавіатури натуральні числа поки не буде введено число 0. Чи вірно, що серед цих чисел є число, в якому найменша цифра зустрічається більше одного разу? NumDigCofA, MinDig
2 Ввести з клавіатури N натуральних чисел. У кожного числа видалити всі цифри, що співпадають з максимальною цифрою цього числа. DelDigCfromA, MaxDig
3 Ввести з клавіатури натуральне число N та отримати випадковим чином і вивести на екран N трійок натуральних чисел. Для кожної трійки з’ясувати: якщо ці числа можуть бути сторонами трикутника, то знайти радіус кола, описаного навколо цього трикутника. У іншому випадку вивести повідомлення. IsSide, RadExcircle

Варіант 4

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури N натуральних чисел та число В. Чи вірно, що в кожному з цих чисел найбільша цифра зустрічається В раз? NumDigCofA, MaxDig
2 Вводити з клавіатури натуральні числа поки не буде введено число 0. У кожного числа видалити всі цифри, що співпадають з мінімальною цифрою цього числа. DelDigCfromA, MinDig
3 Отримати випадковим чином 6 цілих чисел. Якщо ці числа можуть бути координатами вершин трикутника, то знайти його периметр та площу. У іншому випадку вивести повідомлення. LengthByCoords, IsCoord, TrianglePerimeter, TriangleArea

Варіант 5

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури N натуральних чисел та цифру D. У кожного числа замінить на D всі цифри, що співпадають з останньою цифрою. ReplAllDigCofAwithB
2 Ввести з клавіатури натуральне число N та отримати та вивести на екран N випадкових чисел з інтервалу [1,99999]. У кожного отриманого числа видалити першу максимальну цифру. DelDigNfromA, PosFirstMaxDig
3 Ввести з клавіатури N натуральних чисел та числа В і С. З введених чисел вивести на екран тільки ті, що є членами арифметичної прогресії з першим членом B та різницею C. IsArProgr

Варіант 6

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури цифру D та вводити натуральні числа поки не буде введено число 0. У кожного числа замінить на D всі цифри, що співпадають з першою цифрою. ReplAllDigCofAwithB, FirstDig
2 Ввести з клавіатури N натуральних чисел. У кожного числа видалити першу мінімальну цифру. DelDigNfromA, PosFirstMinDig
3 Ввести з клавіатури N натуральних чисел та числа В та С. З введених чисел вивести на екран тільки ті, що є членами геометричної прогресії з першим членом B та знаменником C. IsGeomProgr

Варіант 7

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури цифру D, натуральне число N та отримати та вивести на екран N випадкових чисел з інтервалу [1,99999]. У кожного отриманого числа замінить на D всі цифри, що співпадають з мінімальною цифрою цього числа. ReplAllDigCofAwithB, MinDig
2 Вводити з клавіатури натуральні числа поки не буде введено число 0. У кожного числа видалити останню максимальну цифру. DelDigNfromA, PosLastMaxDig
3 Ввести з клавіатури цілі числа L, R, В та С. З діапазону [L, R] вивести на екран тільки ті числа, які є елементами арифметичної прогресії з першим членом B та різницею C. IsArProgr

Варіант 8

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури цифру D, натуральне число N та отримати та вивести на екран N випадкових чисел з інтервалу [1,999999]. У кожного отриманого числа замінить на D всі цифри, що співпадають з максимальною цифрою цього числа. ReplAllDigCofAwithB, MaxDig
2 Ввести з клавіатури N натуральних чисел. У кожного числа видалити останню мінімальну цифру. DelDigNfromA, PosLastMinDig
3 Ввести з клавіатури цілі числа L, R, В та С. З діапазону [L, R] вивести на екран тільки ті числа, які є елементами геометричної прогресії з першим членом B та знаменником C. IsGeomProgr

Варіант 9

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури натуральні числа A, B та С. В інтервалі [A;B] у кожного числа видалити всі цифри С. DelDigCfromA
2 Ввести з клавіатури N натуральних чисел та цифру D. У кожного введеного числа замінить на D, тільки першу мінімальну цифру. ReplDigNinAwithB, PosFirstMinDig
3 Ввести з клавіатури три натуральних числа А, В і N. Вивести на екран N чисел, більших А які взаємно прості з В. IsMutPrime

Варіант 10

№
задачі
Умова задачіЯкі функції
потрібні
1 Вводити з клавіатури натуральні числа поки не буде введено число 0. У кожного числа видалити всі цифри, що співпадають з останньою цифрою. DelDigCfromA
2 Ввести з клавіатури натуральні числа A, B, D та N. В інтервалі [A;B] у кожного числа замінить цифру з номером N на D ReplDigNinAwithB
3 Ввести з клавіатури N натуральних чисел та число С. Серед введених знайти кількість чисел, що взаємно прості з C. IsMutPrime

Варіант 11

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури натуральне число N та отримати та вивести на екран N випадкових чисел з інтервалу [1,99999]. У кожного числа видалити всі цифри, що співпадають з першою цифрою DelDigCfromA, FirstDig
2 Ввести з клавіатури цифру D та вводити натуральні числа поки не буде введено число 0. У кожного введеного числа замінить на D тільки першу максимальну цифру. ReplDigNinAwithB, PosFirstMaxDig
3 Ввести з клавіатури три натуральних числа А, В і С. Знайдіть в інтервалі [A, B] усі числа взаємно прості з C. IsMutPrime

Варіант 12

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури N натуральних чисел. У кожного отриманого числа видалити всі цифри, що співпадають з мінімальною цифрою цього числа. DelDigCfromA, MinDig
2 Ввести з клавіатури цифру D та вводити натуральні числа поки не буде введено число 0. У кожного введеного числа замінить на D тільки останню максимальну цифру. ReplDigNinAwithB, PosLastMaxDig
3 Ввести з клавіатури два натуральних числа А та В. Знайдіть усі пари взаємно простих чисел в інтервалі [A, B] IsMutPrime

Варіант 13

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури натуральне число N та отримати та вивести на екран N випадкових чисел з інтервалу [1,99999]. У кожного числа видалити всі цифри, що співпадають з максимальною цифрою цього числа DelDigCfromA, MaxDig
2 Ввести з клавіатури N натуральних чисел та цифра D. У кожного числа замінить на D тільки останню мінімальну цифру. ReplDigNinAwithB, PosLastMinDig
3 Ввести з клавіатури натуральне число В. Знайти всі правильні прості дроби, що не скорочуються, знаменники яких не більше В (дріб задається двома натуральними числами – чисельником та знаменником). Відповідь для В=5: 1/2 1/3 2/3 1/4 3/4 1/5 2/5 3/5 4/5 IsMutPrime

Варіант 14

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури N натуральних чисел та число D. Приписати це число у кінець кожного введеного числа, а потім від отриманого числа відняти 1. InsStartBtoA
2 Ввести з клавіатури цифру D, натуральне число N та отримати та вивести на екран N випадкових чисел з інтервалу [1,99999]. У кожного отриманого числа, у якого максимальна цифра зустрічається у числі більше одного разу, замінить на D тільки останню максимальну цифру. ReplDigNinAwithB, MaxDig, NumDigCofA, PosLastMaxDig
3 Ввести з клавіатури N натуральних чисел. Знайти їх найбільший спільний дільник. Пояснення: ввести два числа, знайти для них НСД, ввести третє число, знайти НСД для третього числа та знайденого НСД перших двох чисел, ввести четверте число і т.д. поки не будуть введені всі числа GcdOfAB

Варіант 15

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури число D та вводити натуральні числа поки не буде введено число 0. Приписати це число у початок кожного введеного числа, а потім до отриманого числа додати 1. InsStartBtoA
2 Ввести з клавіатури N натуральних чисел та цифру D. У кожного введеного числа, у якого максимальна цифра зустрічається у числі більше одного разу, замінить на D тільки першу максимальну цифру. ReplDigNinAwithB, MaxDig, NumDigCofA, PosFirstMaxDig
3 Отримати випадково 6 цілих чисел. Якщо ці числа можуть бути координатами вершин трикутника, то знайти радіус кола вписаного у цей трикутник LengthByCoords, IsCoord, RadIncircle

Варіант 16

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури N натуральних чисел та число D. Приписати це число у початок та кінець кожного введеного числа, а потім від отриманого числа відняти 100. InsStartBtoA
2 Ввести з клавіатури цифру D та вводити натуральні числа поки не буде введено число 0. У кожного введеного числа, у якого мінімальна цифра зустрічається у числі більше одного разу, замінить на D тільки першу мінімальну цифру. ReplDigNinAwithB, MinDig, NumDigCofA, PosFirstMinDig
3 Отримати випадково 6 цілих чисел. Якщо ці числа можуть бути координатами вершин трикутника, то знайти радіус кола описаного навколо цього трикутника LengthByCoords, IsCoord, RadExcircle

Варіант 17

№
задачі
Умова задачіЯкі функції
потрібні
1 Ввести з клавіатури числа А і В та вводити натуральні числа поки не буде введено число 0. Приписати число А у початок, а число В у кінець кожного введеного числа. Потім від отриманого числа відняти 50. InsStartBtoA
2 Ввести з клавіатури цифру D та вводити натуральні числа поки не буде введено число 0. У кожного введеного числа, у якого максимальна цифра зустрічається у числі більше одного разу, замінить на D тільки останню максимальну цифру. ReplDigNinAwithB, MaxDig, NumDigCofA, PosLastMaxDig
3 Ввести з клавіатури N натуральних чисел. Знайти їх найменше спільне кратне. GcdOfAB, LcmofAB

Назад Зміст Вперед