Wyszukiwanie binarne w tablicach obiektów.

0

W moim programie tworzę klase w której przechowuje 2 wartości- pomiar i krotność. Tworzę tablice obiektów klasy, do której wpisuje dane(pomiar, krotnosc), a potem sortuję dane od najwiekszego do najmniejszego, wypisując obok ich krotności. Do innej tablicy(pomiary) wpisuję po kolei pomiary które chce wyszukać. Zależy mi na tym, żeby za pomocą wyszukiwania binarnego wyszukać dane pomiary i wypisać ich krotność. Program jednak nie działa, a ja nie mam pojęcia co jest nie tak :x. Wklejam fragment kodu odpowiedzialny(a raczej nieodpowiedzialny :f) za wyszukiwanie binarne.

void sortowanie(Klasa Tablic[],int rozmiar)
{
    for(int i=0;i<rozmiar-1;i++)
{
    for(int j=i+1;j>0;j--)
    {
        if(Tablic[j].pomiar > Tablic[j-1].pomiar)
        {
            int h = Tablic[j].pomiar;
            Tablic[j].pomiar = Tablic[j-1].pomiar;
            Tablic[j-1].pomiar = h;
            int c = Tablic[j].krotnosc;
            Tablic[j].krotnosc= Tablic[j-1].krotnosc;
            Tablic[j-1].krotnosc = c;
        }
    }
}
} 
class Klasa
{
public:
    unsigned int pomiar;
    unsigned int krotnosc;
}; 
   
int szerokosc;
cin >> szerokosc;
          tablica[i]=new Klasa[szerokosc];      
 for(int i=0;i<szerokosc;i++)
          {
              cout << "Liczba ";
              cin>>tablica[i].pomiar;
              cout << "Krotnosc ";
              cin>>tablica[i].krotnosc;
          }
  }
unsigned int liczbapomiarow;
      cout << "Ile krotnosci sprawdzic? ";
      cin >> liczbapomiarow;
      unsigned int *pomiary = new unsigned int[liczbapomiarow];             
      for(unsigned int k=0;k<liczbapomiarow;k++)
      {
          cout << "Czego krotnosc sprawdzic? ";
          cin >> pomiary[k];
      } 
sortowanie(tablica,szerokosc);
for(int id=szerokosc-1;id>=0;id--)
{
    if(tablica[id].krotnosc!=0)
    {
    cout<<tablica[id].pomiar<<" ";
    cout<<tablica[id].krotnosc<<" ";
    }
}
cout<<endl;
for(int i=0;i<liczbapomiarow;i++)
{
    int low = 0;
    int high = dlugosctablicy-1;
    int mid=0;
    while (low <= high)
    {
        mid=(low+high) / 2;
        if(pomiary[i]==tablica[mid].pomiar)
        { 
            cout<<tablica[mid].krotnosc<<" ";
            break;
        }
        if (pomiary[i] > tablica[mid].pomiar)
        {
            low=mid+1;
        }
        else
        {
            high=mid-1;
        }
    }
} 

W skrócie- chodzi mi to, że gdy wyszukiwanie natrafi na dany pomiar z tablicy "pomiary" i będzie on równy pomiarowi z tablicy "tablica", wypisuje coutem jego krotność. Wpisywanie i sortowanie działa na pewno dobrze, bo tablice posortowaną wyswietla mi dobrze.

Proszę o pomoc i wskazówki, z góry dziękuję :)

1

Bez pozostałego kodu to można co najwyżej wróżyć.

0

Ok, dodałem fragment odpowiedzialny za tworzenie tablicy pomiary, coś jeszcze powinienem dodać, czy to wystarczy? ;)

0

Ok, dodałem mam nadzieje że wystarczająco żeby zobaczyć gdzie siedzi błąd w wyszukiwaniu :)

1
int h = Tablic[j].pomiar;
Tablic[j].pomiar = Tablic[j-1].pomiar;
Tablic[j-1].pomiar = h;
int c = Tablic[j].krotnosc;
Tablic[j].krotnosc= Tablic[j-1].krotnosc;
Tablic[j-1].krotnosc = c;

Seriously? Zrozumiałbym zamianę obiektów, ale zamiana pól wewnątrz obiektów? Poza tym całość można zastąpić prostym

swap(Tablic[i], Tablic[j]);

Co do pierwotnego problemu - debuguj. Korzystaj z debuggera, albo chociaż wypisz komunikaty i śledź działanie:

mid=(low+high) / 2;
cout << low << " " << mid << " " << high << " mid-pomiar: " << tablica[mid].pomiar << " i-pomiar: " << pomiary[i] << endl;
if(pomiary[i]==tablica[mid].pomiar)

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