Oppure

Loading
09/02/09 12:35
sweetema
xkè non mi funziona??????????????????
#include<iostream.h>
using std::cout;
using std::cin;
using std::endl;

int ricercaBinaria(int[],int,int,int,int);

int a[10]={6,9,67,34,1,40,55,8,38};
int key;

int main()
{
	cout<<"l'array non ordinato è:\n";
	for(int y=0;y<9;y++)
	{
		cout<<a[y]<<"\t";
	}


	for(int x=1;x<9;x++)
	{
		int insert=a[x];
		int moveitem=x;

		while((moveitem>0)&&(a[moveitem-1]>insert))
		{
			a[moveitem]=a[moveitem-1];
			moveitem--;
		}

		a[moveitem]=insert;
		}

	cout<<"\nl'array ordinato è:\n";
	for(int k=0;k<9;k++)
	{
		cout<<a[k]<<"\t";
	}

	cout<<"\ninserire l'elemento da cercare nell'array\n";
	cin>>key;

	int element=ricercaBinaria(a,9,key,a[0],a[8]);

	if(element!=-1)
		cout<<"l'elemento si trova in posizione "<<element;
	else
		cout<<"l'elemento non è nell'array";

	cout<<endl;

	return 0;

}

int ricercaBinaria(int a[],int size, int searchkey,int low,int high)
{
	int middle;
	while(low<=high)
	{
		middle=((low+high)/2);

		if(a[middle]==searchkey)
			return middle;
		else
			if(searchkey<a[middle])
				high=middle-1;
			else
				low=middle+1;
	}
		return -1;


}
Ultima modifica effettuata da sweetema 09/02/09 12:46
aaa
09/02/09 12:56
Overflow
a cosa servono gli utlimi due parametri della funzione ricercaBinaria? high, e low?
io la farei cosi:
int ricercaBinaria(int a[],int size, int searchkey)
{
   for(int middle =0;middle<size;middle++)
        if(a[middle]==searchkey)
            return middle+1;
     
	return -1;
} 


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 09/02/09 12:57
aaa
09/02/09 14:25
sweetema
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'è!!!
aaa
11/02/09 11:55
gioser
sbagli la chiamata: low e high sono gli indici e non i valori:

devi chiamarla così

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


Ciao! :)
Ultima modifica effettuata da gioser 11/02/09 11:55
aaa
11/02/09 19:49
sweetema
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
aaa
11/02/09 20:10
gioser
congratulazioni! :k:

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