Salve, sto sbattendo la testa su questo codice da ieri sera...in poche parole, quello che dovrebbe fare e' questo:
leggere elementi di un vettore dati in input dall'utente.
leggere un numero k dato dall'utente
dire quale dei numeri presente dentro al vettore e' piu prossimo a k.
Cioe' non riesco proprio a trovare sto benedetto numero all'interno del vettore che sia piu prossimo a k...codice:#include<stdio.h> #include<stdlib.h> #define MAX 10 #define SUP_MAX 1000 int i,vet[MAX],k,q,r=0,val_minori[MAX],val_massimi[MAX]; //MAX dev'essere uguale sia per vet che per vet_ris !!! int val_minimo_max=0,val_massimo_min=SUP_MAX,cont1=0,cont2=0,lol1=0,lol2=0; main() { printf("Riempire il vettore. Max 10 elementi. -1 Per stoppare il riempimento.\n"); for(i=0;i<MAX;i++) { scanf("\n%d", &q); getchar(); if(q>=SUP_MAX) { printf("\nValore TROPPO GRANDE ! ritenta...\n"); continue; } if(q!=-1) { vet[i]=q; ++r; } else break; } printf("\nInserire un numero.Vi diro' quale numero nel vet e' piu vicino ad esso\n"); scanf("%d", &k); getchar(); /*Cerco nel vettore se c'e' il numero uguale a quello da ricercare (cioe' k),nel caso,stampo a video ed esco dal progr.*/ for(i=0;i<r;i++) { if(k==vet[i]) { printf("%d = %d ...e' quindi il numero piu' vicino\n", k, vet[i]); exit(0); } } for(i=0;i<r;i++) { if(k>vet[i]) { val_minori[i]=vet[i]; ++lol1; } //salva in un'array i valori minori di k if(k<vet[i]) { val_massimi[i]=vet[i]; //salva in un'array i valori maggiori di k ++lol2; } } for(i=0;i<lol1;i++) { if(val_minori[i]>=val_minori[i+1]) val_minimo_max=val_minori[i]; //tra i valori piu bassi di k, trovo il piu alto } for(i=0;i<lol2;i++) { if(val_massimi[i]<=val_massimi[i+1]) val_massimo_min=val_massimi[i]; //tra i valori piu alti di k,trovo il piu basso } for( ;val_minimo_max==k;val_minimo_max++) //conto quanto sono distante da k ++cont1; //aggiorno cont (la mia variabile contatore di ciclo) for( ;val_massimo_min==k;val_massimo_min--) //faccio lo stesso, conto quanto son dist da k ++cont2; //aggiorno un'altra variabile contatore di ciclo //controllo quale dei due cicli qua sopra, ha ciclato di piu incrementando la var contatore...quello che ha ciclato meno //conteneva il num piu vicino a sto benedetto numero k del ****. if(cont1==cont2) printf("\nI numeri piu vicini a %d sono %d e %d\n\n",k,val_minimo_max-cont1,val_massimo_min+cont2); if(cont1>cont2) printf("\nIl numero piu vicino a %d e' %d\n\n",k,val_massimo_min+cont2); else printf("\nIl numero piu vicino a %d e' %d\n\n",k,val_minimo_max-cont1); //nono...non funziona un **** .. }
Okay certamente esistera' un algoritmo migliore e sopratutto funzionante, pero' vorrei davvero capire perche' la schifezza che ho scritto non funziona... poi se qualcuno ha un 'idea per implementare il tutto in a "better way", son tutto orecchie !
grazie !
p.s. mi scuso per il pessimo codice e le pessime variabili...in effetti sembro uno schizzofrenico con crisi epilettiche :-)

Rispondi quotando