21

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

koala написав:

Доповню відповідь LoganRoss: вона вже вбудована в C++. char, насправді - не символ, а однобайтове число - код символа, просто cout виводить відповідний символ. Можете перевірити:

char c = 'x';
c++;
cout<<c;//виведе 'y'.
int x = 1;
x += c;
cout<<x;//виведе код символа 'y'

Так що

str[i] > str[i + 1]

цілком працює.

Тобто, достатньо написати ще один такий самий блок, але змінений під масив символів і це вся робота?

22

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

ProgNob написав:
koala написав:

Доповню відповідь LoganRoss: вона вже вбудована в C++. char, насправді - не символ, а однобайтове число - код символа, просто cout виводить відповідний символ. Можете перевірити:

char c = 'x';
c++;
cout<<c;//виведе 'y'.
int x = 1;
x += c;
cout<<x;//виведе код символа 'y'

Так що

str[i] > str[i + 1]

цілком працює.

Тобто, достатньо написати ще один такий самий блок, але змінений під масив символів і це вся робота?

Ще треба придумати, як визначати розмір масиву символів, ви ж не передаєте його явно.

23

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

Ще треба придумати, як визначати розмір масиву символів, ви ж не передаєте його явно.

Тобто?

24 Востаннє редагувалося ProgNob (21.02.2017 17:27:52)

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

Начебто написав як має бути, трохи криво, але чи є перевантаження функцій?

#include <iostream>
#include <cstring>
using namespace std;
bool func(int* arr, int length);
bool func(char* str);

int main(void)
{
    setlocale(0, "");
    const int size = 10;
    int arr[size] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    char str[] = "abcde";

    
    cout << "Елементи масиву розташованi по порядку зростання(1 = [Tak], 0 = [Hi]): " << func(arr, size) << endl;
    cout << "Елементи масиву розташованi по порядку зростання(1 = [Tak], 0 = [Hi]): " << func(str) << endl;

}

bool func(int* arr, int size)
{
    bool value;
    int i;
    for(i = 0; i < size - 1;)
    {
        if ((arr[i] < arr[i + 1]) || (arr[i] == arr[i + 1]))
        {
            value = true;
            i++;
        }
        if (arr[i] > arr[i + 1])
        {
            value = false;
            break;
        }
    }
    
    return value;
}
bool func(char* str)
{
    bool value;
    int i;
    for(i = 0; i < strlen(str) - 1;)
    {
        int x = 0;
        int y = 0;
        x += str[i]; 
        y += str[i + 1];
        if ((x < y) || (x == y))
        {
            value = true;
            i++;
        }
        if (x > y)
        {
            value = false;
            break;
        }
    }
    
    return value;
    
}

25

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

Ну у вас же є дві функції з однаковим іменем і різними параметрами.

26

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

quez написав:

Ну у вас же є дві функції з однаковим іменем і різними параметрами.

Це вся реалізація перевантаження?

27

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

ProgNob написав:
quez написав:

Ну у вас же є дві функції з однаковим іменем і різними параметрами.

Це вся реалізація перевантаження?

Що, вибачте? Ви не знаєте, що таке перевантаження?

28

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

-=ЮрА=- написав:
До речі, у Вас щось пішло не так навіть при маленькій зміні

Не у мене, а у вас. Ви ініціалізуєте змінні літералами, які в них не вміщаються.

29

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

quez написав:

Що, вибачте? Ви не знаєте, що таке перевантаження?

Не зовсім розумію.

30

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

ProgNob написав:
quez написав:

Що, вибачте? Ви не знаєте, що таке перевантаження?

Не зовсім розумію.

Тоді гугл в зуби, шукаєте визначення і порівнюєте з вашим кодом

31

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

quez написав:
ProgNob написав:
quez написав:

Що, вибачте? Ви не знаєте, що таке перевантаження?

Не зовсім розумію.

Тоді гугл в зуби, шукаєте визначення і порівнюєте з вашим кодом

Якщо не зрозумієте - питайте тут. Тільки питайте предметно: "визначення каже X, а в програмі я бачу Y, це хіба не різні речі" чи якось так. За вас ніхто навчатися тут не буде.

Подякували: ProgNob1

32

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

koala написав:

Якщо не зрозумієте - питайте тут. Тільки питайте предметно: "визначення каже X, а в програмі я бачу Y, це хіба не різні речі" чи якось так. За вас ніхто навчатися тут не буде.

Добре, я розумію, гарно дякую.

33

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

#include <iostream>

using namespace std;

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

int main(void)
{
    setlocale(0, "");
    const int size = 10;
    char str[size] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'r', 'u' };
    int arr[size] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    cout << "Елементи масиву розташованi по порядку зростання(1 = [Tak], 0 = [Hi]): " << func(arr, size) << endl;
    cout << "Елементи масиву розташованi по порядку зростання(1 = [Tak], 0 = [Hi]): " << func(str) << endl;
}

bool func(int* arr, int size)
{
    bool value;
    int i;
    for (i = 0; i < size; i++)
    {
        if (arr[i] < arr[i + 1])
        {
            value = true;
            i++;
        }
        else if (arr[i] > arr[i + 1])
        {
            value = false;
            break;
        }
    }

    return value;
}

bool func(char* str)
{
    bool charValue;
    int i;
    for (i = 0; i < 9;i++)
    {
        if (str[i] - '0' < str[i+1] - '0')
        {
            charValue = true;
        }
        else if (str[i] - '0' > str[i+1] - '0')
        {
            charValue = false;
            break;
        }
    }
    return charValue;
}

34

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

LoganRoss:
Рядок 12:
char str[] = "abcdeghru";
Рядки 14-15:
cout << "Елементи масиву"<<(func(arr, size)?"":" не") <<" розташованi по порядку зростання"<<endl;
cout << "Елементи стрічки"<<(func(str)?"":" не") <<" розташованi по порядку зростання"<<endl;
Функція bool func(int*, int), змінна value не потрібна:

bool func(int* arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        if (arr[i] > arr[i + 1])
        {
            return false;
        }
    }
    return true;
}

Функція bool func(char*) - у вас з якогось дива фіксована довжина, хоча тут strlen дуже проситься. Не кажу вже про віднімання '0', нащо воно треба?

35

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

koala:
щодо першої функції, то я її і не змінював, взяв і доробив раніше написаний код. Тому не надав значення змінним. Але ви праві, краще без функції value.
Можна використати і strlen, буде практичніше і можна вводити символи з клавіатури. Варіантів є багато, я просто нашвидкуруч написав перше, що прийшло в голову. І 0 там віднімати і справді не потрібно.

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

Подякували: 0x9111A1

36

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

#include <iostream>

using namespace std;

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

int main(void)
{
    setlocale(0, "");
    const int size = 10;
    char str[256];
    int arr[size] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    cout << "Масив чисел: ";
    for (int i = 0; i < size; i++)
        cout << arr[i];
    cout << "\nВведіть символи: ";
    cin >> str;
    cout << "Елементи масиву" << (func(arr, size) ? "" : " не") << " розташованi по порядку зростання" << endl;
    cout << "Елементи стрічки" << (func(str) ? "" : " не") << " розташованi по порядку зростання" << endl;
}

bool func(int* arr, int size)
{
    int i;
    for (i = 0; i < size-1; i++)
    {
        if (arr[i] > arr[i + 1])
        {
            return false;
        }
    }

    return true;
}

bool func(char* str)
{
    int i;
    for (i = 0; i < (strlen(str)-1);i++)
    {
        if (str[i] > str[i+1])
        {
            return false;
        }
    }
    return true;
}