1 Востаннє редагувалося User 298 (02.03.2015 22:02:43)

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

Друзі, потрібна Ваша допомога. Почали вивчати перезавантаження функцій.
Так як тільки почав працювати з перевантаженням ф-цій виникли проблеми з програмою.
Допоможіть будь ласка, терміни здачі лабораторної підтискають!

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

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

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

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

#include <stdio.h>
#include <string.h>
 
int func(double* arr, int length);
int func(char* str);
 
int main()
{
    int res1;
    char res2;
    int arr[]={1, 2, 3, 4, 5};
    char str[] = "ABCDE";
    res1=func(arr, 5);
    res2=func(str);
    printf("%d ", arr);
    printf("%s ", str);
 
    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("%s ", str[ c ]);
    }
}

2

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

Опишіть докладніше які проблеми у вас виникли.

3 Востаннє редагувалося P.Y. (01.03.2015 22:42:06)

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

Очевидно, в обох функціях, які треба описати, використовується приблизно один і той же алгоритм. Різниця в типах і в тому, що якщо для масиву double довжина передається як додатковий параметр, то в рядку її можна визначити з допомогою strlen або порівнюючи кожен символ із '\0'.
Перепрошую, недочитав код

4

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

Не знаю де шукати помилку в коді, бо я "плаваю" в цій темі.При компіляції відображає помилки.

5

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

Перефразую - Звідкіля ви узяли, що код має помилку?

6

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

В області, де відображаються результати компіляції програми(у нижній частині компілятора) відображає помилки
...
Построение: успешно: 0, C ошибками: 1, без изменений: 0, пропущено: 0

7

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

error C2665: func: ни одна из 2 перегрузок не может преобразовать все типы аргументов
error C2556: void func(char *): перегруженная функция отличается от "int func(char *)" только возвращаемым типом
error C2371: func: переопределение; различные базовые типы

8

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

У програмі описано void func(char* str) та void func(int* arr, int length). Перед main оголошено такі ж функції, але int. Тобто, треба або й оголосити їх як void, або виправити в їхньому описі void на int (і повертати якийсь результат).

Подякували: Betterthanyou, koala, Daveper3

9

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

Я тип не той вказав, де void func(int* arr, int length) там у завданні тип має бути double, але все одно виправляю, а помилки й надалі появляються(

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

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

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

10

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

В функціях є багато помилок наприклад k не ініціалізована.

int i, k, tmp;
for (i = 0; i < length; i++, k--)

перезавантаження функцій тут працює але самі функції ні

#include <stdio.h>
#include <string.h>

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

int main()
{
    int res1;
    char res2;
    double arr[] = { 1, 2, 3, 4, 5 };
    char str[] = "ABCDE";
    func(arr, 5);
    func(str);
    printf("%d ", arr);
    printf("%s ", str);

    return 0;
}

void func(double* arr, int length)
{
    int i, k = length-1, 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;
    }
//lenght!=length !!!
    lenght = strlen(str);
    for (c = 0; c < lenght; c++)
    {
        printf("%s ", str[c]);
    }
}

11

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

Daveper написав:

все одно виправляю, а помилки й надалі появляються(

Ну то виправляйте їх, доки помилок не стане. Іншого способу програмування не існує. Якщо не знаєте, як виправити - показуйте код і текст помилок, підкажемо, що робити далі.

Подякували: Дмитро-Чебурашка1

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

То абсолютна правда!


Я таки зараз погляну твого коду, може щось підкажу.

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

Ні, по-перше виклади останній вариант.

14

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

Дмитро, дякую за спробу допомогти, але я вже із цим завданням розібрався.

Подякували: Дмитро-Чебурашка1