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

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

Войти
Регистрация
Восстановить пароль
 
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
#1

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

14.09.2013, 18:32. Просмотров 717. Ответов 5
Метки нет (Все метки)

Здравствуйте! Есть такой у меня код .
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 ?
Напишите , пожалуйста , предназначение каждого . Буду очень благодарен Вам !

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

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

Работа с массивами в С++ . Поиск отличающихся элементов двух массивов - C++
Здравствуйте . Есть два массива : int a={1,2,3,4,5}; int b={1,2,4,6,9}; int c;

Работа с массивами в С++ . Поиск отличающихся элементов двух строковых массивов - C++
Как заполнить массив элементами , которые отличают массивы между собой? Например , есть 1-ый массив ( &quot;1.txt&quot;, &quot;2.txt&quot;) и ест 2-ой...

Нахождение общих элементов двух массивов - C++
Дали задачу на курсовую, а я в С++ вообще балда, помогите задачку написать, плз! Условие такое: Нахождение общих элеменвто двух...

Функция вывода на экран всех общих элементов двух одномерных массивов - C++
Доброй ночи. Пожалуйста помогите:cry: Начали новую тему, но не могу понять, какой нужно написать алгоритм. Задача: Функция...

Построить вектор из общих элементов двух векторов - C++
Помогите с написание программы, нет идей вообще :( Задано два вектора действительных чисел х и у, каждый из которых имеет n элементов....

Работа с двусвязным списком, поиск и перемена местами двух элементов в списке - C++
Здравствуйте! Есть список List http://pastebin.com/tNSztz50 Не могу разобраться, как найти элемент в списке по его значению, и как...

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

Можно пример ?
0
Belfegor
Ghost
173 / 173 / 6
Регистрация: 16.09.2012
Сообщений: 526
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2013, 19:46
Привет! Вот еще темы с ответами:

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

Работа с массивами, замена элементов массива - C++
День добрый Товарищи. Взялся на днях за задачу, но в процессе реализации уперся в стену (что именно - укажу ниже). Собственно текст...

Объявить массив не более чем 15 элементов. Вывести обратные по модулю величины и проверить изменились ли адреса элементов этих двух массивов. - C++
Объявить массив не более чем 15 элементов. Вывести обратные по модулю величины и проверить изменились ли адреса элементов этих двух...

Сравнение элементов двух массивов - C++
#include &lt;iostream&gt;; #include &lt;iostream&gt; #include&lt;locale&gt; using namespace std; int main() { setlocale(LC_ALL,&quot;Rus&quot;); int a; ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
14.09.2013, 19:46
Ответ Создать тему
Опции темы

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