1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:01,960 Tagapagsalita 1: makipag-usap tungkol sa tubig Hayaan. 3 00:00:01,960 --> 00:00:07,280 Sa problemang ito, hinihiling namin ang gumagamit ay upang sabihin sa amin kung gaano katagal sa ilang minuto ang kanilang shower ay 4 00:00:07,280 --> 00:00:11,040 at pagkatapos namin makalkula ang katumbas bilang ng mga bote ng tubig 5 00:00:11,040 --> 00:00:12,970 na ang kanilang shower ginagamit. 6 00:00:12,970 --> 00:00:16,379 >> Kaya kung ano ay ang aming to-do ni para sa problemang ito? 7 00:00:16,379 --> 00:00:20,050 Una, kami ay pagpunta sa gusto upang i-prompt at pagkatapos ay patunayan 8 00:00:20,050 --> 00:00:22,100 ang input na nagbibigay sa gumagamit ng sa amin. 9 00:00:22,100 --> 00:00:24,790 Sa sandaling kami ay masiguro na kami may wastong input ng user, 10 00:00:24,790 --> 00:00:28,230 kami ay pagpunta upang makalkula ang katumbas na bilang ng mga bote ng tubig 11 00:00:28,230 --> 00:00:30,770 na ang gumagamit ay may sa panahon kanilang shower, at pagkatapos ay kami ay 12 00:00:30,770 --> 00:00:33,720 pagpunta sa sabihin sa kanila sa pamamagitan ng pag-print out ang numerong iyon. 13 00:00:33,720 --> 00:00:37,230 >> Kaya sabihin pagharap sa isang bagay ang aming unang gawain, pagdikta at pagpapatunay 14 00:00:37,230 --> 00:00:38,550 ang user input. 15 00:00:38,550 --> 00:00:40,910 Para sa mga ito namin na nakasulat sa isang function na para sa iyo na tinatawag na 16 00:00:40,910 --> 00:00:43,950 get_int matatagpuan sa CS50 Library. 17 00:00:43,950 --> 00:00:48,710 get_int Sinisiguro nito na ang input ng user isang integer, kaya ang anumang mga positibong numero, 18 00:00:48,710 --> 00:00:51,700 negatibong numero, o zero ay ang lahat ng tinanggap. 19 00:00:51,700 --> 00:00:55,900 Ngunit kung ang user ay input sa anumang bagay, kaya ang anumang kumbinasyon ng mga titik o numero 20 00:00:55,900 --> 00:00:59,710 o decimal na numero, pagkatapos ay ang user ay sinenyasan upang muling subukan 21 00:00:59,710 --> 00:01:04,319 at ang function ay hindi tatanggap ng anumang bagay hanggang ang gumagamit ay nagbibigay sa kanila ng isang integer. 22 00:01:04,319 --> 00:01:06,410 >> Kaya kung paano namin gamitin get_int? 23 00:01:06,410 --> 00:01:10,830 Kung binuksan mo ang iyong workspace at lumikha ng isang file na may pangalang integer.c sabihin 24 00:01:10,830 --> 00:01:12,110 i-type ang mga sumusunod. 25 00:01:12,110 --> 00:01:14,760 Hashtag isama cs50.h. 26 00:01:14,760 --> 00:01:18,480 Ito ay kinakailangan dahil get_int ay isang function cs50 library, 27 00:01:18,480 --> 00:01:21,890 kaya kailangan naming hashtag isama nito deklarasyon upang 28 00:01:21,890 --> 00:01:23,370 upang gamitin ang function. 29 00:01:23,370 --> 00:01:26,570 At pagkatapos ay sa aking pangunahing gumana Lamang ako ng pagpunta 30 00:01:26,570 --> 00:01:29,560 upang tawagan lamang ang function get_int. 31 00:01:29,560 --> 00:01:31,750 >> Kaya sabihin patakbuhin ito at makita kung paano ito gumagana. 32 00:01:31,750 --> 00:01:35,092 Naipasok ko na naipon ito, kaya sabihin pumunta lamang magpatuloy at patakbuhin ang program na ito, 33 00:01:35,092 --> 00:01:36,480 ./integer. 34 00:01:36,480 --> 00:01:39,880 Narito Mayroon akong isang prompt at narito ang kung saan ko input ang halaga. 35 00:01:39,880 --> 00:01:44,880 Sabihin ko bang ilagay sa loob lamang ng ilang mga integer, 50, ang excepts programa at quits 36 00:01:44,880 --> 00:01:45,960 at na na. 37 00:01:45,960 --> 00:01:49,350 >> Datapuwa't sinasabi tumakbo ko ito muli at I input ibang bagay. 38 00:01:49,350 --> 00:01:51,350 Marahil, kumusta mundo. 39 00:01:51,350 --> 00:01:55,660 Iyan ay hindi isang integer kaya ang programa ay prompt sa akin upang subukang muli. 40 00:01:55,660 --> 00:01:59,160 Subukan muli gamit Hayaan marahil isang decimal oras na ito. 41 00:01:59,160 --> 00:02:03,450 0.5, muli, hindi isang integer kaya ang programa ay hindi ito tatanggapin 42 00:02:03,450 --> 00:02:05,290 at makikita ito sabihin sa akin upang subukang muli. 43 00:02:05,290 --> 00:02:07,070 Kaya sabihin bigyan ito ng ibang numero. 44 00:02:07,070 --> 00:02:09,830 Ang programa ay tumatanggap ng ito, tabla, at kami ay tapos na. 45 00:02:09,830 --> 00:02:13,520 >> Kaya ngayon kami ay may isang function na nagbibigay-daan sa amin at nagsisiguro 46 00:02:13,520 --> 00:02:16,790 na ang gumagamit ay input ng integer, ngunit kung paano aming makakaya 47 00:02:16,790 --> 00:02:20,330 aktwal na subaybayan ang integer inputted sa pamamagitan ng user? 48 00:02:20,330 --> 00:02:25,260 Well, ang kailangan naming gawin ay store ang halaga na ito sa isang variable, sabihin n. 49 00:02:25,260 --> 00:02:30,580 Kaya kung ako'y nagpapahayag ng isang integer n, at ako magse-set na halaga sa get_int, 50 00:02:30,580 --> 00:02:34,700 pagkatapos n ay pagkatapos mag-imbak kahit anong Pinahahalagahan ang user inputted. 51 00:02:34,700 --> 00:02:38,620 >> O sige, kaya ngayon na natiyak namin na ang user ay bigyan kami ng isang integer 52 00:02:38,620 --> 00:02:42,550 at alam namin kung paano upang subaybayan ang ng integer, ngunit tandaan, 53 00:02:42,550 --> 00:02:45,610 integers ay parehong positibo at negatibong. 54 00:02:45,610 --> 00:02:49,110 Kaya ito ay hindi talagang magkaroon ng kahulugan sa konteksto ng ang problemang ito 55 00:02:49,110 --> 00:02:53,570 na ang gumagamit ay tumatagal ng isang shower ng sabihin negatibong 12 minuto. 56 00:02:53,570 --> 00:02:59,310 Kaya kailangan naming matiyak na ang gumagamit ay tunay na nagbibigay sa amin ng isang positibong integer. 57 00:02:59,310 --> 00:03:02,130 Ngayon hindi namin ay may lamang ng isang solong function para sa na, 58 00:03:02,130 --> 00:03:04,620 kaya kami ay pagpunta sa magkaroon ng upang lumikha ng na ating sarili. 59 00:03:04,620 --> 00:03:07,190 >> Kaya gusto namin upang patuloy na prompt ng gumagamit 60 00:03:07,190 --> 00:03:09,730 hanggang bigyan sila sa amin ng isang positibong integer. 61 00:03:09,730 --> 00:03:14,300 Kapag ako ay paggawa ng isang bagay patuloy pagkatapos na katulad sa isang loop, isang pag-uulit. 62 00:03:14,300 --> 00:03:19,130 Kaya isa sa mga constructs na ginagamit namin sa c upang ipatupad ang pag-uulit at mga loop 63 00:03:19,130 --> 00:03:20,410 ay isang habang loop. 64 00:03:20,410 --> 00:03:23,020 Kaya ang isang habang loop, bilang ipinapakita dito, ay execute 65 00:03:23,020 --> 00:03:27,030 kahit na ano ay sa katawan ng loop bilang hangga't ang ibinigay sinusuri kondisyon 66 00:03:27,030 --> 00:03:27,900 sa totoo. 67 00:03:27,900 --> 00:03:30,640 Sa sandali na kondisyon na sinusuri sa false, at pagkatapos ay 68 00:03:30,640 --> 00:03:34,830 ang programa ay magpatuloy sa kahit anong nauuna matapos ang katawan ng loop. 69 00:03:34,830 --> 00:03:39,400 >> Kaya habang loop ay pagpunta sa maging talagang kapaki-pakinabang sa CS50. 70 00:03:39,400 --> 00:03:42,590 Ngunit sa partikular na kaso, alam namin na kami 71 00:03:42,590 --> 00:03:48,140 pagpunta upang i-prompt ang user ay hindi bababa sa isang beses at pagkatapos lamang loop kung kinakailangan. 72 00:03:48,140 --> 00:03:51,080 Kaya dito namin dumating sa isang espesyal na tayuan at iyon ang 73 00:03:51,080 --> 00:03:55,020 halos kapareho sa habang loop na tinatawag na isang do-habang loop. 74 00:03:55,020 --> 00:03:58,840 >> Kaya ang isang do-habang loop executes ang katawan ng loop kahit isang beses 75 00:03:58,840 --> 00:04:01,750 at pagkatapos ito tseke upang makita kung ito ay dapat pugutan ng ulo, 76 00:04:01,750 --> 00:04:05,310 bilang laban sa isang habang loop, na kung saan ay suriin ang kalagayan 77 00:04:05,310 --> 00:04:07,200 at pagkatapos ay magsagawa ng katawan. 78 00:04:07,200 --> 00:04:11,880 Kaya sa isang do-habang loop kung ano ang maaaring namin gawin ay i-prompt ang user para sa isang integer, 79 00:04:11,880 --> 00:04:14,450 at pagkatapos ay tingnan kung ito ay hindi wasto o hindi. 80 00:04:14,450 --> 00:04:18,130 Kung ito ay hindi wasto, at pagkatapos ay kami ay ulitin ang proseso ng pagtatanong sa user 81 00:04:18,130 --> 00:04:22,290 upang bigyan kami ng isa pang integer, at pagkatapos ay lamang kapag na integer ay may-bisa, 82 00:04:22,290 --> 00:04:25,060 kami ay patuloy na anuman ang dumating pagkatapos. 83 00:04:25,060 --> 00:04:28,030 >> Ngayon mapapansin mo na ang deklarasyon ng integer n 84 00:04:28,030 --> 00:04:31,670 ay bahagyang naiiba sa kung ano ang aming ay bago sa nakaraang halimbawa 85 00:04:31,670 --> 00:04:33,640 at ito ay dahil sa saklaw. 86 00:04:33,640 --> 00:04:37,920 Kung kami sana ang ipinahayag ang integer n sa loob ng katawan ng do-habang loop, 87 00:04:37,920 --> 00:04:42,640 at pagkatapos ay hindi namin magagawang upang ma-access na halaga ng n labas ng mga kulot 88 00:04:42,640 --> 00:04:45,050 tirante na nagpapahiwatig ng katawan ng loop. 89 00:04:45,050 --> 00:04:51,080 Ngunit namin sa katunayan nais na ma-access ang halaga ng n sa susunod sa aming programa. 90 00:04:51,080 --> 00:04:55,730 >> OK, kaya ngayon sabihin makipag-usap tungkol sa ano ang kundisyong ito ay dapat na. 91 00:04:55,730 --> 00:05:00,400 Gusto naming lamang reprompt ang user hangga't n ay hindi wasto. 92 00:05:00,400 --> 00:05:04,640 Kaya sa tingin sa iyong sarili kung ano ang isang hindi wastong integer value magiging ganito ang hitsura 93 00:05:04,640 --> 00:05:08,060 at pagkatapos ay lumikha ng isang Boolean expression upang ipahayag na. 94 00:05:08,060 --> 00:05:13,070 >> halos Kami ay tapos na sa aming mga subtask ng pagdikta at pagpapatunay user input. 95 00:05:13,070 --> 00:05:16,010 Kaya sabihin gawin ang isang maliit na kaunti pang user friendly 96 00:05:16,010 --> 00:05:18,390 at bigyan ang gumagamit ng isang maliit na bit sa karagdagang impormasyon 97 00:05:18,390 --> 00:05:20,510 ng kung ano kami ay pagdikta sa kanila para sa. 98 00:05:20,510 --> 00:05:24,500 Kaya sabihin prompt ng gumagamit, alinsunod sa mga spec, na may string minuto. 99 00:05:24,500 --> 00:05:28,935 Kaya gamit ang iyong printf pahayag, gumawa siguraduhin na tumutugma sa iyo ito eksakto. 100 00:05:28,935 --> 00:05:30,230 >> Lahat tama. 101 00:05:30,230 --> 00:05:33,840 Kaya ngayon kami ay may isang wastong user input, ang isang positibong integer 102 00:05:33,840 --> 00:05:37,400 halaga para sa kung gaano karaming mga minuto sila na ginugol sa shower. 103 00:05:37,400 --> 00:05:41,300 Kaya kung ano ang susunod ay upang makalkula ang katumbas na bilang ng mga bote. 104 00:05:41,300 --> 00:05:45,250 Ano kami ay pagpunta sa gawin dito ay maaaring maging lubhang halata sa iyo sa una, 105 00:05:45,250 --> 00:05:46,640 at iyon ang OK. 106 00:05:46,640 --> 00:05:49,320 Ano ang gusto naming gawin ay kami nais na simulan ang pagsasanay 107 00:05:49,320 --> 00:05:53,810 ang ideya ng pag-detect ng mga pattern at pagbuo formulae para sa problema. 108 00:05:53,810 --> 00:05:57,200 >> Kaya kami ay sinabi sa bawat ang spec na isang minuto sa shower 109 00:05:57,200 --> 00:05:59,960 ay katumbas ng tungkol 12 bote ng tubig. 110 00:05:59,960 --> 00:06:03,020 Kaya pagkatapos ng dalawang minuto ng gagawin maging katumbas ng 24, 111 00:06:03,020 --> 00:06:05,850 at limang minuto ng gagawin maging katumbas ng 60. 112 00:06:05,850 --> 00:06:08,390 Kaya ngayon kung sa tingin mo nakuha mo na ito, pagkatapos ay sabihin 113 00:06:08,390 --> 00:06:10,390 tingnan kung maaari mong dumating up na may isang pattern o formula 114 00:06:10,390 --> 00:06:14,990 upang ipahayag kung tayo nga ay sabihin, n minuto, kung gaano karaming mga bote ng tubig 115 00:06:14,990 --> 00:06:17,930 Gusto na ipinahayag sa mga tuntunin ng n? 116 00:06:17,930 --> 00:06:20,680 >> Muli, kahit na ito ay maaaring maging simple sa una, 117 00:06:20,680 --> 00:06:23,240 sa susunod kapag makuha namin sa mas kumplikado problema 118 00:06:23,240 --> 00:06:26,360 kami ay pagpunta sa nais na makakuha ng sa ang pagsasanay ng pagkilala 119 00:06:26,360 --> 00:06:30,120 pattern at pagbuo formula upang malaman kung ang mga bagay na ito. 120 00:06:30,120 --> 00:06:33,450 >> Sa c mayroon kang access sa karaniwang arithmetic operations, 121 00:06:33,450 --> 00:06:36,520 karagdagan, pagbabawas, pagpaparami, at paghahati. 122 00:06:36,520 --> 00:06:38,420 Kaya kukunin ko na iwanan ito sa ka na ngayon upang malaman kung 123 00:06:38,420 --> 00:06:41,300 kung paano ipahayag ang katumbas na bilang ng mga bote 124 00:06:41,300 --> 00:06:43,990 na ang gumagamit ay natupok sa panahon ng kanilang shower. 125 00:06:43,990 --> 00:06:45,700 >> O sige, halos tapos na kami. 126 00:06:45,700 --> 00:06:50,650 sinenyasan namin ang gumagamit para sa kanilang input, kami natiyak na ito ay may-bisa input, 127 00:06:50,650 --> 00:06:53,330 at pagkatapos ay may korte out kung paano namin upang makalkula ang katumbas 128 00:06:53,330 --> 00:06:55,480 bilang ng mga bote na sila'y nangalilipol. 129 00:06:55,480 --> 00:06:59,430 Kaya ang huling bagay na gawin ay upang output ang katumbas na bilang ng mga bote 130 00:06:59,430 --> 00:07:02,410 at sana hikayatin ang mga ito upang makatipid ng tubig. 131 00:07:02,410 --> 00:07:06,270 >> Outputting ang halaga ay maging isang printf pahayag. 132 00:07:06,270 --> 00:07:09,720 Kung Nais kong sabihin sa iyo na ako may tatlong mga alagang hayop, halimbawa, 133 00:07:09,720 --> 00:07:13,090 maaari ko bang gamitin ang isang printf pahayag na mukhang isang bagay tulad nito. 134 00:07:13,090 --> 00:07:15,880 Mayroon akong tatlong mga alagang hayop, at ng isang bagong line for nice formatting. 135 00:07:15,880 --> 00:07:17,880 >> Ngayon hindi namin nais na lamang hard code mga bagay. 136 00:07:17,880 --> 00:07:20,740 Sabihing ang bilang ng aking mga alagang hayop ang mga pagbabago sa paglipas ng panahon. 137 00:07:20,740 --> 00:07:25,080 Pagkatapos ako pagpunta sa gumawa ng paggamit ng placeholder sa aking printf statement. 138 00:07:25,080 --> 00:07:27,350 Kaya dito ang aking numero ay isang integer. 139 00:07:27,350 --> 00:07:31,480 Kaya ako ng pagpunta sa gumawa ng isang placeholder para sa isang integer gamit% i. 140 00:07:31,480 --> 00:07:33,930 Ako pagpunta sa isulat ang string, at pagkatapos ay pagkatapos ng string 141 00:07:33,930 --> 00:07:38,000 Sumulat ako ng isang comma at pagkatapos ay ang variable na gusto kong i-print. 142 00:07:38,000 --> 00:07:42,730 Kaya na halaga ay ipi-print sa halip ng na placeholder,% i. 143 00:07:42,730 --> 00:07:47,630 >> Maaari mong gamitin ang mga placeholder, bilang na rin, para sa kamay na may isang% f. 144 00:07:47,630 --> 00:07:50,420 Maaari ka ring magkaroon ng maramihang placeholder sa isang string. 145 00:07:50,420 --> 00:07:53,950 Halimbawa, kung ako ay may ilang bilang ng mga aso at ilang bilang ng mga cats, 146 00:07:53,950 --> 00:07:59,210 Ko bang ilagay ang dalawang mga placeholder dito at pagkatapos ay ang aking dalawang variable sa kani order. 147 00:07:59,210 --> 00:08:03,130 >> Kaya ngayon na alam namin kung paano i-print ang mga halaga na naka-imbak sa mga variable, 148 00:08:03,130 --> 00:08:06,030 ang napaka huling bagay na gawin ay upang matiyak na kami 149 00:08:06,030 --> 00:08:10,920 i-print ang halaga sa ang eksaktong format ipinahiwatig sa pagtutukoy. 150 00:08:10,920 --> 00:08:14,990 Gamit na, na sinenyasan namin ang user at napatunayan ang kanilang input. 151 00:08:14,990 --> 00:08:17,920 pagkatapos na kinakalkula namin ang katumbas bilang ng mga bote ng tubig 152 00:08:17,920 --> 00:08:22,100 na ubusin sila sa panahon ng kanilang shower, at outputted na namin na halaga sa kanila. 153 00:08:22,100 --> 00:08:24,440 At sa gayon, natapos na namin ang tubig. 154 00:08:24,440 --> 00:08:28,730 >> Ang pangalan ko ay [? Zamila,?] at ito ay CS50. 155 00:08:28,730 --> 00:08:29,909