Re: 3 функції. Без використання операторів if і switch.
але на цей раз програма запускається тільки тоді коли вибираю функцію тоді помилка появляється
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → 3 функції. Без використання операторів if і switch.
Сторінки Попередня 1 2 3 4 Наступна
Для відправлення відповіді ви повинні увійти або зареєструватися
але на цей раз програма запускається тільки тоді коли вибираю функцію тоді помилка появляється
якщо не помиляюсь то після цього вибиває помилку
p = add_end(ar, n, num);
Ви взагалі розумієте, що таке UB?
я навіть не знаю як це розшифровується
ось тут в 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";
}
UB це невизначена поведінка(невизначена помилка) -навіть досвідчені розробники інколи не можут чітку сформулювати причини її виникнення
Це не той випадок, повірте. Просто десь ви вилізаєте за межі масивів.
все працює кількість елементів така як потрібно тільки значення в 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";
}
просто я був написав ar а потрібно було p а не повилазив за межі масивів з тим випадком розібрався але правильні значення тільки 1 елемент має остальні елемнти правильну кількість але не правильні значення тут можливо повилазив за межі масиву
тепер тут вже дебагер не допоможе
1 елемент виводить добре а пізніше виводить якісь -572662307, а кількість елементів завжди добре
Скажіть, а структури ви вже вивчали?
оте -5348957349537948 означає, що ви або вийшли за межі масиву, або що звертаєтесь до неініціалізованої змінної, чи що ви там робите..
ще не вчив структури
оте -5348957349537948 означає, що ви або вийшли за межі масиву, або що звертаєтесь до неініціалізованої змінної, чи що ви там робите..
я ось що роблю
num = ar[i];
ar[i] % 2 == 0 ? (p = add_end(p, n, num)) || (i += 0) : (i += 0);
якщо не помиляюсь то зміну я ініціалізував, а от з межами масиву не впевнений але здається що не вийшов хоча я можу помилятись
оце і є ініціалізація?
num = ar[i];
тоді це вихід за межі масиву, або, якщо сам масив не ініціалізований, то теж таке може бути, якщо не помиляюсь.
ініціалізація трохи вище
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";
}
здається все ініціалізовано,за масив не виходив(ну знайти де я це робив(якщо робив) не можу)