Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Ricerca binaria + Insertion sort

    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).

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

    Un affettuoso 'grazie' a tutti quelli che risponderanno!
    ciao

  2. #2
    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; 
    }

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    penso che dovrebbe essere

    while (low < high)

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  4. #4
    Originariamente inviato da anatroccolo
    using namespace std;

    void insort(int a[], int n);
    int ricercabin(int a[], int n, int x);

    int main(int argc, char *argv[])
    ciao, perdona la mia ignoranza, ma "using namespace std", non so a cosa può servire, non lo conosco proprio.

    int argc, char *argv[] nella main, non so a cosa servono, come mai li hai inseriti?

    @anx721

    mi sa che hai ragione, però mi va in loop lo stesso

  5. #5
    Originariamente inviato da starise
    ciao, perdona la mia ignoranza, ma "using namespace std", non so a cosa può servire, non lo conosco proprio.

    int argc, char *argv[] nella main, non so a cosa servono, come mai li hai inseriti?
    Guarda questo link.

    http://programmazione.html.it/cplusp...lusplus_17.htm

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.