Другие языки программирования и технологии

ПОМОГИТЕ, ДОБРЫЕ ЛЮДИ!!! Язык С++, записать в массив d нечетные элементы массива А которых нет в В - НЕ ПОЛУЧАЕТСЯ

создать новый вектор С который будет содержать нечетные элементы массивов А и В - это я сделала, а записать в массив d нечетные элементы массива А которых нет В - НЕ ПОЛУЧАЕТСЯ!!! ОБЪЯСНИТЕ ПОЖАЛУЙСТА!!!!

a={7,4,15,-3,4,10,17,28,101}
b={7,-1,-3,16,23,27,28,45,10,-2,0,1,45,48,49,50}

#include
#include
#include
#include
using namespace std;
//Прототип функции для записи вектора в файл
void wrightf(ofstream & f, int x[], int n, char name[]);
//Прототип функции для чтения вектора из файла и вывод его на монитор
void outputv(ifstream & fin, int x[], int n, char name[]);
//Главная функция
int main()
{
setlocale(LC_ALL, "rus");
/*Объявление потока чтения из файла, Oбъявление потока в записи в файл, Oбъявление массива для имени файла*/
ofstream f1;
ifstream f2;
int a[9]; int b[16]; int c[25]; int d[25];
char str[100];
//Записываем массив в файл имя которого вводится с клавиатуры
wrightf(f1, a, 9, str);
//Чтение вектора из файла и вывод на монитор
cout << "\n чтение вектора а \n" << endl;
outputv(f2, a, 9, str);
//Записываем массив в файл имя которого вводится с клавиатуры
wrightf(f1, b, 16, str);
//Чтение вектора из файла и вывод на монитор
cout << "\n чтение вектора в \n" << endl;
outputv(f2, b, 16, str);
//Вычисление нечетных координат a для с
int j = 0;
for (int i = 0; i < 9; i++)
{
if (a[i] % 2 != 0)
{
c[j] = a[i];
j++;
}
}
//Вычисление нечетных координат b для с
for ( int i = 0; i < 16; i++)
{
if (b[i] % 2 != 0)
{
c[j] = b[i];
j++;
}
}
//Вычисление нечетных координат a для d
int z = 0;
for (int i = 0; i < 9; i++)
{
if (a[i] % 2 != 0)
{
d[z] = a[i];
z++;
}
}
//Вычисление нечетных координат b для d
for (int i = 0; i < 16; i++)
{
if (b[i] % 2 != 0)
{
d[z] = b[i];
z++;
}
}
//Вывод
for (int i = 0; i < j; i++)
{
if (i % 7 == 0) cout << endl;
cout << setw(10) << c[i];
}
cout << endl;
}
//Определение функции для записи в файл
void wrightf(ofstream & f, int x[], int n, char name[])
{
//Ввод имени файла для записи
cout << "\n ввести имя файла для записи: ";
cin >> name;
//Открываем файл для записи
f.open(name);
//Проверка упешности открытия файла
if (!f.is_open())
{
cout << "\n ошибки открытия \n";
exit(1);
}
//Читаем массив с клавиатуры и записываем в файл
for (int i = 0; i < n; i++)
{//Читаем с клавиатуры
cout << "\n x[" << i << "]=";
cin >> x[i];
//Запись в файл
f << setw(10) << x[i];
if (i % 8 == 0)f << endl;
}
f.close();
}
//Определение функции для чтения из файла и вывода на монитор
void outputv(ifstream & f, int x[], int n, char name[])
{
cout << "\n вывести имя файла для чтения: ";
cin >> name;
f.open(name);
if (!f.is_open())
{
cout << "\n ошибка";
exit(1);
}
for (int i = 0; i < n; i++)
{
f >> x[i];
if (i % 7 == 0)cout << endl;
cout << setw(10) << x[i];
}
//Закрываем файл
f.close();
}
а записать в массив d нечетные элементы массива А которых нет В - НЕ ПОЛУЧАЕТСЯ!!! ОБЪЯСНИТЕ ПОЖАЛУЙСТА!!!!
1. находишь нечетный элемент в массиве А
2. проверяешь наличие такого же в массиве В
3. если отсутствует - пишешь в массив д
4. циклишься
Сергей Персаев
Сергей Персаев
1 900
Лучший ответ
Михаил Миронов А если зациклить, то как?
Сергей Персаев 0. for(i=0;i<9;i++)//то есть перебираем массив а от начала до конца
{
1. ..вставляемы вышеописанные пункты
2. ..
3. ..
}
#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
int main(){
vector< int> a={7,4,15,-3,4,10,17,28,101};
vector< int> b={7,-1,-3,16,23,27,28,45,10,-2,0,1,45,48,49,50};
vector< int> c,d;
for(int i:a)if(i&1)c.push_back(i);
for(int i:b)if(i&1)c.push_back(i);
for(int&i:a)if(i&1 && find(b.begin(),b.end(),i)==b.end())d.push_back(i);
for(int v:c)cout<< v<<' '; cout<< endl;
for(int v:d)cout<< v<<' '; cout<< endl;}

или то же без векторов

#include "iostream"
#include "algorithm"
using namespace std;
int main(){
int a[]={7,4,15,-3,4,10,17,28,101},na=sizeof a/sizeof *a;
int b[]={7,-1,-3,16,23,27,28,45,10,-2,0,1,45,48,49,50},nb=sizeof b/sizeof *b;
int c[na+nb],d[na],k=0,m=0;
for(int i:a)if(i&1)c[k++]=i; for(int i:b)if(i&1)c[k++]=i;
for(int i:a)if(i&1 && find(b,b+nb,i)==b+nb)d[m++]=i;
for(int v=0;v< k;v++)cout<< c[v]<<' '; cout<< endl;
for(int v=0;v< m;v++)cout<< d[v]<<' '; cout<< endl;}

или то же без algorithm

#include "iostream"
using namespace std;
bool find(int a[],int n,int j){
bool b=false; for(int i=0;i< n;i++)if(a[i]==j)b=true; return b;}
int main(){
int a[]={7,4,15,-3,4,10,17,28,101},na=sizeof a/sizeof *a;
int b[]={7,-1,-3,16,23,27,28,45,10,-2,0,1,45,48,49,50},nb=sizeof b/sizeof *b;
int c[na+nb],d[na],k=0,m=0;
for(int i:a)if(i&1)c[k++]=i; for(int i:b)if(i&1)c[k++]=i;
for(int i:a)if(i&1 && !find(b,nb,i))d[m++]=i;
for(int v=0;v< k;v++)cout<< c[v]<<' '; cout<< endl;
for(int v=0;v< m;v++)cout<< d[v]<<' '; cout<< endl;}
Мда. Тяжело Вам без STL. Так-то можно в одну строку сделать...

#include < iostream >
#include < vector >
#include < algorithm >

using namespace std;

int main() {
vector a< int >={7,4,15,-3,4,10,17,28,101};
vector b< int >={7,-1,-3,16,23,27,28,45,10,-2,0,1,45,48,49,50};
vector c< int >;

copy_if(a.begin(), a.end(), back_inserter(c),
[&](const auto& v) {
return (v&1) && find(b.begin(), b.end(), v)==b.end();
}
);

for(const auto& v : c) cout << v << endl;

return 0;
}

//есс-но можно было использовать set и set_difference и sort/binary_search,
//но на относительно небольших объемах сойдет + в одну строку =)

https://www.ideone.com/iTxwEV

Если не хочется STL и по коду - сделайте сначала функцию поиска элемента в массиве. Сразу легче станет.
Пишите в комменты, если что - попробую объяснить.
Вадим Романов
Вадим Романов
84 764

Похожие вопросы