Помогите с решением ошибок С++
Даны два массива: А[M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массива A, которые не включаются в массив B, без повторений.
#include<iostream>
#include<ctime>
#include<iomanip>
#include"Header.h"
using namespace std;
int main()
{
setlocale(0, "");
srand(time(0));
//Zadanie 1
int M, N;
cin >> M >> N;
int* A = new int[M];
int* B = new int[N];
setArray(A, M);
setArray(B, N);
printArray(A, M);
printArray(B, N);
bool* isFounA = new bool[M] {false};
for (size_t i = 0; i < M; i++)
{
for (size_t q = 0; q < N; q++)
{
if (A[i] == B[q])
{
isFounA[i] = true;
break;
}
}
}
for (size_t i = 0; i < M; i++)
{
for (size_t q = i + 1; q < M; q++)
{
if (A[i] == A[q])
{
isFounA[i] = true;
break;
}
}
}
int countNotFound = 0;
for (size_t i = 0; i < M; i++)
{
if (!isFounA[i])
countNotFound++;
}
int* C = new int[countNotFound];
int ci = 0;
for (size_t i = 0; i < M; i++)
{
if (!isFounA[i])
{
C[ci] = A[i];
ci++;
}
}
printArray(C, ci);
}
Не могу понять, почему не выводится значение 3 массива, уже 2 день сижу и не понимаю.
Вот Header.
#pragma once
#include<iostream>
#include<ctime>
#include<iomanip>
using namespace std;
void setArray(int* a, int size, int mindiap = 0, int maxdiap = 9)
{
for (size_t i = 0; i < size; i++)
{
a[i] = rand() % (maxdiap - mindiap + 1) + mindiap;
}
}
void printArray(int* a, int size)
{
for (int i = 0; i < size; i++)
cout << a[i] << " ";
cout << endl;
}
СПАСИБО, Я СМОГ СДЕЛАТЬ!!!
Ответы (1 шт):
Не пишите в заголовочном файле определения функций, в многофайловом проекте будут проблемы.
А теперь по делу.
Какие размеры массивов у вас? Какие вы выводите?
printArray(A, N);
printArray(B, M);
а надо
printArray(A, M);
printArray(B, N);
И массив isFounA у вас не инициализирован, так что заполнен мусором, в основном воспринимаемым как значения true.
bool* isFounA = new bool[M] {false};
Попробуйте внести эти изменения и попробовать еще раз.