Il codice ora viene compilato ma nella funzione "Ricercabin" va in loop nel while.
Prova vedere.
Ciao
codice:
#include <stdio.h>
#include <malloc.h>
using namespace std;
void insort(int a[], int n);
int ricercabin(int a[], int n, int x);
int main(int argc, char *argv[])
{
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(a, 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;
}