>> DAVID J. Malan: Kiel vi probable scias, temperaturoj estas mezuritaj per
malsamaj skaloj en malsamajn partoj de la mondo.
Ekzemple, 212 gradoj Fahrenheit estas 100 gradoj Celsius kaj 32 gradoj
Fahrenheit estas 0 gradoj Celsius.
Ĉu ne estus agrable, se ni havis komputilo Programo kiu ebligis al ni
konverti de, ni diru, Fahrenheit al Celsius?
>> Nu, ni povas skribi tiun programon.
Ni unue komencu per inkluzivi cs50.h, tial ke ni povas uzi funkcio nomita
get kaleŝego, kiuj, kiel get int, ricevas numeron de la uzanto, sed ĉi tiun fojon
glitpunkta nombro - unu kun dekuma punkto.
>> Ni ankaŭ inkludas normon io.h por ke ni havu aliron al
funkcioj kiel presita f.
Kaj ni ankaŭ deklaras ĉefajn en la kutima maniero.
>> Ni sekvanta instigas la uzanton por a temperaturo en Fahrenheit.
Ni nun vere akiri tiu temperaturo de la uzanto, unue por
deklari variablon nomitan f de tipon float.
A kaleŝego, denove, signifanta variablo kiu stokas glitpunkta valoro,
kun dekuma punkto.
>> Ni atribuas al ĝi la reveno valoro de Get flosas.
Kaj do ni faru iom de aritmetiko sur ĝi, unue deklari alian float
nomata C por Celsius kaj vendejo en C la Escepte de kelkaj komunaj aritmetikaj.
5.0 dividita per 9,0 fojojn F minus 32,0.
>> Ni nun presi la rezulton de tiu kalkulado.
procento f -
montrante, a lokokupilo por glitpunktaj valoro -
komo C por presi la temperaturo en gradoj.
Ni savu mian finon.
Kompili kun F al C. Ruli la programo kun skalara oblikvo F al C.
>> Kaj ni provu tiujn komunajn temperaturojn.
212 gradoj en Fahrenheit Estas 100 gradoj Celsius.
32 gradoj en Fahrenheit estas 0 gradoj en Celsius.
>> Nun lasas fajnigi tiun programon iom iom por ne presi tiom da 0 estas
post tio dekuma loko.
Por fari tion, mi tuj reiru al linio 11.
Kaj anstataŭ nur specifi procento f, Mi tuj anstataŭe specifi, diru,
0.1 f, informante print f, ke mi nur deziras presi glitpunkta valoro
al unu valoro post la dekuma loko.
>> Ni resave mia programo.
Rekompili ĝin per ŝminko F al C. Tiam rerun ĝin per skalara oblikvo F al C. Kaj
ni reprovi kun, ni diru, 212, kiu donas al mi 100.0.
>> Nun estas notinde, ke mi faris iu tre intence en linio 9.
Rimarku kiel mi skribis 5 estas 5.0, 9 kiel 9,0, kaj eĉ 32 kiel 32.0.
Nu, la du unuaj de tiuj valoroj estis tre intence elektita al esti
glitpunktaj valoroj, ne nur ĉar de coherencia kun la resto
de mia programo -
kiu klare implicas flosanta punkto valoroj -
sed ĉar ĝi rezultas ke C: Se vi dividu an int per alia int, la
rezultan respondon vi tuj akiri estas mem an int, eĉ se tio signifas
devi forĵetu ĉio post la dekuma punkto.
>> En aliaj vortoj, se mi ŝanĝos ĉi 5.0 al 5 aŭ ĉi 9.0 ĝis 9 kaj poste resave
mia programo, rekompili kun make F al C, kaj tiam re-ruli ĝin per skalara oblikvo F
al C kaj tipon de enigo de kiel 212, rimarki, ke la respondon mi tuj
get ĉi tempo estas vere tre malbone.
0.0 ne estas la korekta grado en Celsius kiel 212 Fahrenheit.
>> Nu, kio okazas?
Nu, en la linio 9, ĉar 5 estas nun entjera kaj ĉar 9 estas nun
entjera, la rezulto matematike devus esti 0,5555 kaj tiel plu.
Sed ĉar la rezulto, laŭ C la reguloj, devas esti int, ke
0,5555 gets forĵetiĝas, lasante al ni nur 0.
>> Do, en la fino, mi finas multiplikante tute hazarde 0 fojojn f minus
32.0, kiu estas ne gravas ĉiam tuj donu al mi 0.
Do memoru, iam uzi glitpunktaj valoroj en proksimeco de
ints, vi eble ne nepre ricevi la respondon tiom vi atendas.
Kaj do atentu uzi, kiel mi faris en la unua kazo, glitpunktaj valoroj
tra eviti tiajn demandojn.