1 00:00:00,000 --> 00:00:00,493 2 00:00:00,493 --> 00:00:09,860 >> [Muusika mängib] 3 00:00:09,860 --> 00:00:13,520 >> ZAMYLA CHAN: Kas sa pigem saada 10000000 $ kohe ja vastu 4 00:00:13,520 --> 00:00:17,460 penni iga päev kuus, kus iga järgnev päev, saate 5 00:00:17,460 --> 00:00:21,280 kahekordistada penni te saanud päev varem? 6 00:00:21,280 --> 00:00:24,010 In penne, me läheme tõestada, miks sa peaksid 7 00:00:24,010 --> 00:00:27,000 kindlasti võtta penni. 8 00:00:27,000 --> 00:00:29,130 Sinu ülesanne on kirjutada pennies.c-- 9 00:00:29,130 --> 00:00:33,330 programm, mis kõigepealt küsib kasutajalt kuidas mitu päeva on kuul ja 10 00:00:33,330 --> 00:00:38,780 küsib, kui palju penne kasutaja saab esimesel päeval. 11 00:00:38,780 --> 00:00:41,780 Seejärel tuleks kava arvutada summa, et kasutajal on 12 00:00:41,780 --> 00:00:46,530 kogunenud lõpus kuu ja näitab seda. 13 00:00:46,530 --> 00:00:49,670 >> Saame murda selle programmi üles sisse paar ülesandeid. 14 00:00:49,670 --> 00:00:52,830 Me peame küsima Mitme kasutaja sisendite - 15 00:00:52,830 --> 00:00:55,510 päeva ja kuud, ja penne aasta esimesel päeval. 16 00:00:55,510 --> 00:00:59,390 Meil on vaja jälgida, kui palju raha kasutaja on ja mida ajakohastatakse iga 17 00:00:59,390 --> 00:01:03,060 päev, kahekordistades summa penni, et nad saavad. 18 00:01:03,060 --> 00:01:06,710 Ja lõpuks, me printida oma lõplik kogumaksumus, dollarites. 19 00:01:06,710 --> 00:01:08,570 >> Räägime kasutaja sisend esimene. 20 00:01:08,570 --> 00:01:11,560 Ma lähen avama apples.c, lühike programm, mis tegeleb 21 00:01:11,560 --> 00:01:13,840 koos sisendid ja väljundid. 22 00:01:13,840 --> 00:01:17,310 Ülaosas siin, olen lisanud mõned raamatukogude, et mul on vaja - 23 00:01:17,310 --> 00:01:20,450 CS50 raamatukogu ja standard I / O teek. 24 00:01:20,450 --> 00:01:24,310 Ma trükkida kiire abil printf funktsioon 25 00:01:24,310 --> 00:01:25,660 standard I / O teek. 26 00:01:25,660 --> 00:01:29,740 Kuid tegelik õhutusel kasutaja juhtub järgmise kooskõlas käesoleva 27 00:01:29,740 --> 00:01:33,650 GetInt funktsiooni CS50 raamatukogu. 28 00:01:33,650 --> 00:01:38,300 >> GetInt saab panus kasutaja ja tagab, et sisend on täisarv. 29 00:01:38,300 --> 00:01:45,160 Nii et ma salvestada kasutaja sisestatud täisarv i, lahutada 1 I, ja siis 30 00:01:45,160 --> 00:01:47,610 prindi välja uue väärtuse, kui i. 31 00:01:47,610 --> 00:01:53,050 Pärast koostamise apples.c abil käsk "teha õunad," Mul on 32 00:01:53,050 --> 00:01:55,770 käivitatava faili õunad. 33 00:01:55,770 --> 00:01:58,760 Running, et ma sisend 1. 34 00:01:58,760 --> 00:02:02,600 Programm ütleb mulle, et Mul on 0 õunad jäänud. 35 00:02:02,600 --> 00:02:05,480 Ja nii, et töötas ootuspäraselt. 36 00:02:05,480 --> 00:02:09,740 >> Teeme tee see uuesti ja sisend negatiivne 1. 37 00:02:09,740 --> 00:02:13,950 Nüüd, millel on negatiivne summa õunad ei ole tegelikult mõtet, kuid 38 00:02:13,950 --> 00:02:18,370 Programm võtab, sest negatiivne 1, noh, see on täisarv. 39 00:02:18,370 --> 00:02:22,740 Ja nüüd programmi või koletis sees programm sööb negatiivne 40 00:02:22,740 --> 00:02:26,250 õun, ja nüüd on mul negatiivne 2 õunad. 41 00:02:26,250 --> 00:02:28,610 Hm, nii et see on üks õppetund - 42 00:02:28,610 --> 00:02:32,965 kuigi GetInt funktsioon ja seotud funktsioone, nagu GetFlow või 43 00:02:32,965 --> 00:02:38,100 GetString saada õige andmetüüp, siis veenduma, et sisend muudab 44 00:02:38,100 --> 00:02:41,430 tunne oma programmi. 45 00:02:41,430 --> 00:02:45,500 >> In penne, ta ei tee lihtsalt kiire jaoks täisarv, peate tegema 46 00:02:45,500 --> 00:02:49,550 Veenduge, et kasutaja sisestatud täisarv mis mõtet antud kontekstis. 47 00:02:49,550 --> 00:02:55,690 Kuu võib olla ainult 28, 29, 30 või 31 päeva. 48 00:02:55,690 --> 00:02:59,160 Tahame pidevalt nõuda kehtiv täisarv. 49 00:02:59,160 --> 00:03:03,240 Kui nad input täisarv väljaspool meie tunnustatud piirides, siis me sundinud neid 50 00:03:03,240 --> 00:03:07,190 uuesti ja uuesti, kuni sa meile kehtiv täisarv. 51 00:03:07,190 --> 00:03:10,070 >> Meenuta "korrata kuni" blokeerida Scratch? 52 00:03:10,070 --> 00:03:13,070 Võite teha sarnane konstruktsioon C kasutades "while" loop 53 00:03:13,070 --> 00:03:14,830 või "tee-kui" loop. 54 00:03:14,830 --> 00:03:18,280 Samas loop struktuur on tingimus mis peavad olema täidetud 55 00:03:18,280 --> 00:03:20,160 keha loop täita. 56 00:03:20,160 --> 00:03:23,080 >> See peaks vaatama natuke sarnased, sest tingimus on nagu 57 00:03:23,080 --> 00:03:25,970 Scratch plokid nurgad ja läheb sulgudes 58 00:03:25,970 --> 00:03:27,950 ning "kui" loop. 59 00:03:27,950 --> 00:03:30,600 Nii on see tingimus kontrollida, kas täisarv on sees 60 00:03:30,600 --> 00:03:32,680 asjakohane piire. 61 00:03:32,680 --> 00:03:36,620 Võite paluda täisarv kasutades GetInt ja seejärel täita oma "kui" 62 00:03:36,620 --> 00:03:41,030 loop, korrates kiire ja trükkimine juhiseid, kui sisend 63 00:03:41,030 --> 00:03:43,470 ei kehti. 64 00:03:43,470 --> 00:03:47,610 >> Teine võimalus, et tagada õige kasutaja sisend on kasutada "tee-kui" loop, 65 00:03:47,610 --> 00:03:50,400 mis on väga sarnane Kuigi silmus. 66 00:03:50,400 --> 00:03:54,950 "Tee-kui" loop täidab kood kehas ones ja seejärel kontrolli 67 00:03:54,950 --> 00:03:57,150 kas tingimus on täidetud või mitte. 68 00:03:57,150 --> 00:04:00,590 See on kasulik saada kasutaja sisend, sest sa tead, et sa pead 69 00:04:00,590 --> 00:04:02,980 ajendab neid vähemalt üks kord. 70 00:04:02,980 --> 00:04:07,200 Kui tingimus ei ole täidetud, programm täidab rida pärast 71 00:04:07,200 --> 00:04:08,530 oma "tee-kui" loop. 72 00:04:08,530 --> 00:04:13,230 Kui tingimus on täidetud, kuigi loop kordub 73 00:04:13,230 --> 00:04:17,490 >> "Tee-kui" loop kinnitamise kasutaja sisend välja midagi sellist. 74 00:04:17,490 --> 00:04:24,530 Kinnitan muutuja n, GetInt ja korrake kuni n on kehtiv. 75 00:04:24,530 --> 00:04:28,040 Ja selles protsessis, ma selgitasin, oli kasutades täisarv-andmetüüp, mis 76 00:04:28,040 --> 00:04:29,820 saad kasutada päeva kuus. 77 00:04:29,820 --> 00:04:33,560 Aga me teame, et mitmed penni kuhjuma kiiresti, nii et 78 00:04:33,560 --> 00:04:39,160 salvestada suuremaid numbreid kasutada andmetüübi Longlong, kuid pidage meeles, sama 79 00:04:39,160 --> 00:04:42,590 põhimõtte kinnitamine kehtib. 80 00:04:42,590 --> 00:04:47,070 >> Awesome, nii et kui meil on kaks kehtivat sisendeid kasutaja - 81 00:04:47,070 --> 00:04:49,530 päeva kuu ja penne esimesel päeval - 82 00:04:49,530 --> 00:04:52,870 saame liikuda onto järgmise programmi osa. 83 00:04:52,870 --> 00:04:56,680 Esimene päev, kasutaja algab aga palju penne nad määratletud 84 00:04:56,680 --> 00:05:00,370 ja summa penne et nad saada järgmisel päeval on kahekordistunud. 85 00:05:00,370 --> 00:05:03,130 Seega on mõistlik jälgida nende kahe summa - 86 00:05:03,130 --> 00:05:08,890 kui palju raha kasutaja on ja kuidas palju penne nad anda. 87 00:05:08,890 --> 00:05:13,760 >> Nüüd teeme midagi 28-31 päeva on korduv, niiet kasutada "poolt" 88 00:05:13,760 --> 00:05:18,220 silmuse korrata üle päeva kuu, ajakohastamise ja kogu senti 89 00:05:18,220 --> 00:05:21,010 summa iga kord. 90 00:05:21,010 --> 00:05:23,550 "Sest" loop süntaks sisaldab järgmine - 91 00:05:23,550 --> 00:05:27,510 käivitamise, tingimusel, ja uuendatud. 92 00:05:27,510 --> 00:05:29,590 Sinu "poolt" loop initsialiseerida muutuja, kui see 93 00:05:29,590 --> 00:05:31,380 kõigepealt siseneb loop. 94 00:05:31,380 --> 00:05:34,860 Kui tingimus on täidetud, keha of loop täidab. 95 00:05:34,860 --> 00:05:36,860 Hiljem uuendus täidab. 96 00:05:36,860 --> 00:05:40,900 Kui tingimus on siiski täidetud, loop täidab ja ajakohastada ja 97 00:05:40,900 --> 00:05:45,820 Kordan, et nii kaua, kui teie seisund TRUE. 98 00:05:45,820 --> 00:05:51,080 >> Siin on "poolt" loop, mis jagab täisarv p 2, kokku 10 korda. 99 00:05:51,080 --> 00:05:55,380 Vaadake, kuidas ma kuulutatud täisarv p väljaspool minu "for" loop, nii et 100 00:05:55,380 --> 00:05:59,850 täisarv võib olla kättesaadav väljaspool "for" loop. 101 00:05:59,850 --> 00:06:03,620 Pärast kuu on möödas, on aeg öelda kasutaja, kui palju raha 102 00:06:03,620 --> 00:06:04,790 olen saanud. 103 00:06:04,790 --> 00:06:08,740 Per spec, sa pead ütlema kasutaja mitu dollarit, mitte kui palju 104 00:06:08,740 --> 00:06:10,780 penni, mis neil on. 105 00:06:10,780 --> 00:06:14,620 Aga seni, kui olete hoidnud silma peal kokku ja penne kasutades LongLongs, 106 00:06:14,620 --> 00:06:16,640 mis on täisarve. 107 00:06:16,640 --> 00:06:20,560 >> Seal on 100 penni $ 1, ainult juhul, kui arvu penne on 108 00:06:20,560 --> 00:06:24,860 mitmekordselt 100, peate esindama koma. 109 00:06:24,860 --> 00:06:28,060 Kahekordistunud AUTOTYPE võimaldab sa seda teha. 110 00:06:28,060 --> 00:06:32,790 Niisiis, kuidas me teisendada esindada penni dollarit? 111 00:06:32,790 --> 00:06:35,330 >> Võtame pilk pi.c. 112 00:06:35,330 --> 00:06:41,690 See programm võtab longlong big_pi ja jagab seda 100000 ja prindib 113 00:06:41,690 --> 00:06:44,270 tulemuse viis kohta pärast koma. 114 00:06:44,270 --> 00:06:48,560 Kui me tahtsime näidata nelja kohaga kohti, siis saame lihtsalt asendada see 115 00:06:48,560 --> 00:06:49,760 number siin. 116 00:06:49,760 --> 00:06:58,370 Teeme salvestada, kompileerida pi ja siis näha tulemust, mida me 117 00:06:58,370 --> 00:07:02,240 oodata, et oleks 3,1415 - 118 00:07:02,240 --> 00:07:04,540 Esimese viie numbrit pi. 119 00:07:04,540 --> 00:07:06,300 >> See ei ole küll. 120 00:07:06,300 --> 00:07:07,390 Ja miks? 121 00:07:07,390 --> 00:07:11,920 Noh, kuna big_pi on longlong, mis on täisarv, mis ei 122 00:07:11,920 --> 00:07:13,740 jälgima koma. 123 00:07:13,740 --> 00:07:16,850 Muutmine Pean teha on jagunemisel. 124 00:07:16,850 --> 00:07:23,300 Pean enamus topelt siin enne jagamisel, sest kahekordistab ei suuda 125 00:07:23,300 --> 00:07:25,260 arvet koma. 126 00:07:25,260 --> 00:07:28,080 Ja ma lisada uus rida siin paremat formaati. 127 00:07:28,080 --> 00:07:33,090 128 00:07:33,090 --> 00:07:34,230 >> Ja siin me oleme seda - 129 00:07:34,230 --> 00:07:37,660 3,1416. 130 00:07:37,660 --> 00:07:43,520 Te võite märgata, et see prindib 3,1416 asemel 3,1415 ootuspäraselt. 131 00:07:43,520 --> 00:07:47,550 Ongi, sest see pööret jagunemise protsessi, mitte lihtsalt 132 00:07:47,550 --> 00:07:50,490 ürita väärtus. 133 00:07:50,490 --> 00:07:53,710 Nüüd siis peaks olema võimalik välja trükkida lõplik kogumaksumus õigesti, mis lõpeb 134 00:07:53,710 --> 00:07:54,870 programmi. 135 00:07:54,870 --> 00:07:55,930 >> Palju õnne. 136 00:07:55,930 --> 00:07:57,340 Minu nimi on Zamyla. 137 00:07:57,340 --> 00:07:58,720 Ja see oli penni. 138 00:07:58,720 --> 00:08:05,589 >> [Muusika mängib]