Форум программистов, компьютерный форум CyberForum.ru

Работа с массивами в С++ . Поиск общих элементов двух массивов - C++

Восстановить пароль Регистрация
 
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
14.09.2013, 18:32     Работа с массивами в С++ . Поиск общих элементов двух массивов #1
Здравствуйте! Есть такой у меня код .
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
48
49
50
51
52
53
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
int main()
{   int h3 [10];                                    //массив для общих элементов
    ofstream file("D:\\First.DAT");                //создаём объект класса ofstream для записи его в файл
    int h4[20] = {5,6,3,66,59,9,234,67,1,57,345,75,99,234,342,333,232,144,2,55}; //элементы массива h4
    file<<"\n h4:";
    for(int i = 0; i < 20; i++)
    file << h4[i] << " ";
    file<<endl;
    int h5[12]={9,232,233,234,345,100,111,56,88,355,55,60};                     //элементы массива h5
    file<<"\n h5:";
    for(int j=0; j<12; j++)
    file<<h5[j]<<" ";
    file.close();                                                               
    
    ifstream file2("D:\\First.DAT");                                            //вывод из файла
    char line[1000];
    while(!file2.eof())
    {file2.getline(line,sizeof(line));
    cout<<line<<endl;
}
file2.close();                                                                 //закрытие файла
 
 int t=0;    
 int k=0;
 while (t<20)
      {for (int i=0; i<12; i++)//прогоняет все элементы первого массива, сравнивая с
        {                     //одним (j-м) элементом второго массива
         int p=0;       
           if (h5[i]==h4[t]) //элементы двух массивов одинаковы
              {for (int l=0; l<20; l++)
                  if (h5[i]==h3[l]) //проверяет наличие подобного элемента в 3-м массиве
                    p+=1;   
               if (p==0) //если элементы двух массивов одинаковы и он(элемент) не нашёлся в 3 массиве
                    {h3[k]=h5[i];
                     cout << k+1 << " Element h3 = " << h3[k]<< endl;
                     k+=1;
                     }}}
          t++;}//начинаем прогон следующего элемента второго массива
 
 ofstream file3("D:\\TWO.DAT");   //запись результата  в файл
 file3<<"\n h3:";
 for(int k=0;k<10;k++)
 file3<<h3[k]<<" ";
 file3.close();
 
    getch();
    return 0;
}
Помогите , пожалуйста , разобраться , как работает алгоритм нахождения общих элементов, без повторений ?
Я понимаю , что нужно создать 3-ий массив , записывать в него результат и каждый раз проверять -нет ли в нём уже числа , которое хотим записать .

Как понять строчку
C++
1
 while (t<20)
?
Что такое переменная p? Зачем она нужна?

Помогите разобраться - зачем нужны k,t,,l ?
Напишите , пожалуйста , предназначение каждого . Буду очень благодарен Вам !

И ещё такой вопрос : как узнать размерность массива , где будут хранится общие элементы ?
При записи в файл результата выводятся сначала общие элементы , а дальше какие-то непонятные числа с "-" .

Помогите , пожалуйста , разобраться .
Спасибо за Ваши ответы .
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 18:32     Работа с массивами в С++ . Поиск общих элементов двух массивов
Посмотрите здесь:

C++ Нахождение общих элементов двух массивов.
Объявить массив не более чем 15 элементов. Вывести обратные по модулю величины и проверить изменились ли адреса элементов этих двух массивов. C++
Работа с двумерными массивами (Определить произведение элементов в тех строках, которые не содержат нулевых элементов) C++
Работа с массивами, замена элементов массива C++
C++ Сравнение элементов двух массивов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
14.09.2013, 18:40     Работа с массивами в С++ . Поиск общих элементов двух массивов #2
VASYA_A, код аццкий. Слишком много magic numbers, жуткое форматирование, ну и названия переменных конечно. Для сортированных последовательностей можно воспользоваться стандартным алгоритмом std::set_intersection.
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
14.09.2013, 18:44  [ТС]     Работа с массивами в С++ . Поиск общих элементов двух массивов #3
Цитата Сообщение от Tulosba Посмотреть сообщение
VASYA_A, код аццкий. Слишком много magic numbers, жуткое форматирование, ну и названия переменных конечно. Для сортированных последовательностей можно воспользоваться стандартным алгоритмом std::set_intersection.
А этот алгоритм объяснить не сможете ?)
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
14.09.2013, 18:55     Работа с массивами в С++ . Поиск общих элементов двух массивов #4
копируй один массив в std::set и проверяй второй на принадлежность к множеству
самый простой вариант
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
14.09.2013, 19:02  [ТС]     Работа с массивами в С++ . Поиск общих элементов двух массивов #5
Цитата Сообщение от Belfegor Посмотреть сообщение
копируй один массив в std::set и проверяй второй на принадлежность к множеству
самый простой вариант
Как это сделать ?
Я никогда не сталкивался с set.

Можно пример ?
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
14.09.2013, 19:46     Работа с массивами в С++ . Поиск общих элементов двух массивов #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <set>
using namespace std;
 
int main() {
    vector <int> first = {1, 456, 235, 7, 3456, 7, 23, 5};
    vector<int> second = {2, 3, 1, 7};
    set<int> s;
    for (auto i : first) {
        s.insert(first.begin(), first.end());
    }
    for (auto i : second) {
        if (s.count(i))cout << i << endl;
    }
    return 0;
}
Yandex
Объявления
14.09.2013, 19:46     Работа с массивами в С++ . Поиск общих элементов двух массивов
Ответ Создать тему
Опции темы

Текущее время: 09:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru