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!
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!