1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Linggo 2, ipinagpatuloy] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Harvard University] 3 00:00:04,220 --> 00:00:06,880 [Ito ay CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Ayos lang. Ito ay CS50, at ito ay ang katapusan ng linggo 2. 5 00:00:10,990 --> 00:00:14,410 Kung inaasahan mong gutom sa paligid ng oras na ito bukas, 6 00:00:14,410 --> 00:00:18,620 alam na namin ay upang magtipun-tipon bilang isang maliit na grupo bukas, Huwebes, 1:15. 7 00:00:18,620 --> 00:00:21,360 Mayroon dito ang URL na ito kung nais mong i-RSVP. 8 00:00:21,360 --> 00:00:26,740 Space ay limitado, kaya mangyaring patawarin kung ang form ay napuno ng oras na punan ito. 9 00:00:26,740 --> 00:00:29,300 Isa pang URL, bagaman, na maaaring maging ng interes ito. 10 00:00:29,300 --> 00:00:32,369 Sa loob lamang tungkol sa oras ng isang buwan, ang kurso ang pagpunta sa ginawang magagamit 11 00:00:32,369 --> 00:00:36,890 ang lahat ng mga mas malawak sa pamamagitan ng edX, sa pamamagitan ng kung saan ang mga tao sa Internet upang sumunod, 12 00:00:36,890 --> 00:00:39,380 umaakit sa kurso medyo aktibong, sa katunayan. 13 00:00:39,380 --> 00:00:42,270 Makikita nila gamit ang CS50 Appliance at CS50 Talakayin 14 00:00:42,270 --> 00:00:45,490 at karamihan ng iba't ibang mga tool ng software na namin nai-gamit ito semestre. 15 00:00:45,490 --> 00:00:48,710 At isa sa mga hakbangin sa nais naming gumawa ng bilang isang eksperimento sa taong ito 16 00:00:48,710 --> 00:00:51,930 upang makita lamang kung magkano ang nilalaman maaari naming isalin 17 00:00:51,930 --> 00:00:53,960 sa ibang sinasalita at nakasulat na wika. 18 00:00:53,960 --> 00:00:57,500 Kaya kung maaaring mayroon ka ng interes sa mga kalahok sa proyektong ito 19 00:00:57,500 --> 00:01:02,270 kung saan magbibigay kami ng Ingles mga transcript at subtitle para sa mga aralin sa kurso 20 00:01:02,270 --> 00:01:05,450 at shorts at mga seminar at mga seksyon at tulad, 21 00:01:05,450 --> 00:01:08,200 kung nagsasalita ka matatas o isulat ang ilang iba pang mga wika matatas, 22 00:01:08,200 --> 00:01:12,290 ibig naming umaakit sa proyektong ito kung saan mong gawin sa isa o higit pa ng mga video, 23 00:01:12,290 --> 00:01:15,200 -translate ito sa isang wika na alam mo medyo na rin. 24 00:01:15,200 --> 00:01:18,700 >> Upang bigyan ka ng isang pakiramdam ng interface, mayroong ang web-based na interface ng gumagamit 25 00:01:18,700 --> 00:01:22,090 na kami gumagamit na lumikha ng mahalagang ng UI tulad nito. 26 00:01:22,090 --> 00:01:24,290 Ito sa akin ang pagtuturo ng ilang Halloween nakalipas, 27 00:01:24,290 --> 00:01:27,390 at sa kanang bahagi doon sa itim na susunod sa mga selyo ng oras, 28 00:01:27,390 --> 00:01:31,210 makikita mo ang iba't-ibang mga bagay na dumating out ng aking bibig sa araw na iyon, 29 00:01:31,210 --> 00:01:34,850 at pagkatapos ay sa ibaba nito magagawa mong isalin sa ilang iba pang mga wika 30 00:01:34,850 --> 00:01:38,690 kung ano mismo ang pagma-map ay sa pagitan ng, sa kasong ito, Ingles at, sabihin nating, Espanyol. 31 00:01:38,690 --> 00:01:40,440 Kaya ito ay talagang isang napaka-user-friendly na tool. 32 00:01:40,440 --> 00:01:43,370 Maaari mong i-rewind at fast-forward ang napaka kaagad na may mga shortcut sa keyboard. 33 00:01:43,370 --> 00:01:47,490 Kaya kung nais mong makibahagi sa eksperimentong ito at nakita ang iyong mga salita at magbasa 34 00:01:47,490 --> 00:01:51,850 sa pamamagitan ng mga potensyal na libo-libong mga tao out doon, mangyaring huwag huwag mag-atubiling upang lumahok. 35 00:01:51,850 --> 00:01:54,350 Isang salita tungkol sa mga kuting mula Lunes. 36 00:01:54,350 --> 00:02:00,350 Baka nagpadala kami ng isang labis na nakakatakot na mensahe, gawin mapagtanto na, ng mga oras sa opisina iminumungkahi 37 00:02:00,350 --> 00:02:03,300 at bilang iminumungkahi sa mga seksyon, ang disenyo ng kurso ay napaka 38 00:02:03,300 --> 00:02:07,360 na mga mag-aaral pakikipagtulungan at pakikipag-usap upang gumana sa pamamagitan ng mga hanay ng problema 39 00:02:07,360 --> 00:02:11,260 at mga problema nang sabay, at talagang linya lamang ay down sa, 40 00:02:11,260 --> 00:02:16,010 muli, ang trabaho mo sa huli isumite dapat iyong sariling. 41 00:02:16,010 --> 00:02:18,860 At kaya medyo totoo lang, sa oras ng opisina lubos na normal, 42 00:02:18,860 --> 00:02:22,240 lubos na ito na inaasahan kahit, na pakikipag-chat sa ilang mga kaibigan sa susunod sa iyo. 43 00:02:22,240 --> 00:02:24,370 >> Kung siya ay struggling na may ilang mga paksa at ikaw ay tulad, 44 00:02:24,370 --> 00:02:27,940 "Oh, well, hayaan mo akong bigyan ka ng isang sulyap ng ilang linya ng code na sinulat ni ko," na ang fine, 45 00:02:27,940 --> 00:02:31,250 nangyari iyon, at na napaka kaaya-aya, tingin ko, sa proseso ng pag-aaral. 46 00:02:31,250 --> 00:02:36,750 Saan ang linya ay makakakuha tumawid kapag ang ulo ang uri ng tagilid sa paglipas dito para sa malayo masyadong maraming mga segundo 47 00:02:36,750 --> 00:02:41,160 o minuto na talagang na lamang isang unblock pagkakataon para sa iyong mga kaibigan, 48 00:02:41,160 --> 00:02:44,160 at tiyak na kapag ang mga bagay ay makapag-palitan sa pamamagitan ng email at Dropbox at ang mga tulad ng, 49 00:02:44,160 --> 00:02:45,640 doon ay ang linya. 50 00:02:45,640 --> 00:02:48,620 Ito sa pamamagitan ng lahat ng paraan kumportable at tingin hinihikayat upang makipag-chat sa mga kaibigan 51 00:02:48,620 --> 00:02:52,810 at mga kaklase tungkol sa mga psets at higit pa at mapagtanto na ang huli mo isumite 52 00:02:52,810 --> 00:02:57,340 dapat talagang ang produkto ng iyong paglikha at hindi ibang tao. 53 00:02:57,340 --> 00:03:00,490 At kaya isa sa mga domain na tukoy na mga problema para sa pset2, 54 00:03:00,490 --> 00:03:04,740 na darating ang late bukas gabi, ay sumisid sa mundo ng cryptography, 55 00:03:04,740 --> 00:03:08,970 kung saan ay ang sining ng pag-encrypt o scrambling ng impormasyon, 56 00:03:08,970 --> 00:03:12,600 at ito huli nauugnay sa mundo ng seguridad. 57 00:03:12,600 --> 00:03:16,560 Ngayon, ang seguridad para sa karamihan sa atin ay sa anyo ng mga mekanismo medyo pangmundo. 58 00:03:16,560 --> 00:03:19,050 Lahat sa atin ay may username at password, 59 00:03:19,050 --> 00:03:23,450 at ang lahat sa atin ay may napaka-masamang username at password, malamang. 60 00:03:23,450 --> 00:03:28,240 >> Kung ang iyong password ay ang parehong sa maramihang mga website, na malamang na hindi ang pinakamahusay na ideya, 61 00:03:28,240 --> 00:03:30,070 bilang namin talakayin patungo sa pagtatapos ng semestre. 62 00:03:30,070 --> 00:03:34,720 Kung ang iyong password ay nakasulat sa isang sticky tandaan - walang magsisti - sa iyong monitor, 63 00:03:34,720 --> 00:03:38,350 na masyadong ay hindi kinakailangan ang pinakamahusay na disenyo ngunit medyo isang karaniwang kababalaghan. 64 00:03:38,350 --> 00:03:42,470 At kung hindi ka gumagamit ng cryptography upang i-encrypt ang iyong mga password, 65 00:03:42,470 --> 00:03:44,210 ang mga ito ay partikular na mahina. 66 00:03:44,210 --> 00:03:47,270 Kaya kung sa tingin mo ay pagiging sobrang matalino sa pamamagitan ng pagkakaroon ng isang nakatagong dokumento ng Word 67 00:03:47,270 --> 00:03:49,910 sa isang lugar sa iyong hard drive na may lahat ng iyong mga password 68 00:03:49,910 --> 00:03:53,670 ngunit sa isang folder na walang pagpunta sa tumingin sa, na masyadong ay hindi secure na mekanismo. 69 00:03:53,670 --> 00:03:56,990 At kaya kung ano pset2 ipakikilala ito sining ng cryptography 70 00:03:56,990 --> 00:04:02,010 at scrambling ng impormasyon upang ang mga bagay na tulad ng mga password ang lahat ng mga mas ligtas. 71 00:04:02,010 --> 00:04:05,790 Sa konteksto dito ay na may mga hindi secure na data 72 00:04:05,790 --> 00:04:07,930 ay isang pagkakataon upang i-encrypt at mang-uayabit ito. 73 00:04:07,930 --> 00:04:11,470 At kaya ito, halimbawa, ay isang halimbawa ng isang naka-encrypt na mensahe. 74 00:04:11,470 --> 00:04:14,700 Ito aktwal na nagsasabing isang bagay sa Ingles, ngunit ito ay malinaw na hindi ganap na pag halata. 75 00:04:14,700 --> 00:04:18,279 At kami na darating buong lupon ngayon sa manunudyo bukod kung ano ang lihim na mensahe dito. 76 00:04:18,279 --> 00:04:23,490 Ngunit sa tunay na mundo ng mga computer, mga bagay ay hindi kahit hitsura sila ng Ingles parirala. 77 00:04:23,490 --> 00:04:28,430 Halimbawa, ito ay kung ano ang maaari mong makita sa isang karaniwang Linux o Mac o UNIX computer na 78 00:04:28,430 --> 00:04:32,070 sa isang file na sabay-sabay kapag oras na tinatawag na ang password ng file. 79 00:04:32,070 --> 00:04:34,200 >> Kasalukuyan ito ay inilipat sa iba pang mga lugar. 80 00:04:34,200 --> 00:04:39,210 Ngunit kung titingnan mo sa tamang lugar sa isang sistema, makikita mo ang hindi lamang ang iyong username 81 00:04:39,210 --> 00:04:43,400 o ng iba pang mga tao sa system, ngunit makikita mo ang isang naka-encrypt na bersyon ng kanilang mga password. 82 00:04:43,400 --> 00:04:47,980 Sa katunayan, ang salitang silid sa ilalim ng lupa doon ay nagmumungkahi na ang mga sumusunod na bagay ay naka-encrypt, 83 00:04:47,980 --> 00:04:52,680 at ito serye ng mga tila random na titik at mga character at numero at iba pa 84 00:04:52,680 --> 00:04:56,480 maaaring decrypted lamang ng pangkalahatang alam ilang lihim - 85 00:04:56,480 --> 00:04:58,840 ng isang lihim na salita, ng isang lihim na numero - 86 00:04:58,840 --> 00:05:03,160 at kaya sa katunayan, ang sining ng cryptography sa huli kahulihan babagsak ito sa pinagkakatiwalaan ng uri 87 00:05:03,160 --> 00:05:05,650 at alam ng isang bagay na ang ibang tao ay hindi. 88 00:05:05,650 --> 00:05:10,090 Kaya makikita namin galugarin ito ng kaunti pang detalye ngayon at sa pset sa darating. 89 00:05:10,090 --> 00:05:12,200 At ngayon ng isang salita sa pass / mabibigo. 90 00:05:12,200 --> 00:05:15,360 Lalo na ng ilan sa inyo ay dived sa pset1, Appliance, 91 00:05:15,360 --> 00:05:19,080 at isang bagong mundo para sa iyong sarili, Napagtanto na mga frustrations at pagkalito 92 00:05:19,080 --> 00:05:21,700 at mga teknikal na problema ay lubos na inaasahan, 93 00:05:21,700 --> 00:05:24,180 lalo na sa unang pset, kung saan may lamang kaya magkano bagong, 94 00:05:24,180 --> 00:05:27,730 lamang sa pagkuha ng pamilyar may ls at cd at lahat ng mga arcane utos 95 00:05:27,730 --> 00:05:33,050 at isang bagong kapaligiran, at na hiwalay mula sa aktwal na materyal at mga programa mismo. 96 00:05:33,050 --> 00:05:36,940 Kaya Napagtanto masyadong na may mga tiyak na mga oras ng opisina na umiiral bilang isang istraktura ng suporta. 97 00:05:36,940 --> 00:05:38,880 >> Mga seksyon simulan ito darating na Linggo. 98 00:05:38,880 --> 00:05:42,960 Ngunit pinaka-mahalaga, kung ikaw ay pakiramdam lamang na hindi ito ang mundo para sa iyo, 99 00:05:42,960 --> 00:05:44,710 mapagtanto na ito ay talagang ay lamang tumagal ng oras. 100 00:05:44,710 --> 00:05:48,600 At mga hindi para sa pagkakataon na ito taon na ang nakakaraan para sa akin ng pagkuha ng isang klase ng pass / mabigo, 101 00:05:48,600 --> 00:05:50,990 totoo lang, hindi ko sana ay kahit nakatakda paa sa silid-aralan. 102 00:05:50,990 --> 00:05:53,690 At maaari mong baguhin ito hanggang, sabihin nating, sa ikalimang Lunes ng kurso, 103 00:05:53,690 --> 00:05:58,280 kaya kung ikaw ay sa dulo ngayon, nauunawaan natin na kaysa sa ulo sa ilang iba pang mga tubig sa kabuuan, 104 00:05:58,280 --> 00:06:01,260 tiyak na isaalang-alang na lamang pagbabago upang pumasa / mabibigo. 105 00:06:01,260 --> 00:06:04,570 Muli, hindi talaga ito kultura dito sa Harvard ng pagkuha ng mga bagay pumasa / mabibigo 106 00:06:04,570 --> 00:06:08,670 dahil lahat talaga gustong makamit o overachieve, 107 00:06:08,670 --> 00:06:11,130 ngunit lantaran, ito ay isang magandang paraan ng sinusubukan ng isang bagay out 108 00:06:11,130 --> 00:06:16,720 na maaaring hindi pamilyar sa iyo, at makikita mo paggawa, sa karamihan ng mga kaso, medyo fine, 109 00:06:16,720 --> 00:06:18,210 marahil magkano sa iyong sorpresa. 110 00:06:18,210 --> 00:06:20,980 At sa mas kongkreto mga tuntunin, kung ano ang tingin ko pumasa / mabibigo pangkalahatan ginagawa, 111 00:06:20,980 --> 00:06:22,940 lalo na kung maaari mong naranasan sa pset0, 112 00:06:22,940 --> 00:06:26,560 kung inilagay mo sa loob ng 10 oras, 15 oras, 25 oras sa ilang pset 113 00:06:26,560 --> 00:06:29,920 at ka banging iyong ulo laban sa pader at nakakakuha ito ng sobrang late sa gabi 114 00:06:29,920 --> 00:06:33,950 ngunit nagsagawa ang pset 90% ng paraan at mo lamang ay hindi maaaring malaman kung ang isang bagay, 115 00:06:33,950 --> 00:06:36,520 pumasa / mabibigo talagang tumatagal sa gilid ng isang klase tulad nito, 116 00:06:36,520 --> 00:06:39,100 kung saan maaari mong pag-uri-uriin ng maligaya sabihin, "Okay, alam ko hindi perpekto, 117 00:06:39,100 --> 00:06:42,350 ngunit nagtrabaho ako sa aking puwit sa, ako ay medyo masaya sa kung saan ito napunta, " 118 00:06:42,350 --> 00:06:44,850 at iyon ay matugunan ang mga inaasahan para sa pass / mabibigo. 119 00:06:44,850 --> 00:06:47,540 Kaya panatilihin na sa isip. Ayos lang. 120 00:06:47,540 --> 00:06:50,520 >> Kaya mga mo na struggled gamitin ang Harvard University Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 malaman na may CS50 SSID, isang koneksyon sa Wi-Fi, lumulutang sa paligid 122 00:06:54,780 --> 00:06:56,490 na maaaring mayroon ka ng mas mahusay na swerte para sa. 123 00:06:56,490 --> 00:07:00,130 Ang isang maliit na tumbalik na ang password para sa ito, kung nais mong upang subukan sa pagkonekta sa 124 00:07:00,130 --> 00:07:08,350 para sa mas mahusay na bilis - at ipaalam sa amin kung hindi mas mahusay na - ay 12345, ang lahat ng paraan sa hanggang 8 125 00:07:08,350 --> 00:07:10,910 dahil 8 ay mas ligtas sa 5. 126 00:07:10,910 --> 00:07:16,910 Kaya kung kailangan mo ang Wi-Fi password, kumonekta sa CS50 wireless dito, 12345678, 127 00:07:16,910 --> 00:07:20,380 at post sa CS50-usapan kung mayroon ka pa ring mga pasulput-sulpot na mga isyu sa pagkakakonekta, 128 00:07:20,380 --> 00:07:25,420 at ipapaalam namin ang mga kapangyarihan na ay malaman para sa puwang na ito. Ayos lang. 129 00:07:25,420 --> 00:07:32,230 Kaya isang mabilis na teaser, lalo na para sa mga mo na fan lalaki o babae ng lahat ng bagay na Apple. 130 00:07:32,230 --> 00:07:37,460 Ano ko utong up mula sa ilang taon na pabalik ang file na ito dito, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 lamang sa uri ng gawing mas kongkreto at mas kumplikado 132 00:07:39,930 --> 00:07:42,560 ang ilan sa mga pangunahing programa C namin ang pagsusulat. 133 00:07:42,560 --> 00:07:46,910 Kaya ko binuksan ang file na ito, iUnlock.c. Magagamit sa pahina ng aralin para sa ngayon. 134 00:07:46,910 --> 00:07:49,810 Sa kaliwang bahagi, makikita mo ang isang mahabang listahan ng mga function. 135 00:07:49,810 --> 00:07:53,230 Kaya ang kapwa na sinulat ni ito sinulat ni ng maraming mga pag-andar, higit pa sa pangunahing. 136 00:07:53,230 --> 00:07:57,340 Siya ay gumamit ng isang buong grupo ng mga aklatan dito, at kung sisimulan namin ang scroll sa pamamagitan ng, 137 00:07:57,340 --> 00:08:04,890 kung ano ito talaga ay ang unang, naniniwala ako, crack para sa orihinal na iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Kapag nais mong jailbreak ang orihinal na iPhone, na kung saan ay nangangahulugan na ang untether ito mula sa AT & T 139 00:08:09,830 --> 00:08:13,710 at aktwal na-install ng espesyal na software sa ito at gawin ang mga bagay na Apple ay hindi gusto ng mga tao na gawin, 140 00:08:13,710 --> 00:08:18,480 may kinuha ang oras upang malaman kung eksakto kung paano sila ay maaaring samantalahin ng mga flaws software, 141 00:08:18,480 --> 00:08:22,690 pagkakamali, bug, sa Apple software, at kaya ay ipinanganak na iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 na kung pinagsama-sama ito sa iyong computer at mai-install ito sa isang iPhone 143 00:08:26,760 --> 00:08:29,430 na konektado sa iyong computer sa pamamagitan ng, sabihin nating, isang USB cable, 144 00:08:29,430 --> 00:08:32,450 ito ay magbibigay sa iyo ng-administratibo o ugat na mga pribilehiyo sa iyong iPhone 145 00:08:32,450 --> 00:08:34,620 at hayaan ang gawin mo medyo magkano ang anumang nais mong. 146 00:08:34,620 --> 00:08:36,400 At kaya mayroong nangyaring ito kamangha-manghang cat at mouse laro 147 00:08:36,400 --> 00:08:39,340 sa pagitan ng Apple at ang ibang bahagi ng mundo sa partikular na habang ang mga ito, tulad ng maraming mga kumpanya, 148 00:08:39,340 --> 00:08:43,350 subukan upang i-lock ang kanilang mga bagay-bagay down sa gayon ay maaari mo lamang gawin sa mga ito kung ano ang iyong nilalayong sila. 149 00:08:43,350 --> 00:08:47,360 Ngunit salamat sa mga taong tulad nito at ang pang-unawa ng mababang antas na mga detalye - 150 00:08:47,360 --> 00:08:50,830 at sa kasong ito C programming - at ng maraming ng pamilyar na constructs 151 00:08:50,830 --> 00:08:55,280 na namin nasimulan ang paglalaro, ikaw ay sa talagang magamit ang hardware 152 00:08:55,280 --> 00:08:59,250 sa paraang nakikita mong akma at hindi kinakailangan ang ilang corporate entity. 153 00:08:59,250 --> 00:09:01,600 Kaya halimbawa, mayroon akong walang ideya kung ano ang lahat ng ito ay ginagawa, 154 00:09:01,600 --> 00:09:03,580 ngunit GetVersion tunog medyo direkta, 155 00:09:03,580 --> 00:09:05,710 at Mukhang ito ay isang function na ang taong ito sinulat ni. 156 00:09:05,710 --> 00:09:09,250 Ito ay tumatagal ng ilang uri ng integer bilang isang argument, ay hindi bumalik sa anumang, 157 00:09:09,250 --> 00:09:13,710 ngunit lumilitaw sa loop na may isang para sa loop dito at kung kundisyon, kung kundisyon pahinga, 158 00:09:13,710 --> 00:09:16,770 at sa paanuman nauugnay sa numero ng bersyon kung mag-scroll pababa namin, 159 00:09:16,770 --> 00:09:19,650 kahit na ng maraming ng mga keyword na ito ay pagpunta sa bagong. 160 00:09:19,650 --> 00:09:22,590 At may isang buong maraming mga function in dito hindi nakakita kami at maaaring hindi kailanman makita 161 00:09:22,590 --> 00:09:24,350 sa kabuuan ng semestre. 162 00:09:24,350 --> 00:09:29,160 >> Sa pagtatapos ng araw, ito ay sumusunod sa parehong mga alituntunin at logic na namin ang nagpe-play na may sa gayon malayo. 163 00:09:29,160 --> 00:09:34,340 Kaya ito ay malayo masyadong luma sa magpahaginit ang iyong iPhone 3s o 4s o madaling 5s mga araw na ito, 164 00:09:34,340 --> 00:09:38,830 ngunit alam na ito ang lahat ng napaka nakuha mula sa mundo na ito na namin ang dived sa. 165 00:09:38,830 --> 00:09:42,280 Natin ang isang pagtingin sa isang kaunti pa simpleng halimbawa: 166 00:09:42,280 --> 00:09:46,260 ang isang ito, upang warmed up na may ilang syntax at ding ilang iba pang mga uri ng data 167 00:09:46,260 --> 00:09:48,910 na namin ang uusapang tungkol sa ngunit hindi talaga nakita sa C. 168 00:09:48,910 --> 00:09:53,670 Ito ay isang file na tinatawag positive1.c, at bawat ang mga komento sa itaas, 169 00:09:53,670 --> 00:09:56,070 ito lamang hinihingi na ang isang gumagamit ay magbigay ng isang positibong numero. 170 00:09:56,070 --> 00:09:59,910 Kaya ito ay isang halimbawa ng do-habang loop, na maganda para sa mga user interactive na programa 171 00:09:59,910 --> 00:10:02,070 kung saan kailangan mong sabihin sa user upang gawin ang isang bagay, 172 00:10:02,070 --> 00:10:05,530 at kung hindi sila makikipagtulungan ka sumigaw sa kanila o tanggihan ang kanilang mga input. 173 00:10:05,530 --> 00:10:10,480 Kaso sa point: ako pagpunta sa gawin ang mga linya 19 sa pamamagitan ng 24 174 00:10:10,480 --> 00:10:14,620 hangga't ang user ay hindi ibinigay sa akin ng isang positibong numero. 175 00:10:14,620 --> 00:10:21,340 Ito detalye dito sa linya 18, bakit ko idedeklara n itaas ang buong looping bumuo 176 00:10:21,340 --> 00:10:26,870 kumpara sa tabi mismo sa linya 22 kung saan aktwal na ako pakialam upang makakuha n? Oo. 177 00:10:26,870 --> 00:10:29,330 [Mag-aaral] Saklaw. >> Oo, kaya ang isyu na ito ang saklaw. 178 00:10:29,330 --> 00:10:31,770 At sa mga tuntunin lego, ano ang saklaw sumangguni sa? 179 00:10:34,880 --> 00:10:41,560 Oo. >> [Hindi marinig tugon ng mag-aaral] >> Maaari ka nagsasalita ng kaunti louder? 180 00:10:41,560 --> 00:10:45,440 [Mag-aaral] Saan maaari mong ma-access ang na variable. >> Perpekto. 181 00:10:45,440 --> 00:10:47,610 Kung saan maaari mong ma-access ang isang partikular na variable. 182 00:10:47,610 --> 00:10:50,990 At sa pangkalahatan, ang pamantayan sa gayon ay malayo ay na ang saklaw ng ilang mga variable 183 00:10:50,990 --> 00:10:56,140 ay tinukoy sa pamamagitan ng ang pinakabagong kulot tirante na nakita mo. 184 00:10:56,140 --> 00:11:03,070 >> At kaya sa kasong ito, kung ginawa ko ang pagkakamali ng deklarasyon n sa linya 22, ang linya na gagana. 185 00:11:03,070 --> 00:11:10,840 Gusto ko ng isang int, at ko bang ilagay ang mga ito sa n na variable sa linya 22, 186 00:11:10,840 --> 00:11:17,060 ngunit kung aling linya ng code na ngayong magkaroon ng walang ideya kung ano ang ako ng pakikipag-usap tungkol sa? >> [Mag-aaral] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, at lumiliko ang 24 pati na rin dahil sa kasong ito Nabibilang ang labas ng ang kulot tirante. 188 00:11:23,840 --> 00:11:28,550 Kaya lamang ng kaunti ng isang istorbo ngunit lalong madaling malutas sa pamamagitan ng simpleng deklarasyon ng variable 189 00:11:28,550 --> 00:11:30,700 sa labas ng function na mismo. 190 00:11:30,700 --> 00:11:32,760 Susubukan naming makita mamaya maaari kang pumunta isang hakbang karagdagang 191 00:11:32,760 --> 00:11:34,940 at maaari mong kahit na makakuha ng isang maliit na tamad. 192 00:11:34,940 --> 00:11:39,660 At ito ay hindi inirerekomenda sa pangkalahatan, ngunit maaari mong kahit na makakuha ng mga tamad 193 00:11:39,660 --> 00:11:44,150 at ilagay sa isang variable sa buong mundo, kaya magsalita, hindi sa loob ng isang function, hindi sa loob ng isang loop, 194 00:11:44,150 --> 00:11:49,800 ngunit sa mismong file, sa labas ng lahat ng mga pag-andar na iyong nakasulat, tulad ng ginawa ko dito sa linya 15. 195 00:11:49,800 --> 00:11:55,220 Ito ay karaniwang frowned, ngunit mapagtanto na ito ay isang solusyon sa minsan sa iba pang mga problema, 196 00:11:55,220 --> 00:11:56,910 bilang namin ay makakita. 197 00:11:56,910 --> 00:11:59,500 Kaya sa ngayon ipapakita namin iwanan ito tulad nito, ngunit sabihin makita kung maaari naming muling isulat ito 198 00:11:59,500 --> 00:12:02,360 lamang upang simulan ang pagpapahayag sa ating sarili ng isang maliit na naiiba. 199 00:12:02,360 --> 00:12:05,550 Ang program na ito, upang maging malinaw, ay positive1. 200 00:12:05,550 --> 00:12:11,980 Hayaan akong magpatuloy dito at sa aking terminal na window positive1, Ipasok. 201 00:12:11,980 --> 00:12:15,080 Compiles okay. Ako pagpunta upang patakbuhin ang positive1, pindutin ang Enter. 202 00:12:15,080 --> 00:12:19,250 Hinihiling ko na ba ninyo akong bigyan ng isang positibong integer. Sasabihin kong -1. Na ay hindi gumagana. 203 00:12:19,250 --> 00:12:22,340 0, 99. Na mukhang upang gumana. 204 00:12:22,340 --> 00:12:25,310 Siguro hindi ang pinaka-mahigpit na pagsubok, ngunit hindi bababa sa isang magaling katinuan check 205 00:12:25,310 --> 00:12:27,100 na hindi namin sa kanan track. 206 00:12:27,100 --> 00:12:29,570 >> Kaya ngayon hayaan mo akong sige at buksan bersyon 2 ng ito, 207 00:12:29,570 --> 00:12:32,800 at kung ano ay naiiba na? 208 00:12:32,800 --> 00:12:39,030 Ipinapatupad ang parehong bagay, ngunit kung ano ang paglukso bilang malinaw iba't ibang oras na ito? 209 00:12:40,790 --> 00:12:47,090 Ito bool sa berde. Ito ay naka-highlight sa berde, ang keyword na ito na kilala bilang bool, kung saan ay isang uri ng data. 210 00:12:47,090 --> 00:12:50,510 Bakit hindi ito built in sa lahat ng mga bersyon ng C. 211 00:12:50,510 --> 00:12:52,650 Kailangan mong isama ang isang tiyak na library. 212 00:12:52,650 --> 00:12:56,460 Sa aming kaso, kasama ko CS50 library upang mayroon kaming access sa bool. 213 00:12:56,460 --> 00:12:59,860 Ngunit sa ika-18 linya, tila namin upang magkaroon ng isang Boolean halaga dito tinatawag na nagpapasalamat. 214 00:12:59,860 --> 00:13:02,190 Ko tinatawag na anumang ito, ngunit ko na tinatawag na ito nagpapasalamat 215 00:13:02,190 --> 00:13:04,750 lamang uri ng ihatid ilang semantiko kahulugan. 216 00:13:04,750 --> 00:13:07,700 Kaya simula sa linya 18, ako tila hindi nagpapasalamat 217 00:13:07,700 --> 00:13:12,230 dahil ang Boolean halaga nagpapasalamat nasimulan sa False sa linya 18. 218 00:13:12,230 --> 00:13:16,500 At pagkatapos ay tila kung ano ang nagawa ko na dito sa linya 21 sa pamamagitan ng 23 219 00:13:16,500 --> 00:13:19,200 ay ako na lamang ang uri ng rewritten aking logic. 220 00:13:19,200 --> 00:13:26,100 Kaya walang pagtakbo ibang, ngunit sa linya 22 ngayon ko masusuri kung ang int ang user 221 00:13:26,100 --> 00:13:31,360 ay mas malaki kaysa sa 0, pagkatapos ko lamang baguhin ang halaga ng nagpapasalamat sa true. 222 00:13:31,360 --> 00:13:35,590 At kung bakit ang gagawin ko na? Dahil sa linya 25, tila ako pagpunta upang suriin ang isang kalagayan. 223 00:13:35,590 --> 00:13:39,760 Gawin ito sa loop habang nagpapasalamat false. 224 00:13:39,760 --> 00:13:42,960 Kaya ko iminungkahi ito bilang isang kahalili sa bersyon 1 225 00:13:42,960 --> 00:13:47,050 dahil ito ay hindi bababa sa isang maliit na mas magaling marahil, ang kaunti pa grawnded sa Ingles. 226 00:13:47,050 --> 00:13:51,980 Kaya gawin ang mga sumusunod habang ikaw ay hindi nagpapasalamat o habang nagpapasalamat false. 227 00:13:51,980 --> 00:13:56,220 At oras na ito masyadong ko tila hindi pinapahalagahan matandaan kung ano ang user na nai-type sa 228 00:13:56,220 --> 00:14:00,050 dahil paunawa walang variable n, kaya aktwal, ang isang maliit na maliit na kasinungalingan doon. 229 00:14:00,050 --> 00:14:03,290 >> Pagtakbo, ang programa bit naiiba sandaling makuha namin sa ilalim ng 230 00:14:03,290 --> 00:14:04,960 dahil hindi ako alala kung ano n ay. 231 00:14:04,960 --> 00:14:09,120 Subalit Nais kong upang ipakita dito masyadong na kahit na nakakita kami GetInt 232 00:14:09,120 --> 00:14:13,780 at GetString ginagamit sa kanang bahagi ng isang equals sign sa gayon ay malayo 233 00:14:13,780 --> 00:14:17,310 kaya na tandaan namin ang halaga, technically, na hindi mahigpit na kinakailangan. 234 00:14:17,310 --> 00:14:20,290 Kung para sa anumang dahilan hindi mo lang pakialam sa i-save ang halaga, 235 00:14:20,290 --> 00:14:25,540 gusto mo lang upang suriin ang halaga, mapapansin na maaari lamang namin magsulat ito bilang GetInt, 236 00:14:25,540 --> 00:14:27,320 bukas paren, malapit paren. 237 00:14:27,320 --> 00:14:30,570 Na function ay nagbabalik ng halaga, bilang namin ang sinasabi. 238 00:14:30,570 --> 00:14:32,220 Ito ay upang bigyan ka ng isang int. 239 00:14:32,220 --> 00:14:34,460 At kaya kung sa tingin mo itak ng ito mangyari, 240 00:14:34,460 --> 00:14:38,190 kapag type ko sa 99, GetInt nagbabalik ang bilang 99, 241 00:14:38,190 --> 00:14:41,840 at kaya conceptually, na parang ang aking code ay aktwal na ito. 242 00:14:41,840 --> 00:14:45,950 Kaya kung 99 ay talagang mas malaki kaysa sa 0, pagkatapos ay nagpapasalamat nagiging totoo, 243 00:14:45,950 --> 00:14:50,810 linya 25 napagtanto ooh, tapos na kami dahil ako ngayon nagpapasalamat, 244 00:14:50,810 --> 00:14:53,970 at sa linya 26, lamang namin sabihin, "Salamat para sa positibong integer!" 245 00:14:53,970 --> 00:14:55,960 anumang nangyari ito upang maging. 246 00:14:55,960 --> 00:14:59,140 Ngayon sabihin gawin bahagyang sintaktik asukal dito, kaya na magsalita. 247 00:14:59,140 --> 00:15:04,670 Natin makita kung maaari naming linisin ang line 25 na ito ikatlong at huling variant sa positive3. 248 00:15:04,670 --> 00:15:13,600 >> Pansinin ang pagkakaiba lamang ngayon ay kung ano ang linya ng code? >> [Mag-aaral] 25. >> [Malan] Oo, 25. 249 00:15:13,600 --> 00:15:17,680 At hindi kami talagang nakikita nanlilinlang ito pa, ngunit hindi namin nakita ang exclamation point sa Lunes, 250 00:15:17,680 --> 00:15:21,070 kung saan Nagpapahiwatig ng kung ano? >> [Mag-aaral] Hindi. >> Hindi o hindi pagsang-ayon. 251 00:15:21,070 --> 00:15:23,510 Kaya tumagal ng Boolean halaga at i-flip ang halaga nito. 252 00:15:23,510 --> 00:15:25,810 Totoo nagiging maling, huwad na nagiging totoo. 253 00:15:25,810 --> 00:15:30,420 Kaya ito, nais kong ipanukala, kahit na isang maliit na mas madaling maunawaan paraan ng pagsulat ng code 254 00:15:30,420 --> 00:15:33,430 dahil ko pa rin initialize nagpapasalamat sa maling, ako pa rin gawin ang mga sumusunod, 255 00:15:33,430 --> 00:15:36,010 Ako magse-set nagpapasalamat sa true kapag may oras ang pagdating, 256 00:15:36,010 --> 00:15:40,880 ngunit ngayon ay maaari mo ba talagang lamang isalin ang code na ito pasalita kaliwa hanggang kanang, 257 00:15:40,880 --> 00:15:45,630 habang (nagpapasalamat!); dahil putok o exclamation point Nagpapahiwatig ang paniwala ng hindi, 258 00:15:45,630 --> 00:15:47,580 ito habang hindi nagpapasalamat. 259 00:15:47,580 --> 00:15:49,900 Kaya muli, hindi namin ipinakilala ng anumang mga bagong konsepto per se. 260 00:15:49,900 --> 00:15:53,730 Usapan natin ang tungkol Booleans pabalik kapag naglaro namin na may scratch, 261 00:15:53,730 --> 00:15:56,720 ngunit ngayon Napagtanto Maaari lang namin simulan ang pagsusulat ng aming code sa maraming iba't ibang paraan. 262 00:15:56,720 --> 00:16:01,060 Kaya lalo na sa pset1 kung ikaw ay ang uri ng struggling upang malaman kung ang paraan upang magsulat ng ilang mga programa, 263 00:16:01,060 --> 00:16:04,340 logro ay hindi sa swerte dahil maaaring maging anumang bilang ng mga solusyon 264 00:16:04,340 --> 00:16:06,110 na maaari mong mangyayari kapag. 265 00:16:06,110 --> 00:16:10,500 Halimbawa, ito ay may 3 para sa kahit na ang pinakasimpleng ng mga programa. Ayos lang. 266 00:16:10,500 --> 00:16:14,200 At ngayon isipin ang sa Lunes iniwanan namin sa ang tala na ito sa mga halaga ng return. 267 00:16:14,200 --> 00:16:18,450 Kaya para sa unang pagkakataon namin nagsulat ng programa na hindi lamang magkaroon ng mga pangunahing; 268 00:16:18,450 --> 00:16:22,550 ito din ay may sariling pasadyang function na sinulat ni ko dito. 269 00:16:22,550 --> 00:16:26,810 Kaya sa linya 31 sa pamamagitan ng 34 naipatupad ko na ang isang kubo function na. 270 00:16:26,810 --> 00:16:30,240 Hindi complex. Lang * a * a sa kasong ito. 271 00:16:30,240 --> 00:16:34,750 Ngunit kung ano ang mahalaga tungkol dito na ako pagkuha ng input sa form ng isang 272 00:16:34,750 --> 00:16:39,180 at ako bumabalik output sa form ng isang * a * a. 273 00:16:39,180 --> 00:16:43,560 Kaya ngayon mayroon akong kakayahan, tulad ng ginamit ko sa prinf nag-iisa, 274 00:16:43,560 --> 00:16:47,240 upang tawagan ang function na ito sa pamamagitan ng pagtawag sa function na kubo. 275 00:16:47,240 --> 00:16:51,970 >> At ang kubo function na tumatagal ng ilang mga input, at ang kubo function na nagbabalik ilang output. 276 00:16:51,970 --> 00:16:56,960 Sa pamamagitan ng kaibahan, printf ginawang isang bagay. 277 00:16:56,960 --> 00:17:00,840 Hindi ito ibalik anumang bagay na namin cared tungkol sa, kahit bilang isang bukod nagbabalik ng halaga; 278 00:17:00,840 --> 00:17:03,110 mo lang pangkalahatan huwag pansinin ang mga ito. 279 00:17:03,110 --> 00:17:06,510 Printf ginawang isang bagay. Ito ay isang bahagi epekto ng pag-print sa screen. 280 00:17:06,510 --> 00:17:11,770 Sa pamamagitan ng kaibahan dito, mayroon kaming kubo function, na aktwal na nagbabalik ng isang bagay. 281 00:17:11,770 --> 00:17:15,520 Kaya para sa mga pamilyar na ito, ito ay isang medyo tapat ideya. 282 00:17:15,520 --> 00:17:19,640 Ngunit para sa mga taong hindi gaanong pamilyar sa ito ideya ng pagpasa sa mga input at pagbalik output, 283 00:17:19,640 --> 00:17:21,950 subukan sabihin lamang ng isang bagay na sobrang simple. 284 00:17:21,950 --> 00:17:25,490 Ang sinuman kumportableng paparating na sa entablado maikling? 285 00:17:25,490 --> 00:17:28,040 Mayroon kang kumportable na may camera sa iyo pati na rin. Oo? Okay. 286 00:17:28,040 --> 00:17:31,240 Ano ang iyong pangalan? >> [Mag-aaral] Ken. >> Ken. Ayos lang. Ken, ay sa up. 287 00:17:31,240 --> 00:17:35,050 Ken ay isang function ng mga uri dito. 288 00:17:35,050 --> 00:17:38,720 Natin magpatuloy at gawin ito. Natin makakuha ng isang maliit magarbong. 289 00:17:38,720 --> 00:17:42,260 Masaya akong makilala kayo. Maligayang pagdating sa sentro yugto. Ayos lang. 290 00:17:42,260 --> 00:17:46,640 Natin pindutin ang pindutang ito dito. Ayos lang. 291 00:17:46,640 --> 00:17:49,820 Kaya dito mayroon kang isang modernong Chalkboard, 292 00:17:49,820 --> 00:17:53,470 at kung ano ang Ako ay ang pangunahing function na, halimbawa, 293 00:17:53,470 --> 00:17:56,460 at hindi ko magkaroon ng isang iPad sa aking kamay. 294 00:17:56,460 --> 00:17:59,710 >> Hindi ko talaga matandaan kung paano - Well, hindi ko masabi na. 295 00:17:59,710 --> 00:18:02,480 Hindi ko talaga may magandang sulat-kamay, 296 00:18:02,480 --> 00:18:05,520 at kaya samakatuwid Gusto kong mong i-print ang isang bagay sa screen para sa akin. 297 00:18:05,520 --> 00:18:12,040 Ako bilang pangunahing programa, at ako pagpunta sa sabihin mo ito 298 00:18:12,040 --> 00:18:16,720 sa pamamagitan ng pagsulat ito sa aking manok sa simula at pagkatapos ay pagpasa sa iyo ng isang input. 299 00:18:16,720 --> 00:18:20,400 Ulok Kaya kahit na ehersisyo ito ay, ang paniwala ng mga function at pagtawag ng isang function 300 00:18:20,400 --> 00:18:22,400 at nagbabalik ng isang function talagang boils down na ito. 301 00:18:22,400 --> 00:18:26,260 Ako pangunahing, lamang ko isinulat printf, quote-magpanipi isang bagay sa screen, 302 00:18:26,260 --> 00:18:29,110 Ako nagpapatakbo ng programang ito, at sa lalong madaling printf ay makakakuha ng tinatawag na, 303 00:18:29,110 --> 00:18:32,880 ito ay tumatagal ng isang argument o isang parameter minsan sa pagitan ng mga double quote. 304 00:18:32,880 --> 00:18:35,880 Narito ang argument na. Ako pagpasa ito sa Ken. 305 00:18:35,880 --> 00:18:39,020 Siya ay isang itim na kahon na nakasulat na ilang bilang ng mga taon na ang nakakaraan 306 00:18:39,020 --> 00:18:41,510 na tila lamang alam kung paano upang i-print ang mga bagay sa screen. 307 00:18:41,510 --> 00:18:43,150 Kaya execute. 308 00:18:49,280 --> 00:18:51,280 Iyon ay hindi masama. Napakabuti. 309 00:18:51,280 --> 00:18:55,510 Kaya ngayon Ken ay tapos Isinasagawa. Ba siya kailangang ipasa sa akin ng anumang pabalik? 310 00:18:55,510 --> 00:18:57,470 Hindi na nasaksihan namin sa gayon ay malayo. 311 00:18:57,470 --> 00:19:00,460 Muli, printf ay aktwal na magbalik ng numero, ngunit kami ay pagpunta upang huwag pansinin na sa ngayon 312 00:19:00,460 --> 00:19:03,470 dahil hindi namin ito ginamit. Kaya na ito para sa Ken. 313 00:19:03,470 --> 00:19:08,580 At kaya ngayon pangunahing kinakailangan sa paglipas ng kontrol ng programa muli 314 00:19:08,580 --> 00:19:11,060 dahil na linya ng code, printf, tapos na e-execute. 315 00:19:11,060 --> 00:19:14,050 At pumunta kami tungkol sa aming mga paraan, execute anumang iba pang mga linya ay may. 316 00:19:14,050 --> 00:19:17,320 Kaya ngayon sabihin subukan ang isang bahagyang naiiba halimbawa. 317 00:19:17,320 --> 00:19:24,940 Oras na ito dito sabihin munang i-clear ang screen, at ang oras na ito kami na ang cubing function na, 318 00:19:24,940 --> 00:19:27,080 ngunit ang oras na ito, inaasahan ko ng output halaga. 319 00:19:27,080 --> 00:19:29,180 >> Kaya sabihin magpatuloy at gawin ito. 320 00:19:29,180 --> 00:19:35,790 Ngayon Mayroon akong isang linya ng code na nagsasabing x nakakakuha ng kubo ng x. 321 00:19:41,370 --> 00:19:46,370 Ang linya ng code, manariwa sa diwa, ganito ang hitsura: x = kubo (x); 322 00:19:46,370 --> 00:19:50,930 Kaya paano ito upang gumana? Natin sige at bigyan ka ng isang puting screen muli. 323 00:19:50,930 --> 00:19:54,070 Ako pagpunta sa isulat ngayon ang halaga ng x, 324 00:19:54,070 --> 00:20:01,400 na sa sandaling ito sa oras mangyayari na, sabihin nating, 2 upang panatilihin itong simple. 325 00:20:01,400 --> 00:20:06,150 Isinulat ko sa isang piraso ng papel ang halaga ng 2, kung saan ang aking halaga x. 326 00:20:06,150 --> 00:20:10,920 Kong ipasa ang mga ito sa Ken. >> At ko lang isulat ang sagot? >> Oo, sabihin isulat ang sagot. 327 00:20:12,760 --> 00:20:18,940 Okay. At ngayon siya ay bumalik sa akin ng isang bagay. Perpekto. Nice segue. 328 00:20:18,940 --> 00:20:23,120 Kaya ngayon siya kamay ako pabalik ang halaga ng 8 sa kasong ito, at ano ang gagawin ko dito? 329 00:20:23,120 --> 00:20:28,250 Aktwal - sabihin makita, makakuha ng karapatang ito. Ano ako pagpunta sa gawin dito? 330 00:20:28,250 --> 00:20:33,440 Ngayon ako ang halagang ito at aktwal na-imbak ang mga ito sa mga parehong piraso sa memorya. 331 00:20:33,440 --> 00:20:35,170 Ngunit mapansin ako uri ng struggling dito. 332 00:20:35,170 --> 00:20:38,210 Ako ng kaunti nalilito dahil kung saan ko aktwal na isulat ang halaga ng x, 333 00:20:38,210 --> 00:20:43,150 dahil kung ano lang nagawa ko ang pisikal kamay Ken ng isang piraso ng papel na ay ang halaga 2, 334 00:20:43,150 --> 00:20:46,590 na x, at sa katunayan, na tiyak kung ano ang nangyari. 335 00:20:46,590 --> 00:20:50,210 Kaya ito lumiliko out na kapag Tinatawag mo ang function at pumasa ka sa isang argument 336 00:20:50,210 --> 00:20:53,290 tulad kumusta, mundo o pumasa ka sa isang argumento tulad ng 2, 337 00:20:53,290 --> 00:20:57,110 pangkalahatan, ikaw ay pagpasa sa isang kopya ng na argumento. 338 00:20:57,110 --> 00:21:00,730 At iba pa tulad ng ko sinulat ni ang bilang 2 dito at ipinasa ito sa Ken, 339 00:21:00,730 --> 00:21:04,720 na dapat ibig sabihin na hindi ko pa rin magkaroon ng isang kopya ng ang halaga 2 sa isang lugar 340 00:21:04,720 --> 00:21:08,890 dahil sa katunayan, ngayon na nakuha ko na ang halaga 8, kailangan ko upang bumalik sa RAM 341 00:21:08,890 --> 00:21:12,130 at aktwal na isulat 8 kung saan sabay-sabay ko ay ang bilang 2. 342 00:21:12,130 --> 00:21:16,950 Kaya biswal, tandaan ito paniwala ng pagpasa sa, literal, isang kopya ng halaga. 343 00:21:16,950 --> 00:21:20,780 >> Ken ginagawa ang kanyang bagay, kamay ako pabalik ng isang bagay - sa kasong ito ng halaga tulad ng 8 - 344 00:21:20,780 --> 00:21:24,980 at pagkatapos Mayroon akong na gawin ang isang bagay na may halaga na kung gusto ko upang panatilihin ito sa paligid. 345 00:21:24,980 --> 00:21:29,650 Kaya lahat ng ito ay bumalik sa lahat ng masyadong pamilyar bago mahaba. 346 00:21:29,650 --> 00:21:34,920 Salamat sa iyo kaya magkano para sa demo dito, Ken. [Palakpakan] 347 00:21:34,920 --> 00:21:36,920 Mahusay na tapos na. 348 00:21:36,920 --> 00:21:42,690 Natin makita kung paano na ganap na nauugnay sa ilang ng function na pagtawag na namin ang paggawa dito. 349 00:21:42,690 --> 00:21:47,910 Hayaan akong magpatuloy at dalhin sa amin pabalik sa cubing halimbawa dito. 350 00:21:47,910 --> 00:21:53,300 Pansinin na kung gusto namin upang aktwal na simulan ang pagkuha ito karagdagang, 351 00:21:53,300 --> 00:21:57,570 kami ay pagpunta sa may upang maging maingat ng ang katunayan na ang bilang ng x na naipasa in dito 352 00:21:57,570 --> 00:22:01,530 ay naiiba mula sa kung ano ang aktwal na nakapasa sa sa pag-andar. 353 00:22:01,530 --> 00:22:05,880 Kaya muli, ito pass sa pamamagitan ng kopya upang maging lubos na dyermeyn sa sandali lamang. 354 00:22:05,880 --> 00:22:09,580 Natin ng isang pagtingin sa isang bagay na ay hindi pa gumagana kanan pa. 355 00:22:09,580 --> 00:22:13,250 Ako pagpunta sa sige at buksan ang isang third halimbawa ng maraming surot, na flawed ng kalikasan, 356 00:22:13,250 --> 00:22:18,550 at ito ay tinatawag na buggy3 at ito ipinapatupad ng pagpapalit function na. 357 00:22:18,550 --> 00:22:25,110 Narito kami ay may isang pangunahing function na na x at y mang nasimulan sa 1 at 2, ayon sa pagkakasunud-sunod. 358 00:22:25,110 --> 00:22:27,700 Maaari naming gamitin ang GetInt, ngunit kailangan lang namin ng isang simpleng ehersisyo, 359 00:22:27,700 --> 00:22:30,170 kaya hard-code bilang 1 at 2. 360 00:22:30,170 --> 00:22:35,340 Sa linya 21 at 22, tila namin i-print ang x at y, 1 sa bawat linya. 361 00:22:35,340 --> 00:22:39,720 Pagkatapos ay sa ika-23 linya, inaangkin ko na ako pagpapalit ng mga halagang ito, tuldok, tuldok, tuldok. 362 00:22:39,720 --> 00:22:44,170 Ko tila tumawag sa isang function sa linya 24 makipagpalitan ng tinatawag na tumatagal ng 2 argumento. 363 00:22:44,170 --> 00:22:48,300 Lubos Ito ay legit para sa mga function sa tumagal ng 2 argumento. Nakakita kami printf gawin ito. 364 00:22:48,300 --> 00:22:51,830 >> Kaya makipagpalitan tila tumatagal x at y, at bilang ang pangalan nito nagmumungkahi, 365 00:22:51,830 --> 00:22:54,670 Gusto ko umaasa na ito upang magpalitan ng mga 2 halaga. 366 00:22:54,670 --> 00:23:00,090 Kaya inaangkin ko sa linya 25 "Swapped!" at i-print muli ko x at y 367 00:23:00,090 --> 00:23:03,070 sa ilalim ng mga palagay na sa katunayan ito ay nai-swapped. 368 00:23:03,070 --> 00:23:06,080 Ngunit kung ako aktwal na patakbuhin ang program na ito - hayaan mo akong buksan ang isang terminal na window, 369 00:23:06,080 --> 00:23:09,860 hayaan mo akong gumawa buggy3 - bilang ang pangalan ay nagmumungkahi, ito ay hindi pagpunta sa magtapos na rin 370 00:23:09,860 --> 00:23:15,770 dahil kapag ako ay pindutin ang Enter, mapapansin na ang x ay 1, y ay 2, 371 00:23:15,770 --> 00:23:19,420 at pa sa dulo ng programa, ang mga ito ay pa rin, sa katunayan, ang parehong. 372 00:23:19,420 --> 00:23:22,960 Kaya batay sa pagpapakita lamang ngayon sa Ken, kung ano ang aktwal na pagpunta sa? 373 00:23:22,960 --> 00:23:28,710 Natin dive sa ito function na makipagpalitan. Sobrang maikling. Ito ay lamang ng ilang linya ng code katagal. 374 00:23:28,710 --> 00:23:34,520 Ngunit ano ang pangunahing problema batay sa simpleng kuwento sinabi dito na may Ken? 375 00:23:34,520 --> 00:23:36,670 Bakit makipagpalitan pinaghiwa? 376 00:23:36,670 --> 00:23:39,660 [Mag-aaral] ka sa pag-iimbak ng kopya, hindi variable. 377 00:23:39,660 --> 00:23:43,980 Eksakto. Namin ang pag-iimbak sa isang kopya, hindi variable mismo. 378 00:23:43,980 --> 00:23:47,170 Sa ibang salita, makipagpalitan ng tila tumatagal ng 2 argumento, isang int, 379 00:23:47,170 --> 00:23:49,370 at mang ito ay tinatawag na at b, 380 00:23:49,370 --> 00:23:54,420 at hanggang dito ko na naipasa sa x at y, na ayon sa pagkakasunud-sunod 1 at 2, 381 00:23:54,420 --> 00:23:58,770 ngunit hindi ako literal pagpasa sa x, hindi ako literal pagpasa sa y, 382 00:23:58,770 --> 00:24:01,450 Pagpasa ako ng isang kopya ng x at kopya ng y. 383 00:24:01,450 --> 00:24:04,510 Halos ito na parang kinopya mo at paste sa makipagpalitan ng 384 00:24:04,510 --> 00:24:07,810 ang mga halaga na gusto mong aktwal na ito upang manipulahin. 385 00:24:07,810 --> 00:24:14,480 Kaya kung iyon ang kaso, kapag ako sa programa ng pagsisimula execute linya 35 pagkatapos 36, 386 00:24:14,480 --> 00:24:18,650 kapag nakuha ko sa linya 37, sa puntong ito sa kuwento, kung ano ang halaga ng isang? 387 00:24:21,040 --> 00:24:25,050 Sa puntong ito sa kuwento, linya 37, kung ano ang halaga ng isang sa puntong ito? >> [Mag-aaral] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] Dapat itong 1, kanan, dahil x ay nakapasa sa bilang ang unang argumento, 389 00:24:29,280 --> 00:24:33,080 at ang function na ito lamang mang pagtawag nito unang argumento ng. 390 00:24:33,080 --> 00:24:38,200 Katulad nito y ang pangalawang argumento, at ito mang pagtawag sa pangalawang argumento b. 391 00:24:38,200 --> 00:24:40,990 >> Paghihiwalay sa dalawang bahagi na ito ay aktwal na medyo lamang ipinaliwanag. -Isip tungkol dito. 392 00:24:40,990 --> 00:24:43,320 Wala sa amin ay nakamit ang mga tao na sinulat ni printf, 393 00:24:43,320 --> 00:24:50,770 kaya tiyak, siya ay walang ideya kung ano ang aming mga variable 30 taon mamaya na tinatawag. 394 00:24:50,770 --> 00:24:56,650 Kaya sa isang pagkakaiba sa pagitan ng kung ano tawagan ka ng mga variable sa mga function sumusulat ka 395 00:24:56,650 --> 00:25:02,080 at kung ano ang tumawag sa iyo ng mga variable sa mga function ka pagtawag o gamit. 396 00:25:02,080 --> 00:25:05,340 Kaya sa ibang salita, ako nakasulat ang aking mga variable bilang ng x at y, 397 00:25:05,340 --> 00:25:08,890 ngunit kung ang ibang tao ay nakasulat makipagpalitan ng function na, siya tiyak ay hindi alam 398 00:25:08,890 --> 00:25:10,690 kung ano ang aking mga variable na tinatawag na, 399 00:25:10,690 --> 00:25:13,830 kaya nauunawaan natin na ito ay kung bakit mayroon kang ito duality ng mga pangalan. 400 00:25:13,830 --> 00:25:16,750 Technically, maaari kong gawin ito sa pamamagitan ng pagkakaisa, 401 00:25:16,750 --> 00:25:20,080 ngunit sila pa rin ang naipasa sa bilang kopya. 402 00:25:20,080 --> 00:25:23,650 Ay ito lamang isang purong pagkakataon aesthetically kung ang taong iyon na sinulat ni makipagpalitan ng 403 00:25:23,650 --> 00:25:26,150 gumamit ng parehong pangalan. 404 00:25:26,150 --> 00:25:32,370 Kaya sa puntong ito sa kuwento, linya 37, ay 1, b ay 2, at ngayon ko magpatuloy sa swap sa kanila. 405 00:25:32,370 --> 00:25:34,900 Una sa lahat, ipaalam sa akin aktwal na gawin ito mas lamang. 406 00:25:34,900 --> 00:25:36,690 Hindi ko alam kung ano ang ginagawa ang mga 3 linya ng code. 407 00:25:36,690 --> 00:25:41,210 Hayaan akong lamang gawin ito: b = a; a = b; tapos na. 408 00:25:41,210 --> 00:25:44,690 Bakit ito sirang, lohikal? 409 00:25:46,490 --> 00:25:48,900 Uri ng intuitive bagay, i-right? 410 00:25:48,900 --> 00:25:52,560 Kaya isang nagiging b at b nagiging isang, 411 00:25:52,560 --> 00:25:57,730 ngunit ang problema ay na sa lalong madaling linya 37 executes, ano ang halaga ng isang at b? 412 00:25:57,730 --> 00:26:03,410 Ang parehong, 1, dahil ikaw clobbered, kaya magsalita, ka na nabago b sa katumbas ng. 413 00:26:03,410 --> 00:26:08,890 Kaya sabay-sabay line 37 ay pinaandar, na mahusay na, mayroon ka na ngayong 2 kopya ng numero 1 414 00:26:08,890 --> 00:26:13,350 sa loob ng function na ito, kaya pagkatapos kapag sinabi mong sa linya 38 a = b, 415 00:26:13,350 --> 00:26:17,640 ka uri ng screwed dahil ka magtatalaga ng 1 sa 1. 416 00:26:17,640 --> 00:26:20,580 Mo na ang uri ng nawala ang halaga na iyong cared tungkol sa. 417 00:26:20,580 --> 00:26:23,220 Kaya sa orihinal na bersyon ng mga ito, mapansin ang aking ginawa. 418 00:26:23,220 --> 00:26:26,850 Ko sa halip ay may isang ikatlong linya ng code na mukhang ganito ang. 419 00:26:26,850 --> 00:26:28,580 Dinedeklara ko ng pansamantalang variable. 420 00:26:28,580 --> 00:26:32,170 >> Tmp ay karaniwang pangalan para sa isang pansamantalang variable, at ito ay isang int 421 00:26:32,170 --> 00:26:34,580 dahil ito ay may upang tumugma sa kung ano ang gusto kong gumawa ng isang kopya ng. 422 00:26:34,580 --> 00:26:39,770 Imbak ng ako ng kopya ng isang loob ng tmp, kaya sa sandaling line 37 ay pinaandar, 423 00:26:39,770 --> 00:26:45,860 ang halaga ng isang ay - mabilis katinuan check - 1, ang halaga ng b 2, 424 00:26:45,860 --> 00:26:48,970 at ang halaga ng tmp din 1. 425 00:26:48,970 --> 00:26:52,060 Kaya ngayon execute ko linya 38. 426 00:26:52,060 --> 00:27:00,540 Kapag ang linya 38 executes, tumatagal sa halaga ng b. At b ay 2, kaya ngayon ang 2. 427 00:27:00,540 --> 00:27:05,210 Kaya sa puntong ito sa kuwento, 2, b ay 2, at tmp ay 1, 428 00:27:05,210 --> 00:27:11,060 na ito ngayon sa lohikal na, maaari naming halaga lamang magsabuwatan tmp sa b at tapos na kami. 429 00:27:11,060 --> 00:27:12,800 Kaya namin na malutas ang problema na. 430 00:27:12,800 --> 00:27:17,720 Sa kasamaang palad, kapag nagpatakbo ako ng programang ito sa form na ito, hindi ito aktwal na magpalitan ng anumang mga halaga. 431 00:27:17,720 --> 00:27:20,100 Ngunit upang maging malinaw, bakit? 432 00:27:23,660 --> 00:27:26,450 Naayos ko ang lohikal na problema mula sa sandali lamang ang nakalipas, 433 00:27:26,450 --> 00:27:31,020 ngunit muli, kung nagpatakbo ako ng programang ito, x at y hindi magbabago 434 00:27:31,020 --> 00:27:33,310 sa pagtatapos ng pagpapatupad ng programa. 435 00:27:33,310 --> 00:27:37,220 [Hindi marinig na mag-aaral ng komento] >> Hindi namin ibinalik anumang bagay, kaya na totoo. 436 00:27:37,220 --> 00:27:39,670 Ngunit ito ay lumiliko out ang isang bit ng isang problema dito dahil sa gayon malayo, 437 00:27:39,670 --> 00:27:44,170 ang tanging bagay na namin upang bumalik ay isang bagay, at ito ay isang paghihigpit ng C. 438 00:27:44,170 --> 00:27:49,070 Maaari ka lamang bumalik talaga isang halaga, kung saan ako uri ng natigil dito 439 00:27:49,070 --> 00:27:53,310 dahil maaari kong ibalik ang bagong mga halaga ng x o maaari kong ibalik ang bagong mga halaga ng y, 440 00:27:53,310 --> 00:27:55,190 ngunit nais ko parehong likod. 441 00:27:55,190 --> 00:27:58,650 Kaya bumabalik ay hindi ang simpleng solusyon dito. 442 00:27:58,650 --> 00:28:01,710 Ngunit ang problema sa panimula ay kung bakit? Ano ang aktwal na namin swapped? 443 00:28:01,710 --> 00:28:04,190 [Mag-aaral] a at b. >> Isang at b. 444 00:28:04,190 --> 00:28:08,230 Ngunit isang at b kopya ng x at y, na nangangahulugan lang namin ginawa ang lahat ng ito gumagana, 445 00:28:08,230 --> 00:28:11,650 lamang namin na ginugol 3 minuto pakikipag-usap tungkol makipagpalitan ng function na at ang lahat ng 3 ng mga variable na ito, 446 00:28:11,650 --> 00:28:15,420 at na mahusay, perpektong tama sa paghihiwalay, 447 00:28:15,420 --> 00:28:20,740 ngunit isang at b ang saklaw lamang sa mga linya sa dito. 448 00:28:20,740 --> 00:28:24,790 >> Kaya tulad ng isang loop, kung ikaw idedeklara isang integer i sa loob ng loop, 449 00:28:24,790 --> 00:28:28,760 katulad, kung ikaw ay deklarasyon at b sa loob ng isang function na iyong nakasulat, 450 00:28:28,760 --> 00:28:33,320 sila bisa lamang sa loob ng na function na, na nangangahulugan na sa lalong madaling makipagpalitan ay tapos execute 451 00:28:33,320 --> 00:28:38,470 at pumunta kami mula sa linya 24 sa linya 25, x at y hindi nabago sa lahat. 452 00:28:38,470 --> 00:28:42,790 Mo lang nasayang ang isang buong maraming oras sa pagpapalit ng mga kopya ng mga variable. 453 00:28:42,790 --> 00:28:47,010 Kaya ito lumiliko out na ang mga solusyon na ito ay aktwal na di-halata. 454 00:28:47,010 --> 00:28:50,670 Ito ay hindi pa sapat upang bumalik halaga dahil maaari lamang naming ibalik 1 halaga, 455 00:28:50,670 --> 00:28:53,470 at ko talagang gusto upang magpalitan parehong x at y sa parehong oras, 456 00:28:53,470 --> 00:28:55,210 kaya kami ay upang bumalik sa. 457 00:28:55,210 --> 00:29:01,020 Ngunit sa ngayon, mapagtanto na ang isyu sa panimula nagmula mula sa ang katunayan na ang isang at b kopya 458 00:29:01,020 --> 00:29:03,630 at ang mga ito sa kanilang sariling saklaw. 459 00:29:03,630 --> 00:29:05,050 Natin subukan upang malutas ito sa ilang mga paraan. 460 00:29:05,050 --> 00:29:11,250 Hayaan akong aktwal na mag-scroll pabalik dito at magbukas ng, sabihin nating, ang isang ika-apat na variant ng ito, buggy4. 461 00:29:11,250 --> 00:29:13,370 Paano ang tungkol dito? 462 00:29:13,370 --> 00:29:17,810 Ito ay isang katulad ngunit simple problema upang tumingin sa bago namin tumagal ng isang ulos sa paglutas nito. 463 00:29:17,810 --> 00:29:24,190 Ang program na ito ay tinatawag na pagdagdag, at ito tila initializes x integer sa 1 sa linya 18. 464 00:29:24,190 --> 00:29:28,150 Pagkatapos ko i-claim x ay 1, pagkatapos ko i-claim ang "Incrementing ..." 465 00:29:28,150 --> 00:29:33,730 Pagkatapos kong tumawag pagdagdag, ngunit sa linya 22 at 23, inaangkin ko ito incremented, 466 00:29:33,730 --> 00:29:40,220 Inaangkin ko ang x na ngayon ang anumang ito ay - 2, baka - ngunit programa na ito ay maraming surot. 467 00:29:40,220 --> 00:29:42,610 Ano ang problema? 468 00:29:43,440 --> 00:29:50,160 Oo. >> [Hindi marinig na mag-aaral tugon] >> Mismong. 469 00:29:50,160 --> 00:29:52,490 Kaya x ay ipinahayag, malinaw naman, sa linya 18. 470 00:29:52,490 --> 00:29:54,700 Ito ay sa loob ng pangunahing kulot tirante. 471 00:29:54,700 --> 00:29:58,440 Kaya ang simpleng sagot dito ay na habang ang x umiiral dito, 472 00:29:58,440 --> 00:30:03,930 ito ay hindi umiiral sa linya 32, upang ang programang ito na aktwal na ay hindi kahit makatipon. 473 00:30:03,930 --> 00:30:07,940 Ang tagatala kapag ko subukang kino-compile ang code na ito upang sumigaw sa akin 474 00:30:07,940 --> 00:30:14,100 tungkol sa ilang hindi nagbigay-alam identifier o isang bagay na epekto. Sa katunayan, sabihin subukan. 475 00:30:14,100 --> 00:30:18,470 Ito ay gumawa buggy4. May ito ay. 476 00:30:18,470 --> 00:30:22,110 Gamitin ng hindi nagbigay-alam identifier 'x' sa linya 32. 477 00:30:22,110 --> 00:30:25,580 At aktwal na, sabihin maging mas tahasang dito ngayon kaya na ito ay kapaki-pakinabang 478 00:30:25,580 --> 00:30:27,580 sa opisina oras at sa bahay. 479 00:30:27,580 --> 00:30:29,300 >> Pansinin na ito ay isang maliit na cryptically nakasulat. 480 00:30:29,300 --> 00:30:37,270 Ngunit ang katotohanan na kumalatong may yelled sa amin, sinasabi buggy4.c: 32:5, ay talagang kapaki-pakinabang. 481 00:30:37,270 --> 00:30:42,050 Nangangahulugan ito na ang error sa linya 32 sa character na posisyon 5. 482 00:30:42,050 --> 00:30:46,700 Kaya 1, 2, 3, 4, 5. Iyon ay, sa katunayan, kung saan ang problema ay. 483 00:30:46,700 --> 00:30:49,790 At din, masyadong, panatilihin sa isip sa mga oras ng opisina at sa bahay, ako masuwerteng dito. 484 00:30:49,790 --> 00:30:52,990 Mayroon akong isang pagkakamali. Ito ay relatibong madaling upang ayusin. 485 00:30:52,990 --> 00:30:55,990 Ngunit kung ikaw ay makakuha ng isang buong screen na puno ng napakaraming mga mensahe ng error, 486 00:30:55,990 --> 00:31:00,330 muli Napagtanto na ang pinakamababa isa ay maaaring lamang ay nagpapakilala ng ang pinakamataas na isa. 487 00:31:00,330 --> 00:31:03,450 Kaya palagi Chase ang iyong mga bug mula sa itaas pababa 488 00:31:03,450 --> 00:31:05,820 dahil maaaring may lamang isang uri ng bulaklak chain epekto 489 00:31:05,820 --> 00:31:09,240 na nagmumungkahi mayroon kang paraan higit pang mga problema kaysa sa aktwal mong gawin. 490 00:31:09,240 --> 00:31:15,150 Kaya kung paano namin maaaring ayusin ito kung ang aking mga layunin ay upang dagdagan ang x? >> [Mag-aaral] Gawing x global. 491 00:31:15,150 --> 00:31:17,060 Okay, sa gayon maaari kaming magsagawa ng x global. 492 00:31:17,060 --> 00:31:20,480 Natin ang shortcut na ko nagbabala tungkol sa mas maaga, ngunit ano ba, kailangan lang namin ng isang mabilis na-aayos, 493 00:31:20,480 --> 00:31:25,730 kaya ay sabihin lamang sabihin int x up dito. Na ginagawang x global. 494 00:31:25,730 --> 00:31:31,800 Kaya ngayon pangunahing may access dito at pagdagdag na access dito, 495 00:31:31,800 --> 00:31:34,110 at kaya ipaalam sa akin sige at makatipon ito ngayon. 496 00:31:34,110 --> 00:31:37,630 Gawing buggy4, ang Enter. Tila upang makatipon ngayon. 497 00:31:37,630 --> 00:31:41,230 Natin patakbuhin buggy4. At tila upang aktwal na gumana. 498 00:31:41,230 --> 00:31:45,150 Ito ay isa sa mga bagay na ito na bilang sinasabi ko, hindi tulad ng ginagawa ko, 499 00:31:45,150 --> 00:31:47,010 bilang ko na gawin dito, dahil sa pangkalahatan, 500 00:31:47,010 --> 00:31:50,440 ang aming mga programa ay pagpunta upang makakuha ng mas kawili-wili at mas matagal kaysa sa, 501 00:31:50,440 --> 00:31:56,390 at kung ang iyong solusyon sa mga problema sa buhay ay lamang na ilagay ang lahat ng mga variable sa tuktok ng iyong mga file, 502 00:31:56,390 --> 00:31:59,690 masyadong mabilis ang programa makakuha ng horrifically mahirap upang pamahalaan. 503 00:31:59,690 --> 00:32:02,190 Ito ay nakakakuha ng mas mahirap sa tingin up ng mga bagong variable pangalan, 504 00:32:02,190 --> 00:32:05,240 ito ay nakakakuha ng mas mahirap upang maunawaan kung anong variable ay ginagawa kung ano ang, 505 00:32:05,240 --> 00:32:08,460 at ito sa pangkalahatan, ito ay hindi isang magandang solusyon. 506 00:32:08,460 --> 00:32:10,030 Kaya sabihin gawin ito mas mahusay na. 507 00:32:10,030 --> 00:32:12,160 Hindi namin nais na gumamit ng global variable dito. 508 00:32:12,160 --> 00:32:16,240 >> Ko nais upang dagdagan ang mga x, kaya maaari ko malinaw naman - 509 00:32:16,240 --> 00:32:18,670 sa pagtatapos ng araw, ito ay uri ng ulok kuwento dahil lang namin gawin ito - 510 00:32:18,670 --> 00:32:24,450 ngunit kung hindi ako malaman tungkol na operator o hindi ako ay pinapayagan upang baguhin ito sa pangunahing mismo, 511 00:32:24,450 --> 00:32:30,730 kung paano tao ko maaaring ipatupad Ken sa paglipas dito sa oras na ito hindi kubo ngunit dagdagan? 512 00:32:31,380 --> 00:32:33,190 Paano ko babaguhin dito ang bagay na ito? Oo. 513 00:32:33,190 --> 00:32:38,480 [Mag-aaral] Pass sa x at pagkatapos ay bumalik [hindi marinig] >> Okay, mabuti. 514 00:32:38,480 --> 00:32:41,900 Kaya bakit hindi ko pumasa sa x at pagkatapos ay sa halip na ibalik ito, 515 00:32:41,900 --> 00:32:44,870 bakit hindi ko lamang ay bumalik x + 1. 516 00:32:44,870 --> 00:32:47,710 Isang ilang higit pang mga bagay upang baguhin dito. Ako sa kanan track. 517 00:32:47,710 --> 00:32:49,770 Ano pa ang kailangan ko upang i-tweak? Ibang tao. Oo. 518 00:32:49,770 --> 00:32:51,740 [Hindi marinig na mag-aaral ng tugon] 519 00:32:51,740 --> 00:32:54,730 Kailangan kong baguhin ang return uri ng pagdagdag dahil hindi ito ay walang bisa. 520 00:32:54,730 --> 00:32:57,780 Walang bisa ay nangangahulugan na walang ay ibinalik, ngunit malinaw na ito ay ngayon, 521 00:32:57,780 --> 00:32:59,830 kaya ito pangangailangan upang baguhin - >> [mag-aaral] int. 522 00:32:59,830 --> 00:33:02,740 int upang maging pare-pareho sa anumang aktwal ako bumabalik. 523 00:33:02,740 --> 00:33:05,180 Ngayon pa rin ang iba pa ay maraming surot dito. Oo. 524 00:33:05,180 --> 00:33:08,400 [Hindi marinig na mag-aaral tugon] >> [Malan] Kaya kailangan kong dagdagan x? 525 00:33:08,400 --> 00:33:12,080 [Hindi marinig na mag-aaral tugon] >> [Malan] Ah, kaya kailangan kong ipasa x. 526 00:33:12,080 --> 00:33:16,660 Kaya kailangan kong gawin ito dito. >> [Hindi marinig na mag-aaral komento] 527 00:33:16,660 --> 00:33:20,050 [Malan] Kaya prototype, mayroon akong upang baguhin ito dito. 528 00:33:20,050 --> 00:33:22,930 Kaya ito ay may upang maging isang int, ito ay may upang maging - 529 00:33:22,930 --> 00:33:25,620 Hmm, aktwal na ako ay isang bug down na dito. Natin ayusin ang isang unang. 530 00:33:25,620 --> 00:33:29,590 Ano ang dapat ito aktwal na? Ito ay nakuha sa isang int isang bagay. 531 00:33:29,590 --> 00:33:32,700 Ito ay maaaring maging x, ngunit lantaran, kung sinimulan mo ang pagtawag ng lahat ng iyong mga variable x, 532 00:33:32,700 --> 00:33:35,390 ito upang makakuha ng mas at mas malinaw na kung saan. 533 00:33:35,390 --> 00:33:39,560 >> Kaya sabihin lang mang pumili ng ibang pagpapangalan convention para sa aking mga function ng lingkod, 534 00:33:39,560 --> 00:33:41,940 ang mga function Sumulat ako. Susubukan naming tumawag ito, o kami maaaring tumawag ito - 535 00:33:41,940 --> 00:33:45,010 Sabihin tumawag ito bilang mas tahasang. 536 00:33:45,010 --> 00:33:47,560 Kaya pagkatapos kong bumalik anumang bilang plus 1, 537 00:33:47,560 --> 00:33:50,740 at ngayon ko bang baguhin ang 1 iba pang mga bagay dito at ng isa pang bagay dito. 538 00:33:50,740 --> 00:33:54,350 Ano ang mayroon ako upang baguhin sa linya 21 sa unang? >> [Hindi marinig na mag-aaral tugon] 539 00:33:54,350 --> 00:33:57,610 [Malan] Mayroon akong upang italaga ang mga ito sa x. Hindi lamang ko matawagan ang pagdagdag (x). 540 00:33:57,610 --> 00:34:01,960 Kailangan ko maalala ang sagot sa pamamagitan ng pagbabago ng halaga ng x sa kaliwang bahagi. 541 00:34:01,960 --> 00:34:04,680 At kahit x ngayon ang kaliwa at kanang, na lubos pinong 542 00:34:04,680 --> 00:34:08,860 dahil sa kanang bahagi ay makakakuha ng unang pinaandar pagkatapos ay makakakuha plopped sa kaliwang bagay - 543 00:34:08,860 --> 00:34:10,600 x sa kasong ito. 544 00:34:10,600 --> 00:34:12,159 At pagkatapos ay sa wakas, ito ay isang madaling-aayos ngayon. 545 00:34:12,159 --> 00:34:17,230 Ito ay dapat lamang na tumutugma sa kung ano ang pababa sa ibaba, int numero. 546 00:34:17,230 --> 00:34:20,570 Kaya isang buong grupo ng mga pagbabago para sa isang talagang bobo function na 547 00:34:20,570 --> 00:34:24,420 ngunit kinatawan ng mga bagay na gusto namin nagiging gawin. 548 00:34:24,420 --> 00:34:27,090 Kaya't buggy4. Ko na screwed up sa isang lugar. 549 00:34:27,090 --> 00:34:30,139 Oh, aking Diyos. Limang mga pagkakamali sa 6-line programa. 550 00:34:30,139 --> 00:34:35,690 Kaya kung ano ang mali sa linya 18, karakter 5? 551 00:34:35,690 --> 00:34:39,610 Kaya Mayroon akong upang idedeklara ito, int. 552 00:34:39,610 --> 00:34:41,920 Natin makita. May isang buong grupo ng mga iba pang mga error. 553 00:34:41,920 --> 00:34:47,010 Oh, ang aking Diyos - 19, 18, 21 - ngunit muli, sabihin lang i-clear ang screen, Control L dito, 554 00:34:47,010 --> 00:34:49,380 at muling patakbuhin kumalatong. 555 00:34:49,380 --> 00:34:51,340 Kaya 5 problema ay talagang lamang na 1. 556 00:34:51,340 --> 00:34:57,520 Kaya ngayon sabihin patakbuhin buggy4, ang Enter. Whew, x ay incremented tama. 557 00:34:57,520 --> 00:35:02,720 Ayos lang. Anumang mga katanungan sa kung paano dagdagan ang numero? Oo. 558 00:35:02,720 --> 00:35:09,870 [Hindi marinig na mag-aaral tanong] >> Magandang katanungan. 559 00:35:09,870 --> 00:35:14,220 Paano ay ito na maaari ko lamang baguhin x sa numero at ang programa ay alam kaagad? 560 00:35:14,220 --> 00:35:16,200 >> Muli, sa tingin ng mga ito bilang ito abstraction. 561 00:35:16,200 --> 00:35:21,600 Kaya kung ako pangunahing at Ken ay pagdagdag, lantaran, hindi ko pakialam kung ano ang tawag ng Ken ang kanyang iPad. 562 00:35:21,600 --> 00:35:26,570 Wala akong pakialam kung ano siya tawag sa anumang bagay na may sa gawin sa kanyang pagpapatupad ng ang pag-andar na ito. 563 00:35:26,570 --> 00:35:33,340 Ito ay isang detalye ng pagpapatupad na ako, pangunahing, hindi pakialam tungkol. 564 00:35:33,340 --> 00:35:38,250 At kaya lamang pagbabago nito tuloy-tuloy sa loob ng pag-andar - bilang dito at bilang dito - 565 00:35:38,250 --> 00:35:40,960 ang lahat ng ito ay tumatagal ng hangga't ako mag-recompile. 566 00:35:40,960 --> 00:35:44,180 Ito ay uri ng bang kung sa tingin mo tungkol sa marami sa atin, mga mo na may lisensya sa pagmamaneho 567 00:35:44,180 --> 00:35:46,770 na nahimok o kahit na iyong nahimok sa isang kotse, 568 00:35:46,770 --> 00:35:50,950 karamihan sa atin ay walang ideya kung paano gumagana ang kotse ng sa ilalim ng hood. 569 00:35:50,950 --> 00:35:54,970 At literal, kapag binuksan mo ng hood, karamihan sa atin - kasama ang aking sarili - 570 00:35:54,970 --> 00:35:56,940 ay hindi pagpunta sa talagang malaman kung ano ang iyong hinahanap namin sa, 571 00:35:56,940 --> 00:35:59,220 uri ng tulad ng maaari mong pakiramdam na may mga bagay-bagay tulad ng sa karapatang ito ngayon. 572 00:35:59,220 --> 00:36:01,480 Ngunit hindi namin talagang pakialam kung paano gumagana ang kotse, 573 00:36:01,480 --> 00:36:05,970 hindi namin upang pakialam kung ano ang lahat ng rods at pistons at cable sa loob ng kotse 574 00:36:05,970 --> 00:36:08,160 ay aktwal na paggawa. 575 00:36:08,160 --> 00:36:12,770 Kaya ang isang bagay tulad ng kung ano ang tawagan ka piston ay hindi mahalaga dito sa kasong ito. Parehong ideya. 576 00:36:12,770 --> 00:36:25,300 Oo. >> [Hindi marinig na mag-aaral tanong] 577 00:36:25,300 --> 00:36:29,180 Kung may higit pang mga paggamit ng variable xa sandali ang nakalipas, 578 00:36:29,180 --> 00:36:32,150 , programmer, ay upang baguhin ang mga ito sa lahat ng dako. 579 00:36:32,150 --> 00:36:36,600 O maaari kang literal gawin ng File, Menu, at pagkatapos Maghanap, Palitan - isang bagay tulad na - 580 00:36:36,600 --> 00:36:39,170 ngunit ikaw ay pagpunta sa may upang gumawa ng mga pagbabagong iyon sa iyong sarili. 581 00:36:39,170 --> 00:36:47,450 Mayroon kang upang maging pare-pareho. >> [Mag-aaral] Kung may mga maraming mga variable [hindi marinig] 582 00:36:47,450 --> 00:36:53,100 Isang partikular na pagkakasunud-sunod tulad dito, kung ito ay int ibang numero? >> [Mag-aaral] Tama. 583 00:36:53,100 --> 00:36:56,590 [Malan] Oo. Order ay mahalaga kapag ikaw ay pagtawag sa function na. 584 00:36:56,590 --> 00:37:00,050 >> Kaya kung ako ay pagtawag pagdagdag dito na may isang bagay na pinaghihiwalay ng isang bagay, 585 00:37:00,050 --> 00:37:01,680 may isang direktang sa pagmamapa. 586 00:37:01,680 --> 00:37:05,690 Ang unang variable, anumang ang tawag dito, ay ginawa ng isang kopya ng unang argumento sa paglipas dito. 587 00:37:05,690 --> 00:37:07,760 Sorry. Na ito ay hindi dapat maging isang panaklong. 588 00:37:07,760 --> 00:37:11,490 Ang pangalawang linya ng argumento na ang pangalawang. Kaya order, oo, bagay. Ayos lang. 589 00:37:11,490 --> 00:37:17,020 Sorry. Kinuha ko ang mahabang paraan upang makakuha ng doon. Iba pang mga tanong? Ayos lang. 590 00:37:17,020 --> 00:37:20,610 Kaya sabihin makita kung hindi namin maaaring pintahan ng isang larawan ng kung ano ang aktwal na pagpunta sa dito 591 00:37:20,610 --> 00:37:23,090 sa ilalim ng hood, kaya na magsalita. 592 00:37:23,090 --> 00:37:26,640 Ito ay isang parihaba na maaaring kumatawan sa memory ng iyong computer. 593 00:37:26,640 --> 00:37:30,970 Kahit na mayroon kang mga ideya kung paano gumagana ang memory o kung paano RAM gawa, 594 00:37:30,970 --> 00:37:33,940 hindi bababa sa ipinapalagay na mayroon kang mga bunches nito mga araw na ito. 595 00:37:33,940 --> 00:37:36,280 Mayroon kang mga megabytes nito, mayroon kang gigabytes nito, 596 00:37:36,280 --> 00:37:40,870 at alam namin mula sa linggo 0 na ang byte ng kung ano? >> [Mag-aaral] 8 bit. 597 00:37:40,870 --> 00:37:42,950 8 bits, i-right? Kaya 8 zeroes at 1. 598 00:37:42,950 --> 00:37:45,880 Kaya kung ang iyong computer ay may isang karetela ng RAM, 2 gig ng RAM mga araw na ito, 599 00:37:45,880 --> 00:37:55,030 mayroon kang isang bilyong o 2 bilyong bytes ng memory o halos 8 bilyong o 16 bilyong bit 600 00:37:55,030 --> 00:37:56,890 sa loob ng iyong computer. 601 00:37:56,890 --> 00:38:00,590 Hindi tulad ng ilang mabalahibo Willy Halimbawa, hindi magnetic particle karaniwang ito. 602 00:38:00,590 --> 00:38:04,450 Nagiging - sa laptop hindi bababa sa - ito ay solid drive ng estado, SSDs, 603 00:38:04,450 --> 00:38:08,580 na lang ay walang paglipat ng bahagi. Lahat ng electronic. Ang lahat ng ito koryente-based. 604 00:38:08,580 --> 00:38:14,060 Kaya sa tingin ng parihaba ito bilang lamang kumakatawan sa 1 o 2 gigabytes ng memorya na mayroon kang. 605 00:38:14,060 --> 00:38:16,020 >> Kaya ito ay isang tipak ng memorya. 606 00:38:16,020 --> 00:38:19,830 Ang mundo ng computer science uri ng partitioned off 607 00:38:19,830 --> 00:38:22,950 chunks ng memory gawin ang iba't-ibang mga bagay. 608 00:38:22,950 --> 00:38:27,190 Halimbawa, kung ito ay RAM ng iyong computer, tulad ng iminungkahi ng parihaba doon, 609 00:38:27,190 --> 00:38:31,130 ito lumiliko out na sa pamamagitan ng convention, sa tuktok ng iyong RAM, kaya na magsalita, 610 00:38:31,130 --> 00:38:33,660 ay kung ano ang tinatawag na teksto segment. 611 00:38:33,660 --> 00:38:36,740 Iyon ang mga 0s at 1s na iyong inipon. 612 00:38:36,740 --> 00:38:39,020 Kaya kapag kami ay tumingin sa ilalim ng hood sa kung ano ang a.out ay, 613 00:38:39,020 --> 00:38:41,980 lahat ng mga 0s at 1s, kapag nagpatakbo ka ng isang programa, 614 00:38:41,980 --> 00:38:46,290 mga 0s at 1s load mula sa iyong hard drive sa isang bagay na tinatawag RAM, 615 00:38:46,290 --> 00:38:49,320 at sa RAM sila ay inilagay sa itaas. 616 00:38:49,320 --> 00:38:52,770 Samantala, mayroon kang iba pang mga bagay: initialize data, uninitialize ng mga data. 617 00:38:52,770 --> 00:38:57,510 Yaong 2 swaths ng memory ay tumutukoy sa pangkalahatang variable, na hindi mo madalas gamitin 618 00:38:57,510 --> 00:39:00,760 pero minsan kung gagawin mo, sila magtapos hanggang doon pati na rin. 619 00:39:00,760 --> 00:39:04,260 Pagkatapos ang ilang iba pang mga bagay-bagay: kapaligiran variable, na hindi namin gastusin sa karaming oras sa, 620 00:39:04,260 --> 00:39:06,860 ngunit ang 2 mahalagang mga bagay na bumalik sa buong semestre, 621 00:39:06,860 --> 00:39:08,550 stack at magbunton. 622 00:39:08,550 --> 00:39:12,210 Kaya ang karamihan ng memory ng iyong computer ay nakareserba kapag tumatakbo ang isang programa 623 00:39:12,210 --> 00:39:15,370 para sa isang bagay na tinatawag na stack at isang bagay na tinatawag ang magbunton. 624 00:39:15,370 --> 00:39:18,840 Hindi namin makipag-usap tungkol sa magbunton ngayon, ngunit kami ay makipag-usap tungkol sa stack. 625 00:39:18,840 --> 00:39:24,600 Stack ay sinadya upang manawagan up ang visual ng dining hall pagkain trays sa Mather House 626 00:39:24,600 --> 00:39:28,110 o kung saan man ang mangyari mo kung saan ang kawani ng dining hall linisin ang mga ito araw-araw, 627 00:39:28,110 --> 00:39:30,180 sila stack up ang mga ito mula sa sahig sa up, 628 00:39:30,180 --> 00:39:34,550 at katulad, sa memory, may ito ideya ng paglalagay ng isang bagay sa isang stack, 629 00:39:34,550 --> 00:39:36,860 paglalagay ng isang bagay sa isang stack, paglalagay ng isang bagay sa isang stack. 630 00:39:36,860 --> 00:39:38,240 At kung ano ang namin ibig sabihin sa pamamagitan ng ito? 631 00:39:38,240 --> 00:39:41,860 >> Natin mag-zoom in sa lang sa ibabang kalahati ng ang larawang ito, ang RAM ng iyong computer, 632 00:39:41,860 --> 00:39:44,330 upang ipanukala ang mga sumusunod. 633 00:39:44,330 --> 00:39:48,170 Ito lumiliko out na kapag nagpatakbo ka ng isang programa tulad ng a.out o kumusta - 634 00:39:48,170 --> 00:39:50,100 anumang programa na iyong nakasulat - 635 00:39:50,100 --> 00:39:54,020 muli, mga 0s at 1s load mula sa iyong hard drive, na kung saan ay pang-matagalang imbakan, 636 00:39:54,020 --> 00:39:57,230 mananatili doon kahit na hilahin ang plug, na-load sa RAM. 637 00:39:57,230 --> 00:40:00,610 RAM ay mas mabilis kaysa sa mga na hard drive - ito ay mas maliit kaysa sa mga na hard drive - 638 00:40:00,610 --> 00:40:03,300 ngunit kung saan nakatira ang mga programa habang nagpapatakbo ka sa kanila. 639 00:40:03,300 --> 00:40:08,230 Kaya mong i-double click ang isang programa sa Mac o PC, ito ay load mula sa hard drive sa RAM. 640 00:40:08,230 --> 00:40:11,520 Sa lalong madaling ito load sa RAM, ang 0s at 1s go sa tuktok ng paraan, 641 00:40:11,520 --> 00:40:16,610 ang tinatawag na segment ng teksto, ngunit pagkatapos ay sa lalong madaling panahon ang iyong programa sa aktwal na nagsisimula sa pagtakbo, 642 00:40:16,610 --> 00:40:21,360 ang pangunahing function ay tinatawag na, at pangunahing namin ang iyong nakita, madalas ay may lokal na mga variable, 643 00:40:21,360 --> 00:40:24,870 at ito ay may ints at string at char at katulad. 644 00:40:24,870 --> 00:40:29,180 Kaya kung ang iyong programa na nakasulat o ang programa na double-click 645 00:40:29,180 --> 00:40:32,970 gumamit ng ilang mga variable sa loob ng pangunahing, 646 00:40:32,970 --> 00:40:37,240 magtapos ang mga ito sa ibaba ng iyong stack ng memory, kaya na magsalita. 647 00:40:37,240 --> 00:40:39,410 Mas concretely, ano ang aktwal ibig sabihin? 648 00:40:39,410 --> 00:40:48,450 Ito ay nangangahulugan lamang na kung tayo ay pagpunta sa numero ang mga bytes ng RAM sa iyong computer, 649 00:40:48,450 --> 00:40:55,750 mapansin na ito ay maaaring byte bilang 0, maaaring ito ay byte numero 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 ang lahat ng paraan hanggang sa 2 bilyong ay ang lahat ng mga paraan up doon sa itaas. 651 00:41:01,480 --> 00:41:05,880 Kaya sa ibang salita, kapag makipag-usap namin tungkol sa RAM o memory sa mga tuntunin ng mga byte 652 00:41:05,880 --> 00:41:11,500 ito ay nangangahulugan na ang isang tao ay nagpasya kung ano ang numero ng bawat isa ng mga chunks ng memory. 653 00:41:11,500 --> 00:41:16,650 Kaya kapag kailangan mo ng 32 bit para sa isang int o kailangan mong 8 bit para sa isang pansamantalang trabaho, 654 00:41:16,650 --> 00:41:18,840 kung saan sila magtapos sa memory? 655 00:41:18,840 --> 00:41:22,350 >> Conceptually, sila lamang magtapos sa ilalim ng bagay na ito tinatawag ng stack. 656 00:41:22,350 --> 00:41:25,870 Ngunit kung ano ang kawili-wili ngayon kapag pangunahing tawag ng isang function - 657 00:41:25,870 --> 00:41:28,750 ipagpalagay ng isang function na tinatawag na foo, isang arbitrary na pangalan - 658 00:41:28,750 --> 00:41:32,330 kung ano ang mangyayari ay pangunahing ay sa ilalim ng ito stack ng memorya; 659 00:41:32,330 --> 00:41:35,680 foo ngayon ay ilagay sa tuktok ng pangunahing memorya. 660 00:41:35,680 --> 00:41:40,990 Kaya anumang lokal na mga variable na ang foo ay magtapos uri ng conceptually sa itaas sa mga pangunahing. 661 00:41:40,990 --> 00:41:47,070 Kung foo tawag ng isa pang function na tinatawag na bar, mga variable magtapos dito. 662 00:41:47,070 --> 00:41:50,120 Kung ang bar tawag ibang bagay, dito, dito, dito. 663 00:41:50,120 --> 00:41:53,830 Kaya kung ano ang kawili-wiling tungkol sa pagpapatakbo ng isang programa na tawagan ka ng mga function 664 00:41:53,830 --> 00:41:57,750 at ng mga function ay tumawag ng mga function at ng mga function ay tumawag ng mga function, 665 00:41:57,750 --> 00:42:01,470 bumuo ka ng stack na ito ng mga function sa memory. 666 00:42:01,470 --> 00:42:06,890 At lamang nang isang beses sa isang return function na simulan ang pagkuha ng bumalik na memory. 667 00:42:06,890 --> 00:42:10,860 Kaya isa sa mga pinakamadaling paraan ng pagka-ubos ng memorya sa isang computer program 668 00:42:10,860 --> 00:42:14,360 ay sumulat ng mga function na ay hindi kailanman bumalik. 669 00:42:14,360 --> 00:42:18,900 Kaya halimbawa, sabihin ipakita ng mas maraming may isang sinasadya maraming surot programa. 670 00:42:18,900 --> 00:42:22,230 Hayaan akong sige at # include , 671 00:42:22,230 --> 00:42:25,000 int pangunahing (walang bisa), 672 00:42:25,000 --> 00:42:32,940 at ako pagpunta sa gawin habang (2> 1), na marahil ay hindi kailanman babaguhin sa amin, 673 00:42:32,940 --> 00:42:37,560 at ipaalam sa akin magpatuloy ngayon at gawin printf. 674 00:42:37,560 --> 00:42:40,700 Aktwal na mas mababa ang biswal na kawili-wili. Natin gawin ito. 675 00:42:40,700 --> 00:42:50,240 Para int i = 0; i> 0 - sabihin ang pagkakamaling ito - i + +. 676 00:42:50,240 --> 00:42:52,720 At sabihin hindi printf dito. Natin magsanay kung ano ang ako ay pangangaral. 677 00:42:52,720 --> 00:43:00,190 Natin ay isang paraan ng dito, walang bisa koro, at kami na sabihin int i, 678 00:43:00,190 --> 00:43:06,830 at pagkatapos ay ako pagpunta sa sabihin printf - walang, sabihin gawin itong mas kawili-wiling. 679 00:43:06,830 --> 00:43:15,790 Natin ang aktwal na hindi i-print ang anumang bagay sa lahat. Sabihin lang gawin ito: koro (i). 680 00:43:15,790 --> 00:43:20,390 Ayos lang. Kaya ito ay maraming surot dahil bakit? 681 00:43:20,390 --> 00:43:23,380 Nagsasagawa ako ng ito bilang pumunta ko dahil ang programa ay hindi aktwal na gawin ng interes. 682 00:43:23,380 --> 00:43:25,320 >> Ngunit hindi ang layunin. 683 00:43:25,320 --> 00:43:29,630 Ang layunin ay upang magsulat ng isang programa na ang pangunahing function na gumagana ang ano, tila? 684 00:43:30,720 --> 00:43:32,860 Tawagan mismo. At aktwal na, hindi namin kailangang loop. 685 00:43:32,860 --> 00:43:37,200 Natin kahit pasimplehin ito lamang upang hindi mawala sa paningin ng talaga ang pangunahing bug. 686 00:43:37,200 --> 00:43:39,640 Pangunahing tawag koro sa kumanta ilang koro, 687 00:43:39,640 --> 00:43:41,440 pagkatapos ko ginawang isang bagay bobo at nagkaroon ako ng koro tawag koro 688 00:43:41,440 --> 00:43:43,760 dahil ipinapalagay ko ang ibang tao ay pagpunta upang ipatupad ito siguro, 689 00:43:43,760 --> 00:43:47,210 at ngayon ito ay hindi pagpunta upang makatipon pa. Kailangan kong gawin kung ano? 690 00:43:47,210 --> 00:43:49,970 Kailangan ko ang prototype, tandaan. 691 00:43:49,970 --> 00:43:56,110 Kaya kailangan kong magkaroon ng hanggang dito koro ng void (int i); 692 00:43:56,110 --> 00:43:59,210 Kaya ngayon kung pumunta ako pababa dito - aktwal na, sabihin gamitin ang mas malaking window. 693 00:43:59,210 --> 00:44:01,980 Natin sige at gumawa ng koro. 694 00:44:01,980 --> 00:44:06,490 Natin sige at gumawa ng koro. 695 00:44:06,490 --> 00:44:08,370 Gamitin ng hindi nagbigay-alam identifier i. 696 00:44:08,370 --> 00:44:12,500 Oh, na bobo. Hindi namin kailangan ang argumento. Sabihin lang gawin ito. 697 00:44:12,500 --> 00:44:16,370 Nais ko namin ay nagsimula sa ganitong paraan. Na makakakuha ito ng mas madali programa upang magsulat. 698 00:44:16,370 --> 00:44:25,590 Doon. Ngayon ipaalam ng pumunta sa aking terminal na window, muling patakbuhin ang kumalatong, at dito namin pumunta. 699 00:44:25,590 --> 00:44:28,460 Na talagang mabilis. 700 00:44:28,460 --> 00:44:31,150 Ano ang aktwal na lamang ang nangyari, bagaman? 701 00:44:31,150 --> 00:44:33,730 Well, ngayon kukunin ko na idagdag ang mga naka-print na linya upang maaari naming makita. 702 00:44:33,730 --> 00:44:43,490 Hayaan sabihin sa akin printf ("ako in dito") - walang mga variable. Namin na nakalabas ang mga ito tulad na. 703 00:44:43,490 --> 00:44:47,480 Hayaan akong muling palabas ng pelikula gumawa. Hayaan akong muling palabas ng pelikula koro. 704 00:44:47,480 --> 00:44:57,380 At ... darating. Panatilihin ang pagpunta. 705 00:44:57,380 --> 00:44:59,930 Bilang isang bukod, bakit hindi nag-crash? 706 00:44:59,930 --> 00:45:02,080 Ang segmentation fault nangyari napakabilis na bago. 707 00:45:02,080 --> 00:45:06,570 [Hindi marinig na mag-aaral tugon] >> Mismong. Kaya ito ay tumatagal ng oras upang i-print, i-right? 708 00:45:06,570 --> 00:45:08,610 Mayroon lamang tumatagal ng higit pang trabaho sa bahagi ng computer. 709 00:45:08,610 --> 00:45:10,620 At doon ito ay: Segmentation fault. 710 00:45:10,620 --> 00:45:12,340 >> Kaya mapansin lamang kung paano mabilis programa ay tatakbo. 711 00:45:12,340 --> 00:45:14,130 Kung hindi ka naka pag-print ng anumang bagay, napakabilis na. 712 00:45:14,130 --> 00:45:18,770 Ngunit pa rin namin nakuha ang segmentation fault dahil kung ano ang nangyayari? 713 00:45:18,770 --> 00:45:21,210 Kung sa tingin mo tungkol sa kung paano ang memorya ng iyong computer ay inilatag nang, 714 00:45:21,210 --> 00:45:28,740 nangyari ito sa pangunahing, ngunit dito sabihin tumawag ito nang sabay-sabay, at sabihin itawag sa koro. 715 00:45:28,740 --> 00:45:34,550 At ngayon kung gagawin ko ang aking mga aesthetics karapatan, ito ay lamang pagpunta sa sabihin ng koro, koro, koro, 716 00:45:34,550 --> 00:45:40,550 koro, koro, koro, koro, ad nauseum, at kalaunan, kung ano ang mangyari? 717 00:45:40,550 --> 00:45:45,630 Kung ang malaking larawan, literal, ito, kung ano ang mangyayari lamang conceptually? 718 00:45:46,520 --> 00:45:48,630 Ang stack overruns ang magbunton. 719 00:45:48,630 --> 00:45:51,940 O, mas masahol pa, mo lamang malatagan lahat, kabilang ang segment ng teksto, 720 00:45:51,940 --> 00:45:54,590 na ang 0s at 1s na kumakatawan sa iyong programa. 721 00:45:54,590 --> 00:45:57,080 Sa maikli, ito ay sobrang, sobrang masamang. 722 00:45:57,080 --> 00:45:58,830 Ang iyong programa spiraled ng kontrol. 723 00:45:58,830 --> 00:46:01,220 Gumagamit ka ng paraan higit pang memory kaysa sa nilayon mo 724 00:46:01,220 --> 00:46:03,960 lahat ng dahil sa isang bobo pagkakamali sa kasong ito, 725 00:46:03,960 --> 00:46:08,040 o sa kasong ito napaka sadyang gawin ang function sa pagtawag mismo. 726 00:46:08,040 --> 00:46:09,500 Ngayon, ito ay hindi lahat ng masama. 727 00:46:09,500 --> 00:46:13,800 Pag-andar pagtawag sa kanilang sarili ay aktwal na may dakilang kapangyarihan kapag ginamit mo ito nang tama. 728 00:46:13,800 --> 00:46:15,800 Hindi ko ginagamit ito nang tama dito. 729 00:46:15,800 --> 00:46:19,780 Kaya ito ay hindi lahat ng masama, ngunit ang katotohanan na ako hindi aktwal na itigil pagtawag aking sarili 730 00:46:19,780 --> 00:46:23,520 ay isang pangunahing kahinaan dito ng programang ito. 731 00:46:23,520 --> 00:46:26,400 Kaya kung saan ay namin pagpunta sa lahat ng ito? Kung ano talaga ang nangyayari? 732 00:46:26,400 --> 00:46:30,340 Kapag Tinatawag ko ang pagdagdag function na tulad namin ay ginagawa sa mga halimbawa, 733 00:46:30,340 --> 00:46:33,420 Mayroon akong isang halaga tulad ng 1 na pumasa ako. 734 00:46:33,420 --> 00:46:37,570 Pumasa ko sa isang kopya ng numero 1, kaya sumusunod ang mangyayari. 735 00:46:37,570 --> 00:46:44,240 Natin pumunta sa halimbawa ng pagdagdag, ang tao na ito karapatan sa paglipas dito. 736 00:46:44,240 --> 00:46:46,870 Narito ang kung ano ang aktwal na nangyayari. 737 00:46:46,870 --> 00:46:53,400 Kapag tumawag ako ng pagdagdag at pumasa ako sa x, pictorially, kung anong nangyayari sa dito ay ito. 738 00:46:53,400 --> 00:46:59,520 >> Kung mayroon ko ang halaga ng 1 na naka-imbak sa dito at tumawag ako aktwal pagdagdag, 739 00:46:59,520 --> 00:47:04,330 na kung saan ay tinatawag na ngayong nang sabay-sabay - iPad ang ibinabato ninyo nga ako dito. 740 00:47:04,330 --> 00:47:09,760 Natin tawagan ang pagdagdag na ito, at hindi namin malaman kung ano ang susunod na function ay magiging. 741 00:47:09,760 --> 00:47:14,840 Kaya kung ano ang aktwal na nangyayari dito sa isang lugar sa pangunahing Mayroon akong isang tipak ng memory 742 00:47:14,840 --> 00:47:17,000 na pag-iimbak ng numero 1. 743 00:47:17,000 --> 00:47:19,380 Kapag tumawag ako pagdagdag, gumagamit ako ng isa pang tipak ng memory, 744 00:47:19,380 --> 00:47:21,230 ngunit ngayon ay mayroon akong kopya ng 1. 745 00:47:21,230 --> 00:47:26,660 Kapag dagdagan ko na halaga, ito ay magiging 2, 746 00:47:26,660 --> 00:47:30,560 ngunit pagkatapos ay kung ano ang mangyayari sa lalong madaling babalik pagdagdag? 747 00:47:30,560 --> 00:47:33,630 Memory ito ay makakakuha lamang ipinasa pabalik sa operating system, 748 00:47:33,630 --> 00:47:37,450 na nangangahulugan na lahat nagawa mo na ay walang kapaki-pakinabang. 749 00:47:37,450 --> 00:47:43,120 Ang 1 na orihinal na nilalaman sa pangunahing pa rin ang aktwal na doon. 750 00:47:43,120 --> 00:47:44,890 Kaya kung saan ay namin pagpunta na ito? 751 00:47:44,890 --> 00:47:49,770 Ito lumiliko out na sa memory mayroon kang ang back-to-likod na pagkakasunud-sunod ng mga byte 752 00:47:49,770 --> 00:47:53,050 na maaari mong ilagay ang mga bagay-bagay sa, at ito ay lumiliko out na nakakita kami ng isang bagay 753 00:47:53,050 --> 00:47:55,390 na nagsasangkot ng paglalagay ng mga bagay pabalik upang i-back i-back upang i-back. 754 00:47:55,390 --> 00:47:59,860 Ano ang isang string na batay sa linggo 1 at ngayon linggo 2? 755 00:48:00,020 --> 00:48:01,980 Ito ay isang koleksyon ng mga character. 756 00:48:01,980 --> 00:48:04,310 Kaya ito lumiliko tulad ng maaari mong ilagay ang mga numero sa memorya, 757 00:48:04,310 --> 00:48:06,990 katulad maaari kang maglagay ng mga character sa memory. 758 00:48:06,990 --> 00:48:10,530 At sa sandaling sinimulan namin ang paglalagay ng character sa memory pabalik upang i-back i-back sa likod, 759 00:48:10,530 --> 00:48:13,620 ito lumiliko na gamit ang pinakasimpleng ng mga bagay tulad ng isang para sa loop o habang loop, 760 00:48:13,620 --> 00:48:17,170 umulit namin mula kaliwa sa kanan sa ang mga character sa isang string 761 00:48:17,170 --> 00:48:20,600 at simulan ang masahe mga ito sa ibang mga character sa kabuuan - 762 00:48:20,600 --> 00:48:23,370 maaaring maging isang b, b maaaring maging c - 763 00:48:23,370 --> 00:48:27,780 kaya na ganap na, maaari naming tumagal ng Ingles na pangungusap na aktwal saysay 764 00:48:27,780 --> 00:48:30,310 at i-convert ang bawat isa ng mga titik isa sa isang pagkakataon 765 00:48:30,310 --> 00:48:34,400 sa pamamagitan ng paglalakad sa pamamagitan ng memorya ng aming computer kaliwa hanggang kanang upang aktwal na-encrypt. 766 00:48:34,400 --> 00:48:35,810 Kaya sabihin ang aming limang minutong pahinga dito, 767 00:48:35,810 --> 00:48:40,730 at kapag dumating namin pabalik, sisimulan namin ang prosesong ito ng scrambling ng impormasyon. 768 00:48:42,020 --> 00:48:43,520 >> Ayos lang. 769 00:48:43,520 --> 00:48:48,070 Bago namin sumisid sa ilang crypto at mga bagay na ito na tinatawag na array, 770 00:48:48,070 --> 00:48:51,470 hayaan mo akong i-pause para sa anumang mga tanong dahil pakiramdam ko tulad ko talagang uri ng muddled 771 00:48:51,470 --> 00:48:54,080 ang ilan sa mga paksang iyon. Kaya natin ayusin ngayon kung kaya namin. 772 00:48:54,080 --> 00:48:58,700 Uusapang lang namin tungkol sa mga halaga return, usapan natin ang tungkol sa mga argumento, 773 00:48:58,700 --> 00:49:03,250 at usapan natin ang tungkol sa paniwala na ito, na magpapadala kami bumalik sa linggo darating, 774 00:49:03,250 --> 00:49:08,720 ng pagtingin ng memorya bilang isang buong bungkos ng mga nakasalansan trays, kaya na magsalita, 775 00:49:08,720 --> 00:49:12,660 mula sa ibaba sa up, tulad na ang bawat tray na maipo ilagay sa stack 776 00:49:12,660 --> 00:49:16,530 ay kumakatawan sa isang function na kasalukuyang tinatawag na. 777 00:49:17,900 --> 00:49:20,260 Anumang mga katanungan? 778 00:49:20,260 --> 00:49:22,640 Hayaan akong magtanong dito. 779 00:49:22,640 --> 00:49:27,890 Ipaalam sa akin pasimplehin ito pabalik sa kung ano ito ay bago ang ilan sa aming mga mas maaga na Q & A. 780 00:49:27,890 --> 00:49:35,570 Ang katotohanan na ang pagdagdag may bukas panaklong, int numero, sarado panaklong - 781 00:49:35,570 --> 00:49:39,110 kung ano ang int numero kumatawan? 782 00:49:39,110 --> 00:49:42,790 [Mag-aaral] isang argument. >> Isang argumento. Okay. Ngunit ano ang isang argument? 783 00:49:42,790 --> 00:49:46,370 [Hindi marinig na mag-aaral ng tugon] >> Ano iyon? >> [Mag-aaral] May na pumasa ka. 784 00:49:46,370 --> 00:49:49,940 Okay, kaya ang isang bagay na pumasa ka. At mas pangkalahatan, ang input. 785 00:49:49,940 --> 00:49:52,450 Kung ikaw ay pagsusulat ng isang function at layunin na function na sa buhay 786 00:49:52,450 --> 00:49:55,770 ay upang gawin ang isang bagay ng isang maliit na iba't ibang sa bawat oras na gamitin mo ito, 787 00:49:55,770 --> 00:50:00,110 pagkatapos ay ang tanging paraan para sa na mangyari talagang mukhang upang magbigay ng may input 788 00:50:00,110 --> 00:50:03,510 gayon ay maaari itong gawin ng isang bagay ibang may na input sa bawat oras. 789 00:50:03,510 --> 00:50:06,650 >> Kaya kailangan mong tukuyin ang dalawang bagay kapag ang isang function na tumatagal ng input. 790 00:50:06,650 --> 00:50:09,590 Kailangan mong tukuyin ang pangalan na gusto mong ibigay sa input na 791 00:50:09,590 --> 00:50:12,700 pulos para sa iyong sariling kaginhawahan sa gayon ay maaari kang sumangguni dito 792 00:50:12,700 --> 00:50:16,540 sa katangian mo ang iyong sarili ay pagsusulat, tulad ng ginawa ko dito sa linya 32. 793 00:50:16,540 --> 00:50:20,800 Ngunit kailangan mo ring upang tukuyin ang uri dahil ang C ay isang programming language 794 00:50:20,800 --> 00:50:25,940 na nangangailangan lamang na kung nais mo ang isang variable, mayroon kang upang sabihin ang computer kung ano ang uri ng data na ito ay, 795 00:50:25,940 --> 00:50:30,200 sa malaking bahagi upang ito alam kung gaano karaming mga bits upang maglaan para sa variable na 796 00:50:30,200 --> 00:50:33,020 dahil maaaring ito ay 6 - Paumanhin, hindi ito ay 6. 797 00:50:33,020 --> 00:50:37,080 Maaari itong 16, maaari itong maging 8, maaari itong maging 32 kahit 64, 798 00:50:37,080 --> 00:50:39,130 ngunit ang computer ay kailangang malaman. 799 00:50:39,130 --> 00:50:43,180 Ngayon, ang int sa kaliwang bahagi ay kumakatawan sa kung ano ang, sa pamamagitan ng kaibahan? 800 00:50:46,350 --> 00:50:48,850 [Hindi marinig na mag-aaral ng tugon] >> Ano iyon? >> [Mag-aaral] Uri ng function na. 801 00:50:48,850 --> 00:50:53,610 Ang uri ng isang function at, higit na partikular, ang uri ng mga output. Kanan. 802 00:50:53,610 --> 00:50:57,380 Kaya habang ang mga bagay sa mga panaklong ay kumakatawan sa input nito, kung mayroon man, 803 00:50:57,380 --> 00:50:59,660 ang bagay sa kaliwa ay kumakatawan ang output nito. 804 00:50:59,660 --> 00:51:03,530 At sa kasong ito, pagdagdag tila nagbabalik ng isang int, 805 00:51:03,530 --> 00:51:07,690 at kaya int ang return uri ng function na ito. 806 00:51:07,690 --> 00:51:09,340 Ano ang ibig sabihin bumalik? 807 00:51:09,340 --> 00:51:15,090 Literal, gamitin mo ang balik sa keyword at pagkatapos ay kung ano ang iyong mga bumabalik 808 00:51:15,090 --> 00:51:18,600 sa kanan ng keyword ay isang integer, 809 00:51:18,600 --> 00:51:21,660 pagkatapos na talaga ang pare-pareho sa kung ano ang namin ang ipinangako. 810 00:51:21,660 --> 00:51:26,410 Hindi mo maaaring gawin ang isang bagay tulad nito - kumusta, mundo - dahil na isang string. 811 00:51:26,410 --> 00:51:28,860 >> Malinaw naman, ito ay hindi isang integer. 812 00:51:28,860 --> 00:51:33,140 Kaya sa maikling, pahirapan talaga sa amin, programmer, na ang partikular na 813 00:51:33,140 --> 00:51:37,770 kung ano ang kami ay bumabalik at pagkatapos ay tunay na tungkol sa bumabalik ito. 814 00:51:37,770 --> 00:51:43,440 Sa konteksto dito ngayon ay na ang memory ng iyong computer ay isang gigabyte, 2 gigabytes - 815 00:51:43,440 --> 00:51:45,920 anumang - marahil ito ay higit pa, marahil ito ay mas kaunti, mas 816 00:51:45,920 --> 00:51:49,050 ngunit ang computer tumingin ito bilang pagkakaroon ng iba't ibang mga seksyon. 817 00:51:49,050 --> 00:51:51,200 Isang bagay na napupunta doon, iba pa napupunta up doon, 818 00:51:51,200 --> 00:51:54,290 ibang bagay napupunta sa gitna, at ngayon lang namin simulan na nagsasabi sa kuwento, 819 00:51:54,290 --> 00:51:56,340 ngunit gagamitin namin bumalik na ito sa paglipas ng panahon. 820 00:51:56,340 --> 00:51:59,980 Sa ngayon, ang tanging piraso ng memorya namin talagang pakialam tungkol sa ang teksto segment 821 00:51:59,980 --> 00:52:03,360 dahil na kumakatawan lamang ang 0s at 1s na kumalatong outputted. 822 00:52:03,360 --> 00:52:06,050 Kaya kapag nagpatakbo ka ng isang command sa keyboard tulad a.out 823 00:52:06,050 --> 00:52:09,110 o i-double click ang isang icon sa Mac OS o Windows, 824 00:52:09,110 --> 00:52:11,880 ang iyong programa ay load mula sa iyong hard drive sa RAM 825 00:52:11,880 --> 00:52:16,330 at ito plopped sa tuktok ng RAM ng iyong computer, kaya na magsalita. 826 00:52:16,330 --> 00:52:20,450 Samantala, bilang tumatakbo ang iyong programa ay nagsisimula at pangunahing ay makakakuha ng tinatawag na 827 00:52:20,450 --> 00:52:23,640 sa programa sinulat ni o sa programa ng Microsoft o Apple sinulat ni, 828 00:52:23,640 --> 00:52:27,860 ng mga lokal na variable magtapos hanggang pababa doon sa ilalim ng memory ng iyong computer. 829 00:52:27,860 --> 00:52:33,230 Ngunit kung ang pangunahing tawag isa pang function na mismo ay variable o mga argument, sila magtapos ang nasa itaas nito. 830 00:52:33,230 --> 00:52:36,680 At kung ang function na tawag ng isang bagay, sila magtapos itaas nito, nasa itaas nito, nasa itaas nito. 831 00:52:36,680 --> 00:52:41,460 >> At nang isang beses lamang function na tapos na e-execute ay ang stack ng mga trays, upang magsalita, 832 00:52:41,460 --> 00:52:43,240 simulan upang makakuha ng mas mababa at mas mababa. 833 00:52:43,240 --> 00:52:48,250 At ito ay kung ano pagkatapos, sa maikling sabi, ay nagpapaliwanag kung bakit kapag tumawag ka kubo 834 00:52:48,250 --> 00:52:51,550 o tumawag ka pagdagdag, ka ng pagpasa sa isang kopya ng ang halaga. 835 00:52:51,550 --> 00:52:55,520 At kung ano ang nangangahulugan iyon pictorially na literal sumusulat ka ng numero 1 836 00:52:55,520 --> 00:53:00,460 sa ibang bahagi ng memorya, pagbabago na 1 hanggang 2 sa kaso ng pagdagdag 837 00:53:00,460 --> 00:53:04,820 o sa isang 8 sa kaso ng kubo at pagkatapos ay ibinabato na memorya ang layo 838 00:53:04,820 --> 00:53:09,140 sa lalong madaling ang pagdagdag o ang kubo function na babalik. Tanong. 839 00:53:09,140 --> 00:53:12,900 [Mag-aaral] Saan pangkalahatang variable na naka-imbak? 840 00:53:12,900 --> 00:53:18,100 Global variable ay naka-imbak sa kung ano ang kasalukuyang tinatawag na nasimulan na data o uninitialized data, 841 00:53:18,100 --> 00:53:21,920 pagkakaiba sa kung mayroon kang isang global variable at itinalaga mo agad ito ng halaga 842 00:53:21,920 --> 00:53:24,640 may equals sign, nagtatapos sa tuktok doon, 843 00:53:24,640 --> 00:53:29,200 at kung sabihin mo lang int x; na walang halaga, ito ay nagtatapos up bahagyang mas mababang RAM 844 00:53:29,200 --> 00:53:31,710 sa pamamagitan lamang ng convention. 845 00:53:31,710 --> 00:53:34,940 Iba pang mga tanong? Ayos lang. 846 00:53:34,940 --> 00:53:37,340 Kaya ang larawang ito ay bumalik dahil makakakuha tayo ng mas malakas na 847 00:53:37,340 --> 00:53:39,170 sa kung ano ang maaari naming gawin sa mga computer, 848 00:53:39,170 --> 00:53:42,720 ngunit sa ngayon, sabihin may isang maikling panimula sa cryptography, 849 00:53:42,720 --> 00:53:46,080 ng isang partikular na uri ng cryptography na hindi malutas ang lahat ng problema sa mundo 850 00:53:46,080 --> 00:53:47,720 ngunit hindi malutas ang ilan sa mga ito. 851 00:53:47,720 --> 00:53:51,700 Sa kasong ito dito, mayroon kaming isang bagay na tinatawag na lihim-susi cryptography. 852 00:53:51,700 --> 00:53:56,410 Sekreto ng-key cryptography, ng pangalan nagmumungkahi, derives nito seguridad mula sa isang lihim. 853 00:53:56,410 --> 00:54:00,690 >> Halimbawa, kung ikaw ay bumalik sa mababang paaralan at ikaw ay pagpasa ng isang maliit na lihim na pag-ibig na sulat 854 00:54:00,690 --> 00:54:04,850 sa batang lalaki o babae ikaw ay pagyurak sa, kung gusto mo upang pumasa na tala sa pamamagitan ng madla, 855 00:54:04,850 --> 00:54:08,380 malamang na hindi isulat ang tulad ng isang tala sa Ingles o anumang iyong katutubong wika ay. 856 00:54:08,380 --> 00:54:13,340 Sa halip, maaari mong i-encrypt ito o maaari mong ipadala ang mga ito ng isang text message na mga araw na ito. 857 00:54:13,340 --> 00:54:15,460 Ngunit maaari mong aktwal na ipasa ang mga ito ng tala sa buong silid-aralan. 858 00:54:15,460 --> 00:54:18,700 At upang gawin ito nang secure sa paraan na ang iyong mga kaibigan at ang guro 859 00:54:18,700 --> 00:54:22,650 hindi alam kung ano ang sumusulat ka, maaari kang makabuo ng isang medyo simpleng algorithm, 860 00:54:22,650 --> 00:54:25,920 batang bagaman maaari mong, sa makatarungan mang-uayabit ang mga salita. 861 00:54:25,920 --> 00:54:28,130 Kaya sa halip ng pagsusulat ng maaari mong isulat ang b, 862 00:54:28,130 --> 00:54:30,220 sa halip na b maaari mong isulat ang c, 863 00:54:30,220 --> 00:54:32,140 sa halip na c maaari mong isulat ang d, at iba pa. 864 00:54:32,140 --> 00:54:34,360 O maaari kang makabuo ng isang mas sopistikadong pagsasalin 865 00:54:34,360 --> 00:54:36,720 ng mga titik sa ibang mga titik. 866 00:54:36,720 --> 00:54:39,740 Subalit catch ay ang mga batang lalaki o babae sa kung kanino ka pagpapadala ng talang ito 867 00:54:39,740 --> 00:54:45,020 pangangailangan na malaman ang isang bagay, na ano, malinaw naman? >> [Mag-aaral] Ano ka pagpapadala. 868 00:54:45,020 --> 00:54:49,720 Ano ang iyong lihim ay, tulad ng kung ano ang na sa pagmamapa sa pagitan ng isang at b ang at c at d's. 869 00:54:49,720 --> 00:54:54,650 Ay ito lamang pagdaragdag ng 1 sa bawat isa ng ang mga titik upang pumunta mula sa isang b, b sa c? 870 00:54:54,650 --> 00:54:56,670 Mas kumplikado kaysa sa? 871 00:54:56,670 --> 00:55:01,540 >> Kaya ka at ang iyong crush ay kailangang magkaroon ng lihim na impormasyon na ito, 872 00:55:01,540 --> 00:55:03,190 ngunit ang uri ng isang catch-22 dito. 873 00:55:03,190 --> 00:55:06,830 Kung ito ang unang pagkakataon na iyong pagpapadala ng pag-ibig sulat na ito sa pamamagitan ng klase, 874 00:55:06,830 --> 00:55:10,720 paano na batang lalaki o babae upang malaman kung ano ang lihim ang kahit? 875 00:55:10,720 --> 00:55:13,930 Kaya lihim-susi crypto ay hindi malutas ang lahat ng problema sa mundo, 876 00:55:13,930 --> 00:55:16,320 at may aktwal na relasyon dito na kami bumalik sa patungo sa pagtatapos ng semestre. 877 00:55:16,320 --> 00:55:25,110 Katulad nito ang karamihan sa atin hindi alam ng isang tao na gumagana, halimbawa, sa Amazon.com, 878 00:55:25,110 --> 00:55:28,190 at pa marami sa atin na marahil bumili ng mga bagay-bagay sa Amazon.com, 879 00:55:28,190 --> 00:55:31,990 at kami ay itinuro sa ipagpalagay na ang mga transaksyong e-commerce ay secure na. 880 00:55:31,990 --> 00:55:36,470 Ang URL ay malamang sabi ni https, mayroong maaaring ulok maliit na icon na padlock sa isang lugar, 881 00:55:36,470 --> 00:55:39,930 may ilang mga uri ng cryptography sa pag-secure ang impormasyon ng iyong credit card 882 00:55:39,930 --> 00:55:42,160 sa pagitan mo at Amazon.com. 883 00:55:42,160 --> 00:55:45,430 At pa kung cryptography nagsasangkot alam ilang lihim 884 00:55:45,430 --> 00:55:48,620 at hindi pa ko alam ang sinuman sa Amazon at tiyak ko na hindi isagawa ang anumang uri ng lihim 885 00:55:48,620 --> 00:55:52,710 may isang tao sa Amazon, kung paano ang aking computer o aking browser paggawa nito? 886 00:55:52,710 --> 00:55:55,720 Lumiliko out may iba pang mga uri ng cryptography sa kabuuan na malutas ang problemang. 887 00:55:55,720 --> 00:55:57,670 Ngunit ngayon, makikita naming tumuon sa simpleng 888 00:55:57,670 --> 00:56:00,290 kung saan maaari mong ayusin nang maaga upang malaman ang ilang mga lihim 889 00:56:00,290 --> 00:56:03,760 tulad ng +1 o ilang pagmamapa sa pagitan ng isang at b. 890 00:56:03,760 --> 00:56:05,840 At ang proseso ng cryptography sa pangkalahatan ay nagsasangkot ito. 891 00:56:05,840 --> 00:56:08,620 Mayroon kang ilang mga plain text, itinatanghal dito sa kaliwa, 892 00:56:08,620 --> 00:56:12,930 mong patakbuhin ang mga ito sa pamamagitan ng ilang uri ng algorithm o pamamaraan para sa pag-encrypt ito - 893 00:56:12,930 --> 00:56:15,100 siguro na lamang nagiging b, b magiging c - 894 00:56:15,100 --> 00:56:17,490 at pagkatapos mo magtapos sa ciphertext. 895 00:56:17,490 --> 00:56:20,380 Samantala, sa sandaling ang iyong crush natatanggap ito lihim tandaan, 896 00:56:20,380 --> 00:56:24,200 siya ay may pagkatapos ay i-decrypt ito sa pamamagitan ng pangkalahatang pagtaliwas na algorithm 897 00:56:24,200 --> 00:56:27,190 upang makakuha ng plain text. 898 00:56:27,190 --> 00:56:28,960 May mga pisikal na anyo ng mga ito. 899 00:56:28,960 --> 00:56:31,680 >> Halimbawa, ito ay isang maliit na lihim na decoder ring, 900 00:56:31,680 --> 00:56:35,110 at ito ay isang ring sa kamalayan na may dalawang dials dito. 901 00:56:35,110 --> 00:56:38,490 Sa labas paligid ng bagay na ito, may titik A sa pamamagitan ng Z, 902 00:56:38,490 --> 00:56:40,340 bagaman sila sa random na pagkakasunod-sunod, 903 00:56:40,340 --> 00:56:42,880 at sa loob, may aktwal na ilang numero 904 00:56:42,880 --> 00:56:46,620 tulad na may singsing na ito maaari mong uri ng i-sa labas ngunit hindi sa loob ng 905 00:56:46,620 --> 00:56:49,140 upang pumila mga numero sa mga titik. 906 00:56:49,140 --> 00:56:53,020 Mula sa isang pelikula na tinatawag na A Christmas Story, makikita mo na maliit Ralphie 907 00:56:53,020 --> 00:56:58,000 kaya sabik upang malaman kung anong lihim na mensahe ng Little ulila Annie sa kanya 908 00:56:58,000 --> 00:57:02,570 na ay Nakipag-ugnayan, sa tingin ko, sa anyo ng mga numeric na mensahe sa isang kahon ng cereal 909 00:57:02,570 --> 00:57:07,220 at mayroon kang upang maipon ang lahat ng mga maliit na card na dumating sa kahon ng cereal, 910 00:57:07,220 --> 00:57:09,770 mayroon ka sa mail na ito sa, mayroon kang upang makuha ang lihim na decoder ring 911 00:57:09,770 --> 00:57:13,910 sa gayon maaari mong wakas malaman kung ano ang pagma-map sa pagitan ng mga titik at numero 912 00:57:13,910 --> 00:57:15,550 o titik at letra. 913 00:57:15,550 --> 00:57:19,520 Paano sa isang computer, maaari naming pumunta tungkol sa pagpapatupad o kumakatawan ng mga bagay na tulad nito? 914 00:57:19,520 --> 00:57:22,560 Kailangan namin ng isang paraan ng pagpapahayag ng ating sarili ng kaunti pa flexibly 915 00:57:22,560 --> 00:57:25,080 kaysa sa aming mga variable sa gayon ngayon pinayagan. 916 00:57:25,080 --> 00:57:29,000 Nagkaroon kami ng ints, nagkaroon kami ng char, kami ay may sa kamay at Doubles at ng ilang mga iba, 917 00:57:29,000 --> 00:57:34,200 ngunit ang mga indibidwal na mga piraso ng memorya na hindi talaga-daan sa amin upang ipahayag ang mga bagay 918 00:57:34,200 --> 00:57:36,440 tulad ng mga salita at mga pangungusap at mga parirala. 919 00:57:36,440 --> 00:57:38,630 Sa katunayan, namin ang tinatawag na tulad string bagay, 920 00:57:38,630 --> 00:57:42,660 ngunit ipinapangako namin na ito ay talagang lamang pagpapagaan sa CS50 library 921 00:57:42,660 --> 00:57:45,540 na kami ay nagbabalak bumalik sa alisan ng balat. 922 00:57:45,540 --> 00:57:47,500 At kaya sabihin simulan upang gawin iyon dito. 923 00:57:47,500 --> 00:57:49,840 Hayaan akong sige at buksan up ng isang file - 924 00:57:49,840 --> 00:57:54,100 lahat ng mga file na ito ay magagamit, gaya ng dati, online - tinatawag array.c 925 00:57:54,100 --> 00:57:58,960 upang malutas ang isang problema na hindi nauugnay sa string ngunit na paints ng isang larawan dito 926 00:57:58,960 --> 00:58:01,520 kung paano maaari naming gamitin ang isang bagay na tinatawag na isang array. 927 00:58:01,520 --> 00:58:04,050 >> Isang array ay isang uri ng data. 928 00:58:04,050 --> 00:58:10,730 Ito ay isang uri ng variable ng uri na may maramihang mga mas maliit na mga uri ng data sa loob nito 929 00:58:10,730 --> 00:58:12,680 bumalik upang i-back i-back upang i-back. 930 00:58:12,680 --> 00:58:16,980 Kaya halimbawa, kung gusto naming magsulat ng isang maliit na programa na nagbibigay sa iyo ng iyong pagsusulit average 931 00:58:16,980 --> 00:58:19,780 para sa isang kurso tulad ng 50 na may 2 pagsusulit, 932 00:58:19,780 --> 00:58:23,450 maaari mong napaka madaling isulat ang programang ito batay kahit sa ilan sa materyal huling linggo 933 00:58:23,450 --> 00:58:28,830 sa pamamagitan ng paggamit ng GetInt at ng ilang mga variable: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 At ito ay medyo direkta. 935 00:58:30,550 --> 00:58:33,500 Ito ay maaaring 10, 20 linya ng code max ipatupad ang isang programa 936 00:58:33,500 --> 00:58:38,940 na nagtatanong sa gumagamit para sa 2 mga marka ng pagsusulit at pagkatapos computes kanilang average 937 00:58:38,940 --> 00:58:42,020 sa pamamagitan ng pagdaragdag sa mga ito nang sama-sama, paghahati ng 2, at pagkatapos ay pag-print ang mga resulta. 938 00:58:42,020 --> 00:58:46,400 Namin malamang gawin na medyo kaagad ngayon pagkatapos ng ilang bilang ng mga minuto. 939 00:58:46,400 --> 00:58:49,450 Ngunit ang problema ay na ipagpalagay na 50 ay may 3 mga pagsusulit o 4. 940 00:58:49,450 --> 00:58:52,830 Ipagpalagay na nais mong gamitin ang parehong programa para sa isang klase na nagkaroon lingguhang pagsusulit. 941 00:58:52,830 --> 00:58:55,100 -Isip tungkol sa isang klase na lingguhang pagsusulit. 942 00:58:55,100 --> 00:58:58,840 Kung may 16 o kaya linggo sa isang semestre, na ngayon ay mayroon kang 16 variable: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, int quiz4. 944 00:59:03,030 --> 00:59:06,870 Sa lalong madaling simulan mo nakikita ang kalabisan, ang pagkopya at paglalagay ng code, 945 00:59:06,870 --> 00:59:09,810 dapat itong magsimula sa nais mong mayroong isang mas mahusay na paraan. 946 00:59:09,810 --> 00:59:13,610 At thankfully, dahil sa array. Kaya sabihin gawin ito. 947 00:59:13,610 --> 00:59:16,700 Una, hayaan mo akong ipakilala ang isang napaka-simpleng bagay na hindi namin ginagamit sa gayon ngayon, 948 00:59:16,700 --> 00:59:18,820 ngunit makikita mo ang mga ito paminsan-minsan sa code. 949 00:59:18,820 --> 00:59:21,270 >> Ito ay kung ano ang pangkalahatan ay tinatawag na isang pare-pareho. 950 00:59:21,270 --> 00:59:24,410 Kaya ito ay isang pare-pareho sa kamalayan na ang halaga na ito ay hindi kailanman nagbabago. 951 00:59:24,410 --> 00:59:26,450 Ang tao convention kapag lumilikha ng isang pare-pareho 952 00:59:26,450 --> 00:59:30,420 ay upang gamitin ang lahat ng mga malalaking titik lamang kaya na talaga ito ay nakatayo sa iyong code, 953 00:59:30,420 --> 00:59:34,270 at ang mga espesyal na keyword na gamitin mo sa C # tukuyin. 954 00:59:34,270 --> 00:59:39,970 Kaya sinasabi namin # tukuyin, pagkatapos ng isang puwang, pagkatapos ay ang salita na gusto mong gamitin para sa pangalan ng pare-pareho 955 00:59:39,970 --> 00:59:41,730 at pagkatapos ay ang halaga ng pare-pareho. 956 00:59:41,730 --> 00:59:44,710 Mapansin ito ay naiiba mula sa nagtatalaga ng isang bagay sa isang variable. 957 00:59:44,710 --> 00:59:46,430 Walang katumbas mag-sign, ang walang semicolon. 958 00:59:46,430 --> 00:59:49,140 Ito ay kung ano ang karaniwang kilala bilang isang Preprocessor panuto, 959 00:59:49,140 --> 00:59:50,840 ngunit higit pa sa na ng isa pang oras. 960 00:59:50,840 --> 00:59:56,350 Sa ngayon, ito ay lumilikha ng isang walang pagbabago na halaga na tinatawag na Pagsusulit 961 00:59:56,350 --> 00:59:58,290 na ang aktwal na numerong halaga ay 2. 962 00:59:58,290 --> 01:00:02,180 Kaya kahit saan mo ang pagsusulit, Pagsusulit, Pagsusulit sa buong ang file na ito, 963 01:00:02,180 --> 01:00:04,230 na lamang ang bilang 2. 964 01:00:04,230 --> 01:00:06,550 Kung titingnan ko sa pangunahing ngayon, sabihin makita kung paano ito gumagana. 965 01:00:06,550 --> 01:00:09,770 Unang mukhang ng kaunti misteriyoso, ngunit ito ang lahat ng mga bagay-bagay mula sa linggo 1. 966 01:00:09,770 --> 01:00:12,210 Magtanong ng gumagamit para sa mga grado. Paano namin gawin ito? 967 01:00:12,210 --> 01:00:17,350 Sa linya 22 - ito ay talaga ang makatas bahagi - idedeklara ko ng Float 968 01:00:17,350 --> 01:00:23,240 ngunit hindi lamang ng isang solong Float. Ako deklarasyon, sa halip, ang isang hanay ng mga lumulutang-point na halaga. 969 01:00:23,240 --> 01:00:27,700 Na variable na tinatawag na grado, tulad ng ipinahiwatig dito, 970 01:00:27,700 --> 01:00:31,420 ngunit ang tanging piraso ng bagong syntax pagkatapos ay ang mga square bracket. 971 01:00:31,420 --> 01:00:37,280 Ang katotohanan na ang ko ang sinabi Float grado at pagkatapos ay bukas bracket at pagkatapos ay isang numero - 972 01:00:37,280 --> 01:00:40,980 mapansin kung ito ay patuloy na ito ay tulad ng ginawa namin ito - 973 01:00:40,980 --> 01:00:46,840 ang ibig sabihin nito, "Hey computer, ninyo ako 2 kamay at sabihin sama-sama tumawag sa kanila grado." 974 01:00:46,840 --> 01:00:51,780 >> Ito ay sa kaibahan sa isang mas nakakapagod proseso tulad nito: Float grade1; 975 01:00:51,780 --> 01:00:54,580 lumutang grade2; at iba pa. 976 01:00:54,580 --> 01:00:58,310 Kaya array ng isang nagbibigay-daan sa amin upang ipatupad ang ideya ngunit higit na mas mababa messily, 977 01:00:58,310 --> 01:01:04,560 sa ganitong paraan namin isulat ang 1 linya ng code sa halip ng, sabihin nating, 16 para sa isang 16-linggo na semestre. 978 01:01:04,560 --> 01:01:09,060 Hindi ko gusto sa hard-code 2 dahil kung sa tingin mo tungkol dito ngayon lohikal, 979 01:01:09,060 --> 01:01:12,560 ipagpalagay na sa susunod na taon CS50 mga pagbabago sa 3 Pagsusulit sa halip 980 01:01:12,560 --> 01:01:15,010 at ako ay ang bilang 2 dito, ako ay ang bilang 2 dito, 981 01:01:15,010 --> 01:01:17,210 Ay ang bilang 2 ko dito, ang numero 2 dito. 982 01:01:17,210 --> 01:01:19,890 Nagiging napaka nakakapagod at mas madali upang sirain 983 01:01:19,890 --> 01:01:26,550 at sa aksidenteng baguhin ang 1 halaga sa 3 at makaligtaan ang ilang iba pang mga halaga ng 2. 984 01:01:26,550 --> 01:01:30,660 Kaya ako ng pagpunta sa halip abstract ito ang layo at gamitin ito pare-pareho na, 985 01:01:30,660 --> 01:01:32,520 bilang ang pangalan nito nagmumungkahi, hindi kailanman ang mga pagbabago. 986 01:01:32,520 --> 01:01:35,870 At ngayon, kahit na kung mayroon kaming iba't ibang mga pagsusulit sa taong ito o sa susunod na, 987 01:01:35,870 --> 01:01:39,380 Ko na lang ay upang baguhin ito sa isang lugar dito sa itaas. 988 01:01:39,380 --> 01:01:41,230 Kaya na ang lahat ng pare-pareho. 989 01:01:41,230 --> 01:01:47,100 Samantala, ang bagong tampok ng haka-haka na ng isang array. 990 01:01:47,100 --> 01:01:55,030 Kaya ang mga square bracket ay nagbibigay sa akin ang ganito karaming mga kamay at hinahayaan tumawag sa akin sama-sama ang mga ito grado dito. 991 01:01:55,030 --> 01:01:56,720 Kaya ngayon sabihin makita kung ano ako pagpunta sa gawin. 992 01:01:56,720 --> 01:01:59,220 Narito sa linya 24 sa simula ng isang para sa loop. 993 01:01:59,220 --> 01:02:03,380 >> Ito ay talagang walang magarbong. Lamang ito gamit ang Pagsusulit sa halip ng isang hard-code na numero. 994 01:02:03,380 --> 01:02:06,740 Ngunit mayroong walang intellectually ibang doon mula sa nakaraang linggo. 995 01:02:06,740 --> 01:02:11,650 Ito lamang printf, kaya printf ("Pagsusulit #% d ng% d:") 996 01:02:11,650 --> 01:02:16,670 dahil gusto ko lang i-print ninyo akong bigyan pagsusulit bilang 1 ng 2 at pagkatapos 2 ng 2. 997 01:02:16,670 --> 01:02:18,480 Kaya ito ay isang bagay na pulos Aesthetic. 998 01:02:18,480 --> 01:02:21,000 Ngunit ngayon ang kawili-wiling bahagi sa linya 27. 999 01:02:21,000 --> 01:02:27,840 Upang punan sa isa sa dalawang mga placeholder na may lumulutang-point na halaga, 1000 01:02:27,840 --> 01:02:29,640 ka na muling gumamit ng mga square bracket. 1001 01:02:29,640 --> 01:02:35,170 Sa kasong ito, gumagamit ako ng i dahil ang ito para sa loop ay nagsimula sa i katumbas kung ano ang halaga, tila? 1002 01:02:35,170 --> 01:02:36,670 [Mag-aaral] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Kaya sa unang pag-ulit na ito loop, na parang sinulat ni ko ito sa code, 1004 01:02:40,990 --> 01:02:46,310 ngunit sa ang pangalawang pag-ulit ng loop na ito, na kahit na sinulat ni ko ito sa aking code. 1005 01:02:46,310 --> 01:02:49,970 Ngunit ang katotohanan na gumagamit ako ng isang variable ay perpekto dahil, bilang ang pangalan ay nagmumungkahi, 1006 01:02:49,970 --> 01:02:52,600 ito iba't ibang nito halaga sa bawat pag-ulit, 1007 01:02:52,600 --> 01:02:55,900 kaya ako pinupunan ito array isang lugar sa isang pagkakataon. 1008 01:02:55,900 --> 01:02:57,380 Ano ang array na ito hitsura? 1009 01:02:57,380 --> 01:03:01,570 Ang dahilan iginuhit ko ang napaka-simpleng parihaba sa screen dito bago ay para sa kadahilanang ito. 1010 01:03:01,570 --> 01:03:05,590 Array isang ay isang tipak ng memorya na sinundan sa pamamagitan ng isa pang tipak ng memory 1011 01:03:05,590 --> 01:03:08,570 sinundan ng isa pang tipak ng memory at iba pa. 1012 01:03:08,570 --> 01:03:13,120 Kaya kung ang aking array ng laki 2 dito sa kasong ito, ang lahat ng Gusto ko ang paggawa ng 1013 01:03:13,120 --> 01:03:20,200 sa pamamagitan ng pag-type sa aking mga marka ng pagsusulit gusto dito - Nakatanggap ako ng 100 sa isang ito at pagkatapos Nakatanggap ako ng 99 sa isang ito - 1014 01:03:20,200 --> 01:03:24,970 memory na ito ay maaaring hindi kahit gamitin dahil lamang tatanungin ko ang computer 1015 01:03:24,970 --> 01:03:26,840 para sa isang hanay ng mga laki 2. 1016 01:03:26,840 --> 01:03:28,600 Yaong mga parisukat ay pa rin doon, sa kanan? 1017 01:03:28,600 --> 01:03:32,670 Mayroon ka pa ring 2 gigabytes ng RAM kahit na lamang ka humihingi ng 2 kamay. 1018 01:03:32,670 --> 01:03:36,840 Kaya ang ideya sa likod ng mga array ay computer na iyon lamang tumatagal ng isang tipak ng memory 1019 01:03:36,840 --> 01:03:41,340 at pagkatapos apportions mas maliit na piraso pabalik upang i-back i-back upang i-back. 1020 01:03:41,340 --> 01:03:43,310 At sa gayon ay ang lahat ng array ay isang. 1021 01:03:43,310 --> 01:03:47,350 >> Isang magkadikit na tipak ng memory sa loob ng kung saan maaari kang maglagay ng mga bagay. 1022 01:03:47,350 --> 01:03:50,700 Ito ang mangyayari pagkatapos lamang ilang pagbubutas aritmetika. 1023 01:03:50,700 --> 01:03:54,640 Kung mag-scroll pababa ko dito, ito ay kung saan ako umulit sa ibabaw ng array. 1024 01:03:54,640 --> 01:03:58,020 Dumating ko na ang kabuuan ng lahat ng mga halaga sa array, 1025 01:03:58,020 --> 01:04:02,470 at pagkatapos ay gamitin ko ang pag-ikot ng pagpapaandar dito upang aktwal na gawin ang kabuuan na hinati sa pamamagitan ng pagsusulit. 1026 01:04:02,470 --> 01:04:06,320 Ngunit ipaalam sa akin iwagayway ang aking kamay sa na bilang uri ng sapat na pang-aritmetika sa ngayon. 1027 01:04:06,320 --> 01:04:08,370 Ngunit ang lahat na ginagawa para sa akin sa huli ay compute ng isang average. 1028 01:04:08,370 --> 01:04:13,580 Kaya unang pagsusulit kasama ang pangalawang pagsusulit na hinati sa pamamagitan ng 2 at pagkatapos ay pag-print ito bilang isang int. 1029 01:04:13,580 --> 01:04:17,280 Ngunit natin ngayon paglipat sa ibang halimbawa na tinatawag string1, 1030 01:04:17,280 --> 01:04:20,700 na paints isang katulad na larawan ngunit gamit ang string. 1031 01:04:20,700 --> 01:04:23,940 Hayaan akong magpatuloy at pasimplehin ito para sa sandali lamang. 1032 01:04:23,940 --> 01:04:27,090 Patawarin ang indentation sa ngayon. 1033 01:04:27,090 --> 01:04:30,870 Abiso sa linya 19 ng halimbawang ito, nakakuha ako ng string mula sa user. 1034 01:04:30,870 --> 01:04:34,640 Ngunit mapansin kung ano ang susunod na ako ginagawa sa linya 22 pasulong. 1035 01:04:34,640 --> 01:04:41,250 Iterating aktwal ako mula sa i hanggang sa - at ito ay isang bagong nanlilinlang - strlen, haba ng string. 1036 01:04:41,250 --> 01:04:44,880 Ito ay isang function na may C na kung pumasa ka ng isang string, 1037 01:04:44,880 --> 01:04:47,730 ay nagsasabi sa iyo kung gaano karaming mga character ay na string. Iyon lang. 1038 01:04:47,730 --> 01:04:51,550 At ang katotohanan na ito ay strlen halip ang haba ng string ay dahil lang sa ito ay higit pa maikli at malinaw. 1039 01:04:51,550 --> 01:04:55,100 Tatlumpung taon na ang nakakaraan, tao ang gumusto na magsulat ng mga bagay pati na succinctly hangga't maaari, 1040 01:04:55,100 --> 01:04:57,630 kaya nagbigay kami iningatan ng convention na dito. 1041 01:04:57,630 --> 01:05:00,660 i + + lamang nangangahulugan dagdagan i sa bawat pag-ulit. 1042 01:05:00,660 --> 01:05:02,990 At ngayon ay mapapansin na ito, na kung saan ay talagang kawili-wili. 1043 01:05:02,990 --> 01:05:09,180 Sa ika-24 linya, sinasabi ko, "Computer, bigyan ako ng isang character, 8 bit, at tumawag ito c." 1044 01:05:09,180 --> 01:05:12,630 Ngunit ano ito sa sa kanang bahagi sinasabi? 1045 01:05:13,490 --> 01:05:16,530 Sa Ingles, ano na kumakatawan? 1046 01:05:16,530 --> 01:05:18,730 [Mag-aaral] Ang unang character sa array. 1047 01:05:18,730 --> 01:05:20,790 Eksakto. Bigyan ako ang unang character sa array. 1048 01:05:20,790 --> 01:05:24,090 O, mas pangkalahatan, magbibigay sa akin ith character sa array. 1049 01:05:24,090 --> 01:05:26,100 At Napagtanto ito mahalaga ngayon na bilang computer na siyentipiko, 1050 01:05:26,100 --> 01:05:27,890 aktwal na kami ay pagbibilang mula 0. 1051 01:05:27,890 --> 01:05:29,720 >> Hindi mo na kailangang ngayon ang pagpapasya upang simulan ang paggawa nito. 1052 01:05:29,720 --> 01:05:34,160 Ngayon ay mayroon kang upang kumilos alinsunod sa mga inaasahan ng computer at ang bilang mula 0 1053 01:05:34,160 --> 01:05:38,180 dahil [0] ay ang unang character sa isang string, 1054 01:05:38,180 --> 01:05:42,150 [1] ay ang pangalawang, [2] ay ang ikatlong, at iba pa. 1055 01:05:42,150 --> 01:05:49,720 Kaya programa na ito, kung makatipon ko ito, ito ay muli string1, kaya gumawa string1, 1056 01:05:49,720 --> 01:05:54,670 at ngayon ko na patakbuhin ang string1 sa aking terminal na window. 1057 01:05:54,670 --> 01:05:58,330 Ito ay naghihintay para sa input, kaya ako i-type sa David, Ipasok ang, 1058 01:05:58,330 --> 01:06:02,540 at ngayon ito ng mga Kopya David lahat sa iba't-ibang linya dahil paunawa kung ano ang ako ginagawa. 1059 01:06:02,540 --> 01:06:05,820 Ako pag-print ng isang character sa isang pagkakataon. 1060 01:06:05,820 --> 01:06:10,100 Hindi namin pumunta sa detalye ngayon sa, ngunit ko inalis ang isang sandali ang nakalipas ang pagsusuring ito dito. 1061 01:06:10,100 --> 01:06:15,480 Ito lumiliko out na kung ang user ay magulo, adversarial, o nalilito, 1062 01:06:15,480 --> 01:06:20,210 maaari mong aktwal na hindi magbigay ng isang string ng ilang haba. 1063 01:06:20,210 --> 01:06:22,860 Kung ikaw pindutin ang maling key sa keyboard, maaari mong bigyan ang walang string sa lahat, 1064 01:06:22,860 --> 01:06:26,950 o kung ikaw ay nakahahamak na, maaari mong subukang i-paste sa isang gigabyte halaga ng isang sanaysay 1065 01:06:26,950 --> 01:06:29,290 upang punan ang string na ito, at kung ang computer ay nagpapatakbo ng memorya, 1066 01:06:29,290 --> 01:06:32,710 ito lumiliko out na kami ay pagpunta upang makabalik ito espesyal na halaga na tinatawag na null. 1067 01:06:32,710 --> 01:06:35,580 Kaya sa ngayon, alam na may ito espesyal na halaga na tinatawag na null 1068 01:06:35,580 --> 01:06:39,580 na magbibigay-daan sa amin upang suriin kapag hindi namin ng memorya, bukod sa iba pang mga bagay. 1069 01:06:39,580 --> 01:06:45,630 Ngunit kung buksan ko up ngayon string2, mapansin ang isang pagkakaiba dito. 1070 01:06:45,630 --> 01:06:48,210 Mapansin ang isang pagkakaiba dito sa string2. 1071 01:06:48,210 --> 01:06:51,340 Na may string2, ito para sa loop ng kaunti ibang. 1072 01:06:51,340 --> 01:06:55,010 >> Hayaan akong tanggalin ang NULLs upang maaari naming makipag-usap tungkol sa mga ibang oras. 1073 01:06:55,010 --> 01:06:57,800 Ano ang iba't ibang tungkol sa para sa loop oras na ito? 1074 01:06:59,620 --> 01:07:01,670 Maaari ba akong bumalik sa nakaraang halimbawa. 1075 01:07:01,670 --> 01:07:08,580 Kaya na bersyon 2, ito ay bersyon 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 Ang strlen tawag ay kung saan? 1078 01:07:16,660 --> 01:07:18,860 Sa unang bahagi ng para sa loop. 1079 01:07:18,860 --> 01:07:21,830 Anumang saloobin sa kung bakit ako ginagawa ito? Oo. 1080 01:07:21,830 --> 01:07:24,560 [Mag-aaral] Kaya hindi mo tawagan ang function na bawat solong oras. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Kaya hindi namin tawagan ang function na bawat solong oras. Eksakto. 1082 01:07:26,440 --> 01:07:28,300 Manariwa sa diwa mula sa para sa loop na nila ang napaka-simpleng 1083 01:07:28,300 --> 01:07:31,770 sabay-sabay uri ng maunawaan na ito ay ang Pinasimulan, kundisyon, at ang pag-update. 1084 01:07:31,770 --> 01:07:34,750 Ang problema ay na ang kundisyon na ang mangyayari sa bawat pag-ulit ng loop. 1085 01:07:34,750 --> 01:07:40,010 At kaya sa halimbawang ito dito, kung ano ang masamang tungkol sa mga katotohanan na ito ang aking kondisyon? 1086 01:07:40,010 --> 01:07:41,830 [Mag-aaral] ka pagtawag strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] ka pagtawag strlen muli at muli at muli. 1088 01:07:44,340 --> 01:07:47,410 Ngunit sa sandaling nai-type ko sa David, ang haba ng string na 5, 1089 01:07:47,410 --> 01:07:49,650 at hindi ito upang baguhin sa bawat pag-ulit ng loop 1090 01:07:49,650 --> 01:07:51,670 dahil ang string na ang pa rin ang D-a-v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Kaya ito ay isang pahiwatig sa kung ano ang pagpunta sa maging isang ideya na nagiging mahalaga 1092 01:07:55,320 --> 01:08:00,410 na kilala bilang isang disenyo desisyon kung saan lamang huwag gumawa computer ng hindi kinakailangang trabaho. 1093 01:08:00,410 --> 01:08:03,920 >> Tulad ng sneak preview ng pset2, pset2 sa standard edition 1094 01:08:03,920 --> 01:08:07,030 pagpunta sa tutulan mong aktwal na ipatupad ng ilang bilang ng mga ciphers, 1095 01:08:07,030 --> 01:08:10,410 ilang bilang ng mga algorithm ng pag-encrypt, sa gayon maaari mong parehong i-encrypt 1096 01:08:10,410 --> 01:08:13,840 at i-decrypt lihim mensahe tulad ng isang Ralphie doon decoded. 1097 01:08:13,840 --> 01:08:16,810 Sa Hacker edisyon ng pset2, kami ay pagpunta sa pumunta ng kaunti karagdagang. 1098 01:08:16,810 --> 01:08:19,649 Kami ay pagpunta sa ipasa mo ang isang file mula sa isang aktwal na sistema ng computer na 1099 01:08:19,649 --> 01:08:23,479 na naglalaman ng isang buong grupo ng mga username at aktwal na naka-encrypt na password, 1100 01:08:23,479 --> 01:08:26,939 at ang hamon para sa edisyon ng Hacker na sa magpahaginit mga password 1101 01:08:26,939 --> 01:08:33,200 at malaman kung ano ang cryptography o kung ano ang lihim ay ginagamit upang aktwal na bumuo ng mga password. 1102 01:08:33,200 --> 01:08:36,109 At kami ay pagpunta sa gawin ito sa pamamagitan ng paggamit ng isang bagong tampok dito ng C 1103 01:08:36,109 --> 01:08:40,630 Bibigyan kita lamang ng isang demo ng kilala bilang command-line argumento. 1104 01:08:40,630 --> 01:08:44,229 Ito lumiliko out, ng ilan sa inyo ay maaaring makikita sa seksiyon o sa mga aklat-aralin, 1105 01:08:44,229 --> 01:08:48,260 pangunahing ay hindi palaging upang maging walang bisa sa panaklong. 1106 01:08:48,260 --> 01:08:52,430 Ito lumiliko out na ang pangunahing maaari ring nakasulat tulad nito, may dalawang argumento, 1107 01:08:52,430 --> 01:08:56,870 argc at argv, kung saan ang argc ay ang bilang ng mga salitang 1108 01:08:56,870 --> 01:09:00,020 na nag-type ka pagkatapos ng pangalan ng programa sa iyong command line 1109 01:09:00,020 --> 01:09:03,420 at argv ay ang aktwal na mga salita. 1110 01:09:03,420 --> 01:09:07,540 At ng mga square bracket doon iminumungkahi, ang argv ay tila isang array. 1111 01:09:07,540 --> 01:09:12,210 Ito ay pagpunta sa isang string pagkatapos ng isang string pagkatapos ng isang string sa memory. 1112 01:09:12,210 --> 01:09:16,010 >> Kaya kung ano ang kami ay pagpunta sa gawin na nagsisimula sa pset 2 ay isang bagay tulad nito. 1113 01:09:16,010 --> 01:09:21,350 Kung gumawa ako ng argv1, kung saan ay isang halimbawa magpapadala kami bumalik sa Monday, at patakbuhin ito, 1114 01:09:21,350 --> 01:09:23,370 mapapansin na ito ay hindi mukhang gawin pa. 1115 01:09:23,370 --> 01:09:25,490 Ito lamang mga Kopya sarili nitong pangalan. 1116 01:09:25,490 --> 01:09:31,479 Ngunit kung sabihin ko paalam klase, notice na ang programang ito ay tila iterates 1117 01:09:31,479 --> 01:09:35,479 sa bawat isa ng mga salita na na-type sa prompt. 1118 01:09:35,479 --> 01:09:41,630 At ang mga paraan sa pamamagitan ng kung saan kami ay makakuha ng access sa mga salita na ang gumagamit ay nai-type sa prompt 1119 01:09:41,630 --> 01:09:49,160 sa pamamagitan ng pagbabago ng pangunahing nagsisimula ito weekend mula int pangunahing (walang bisa) int pangunahing (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 at samakatuwid ay ipinanganak command-line na mga argumento. 1121 01:09:52,050 --> 01:09:57,100 At kapag kumuha ka ng talagang sopistikadong sa, magagawa mong upang sumulat ng mga programa na talagang trippy 1122 01:09:57,100 --> 01:09:59,610 tulad ng isang ito dito, na napupunta sa itaas at lampas 1123 01:09:59,610 --> 01:10:03,940 ilan ng ang pag-andar tapos kami na sa gayon ay malayo ngunit lahat ng medyo malakas na. 1124 01:10:03,940 --> 01:10:08,950 >> Kaya makikita iwanan namin ito na may ganitong sa screen, at kami ay nakikita mo sa Lunes. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]