
Другие языки программирования и технологии
Найти элементы, принадле-жащие и тому и другому массивам на C++
Значений элементам одномерного массива генерированы с помо-щью генератора случайных чисел. Даны два одномерных массива. Найти элементы, принадле-жащие и тому и другому массивам. Написать программу с использованием процедур и функций. Процедуру Init при решении задачи требуется использовать два раза с различными параметрами, процедуру Print — три раза. Где ошибка? Она не выводит элементы принадлежащие двум массивам. Программа написана на С++.


В третьих в "С" и его потомках индекс массивов начинается с 0
В четвертых Вы нигде не заполняете массив B вообще.
Значение j при первом проходе в solve не инициализировано => куда Вы там попадете при обращении B[j] никто не знает. Этот момент частично перекликается с первым ответом.
Глобальные массивы - ну зачем?
По-идее в init и print надо передавать указатель на массив и его размер,
в solve аналогично, но указателя уже 3. 2 на исходный массив, 3ий на результат
srand не используете для генерирования псевдослучайных чисел.
Если v и w это нижняя и верхняя граница у чисел, то она тоже сделана неправильно.
Короче почти всё переписывать.
P.S: Пересечение массивов (можно не только, но в примере они) в С++ set_intersection в STL
http://www.cplusplus.com/reference/algorithm/set_intersection/
Значение j при первом проходе в solve не инициализировано => куда Вы там попадете при обращении B[j] никто не знает. Этот момент частично перекликается с первым ответом.
Глобальные массивы - ну зачем?
По-идее в init и print надо передавать указатель на массив и его размер,
в solve аналогично, но указателя уже 3. 2 на исходный массив, 3ий на результат
srand не используете для генерирования псевдослучайных чисел.
Если v и w это нижняя и верхняя граница у чисел, то она тоже сделана неправильно.
Короче почти всё переписывать.
P.S: Пересечение массивов (можно не только, но в примере они) в С++ set_intersection в STL
http://www.cplusplus.com/reference/algorithm/set_intersection/
Андрей Устинов
Можно соревнование устроить, кто заставит этот код работать за наименьшее количество изменений.
Олег Румянцев
Почитал по ссылке и вроде как set_intersection работает только на отсортированных массивах. Если массивы не отсортированные, то для выявления пересечения ИМХО можно было бы использовать map или еще что-то подобное.
Сергей Архипов
Я за него перепишу и на свой лад, лишь бы сайт не делать.
Сергей Архипов
Ничего себе дебаты тут у Вас.
Я ненавижу делать сайты и всё что с ними связано. Кто читает это, просьба - помолитесь, чтобы мне поручали писать только на C++ и никаких сайтов!
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
template<typename T>
void Print_(T v);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(0));
system("color 0A");
cout << "Введите длину массива 1 и 2 через пробел ";
size_t n1, n2;
cin >> n1 >> n2;
cout << "Введите левый и правый терминал генерируемых случайных чисел ";
int mi, ma;
cin >> mi >> ma;
auto Init = [&mi, &ma]()
{
return mi + rand() % (ma - mi + 1);
};
vector<int> v1(n1);
vector<int> v2(n2);
vector<int> v3;
generate(v1.begin(), v1.end(), Init);
generate(v2.begin(), v2.end(), Init);
cout << endl;
cout << "Содержание первого массива" << endl;
Print_(v1);
cout << "Содержание второго массива" << endl;
Print_(v2);
cout << endl;
set<int> s1(v1.begin(), v1.end());
set<int> s2(v2.begin(), v2.end());
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), back_inserter(v3));
cout << "Элементы, которые есть и в первом и во втором массиве" << endl;
Print_(v3);
cout << endl;
system("pause");
return 0;
}
template<typename T>
void Print_(T v)
{
for (const auto &t : v)
{
cout << t << " ";
}
cout << endl;
}

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
template<typename T>
void Print_(T v);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(0));
system("color 0A");
cout << "Введите длину массива 1 и 2 через пробел ";
size_t n1, n2;
cin >> n1 >> n2;
cout << "Введите левый и правый терминал генерируемых случайных чисел ";
int mi, ma;
cin >> mi >> ma;
auto Init = [&mi, &ma]()
{
return mi + rand() % (ma - mi + 1);
};
vector<int> v1(n1);
vector<int> v2(n2);
vector<int> v3;
generate(v1.begin(), v1.end(), Init);
generate(v2.begin(), v2.end(), Init);
cout << endl;
cout << "Содержание первого массива" << endl;
Print_(v1);
cout << "Содержание второго массива" << endl;
Print_(v2);
cout << endl;
set<int> s1(v1.begin(), v1.end());
set<int> s2(v2.begin(), v2.end());
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), back_inserter(v3));
cout << "Элементы, которые есть и в первом и во втором массиве" << endl;
Print_(v3);
cout << endl;
system("pause");
return 0;
}
template<typename T>
void Print_(T v)
{
for (const auto &t : v)
{
cout << t << " ";
}
cout << endl;
}

Булат Байбиков
Будет правильней объявить и использовать шаблон не на typename а на class.
В функцию лучше передавать по ссылке на константу void Print_(const T &); чтобы избежать затратной операции копирования контейнеров.
Это я увидел после того, как код несколько раз перечитал.
В функцию лучше передавать по ссылке на константу void Print_(const T &); чтобы избежать затратной операции копирования контейнеров.
Это я увидел после того, как код несколько раз перечитал.
Николай Теймуров
Вопрос. Ваш set_intersection использует только сортированные массивы или любые?
чего-то не понял при залезании в ссылку http://www.cplusplus.com/reference/algorithm/set_intersection/
чего-то не понял при залезании в ссылку http://www.cplusplus.com/reference/algorithm/set_intersection/
Во-первых, функция print в этом примере печатает элементы массива A. Всегда.
Во-вторых, в функции solve итерационные переменные i и g, а сравнение происходит A[ i ] и B[ j ]
Во-вторых, в функции solve итерационные переменные i и g, а сравнение происходит A[ i ] и B[ j ]
Илья Петухов
Благодарю
Похожие вопросы
- Всем привет. Никак не могу понять динамически массивы в C++.
- Помогите Задан массив Р(N).Переписать все его элементы,за исключением максимального и минимального в массив D.(язык C++)
- Дано вещественное число R и массив размера N. Найти элемент массива, который наименее близок к данному числу
- вопрос про массив одномерный C++ (вопрос отредактирован)
- Как описать и использовать динамический массив в C++
- Вопрос по массивам на C++.
- Как правильно задать одномерный массив в C++?
- Даны два массива A и B размера N, элементы которых упорядочены по убыванию. Объединить эти массивы так, чтобы результ
- Нужно перемешать массив на C++. Есть массив, его нужно случайным образом перемешать. Нужен именно КОД, а не алгоритм
- дана матрица а размерности n на m. Найти максимальный элемент в каждом столбце. Помогите пожалуйста решить. На языке C++