[C++] Poprawienie programu

0

Witam
Mam kod programu, jednak muszę zedytować jego działanie. Obecnie program ten liczy ilość elementów w tablicy A, które nie znajdują się w tablicy B i na odwrót.
Natomiast ja chciałbym, żeby program liczył, ilość elementów w tablicy A, znadującej się również w tablicy B, przy czym chodzi o ilość jednokrotnych elementów ( w tym przypadku jest to 2,4 i 10 więc odpowiedź brzmi 3.)
Pozdrawiam i liczę na pomoc

#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;
   }
   
}
0

Posortuj tablice a i b, potem sprawdzaj czy pierwszy element z a jest w b, jeśli tak to zwiększasz licznik. Potem patrzysz czy przypadkiem a[i]==a[i+1] - jeśli tak to omijasz ten element i lecisz dalej.

0

Spróbowałem, jednak pokazuje mi licznik 1. Nie jestem w tym ogarnięty, niestety.


#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 szukana=0;  //licznik wyznaczający czy dana wartosc sie powtarza w tablicy A i B
int temp=0;
 
int main(int argc, char **argv)
{
  
        bool repeated = true;
   for (int i = 0; i < wielkosc_tabA; i++)
   {
szukana= 0;
             repeated = true;
       for (int j = 0; j < wielkosc_tabB; j++)
       {
 
           if (tabA[i] == tabB[j])
 
  repeated = false;
 

       }
         if (!repeated)
 
        cout << tabA[i] << endl;
szukana++;
 
 
     
   }   
 
 cout << szukana << endl;
 
  }
0

Licznik miałeś zwiększać, jak tabA[i] = tabB[i], a nie jak literki w A się nie powtarzają... W dodatku nigdzie nie sprawdzasz czy się powtarzają. repeated równa się u ciebie true, chyba że tabA[i] = tabB[i]. Totalnie bez sensu.

0

W dalszym ciągu mi nie wychodzi. Miałem C++ pare lat temu w szkole, ale mało z tego pamiętam. Mógłbyś poprawić ten kod, żeby hulał?

0

Przepraszam za post nad postem, ale nie moge edytować.
Udało mi się zrobić tak, żeby liczyło wspólne elementy, ale nie daje rady z tym, żeby liczyło jednokrotnie dany element.
Może ktoś podpowie w którym miejscu i mniewięcej co mam wpisać.

0

Pokaż kod. Bo jeśli chociaż częściowo ci działa, to wątpliwe by był podobny do tego z postu wyżej. Z resztą nawet gdyby był podobny, to poprawiać kod w oparciu o kod podobny do niego jest doprawdy ciekawym pomysłem.

0

Już udało mi się zrobić :D Dzięki za wskazówki

#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 szukana=0;  //licznik wyznaczający czy dana wartosc sie powtarza w tablicy A i B
int temp=0;
 
int main(int argc, char **argv)
{
  
       	 bool repeated = true;
   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)
 {
if (tabA[i] != tabA[i+1])
{

 szukana++;
}
      	  }
  }   
 
 cout << szukana << endl;
 
  	 }

1 użytkowników online, w tym zalogowanych: 0, gości: 1