1

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

завдання:
Написати реалізацію перевантажених функцій:

int func(double* arr, int length);
int func(char* str);

Функція func переставляє всі елементи у зворотньому порядку.

так як тільки сьогодні почав працювати з перевантаженням ф-ції  виникли проблеми з програмою

мої напрацювання:

#include <stdio.h>
#include <string.h>
int func(char* str);
int func(double* arr, int length);


int main()
{
    int mass1[] = {1, 2, 3, 4, 5, 6};
    char mass2[] = "HELLO";
    func(mass1, 5);
    func(mass2);
    return 0;
}

void func(int* arr, int length)
{
    int i, k, tmp;
    for (i = 0; i < length; i++, k--)
    {
        tmp = arr[i];
        arr[i] = arr[k];
        arr[k] = tmp;
    }
    for (i = 0; i < length; i++)
    {
        printf("%d ", arr[i]);
    }
}
void func(char* str)
{
    int c, lenght;
    char tmp;
    int length = strlen(str);
    for (c = 0; c < length; c++) 
    {
        tmp = str[c];
        str[c] = str[length - c - 1];
        str[length - c - 1] = tmp;
    }
    for (c = 0; c < lenght; c++)
    {
        printf("%c ", str[c]);
    }
}

2

Re: перевантаження функції

cfhk

3

Re: перевантаження функції

спробуй так

void func(double* arr, int length)
{
    double tmp;
    for (int i = 0, k = length - 1; i < length; i++, k--)
    {
        tmp = arr[i];
        arr[i] = arr[k];
        arr[k] = tmp;
    }
    for (i = 0; i < length; i++)
    {
        printf("%d ", arr[i]);
    }
}

4

Re: перевантаження функції

точніше якщо кількість елементів масива парна то

void func(double* arr, int length)
{
    double tmp;
    for (int i = 0, k = length - 1; i < length / 2; i++, k--)
    {
        tmp = arr[i];
        arr[i] = arr[k];
        arr[k] = tmp;
    }
    for (i = 0; i < length; i++)
    {
        printf("%d ", arr[i]);
    }
}

інакше

void func(double* arr, int length)
{
    double tmp;
    for (int i = 0, k = length - 1; i < (length/2)+1; i++, k--)
    {
        tmp = arr[i];
        arr[i] = arr[k];
        arr[k] = tmp;
    }
    for (i = 0; i < length; i++)
    {
        printf("%d ", arr[i]);
    }
}

5

Re: перевантаження функції

Для загального розуміння: "перевантаження функцій" - це термін, який все заплутує; насправді в C++ функція визначається не тільки ім'ям, а й списком типів параметрів. Таким чином, func(char *) і func(double *, int) - просто дві різні функції. А от тип, що його функція повертає, в сигнатуру функції не входить, і спроба визначити int f() і char f() одночасно веде до помилки.

По суті - в функціях ви перебираєте і обмінюєте всі елементи двічі, треба так:

void func(double* arr, int length)//перший параметр - double *, уважно читайте умову!
{
    for (int i = 0; i < ( length - 1 ) / 2; i++)
    {
        //тут можна було б скористатися std::swap
        double tmp = arr[ i ];
        arr[ i ] = arr[ length - i - 1 ];
        arr[ length - i - 1 ] = tmp;
    }
    //про друк в умові не сказано нічого
}

void func(char* str)
{
    int length = strlen(str);
    for (int c = 0; c < ( length - 1 ) / 2; c++) 
    {
        char tmp = str[ c ];
        str[ c ] = str[ length - c -1 ];
        str[ length - c - 1 ] = tmp;
    }
}

або навіть так:

template <typename T>
void func(T* arr, int length)
{
    for (int i = 0; i < ( length - 1 ) / 2; i++)
    {
        T tmp = arr[ i ];
        arr[ i ] = arr[ length - i - 1 ];
        arr[ length - i - 1 ] = tmp;
    }
}

inline void func(char* str)
{
    func( str, strlen(str) );
}

І на майбутнє - коли ставите питання по коду, одразу пишіть, що саме вас не задовольняє в ньому.

Подякували: Replace, vector92

6

Re: перевантаження функції

дуже дякую!
все працює на ура

7

Re: перевантаження функції

А ще є std::reverse...