PDA

View Full Version : [C] Ricerca binaria + Insertion sort


Starise
01-03-2005, 15:01
Salve a tutti, scusate, magari ho fatto qualche errore davvero stupido, ma vi sarei molto grato se riuscite a scovare l'errore dentro questo codice. Io non ci riesco... :( stanotte non ho dormito per niente per studiare fisica (ho l'esame dopodomani).

Il programma stabilisce un array, lo ordina, e poi effettua una ricerca binaria all'interno dell'array.


#include <stdio.h>
#include <malloc.h>

void insort(int a[], int n);
int ricercabin(int a[], int n, int x);
main()
{
int *a;
int i, n, x, risultato;

printf("Inserisci la quantita' di numeri che comporranno l'array\n");
scanf("%d", &n);

/*Alloco la memoria in base al precedente valore*/
a=(int*)malloc(n*sizeof(int));

for (i=0; i<n; i++)

{
/*Richiesta input all'utente*/
printf("Inserire un numero\n");
scanf("%d", &a[i]);
}
/*Chiamata della funzione insort*/
insort(a,n);

/*Stampa dell'array ordinato*/
printf("La tabella numerica inserita ed ordinata e':\n");
for (i=0;i<n;i++)
{
printf(" %d\n", a[i]);
}

printf("inserisci adesso, un numero da ricercare nell'array:\n");
scanf("%d", &x);

***risultato = ricercabin(n, x);

printf("Il risultato è %d", risultato);

free(a);
}

void insort(int a[], int n)
{
int i, k;
int app;

for (i=1; i<n; i++)
{
app = a[i];
k = i-1;
while (k>=0 && a[k]>app)
{
a[k+1] = a[k];
k--;
}
a[k+1] = app;
}
}

int ricercabin(int a[], int n, int x)
{
int m, low, high;
low = 0;
high = n - 1;
m = ( low + high ) / 2;

while (low <= high)
{
if (x > a[m])
low = m+1;
else
high = m;
}

if (a[low] == x)
return low;
else
return -1;
}

Dove stanno gli asterischi rossi, il compilatore risponde:
[Warning] passing arg 1 of `ricercabin' makes pointer from integer without a cast
too few arguments to function `ricercabin'


vi ringrazio tutti in anticipo!

sirus
01-03-2005, 19:01
mi sembra normale, tu scrivi

...
int ricercabin(int a[], int n, int x);
...
risultato = ricercabin(n, x);
...

dichiari un prototipo in un modo e usi la funzione in un altro :( dovresti fare

risultato = ricercabin(a, n, x);

;)

3nigma666
01-03-2005, 20:09
Hai pasticciato un attimo con i parametri,ti sei dimenticato di passare il vettore a alla funzione.Sara la stanchezza da troppo studio..ti capisco...
:D

Starise
03-03-2005, 09:48
infatti ragazzi, ho risolto!!

c'avevo proprio la testa fra le nuvole!

grazie a tutti! :)