Pagina 1 di 1

[Risolto] - Celsius to Fahrenheit in C

Inviato: dom 26 lug 2009, 19:43
da SIV
Slave ragazzi, torno a tormentarvi :thumbright:

Volevo creare una funzione che trasformi i gradi Clesius in Fahrenheit e che mostri la conversione °C->°F dei primi 10 gradi Celsius.

Ho scritto questo:

Codice: Seleziona tutto

#include<stdio.h>

double fahrenheit(int gradiC);

int main(){

int i;
double a;

for (i=0;i<11;i++){
a=fahrenheit(i);
printf("°C : %d  |  °F : %d\n",i,a);
}

return 0;
}


double fahrenheit(int gradiC){

double gF;

gF=gradiC*(9/5) + 32;

return gF;
}
Nessun errore fatale, ma sicuramente logico, dato l'output:

Codice: Seleziona tutto

muller@sab-muller ~/Test C $ ./a.out
°C : 0  |  °F : 0
°C : 1  |  °F : 0
°C : 2  |  °F : 0
°C : 3  |  °F : 0
°C : 4  |  °F : 0
°C : 5  |  °F : 0
°C : 6  |  °F : 0
°C : 7  |  °F : 0
°C : 8  |  °F : 0
°C : 9  |  °F : 0
°C : 10  |  °F : 0
muller@sab-muller ~/Test C $

Re: Celsius to Fahrenheit in C

Inviato: dom 26 lug 2009, 20:28
da robbybby
Cosi', a un aveloce lettura vedo due errori:
1. 9/5 fa 1, essendo una divisione fra interi. Devi dare 9.0/5.0. In realta' basta 9.0/5, oppure 9/5.0.
2. Nella printf passi un double, ma metti un %d. O fai un cast a in di quanto ritornato da fahrenheit(), oppure, melgio, metti un %f, al posto del secondo %d.

Re: Celsius to Fahrenheit in C

Inviato: dom 26 lug 2009, 21:06
da FireEater
Lol
Mi hai preceduto di un secondo!!

Anche io vedo quei 2 errori.

Quindi vai con %f, e 9.0!

Ciao

Re: Celsius to Fahrenheit in C

Inviato: dom 26 lug 2009, 21:16
da Blizzard
Offtopic:
robbybby ha scritto:Offtopic: 1. 9/5 fa 1, essendo una divisione fra interi. Devi dare 9.0/5.0. In realta' basta 9.0/5, oppure 9/5.0.
Offtopic:
mi confermi che il seguente errore è dovuto all'inferenza dei tipi del compilatore?
ovvero che tra due operandi interi sceglie di algoritmo la divisione int/int->int mentre specificando un double il compilatore esegue un cast implicito

(int->double)/double->double

giusto??? un po di ruggine sui compilatori comincia a manifestarsi :(

ciao
Gio

Re: Celsius to Fahrenheit in C

Inviato: dom 26 lug 2009, 22:06
da robbybby
@Blizzard: certo. Se il compilatore vede due interi, applica la divisione fra interi.
Se vede un intero e un double, eleva tutta l'espressione a double.

Se poi pensi al C++, dove puoi definire l'overloading dell'operatore / per un tipo definito dall'utente, le cose si fanno ancora piu' interessanti. Ma qui andiamo molto OT.

Re: Celsius to Fahrenheit in C

Inviato: lun 27 lug 2009, 7:42
da SIV
Ok ragazzi grazie mille :thumbright: Sono abbastanza ciuccio :D :D