21

Re: 3 функції. Без використання операторів if і switch.

але на цей раз програма запускається тільки тоді коли вибираю функцію тоді помилка появляється

22

Re: 3 функції. Без використання операторів if і switch.

якщо не помиляюсь то після цього вибиває помилку

    p = add_end(ar, n, num);

23

Re: 3 функції. Без використання операторів if і switch.

Ви взагалі розумієте, що таке UB?

24

Re: 3 функції. Без використання операторів if і switch.

я навіть не знаю як це розшифровується

25

Re: 3 функції. Без використання операторів if і switch.

ось тут в 3 функціїї 1 раз все добре працює пізніше елементи добре виділяє але значення не ті підставляє

#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int &n);
int* func2(int *ar, int &n);
int* func1(int *ar, int &n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int&) = { func1,func2,func3 };
    int choice;
    cin >> choice;
    *ar = *p[choice - 1](ar, n);
    print(ar, n);
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p[i] = ar[i];
    }
    p[n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int num = 0;
    for (int i = 0; i < nn; i++) {
        num = ar[i];
        //ar[i] % 2 == 0 ? (p = add_end(ar, n, num)) || (i += i) : (i += i);
        if (ar[i] % 2 == 0) {
            if (ar[i] % 2 == 0) {
                    p = add_end(p, n, num);
            }
        }
    }
    delete[]ar;
    return p;
}
int* func2(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int num = 0;
    for (int i = 0; i < nn; i++) {
        num = ar[i];
        ar[i] % 3 == 0 ? (p = add_end(ar, n, num)) || (i += i) : (i += i);
    }
    delete[]ar;
    return p;
}
int* func1(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int b = 0;
    int num = 0;
    for (int i = 0; i < nn; i++) {
        b = 0;
        for (int c = 1; c < ar[i]; c++) {
            ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b += b)) : b += b;
        }
        num = ar[i];
        b < 3 ? (p = add_end(ar, n, num)) || (b += b) : (b += b);
    }
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}

26

Re: 3 функції. Без використання операторів if і switch.

http://lmgtfy.com/?q=%D0%A1%2B%2B+UB

27

Re: 3 функції. Без використання операторів if і switch.

дякую, зараз погуглю

28

Re: 3 функції. Без використання операторів if і switch.

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

29

Re: 3 функції. Без використання операторів if і switch.

Це не той випадок, повірте. Просто десь ви вилізаєте за межі масивів.

30

Re: 3 функції. Без використання операторів if і switch.

все працює кількість елементів така як потрібно тільки значення в 1 елемента добрі а дальше не такі як потрібно в всіх 3 функціях

#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int &n);
int* func2(int *ar, int &n);
int* func1(int *ar, int &n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int&) = { func1,func2,func3 };
    int choice;
    cin >> choice;
    *ar = *p[choice - 1](ar, n);
    print(ar, n);
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p[i] = ar[i];
    }
    p[n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int num = 0;
    for (int i = 0; i < nn; i++) {
            num = ar[i];
            ar[i] % 2 == 0 ? (p = add_end(p, n, num)) || (i += i) : (i += i);
    }
    delete[]ar;
    return p;
}
int* func2(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int num = 0;
    for (int i = 0; i < nn; i++) {
        num = ar[i];
        ar[i] % 3 == 0 ? (p = add_end(p, n, num)) || (i += i) : (i += i);
    }
    delete[]ar;
    return p;
}
int* func1(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int b = 0;
    int num = 0;
    for (int i = 0; i < nn; i++) {
        b = 0;
        for (int c = 1; c < ar[i]; c++) {
            ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b += b)) : b += b;
        }
        num = ar[i];
        b < 3 ? (p = add_end(p, n, num)) || (b += b) : (b += b);
    }
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}

31

Re: 3 функції. Без використання операторів if і switch.

просто я був написав ar а потрібно було p а не повилазив за межі масивів з тим випадком розібрався але правильні значення тільки 1 елемент має остальні елемнти правильну кількість але не правильні значення тут можливо повилазив за межі масиву

32

Re: 3 функції. Без використання операторів if і switch.

тепер тут вже дебагер не допоможе

33 Востаннє редагувалося Parsifal (26.09.2018 17:55:28)

Re: 3 функції. Без використання операторів if і switch.

1 елемент виводить добре а пізніше виводить якісь -572662307, а кількість елементів завжди добре

34

Re: 3 функції. Без використання операторів if і switch.

Скажіть, а структури ви вже вивчали?

35

Re: 3 функції. Без використання операторів if і switch.

оте -5348957349537948 означає, що ви або вийшли за межі масиву, або що звертаєтесь до неініціалізованої змінної, чи що ви там робите..

36 Востаннє редагувалося Parsifal (26.09.2018 18:03:44)

Re: 3 функції. Без використання операторів if і switch.

ще не вчив структури

37

Re: 3 функції. Без використання операторів if і switch.

FakiNyan написав:

оте -5348957349537948 означає, що ви або вийшли за межі масиву, або що звертаєтесь до неініціалізованої змінної, чи що ви там робите..

я ось що роблю

num = ar[i];
            ar[i] % 2 == 0 ? (p = add_end(p, n, num)) || (i += 0) : (i += 0);

якщо не помиляюсь то зміну я ініціалізував, а от з межами масиву не впевнений але здається що не вийшов хоча я можу помилятись

38

Re: 3 функції. Без використання операторів if і switch.

оце і є ініціалізація?

num = ar[i];

тоді це вихід за межі масиву, або, якщо сам масив не ініціалізований, то теж таке може бути, якщо не помиляюсь.

39

Re: 3 функції. Без використання операторів if і switch.

ініціалізація трохи вище

int num = 0;
    for (int i = 0; i < nn; i++) {
            num = ar[i];
            ar[i] % 2 == 0 ? (p = add_end(p, n, num)) || (i += 0) : (i += 0);
    }


якщо не помиляюсь то я кидав код вище але кину ще раз

#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int &n);
int* func2(int *ar, int &n);
int* func1(int *ar, int &n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int&) = { func1,func2,func3 };
    int choice;
    cin >> choice;
    *ar = *p[choice - 1](ar, n);
    print(ar, n);
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p[i] = ar[i];
    }
    p[n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int num = 0;
    for (int i = 0; i < nn; i++) {
            num = ar[i];
            ar[i] % 2 == 0 ? (p = add_end(p, n, num)) || (i += 0) : (i += 0);
    }
    delete[]ar;
    return p;
}
int* func2(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int num = 0;
    for (int i = 0; i < nn; i++) {
        num = ar[i];
        ar[i] % 3 == 0 ? (p = add_end(p, n, num)) || (i += 0) : (i += 0);
    }
    delete[]ar;
    return p;
}
int* func1(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int b = 0;
    int num = 0;
    for (int i = 0; i < nn; i++) {
        b = 0;
        for (int c = 1; c < ar[i]; c++) {
            ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b += 0)) : b += 0;
        }
        num = ar[i];
        b < 3 ? (p = add_end(p, n, num)) || (b += 0) : (b += 0);
    }
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}

40

Re: 3 функції. Без використання операторів if і switch.

здається все ініціалізовано,за масив не виходив(ну знайти де я це робив(якщо робив) не можу)