PDA

Visualizza la versione completa : problema esercizio con la funzione fabs [C]


pivaino81
12-01-2013, 19:37
Ciao a tutti sono Giuseppe e sono nuovo del forum, mi sono iscritto in quanto ho visto che siete molto preparati e forse potreste aiutarmi a capire un pò di più il linguaggio C che sto studiando per un esame di Informatica. Premetto che sono all'inizio, quindi ne so ben poco del linguaggio C.

Il prof. ha dato degli esercizi da svolgere e nel caso particolare ne ha dato uno che tratta la funzione fabs per il valore assoluto sul quale sto sbattendo letteralmente la testa.

IL testo dell' esercizio è questo:
Scrivere una serie di istruzioni in C tale che, date due variabili volt_1 e volt_2, se la loro differenza è maggiore di 10.0 visualizza il valore delle due variabili, altrimenti stampa il valore assoluto della loro differenza.
N.B. Notare che devono essere confrontati i "valori assoluti", o modulo, di tale variabili, altrimenti si potrebbe ottenere un risultato errato.

Ecco io ho provato a scrivere questo:


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main() {
double volt_1=-5, volt_2=20, diff_12, moddif;
diff_12= fabs(volt_1)-fabs(volt_2);
moddif=fabs(diff_12);
if (moddif>10.0)
{ printf( "Valore prima variabile = %d /n Valore seconda variabile = %d \n", volt_1, volt_2);}
else
{printf( "Valore assoluto della differenza delle due variabili = %d \n ", moddif); }

system ("PAUSE");
return EXIT_SUCCESS; }

il risultato però non mi convince mi sa di aver sbagliato sicuramente qualcosa
Potete aiutarmi a capire cosa ho sbagliato? :dhò:
Grazie a tutti anticipatamente

MdE2005
12-01-2013, 20:32
Benvenuto nel forum di HTML.it :ciauz:

Troverai molti 'colleghi' studenti di Ingegneria di qualsiasi tipo, SSMMFFNN, Fisica et simila.

Cosa intendi per "non mi convince"? In Matematica il risultato è una variabile booleana: corretto o non corretto; come direbbero i Latini: "Tertium non datur".

Nel caso specifico, quanto è il risultato della differenza?

pivaino81
12-01-2013, 20:44
Ciao, grazie :)
allora mi esce:
Valore prima variabile =0
Valore seconda variabile = -1072431104

ok il valore dovrebbe essere >10 ma
non dovrebbero uscirmi i valori -5 e 20??


double volt_1=-5, volt_2=20, diff_12, moddif;
diff_12= fabs(volt_1)-fabs(volt_2); |-5|-|20| --> 5-20 ---> (-15)
moddif=fabs(diff_12); ---> |-15| ---> 15;
if (moddif>10.0)
{ printf( "Valore prima variabile = %d /n Valore seconda variabile = %d \n", volt_1, volt_2);}
else
{printf( "Valore assoluto della differenza delle due variabili = %d \n ", moddif); }

system ("PAUSE");
return EXIT_SUCCESS; }

pivaino81
12-01-2013, 20:54
ho provato anche ha inserire i valori tramite scanf



#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main()
{
double volt_1, volt_2, diff_12, moddif;
printf("Inserire prima variabile:");
scanf("%d", &volt_1);
printf("Inserire seconda variabile:");
scanf("%d", &volt_2);
diff_12= fabs(volt_2)-fabs(volt_1);
moddif=fabs(diff_12);
if (moddif>10.0)
{ printf( "Valore prima variabile = %d /n Valore seconda variabile = %d \n", volt_1, volt_2);}
else
{
printf( "Valore assoluto della differenza delle due variabili = %d \n ", moddif);}

system ("PAUSE");
return EXIT_SUCCESS;
}

in questo caso ad esempio se inserisco prima variabile -5 seconda variabile -10 (o altro valore)
mi esce sempre:
Valore prima variabile = -5
Valore seconda variabile = 1986174516

oregon
12-01-2013, 21:28
%d vale per gli interi mentre per i double nelle printf devi usare %lf

pivaino81
12-01-2013, 21:35
Originariamente inviato da oregon
%d vale per gli interi mentre per i double nelle printf devi usare %lf

Grazie infinite Oregon ora funge il tutto :unz: ....come immaginavo uno sbaglio cretinissimo :facepalm:

ma lo stesso vale anche per scanf??

oregon
12-01-2013, 21:51
Basta studiare la documentazione

http://www.cplusplus.com/reference/cstdio/printf/

http://www.cplusplus.com/reference/cstdio/scanf/

Come si fa a programmare senza leggere la documentazione?

pivaino81
12-01-2013, 21:57
Originariamente inviato da oregon
Basta studiare la documentazione

http://www.cplusplus.com/reference/cstdio/printf/

http://www.cplusplus.com/reference/cstdio/scanf/

Come si fa a programmare senza leggere la documentazione?

Hai perfettamente ragione scusami...domanda stupida e pigra. :)
Purtroppo stavo studiando solo dalle dispense date dal prof (il quale ha detto che bastava studiare solo da queste) dove ovviamente non c'è scritto una beneamata...speravo bastassero solo quelle...ma vedo che dovrò studiare altrove ed usare le dispense ne wc :stordita:

Grazie ancora per la disponibilità e per la rapidità di risposta.
a presto

Loading