PDA

Visualizza la versione completa : [C] Funzione printf() e differenza minima


snatch84
27-10-2009, 08:18
ciao a tutti...mi sono appena registrato dopo qualche ora senza dormire...:D forse proprio per qst non riesco a trovare la soluzione ad una cosa che sembra vicina ma che nn riesco a capire. il mio problema è il seguente: ho scritto un programma che prende in input 10 numeri e li confronta per determinare il più vicino ad un numero di "base". qual'è l intoppo? riesco a stampare la differenza minima,ma non il valore che mi ha portato a quella differenza minima...non so se sono stato chiaro...se fosse necessario vi posto il codice...grazie mille per l aiuto...e buongiorno a tutti! :D

Alex'87
27-10-2009, 09:10
Originariamente inviato da snatch84
se fosse necessario vi posto il codice...grazie mille per l aiuto...e buongiorno a tutti! :D Direi che sarebbe meglio... :stordita:

LeleFT
27-10-2009, 09:10
Benvenuto sul forum.
Subito l'invito a leggere il Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887): manca completamente l'indicazione del inguaggio nel titolo.

Poi un suggerimento: se vuoi ricevere aiuto su un determinato codice... postalo (sempre seguendo il punto 6 del regolamento). :)


Ciao. :ciauz:

snatch84
27-10-2009, 09:24
scusate avete ragione...allora...si parla di linguaggio c e qst è quello che ho fatto fin'ora...



#include <stdio.h>
#define NUM_SIZE 10
int main()
{
double b , num[NUM_SIZE] , diff_min , num_vic;
int counter;

printf("Digitare il numero di riferimento:");
scanf("%lf" , &b);

for(counter=1; counter<=NUM_SIZE; counter++){

printf("Digitare il valore numero %d:" , counter);
scanf("%lf" , &num);
}
diff_min= fabs(b-num[0]);

(qui manca della roba! :D)

printf("Valore piu' vicino:%lf" , num_vic);
return 0;
}

LeleFT
27-10-2009, 09:32
No, dico... quando chiedo di "leggere il regolamento", intendo leggerlo tutto ed applicarlo... l'hai letto il punto 6? Mi sembra evidente di no... :madai!?:


Ciao. :ciauz:

snatch84
27-10-2009, 09:34
ti chiedo scusa...sono solo molto stanco...d ora in poi nn fallirò! ;) promesso

snatch84
27-10-2009, 11:47
nessuno sa aiutarmi?! :cry: :cry: :cry:

KrOW
27-10-2009, 12:42
Ciao e benvenuto nel forum ... Prima di tutto dovresti correggere l' inserimento dei 10 numeri da testare così:

for( counter=0; counter<NUM_SIZE; counter++ )
{
printf( "Digitare il valore numero %d", counter+1 );
scanf( "%lf", &num[ counter ] );
}
perchè nel loop da te scritto, inserisci ogni numero sempre nel primo elemento di num, mentre devi inserirli a partire dal primo elemento, e per ogni ciclo, inserirlo nell' elemento successivo fino ad arrivare all' ultimo (cioè nel primo ciclo devi inserire il numero nel primo elemento di num, nel secondo ciclo devi inserire il numero nel secondo elemento di num e così via fino al decimo). Come dovresti sapere per accedere agli elementi di un array, bisogna usare un indice che va da 0 al numero di elementi dell' array - 1. Ad esempio, per accedere agli elementi dell' array num, puoi usare come indice un numero che va da 0 a 9 (cioè num[0], num[1] . . . num[9]). Metti bene in testa che per accedere all' i -esimo elemento devi usare come indice i-1 (cioè se vuoi accedere al primo elemento devi usare come indice 1-1 = 0) ecco perchè counter viene definito a 0, e perchè la condizione del loop è counter<NUM_SIZE ...
Detto ciò rimane solo il problema di trovare il numero più vicino a quello memorizzato in b che può essere risolto con degli if/else dentro il loop.

for( counter=0; counter<NUM_SIZE; counter++ )
{
printf( "Digitare il valore numero %d", counter+1 );
scanf( "%lf", &num[ counter ] );
// Se è l' elemento corrente è il primo elemento di num
if( counter == 0 )
{
// setta come numero più vicino l' elemento corrente di num, e come
// differenza minima il numero assoluto della differenza tra l' elemento corrente di num e b
num_vic = num[ counter ];
diff_min = fabs( num[counter] - b );
}
else
{
// Se è l' elemento corrente è il primo elemento di num e se la differenza
// tra l elemento corrente e b è minore della differenza minima corrente
if( fabs( num[counter] - b ) < diff_min )
{
// setta come numero più vicino l' elemento corrente di num, e come differenza
// minima il numero assoluto della differenza tra l' elemento corrente di num e b
num_vic = num[ counter ];
diff_min = fabs( num[counter] - b );
}
}
}
Se hai problemi a capire il codice chiedi pure ...
P.S: Se stai imparando da autodidatta ti consiglio VIVAMENTE (se non l' hai già fatto) di prelevare un buon testo sul C ...

snatch84
27-10-2009, 12:52
ti ringrazio infinitamente...ora sto uscendo e me lo leggo per bene qnd tornerò stasera. no cmq non sto imparando da autodidatta ma ho iniziato ora informatica all uni,ma lavorando non sempre posso frequentare e confrontarmi con gli altri. come libro di testo ho il deitel... in alcuni punti delle cose nn mi sono chiarissime,proprio perchè mi ci vorrebbe la "semplificazione" a parole del docente...ma ...piano piano :D!cmq...ti ringrazio ancora e buon pomeriggio...

Loading