Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2011, 04:14   #1
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
Сообщение Пересечение множеств. С++

Плохо разбираюсь в функциях и адресах, прошу помощи в написании алгоритма пересечения двух множеств на языке С++, наработки прилагаю. Так называемое пересечение реализовать не сложно, загвоздка в выводе результата.Сразу говорю с инклюдами всё в порядке.
Код:
#include "stdafx.h"

int cmp(int *p, int *q);
const short SIZE=7;

	int  arr[SIZE]={1,2,3,4,7,5,8};
	int  arg[SIZE]={1,5,3,4,5,5,1};
	int  arj[1]={0};
int main(){
	std::setlocale(LC_ALL, "Russian_Russia.1251");
	
	int *p=arr;
	int *q=arg;
	std::cout<<"Массив А:"<<std::endl;
	for(int i=0;i<SIZE;i++) {
		std::cout<<*p<<" ";
		++p;
	}
	std::cout<<"\nМассив Б:"<<std::endl;
		for(int i=0;i<SIZE;i++) {
		   std::cout<<*q<<" ";
		   ++q;
		}
	q=arg;
	p=arr;
	std::cout<<"\nВ результат пересечения множеств А и Б получим множество В:"<<std::endl;
	cmp(p, q);
return 0;
}

	int cmp(int *p, int *q){
		const short SIZE=7;
	int*d=arj
	       for(int *p=arr;p<arr+SIZE;++p){
			   for(int *q=arg;q<arg+SIZE;++q){
			      if(*p==*q)
				   *d=*p;
				  }
		   }
		   for(*d=arj;d<arj+1 ;++d){
			   std::cout<<*d<<" ";
		   }
		    d=arj;
		   return(*p,*q);
	 }
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 13.03.2011, 10:32   #2
optimator
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 92
По умолчанию

Цитата:
Сразу говорю с инклюдами всё в порядке.
Неправда, <iostream> и <clocale> не подключены.
Я бы упростил функцию cmp()
Код:
void cmp(int *p, int *q,short size){
		
		for(int i = 0;i<size;i++) 

			if(p[i] == q[i]) 

				std::cout<<p[i]<<" ";
		
	 }
optimator вне форума Ответить с цитированием
Старый 13.03.2011, 10:42   #3
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

держи нямку

Код:
#include <iostream>

#define Min(a, b) ((a < b) ? a : b)

using namespace std;


unsigned short fix(const int * f, const unsigned short fSize, const int * s, const unsigned short sSize, int * r) {
  unsigned short
    i,
    j,
    count = 0;

  for (i = 0; i < fSize; i++)
    for (j = 0; j < sSize; j++)
      if (f[i] == s[j])
        r[count++] = f[i];

  return count;
}

int main() {
  int
    * firstSet = NULL,
    * secondSet = NULL,
    * resultSet = NULL;
  unsigned short
    i,
    firstCount = 0,
    secondCount = 0,
    resultCount = 0;

  cout << "Enter sets dimensions: ";
  cin >> firstCount >> secondCount;
  resultCount = Min(firstCount, secondCount);

  if (firstCount && secondCount) {
    firstSet = new int [firstCount];
    secondSet = new int [secondCount];
    resultSet = new int [resultCount];

    cout << "\nFill first set\n";
    for (i = 0; i < firstCount; i++)
      cin >> firstSet[i];

    cout << "\nFill second set\n";
    for (i = 0; i < secondCount; i++)
      cin >> secondSet[i];

    resultCount = fix(firstSet, firstCount, secondSet, secondCount, resultSet);

    cout << "\n---Getted set---\n";
    for (i = 0; i < resultCount; i++)
      cout << resultSet[i] << " ";

    if (firstSet)
      delete [] firstSet;
    if (secondSet)
      delete [] secondSet;
    if (resultSet)
      delete [] resultSet;
  }

  //---
  cout << "\n\n\tPress any key for exit...";
  flushall();
  getchar();
  return 0;
};
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]

Последний раз редактировалось RUSt88; 13.03.2011 в 10:45.
RUSt88 вне форума Ответить с цитированием
Старый 13.03.2011, 11:24   #4
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
Сообщение

Спасибо большое) Теперь буду разбираться как что работает)

Проблема маленькая с выводом, пример:
А(1,2,3,1)
Б(1,2,3,4)
Результат:
1,2,3,1
Должно быть 1 2 3
В твоем коде в какой массив записан результат?
Злостный анимешнег =^.^=

Последний раз редактировалось Stilet; 13.03.2011 в 12:17.
Демик вне форума Ответить с цитированием
Старый 13.03.2011, 18:04   #5
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

да, я написал по простому, ты сам должен уже разобрать - во-первых, в моем коде нет проверки на многократное повторение чисел из множества, во-вторых, может произойти выход за пределы массива

но это решается буквально двумя условиями в коде
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти разность и пересечение множеств (синтаксис СИ) vad-92 Общие вопросы C/C++ 4 14.06.2010 13:50
Пролог!!!!!" Пересечение множеств giga1989 Помощь студентам 0 28.04.2010 21:27
пересечение двух множеств Олежек Фриланс 7 10.03.2010 18:46
перетин множеств designer Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2009 12:17