[Risolto] - Celsius to Fahrenheit in C

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
SIV
Linux 2.6
Linux 2.6
Messaggi: 921
Iscritto il: mer apr 25, 2007 14:07

[Risolto] - Celsius to Fahrenheit in C

Messaggioda SIV » dom lug 26, 2009 19:43

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 $
Ultima modifica di SIV il lun lug 27, 2009 7:43, modificato 1 volta in totale.

Avatar utente
robbybby
Linux 3.x
Linux 3.x
Messaggi: 1214
Iscritto il: sab dic 16, 2006 10:48
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5
Località: Fra Trantor e Terminus

Re: Celsius to Fahrenheit in C

Messaggioda robbybby » dom lug 26, 2009 20:28

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.

Avatar utente
FireEater
Linux 2.6
Linux 2.6
Messaggi: 508
Iscritto il: sab feb 05, 2005 0:00
Nome Cognome: Giuseppe M.
Slackware: Current
Kernel: 2.6.32.7-smp
Desktop: kde 4.3.4
Località: Cagliari <---> Torino
Contatta:

Re: Celsius to Fahrenheit in C

Messaggioda FireEater » dom lug 26, 2009 21:06

Lol
Mi hai preceduto di un secondo!!

Anche io vedo quei 2 errori.

Quindi vai con %f, e 9.0!

Ciao

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: Celsius to Fahrenheit in C

Messaggioda Blizzard » dom lug 26, 2009 21:16

Offtopic:
robbybby ha scritto: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.

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

Avatar utente
robbybby
Linux 3.x
Linux 3.x
Messaggi: 1214
Iscritto il: sab dic 16, 2006 10:48
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5
Località: Fra Trantor e Terminus

Re: Celsius to Fahrenheit in C

Messaggioda robbybby » dom lug 26, 2009 22:06

@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.

Avatar utente
SIV
Linux 2.6
Linux 2.6
Messaggi: 921
Iscritto il: mer apr 25, 2007 14:07

Re: Celsius to Fahrenheit in C

Messaggioda SIV » lun lug 27, 2009 7:42

Ok ragazzi grazie mille :thumbright: Sono abbastanza ciuccio :D :D


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti