Repository 32bit  Forum
Repository 64bit  Wiki

[Risolto] - Celsius to Fahrenheit in C

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[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
SIV
Linux 2.6
Linux 2.6
 
Messaggi: 911
Iscritto il: mer apr 25, 2007 14:07
Località: Bari (Provincia)
Distribuzione: ArchLinux

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
robbybby
Linux 3.x
Linux 3.x
 
Messaggi: 1077
Iscritto il: sab dic 16, 2006 11:48
Località: Fra Trantor e Terminus
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5

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
FireEater
Linux 2.6
Linux 2.6
 
Messaggi: 508
Iscritto il: sab feb 05, 2005 1:00
Località: Cagliari <---> Torino
Nome Cognome: Giuseppe M.
Slackware: Current
Kernel: 2.6.32.7-smp
Desktop: kde 4.3.4

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
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 23:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

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
robbybby
Linux 3.x
Linux 3.x
 
Messaggi: 1077
Iscritto il: sab dic 16, 2006 11:48
Località: Fra Trantor e Terminus
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5

Re: Celsius to Fahrenheit in C

Messaggioda SIV » lun lug 27, 2009 7:42

Ok ragazzi grazie mille :thumbright: Sono abbastanza ciuccio :D :D
Avatar utente
SIV
Linux 2.6
Linux 2.6
 
Messaggi: 911
Iscritto il: mer apr 25, 2007 14:07
Località: Bari (Provincia)
Distribuzione: ArchLinux


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti