Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пересечение одномерных массивов на С++ 
:(
    Опции темы
drakon803
Дата 19.10.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.12.2007

Репутация: нет
Всего: нет



Помогите с решением задачи. 
Даны 2 целочисленных массива.Первый 1,2,2,3,4,5,5 и второй 0,2,3,5.Найти элементы,входящие как в первый ,так и во второй массив,но без повторов и вывести их на экран в виде третьего массива.
вот текст проги,но кроме 2,она никакой элемент больше не выводит.
int a[7]={1,2,2,3,4,5,5};
int b[4]={0,2,3,5};
int c;
for (int j=0;j<7;j=j+1)
{
for (int i=0;i<4;i=i+1)
if (a[j]==b[i])
{
c[x]=a[j];
cout << c[x++]<< '\n';
}
}
Сначало формируется массив с из элементов,которые есть и в массиве а и в массиве в.Удаление одинаковых элементов оформляется через булеву переменную.Но как??? все это объяснить компу на С++ -  не знаю.
PM MAIL   Вверх
Lazin
Дата 19.10.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Код

#include <set>
#include <iostream>

int a[7]={1,2,2,3,4,5,5};
int b[4]={0,2,3,5};
std::set<int> aset;

int main() 
{
    for (int i = 0; i != 7; ++i)
    {
        aset.insert(a[i]);
    }
    
    for (int i = 0; i != 4; ++i)
    {
        if (aset.find(b[i]) != aset.end())
            std::cout << b[i] << std::endl;
    }
}


Это сообщение отредактировал(а) Lazin - 19.10.2008, 10:29
PM MAIL Skype GTalk   Вверх
drakon803
Дата 19.10.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.12.2007

Репутация: нет
Всего: нет



а как вывести результат на экран? я через cout  и cin пробовал-не выводится.
PM MAIL   Вверх
DRUID3
Дата 19.10.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 463
Регистрация: 20.6.2005
Где: Kyyiv

Репутация: нет
Всего: 9



Цитата(drakon803 @  19.10.2008,  10:45 Найти цитируемый пост)
а как вывести результат на экран? я через cout  и cin пробовал-не выводится. 

Вам дали рабочий пример... smile 


--------------------
Every time if you use Linux, you are joined to the communism...
практика - критерий истины ... отделенной от нас пропастью субъективного восприятия...
PM MAIL WWW Skype   Вверх
_GRIN_
Дата 19.10.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



Lazin, твой метод не универсален (но прост и быстр smile ), если сделать int b[4]={0,2,2,5};
 (т.е. двойку повторить два раза, то он и выведет ёё два раза)
, т.е. если копировать в другой массив, то он и скопирует её два раза. а в задании сказано

Цитата

но без повторов


на скорую руку набросал такой вариант, думаю при желании код можно упростить
Код

#include <vector>
#include <stdio.h>

void main()
{
    int a[7]={1,2,2,3,4,5,5};
    int b[4]={0,2,2,5};
    std::vector<int>result;
    result.clear(); //очищае не локальный динамический массив. 
    for(int i=0;i<7;i++)
        for(int j=0;j<4;j++)
            if(a[i]==b[j])
            {//если элемент из второго массива равен элементу из первого массива
                //добавляем элемент в результирующий массив
                result.push_back(a[i]);
                //проверяем нет ли уже такого элемента в результирующем массиве
                for(int k=0;k<result.size()-1;k++)
                    //если есть, то удаляе только что добавленный элемент из результиующего массива
                    //(что бы не было повторов :) )
                    if(a[i]==result[k])result.pop_back();
            }
    //печатаем результат
    for(int i=0;i<result.size();i++)
        printf("result[%i] = %i\n",i,result[i]);
}


*второй массив сделал с двумя двойками для демонстрации smile

Это сообщение отредактировал(а) _GRIN_ - 19.10.2008, 12:04


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
Lazin
Дата 19.10.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(_GRIN_ @  19.10.2008,  12:04 Найти цитируемый пост)
если сделать int b[4]={0,2,2,5};

Код

#include <set>
#include <iostream>
int a[7]={1,2,2,3,4,5,5};
int b[4]={0,2,2,5};
std::set<int> aset;
int main()
{
    for (int i = 0; i != 7; ++i)
    {
        aset.insert(a[i]);
    }

    for (int i = 0; i != 4; ++i)
    {
        if (aset.find(b[i]) != aset.end())
        {
            aset.erase(b[i]);
            std::cout << b[i] << std::endl;
        }
    }
}

bugfix^^^
PM MAIL Skype GTalk   Вверх
taiven
Дата 19.10.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Что за мода новичков всякикми STL`ами кормить? 
Код

#include <iostream.h>

int main(int argc, char* argv[])
{
    int a[7]={1,2,2,3,4,5,5 };
    int b[4]={0,2,3,5};
    int c[4];
    int cindex = 0;
    bool check = true;

    for (int i = 0; i < 7; i++)
        for (int k = 0; k < 4; k++)
            if (a[i]==b[k])
            {
                for(int m = 0; m < cindex; m++)
                {
                    if(b[k]==c[m])
                    {
                        check = false;
                        break;
                    }
                    else check = true;
                }
                if(check) c[cindex++] = b[k];
            }

    for(int m = 0; m < cindex; m++) cout << c[m] << " ";

    cout << "\n";
    system("pause");
    return 0;
}


Не ручаюсь, что работает  smile 
PM   Вверх
drakon803
Дата 19.10.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.12.2007

Репутация: нет
Всего: нет



Господа эксперты!
Объясните,как заставить прогу выводить результат пересечения?Я забиваю код,на секунду появляется черный экран(пустой) и исчезает.Как это прописать в проге?
PM MAIL   Вверх
_GRIN_
Дата 19.10.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



Цитата

Что за мода новичков всякикми STL`ами кормить? 


taiven, согласен, может и не стоит, но так и тянет (нативно) smile
к тому же динамический массив - если использовать через указатель и длину - то имхо ещё более мудрёно для новичка получится,
а так и пример вполне читаемый и алгоритм достаточно универсален в плане размера выходного массива (можно конечно и на отдельную темплейт-функцию завести, но удержался smile).

но пофиксинный пример Lazin'а и впраду лучше моего - респект



Это сообщение отредактировал(а) _GRIN_ - 19.10.2008, 13:11


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
Lazin
Дата 19.10.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(drakon803 @  19.10.2008,  12:52 Найти цитируемый пост)
Объясните,как заставить прогу выводить результат пересечения?Я забиваю код,на секунду появляется черный экран(пустой) и исчезает.Как это прописать в проге? 

программа выводит результат и сразу закрывается, что-бы этого не происходило, можно в ф-ю main добавить system("pause");, а можно запустить прогу из консоли smile 
PM MAIL Skype GTalk   Вверх
taiven
Дата 19.10.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Цитата

можно конечно и на отдельную темплейт-функцию завести, но удержался

 smile 
Цитата

Объясните,как заставить прогу выводить результат пересечения?Я забиваю код,на секунду появляется черный экран(пустой) и исчезает.Как это прописать в проге?

Кроме
Код

system("pause")

можно еще  
Код

#include <conio.h>
//...
getch();


PM   Вверх
Lazin
Дата 19.10.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(taiven @  19.10.2008,  12:47 Найти цитируемый пост)
Что за мода новичков всякикми STL`ами кормить?

у тебя без STL-ов сложность O(M*N), а у меня с STL-ами O(M*ln(M) + N*ln(N)) smile 
PM MAIL Skype GTalk   Вверх
_GRIN_
Дата 19.10.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



drakon803, допиши
    getchar();

в конец main() - тогда пока не нажмёшь чё-нить на клаве - не выйдешь smile


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
drakon803
Дата 19.10.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.12.2007

Репутация: нет
Всего: нет



Я,видимо,очень тупой студент.Но ниодна прога,что здесь выложена,у меня не работает.Или выдает ошибки и не запускается,или не показывает результата.вот.
PM MAIL   Вверх
Lazin
Дата 19.10.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



ты каким компилятором пользуешься?
PM MAIL Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.