Re: Перетин двох множин. (С++)
Ну, якщо щось не так, до десь це можна виправити.
Напишете конкретніше, що саме - може, й допоможемо.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Перетин двох множин. (С++)
Для відправлення відповіді ви повинні увійти або зареєструватися
Ну, якщо щось не так, до десь це можна виправити.
Напишете конкретніше, що саме - може, й допоможемо.
передає 0 а не потрібне число і кількість елементі така як і та яку перше воджу
*a = a1;//a містить потрібну довжину
int* p = new int[*a]{ 55 };//p має довжину a
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (*(ar + j) == *(ar1 + m)) {
*(p + *a) = *(ar + j);//куди-куди записуємо значення?
Кажу ж - спершу варто зробити статичні масиви, а потім переробити в динамічні. p[*a]=ar[j] значно легше виявити, ніж оцю арифметику.
тут якась помилку яку переглянте в документах ат ассерт
#include <iostream>
#include <time.h>
using namespace std;
void set(int *ar, int n);
void print(int *ar, int n);
int* zbir(int *ar, int n, int *ar1, int m, int* ar2, int *a);
void sort(int *ar, int n);
int* add_end(int *ar, int* a);
void main() {
srand(time(0));
int n, m, a = 1;
cin >> n;
int* ar = new int[n];
cin >> m;
int* ar1 = new int[m];
int* ar2 = new int[a] { rand() % 101 - 50 };
set(ar, n);
print(ar, n);
cout << "\n";
set(ar1, m);
print(ar1, m);
cout << "\n";
sort(ar, n);
sort(ar1, m);
ar2 = zbir(ar, n, ar, m, ar2, &a);
print(ar2, a);
cout << "\n";
system("pause");
}
int* add_end(int *ar, int* a) {
int* p = new int[*a + 1];
for (int i = 0; i < *a; i++) {
*(p + i) = *(ar + i);
}
*(p + *a) = 0;
delete[]ar;
(*a)++;
return p;
}
void sort(int *ar, int n) {
int tmp = 0;
for (int i = 0; i < n; i++) {
for (int j = n - 1; j > i; j--) {
if (*(ar + j - 1) > *(ar + j)) {
tmp = ar[j];
*(ar + j) = *(ar + j - 1);
*(ar + j - 1) = tmp;
}
}
}
}
int* zbir(int *ar, int n, int *ar1, int m, int* ar2, int *a) {
int* p = new int[*a]{ rand() % 101 - 50 };
for (int i = 0, j = 0; i < n + m && j < n + m;) {
if (*(ar + i) < *(ar1 + j)) {
i++;
}
if (*(ar + i) > *(ar1 + j)) {
j++;
}
if (*(ar + i) == *(ar1 + j)) {
*(p + *a) = *(ar + i);
p = add_end(ar, a);
i++;
j++;
}
}
a--;
delete[] ar2;
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";
}
тут якась помилку яку переглянте в документах ат ассерт
Це український форум.
я просто англійської не знаю і важко перекласти
якось так переведу Сповіщення про помилку не вдалося
Тобто ані скопіювати, ані зробити скріншот у вас не виходить?
[img]скріншот зробив але неможу викласти , можливо заборона на додавання зображень[/img]
Скріншот викладайте на якийсь інший ресурс, на кшталт https://imgur.com/, а сюди вставляйте посилання.
Просто знову вилізли за межі масиву.
Ви можете пояснити, що ви взагалі намагаєтеся зробити?
int n, m, a = 1;
int* ar2 = new int[a] { rand() % 101 - 50 }; //нащо вам масив на 1 елемент? Де ви його видаляєте?
int* p = new int[*a]{ rand() % 101 - 50 }; //а нащо ще один?
*(p + *a) = *(ar + i);//чому тут дорівнює a, а який розмір p?
*(p + *a) = 0;//а тут?
масив на 1 елемент це 3 масив в якому є спільні числа 1 і 2 масивів а 2 масив з 1 елементом це заповненя першого масиву з 1 елементом
Тоді переробіть нарешті на статичні масиви, відлагодьте алгоритм, а тоді вже переходьте на динамічні. Скільки ще вам це повторювати?
Для відправлення відповіді ви повинні увійти або зареєструватися