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; 
}