1 00:00:00,000 --> 00:00:02,360 >> DAVID J. Malan: Kiel vi probable scias, temperaturoj estas mezuritaj per 2 00:00:02,360 --> 00:00:04,360 malsamaj skaloj en malsamajn partoj de la mondo. 3 00:00:04,360 --> 00:00:09,370 Ekzemple, 212 gradoj Fahrenheit estas 100 gradoj Celsius kaj 32 gradoj 4 00:00:09,370 --> 00:00:11,810 Fahrenheit estas 0 gradoj Celsius. 5 00:00:11,810 --> 00:00:14,230 Ĉu ne estus agrable, se ni havis komputilo Programo kiu ebligis al ni 6 00:00:14,230 --> 00:00:16,950 konverti de, ni diru, Fahrenheit al Celsius? 7 00:00:16,950 --> 00:00:18,510 >> Nu, ni povas skribi tiun programon. 8 00:00:18,510 --> 00:00:24,350 Ni unue komencu per inkluzivi cs50.h, tial ke ni povas uzi funkcio nomita 9 00:00:24,350 --> 00:00:28,610 get kaleŝego, kiuj, kiel get int, ricevas numeron de la uzanto, sed ĉi tiun fojon 10 00:00:28,610 --> 00:00:31,440 glitpunkta nombro - unu kun dekuma punkto. 11 00:00:31,440 --> 00:00:34,840 >> Ni ankaŭ inkludas normon io.h por ke ni havu aliron al 12 00:00:34,840 --> 00:00:36,230 funkcioj kiel presita f. 13 00:00:36,230 --> 00:00:40,000 Kaj ni ankaŭ deklaras ĉefajn en la kutima maniero. 14 00:00:40,000 --> 00:00:42,675 >> Ni sekvanta instigas la uzanton por a temperaturo en Fahrenheit. 15 00:00:42,675 --> 00:00:46,050 16 00:00:46,050 --> 00:00:49,220 Ni nun vere akiri tiu temperaturo de la uzanto, unue por 17 00:00:49,220 --> 00:00:52,910 deklari variablon nomitan f de tipon float. 18 00:00:52,910 --> 00:00:56,750 A kaleŝego, denove, signifanta variablo kiu stokas glitpunkta valoro, 19 00:00:56,750 --> 00:00:58,200 kun dekuma punkto. 20 00:00:58,200 --> 00:01:01,780 >> Ni atribuas al ĝi la reveno valoro de Get flosas. 21 00:01:01,780 --> 00:01:06,080 Kaj do ni faru iom de aritmetiko sur ĝi, unue deklari alian float 22 00:01:06,080 --> 00:01:11,690 nomata C por Celsius kaj vendejo en C la Escepte de kelkaj komunaj aritmetikaj. 23 00:01:11,690 --> 00:01:19,060 5.0 dividita per 9,0 fojojn F minus 32,0. 24 00:01:19,060 --> 00:01:23,440 >> Ni nun presi la rezulton de tiu kalkulado. 25 00:01:23,440 --> 00:01:24,730 procento f - 26 00:01:24,730 --> 00:01:27,890 montrante, a lokokupilo por glitpunktaj valoro - 27 00:01:27,890 --> 00:01:31,680 komo C por presi la temperaturo en gradoj. 28 00:01:31,680 --> 00:01:33,000 Ni savu mian finon. 29 00:01:33,000 --> 00:01:38,220 Kompili kun F al C. Ruli la programo kun skalara oblikvo F al C. 30 00:01:38,220 --> 00:01:39,940 >> Kaj ni provu tiujn komunajn temperaturojn. 31 00:01:39,940 --> 00:01:45,820 212 gradoj en Fahrenheit Estas 100 gradoj Celsius. 32 00:01:45,820 --> 00:01:50,090 32 gradoj en Fahrenheit estas 0 gradoj en Celsius. 33 00:01:50,090 --> 00:01:54,240 >> Nun lasas fajnigi tiun programon iom iom por ne presi tiom da 0 estas 34 00:01:54,240 --> 00:01:55,820 post tio dekuma loko. 35 00:01:55,820 --> 00:01:57,940 Por fari tion, mi tuj reiru al linio 11. 36 00:01:57,940 --> 00:02:03,430 Kaj anstataŭ nur specifi procento f, Mi tuj anstataŭe specifi, diru, 37 00:02:03,430 --> 00:02:08,800 0.1 f, informante print f, ke mi nur deziras presi glitpunkta valoro 38 00:02:08,800 --> 00:02:11,750 al unu valoro post la dekuma loko. 39 00:02:11,750 --> 00:02:13,630 >> Ni resave mia programo. 40 00:02:13,630 --> 00:02:19,680 Rekompili ĝin per ŝminko F al C. Tiam rerun ĝin per skalara oblikvo F al C. Kaj 41 00:02:19,680 --> 00:02:24,910 ni reprovi kun, ni diru, 212, kiu donas al mi 100.0. 42 00:02:24,910 --> 00:02:28,360 >> Nun estas notinde, ke mi faris iu tre intence en linio 9. 43 00:02:28,360 --> 00:02:35,830 Rimarku kiel mi skribis 5 estas 5.0, 9 kiel 9,0, kaj eĉ 32 kiel 32.0. 44 00:02:35,830 --> 00:02:39,000 Nu, la du unuaj de tiuj valoroj estis tre intence elektita al esti 45 00:02:39,000 --> 00:02:42,200 glitpunktaj valoroj, ne nur ĉar de coherencia kun la resto 46 00:02:42,200 --> 00:02:42,940 de mia programo - 47 00:02:42,940 --> 00:02:45,110 kiu klare implicas flosanta punkto valoroj - 48 00:02:45,110 --> 00:02:50,210 sed ĉar ĝi rezultas ke C: Se vi dividu an int per alia int, la 49 00:02:50,210 --> 00:02:54,350 rezultan respondon vi tuj akiri estas mem an int, eĉ se tio signifas 50 00:02:54,350 --> 00:02:57,450 devi forĵetu ĉio post la dekuma punkto. 51 00:02:57,450 --> 00:03:04,990 >> En aliaj vortoj, se mi ŝanĝos ĉi 5.0 al 5 aŭ ĉi 9.0 ĝis 9 kaj poste resave 52 00:03:04,990 --> 00:03:10,550 mia programo, rekompili kun make F al C, kaj tiam re-ruli ĝin per skalara oblikvo F 53 00:03:10,550 --> 00:03:15,310 al C kaj tipon de enigo de kiel 212, rimarki, ke la respondon mi tuj 54 00:03:15,310 --> 00:03:17,860 get ĉi tempo estas vere tre malbone. 55 00:03:17,860 --> 00:03:23,570 0.0 ne estas la korekta grado en Celsius kiel 212 Fahrenheit. 56 00:03:23,570 --> 00:03:24,500 >> Nu, kio okazas? 57 00:03:24,500 --> 00:03:29,410 Nu, en la linio 9, ĉar 5 estas nun entjera kaj ĉar 9 estas nun 58 00:03:29,410 --> 00:03:34,810 entjera, la rezulto matematike devus esti 0,5555 kaj tiel plu. 59 00:03:34,810 --> 00:03:39,120 Sed ĉar la rezulto, laŭ C la reguloj, devas esti int, ke 60 00:03:39,120 --> 00:03:44,020 0,5555 gets forĵetiĝas, lasante al ni nur 0. 61 00:03:44,020 --> 00:03:48,600 >> Do, en la fino, mi finas multiplikante tute hazarde 0 fojojn f minus 62 00:03:48,600 --> 00:03:52,830 32.0, kiu estas ne gravas ĉiam tuj donu al mi 0. 63 00:03:52,830 --> 00:03:56,930 Do memoru, iam uzi glitpunktaj valoroj en proksimeco de 64 00:03:56,930 --> 00:03:59,860 ints, vi eble ne nepre ricevi la respondon tiom vi atendas. 65 00:03:59,860 --> 00:04:04,220 Kaj do atentu uzi, kiel mi faris en la unua kazo, glitpunktaj valoroj 66 00:04:04,220 --> 00:04:06,530 tra eviti tiajn demandojn. 67 00:04:06,530 --> 00:04:08,267