Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Binarna pretraga niza sortiranih rijeci?

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Binarna pretraga niza sortiranih rijeci?

[ Pregleda: 2960 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

belegija
sarajevo

Član broj: 141988
Poruke: 24
*.pmf.unsa.ba.



Profil

icon [Zadatak] Binarna pretraga niza sortiranih rijeci?19.04.2007. u 14:32 - pre 207 meseci
Da li moze neko da skonta u cemu je problem? Zadatak:
Napisati program koji trazi da se unese n imena, koje treba sortirati po abecednom redu. Nakon toga za novu unesenu rijec, treba provjeriti da li se nalazi u vec unesenom nizu (postupkom binarne pretrage).

Ovdje je code:(Greska je u funkciji BinarnaPretraga):
Code:
#include<iostream>
#include<cstring>
bool k(char *u,char *v){
    return strcmp(u,v)<0;
}

using namespace std;
template <typename tip>
bool BinarnaPretraga(tip **Niz,  int N, tip *Kljuc)
{int lpok=0,dpok=N-1;
while(lpok<=dpok){
                  int sredina=(lpok+dpok)/2;
                  if(strcmp(Niz[sredina],Kljuc)==0)return true;
                  else if(strcmp(Niz[sredina],Kljuc)>0)lpok=sredina+1;
                  else dpok=sredina-1;
                  }
                  return false;
                  }
int main()
{
    int n1,n;
    cout<<"Unesi broj rijeci:";
    cin>>n1;
    n=n1;
    cin.ignore(100,'\n');
    const int c(n);
    char *reci[c+1];
try{
    for(int i=0;i<=c;i++)
            reci[i]=0;
    for(int i=0;i<c;i++)
    {
            char pom[100];
            cin.getline(pom,sizeof pom);
            reci[i]=new char[strlen(pom)+1];
            strcpy(reci[i],pom);
    }
    sort(reci,reci+c,k);
    cout<<endl;
    for(int i=0;i<c;i++)
    cout<<reci[i]<<endl;
    cout<<"Unesi novu rijec:";
    cin.getline(reci[c+1],sizeof reci[c+1]);
    bool ima=false;
    ima=BinarnaPretraga(reci, c+1, reci[c+1]);
    if(ima)cout<<"Ima.";
    else cout<<"Mema";
    }
catch(...){
           cout<<"Nema memorije?";
           for(int i=0;i<c;i++)
           delete [] reci[i];
           }
           for(int i=0;i<c;i++)
           delete [] reci[i];
system("pause");
return 0;
}
    

C++er
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
212.200.249.*



+1 Profil

icon Re: [Zadatak] Binarna pretraga niza sortiranih rijeci?20.04.2007. u 14:38 - pre 207 meseci
Mislim da nije problem u funkciji koju si naveo ...

mislim da je problem u sledecoj sekciji koda:

Code:

    cout<<"Unesi novu rijec:";
    cin.getline(reci[c+1],sizeof reci[c+1]);


probaj nesto poput

Code:

    char pom[100];
    cin.getline(pom,sizeof pom);
    reci[c+1]=new char[strlen(pom)+1];
    strcpy(reci[c+1],pom);


Kao sto si radio u petlji za unos reci ...

Mislim da ce ovako raditi ...

Osim toga, cini mi se da ti ne valja memory management ...

U catch sekciji oslobadjas memoriju koju si alocirao za stringove ...
a posle toga opet oslobadjas tu istu memoriju?

(u slucaju da nema greske, program ce svakako raditi)

Malo to pogledaj ...

 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Binarna pretraga niza sortiranih rijeci?

[ Pregleda: 2960 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.