PDA

Visualizza la versione completa : [C] ricerca binaria ricorsiva


Skass89
07-01-2010, 15:56
dite la veritą vi stavate preoccupando di me perchč oggi non postavo nulla :D

oggi č una stupidaggine molto grossa!




#include <stdio.h>
#define dim 100

void leggivet (int a[], int n);
int ricercaRicorsiva (int a[], int inf, int sup, int x);

int main(){
int a[dim], x, n, inf, sup;

leggivet(a, n);

printf("numero da ricercare = ");
scanf("%d", &x);


printf("%d\n", ricercaRicorsiva (a, inf, sup, x));

system ("pause");
return 0;

}



void leggivet(int a[], int n){

int i;

printf("inserire dimensioni vettore (max %d) = ", dim);
scanf("%d", &n);


for(i=0;i<n;i++){
printf("a[%d]= ", i);
scanf("%d", &a[i]);
}

}//fine leggivet

int ricercaRicorsiva (int a[], int inf, int sup, int x){

int med;
int trovato;

if(inf>sup)
trovato=0;
else {
med=(inf+sup)/2;
if(x==a[med])
trovato=1;
if (x>a[med])
trovato = ricercaRicorsiva(a, med+1, sup, x);
else
trovato = ricercaRicorsiva(a, inf, med-1, x);
}
return trovato;
}


come da titolo questo programma molto stupido, dovrebbe caricare un vettore a[dim] e cercare un valore in questo caso "x", se viene trovato deve restituirmi 1 altrimenti 0. Il mio problema č che mi da sempre 0. L'unica cosa che mi viene in mente č che il valore x per un qualche motivo non viene passato alla funzione "ricercaRicorsiva". Voi che mi dite?

ignaziodeblasi
07-01-2010, 16:10
La prima cosa che si vede... Quanto valgono inf e sup quando fai la chiamata alla funzione?

Skass89
07-01-2010, 16:15
dici la chiamata nel main? dovrei inizializzarli?

ignaziodeblasi
07-01-2010, 16:16
Certo che si..

Skass89
07-01-2010, 16:17
gli ho inizializzati per inf=0; e sup=n-1; ma il programma va in crash

Skass89
07-01-2010, 16:39
#include <stdio.h>
#define dim 100

void leggivet (int a[], int n);
int ricercaRicorsiva (int a[], int inf, int sup, int x);

int main(){
int a[dim], x, n, inf, sup;

leggivet(a, n);

printf("numero da ricercare = ");
scanf("%d", &x);


printf("%d\n", ricercaRicorsiva (a, inf, sup, x));

system ("pause");
return 0;

}



void leggivet(int a[], int n){

int i;

printf("inserire dimensioni vettore (max %d) = ", dim);
scanf("%d", &n);


for(i=0;i<n;i++){
printf("a[%d]= ", i);
scanf("%d", &a[i]);
}

}//fine leggivet

int ricercaRicorsiva (int a[], int inf, int sup, int x){

int med, n;
int trovato;

inf=0;
sup=&n-1;

if(inf>sup)
trovato=0;
else {
med=(inf+sup)/2;
if(x==a[med])
trovato=1;
if (x>a[med])
trovato = ricercaRicorsiva(a, med+1, sup, x);
else if (x<a[med])
trovato = ricercaRicorsiva(a, inf, med-1, x);
}
return trovato;
}


RISOLTO...avevi ragione ingną, bisognava inizializzarli...ma anche dargli l'indirizzo della "n". Inizia ad essere tutto molto pił chiaro questo linguaggio che inziavo ad odiare! :D :D :D, ma fa ancora schifo la mia indentazione?

ignaziodeblasi
07-01-2010, 16:40
Hai inizializzato sup a n-1..
Prova a mettere


printf("n=%d",n);

dopo


leggivet(a, n);

Che succede?

Skass89
07-01-2010, 16:43
ma la n l'acquisisco gią nel leggi vet

ignaziodeblasi
07-01-2010, 16:43
Ti volevo fare capire che visto che non avevi passato il puntatore ad n nella funzione leggivet il valore n risultava non ben definito..Quindi quando settavi sup = n-1(nel main dovevi farlo) il programma crashava ..

ignaziodeblasi
07-01-2010, 16:46
ma la n l'acquisisco gią nel leggi vet


Non hai capito allora..In quel modo la n avra' quel valore SOLO nella funzione leggi(la setti solo per quella funzione;nel programma non si vedrą quel valore)..appena la funzione termina quel valore muore con essa..

Loading