I-ricerca binaria (linguaggio c) no ricorsivo

di il
4 risposte

I-ricerca binaria (linguaggio c) no ricorsivo

Salve a tutti,
inizio subito a dire che sono un novello del forum quindi se sbaglio qualcosa fatemelo sapere, e mi scuso già nel caso li stessi per fare ahahah
Detto questo ho un problema: ho creato un programma che ha il compito di cercare un numero (con metodo "divide et impera") in un array pre-caricato e pre-ordinato.
Il codice da me creato è il seguente:
#include <stdio.h>
int main() {
    int n;
	int a[n];
	printf ("inserisci posti array ");
	scanf ("%d",&n);
	int i;
	for (i=1; i<n+1; i++) {
		printf ("inserisci numero al posto %d = ",i);
		scanf ("%d",&a[i]);
	}
	int t=0;
	for (i=1; i<n+1; i++) {
        int temp;
        int j;
        t=t+1;
	    for (j=t; j<n+1; j++) {
            if (temp>a[j]) {
			   temp=a[j];
			   a[j]=a[i];
			   a[i]=temp;
		    }
        }
    temp=1999999999;
    }
	int sx,dx,cx;
	int k;
	printf ("inserisci numero da cercare = ");
	scanf ("%d",&k);
	while (sx<=dx) {                                                           //errore
		cx=(sx+dx)/2;
		if (a[cx]==k){
		printf ("numero presente nell'array");
		}
		if (a[cx]>k) {
			dx=cx-1;
		} else {
			sx=cx+1;
		}
	}
	return main(); 
}	
compilo i programmi con dev-c++ che so che è conosciuto per la sua "precisione" per così dire...il compilatore in debug mi da un errore al livello del codice dove ho messo il commento "//errore".
Vorrei sapere se l'errore è stato mio nel scrivere un codice errato o è un "errore" del compilatore.
grazie in anticipo e buona serata a tutti

4 Risposte

  • Re: I-ricerca binaria (linguaggio c) no ricorsivo

    Bè, vai a confrontare due variabili che non hai inizializzato
    dunque quel confronto non ha senso, perchè dopo la dichiarazione non hai assegnato alcun valore alle variabili in questione
    comunque io ti consiglio CodeBlocks come IDE
  • Re: I-ricerca binaria (linguaggio c) no ricorsivo

    Grazie mille per la risposta immediata
    come posso inizializzarle? cioè come faccio a dire che sx sta per il blocco array che va da cx in giù e dx il restante?
    scusa ma sono proprio alla base ancora ho iniziato da poco
  • Re: I-ricerca binaria (linguaggio c) no ricorsivo

    Semplice,nel primo passaggio sx = 0 e dx = size-1;perchè devi considerare tutto il vettore
    dando un'occhiata veloce al resto dell'algoritmo mi sembra funzionante
    Comunque,capisco che sei alle prime armi ma il tuo codice è poco elegante; ti spiego:
    definire una funzione "ricercabinaria",magari ricorsiva,che abbia come parametri indice inferiore,indice superiore e il vettore, e la chiave di ricerca,rende il codice più snello e leggibile
    In generale cerca di rendere più strutturato il codice,lo rende maggiormente riusabile e rispetti l'approccio top-down
    Ah, un'altra cosa, la ricerca binaria è applicabile solo se il vettore è ordinato,quindi attenzione
  • Re: I-ricerca binaria (linguaggio c) no ricorsivo

    Si si del fatto che deve essere ordinato lo sapevo (infatti c'è il codice prima)...comunque grazie mille che mi hai aiutato anche su questo problema piranha

    P.S. per il fatto della ricorsione mi è stato imposto dalla prof, ha chiesto un programma ad algoritmo iterativo
Devi accedere o registrarti per scrivere nel forum
4 risposte