1

Тема: Перевантаження функцій

Добрий день всім!!!Почали вивчати с++!!!А почали з того що в с++ можна оголошувати дві функції з однаковим іменем головне щоб параметри були різні!!це я зрозумів!!!щодо завдання
Написати реалізацію перевантажених функцій :
double func(int* arr, int length);
double func(double * arr, int length);
Функція func повертає середнє арифметичне елементів послідовності.
ось мої так би мовити напрацювання

#include <iostream>
using namespace std;
double func(int* arr, int length);
double func(double * arr, int length);

int main(void)
{
int arr1[size] = { 12, 45, 6, 7, 11, 56, 90, 45, 23, 6 }; 
int arr2[size] = {12.5,2.7,78.5,1.2,1.3,1.6,1.8,7.8,3.9,2.9 };
}
{
double func(int* arr1, int size);
int size = 10;
int i; 
int summa = 0; 
 
for ( i = 0; i < 10; i++) 
summa += arr1[i]; 
std::cout << "Середнє арифметичне" << summa / 10 << std::endl;
}
double func(double * arr2, int size);
int size = 10;
int i; 
int summa = 0; 
 
for ( i = 0; i < 10; i++) 
summa += arr2[i]; 
std::cout << "Середнє арифметичне" << summa / 10 << std::endl;

Допоможіть хто знає як!!!Суть в тому що в програмі повинно бути дві функції з однаковими іменами(але різними параметрами), і коли мені наприклад треба обчислити СА(середнє арифметичне) цілих чисел то вибирається та функція яка має відповідні параметри (тобто int) так само і для дробових!!!Всім дякую!!!

2

Re: Перевантаження функцій

Ви з Kato з одного бурситету? :)

3

Re: Перевантаження функцій

ну так якщо завдання ідентичні!!!!але в тій темі нічого нормального сказано не було і програма в нього на с а мені бажано на с++

4

Re: Перевантаження функцій

Залежно від того, який масив ви передасте до func() у якості параметра, вибереться одна з двох функцій.

Ваш код, видання друге, перероблене та доповнене
#include <iostream>
using namespace std; /* Після цього вам не треба всюди тикати префікс std:: */

double func(int *arr, int length);
double func(double *arr, int length);
 
int main(void)
{
    const int size = 10;
    int arr1[size] = { 12, 45, 6, 7, 11, 56, 90, 45, 23, 6 }; 
    double arr2[size] = {12.5,2.7,78.5,1.2,1.3,1.6,1.8,7.8,3.9,2.9 };

    cout << "Середнє арифметичне int: " << func(arr1, size) << endl;
    cout << "Середнє арифметичне double: " << func(arr2, size) << endl;
}
{
double func(int *arr1, int size)
{
//int size = 10;
//int i; 
int summa = 0; 
 
for (int i = 0; i < size; i++) 
    summa += arr1[i]; 

return (double)summa/size; /* Без зведення до double втратиться дробова частина*/
}

double func(double *arr2, int size)
{
//int size = 10;
//int i; 
/*int*/ double summa = 0; 
 
for (int i = 0; i < size; i++) 
    summa += arr2[i]; 

return summa;
}

Раджу розібратися з кодом детально.

З.І: враховуючи, що я тут переніс оголошення змінної і безпосередньо до заголовку циклів - програма тепер точно на С++: С89 так не дозволяв. :)

5

Re: Перевантаження функцій

А на майбутнє: все-таки користуйтеся пошуком перед тим, як створити тему, бо Kato підняв цю проблему всього кілька днів тому. Було би логічніше, якби одна й та сама проблема вирішувалася в одному місці.

6

Re: Перевантаження функцій

Можна ще будь ламка на С якщо не важко звичайно

7

Re: Перевантаження функцій

sardar2222 написав:

Можна ще будь ламка на С якщо не важко звичайно

Самостійно. :)
Інакше ніколи не зможете написати бодай рядка власноруч.

8

Re: Перевантаження функцій

Ця програма на С не буде працювати, тому що тут повинна виконуватися умова перевантажених функцій. Тому ця програма працюватиме тільки на С++.

9

Re: Перевантаження функцій

Kato написав:

Ця програма на С не буде працювати, тому що тут повинна виконуватися умова перевантажених функцій. Тому ця програма працюватиме тільки на С++.

Однак частково викрутитися можна:


#define cbrt(X) _Generic((X), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(X)

Джерело: зміни стандарту С11.

10

Re: Перевантаження функцій

в мене питання!!програма мені видає що середнє арифметичне int = 30.1 а double= 114.2. Як взагалі таке можливо?
return (double)summa/size; /* Без зведення до double втратиться дробова частина*/
}*для чого це зведення до double якщо числа в нас цілі int звідки там візьметься дробова частина?

11

Re: Перевантаження функцій

вже побачив помилку ви забули дописати в кінці має бути не return summa;
} а return summa/size;
}

12

Re: Перевантаження функцій

sardar2222 написав:

в мене питання!!програма мені видає що середнє арифметичне int = 30.1 а double= 114.2. Як взагалі таке можливо?
return (double)summa/size; /* Без зведення до double втратиться дробова частина*/
}*для чого це зведення до double якщо числа в нас цілі int звідки там візьметься дробова частина?

Якщо ви поділите ціле число на ціле у С - результат теж буде цілим. Себто

2/3 == 0

а не 0,6667.

Щоб цього не допустити, ділене явно зведене до double, що дає

2,0/3 != 0

Наголос на тому, що ви обчислюєте середнє арифметичне.