Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ricerca binaria
Forum - C/C++ - ricerca binaria

Avatar
sweetema (Normal User)
Rookie


Messaggi: 32
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 13:35
Lunedì, 09/02/2009
xkè non mi funziona??????????????????
Codice sorgente - presumibilmente C++

  1. #include<iostream.h>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. int ricercaBinaria(int[],int,int,int,int);
  7.  
  8. int a[10]={6,9,67,34,1,40,55,8,38};
  9. int key;
  10.  
  11. int main()
  12. {
  13.         cout<<"l'array non ordinato è:\n";
  14.         for(int y=0;y<9;y++)
  15.         {
  16.                 cout<<a[y]<<"\t";
  17.         }
  18.  
  19.  
  20.         for(int x=1;x<9;x++)
  21.         {
  22.                 int insert=a[x];
  23.                 int moveitem=x;
  24.  
  25.                 while((moveitem>0)&&(a[moveitem-1]>insert))
  26.                 {
  27.                         a[moveitem]=a[moveitem-1];
  28.                         moveitem--;
  29.                 }
  30.  
  31.                 a[moveitem]=insert;
  32.                 }
  33.  
  34.         cout<<"\nl'array ordinato è:\n";
  35.         for(int k=0;k<9;k++)
  36.         {
  37.                 cout<<a[k]<<"\t";
  38.         }
  39.  
  40.         cout<<"\ninserire l'elemento da cercare nell'array\n";
  41.         cin>>key;
  42.  
  43.         int element=ricercaBinaria(a,9,key,a[0],a[8]);
  44.  
  45.         if(element!=-1)
  46.                 cout<<"l'elemento si trova in posizione "<<element;
  47.         else
  48.                 cout<<"l'elemento non è nell'array";
  49.  
  50.         cout<<endl;
  51.  
  52.         return 0;
  53.  
  54. }
  55.  
  56. int ricercaBinaria(int a[],int size, int searchkey,int low,int high)
  57. {
  58.         int middle;
  59.         while(low<=high)
  60.         {
  61.                 middle=((low+high)/2);
  62.  
  63.                 if(a[middle]==searchkey)
  64.                         return middle;
  65.                 else
  66.                         if(searchkey<a[middle])
  67.                                 high=middle-1;
  68.                         else
  69.                                 low=middle+1;
  70.         }
  71.                 return -1;
  72.  
  73.  
  74. }


Ultima modifica effettuata da sweetema il 09/02/2009 alle 13:46
PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 13:56
Lunedì, 09/02/2009
a cosa servono gli utlimi due parametri della funzione ricercaBinaria? high, e low?
io la farei cosi:
Codice sorgente - presumibilmente C++

  1. int ricercaBinaria(int a[],int size, int searchkey)
  2. {
  3.    for(int middle =0;middle<size;middle++)
  4.         if(a[middle]==searchkey)
  5.             return middle+1;
  6.      
  7.         return -1;
  8. }



perchè dici che non funziona?
Un problema potrebbe essere il fatto, che l'indice che ritorna la funzione v incrementato di uno.

Ultima modifica effettuata da Overflow il 09/02/2009 alle 13:57
PM Quote
Avatar
sweetema (Normal User)
Rookie


Messaggi: 32
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 15:25
Lunedì, 09/02/2009
gli ultimi 2parametri passati mi servono per fare una ricerca binaria. quella che mi hai suggerito te è una ricerca lineare,cioè faccio tanti confronti quanti sono gli elementi dell'array!!!io ne vojo fare la metà,xsemplificare il lavoro!!!non mi funziona xkè mi dice sempre ke l'elemento non è nell'array,anche se invece c'è!!!

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 12:55
Mercoledì, 11/02/2009
sbagli la chiamata: low e high sono gli indici e non i valori:

devi chiamarla così

Codice sorgente - presumibilmente C/C++

  1. int element=ricercaBinaria(a,9,key,0,8);



Ciao! :)

Ultima modifica effettuata da gioser il 11/02/2009 alle 12:55
PM Quote
Avatar
sweetema (Normal User)
Rookie


Messaggi: 32
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:49
Mercoledì, 11/02/2009
si,l'avevo risolto poi...scusate se non ho posto poi il codice fatto bn...ma ho avuto da fare!!!ne approfitto anke xringraziare qst sito...ho fatto l'esame di programmazione e ho beccato 29....!!!!ciaooooooooooooooooo

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 21:10
Mercoledì, 11/02/2009
congratulazioni! :k:

ora che farai? appendi la tastiera al chiodo oppure continui perché ti piace? :)

PM Quote