1 00:00:00,000 --> 00:00:00,493 2 00:00:00,493 --> 00:00:09,860 >> [Mūzikas atskaņošanas] 3 00:00:09,860 --> 00:00:13,520 >> ZAMYLA Chan: Vai Jūs drīzāk saņemt $ 10000000 tagad vai saņemt 4 00:00:13,520 --> 00:00:17,460 pennies katru dienu mēneša, kur katru nākamo dienu, jūs saņemat 5 00:00:17,460 --> 00:00:21,280 divkāršā apmērā pennies jums saņēma dienu pirms? 6 00:00:21,280 --> 00:00:24,010 Jo pennies, mēs spēsim pierādīt, kāpēc jums vajadzētu 7 00:00:24,010 --> 00:00:27,000 noteikti veikt pennies. 8 00:00:27,000 --> 00:00:29,130 Tavs uzdevums ir rakstīt pennies.c, - 9 00:00:29,130 --> 00:00:33,330 programma, kas vispirms prasa lietotājam, kā vairākas dienas tur ir mēneša un 10 00:00:33,330 --> 00:00:38,780 tad jautā, cik daudz pennies lietotājs saņem pirmajā dienā. 11 00:00:38,780 --> 00:00:41,780 Programma pēc tam aprēķina summa, kas lietotājam būs 12 00:00:41,780 --> 00:00:46,530 uzkrāto beigās mēnesi, un parādīt to. 13 00:00:46,530 --> 00:00:49,670 >> Mēs varam pārtraukt šo programmu, nepārsniedzot uz pāris uzdevumus. 14 00:00:49,670 --> 00:00:52,830 Mums būs nepieciešams vaicāt vairāku lietotāju ieejas - 15 00:00:52,830 --> 00:00:55,510 dienas un mēnešus, un pennies gada pirmajā dienā. 16 00:00:55,510 --> 00:00:59,390 Mums ir nepieciešams, lai sekotu, cik daudz naudas lietotājam ir, un to atjaunina ik 17 00:00:59,390 --> 00:01:03,060 diena, dubultojot apjomu pennies, ka viņi saņem. 18 00:01:03,060 --> 00:01:06,710 Un visbeidzot, mēs drukāt to Galīgais kopējais, dolāros. 19 00:01:06,710 --> 00:01:08,570 >> Let 's risināt lietotāja ievadi pirmās. 20 00:01:08,570 --> 00:01:11,560 Es esmu gatavojas atvērt apples.c, īsa programma, kas nodarbojas 21 00:01:11,560 --> 00:01:13,840 ar ieejas un izejas. 22 00:01:13,840 --> 00:01:17,310 Augšpusē šeit, es esmu iekļauts dažus no bibliotēkām, kas man ir nepieciešams - 23 00:01:17,310 --> 00:01:20,450 CS50 bibliotēka un standarta I / O bibliotēka. 24 00:01:20,450 --> 00:01:24,310 Es izdrukāt ātru, izmantojot printf funkciju no 25 00:01:24,310 --> 00:01:25,660 standarta I / O bibliotēka. 26 00:01:25,660 --> 00:01:29,740 Bet faktiskā pamudinot no lietotāja notiek nākamajā Saskaņā ar šo 27 00:01:29,740 --> 00:01:33,650 GetInt funkcija CS50 bibliotēkā. 28 00:01:33,650 --> 00:01:38,300 >> GetInt saņem no lietotāja ievadi un nodrošina, ka izejviela ir vesels skaitlis. 29 00:01:38,300 --> 00:01:45,160 Tāpēc es glabāt lietotāja ieguldījumu skaitlim i, atņem 1 no I, un pēc tam 30 00:01:45,160 --> 00:01:47,610 izdrukāt jauno vērtību, ja es. 31 00:01:47,610 --> 00:01:53,050 Pēc apkopošanas apples.c, izmantojot komandu "padarīt ābolus," Man ir 32 00:01:53,050 --> 00:01:55,770 izpildāmo failu āboli. 33 00:01:55,770 --> 00:01:58,760 Rādīt, ka es ieeja 1. 34 00:01:58,760 --> 00:02:02,600 Programma man saka, ka Man ir 0 ābolus pa kreisi. 35 00:02:02,600 --> 00:02:05,480 Un tā, kas strādāja kā gaidīts. 36 00:02:05,480 --> 00:02:09,740 >> Tātad, pieņemsim palaist to atkal un ieejas negatīvs 1. 37 00:02:09,740 --> 00:02:13,950 Tagad, kam ir negatīva summa ābolu nav īsti jēgas, bet 38 00:02:13,950 --> 00:02:18,370 Programmas pieņem to, jo negatīvā 1, labi, tas ir vesels skaitlis. 39 00:02:18,370 --> 00:02:22,740 Un tagad programma vai briesmonis iekšā programma ēd negatīvs 40 00:02:22,740 --> 00:02:26,250 ābolu, un tagad man ir negatīvās 2 āboli. 41 00:02:26,250 --> 00:02:28,610 Hm, tā ir viena mācība - 42 00:02:28,610 --> 00:02:32,965 kaut GetInt funkciju un saistītās funkcijas, piemēram, GetFlow vai 43 00:02:32,965 --> 00:02:38,100 GetString iegūtu pareizo datu tipu, ir jāpārliecinās, ka ieejas padara 44 00:02:38,100 --> 00:02:41,430 sajūtu par savu programmu. 45 00:02:41,430 --> 00:02:45,500 >> Jo pennies, tas nav jādara, tikai ātri par skaitlim, jums būs nepieciešams veikt 46 00:02:45,500 --> 00:02:49,550 pārliecinieties, ka lietotājs izejvielas veselam skaitlim ka jēgas, ņemot vērā kontekstu. 47 00:02:49,550 --> 00:02:55,690 Mēnesis var būt tikai 28, 29, 30, 31 vai dienās. 48 00:02:55,690 --> 00:02:59,160 Mēs vēlamies, lai nepārtraukti pieprasīt derīgs skaitlim. 49 00:02:59,160 --> 00:03:03,240 Ja viņi ieejas veselu ārpus mūsu pieņemtās robežas, mēs ātri viņiem 50 00:03:03,240 --> 00:03:07,190 atkal un atkal, līdz jūs dod mums derīgu skaitli. 51 00:03:07,190 --> 00:03:10,070 >> Atsaukt "atkārtot līdz" bloķē nulles? 52 00:03:10,070 --> 00:03:13,070 Jūs varat veikt līdzīgu konstrukciju C, izmantojot ", bet" cilpa 53 00:03:13,070 --> 00:03:14,830 vai "do-kamēr" cilpa. 54 00:03:14,830 --> 00:03:18,280 Kamēr cilpa struktūra ir nosacījums, , kas ir jāizpilda, 55 00:03:18,280 --> 00:03:20,160 ķermenis no cilpas izpildīt. 56 00:03:20,160 --> 00:03:23,080 >> Tam vajadzētu izskatīties mazliet līdzīgi, jo nosacījums ir tāpat kā 57 00:03:23,080 --> 00:03:25,970 Scratch bloki ar leņķi un tērēta iekavās 58 00:03:25,970 --> 00:03:27,950 par ", bet" cilpa. 59 00:03:27,950 --> 00:03:30,600 Tā, ka nosacījums būs pārbaudīt, vai vesels skaitlis ir robežās 60 00:03:30,600 --> 00:03:32,680 attiecīgās robežas. 61 00:03:32,680 --> 00:03:36,620 Jūs varat ātri veselu izmantojot GetInt un tad izpildīt savu "laiku" 62 00:03:36,620 --> 00:03:41,030 cilpa, atkārtojot ātru un poligrāfijas instrukciju, bet ieejas 63 00:03:41,030 --> 00:03:43,470 nav derīga. 64 00:03:43,470 --> 00:03:47,610 >> Vēl viens veids, kā nodrošināt pareizu lietotāja ievadi ir, izmantojot "do-kamēr" cilpa, 65 00:03:47,610 --> 00:03:50,400 , kas ir ļoti līdzīgs, kamēr cilpa. 66 00:03:50,400 --> 00:03:54,950 "Do-kamēr" cilpa izpilda kodu iekšpusē ķermeņa tiem, un tad pārbaudes 67 00:03:54,950 --> 00:03:57,150 vai nosacījums ir izpildīts vai nav. 68 00:03:57,150 --> 00:04:00,590 Tas ir noderīgi, lai iegūtu lietotāja ievadi, jo jūs zināt, ka jums ir nepieciešams 69 00:04:00,590 --> 00:04:02,980 lai ātri viņiem vismaz vienu reizi. 70 00:04:02,980 --> 00:04:07,200 Ja nosacījums nav izpildīts, programma veiks līniju pēc 71 00:04:07,200 --> 00:04:08,530 jūsu "do-kamēr" cilpa. 72 00:04:08,530 --> 00:04:13,230 Ja nosacījums ir izpildīts, lai gan, cilpa atkārtos 73 00:04:13,230 --> 00:04:17,490 >> "Do-bet" cilpa apstiprināšanai lietotāju ieeja izskatās kaut kas līdzīgs šim. 74 00:04:17,490 --> 00:04:24,530 Es apliecinu, mainīgo n, GetInt, un Pēc tam atkārto, līdz n ir spēkā. 75 00:04:24,530 --> 00:04:28,040 Un šis process, man paskaidroja, bija, izmantojot skaitlim-datu tips, kas 76 00:04:28,040 --> 00:04:29,820 jūs izmantojat, lai mēneša dienām. 77 00:04:29,820 --> 00:04:33,560 Bet mēs zinām, ka skaits pennies būs uzkrāt ātri, tā, lai 78 00:04:33,560 --> 00:04:39,160 uzglabāt lielāku skaitu, izmantojiet datu tipu LongLong, bet atcerieties pats 79 00:04:39,160 --> 00:04:42,590 princips apstiprināšanas piemērojams. 80 00:04:42,590 --> 00:04:47,070 >> Awesome, tāpēc, kad mums ir divas derīgas izejvielas no lietotāja - 81 00:04:47,070 --> 00:04:49,530 dienas mēnesī un pennies pirmajā dienā - 82 00:04:49,530 --> 00:04:52,870 mēs varam virzīties uz nākamo daļa no programmas. 83 00:04:52,870 --> 00:04:56,680 Pirmā diena, lietotājs sākas ar tomēr daudzi pennies tie noteikti 84 00:04:56,680 --> 00:05:00,370 un summu pennies, ka viņi saņemt nākamajā dienā ir dubultojies. 85 00:05:00,370 --> 00:05:03,130 Tātad, tas ir jēga, lai sekotu no šīm divām summām - 86 00:05:03,130 --> 00:05:08,890 cik daudz naudas lietotājs ir un cik daudzi pennies tie būs dota. 87 00:05:08,890 --> 00:05:13,760 >> Tagad, darot kaut ko uz 28 līdz 31 dienu atkārtojas, tāpēc pieņemsim izmantot "par" 88 00:05:13,760 --> 00:05:18,220 cilpa atkārtot pār dienas, mēnesi, atjauninot kopējā un graša 89 00:05:18,220 --> 00:05:21,010 sasniegt katru reizi. 90 00:05:21,010 --> 00:05:23,550 "Par" cilpa sintakse satur punktu - 91 00:05:23,550 --> 00:05:27,510 inicializācijas, nosacījums, un atjaunināšana. 92 00:05:27,510 --> 00:05:29,590 Jūsu "par" cilpa būs sāktu mainīga, kad tas 93 00:05:29,590 --> 00:05:31,380 pirmo reizi nonāk cilpa. 94 00:05:31,380 --> 00:05:34,860 Ja nosacījums ir izpildīts, ķermeņa no cilpas būs izpildīt. 95 00:05:34,860 --> 00:05:36,860 Pēc tam, atjauninājums izpildīt. 96 00:05:36,860 --> 00:05:40,900 Ja nosacījums ir joprojām izpildīti, cilpa izpildīt un atjaunināt, un 97 00:05:40,900 --> 00:05:45,820 atkārtot, kamēr jūsu stāvokli novērtē kā patiess. 98 00:05:45,820 --> 00:05:51,080 >> Šeit ir "par" cilpa, kas sadala skaitlis p ar 2 pavisam 10 reizes. 99 00:05:51,080 --> 00:05:55,380 Ņemiet vērā, cik man paziņoja skaitlim p ārpus mana "par" cilpa, tā ka 100 00:05:55,380 --> 00:05:59,850 vesels skaitlis var būt pieejams ārpus "par" cilpa. 101 00:05:59,850 --> 00:06:03,620 Pēc mēnesi ir pagājis, ir pienācis laiks pateikt lietotājam, cik daudz naudas 102 00:06:03,620 --> 00:06:04,790 tie esam gotten. 103 00:06:04,790 --> 00:06:08,740 Per spec, jums ir nepieciešams, lai pastāstītu lietotāju cik daudz dolāru, nevis cik daudz 104 00:06:08,740 --> 00:06:10,780 pennies, viņi ir. 105 00:06:10,780 --> 00:06:14,620 Bet līdz šim, jūs esat tur līdzi kopā un pennies, izmantojot LongLongs, 106 00:06:14,620 --> 00:06:16,640 , kas ir veseli skaitļi. 107 00:06:16,640 --> 00:06:20,560 >> Ir 100 pennies līdz 1 $, tāpēc, ja pennies skaits ir 108 00:06:20,560 --> 00:06:24,860 dalās ar 100, jums ir nepieciešams, lai pārstāvēt zīmēm aiz komata. 109 00:06:24,860 --> 00:06:28,060 Dubultojies autotipija pieļauj jums to darīt. 110 00:06:28,060 --> 00:06:32,790 Tātad, kā mēs pārvērst pārstāvēt pennies dolāru? 111 00:06:32,790 --> 00:06:35,330 >> Pieņemsim to apskatīt pi.c. 112 00:06:35,330 --> 00:06:41,690 Šī programma aizņem LongLong big_pi un dala to ar 100,000, un izdrukas 113 00:06:41,690 --> 00:06:44,270 rezultāts piecām zīmēm aiz komata. 114 00:06:44,270 --> 00:06:48,560 Ja mēs vēlējāmies, lai parādītu četrām zīmēm vietas, tad mēs varam vienkārši aizstāt šo 115 00:06:48,560 --> 00:06:49,760 numuru šeit. 116 00:06:49,760 --> 00:06:58,370 Tā ļauj saglabāt, apkopo pi, un tad redzēt rezultātu, ko mēs 117 00:06:58,370 --> 00:07:02,240 gaida, lai 3,1415 - 118 00:07:02,240 --> 00:07:04,540 pirmie pieci cipari pi. 119 00:07:04,540 --> 00:07:06,300 >> Tas ir nav, lai gan. 120 00:07:06,300 --> 00:07:07,390 Un kāpēc? 121 00:07:07,390 --> 00:07:11,920 Nu, jo big_pi ir LongLong, kas ir vesels skaitlis, kas nav 122 00:07:11,920 --> 00:07:13,740 sekot līdzi aiz komata. 123 00:07:13,740 --> 00:07:16,850 Izmaiņas man ir nepieciešams, lai izdarīt ir sadalīšanu. 124 00:07:16,850 --> 00:07:23,300 Man vajag, lai nodoto dubultā šeit pirms dalot, jo dubultspēlē nevar saglabāt 125 00:07:23,300 --> 00:07:25,260 līdzi aiz komata. 126 00:07:25,260 --> 00:07:28,080 Un es esmu gatavojas pievienot jaunu rindu šeit labāk formatēšanu. 127 00:07:28,080 --> 00:07:33,090 128 00:07:33,090 --> 00:07:34,230 >> Un šeit mums ir tā - 129 00:07:34,230 --> 00:07:37,660 3,1416. 130 00:07:37,660 --> 00:07:43,520 Jūs ievērosiet, ka tas drukā 3,1416 vietā 3,1415, kā gaidīts. 131 00:07:43,520 --> 00:07:47,550 Tas ir tāpēc, ka tas kārtās laikā sadalīšana process, nevis tikai 132 00:07:47,550 --> 00:07:50,490 truncating vērtību. 133 00:07:50,490 --> 00:07:53,710 Tagad jums vajadzētu būt iespējai drukāt Galīgais kopējais pareizi, kas pabeidz 134 00:07:53,710 --> 00:07:54,870 programmu. 135 00:07:54,870 --> 00:07:55,930 >> Apsveicu. 136 00:07:55,930 --> 00:07:57,340 Mans vārds ir Zamyla. 137 00:07:57,340 --> 00:07:58,720 Un tas bija pennies. 138 00:07:58,720 --> 00:08:05,589 >> [Mūzikas atskaņošanas]