Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
skiff.
6 / 6 / 2
Регистрация: 10.09.2011
Сообщений: 87
#1

Сравнить два массива, заданных классами - C++

10.01.2013, 20:50. Просмотров 501. Ответов 8
Метки нет (Все метки)

Имеется class array и class array2. В них описаны массивы. И два метода, заполняющие их.
Нужно сравнить два этих массива (Вывести одинаковые элементы)
В силу неопытности, не могу разобраться как сравнить их. Помогите разобраться пожалуйста.
А ещё надо разработать метод слияния этих массивов(но без решения предыдущей задачи, я не справлюсь )

Пытался как-то так, но не получилось:
C++
1
2
3
4
5
6
7
void array::srav() //метод сравнения массивов
{ for (int i=0; i<number; i++)
{
for (int j=0; j<number2; j++)
{   if arr[i] == arr2[j] 
    cout << arr[i] << " ";
}}}
Вот класс второго массива(первый аналогично):
C++
1
2
3
4
5
6
7
8
9
10
class array2
{
public:
    array2(int number2);
    void print2();
    void srav();
private:
    int number2;
    int *arr2;
};
Заполнение второго массива:
C++
1
2
3
4
5
6
7
array2::array2(int Number2)
{ if( Number2 > 0 ) number2 = Number2;
   else throw -1;
   arr2 = new int[number2]; 
   for (int i=0; i<number2; i++)
   cin >> arr2[i];
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнить два массива, заданных классами (C++):

Найти среднее арифметическое элементов массива, сравнить два массива поэлементно - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; void main() { float x, y, SA; int K, KOL,...

Сравнить два массива - C++
Подскажите пожалуйста как решить задачу: Нужно сравнить два массива, проверить все элементы на совпадение и если они совпадают то вывести...

Как сравнить два массива - C++
Здравствуйте форумчане! Помогите пожалуйста, скажите как сравнить два массива побитово и побайтово. В инете ни чего не могу найти((

Сравнить логически два массива - C++
Сравнить , используя логическое или(||) два одномерных массива (А и В) и записать результат в массив С Массивы создал , но не знаю как...

Сравнить два массива одинаковой длины - C++
Сравниваю два массива длиной три. Сравнивать нужно с конца. #include &lt;iostream&gt; using namespace std; int main (){ int array; ...

Как сравнить два элемента массива типа string? - C++
Задание. Вычислить какая компания чаще всего участвовала в роли истца. У меня есть массив в котором хранятся названия компаний ...

8
Поночка
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 22
11.01.2013, 00:13 #2
Цитата Сообщение от skiff. Посмотреть сообщение
(Вывести одинаковые элементы)
Если понимать под одинкавыми элементами стоящие на тех же местах и равные друг другу, то нужно организовать ОДИН цикл по МЕНЬШЕМУ массиву, и там обращаться к элементам, стоящим на одном месте и сравнивать их между собой...

Мне так, кажется....
0
skiff.
6 / 6 / 2
Регистрация: 10.09.2011
Сообщений: 87
11.01.2013, 12:50  [ТС] #3
Ну примерно то понятно конечно. Меня интересует как организовать вообще этот метод. В каком из классов объявлять его. Собственно интересует наглядный пример или решение.
0
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
11.01.2013, 13:38 #4
skiff., вообщем вот код,если что заходите измените
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class array {
private:
    int *boom;
    size_t size,location;
 
public:
    array(size_t sizeA) {
        size = sizeA;
        location = 0;
        boom = new int[size];
    }
    ~array() {
        delete[] boom;
    }
 
    void srav(const array &arr) {
        size_t i,j;
        for (i = 0; i < size;++i)
            for (j = 0;j < arr.size;++j)
            {
                if (boom[i] == arr.boom[j]) {
                    cout << "Элемент boom[" << i << "] совпадает с " << "arr[" << j << "] значением : " << arr.boom[j] << "\n";
                }
            }
    }
 
    void insert(int x) {
        boom[location++] = x;
    }
 
 
};
 
int main(void) {
    setlocale(LC_ALL,".1251");
    array s(30),a(30);
    int i;
    
    for (i = 0;i < 30;++i) {
        s.insert(i);
        a.insert(i);
    }
 
    s.srav(a);
 
return 0;
}
Логика очень проста,есть класс,у него имеются 3 приватных переменных,2 метода,конструктор и деструктор.

в момент инициализация конструктора,присваиваем размеру массива размер location нулю,location это переменная для insert,что бы знать куда в следующий раз добавлять переменную в массив.

метод insert довольно таки проста.

метод srav,тоже

в данном случаи у нас srav метод класса,по этому к boom-у мы имеет доступ не явный.

создаем 2 цикла,берем из boom его длину, элементы,то же делаем и с arr.boom,и сравниваем наши boom и arr.boom,в данном случии у нас получается что мы проходим по всем элементам arr.boom,благодаря двойному циклу

Надеюсь хоть чуть-чуть было понятно
1
skiff.
6 / 6 / 2
Регистрация: 10.09.2011
Сообщений: 87
11.01.2013, 14:00  [ТС] #5
xADMIRALx, что-то я не понял как второй массив тут появляется )) arr.boom который
0
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
11.01.2013, 14:11 #6
skiff., что именно не понял?
C++
1
2
3
4
5
6
7
в классе {
void srav(const array &arr)
}
в майне {
array s(30),a(30);//объявили
s.srav(a);//вот тут передаем a,srav получает(arr);
}
0
skiff.
6 / 6 / 2
Регистрация: 10.09.2011
Сообщений: 87
11.01.2013, 14:22  [ТС] #7
а заполняются они в методе insert чтоли? Просто я не вижу cin
0
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
11.01.2013, 14:27 #8
skiff.,

Не по теме:

хехе,оказывается,всё гораздо глубже


заполняется они в цикле,который вызывает метод insert,и передает int-овский аргумент...

можете сделать что бы у вас считывалось с клавиаторы тобишь cin,надеюсь сами сделаете...
0
skiff.
6 / 6 / 2
Регистрация: 10.09.2011
Сообщений: 87
11.01.2013, 15:33  [ТС] #9
Цитата Сообщение от xADMIRALx Посмотреть сообщение
skiff.,

Не по теме:

хехе,оказывается,всё гораздо глубже


заполняется они в цикле,который вызывает метод insert,и передает int-овский аргумент...

можете сделать что бы у вас считывалось с клавиаторы тобишь cin,надеюсь сами сделаете...
А, ну он цифрами от 1 до 29 заполняет. Просто ненаглядно, вот и не понял))

Добавлено через 51 минуту
Ну в любом случае не получается ваш вариант подцепить к себе =( Мне всё таки надо использовать два отдельных класса.
Может как-то через дружественную функцию соединить два массива?
0
11.01.2013, 15:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 15:33
Привет! Вот еще темы с ответами:

Поэлементно суммировать два заданных массива - C++
Подскажите пожалуйста как решить задачу: Дано два массива 1-10, нужно чтобы первый цифр первого массива суммировался с первый цифром...

Сравнить два одномерных массива и найти самую длинную их общую часть - C++
как сравнить два одномерных массива и найти самую длинную их общую часть? сравниваю массивы типа char. допустим мы нашли общий...

Сравнить два массива и запомнить номер первых двух совпавших элементов - C++
нужно сравнить два массива,например 1:23,19,26,18,22,11 и запомнить номер первых двух совпавших элементов... ...

Даны два массива. Найти среднее арифметическое элементов каждого и сравнить эти значения - C++
Даны два массива. Найти среднее арифметическое элементов каждого и сравнить эти значения


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.