Wyznaczenie elementów niewspólnych dwóch tablic

Problemy i ich rozwiązania w C++.
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Wyznaczenie elementów niewspólnych dwóch tablic

Post przez Malutki »

Czesc chciałbym prosic o pomoc gdyz nie moge sobie poradzic z problemem .

Mam takie zadanie :

ze dane sa dwie tablice A i B trzeba wyznaczyc elementy ktore sa w tablicy A ale nie ma ich w tablicy B i odwrotnie zrobilem cos takiego:

Code: Zaznacz cały

#include <iostream>
using namespace std;


int tabA[]={1,2,2,2,3,4,4,4,5,8,10}; //tablica A
int tabB[]={2,2,4,4,4,4,10,16,20};  //tablica B
int wielkosc_tabA=sizeof(tabA)/sizeof(int);//ilosc elementow w tablicy B
int wielkosc_tabB=sizeof(tabB)/sizeof(int); //ilosc elementow w tablicy B
int licznik=0; //licznik wyznaczający czy dana wartosc sie powtarza w tablicy A i B
int szukana=0;  //szukana pobiera liczbe z tabeli A i sprawdza czy znajduje sie w tabeli B jesli sie nie znajduje w tabeli B to dodaje 1 do licznika;
int temp=0;

int main(int argc, char **argv)

{
	cout << "wielkosc tablicy A = "<<wielkosc_tabA;
	cout << "\nwielkosc tablicy B = "<<wielkosc_tabB <<endl;

      
      
        for(int i=0;i<wielkosc_tabA ;i++)
             {
                temp=szukana;//0
                szukana=tabA[i];//1

        for(int i=0; i<wielkosc_tabB;i++)
                {
                 
            if(tabB[i]!=szukana && szukana !=temp)
                      {
                        licznik++;
                      }
                      
                  }
               
        }
                 
cout <<"Ilosc elementow nie zawierajacych sie w A ani w B = "  <<licznik << endl;
}
Jak porownuje element tablicy A czy istnieje w tablicy B to mi glupoty wywala ,wiem ze cos chrzanie ale przez caly dzien juz nie doszedlem jak algorytm poprawic tak zeby bylo dobrze :) Prosze wiec o pomoc .

Zmieniam temat, dokładam znacznik code - Morfidon
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: prosba o pomoc w rozwiazaniu probelmu

Post przez Morfidon »

Hej,

Tak dla upewnienia się, czy chodzi Ci o zbiór liczb: ( (A suma B) \ (A część wspólna B) )?

Pozdrawiam
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: prosba o pomoc w rozwiazaniu probelmu

Post przez Malutki »

nie wiem jak to wytłumaczyć chodzi mi o to ze sa dwie tablice tablica A i tablica B w których są elementy
int tabA[]={1,2,2,2,3,4,4,4,5,8,10}; //tablica A
int tabB[]={2,2,4,4,4,4,10,16,20}; //tablica B

chodzi o to zeby zrobic algorytm ktory wyznacza ilość elementow nie bedacych ani w tablicy a ani b np: takimi wartosciami sa 1 ,3 ,5,8,16,20.
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: prosba o pomoc w rozwiazaniu probelmu

Post przez Morfidon »

Tak oto mi chodziło.

Code: Zaznacz cały

#include <iostream>
#include <vector>
using namespace std;

vector<int> tab;

int tabA[]={1,2,2,2,3,4,4,4,5,8,10}; //tablica A
int tabB[]={2,2,4,4,4,4,10,16,20};  //tablica B
int wielkosc_tabA=sizeof(tabA)/sizeof(int);//ilosc elementow w tablicy B
int wielkosc_tabB=sizeof(tabB)/sizeof(int); //ilosc elementow w tablicy B
int licznik=0; //licznik wyznaczający czy dana wartosc sie powtarza w tablicy A i B
int szukana=0;  //szukana pobiera liczbe z tabeli A i sprawdza czy znajduje sie w tabeli B jesli sie nie znajduje w tabeli B to dodaje 1 do licznika;
int temp=0;

int main(int argc, char **argv)
{
   cout << "wielkosc tablicy A = "<<wielkosc_tabA;
   cout << "\nwielkosc tablicy B = "<<wielkosc_tabB <<endl;

      
   bool repeated = false;
   for (int i = 0; i < wielkosc_tabA; i++)
   {
       repeated = false;
       for (int j = 0; j < wielkosc_tabB; j++)
       {
           if (tabA[i] == tabB[j])
            repeated = true;
       }
       
       if (!repeated)
          tab.push_back(tabA[i]);
   }   
   
   for (int i = 0; i < wielkosc_tabB; i++)
   {
       repeated = false;
       for (int j = 0; j < wielkosc_tabA; j++)
       {
           if (tabB[i] == tabA[j])
            repeated = true;
       }
       
       if (!repeated)
          tab.push_back(tabB[i]);
   }    
         
   cout << " ( (A suma B) \\ (A czesc wspolna B) )" << endl;
  	for (int index = 0; index < tab.size(); index++) 
   {
			cout << "Element " << (index + 1) << ": " << tab.at(index) << endl;
	}
   
}
To tak na szybkiego, pewnie można to zrobić optymalniej (pod względem szybkości), ale już wiesz o co biega :)
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: Wyznaczenie elementów dwóch tablic

Post przez Malutki »

Dziekuje bardzo za kod ale czy nie dało by się tego w jakiś prostrzy sposób dopiero poczatkuje w programowaniu :) i nie bardzo wiem o tak mysle klasie vektor :) o ile sie nie myle ze to klasa :)
To jest projekt na algorytmy , i bede musiał go jakos jeszcze opisac jak działa.Myslalem tez czy nie połączyć tablic w 1 i wtedy nie sprawdzac , nie wiem czy to dobry pomysl ?
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Wyznaczenie elementów dwóch tablic

Post przez Morfidon »

Vector to jest coś w stylu ArrayList z Javy.

Możesz skorzystać zamiast z wektora z normalnej tablicy, lecz musisz z góry założyć jej wielkość lub się bawić wskaźnikami.

Co do pytania, dotyczącego łączenia - tak też można.
Post Reply