1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> David J. MALAN: Ito ang CS50 at ito ay ang simula ng linggo sa apat. 3 00:00:14,050 --> 00:00:18,630 At, batang lalaki, ay Volkswagen in problema lahat dahil sa software. 4 00:00:18,630 --> 00:00:20,264 Ipaalam sa amin kumuha ng isang hitsura. 5 00:00:20,264 --> 00:00:20,930 [Playback ng video] 6 00:00:20,930 --> 00:00:25,560 -Cars, Ang smartest mga character sa Mabilis at galit na galit movies. 7 00:00:25,560 --> 00:00:29,100 Sa linggong ito German automaker Natagpuan Volkswagen mismo 8 00:00:29,100 --> 00:00:32,490 sa gitna ng isang iskandalo ng potensyal na kriminal na sukat. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Ay pagkakabit para sa mga bilyun-bilyong sa mga multa, posibleng kasong kriminal 10 00:00:36,060 --> 00:00:38,560 para sa mga executive nito, pati na Humihingi ng paumanhin ang kumpanya 11 00:00:38,560 --> 00:00:41,840 para sa rigging 11 milyong mga sasakyan sa tulungan itong matalo pagsusuri emissions. 12 00:00:41,840 --> 00:00:44,950 >> -Certain Diesel modelo ay dinisenyo na may sopistikadong software 13 00:00:44,950 --> 00:00:48,440 na sa paggamit ng impormasyon kabilang ang mga posisyon ng mga pangunahin at sasakyan 14 00:00:48,440 --> 00:00:51,870 bilis upang matukoy ang mga kotse ay sumasailalim sa emissions testing. 15 00:00:51,870 --> 00:00:55,650 Sa ilalim ng na kalagayan, ang mga engine ay magbabawas toxic emissions. 16 00:00:55,650 --> 00:00:59,070 Ngunit ang kotse ay lutong sa bypass na kapag ito ay hinihimok. 17 00:00:59,070 --> 00:01:03,320 Emisyon nadagdagan 10 hanggang 40 beses sa itaas tanggap na mga antas EPA. 18 00:01:03,320 --> 00:01:04,280 >> [END playback] 19 00:01:04,280 --> 00:01:05,220 >> David J. MALAN: Kaya sabihin tingnan ang mga ito 20 00:01:05,220 --> 00:01:07,250 at makita kung paano mismo ito maaaring ipatupad 21 00:01:07,250 --> 00:01:09,680 at kung paano maaaring makaapekto ito kaya maraming mga kotse na tulad nito. 22 00:01:09,680 --> 00:01:12,840 Kaya sa aking kamay dito ay ang mga press release na inisyu ng EPA-- 23 00:01:12,840 --> 00:01:14,620 Environmental Protection Agency na 24 00:01:14,620 --> 00:01:18,032 ay ang US regulatory agency na humahawak sa kapaligiran alalahanin, 25 00:01:18,032 --> 00:01:19,740 at pagkatapos ay ang aktwal na legal na notice na 26 00:01:19,740 --> 00:01:22,420 ipadala sa Volkswagen lamang ng ilang mga araw ang nakalipas. 27 00:01:22,420 --> 00:01:26,530 >> Kaya nagsusulat ang EPA, at nagbubunyag ngayon publiko, isang sopistikadong software 28 00:01:26,530 --> 00:01:29,390 algorithm sa mga tiyak Nakikilala Volkswagen sasakyan 29 00:01:29,390 --> 00:01:32,630 kapag ang sasakyan ay sumasailalim opisyal emissions testing 30 00:01:32,630 --> 00:01:36,505 at nagiging full emissions kumokontrol sa lamang sa panahon ng pagsubok. 31 00:01:36,505 --> 00:01:38,380 Ang pagiging epektibo ng mga sasakyan polusyon 32 00:01:38,380 --> 00:01:43,260 control emissions aparato ay lubos na nabawasan sa panahon ng lahat normal driving 33 00:01:43,260 --> 00:01:44,320 sitwasyon. 34 00:01:44,320 --> 00:01:48,190 Ang mga resulta sa mga kotse na matugunan ang mga pamantayan sa laboratoryo o testing 35 00:01:48,190 --> 00:01:52,790 station, ngunit sa panahon ng normal na operasyon naglalabas ng nitrogen oxides-- o NOx-- 36 00:01:52,790 --> 00:01:54,950 at hanggang sa 40 beses ang standard. 37 00:01:54,950 --> 00:01:58,220 Ang software na ginawa ng Volkswagen ay isang aparato quote magpanipi, pagkatalo, 38 00:01:58,220 --> 00:02:00,650 gaya ng nilinaw ng Clean Air Act sa US. 39 00:02:00,650 --> 00:02:03,410 >> Pumunta sila sa pagsasabi na EPA at iba pang ahensiya 40 00:02:03,410 --> 00:02:07,020 walang takip ang aparato pagkatalo software pagkatapos ng independiyenteng pagsusuri 41 00:02:07,020 --> 00:02:09,660 ng mga mananaliksik sa West Virginia University. 42 00:02:09,660 --> 00:02:14,160 NOx polusyon-aambag sa nitrogen dioxide, antas ng lupa ozone, 43 00:02:14,160 --> 00:02:15,700 at pinong particulate matter. 44 00:02:15,700 --> 00:02:18,090 Exposure sa mga pollutants ay nakaugnay 45 00:02:18,090 --> 00:02:20,870 sa isang malawak na hanay ng mga malubhang epekto sa kalusugan, 46 00:02:20,870 --> 00:02:23,637 kabilang ang nadagdagan hika pag-atake at iba pang respiratory 47 00:02:23,637 --> 00:02:26,470 sakit na maaaring maging malubha sapat upang magpadala ng mga tao sa ospital. 48 00:02:26,470 --> 00:02:28,660 Exposure sa ozone at particulate bagay ay mayroon ding 49 00:02:28,660 --> 00:02:31,960 ay nauugnay sa napaaga kamatayan dahil sa respiratory kaugnay 50 00:02:31,960 --> 00:02:35,690 o cardiovascular kaugnay na mga epekto. 51 00:02:35,690 --> 00:02:38,940 Mga bata, mga matatanda, mga taong may preexisting sakit sa paghinga 52 00:02:38,940 --> 00:02:42,840 ay partikular na nasa panganib para sa epekto sa kalusugan ng mga pollutants. 53 00:02:42,840 --> 00:02:45,056 >> Magkasiya ay upang sabihin, ito ay lubos na seryoso. 54 00:02:45,056 --> 00:02:46,930 At pumunta sa upang basahin ipaalam lamang ng isa pang excerpt 55 00:02:46,930 --> 00:02:49,370 at pagkatapos ay gagamitin namin ang isang tumingin sa ang pinagbabatayan implikasyon 56 00:02:49,370 --> 00:02:50,920 ng mga ito sa konteksto ng isang kotse. 57 00:02:50,920 --> 00:02:53,730 Partikular, Volkswagen panindang at naka-install 58 00:02:53,730 --> 00:02:56,210 software sa ang tinatawag na electronic control 59 00:02:56,210 --> 00:02:59,320 module-- o ECM-- ng ang mga sasakyan na naramdaman 60 00:02:59,320 --> 00:03:03,580 kapag ang sasakyan ay sinusuri para sa pagsunod sa mga pamantayan ng EPA paglabas. 61 00:03:03,580 --> 00:03:07,510 Batay sa iba't-ibang mga input kabilang ang posisyon ng manibela, sasakyan 62 00:03:07,510 --> 00:03:11,280 bilis, ang tagal ng engine operasyon, at barometric presyon, 63 00:03:11,280 --> 00:03:13,720 mga input tiyak sinusubaybayan ang mga parameter 64 00:03:13,720 --> 00:03:17,600 ng pederal na pamamaraan ng pagsubok na ginagamit para sa paglabas pagsubok para sa EPA certification 65 00:03:17,600 --> 00:03:18,400 mga layunin. 66 00:03:18,400 --> 00:03:21,850 >> Sa panahon ng paglabas testing EPA, ang mga sasakyan ECM software 67 00:03:21,850 --> 00:03:25,060 bumangga software na ginawa sang emissions resulta. 68 00:03:25,060 --> 00:03:28,340 Sa lahat ng iba pang mga beses, na ang sasakyan ECM software 69 00:03:28,340 --> 00:03:31,090 bumangga sa isang hiwalay na kalsada calibrate na nabawasan 70 00:03:31,090 --> 00:03:34,360 ang pagiging epektibo ng kabuuang sistema emission control, 71 00:03:34,360 --> 00:03:37,864 partikular na ang pumipili catalytic pagbabawas ng Lean NOx trap-- 72 00:03:37,864 --> 00:03:39,280 na kung saan kami ay makita ang tungkol sa ilang sandali. 73 00:03:39,280 --> 00:03:43,040 Bilang isang resulta, emissions ng Nox nadagdagan ng isang factor ng 10 hanggang 40 oras 74 00:03:43,040 --> 00:03:47,450 sa itaas ng EPA sang antas depende sa uri ng mga drive cycle. 75 00:03:47,450 --> 00:03:50,800 >> Kaya kung ano talaga ang ibig sabihin nito, at ang source code sa ang software na tumatakbo 76 00:03:50,800 --> 00:03:53,190 sa Volkswagen ay may hindi pa isiwalat sa publiko, 77 00:03:53,190 --> 00:03:56,460 ay na, mabisa, ito katumbas ay isang lugar doon sa loob 78 00:03:56,460 --> 00:03:57,830 ng code Volkswagen ni. 79 00:03:57,830 --> 00:04:02,200 Kung ikaw ay sinusuri, at kung ang kotse Nakikilala ang ilang mga bagay sa kapaligiran 80 00:04:02,200 --> 00:04:04,330 tulad ng manibela posisyon o sa paggalaw 81 00:04:04,330 --> 00:04:06,710 o kakulangan nito ng mga sasakyan o anumang bilang ng mga iba pang mga kadahilanan 82 00:04:06,710 --> 00:04:09,940 na kasalukuyang hypothesized upang maging bahagi ng formula na ito, 83 00:04:09,940 --> 00:04:12,370 i lamang sila sa kontrolin full emissions. 84 00:04:12,370 --> 00:04:15,670 Sa ibang salita, simulan nila na nagpapalabas ng mas mababa ng mga pollutants. 85 00:04:15,670 --> 00:04:18,769 >> Iba Pa, sa bawat iba pang mga sitwasyon kapag hindi ito ay napansin na rin ang pagiging 86 00:04:18,769 --> 00:04:20,790 sa laboratoryo, ang mga ito lamang ay hindi. 87 00:04:20,790 --> 00:04:24,320 At kaya maaari mong gawing simple ito sa mas kongkreto pseudocode sa isang bagay 88 00:04:24,320 --> 00:04:24,820 ganito. 89 00:04:24,820 --> 00:04:27,810 Kung ang mga gulong ay magkakaroon ngunit ang manibela ay hindi, ipinahihiwatig 90 00:04:27,810 --> 00:04:30,060 na ang sasakyan ay sa ilang mga uri ng umiikot silindro 91 00:04:30,060 --> 00:04:32,550 ngunit sa ilang mga uri ng warehouse sinusuri, 92 00:04:32,550 --> 00:04:36,070 pagkatapos ay kumilos bilang ang EPA ang nais mong. 93 00:04:36,070 --> 00:04:37,960 Kung hindi man ay hindi. 94 00:04:37,960 --> 00:04:40,420 Kaya sabihin tumagal ng isang pagtingin sa isang maikling video na 95 00:04:40,420 --> 00:04:45,391 tumatagal ng isang pagtingin sa kung ano ang mga implikasyon Isasama ng mga ito ang tunay na wala sa loob. 96 00:04:45,391 --> 00:04:48,620 >> [Playback ng video] 97 00:04:48,620 --> 00:04:52,800 >> -Last Biyernes ang EPA inihayag na ang ilang mga Volkswagen Audi kotse na ginawa sa pagitan ng 2009 98 00:04:52,800 --> 00:04:55,840 at sa taong ito ay gumagamit ng isang tinatawag device pagkatalo 99 00:04:55,840 --> 00:04:59,060 upang makakuha ng paligid emissions batas dinisenyo upang panatilihing malinis ang hangin. 100 00:04:59,060 --> 00:05:01,700 Ngunit ano ang ibig sabihin na eksakto? 101 00:05:01,700 --> 00:05:04,666 >> Well, modernong sasakyan ay may dose-dosenang ng mga computer sa loob ng mga ito. 102 00:05:04,666 --> 00:05:07,040 At ang ilan sa mga computer makatulong sa coordinate ng mga function 103 00:05:07,040 --> 00:05:09,590 ng engine para sa pinakamainam na pagganap habang tinitiyak 104 00:05:09,590 --> 00:05:12,340 na hindi masyadong maraming basura galing ng tambutso. 105 00:05:12,340 --> 00:05:15,170 Sila na talagang na-nagtatrabaho sa ganitong paraan para sa ilang mga dekada ngayon. 106 00:05:15,170 --> 00:05:17,380 Karaniwang, ang bawat bahagi ng engine ng isang modernong kotse ni 107 00:05:17,380 --> 00:05:20,080 may isang sensor o controller sa mga ito, at ang mga computer 108 00:05:20,080 --> 00:05:23,460 Nagbabasa sa data libu-libong mga beses bawat segundo adjustments making 109 00:05:23,460 --> 00:05:26,220 tulad ng ratio ng gasolina sa air na ang pagpunta sa cylinders. 110 00:05:26,220 --> 00:05:28,730 >> Ang mga pandaraya Volkswagen at Audi modelo ay diesels, 111 00:05:28,730 --> 00:05:30,890 at diesels magkaroon ng isa pa talagang mahalaga na computer 112 00:05:30,890 --> 00:05:34,030 kinokontrol ng mga parameter, na kung saan ay ang halaga ng mga unburned fuel pagpunta 113 00:05:34,030 --> 00:05:35,200 sa maubos. 114 00:05:35,200 --> 00:05:36,310 Ngayon na ang tunog masama. 115 00:05:36,310 --> 00:05:39,642 Hindi tunog tulad ng gusto mo unburned fuel pagpunta sa maubos. 116 00:05:39,642 --> 00:05:41,600 Ngunit sa kaso ng isang diesel, mayroon kang isang bagay 117 00:05:41,600 --> 00:05:46,110 tinatawag na isang NOx bitag na kung saan ay isang aparato na sumisipsip at lalang sa nitrogen oxides 118 00:05:46,110 --> 00:05:48,880 na pollutants na gagawin kung hindi man pumunta sa kapaligiran. 119 00:05:48,880 --> 00:05:53,040 At ang epekto ng na NOx bitag ay pinahusay na may unburned fuel. 120 00:05:53,040 --> 00:05:56,650 Kaya isang aparato pagkatalo ay isang espesyal na programa sa loob ng mga computer na ito ay maaaring gumawa ng 121 00:05:56,650 --> 00:05:59,527 hitsura ng kotse ay nakakatugon sa paglabas pamantayan kahit na kapag ito ay hindi. 122 00:05:59,527 --> 00:06:01,110 Volkswagen nagkaroon ng problema sa kanyang mga kamay. 123 00:06:01,110 --> 00:06:04,050 Diesel engine nito ay kilala para sa pagkuha ng mahusay na gasolina ekonomiya, 124 00:06:04,050 --> 00:06:07,510 ngunit gumagana lamang ang Nox bitag mabuti kapag mas maraming gasolina ay ginagamit. 125 00:06:07,510 --> 00:06:10,460 Kaya ang sasakyan ay matagpuan, gamit na ito pagkatalo device, 126 00:06:10,460 --> 00:06:13,870 kapag ito ay nakakakuha ng isang emissions test, magiging gumamit ng higit gasolina, 127 00:06:13,870 --> 00:06:16,830 gumawa ng mabuti ang Nox bitag trabaho, emissions ay magiging masarap. 128 00:06:16,830 --> 00:06:21,130 Ngunit pagkatapos mong makakuha ng sa daan, ang aparato Ino-off, ikaw ay nasusunog mas mababa gasolina 129 00:06:21,130 --> 00:06:24,256 ngunit ikaw ay paglagay ng mas maraming bilang 40 beses higit pollutants sa kapaligiran. 130 00:06:24,256 --> 00:06:26,130 Ngunit kung paano ginawa ang ano Alam ang kotse na ito ay 131 00:06:26,130 --> 00:06:27,720 sinusuri para sa pagsunod emissions? 132 00:06:27,720 --> 00:06:30,590 Sinasabi ng EPA ito ay isang sopistikadong sistema na naka-check bagay 133 00:06:30,590 --> 00:06:34,090 tulad ng posisyon ng manibela, bilis, kung gaano katagal ang engine ay noong, 134 00:06:34,090 --> 00:06:35,507 at kahit na ang atmospheric presyon. 135 00:06:35,507 --> 00:06:37,673 Sa ibang salita, nagkaroon walang paraan na ito ay aksidenteng 136 00:06:37,673 --> 00:06:40,260 dahil ang software ay dinisenyo tunay mabuti upang makita ang 137 00:06:40,260 --> 00:06:41,630 isang opisyal na test emissions. 138 00:06:41,630 --> 00:06:43,588 Iyon ang ilang mga medyo seryosong panlilinlang at iyon ang 139 00:06:43,588 --> 00:06:45,420 bakit Volkswagen ay sa tulad ng malubhang problema. 140 00:06:45,420 --> 00:06:48,600 Sa katunayan, ang kanilang mga CEO, Martin Winterkorn, lamang stepped down. 141 00:06:48,600 --> 00:06:49,820 >> Kaya kung ano ang susunod na mangyayari? 142 00:06:49,820 --> 00:06:53,900 Well, kung ikaw ay isa sa mga kalahating milyong diesel Jettas, Beatles, Golfs, Passats, 143 00:06:53,900 --> 00:06:56,220 o Audi A3s maapektuhan sa, ang mabuting balita ay ay 144 00:06:56,220 --> 00:06:57,886 na ang iyong sasakyan ay ligtas upang humimok pa rin. 145 00:06:57,886 --> 00:07:00,510 Hindi mo na kailangang ilagay ito sa malayo hanggang ibibgay Volkswagen isang pagpapabalik. 146 00:07:00,510 --> 00:07:02,509 Ngunit sa ilang mga punto na ang mga ito marahil pagpunta sa may 147 00:07:02,509 --> 00:07:04,230 i-update ang software sa loob ng iyong kotse. 148 00:07:04,230 --> 00:07:06,927 Kapag nangyari iyon maaari ka makakuha ng mas kaunting mga milya bawat tangke. 149 00:07:06,927 --> 00:07:09,260 Lawyers ay giring up para sa mga class action na kaso 150 00:07:09,260 --> 00:07:12,500 kaya may-ari ay maaaring makakuha ng bayad sa ilang mga punto sa hinaharap. 151 00:07:12,500 --> 00:07:15,832 Ngunit iyon ay hindi pagpunta sa mangyari sa anumang oras sa lalong madaling panahon. 152 00:07:15,832 --> 00:07:16,711 >> [END playback] 153 00:07:16,711 --> 00:07:19,960 David J. MALAN: Kaya ito ang tunay na iaangat isang nakawiwiling mas malaking tanong na larawan 154 00:07:19,960 --> 00:07:20,660 pati na ang tiwala. 155 00:07:20,660 --> 00:07:21,160 Right? 156 00:07:21,160 --> 00:07:24,300 Lahat tayo ay may mga iPhone o Androids o isang bagay sa aming mga bulsa malamang 157 00:07:24,300 --> 00:07:26,500 mga araw na ito, o laptop sa aming mga lap na 158 00:07:26,500 --> 00:07:28,510 software na tumatakbo ginawa sa pamamagitan ng Apple at Microsoft 159 00:07:28,510 --> 00:07:30,710 at mga kumpol ng ibang mga kumpanya. 160 00:07:30,710 --> 00:07:34,240 Ngunit paano ko malalaman namin na kung ano ang mga produktong software ginagawa 161 00:07:34,240 --> 00:07:37,680 ay talagang kung ano ang mga ito sabihin companies na kanilang ginagawa? 162 00:07:37,680 --> 00:07:39,610 >> Halimbawa, kung sino ang sa sabihin na ang bawat panahon na kayo 163 00:07:39,610 --> 00:07:42,200 gumawa ng tawag sa telepono sa iyong iPhone o Android phone o mga katulad, 164 00:07:42,200 --> 00:07:45,650 na na numero ng telepono ay hindi rin na-upload sa server ng ilang kumpanya 165 00:07:45,650 --> 00:07:48,399 dahil sa ilang mga program na sa iyo nakasulat, maging ito man ay ang operating 166 00:07:48,399 --> 00:07:51,070 sistema mismo tulad ng iOS o Android, o dahil na-download mo 167 00:07:51,070 --> 00:07:53,880 ang ilang mga third party na app na kahit papaano ay nakikinig 168 00:07:53,880 --> 00:07:57,120 sa lahat ng bagay ka nagta-type o lahat ng bagay ikaw ay tunay na sinasabi. 169 00:07:57,120 --> 00:07:59,500 Paano mo malalaman na, kapag ka guys ay tumatakbo Clang 170 00:07:59,500 --> 00:08:02,590 o Gumawa upang itala ang iyong sariling software sa CS50, kung paano 171 00:08:02,590 --> 00:08:06,080 gawin mo sariling mga kawani na CS50, sa pamamagitan ng paraan ng CS50 library, 172 00:08:06,080 --> 00:08:08,690 ay hindi pa pag-log sa bawat string na iyong na-tapat na paraan 173 00:08:08,690 --> 00:08:10,276 o bawat pulgada kailanman na iyong nakuha? 174 00:08:10,276 --> 00:08:12,900 Well, maaari mong tiyak tumingin sa source code para sa isang bagay 175 00:08:12,900 --> 00:08:15,233 tulad ng CS50 library, ikaw maaaring tingnan ang source code 176 00:08:15,233 --> 00:08:18,170 para sa Linux operating system tumatakbo sa CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Ngunit isang kamangha-manghang pagtatanghal ay ibinigay pabalik sa 1984 178 00:08:23,090 --> 00:08:26,730 sa pagtanggap ng Turing Award sa pamamagitan ng isang napaka sikat na computer scientist na kilala 179 00:08:26,730 --> 00:08:29,750 as-- nagngangalang Ken Thompson na natanggap ang Turing Award na 180 00:08:29,750 --> 00:08:33,500 ay isang uri ng computer science ni Nobel Prize, kung ikaw ay, 181 00:08:33,500 --> 00:08:35,309 para sa kanyang trabaho sa isang tinatawag na operating system 182 00:08:35,309 --> 00:08:39,039 Unix, na kung saan ay lubos na katulad sa espiritu sa kung ano ang ginagamit namin na kung saan ay Linux. 183 00:08:39,039 --> 00:08:41,960 At ang tanong ay tinanong niya sa kanyang pagtanggap pagsasalita, mahalagang 184 00:08:41,960 --> 00:08:44,910 aalay ng framework para sa taon at taon ng talakayan 185 00:08:44,910 --> 00:08:46,970 tungkol sa tiwala at seguridad, ay ito. 186 00:08:46,970 --> 00:08:50,410 Hanggang saan dapat isa tiwala ng isang pahayag na ang isang program-- isang piraso 187 00:08:50,410 --> 00:08:53,010 ng software-- ay libre ng mga Trojan horse? 188 00:08:53,010 --> 00:08:56,500 Marahil ito ay mas mahalaga na ang tiwala ang mga tao na sinulat ni ang software. 189 00:08:56,500 --> 00:08:58,650 >> At sa katunayan, na-link namin sa talk na siya 190 00:08:58,650 --> 00:09:02,400 Ibinigay kapag tumatanggap ng award na ito sa '80s sa website CS50 191 00:09:02,400 --> 00:09:04,030 sa ilalim ng pahina ng Mga aralin para sa araw na ito. 192 00:09:04,030 --> 00:09:06,071 Dahil kung ano ang makikita mo ay na siya ang tunay na nagbibigay 193 00:09:06,071 --> 00:09:09,430 isang pantay simpleng halimbawa ng kung paano kahit isang tagatala tulad Clang o ano man 194 00:09:09,430 --> 00:09:13,950 compiler ang iba ay may ginagamit sa nakalipas, paano kung naka-embed sa compiler namin 195 00:09:13,950 --> 00:09:18,190 ang ating mga sarili ay gumagamit ay isang maliit na kung condition na mahalagang sabi, 196 00:09:18,190 --> 00:09:22,360 kung napansin mo na ang code na ito ay gumagamit ng ang GetString function o ang GetInt 197 00:09:22,360 --> 00:09:26,600 function, sige at ipasok isang pinto sa likod o isang Trojan horse 198 00:09:26,600 --> 00:09:29,340 tulad na programa na na ngayon ay may ilang mga zero 199 00:09:29,340 --> 00:09:30,930 at mga na gawin ang isang bagay masamang hangarin. 200 00:09:30,930 --> 00:09:33,080 Pag-log ng lahat ng iyong keystroke, pag-upload ng data na iyon 201 00:09:33,080 --> 00:09:35,100 sa ilang mga server, o talagang kahit ano. 202 00:09:35,100 --> 00:09:37,290 >> At kung ano Ken Thompson napupunta sa upang gawin sa kanyang talk 203 00:09:37,290 --> 00:09:40,580 ay upang ipakita na kahit na mayroon kang access sa source 204 00:09:40,580 --> 00:09:43,794 code ng isang tagatala na malisyoso maaaring paggawa nito, 205 00:09:43,794 --> 00:09:46,210 hindi mahalaga dahil mayroong ito manok at ang itlog 206 00:09:46,210 --> 00:09:49,500 katotohanan ng nakalipas na maraming taon kung saan ang mga compiler 207 00:09:49,500 --> 00:09:51,960 ay ginagamit upang ipunin ang kanilang mga sarili. 208 00:09:51,960 --> 00:09:55,440 Sa ibang salita, paraan pabalik kapag ang isang tao ay na may nakasulat na ang unang compiler. 209 00:09:55,440 --> 00:09:59,060 At pagkatapos nito, anumang oras na na-update ang mga ito isang tagatala pamamagitan ng pagbabago ng source code nito, 210 00:09:59,060 --> 00:10:02,020 pagdagdag ng mga tampok at recompiling ito para sa mga taong katulad sa amin upang gamitin, well, 211 00:10:02,020 --> 00:10:04,270 sila ay gumagamit ng lumang bersyon ng tagatala 212 00:10:04,270 --> 00:10:06,370 upang ipunin ang mga bagong bersyon ng tagatala. 213 00:10:06,370 --> 00:10:08,370 At kung ikaw ay kumuha ng isang pagtingin sa talk na ibinigay niya, 214 00:10:08,370 --> 00:10:10,970 makikita mo na dahil ng na circularity, 215 00:10:10,970 --> 00:10:14,330 Maaari mong aktwal na magkaroon ng mga bug o Trojan horse-embed sa software 216 00:10:14,330 --> 00:10:14,990 aming ginagamit. 217 00:10:14,990 --> 00:10:18,010 At kahit na tumingin ka sa mga source code para sa mga programa, 218 00:10:18,010 --> 00:10:21,550 hindi ito maaaring maging kahit na maliwanag dahil ang panlilinlang ay talagang 219 00:10:21,550 --> 00:10:24,710 sa ilang mga mas lumang bersyon ng isang tagatala na mula pa ay 220 00:10:24,710 --> 00:10:27,340 injecting ang banta sa aming software. 221 00:10:27,340 --> 00:10:29,740 >> Alin lamang sabihin, kami talagang hindi maaari at hindi dapat 222 00:10:29,740 --> 00:10:32,939 tiwala software na tumatakbo sa aming mga laptop o phone o anumang bilang ng mga lugar. 223 00:10:32,939 --> 00:10:36,230 At sa katunayan, sa bandang huli ng semester kapag namin simulan ang pakikipag-usap tungkol sa mga web programming 224 00:10:36,230 --> 00:10:38,521 at talagang simulan ang paggawa web mga aplikasyon sa ating sarili, 225 00:10:38,521 --> 00:10:40,285 kami makipag-usap tungkol sa mga pagbabanta at iba pa. 226 00:10:40,285 --> 00:10:43,410 Ngayon, maaari ka na ba at napansin na nagkaroon ng isang maliit na maliit maliit Darth 227 00:10:43,410 --> 00:10:45,842 Vader sa clip na Ang labi ay nagpapakita ng may 228 00:10:45,842 --> 00:10:47,550 tungkol sa Volkswagen. Kapag hindi mo na makikita, ako 229 00:10:47,550 --> 00:10:49,190 naisip dapat naming pagaanin mood dahil ito ay ang lahat ng 230 00:10:49,190 --> 00:10:50,780 tunay mapagpahirap at nakakatakot. 231 00:10:50,780 --> 00:10:52,910 Pupunta ako upang tumingin sa likod sa Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 kapag ang isang commercial sa pamamagitan ng Volkswagen-- at ito 233 00:10:55,300 --> 00:10:59,620 halos gumagawa ng mga ito kaibig-ibig again-- naisahimpapawid para sa unang pagkakataon sa TV. 234 00:10:59,620 --> 00:11:04,039 Ito ay ang 60 segundong clip na sa tingin ko na magugustuhan ninyo. 235 00:11:04,039 --> 00:11:04,705 [Playback ng video] 236 00:11:04,705 --> 00:11:08,198 [MUSIC - TEMA MULA SA "Star Wars"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [Aso barks] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [CAR Pagsisimula] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [END playback] 243 00:12:05,955 --> 00:12:06,830 David J. MALAN: Oo. 244 00:12:06,830 --> 00:12:07,663 Lamang ako ay suri. 245 00:12:07,663 --> 00:12:11,360 Car Iyon ay nasa listahan ng mga paglabag. 246 00:12:11,360 --> 00:12:12,000 Lahat tama. 247 00:12:12,000 --> 00:12:14,040 Kaya tayo ay tumingin sa ilang mga Pseudocode ilang sandali ang nakalipas. 248 00:12:14,040 --> 00:12:15,380 At narito ang isang mas malaking snippet ng pseudocode code 249 00:12:15,380 --> 00:12:16,921 na nakakita kami ng ilang beses kaya sa ngayon. 250 00:12:16,921 --> 00:12:19,970 At ni gamitin ito ay isang pagkakataon hayaan ngayon upang maipakilala ang isang bagong programming 251 00:12:19,970 --> 00:12:23,776 pamamaraan na aming ginawa makita algorithmically 252 00:12:23,776 --> 00:12:25,400 huling linggo kapag kami ay tumingin sa pagsasama-uuri. 253 00:12:25,400 --> 00:12:28,270 Ngunit gawing pormal ni ito at makita kung paano ipaalam maaari naming gamitin ang mga ito sa aktwal na code, 254 00:12:28,270 --> 00:12:30,350 at pagkatapos kami ay pagpunta sa paggamit na ito pamamaraan pababa ng kalsada pinaka 255 00:12:30,350 --> 00:12:32,000 malamang na malutas ang ilang iba pang mga problema. 256 00:12:32,000 --> 00:12:35,790 >> Kaya ito ay isa sa mga unang programa namin kailanman nagsulat, kahit na sa pseudocode code. 257 00:12:35,790 --> 00:12:37,790 At kung ano ang program na ito pinapayagan sa amin upang gawin course 258 00:12:37,790 --> 00:12:41,510 ay upang mahanap ang Mike Smith sa isang libro ng telepono. 259 00:12:41,510 --> 00:12:46,216 At mapansin sa partikular na linya walong at 11 na kung saan ay nagkaroon na ito Pumunta Upang statement. 260 00:12:46,216 --> 00:12:48,090 At sa katunayan, ang ilang mga wika, C kasama ng mga ito, 261 00:12:48,090 --> 00:12:50,006 talagang gawin ay may isang pahayag na ito ay literal 262 00:12:50,006 --> 00:12:52,710 pumunta sa na nagbibigay-daan sa iyo upang lumipat sa isang tiyak na linya. 263 00:12:52,710 --> 00:12:55,470 Sa pangkalahatan Ito ay sinasang-ayunan dahil maaaring ito ay tunay madali inabuso 264 00:12:55,470 --> 00:12:58,490 at maaari mong simulan ang paglukso iyong program sa buong lugar bilang laban 265 00:12:58,490 --> 00:13:00,690 sa paggamit ng mga uri ng lohika at ang kontrol ng daloy 266 00:13:00,690 --> 00:13:04,000 na kami ay ginagamit sa gayon ay malayo sa pamamagitan lamang loops at kundisyon at mga katulad nito. 267 00:13:04,000 --> 00:13:08,660 >> Ngunit maaari naming gawing simple ang algorithm na ito sa pseudocode code bilang mga sumusunod. 268 00:13:08,660 --> 00:13:11,250 Sa halip na ito umuulit o looping diskarte 269 00:13:11,250 --> 00:13:14,160 kung saan panatilihin namin ang pagpunta sa likod at pabalik-balik sa line tatlo, 270 00:13:14,160 --> 00:13:18,300 bakit hindi namin lamang uri ng tumikin at higit pa karaniwang sabihin sa linya ng pitong at 10, 271 00:13:18,300 --> 00:13:20,570 palitan ang mga lamang ng dalawang pares ng mga linya sa, 272 00:13:20,570 --> 00:13:22,810 iba kung Smith ay mas maaga sa aklat bibigyan namin ng 273 00:13:22,810 --> 00:13:25,110 maghanap para sa Mike sa kaliwang kalahati ng libro. 274 00:13:25,110 --> 00:13:28,560 Iba Pa kung Smith ay mamaya sa book, maghanap para sa Mike sa tamang 275 00:13:28,560 --> 00:13:29,540 kalahati ng libro. 276 00:13:29,540 --> 00:13:31,180 At mapansin na ang circularity. 277 00:13:31,180 --> 00:13:31,680 Right? 278 00:13:31,680 --> 00:13:34,250 Ako ay naghahanap ng Mike sa ang telepono ng libro at pagkatapos ay 279 00:13:34,250 --> 00:13:37,090 Ako sa wakas hit siguro pitong linya o marahil line 10 280 00:13:37,090 --> 00:13:41,089 at ang aking pagtuturo sa aking sarili ay ang paghahanap para sa Mike sa kalahati ng mga libro ng telepono. 281 00:13:41,089 --> 00:13:42,380 Well, paano ako maghahanap ng Mike? 282 00:13:42,380 --> 00:13:44,213 Ako ay nasa gitna ng naghahanap para sa Mike, bakit 283 00:13:44,213 --> 00:13:45,860 ikaw ay ang uri ng pagpapadala sa akin sa isang lupon? 284 00:13:45,860 --> 00:13:49,590 Ngunit iyon lamang ang OK dahil kung ano ang nangyayari sa laki ng problema, 285 00:13:49,590 --> 00:13:52,630 tulad ng nakasulat sa linya 7 at 10? 286 00:13:52,630 --> 00:13:54,989 Na hindi lamang sinasabi namin ang paghahanap para sa Mike, maghanap para sa Mike. 287 00:13:54,989 --> 00:13:56,280 Kami mismo ay sinasabi kung ano? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Maghanap para sa kanya sa kaliwang kalahati ng ang kanang kalahati kung saan ay epektibo 290 00:14:01,610 --> 00:14:03,440 kalahati ang laki ng problema. 291 00:14:03,440 --> 00:14:07,170 Kaya ito ay OK na kami ng uri ng makatawag pansin sa ganitong circularity, 292 00:14:07,170 --> 00:14:09,180 ito pabilog argument, dahil hindi bababa sa hindi namin 293 00:14:09,180 --> 00:14:11,090 paggawa ng mas maliit at mas maliit ang problema. 294 00:14:11,090 --> 00:14:14,220 At sa huli kami ay pagpunta upang maabot na tinatawag na base kaso kung saan 295 00:14:14,220 --> 00:14:16,780 kami ay may lamang ng isang pahina left-- bilang aming volunteer noong nakaraang linggo 296 00:14:16,780 --> 00:14:18,684 did-- nagkaroon kami ng isang pahina pakaliwa at pagkatapos ay hindi namin 297 00:14:18,684 --> 00:14:21,600 kung patuloy na maghanap para sa Mike Smith dahil siya ang alinman sa pahinang iyon 298 00:14:21,600 --> 00:14:23,080 o siya ay hindi. 299 00:14:23,080 --> 00:14:27,480 >> Kaya kung paano namin ipatupad ang mga ideya na ito, ito uri ng circularity sa aktwal na code? 300 00:14:27,480 --> 00:14:31,030 Well, maaari naming pagkilos ng isang pamamaraan na karaniwang kilala bilang recursion. 301 00:14:31,030 --> 00:14:33,960 At nakakita kami ng ito sa pseudocode para sa pagsasama-uuri noong nakaraang linggo. 302 00:14:33,960 --> 00:14:37,190 Alalahanin na ito ay ang pseudocode para sa pagsasama-uuri. 303 00:14:37,190 --> 00:14:40,560 Ito ay arguably mas simple kaysa bubble o pagpili o insertion sort 304 00:14:40,560 --> 00:14:43,310 lamang sa mga tuntunin ng pagiging simple na kung saan maaari mong ipahayag ang mga ito. 305 00:14:43,310 --> 00:14:46,750 >> Ngunit iyon ay dahil sa hindi namin uri ng circularly 306 00:14:46,750 --> 00:14:51,350 na nagsasabi, maghanap para sa isang bagay sa pamamagitan ng paghahanap para sa itong muli. 307 00:14:51,350 --> 00:14:53,960 Ngunit kami ay naghahanap sa alinman sa kaliwang kalahati o ang karapatan sa kalahati 308 00:14:53,960 --> 00:14:56,070 at pagkatapos ay sa huli hindi namin pinagsasama sa kasong ito. 309 00:14:56,070 --> 00:14:58,520 Ngunit dito, masyadong, na may mga dalawang linya uri, 310 00:14:58,520 --> 00:15:01,320 ay muli na namin ito ideya ng recursion. 311 00:15:01,320 --> 00:15:05,350 At concretely ano ang ibig sabihin nito, sa konteksto ng isang algorithm, 312 00:15:05,350 --> 00:15:10,880 ay na ang isang algorithm ay recursive kung ito ay gumagamit o tawag sa sarili. 313 00:15:10,880 --> 00:15:14,330 >> O sa mga tuntunin ng C, ang isang function ay recursive-- isang function na tinatawag 314 00:15:14,330 --> 00:15:18,510 foo ay recursive kung foo, saanman sa source code nito, 315 00:15:18,510 --> 00:15:21,250 tawag mismo ang function foo. 316 00:15:21,250 --> 00:15:25,790 At iyon ang masama kung kahit minsan ay ang lahat ng foo ay tumawag muli at muli mismo. 317 00:15:25,790 --> 00:15:30,600 Ito ay OK kung foo kalaunan ay tumigil, tulad ng ginagawa sumanib uri, sa pamamagitan ng pagsasabi, maghintay ng isang minuto, 318 00:15:30,600 --> 00:15:32,980 kung ang problemang ito ay sobrang maliit, halimbawa, 319 00:15:32,980 --> 00:15:35,840 o natagpuan ko yaong Ako hinahanap, bumalik lang. 320 00:15:35,840 --> 00:15:41,000 Huwag recursively, hindi cyclically tumawag muli ang aking sarili. 321 00:15:41,000 --> 00:15:44,200 >> At tumagal ng isang pagtingin sa upang ipaalam sa kung paano ito maaaring talagang gumagana. 322 00:15:44,200 --> 00:15:48,430 Kaya ako pagpunta sa sige at bukas up ng dalawang mga halimbawa source code dito. 323 00:15:48,430 --> 00:15:50,321 Isa na kung saan ay tinatawag na palatandaan 0. 324 00:15:50,321 --> 00:15:52,320 At ito ay hindi sa lahat recursive, ngunit ipaalam sa tumagal ng 325 00:15:52,320 --> 00:15:53,694 isang pagtingin sa kung ano ang ginagawa ng programang ito. 326 00:15:53,694 --> 00:15:55,737 Na Nakuha ko ang lahat Tingnan ang mga komento mula sa mga ito ngunit ang lahat ng 327 00:15:55,737 --> 00:15:58,070 ng source code sa CS50 website ay may mga komento kung ikaw 328 00:15:58,070 --> 00:15:59,570 nais na basahin sa pamamagitan ng ito muli sa ibang pagkakataon. 329 00:15:59,570 --> 00:16:02,010 At gawin ang isang pares ipaalam ng kaliwanagan ng isip sumusuri dito. 330 00:16:02,010 --> 00:16:06,640 >> Kaya sa tuktok ng kodigong ito, mayroon kaming isama CS50.h. 331 00:16:06,640 --> 00:16:07,650 Ano ang ginagawa nito? 332 00:16:07,650 --> 00:16:08,990 Bakit eto? 333 00:16:08,990 --> 00:16:11,740 Sa mga tuntunin ng makatwirang karaniwang tao. 334 00:16:11,740 --> 00:16:12,424 Ano ang ginagawa nito? 335 00:16:12,424 --> 00:16:12,858 Oo. 336 00:16:12,858 --> 00:16:14,160 >> Madla: Kaya na gumagana GetInt function. 337 00:16:14,160 --> 00:16:16,243 >> David J. MALAN: Kaya na gumagana ang GetInt function. 338 00:16:16,243 --> 00:16:18,115 Dahil sa loob ng mga ito file, CS50.h, na 339 00:16:18,115 --> 00:16:20,950 kami makita bago mahaba sa tuntunin ng source code nito, 340 00:16:20,950 --> 00:16:23,270 ay may isang bungkos ng mga function declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 at ng grupo ng others-- at maliban kung ang tunay na kami ay may na Isama line, 342 00:16:26,950 --> 00:16:29,320 ang tagatala Clang ay hindi pagpunta upang malaman na ito ay umiiral na. 343 00:16:29,320 --> 00:16:32,400 At parehong napupunta para sa line dalawang kung saan int ay tinukoy 344 00:16:32,400 --> 00:16:35,101 printf, na kung saan ay isang function panatilihin namin ang paggamit pa ng kaunti. 345 00:16:35,101 --> 00:16:37,850 Ngayon, apat na linya ay tila isang maliit funky dahil sa ito ay lamang ng isang one liner. 346 00:16:37,850 --> 00:16:41,570 Ito ay nakuha ng isang tuldok-kuwit, walang kulot braces, walang code sa loob ng mga ito. 347 00:16:41,570 --> 00:16:44,640 Ngunit kung ano ang ginawa ang tawag namin ang bagay na ito sa linggo nakaraan? 348 00:16:44,640 --> 00:16:45,140 Oo. 349 00:16:45,140 --> 00:16:46,060 Kaya ang isang prototype. 350 00:16:46,060 --> 00:16:48,390 At bakit kami ay may isang prototype na tila 351 00:16:48,390 --> 00:16:51,050 upang maging isang maliit na maulit karaniwang dahil kami ay karaniwang 352 00:16:51,050 --> 00:16:53,474 makita muli ang pag-andar mamaya sa file, i-right? 353 00:16:53,474 --> 00:16:56,390 Kaya bakit have-- namin ikaw lamang scratching iyong ulo ngunit Kukunin ko ito. 354 00:16:56,390 --> 00:16:57,302 Oo. 355 00:16:57,302 --> 00:17:00,000 >> Madla: [hindi marinig] function na pagkatapos ng pangunahing. 356 00:17:00,000 --> 00:17:01,000 David J. MALAN: Eksakto. 357 00:17:01,000 --> 00:17:04,089 Kaya na alam mo ang tagatala ay tuluyang tukuyin o ipatupad 358 00:17:04,089 --> 00:17:06,579 na function na pagkatapos ng main, siguro. 359 00:17:06,579 --> 00:17:08,462 Kaya Clang at pinaka compiler ay uri ng pipi 360 00:17:08,462 --> 00:17:10,510 at ang mga ito lamang ang nakakaalam kung ano ang iyong sabihin sa kanila. 361 00:17:10,510 --> 00:17:12,569 At kung gusto mong gamitin isang function na tinatawag na palatandaan, 362 00:17:12,569 --> 00:17:15,710 ikaw ay mas mahusay na turuan ang mga compiler na ito ay umiiral nang maaga. 363 00:17:15,710 --> 00:17:17,970 >> Ngayon, main mismo, kahit kahit na ito ay isang bungkos ng mga linya, 364 00:17:17,970 --> 00:17:19,839 ay medyo pamilyar sana sa ngayon. 365 00:17:19,839 --> 00:17:21,942 Ito ay nakuha ng isang gawin habang loop ang layunin sa buhay 366 00:17:21,942 --> 00:17:24,400 dito ay tila upang makakuha ng isang positive integer mula sa user. 367 00:17:24,400 --> 00:17:27,349 At patuloy lang pestering kanya o kanyang hanggang tumulong sila. 368 00:17:27,349 --> 00:17:30,670 Pagkatapos ay sa 16 na linya mayroon akong isang nakawiwiling call. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Alin sa mga nasa kaliwa nagbibigay sa akin ng side ng isang int 371 00:17:33,710 --> 00:17:36,650 na maaaring store-- tinatawag Answer-- na kung saan ay pagpunta sa tindahan, tila, 372 00:17:36,650 --> 00:17:39,090 ang return halaga ng palatandaan. 373 00:17:39,090 --> 00:17:41,840 Kaya na palatandaan ay lamang ng isang arbitrary ngunit makabuluhang pangalan 374 00:17:41,840 --> 00:17:44,500 na ko na ibinigay sa isang function ang layunin sa buhay 375 00:17:44,500 --> 00:17:47,680 ay gumawa ng isa argument-- kami ay tumawag ito N sa case-- 376 00:17:47,680 --> 00:17:52,280 at upang kumuha lamang ang kabuuan ng mga numero na plus bawat positibong numero na 377 00:17:52,280 --> 00:17:53,200 mas maliit kaysa sa mga ito. 378 00:17:53,200 --> 00:17:58,140 >> Kaya kung pumasa ako sa number 2 sa palatandaan, gusto kong magdagdag ng 2 plus 1 379 00:17:58,140 --> 00:18:00,240 plus 0-- hindi 0-- sa gayon ay nagbibigay sa akin ng 3. 380 00:18:00,240 --> 00:18:05,320 Kung pumasa ako sa 3 na palatandaan, gusto kong magkaroon ng 3 plus 2 plus 1, na kung saan ay nagbibigay sa akin 6. 381 00:18:05,320 --> 00:18:05,900 At iba pa. 382 00:18:05,900 --> 00:18:09,750 Kaya ito lamang ang nagdadagdag up ang lahat ng mga numero ng mas mababa sa o katumbas ng mga ito. 383 00:18:09,750 --> 00:18:12,040 >> Ngayon, pababa dito ako lamang ang pagpunta upang i-print out ang sagot. 384 00:18:12,040 --> 00:18:17,330 Kaya bilang isang mabilis katinuan check, sabihin gumawa ng palatandaan 0-- dot slash palatandaan 0-- 385 00:18:17,330 --> 00:18:18,690 at hayaan mo akong i-type sa 2. 386 00:18:18,690 --> 00:18:19,960 At sa katunayan ko makakuha ng 3. 387 00:18:19,960 --> 00:18:21,240 Hayaan akong i-type sa 3. 388 00:18:21,240 --> 00:18:22,860 Sa katunayan ako makakuha ng 6. 389 00:18:22,860 --> 00:18:27,636 At kung maaari gawin ang matematika mabilis sa kahit sino, kung gagawin ko 50 ano ako pagpunta makuha? 390 00:18:27,636 --> 00:18:29,839 >> Madla: [hindi marinig]. 391 00:18:29,839 --> 00:18:30,880 David J. MALAN: Well, hindi. 392 00:18:30,880 --> 00:18:33,340 Ngunit 1275 na kung saan ay malapit sa katangian. 393 00:18:33,340 --> 00:18:38,850 Kaya ito ay ang resulta ng paggawa 50 plus 49 plus 48 plus 47 plus 46 394 00:18:38,850 --> 00:18:40,349 lahat ng mga paraan pababa sa 1. 395 00:18:40,349 --> 00:18:41,390 Kaya na ang lahat na palatandaan ay. 396 00:18:41,390 --> 00:18:43,350 Ngunit sabihin makita kung paano namin nai ipinatupad ito ngayon. 397 00:18:43,350 --> 00:18:45,790 Kaya down na dito ay ang function ng kanyang sarili. 398 00:18:45,790 --> 00:18:49,000 At ito ay hindi mukhang upang magkaroon ng anumang gawin sa recursion pa. 399 00:18:49,000 --> 00:18:51,070 Sa katunayan, kami ay gumagamit ng isang lumang pamamaraan paaralan. 400 00:18:51,070 --> 00:18:56,680 Ako Sinisimulan sum isang variable na tinatawag sa zero, at pagkatapos ay mayroon akong isang foreloop dito, 401 00:18:56,680 --> 00:19:00,790 at ako deklarasyon ng isang int na tinatawag na Ako, ang pagtatakda ito katumbas ng 1-- 402 00:19:00,790 --> 00:19:04,080 bagaman maaari itinakda ko ito katumbas ng zero, ngunit dahil ako paggawa karagdagan, 403 00:19:04,080 --> 00:19:05,340 na nagmamalasakit kung ito ay zero o isa. 404 00:19:05,340 --> 00:19:06,660 Ito ay pagpunta sa ay walang epekto. 405 00:19:06,660 --> 00:19:10,110 >> Kaya ako iterating habang ako'y ay mas mababa sa o katumbas ng m, na kung saan 406 00:19:10,110 --> 00:19:11,671 ay ang argument na ay lumampas na sa. 407 00:19:11,671 --> 00:19:13,670 At pagkatapos ay ako lamang panatilihin incrementing I. At pananaw 408 00:19:13,670 --> 00:19:20,010 ng loop sa lahat ako ng paggawa ay ginagawa sum plus ay katumbas I. At na sinadya. 409 00:19:20,010 --> 00:19:22,326 Hindi ko nais na gawin, sa ganitong kaso, tulad ng kabuuan plus plus. 410 00:19:22,326 --> 00:19:24,790 Gusto ko na talagang si sa kasalukuyang halaga ng ko 411 00:19:24,790 --> 00:19:28,190 na mapigil ang pagkuha ng mas malaki at mas malaki at mas malaki sa pagpapatakbo tally. 412 00:19:28,190 --> 00:19:30,210 >> At pagkatapos ay ako babalik sum. 413 00:19:30,210 --> 00:19:33,850 At kaya ang makakakuha ng sagot ang halaga sum. 414 00:19:33,850 --> 00:19:35,282 At pagkatapos ay ako i-print ito. 415 00:19:35,282 --> 00:19:37,740 Kaya mayroong isang pagkakataon dito, bagaman, sa uri ng gawing simple 416 00:19:37,740 --> 00:19:41,260 ang code na ito conceptually at ang uri ng suntok ang isa ay 417 00:19:41,260 --> 00:19:43,250 isip sa mga tuntunin ng kababaang-kahit na ito 418 00:19:43,250 --> 00:19:45,700 tumatagal ng isang habang upang maipagsama-sama ng pahalagahan kung bakit ito 419 00:19:45,700 --> 00:19:47,330 ay makapangyarihan sa mga maliit na mga halimbawa. 420 00:19:47,330 --> 00:19:50,380 Narito ang palatandaan one-- kaya ang ikalawang bersyon ng code na ito. 421 00:19:50,380 --> 00:19:55,290 Lahat ng bagay up top ay kapareho kaya nalalapat na parehong kuwento tulad ng dati. 422 00:19:55,290 --> 00:19:59,220 Ngunit tingnan natin ang ngayon hayaan pagpapatupad ng mga palatandaan na 423 00:19:59,220 --> 00:20:05,040 Na whittled ko down na lamang ang mga ito lines-- apat na linya ng code, tunay, 424 00:20:05,040 --> 00:20:06,980 kasama ang ilang mga kulot braces and white space. 425 00:20:06,980 --> 00:20:07,930 >> Ngunit kung ano ang aking ginagawa? 426 00:20:07,930 --> 00:20:11,050 Kung m ay mas mababa sa o katumbas ng zero, kailangan ko na ng uri ng hawakan 427 00:20:11,050 --> 00:20:12,490 na sobrang simple na kaso. 428 00:20:12,490 --> 00:20:15,450 At kung ang mga kamay mo sa akin zero o anumang bagay negatibong kung saan ay lamang kakaiba, 429 00:20:15,450 --> 00:20:17,909 Lamang ako ng pagpunta sa nagkataon ngunit babalik zero tuloy-tuloy. 430 00:20:17,909 --> 00:20:20,200 Hindi ko gusto ang bagay na ito sa kumuha sa ilang mga kakatwang walang hanggan 431 00:20:20,200 --> 00:20:21,810 loop dahil sa isang negatibong halaga. 432 00:20:21,810 --> 00:20:25,070 Kaya ko sinasabi lang, kung bigyan mo ako zero o mas mababa, ako bumabalik zero. 433 00:20:25,070 --> 00:20:28,220 >> Ngunit iyon lamang ang mabuti dahil na na nag-iisang pahina ng direktoryo ng telepono 434 00:20:28,220 --> 00:20:28,790 na natitira. 435 00:20:28,790 --> 00:20:32,660 Ako masakit off isang napaka-tukoy na problema at hindi pagtawag ng isang bagay recursively. 436 00:20:32,660 --> 00:20:36,580 Ngunit sa 31 na linya, kung ano ako mukhang ginagawa? 437 00:20:36,580 --> 00:20:39,780 Ang mga panaklong ay pagsunod lamang mga bagay-bagay, sana, ang isang maliit na mas malinaw. 438 00:20:39,780 --> 00:20:42,110 Ngunit ang lahat ng ako ng paggawa ay Ako bumabalik M-- anuman 439 00:20:42,110 --> 00:20:45,790 kamay mo me-- plus ang halaga ng M-- Paumanhin, 440 00:20:45,790 --> 00:20:49,052 plus ang halaga ng palatandaan ng m minus 1. 441 00:20:49,052 --> 00:20:50,010 Kaya kung ano ang ibig sabihin nito? 442 00:20:50,010 --> 00:20:53,965 Kung ako magbibigay sa iyo ang bilang 3 bilang input, ang sagot na gusto ko upang makakuha ng ganap na 443 00:20:53,965 --> 00:20:57,307 ay 6 dahil 3 plus 2 plus 1 ay nagbibigay sa akin 6. 444 00:20:57,307 --> 00:20:59,390 Ngunit paano tingin ko tungkol sa kung paano ang code na ito ay tumatakbo? 445 00:20:59,390 --> 00:21:03,070 Ang unang pagkakataon na ang tawag ko na palatandaan at pumasa ako sa ang halaga 3, 446 00:21:03,070 --> 00:21:07,960 na tulad ng sinasabi sa isang piraso ng papel, narito ang halaga 3 447 00:21:07,960 --> 00:21:09,920 at ako ay lumipas na ito bilang palatandaan. 448 00:21:09,920 --> 00:21:13,090 3 ay malinaw na hindi mas mababa sa 0 upang KUNG kalagayan ay hindi akma. 449 00:21:13,090 --> 00:21:14,020 Iba Pa Ang ginagawa nito. 450 00:21:14,020 --> 00:21:14,990 Kaya kung ano ang gagawin ko? 451 00:21:14,990 --> 00:21:19,902 Gusto kong bumalik m, na kung saan ay 3, kasama na palatandaan ng m minus 1. 452 00:21:19,902 --> 00:21:21,110 Kaya hayaan mo akong subaybayan ang mga ito. 453 00:21:21,110 --> 00:21:22,710 Pupunta ako upang ilagay ito piraso ng papel down. 454 00:21:22,710 --> 00:21:24,668 At kung ano ang halaga, upang maging malinaw, ako ay pagpunta sa pumasa 455 00:21:24,668 --> 00:21:26,540 sa na palatandaan sa puntong ito sa kuwento? 456 00:21:26,540 --> 00:21:28,080 Anong numero? 457 00:21:28,080 --> 00:21:28,610 2, i-right? 458 00:21:28,610 --> 00:21:29,670 3 minus 1 ay 2. 459 00:21:29,670 --> 00:21:32,000 Kaya kailangan ko lang ng kaunti piraso ng papel dito. 460 00:21:32,000 --> 00:21:33,931 Kaya ngayon na palatandaan ay nakakakuha ng tinatawag muli. 461 00:21:33,931 --> 00:21:35,930 At kusa ko na ilagay down na ito dahil sa ito ay 462 00:21:35,930 --> 00:21:38,070 uri ng tulad ng pag-pause na bersyon ng kuwento 463 00:21:38,070 --> 00:21:40,720 dahil ngayon ako nakatutok sa signal ng m minus 1. 464 00:21:40,720 --> 00:21:42,660 Kaya m ay 3, m minus 1 ay 2. 465 00:21:42,660 --> 00:21:45,110 Kaya dito ay 2 na ako ng lumipas. 466 00:21:45,110 --> 00:21:48,510 2 ay hindi malinaw naman mas mababa sa 0 kaya kasong iyon ay hindi akma. 467 00:21:48,510 --> 00:21:53,445 Iba Pa bumalik ako m, na kung saan ay ito bagay, kasama na palatandaan ng kung ano ang halaga? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Kaya kung na palatandaan ng 1-- dahil m ay ngayon 2 kaya 2 minus 1 ay 1. 470 00:21:59,650 --> 00:22:01,950 Kaya ngayon ko na lang ay ang halaga 1. 471 00:22:01,950 --> 00:22:04,810 Ako makapasa lamang ang bilang 1 sa function sigma-- 472 00:22:04,810 --> 00:22:09,120 o ang aking sarili here-- kaya 1 ay malinaw naman hindi mas mababa sa zero, hindi pa rin mag-aplay. 473 00:22:09,120 --> 00:22:12,970 >> Iba Pa return 1 plus na palatandaan ng kung ano? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Kaya hayaan tandaan ako na lang. 476 00:22:14,678 --> 00:22:15,920 Kukunin ko bumalik sa na mamaya. 477 00:22:15,920 --> 00:22:18,060 Ngayon ako pagpunta sa sige at itala down ang numero ng 0 dahil na 478 00:22:18,060 --> 00:22:19,470 aking argumento o parameter. 479 00:22:19,470 --> 00:22:22,400 Ako lumipas ang numero ng 0 at sa wakas ay ang proseso na ito 480 00:22:22,400 --> 00:22:25,760 na lamang ang paulit-ulit sa aking sarili ad nauseum ay titigil dahil kung ano 481 00:22:25,760 --> 00:22:28,820 huwag agad kong gawin sa sandaling makita ko ito 0? 482 00:22:28,820 --> 00:22:29,790 Bumalik ako zero. 483 00:22:29,790 --> 00:22:31,790 Kaya ngayon ay mayroon mong i-rewind ang kuwento. 484 00:22:31,790 --> 00:22:34,430 >> Kung pupunta ako ngayon pabalik sa oras, kung ano ang pinakahuling bagay 485 00:22:34,430 --> 00:22:36,670 Ginawa ko kung kayo ay literal nagre-rewind ang video? 486 00:22:36,670 --> 00:22:41,630 Pupunta ako upang kunin ang pinakahuling 1 at na nagbibigay sa akin 1 plus 0 ay 1. 487 00:22:41,630 --> 00:22:44,100 Kung patuloy ko nagre-rewind ang kuwento, na pagpunta upang bigyan ako 488 00:22:44,100 --> 00:22:46,880 2 plus na ito na tumatakbo na halaga, na kung saan ay 1. 489 00:22:46,880 --> 00:22:47,789 Kaya na 3. 490 00:22:47,789 --> 00:22:49,330 At pagkatapos ay ako pagpunta sa panatilihin rewinding. 491 00:22:49,330 --> 00:22:54,220 Nang una kong ilagay down na ang bilang 3-- kaya 3 plus 3 ay nagbibigay sa akin 6. 492 00:22:54,220 --> 00:22:57,272 >> At ngayon, kung nag-rewound ang video hanggang sa puntong ito, 493 00:22:57,272 --> 00:22:58,980 ito ay ang tunay unang tanong tanong ko. 494 00:22:58,980 --> 00:23:01,450 Kapag nakapasa 3, kung ano ang palatandaan ng 3? 495 00:23:01,450 --> 00:23:04,204 Ito ay sa katunayan 6, ang kabuuan ng ang lahat ng mga piraso ng papel. 496 00:23:04,204 --> 00:23:07,120 Kaya kung na tumatagal ng ilang sandali upang wrap ang iyong isip sa paligid, na fine. 497 00:23:07,120 --> 00:23:10,700 Ngunit isaalang-alang ito ay isang little-- ito ay napaka sinadya na isinalansan ko 498 00:23:10,700 --> 00:23:12,990 ang mga numerong ito sa tuktok ng bawat isa. 499 00:23:12,990 --> 00:23:17,440 Ito ay uri ng tulad ng pagkakaroon ng na memorya ng isang talaan sa oras, 500 00:23:17,440 --> 00:23:19,940 tulad ng isang scrubber sa isang video, na maaari kong katunayan rewind in. 501 00:23:19,940 --> 00:23:24,350 At kami ay pagpunta upang bumalik sa na talinghaga sa loob lamang ng ilang sandali. 502 00:23:24,350 --> 00:23:28,240 >> Ngunit una, ito ay lumiliko out na mayroong isang pulutong ng mga geeks at nakakatawa mga tao, 503 00:23:28,240 --> 00:23:29,614 Hulaan ko, sa Google. 504 00:23:29,614 --> 00:23:31,530 Gusto isang tao na ang tunay mabuti sa Googling isip 505 00:23:31,530 --> 00:23:34,270 pagdating up para sa isang sandali lang at tumulong ako sa paghahanap para sa isang bagay? 506 00:23:34,270 --> 00:23:35,650 Very, very low key. 507 00:23:35,650 --> 00:23:37,870 May isang tao na hindi kailanman umabot sa harap, marahil. 508 00:23:37,870 --> 00:23:38,370 SIGE. 509 00:23:38,370 --> 00:23:39,030 Oo? 510 00:23:39,030 --> 00:23:39,530 Sige na. 511 00:23:39,530 --> 00:23:41,410 Halika sa down. 512 00:23:41,410 --> 00:23:42,183 Ano ang pangalan mo? 513 00:23:42,183 --> 00:23:42,870 >> Sam: Sam. 514 00:23:42,870 --> 00:23:44,290 >> David J. MALAN: Sam, dumating sa pababa. 515 00:23:44,290 --> 00:23:45,320 Ito ang Kapareho. 516 00:23:45,320 --> 00:23:46,280 Masaya akong makilala kayo. 517 00:23:46,280 --> 00:23:46,780 Hey. 518 00:23:46,780 --> 00:23:47,580 Pumunta ka rito. 519 00:23:47,580 --> 00:23:51,290 Kaya lahat ng kailangan ko sa iyo na gawin, kung maaari mong, Sam, narito ang Google. 520 00:23:51,290 --> 00:23:53,240 Maaari kang maghanap para sa kataga ng recursion? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Huwag sayangin. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> At ngayon let's-- oo. 525 00:24:00,970 --> 00:24:03,380 OK I-click na iyon. 526 00:24:03,380 --> 00:24:04,315 Mas mahusay na i-click na iyon. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, kumuha ito. 529 00:24:08,020 --> 00:24:08,520 Hindi? 530 00:24:08,520 --> 00:24:09,050 SIGE. 531 00:24:09,050 --> 00:24:10,430 Kaya sabihin gawin ang isang pares ng iba. 532 00:24:10,430 --> 00:24:12,830 Hindi masyado kaugnay academically dito, ngunit mayroon kang 533 00:24:12,830 --> 00:24:14,520 ba naghanap sa Google para sa anagram? 534 00:24:14,520 --> 00:24:15,280 >> Sam: Hindi. 535 00:24:15,280 --> 00:24:15,520 >> David J. MALAN: OK. 536 00:24:15,520 --> 00:24:17,186 Maghanap ng mga anagram halip ng recursion. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Paano ang tungkol sa nakatagilid. 539 00:24:23,790 --> 00:24:25,515 Ikaw ba hinanap nakatagilid? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Ngayon, ang isang ito ay isang maliit na mahirap tignan ngunit sana everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 Ito ay lamang sa iyo at sa akin tinatangkilik ito. 543 00:24:34,150 --> 00:24:34,690 SIGE. 544 00:24:34,690 --> 00:24:38,950 >> Kaya sa wakas, ito one's-- ito ay isang maliit nakatagilid. 545 00:24:38,950 --> 00:24:40,810 Ngayon gawin ang isang bariles roll. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Magagandang. 548 00:24:45,310 --> 00:24:45,910 Lahat tama. 549 00:24:45,910 --> 00:24:47,110 Big salamat sa Sam. 550 00:24:47,110 --> 00:24:49,416 Ito na. 551 00:24:49,416 --> 00:24:50,400 Salamat. 552 00:24:50,400 --> 00:24:52,807 >> Kaya kung ano ang nangyayari sa lahat ng mga uto mga halimbawa? 553 00:24:52,807 --> 00:24:55,640 Kaya talaga, sa ilalim ng hood ng Google milyon-milyong mga linya ng code 554 00:24:55,640 --> 00:24:58,860 wari ay ilang uto KUNG kondisyon na ito ay mahalagang 555 00:24:58,860 --> 00:25:01,160 paglagay ng tsek kung ang user ay may nag-type sa pariralang ito, 556 00:25:01,160 --> 00:25:03,760 gawin ang isang bagay na marahil kinuha isang nontrivial halaga ng oras 557 00:25:03,760 --> 00:25:06,080 upang ipatupad lamang upang maging nakakaaliw sa ganitong paraan. 558 00:25:06,080 --> 00:25:08,430 Ngunit iyon lamang ang lahat ng umaasa lang pababa sa ilalim ng hood. 559 00:25:08,430 --> 00:25:11,570 Ngunit, siyempre, recursion ay higit pa sa mga geekier 560 00:25:11,570 --> 00:25:13,880 Halimbawa kabilang sa mga espesyal na mga trick. 561 00:25:13,880 --> 00:25:16,880 At tiyak na may iba diyan pati na marahil kami ay may hindi kahit na 562 00:25:16,880 --> 00:25:18,230 Natuklasan pa lamang. 563 00:25:18,230 --> 00:25:22,830 >> Kaya tingnan, o isaalang-alang ngayon ang mga sumusunod na programa, 564 00:25:22,830 --> 00:25:24,830 at tiyak na kukunin sa anumang ng mga ito sa iyong paraan out. 565 00:25:24,830 --> 00:25:28,820 Pupunta ako sa sige at magbukas ng isang programa na 566 00:25:28,820 --> 00:25:30,920 pagpunta sa subukan upang magpalitan ng dalawang mga halaga. 567 00:25:30,920 --> 00:25:33,210 Ngunit bago kami pumunta doon, ni gawin ito ipaalam. 568 00:25:33,210 --> 00:25:38,500 Puwede naming makakuha ng isa pa volunteer, sa tingin ko? 569 00:25:38,500 --> 00:25:40,480 Gusto mo bang mag-volunteer? 570 00:25:40,480 --> 00:25:40,980 Hindi? 571 00:25:40,980 --> 00:25:41,890 Lumapit sa up. 572 00:25:41,890 --> 00:25:42,390 Lumapit sa up. 573 00:25:42,390 --> 00:25:42,890 Lahat tama. 574 00:25:42,890 --> 00:25:44,136 Kaya ang iyong pangalan ay kung ano? 575 00:25:44,136 --> 00:25:44,810 >> LAUREN: Lauren. 576 00:25:44,810 --> 00:25:45,768 >> David J. MALAN: Lauren. 577 00:25:45,768 --> 00:25:46,890 Umakyat, Lauren. 578 00:25:46,890 --> 00:25:50,140 Kaya Lauren ay ang pagiging hinamon dito ang mga sumusunod. 579 00:25:50,140 --> 00:25:52,310 Masaya akong makilala kayo. 580 00:25:52,310 --> 00:25:55,730 Kaya Lauren dito ay sa harap ng kanyang dalawang walang laman tasa. 581 00:25:55,730 --> 00:25:57,570 At kami ay may ilang mga orange juice at ilang gatas 582 00:25:57,570 --> 00:26:00,301 at kami ay pagpunta upang pumunta magpatuloy at gawin ang mga sumusunod. 583 00:26:00,301 --> 00:26:01,550 Kami ay pagpunta sa punan ito. 584 00:26:01,550 --> 00:26:07,840 Ilang onsa ng gatas sa paglipas dito at sabihin punan ang isang maliit na orange juice sa paglipas dito. 585 00:26:07,840 --> 00:26:11,475 >> At sa harap ng lahat ng mga miyembro ng madla, 586 00:26:11,475 --> 00:26:13,550 magpalitan ng dalawang mga halaga ng mga tasa. 587 00:26:13,550 --> 00:26:16,970 Ilagay ang orange juice sa gatas cup at ang gatas sa orange juice cup. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Paano mo gawin ito kung ikaw ay sa tahanan at nagkaroon ng access sa iba pang mga supplies? 590 00:26:26,150 --> 00:26:27,400 LAUREN: Ilagay ito sa isa pang tasa. 591 00:26:27,400 --> 00:26:28,191 David J. MALAN: OK. 592 00:26:28,191 --> 00:26:31,940 Kaya sabihin ay may isang pansamantalang variable, kung kami ay. 593 00:26:31,940 --> 00:26:35,871 At magpatuloy ngayon at ipatupad ang parehong proseso ng pagpapalitan. 594 00:26:35,871 --> 00:26:36,370 So, mabuti. 595 00:26:36,370 --> 00:26:41,490 Naglaan na kami OJ sa pansamantalang variable, gatas sa OJ variable, 596 00:26:41,490 --> 00:26:44,481 at ngayon ang pansamantalang variable sa gatas variable. 597 00:26:44,481 --> 00:26:44,980 SIGE. 598 00:26:44,980 --> 00:26:48,740 Kaya napaka-magaling sa ngayon. 599 00:26:48,740 --> 00:26:50,990 Kaya ito ay lumiliko out-- hold na naisip para sa isang sandali lamang. 600 00:26:50,990 --> 00:26:54,479 Dito, sa geek lang ito ng kaunti, ito ay ang kaukulang C code 601 00:26:54,479 --> 00:26:55,520 na ipinatupad lamang namin. 602 00:26:55,520 --> 00:26:58,650 Nagkaroon kami ng dalawang input, isang at b, na parehong na kung saan kami lang sabihin para sa pagiging simple ay 603 00:26:58,650 --> 00:26:59,260 int ni. 604 00:26:59,260 --> 00:27:02,780 At mapansin dito, kung gusto kong i-swap ang mga halaga ng dalawang variable, ang isang at b, 605 00:27:02,780 --> 00:27:06,890 sa katunayan kailangan namin ng isang ahente, isang pansamantalang variable, isang pansamantalang tasa, 606 00:27:06,890 --> 00:27:10,830 sa kung saan ang ibuhos isa sa mga halaga kaya na kami ay may isang placeholder para sa mga ito. 607 00:27:10,830 --> 00:27:13,480 Ngunit pagkatapos ay ang code ay eksaktong bilang Lauren dito ipinatupad. 608 00:27:13,480 --> 00:27:15,500 >> Ngayon, upang makakuha lamang ng isang maliit crazier, lumiliko out 609 00:27:15,500 --> 00:27:20,930 na maaari mong gawin ito nang walang isang pansamantalang variable. 610 00:27:20,930 --> 00:27:24,870 Upang gawin ito nang maayos, kahit na, kami ay pagpunta sa may sa impostor na may ilang mga kimika. 611 00:27:24,870 --> 00:27:26,380 Mayroon kaming ilang dagdag na mga tasa dito. 612 00:27:26,380 --> 00:27:29,600 Kaya ang pinakamalapit na bagay na ganito ang hitsura tulad perhaps-- gatas at tubig 613 00:27:29,600 --> 00:27:34,090 o gatas at OJ-- ay mayroon kaming ilang mga tubig, kaya kailangan namin punan ang isang ito up 614 00:27:34,090 --> 00:27:36,486 may ilang ounces ng malinaw na tubig. 615 00:27:36,486 --> 00:27:38,332 Iyon ay marahil masyadong marami. 616 00:27:38,332 --> 00:27:38,832 Oo. 617 00:27:38,832 --> 00:27:39,934 Iyan ay tiyak na masyadong marami. 618 00:27:39,934 --> 00:27:40,600 I-hold sa isang segundo. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> At ngayon kami ay may langis, na kung saan, bilang ko pagpapabalik mula sa gitna ng klase kimika ng paaralan, 621 00:27:48,420 --> 00:27:49,990 inaasahan namin na ito ay hindi ihalo sa tubig. 622 00:27:49,990 --> 00:27:53,650 Ngunit ito uri ng uri ng ganito ang hitsura ng gatas at OJ. 623 00:27:53,650 --> 00:27:55,760 Kaya ngayon, nang hindi gumagamit isang pansamantalang variable, 624 00:27:55,760 --> 00:27:59,260 maaari mong ipagpalit ang mga dalawang mga halaga? 625 00:27:59,260 --> 00:28:03,884 Kaya kuwadro napupunta sa mga tasa ng tubig, tubig napupunta sa tasa ng langis. 626 00:28:03,884 --> 00:28:04,800 LAUREN: Walang ibang mga tasa? 627 00:28:04,800 --> 00:28:05,940 David J. MALAN: Walang iba pang tasa. 628 00:28:05,940 --> 00:28:07,860 At hindi ko na hindi talaga nasubukan na ito bago sa taong ito 629 00:28:07,860 --> 00:28:10,110 kaya hindi ko alam kung kalooban ito talagang gumagana chemically. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Iyon ay hindi dapat na mangyari. 632 00:28:18,650 --> 00:28:19,761 Ay ito gumagana? 633 00:28:19,761 --> 00:28:20,260 Lahat tama. 634 00:28:20,260 --> 00:28:20,990 Kaya pagkakahiwalay? 635 00:28:20,990 --> 00:28:21,490 Good. 636 00:28:21,490 --> 00:28:24,714 Ngayon namin nakuha upang makuha ang tubig sa iba pang mga cup. 637 00:28:24,714 --> 00:28:27,630 Mas matalinong kimika concentrators dati malamang na gawin ito ng mas mahusay kaysa sa akin. 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: Ang tubig ay sa ibaba. 639 00:28:28,510 --> 00:28:31,910 >> David J. MALAN: Ang water-- na kung ano ang key sa huling beses na ginawa namin ito. 640 00:28:31,910 --> 00:28:33,950 Kailangan mong gawin ito sa tamang pagkakasunod-sunod. 641 00:28:33,950 --> 00:28:34,450 Oo. 642 00:28:34,450 --> 00:28:35,270 That's-- OK. 643 00:28:35,270 --> 00:28:37,290 Kaya ngayon kami ay may dalawang tasa ng langis. 644 00:28:37,290 --> 00:28:37,790 SIGE. 645 00:28:37,790 --> 00:28:38,510 Iyon ang OK. 646 00:28:38,510 --> 00:28:40,110 Ngunit chemically kung ito ay nagtrabaho sa I-- 647 00:28:40,110 --> 00:28:41,200 >> LAUREN: Ito ay tubig. 648 00:28:41,200 --> 00:28:41,930 >> David J. MALAN: Iyan ay halos lahat ng tubig. 649 00:28:41,930 --> 00:28:42,430 Lahat tama. 650 00:28:42,430 --> 00:28:44,210 Ngunit iyon lamang ang parehong tasa tulad ng dati pa rin. 651 00:28:44,210 --> 00:28:47,570 Kaya ibuhos it-- subukan ito doon. 652 00:28:47,570 --> 00:28:49,300 SIGE. 653 00:28:49,300 --> 00:28:51,010 Ito ay isang mahusay na paggamit ng oras ng klase ngayon. 654 00:28:51,010 --> 00:28:51,510 SIGE. 655 00:28:51,510 --> 00:28:53,890 Kaya we-- ngayon nice. 656 00:28:53,890 --> 00:28:55,460 Medyo. 657 00:28:55,460 --> 00:28:55,960 Lahat tama. 658 00:28:55,960 --> 00:28:56,690 Kaya napakabuti. 659 00:28:56,690 --> 00:29:00,006 Salamat sa Lauren. 660 00:29:00,006 --> 00:29:01,950 Tunay na magaling. 661 00:29:01,950 --> 00:29:04,570 >> Kaya lang sa pumutok ang iyong isip, at ito ay marahil ang isang bagay 662 00:29:04,570 --> 00:29:08,660 upang i-play sa kung gusto mo sa CS50 ID, maaari mong, sa katunayan, magpalitan ng dalawang variable 663 00:29:08,660 --> 00:29:11,470 walang gamit ang isang pansamantalang integer. 664 00:29:11,470 --> 00:29:13,060 At ito ay ang kaukulang C code. 665 00:29:13,060 --> 00:29:16,110 At kung ikaw pagpapabalik mula sa huling Miyerkules, ipinakilala namin, kung sa madaling sabi, 666 00:29:16,110 --> 00:29:19,720 ng ilang mga bagong operator sa C. At ginagawa kahit sino pagpapabalik kung ano ang maliit na carrot 667 00:29:19,720 --> 00:29:23,660 simbolo ay, na ang maliit na tatsulok simbolo mula sa keyboard ay kumakatawan? 668 00:29:23,660 --> 00:29:26,003 Ano operator bitwise? 669 00:29:26,003 --> 00:29:26,770 >> Madla: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> David J. MALAN: EXOR. 671 00:29:27,645 --> 00:29:28,560 Exclusive Or. 672 00:29:28,560 --> 00:29:32,920 Kaya kung nais mong, katuwaan lang sa sa bahay, upang magbigay ng isang at b dalawang arbitrary 673 00:29:32,920 --> 00:29:36,072 mga halaga tulad ng anumang eight-- at ako ay pumili ng isang walong bit na halaga. 674 00:29:36,072 --> 00:29:38,530 Kung gagawin mo ito sa 32 bits, makikita mo ang mabilis na makakuha ng nababato. 675 00:29:38,530 --> 00:29:42,150 Ngunit bigyan lamang ng isang walong bit halaga na kahit na ano, isa o dalawa, 676 00:29:42,150 --> 00:29:43,790 at bigyan b isang katulad na halaga. 677 00:29:43,790 --> 00:29:46,810 At pagkatapos ay ang paggamit ng mga kahulugan ng XOR mula sa huling Miyerkules, 678 00:29:46,810 --> 00:29:52,560 mag-apply na unti-unti, ang bawat isa sa mga walong bits sa bawat isa ng isang at b, 679 00:29:52,560 --> 00:29:54,980 at pagkatapos ay gawin ito nang eksakto per code na ito. 680 00:29:54,980 --> 00:29:58,170 At ito ay hindi tama kung ano na makikita mo dito sa screen. 681 00:29:58,170 --> 00:30:02,100 Ito ay sa katunayan na bumabagsak sa tatlong XOR operations 682 00:30:02,100 --> 00:30:05,910 at sa anumang paraan magically isang at b ay palitan ng posisyon 683 00:30:05,910 --> 00:30:08,010 nang hindi nawawala ang anumang impormasyon. 684 00:30:08,010 --> 00:30:11,580 >> Kaya ang langis at tubig bilis ng kamay ay ang pinakamalapit real pagkakatawang-tao ng mundo 685 00:30:11,580 --> 00:30:12,980 Kaya kong isipin na gayahin iyon. 686 00:30:12,980 --> 00:30:15,950 Ngunit ito ay tiyak na mas madaling gumamit ng isang pansamantalang variable, 687 00:30:15,950 --> 00:30:16,920 tulad ng sa kasong ito dito. 688 00:30:16,920 --> 00:30:21,190 At ito ay masyadong sabihin ng pagkakataon, masyadong, ang ganitong uri ng mga micro-optimize, 689 00:30:21,190 --> 00:30:23,590 bilang isang computer scientist nais sabihin, habang uri ng masaya 690 00:30:23,590 --> 00:30:27,060 upang magmayabang tungkol sa kung paano mo ito nang walang tulad ng pagpapalit sa isang dagdag na variable, 691 00:30:27,060 --> 00:30:28,640 ito ay hindi lahat na nakapanghihimok. 692 00:30:28,640 --> 00:30:31,619 Dahil upang i-save 32 bits, tulad ng sa kaso ng isang aktwal na int, 693 00:30:31,619 --> 00:30:33,410 ay hindi lahat na nag-uudyok sa isang sistema na kung saan ang 694 00:30:33,410 --> 00:30:36,722 maaaring gumagamit ka ng sampu-sampung megabytes o kahit na higit pa tulad memory na mga araw. 695 00:30:36,722 --> 00:30:38,680 At sa katunayan, kapag kami makakuha ng sa isang mas huling hanay ng problema 696 00:30:38,680 --> 00:30:41,010 at ipatupad mo ang spell checker at kayo 697 00:30:41,010 --> 00:30:43,550 hinamon na gawin ito na may ito bilang maliit na RAM at bilang maliit 698 00:30:43,550 --> 00:30:46,820 oras hangga't maaari sa computer-- ka pa rin 699 00:30:46,820 --> 00:30:50,160 may isang linggo na ipatupad it-- makikita mo have-- makikita mo 700 00:30:50,160 --> 00:30:51,799 hinamon upang i-minimize ang mga resources. 701 00:30:51,799 --> 00:30:53,840 At iyan ay talagang lamang okasyon sa semestre 702 00:30:53,840 --> 00:30:57,940 kung saan kayo ay hinihikayat na mag-ahit off kahit na ang pinakamasasarap na pagganap 703 00:30:57,940 --> 00:30:59,340 Nagkakahalaga sa kabilang banda. 704 00:30:59,340 --> 00:31:02,200 >> Kaya what-- paano natin makita ang mga ito sa aktwal na code? 705 00:31:02,200 --> 00:31:04,530 Hayaan akong magpatuloy ngayon at buksan up ng isang halimbawa 706 00:31:04,530 --> 00:31:07,700 na sadyang ay tinatawag na Walang Swap dahil ito ay hindi 707 00:31:07,700 --> 00:31:10,670 sa katunayan swap ang mga variable bilang iyong aktwal na maaaring asahan. 708 00:31:10,670 --> 00:31:12,260 Kaya sabihin tumagal ng isang pagtingin. 709 00:31:12,260 --> 00:31:17,050 Narito ang isang programa na ay walang CS50 library nangyayari, standard lang ako / O. 710 00:31:17,050 --> 00:31:19,560 Ngayon kami ay may isang tularan para magpalitan up top na lang 711 00:31:19,560 --> 00:31:21,540 ang ibig sabihin nito ay nakuha na tinukoy sa ibang pagkakataon. 712 00:31:21,540 --> 00:31:22,550 At narito ang main. 713 00:31:22,550 --> 00:31:26,000 >> Nagkataon ako itinalaga x at y, ayon sa pagkakabanggit, ang isa sa mga halaga at dalawang 714 00:31:26,000 --> 00:31:28,590 dahil lang sa ang mga ito ay maliit at madaling mag-isip tungkol sa. 715 00:31:28,590 --> 00:31:32,280 At pagkatapos ay ako ay may lamang ng grupo ng printfs kung saan mayroon akong isang katinuan check. x ay 1 716 00:31:32,280 --> 00:31:35,110 at y ay 2 ay baka kung ano ang mga printfs sasabihin. 717 00:31:35,110 --> 00:31:36,530 Kaya walang magic kaya sa ngayon. 718 00:31:36,530 --> 00:31:40,100 >> Pagkatapos ako pagpunta upang i-claim sa i-print ang def, pagpapalit dot dot dot. 719 00:31:40,100 --> 00:31:43,730 Pupunta ako sa tawagan ang swap function, pagpasa sa x at y. 720 00:31:43,730 --> 00:31:47,350 At sabihin ipalagay para sa ngayon na ipaalam swap ay ipinatupad eksakto 721 00:31:47,350 --> 00:31:49,930 dahil ito ay isang sandali ang nakalipas na may isang pansamantalang variable. 722 00:31:49,930 --> 00:31:52,670 At kaya inaangkin ko matapang, swapped. 723 00:31:52,670 --> 00:31:55,429 x na ngayon ang mga ito at y ay ngayon na. 724 00:31:55,429 --> 00:31:57,220 Ngunit ang mga file, siyempre, ay tinatawag na No Swap. 725 00:31:57,220 --> 00:31:58,678 Kaya sabihin aktwal na makita kung ano ang mangyayari. 726 00:31:58,678 --> 00:32:04,450 Kung ako sumulat ng libro no swap at pagkatapos ay gawin ./noswap, x ay 1, y ay 2. 727 00:32:04,450 --> 00:32:05,770 Pagpapalitan swapped. 728 00:32:05,770 --> 00:32:07,200 x ay 1, y ay 2. 729 00:32:07,200 --> 00:32:11,980 Kaya ito aktwal na tila na flawed kahit bagaman swap-- sabihin mag-scroll pababa now-- 730 00:32:11,980 --> 00:32:16,542 eksakto ay ipinatupad ng bawat ang code ko iminungkahi ng ilang sandali ang nakalipas. 731 00:32:16,542 --> 00:32:19,000 Kaya kami ay hindi pagpunta upang makakuha ng magarbong sa XOR bagay-bagay para sa ngayon. 732 00:32:19,000 --> 00:32:21,890 Ito, masyadong, dapat trabaho lang tulad ng may gatas at OJ, 733 00:32:21,890 --> 00:32:25,820 ngunit ito ay hindi tila sa maaari gumawa. 734 00:32:25,820 --> 00:32:27,180 >> Kaya sabihin gawin ito muli. 735 00:32:27,180 --> 00:32:29,310 Siguro ako lamang ay hindi ito tumatakbo karapatan. 736 00:32:29,310 --> 00:32:32,010 Tumakbo muli Walang Swap Kaya ipaalam. 737 00:32:32,010 --> 00:32:32,900 Siguro I-- no. 738 00:32:32,900 --> 00:32:34,400 Kaya lamang ito ay hindi gumagana. 739 00:32:34,400 --> 00:32:36,060 Kaya sabihin gawin ang isang maliit katinuan suriin. 740 00:32:36,060 --> 00:32:39,690 Hayaan akong magpatuloy dito sa Swap at idagdag lamang, maghintay ng isang minuto, 741 00:32:39,690 --> 00:32:43,856 isang ay% i / n at sabihin plug-in sa halaga ng isang. 742 00:32:43,856 --> 00:32:45,730 Dahil gusto ko talagang upang makita kung ano ang nangyayari sa. 743 00:32:45,730 --> 00:32:47,570 At sa katunayan, ito ay isang debugging pamamaraan 744 00:32:47,570 --> 00:32:50,028 na maaaring gumagamit ka sa oras ng opisina o sa naka-bahay, 745 00:32:50,028 --> 00:32:53,560 maihahalintulad sa mga unang kalahati ng Dan Video Armendariz sa PSET3 746 00:32:53,560 --> 00:32:56,870 kung saan ipinakilala namin print def bilang isang inirekumendang pamamaraan, ng hindi bababa sa 747 00:32:56,870 --> 00:32:58,080 para sa mga simpleng mga kaso. 748 00:32:58,080 --> 00:33:01,720 Hayaan akong magpatuloy at patakbuhin ang gumawa muling swap, ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Kawili-wili. 751 00:33:05,840 --> 00:33:11,670 Kaya kung ano ang paunawa ay tila na maging totoo. x ay 1, y ay 2, ngunit isang ay 2 kapag b ay 1. 752 00:33:11,670 --> 00:33:16,790 Kaya ang mga dalawang paanuman got swapped ngunit x at y ay hindi nagsisimula swapped. 753 00:33:16,790 --> 00:33:21,090 Kaya upang maging malinaw, kung ano ang nangyayari ay, hanggang dito ko x at y 754 00:33:21,090 --> 00:33:25,380 at ang mga iyon ay mga variable lokal sa saklaw ng main, ako pagpasa sa x at y 755 00:33:25,380 --> 00:33:26,170 magpalit. 756 00:33:26,170 --> 00:33:29,080 Ngayon, swap, bilang isang hiwalay na function, ay atubili na tumawag sa mga argumento nito 757 00:33:29,080 --> 00:33:30,590 o ang kanyang mga parameter anumang bagay na ito ay nais. 758 00:33:30,590 --> 00:33:33,280 Foo o bar o xoyo isa o b. 759 00:33:33,280 --> 00:33:36,870 Lamang upang gumawa ng malinaw na ang mga ito hindi katulad sa x at y per se, 760 00:33:36,870 --> 00:33:38,020 Sinabi ko na ang isang at b. 761 00:33:38,020 --> 00:33:40,040 Ngunit kami ay maaaring tumawag sa kanila ang anumang bagay na gusto namin. 762 00:33:40,040 --> 00:33:43,960 >> At kaya mukhang swap ay lumipas 763 00:33:43,960 --> 00:33:48,980 x-- AKA a-- at ito ay na dumaan y-- AKA b. 764 00:33:48,980 --> 00:33:51,900 Kahit paano ang mga tatlong linya ay ng pagpapalit sa mga halaga iyon eksakto 765 00:33:51,900 --> 00:33:53,510 bilang Lauren ang ginawa na may gatas at OJ. 766 00:33:53,510 --> 00:33:56,010 Ngunit kapag i-print out namin ang mga halaga, at isang b 767 00:33:56,010 --> 00:34:01,340 sa katunayan ay magpalitan ngunit x at y walang pagbabago sa mga ito. 768 00:34:01,340 --> 00:34:03,150 Alalahanin na x at y ay up dito. 769 00:34:03,150 --> 00:34:05,320 >> Kaya maaari naming makita ito sa pamamagitan ng isa pang pamamaraan pati na rin. 770 00:34:05,320 --> 00:34:08,110 At ito masyadong ay isang pamamaraan naka-embed sa hanay ng problema tatlo. 771 00:34:08,110 --> 00:34:10,780 Sabihin sige at gawin ito sa CS50 ID kung hindi mo pa nagagawa. 772 00:34:10,780 --> 00:34:13,730 Sa kanang bahagi namin magkaroon ng ganitong tab Debugger. 773 00:34:13,730 --> 00:34:16,159 At kung bubuksan mo ito up, mayroong ilang arcane impormasyon 774 00:34:16,159 --> 00:34:17,530 na itinapon sa una sa iyo. 775 00:34:17,530 --> 00:34:19,310 Ngunit sabihin mang-ulol na ito bukod real mabilis ipaalam. 776 00:34:19,310 --> 00:34:21,620 >> Kaya isa, makikita mo lokal na variable. 777 00:34:21,620 --> 00:34:26,230 Ino-out na bumuo sa CS50 IDE, at isang pulutong ng mga kapaligiran programming pa 778 00:34:26,230 --> 00:34:28,060 sa pangkalahatan, ay isang debugger. 779 00:34:28,060 --> 00:34:31,340 Ang isang tool na nagbibigay-daan sa iyo upang makita ang biswal kung ano ang nangyayari sa loob ng inyong programa 780 00:34:31,340 --> 00:34:34,380 nang hindi sa resort sa pagdagdag printfs at pag-ipon at tumatakbo 781 00:34:34,380 --> 00:34:37,588 at pagdaragdag ng printf at ipon at pagtakbo, kung saan ay mayroon, sa mga oras ng opisina 782 00:34:37,588 --> 00:34:40,070 o sa bahay, ay marahil nakakakuha ng medyo nakakapagod. 783 00:34:40,070 --> 00:34:43,090 >> Kaya dito, sa sandali lamang, hindi namin pagpunta sa makita sa real time 784 00:34:43,090 --> 00:34:44,760 ang mga halaga ng aming mga lokal na variable. 785 00:34:44,760 --> 00:34:47,880 Kami rin ay pagpunta sa ma-set ano ang tinatawag na breakpoints saan 786 00:34:47,880 --> 00:34:52,570 mga pagkakataon sa aking mga programa upang i-pause pagpapatupad sa isang tiyak na linya ng code 787 00:34:52,570 --> 00:34:53,710 na ako ng kakaiba tungkol sa. 788 00:34:53,710 --> 00:34:54,210 Right? 789 00:34:54,210 --> 00:34:55,969 Ang mga programang ito tatakbo sa isang ikalawang hati. 790 00:34:55,969 --> 00:35:00,450 Ito ay uri ng maganda para sa amin mas mabagal mga kawani na tao para ma-pause, maglaan ng ilang sandali, tingnan ang 791 00:35:00,450 --> 00:35:02,380 kung ano ang nangyayari sa paligid sa isang tiyak na linya ng code 792 00:35:02,380 --> 00:35:05,050 nang walang pag-aararo program sa pamamagitan ng ito at pagtatapos ng lahat. 793 00:35:05,050 --> 00:35:08,510 Kaya ang isang breakpoints pagpunta sa nagpapahintulot sa amin upang masira at i-pause sa tiyak na punto. 794 00:35:08,510 --> 00:35:12,990 >> Call stack ay isang magarbong paraan ng sinasabi kung ano ang function ay kasalukuyang 795 00:35:12,990 --> 00:35:14,140 natawag sa sandaling ito. 796 00:35:14,140 --> 00:35:15,370 Main ay laging unang tinatawag. 797 00:35:15,370 --> 00:35:17,230 Ngunit kung Main tawag sa isang function na tinatawag Swap, 798 00:35:17,230 --> 00:35:20,470 aktwal na kami ay pagpunta upang makita ito tower ng mga function na ay 799 00:35:20,470 --> 00:35:22,400 tinatawag sa reverse magkakasunod. 800 00:35:22,400 --> 00:35:23,310 Kaya tingnan natin iyon. 801 00:35:23,310 --> 00:35:24,327 >> Pupunta ako upang mag-zoom out. 802 00:35:24,327 --> 00:35:25,660 Pupunta ako sa bumalik sa aking code. 803 00:35:25,660 --> 00:35:27,540 At dahil gusto ko lang na pilosopo dito, 804 00:35:27,540 --> 00:35:31,100 Pupunta ako sa sige, at i-click ang lamang sa kaliwa ng limang linya. 805 00:35:31,100 --> 00:35:32,830 At iyon ay lumilikha ng isang pulang tuldok. 806 00:35:32,830 --> 00:35:36,200 At mapansin sa kanang bahagi ng kamay na nakakaalam ng debugger, hey, 807 00:35:36,200 --> 00:35:41,020 Lang ang sinabi ko ng isang breakpoint sa noswap.c line limang, partikular 808 00:35:41,020 --> 00:35:42,480 sa ganitong linya ng code. 809 00:35:42,480 --> 00:35:45,090 Kaya alam ang debugger na ako Hiniling mo na ang susunod na oras 810 00:35:45,090 --> 00:35:48,530 Tumakbo ang aking mga ito program pause execution doon sa halip na lamang 811 00:35:48,530 --> 00:35:50,390 tumatakbo ang buong bagay napakabilis na. 812 00:35:50,390 --> 00:35:53,889 >> Kaya ngayon ako pagpunta sa i-click ang Debug button sa pinakatuktok ng IDE 813 00:35:53,889 --> 00:35:55,430 at na ang pagpunta sa gawin ang mga sumusunod. 814 00:35:55,430 --> 00:36:00,680 Ito ay pagpunta upang buksan ang isang una medyo nakakatakot na naghahanap ng pangalawang terminal window-- 815 00:36:00,680 --> 00:36:02,679 remote debugging mula host tulad at such-- 816 00:36:02,679 --> 00:36:04,970 at kami ay bumalik sa kung ano ang nangangahulugan na ang lahat na bago ang haba. 817 00:36:04,970 --> 00:36:09,020 Ngunit kung ano ang mahalaga para sa ngayon ay na na pulang tuldok ay hit, 818 00:36:09,020 --> 00:36:11,735 ang debugger ay sadyang Naka-pause ang execution-- 819 00:36:11,735 --> 00:36:15,560 hindi sa linya na per se ngunit sa unang linya ng aktwal na code sa na function. 820 00:36:15,560 --> 00:36:18,040 At iyon ang dahilan kung bakit pitong linya ay ngayon naka-highlight sa dilaw. 821 00:36:18,040 --> 00:36:20,550 >> At ngayon hayaan ang isang pagtingin sa kanang bahagi. 822 00:36:20,550 --> 00:36:27,300 Tila, sa pamamagitan ng default, mabuti sapat, x ay may kung ano ang halaga? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 At y may kung ano ang halaga? 825 00:36:29,750 --> 00:36:30,410 Zero. 826 00:36:30,410 --> 00:36:35,540 At iyon na inaasahan sa kamalayan na x at y-- na dilaw line-- ay 827 00:36:35,540 --> 00:36:36,770 Hindi pa naisakatuparan. 828 00:36:36,770 --> 00:36:38,510 Kaya x ay hindi dapat magkaroon ang halaga 1. 829 00:36:38,510 --> 00:36:41,470 Maaaring magkaroon ng anumang iba pang mga halaga, isang tinatawag na halaga ng basura. 830 00:36:41,470 --> 00:36:44,320 At nakuha namin sa mapalad na ito ay zero sa puntong ito, mahalagang. 831 00:36:44,320 --> 00:36:46,400 >> Kaya ngayon ay may lamang ng ilang buttons kailangan namin upang pag-aalaga 832 00:36:46,400 --> 00:36:48,100 tungkol sa kapag debugging sa ganitong paraan. 833 00:36:48,100 --> 00:36:49,970 Pansinin dito, kami ay may isang pindutan ng play. 834 00:36:49,970 --> 00:36:51,877 At kung i-play namin o pindutin ipagpatuloy, ito lamang 835 00:36:51,877 --> 00:36:53,710 pagpunta upang tumakbo sa pamamagitan ang natitirang bahagi ng programa 836 00:36:53,710 --> 00:36:55,300 o hanggang umabot sa ito sa isa pang breakpoint. 837 00:36:55,300 --> 00:36:56,910 Ngunit hindi ko na-set sa anumang iba pang breakpoints kaya lang 838 00:36:56,910 --> 00:36:58,118 pagpunta upang tumakbo sa pamamagitan ng dulo. 839 00:36:58,118 --> 00:37:00,280 Na uri ng mga pagkatalo ang layunin ng poking sa paligid. 840 00:37:00,280 --> 00:37:03,290 >> Kaya sa halip, mahalaga ko tungkol sa mga icon na ito sa kanan. 841 00:37:03,290 --> 00:37:05,360 At kung mag-hover ko sa ibabaw ang mga ito, tulad ng dapat mo rin, 842 00:37:05,360 --> 00:37:07,450 makakakita ka ng maliit na tips-- tool tips. 843 00:37:07,450 --> 00:37:09,020 Isa na ito ay hakbang sa ibabaw. 844 00:37:09,020 --> 00:37:11,290 Ngayon na ay hindi nangangahulugan na laktawan ang mga sumusunod na linya ng code. 845 00:37:11,290 --> 00:37:14,840 Iyon ay nangangahulugan lamang maipatupad ito at lumipat sa susunod na, lumipat sa susunod, 846 00:37:14,840 --> 00:37:15,580 lumipat sa susunod. 847 00:37:15,580 --> 00:37:17,610 Sa ibang salita, sa pamamagitan ng pindutan na, maaari ba akong maglakad 848 00:37:17,610 --> 00:37:20,390 sa pamamagitan ng aking code sa isang hakbang sa isang pagkakataon. 849 00:37:20,390 --> 00:37:21,914 Line sa pamamagitan ng linya, literal. 850 00:37:21,914 --> 00:37:23,830 Ngayon, sa kanan ng na iyon, may isa pa 851 00:37:23,830 --> 00:37:25,163 na namin makita sa sandali lamang. 852 00:37:25,163 --> 00:37:27,820 Ito ay ang tinatawag na Hakbang Sa icon na 853 00:37:27,820 --> 00:37:30,300 pagpunta sa payagan ako dive sa ibang function. 854 00:37:30,300 --> 00:37:31,800 Ngunit sabihin makita ito sa ilang sandali lamang. 855 00:37:31,800 --> 00:37:33,280 Kaya ako pagpunta sa i-click ang hakbang sa ibabaw. 856 00:37:33,280 --> 00:37:35,820 At ngayon paunawa, bilang nag-click ako ang pindutan na ito sa kanang-itaas, 857 00:37:35,820 --> 00:37:41,260 panatilihin ang iyong mga mata sa humigit-kumulang sa ilalim ng Local Variable at makita kung ano ang mangyayari sa x. 858 00:37:41,260 --> 00:37:44,115 x ay ngayon 1 dahil ang dilaw na linya ay naisakatuparan ngayon 859 00:37:44,115 --> 00:37:45,840 at nagbigay kami inilipat sa 8 linya. 860 00:37:45,840 --> 00:37:49,840 At sa loob lamang ng isang sandali y dapat sana ay naging 2. 861 00:37:49,840 --> 00:37:52,330 >> Ngayon, wala na ang mga kagiliw-giliw mangyayari para sa isang bit. 862 00:37:52,330 --> 00:37:53,390 Ang lahat ng ito ay ay printf. 863 00:37:53,390 --> 00:37:58,010 At mapansin, sa aking pangalawang terminal window, nakikita ko ang output ng print def. 864 00:37:58,010 --> 00:38:01,080 At ngayon ko bang gumawa ng isang desisyon bilang mga programmer. 865 00:38:01,080 --> 00:38:04,360 Maaari ko bang hakbang sa linya na ito ng code, Isinasagawa ang mga ito ngunit hindi 866 00:38:04,360 --> 00:38:06,220 pagkuha ng kakaiba tungkol sa kung ano ang nasa loob. 867 00:38:06,220 --> 00:38:11,130 O maaari ko talagang hakbang sa ito at pumunta sa loob ng Swap mismo. 868 00:38:11,130 --> 00:38:12,340 Kaya sabihin gawin sa huli. 869 00:38:12,340 --> 00:38:15,550 >> Hayaan akong magpatuloy at i-click ang Hindi Tumawid ngunit Hakbang Sa. 870 00:38:15,550 --> 00:38:17,300 Paunawa, ang lahat ng isang biglaang ang mga pagbabago window 871 00:38:17,300 --> 00:38:19,330 upang i-highlight ang unang linya ng code sa Swap. 872 00:38:19,330 --> 00:38:20,710 Iyan ay 21 linya. 873 00:38:20,710 --> 00:38:25,220 At ngayon, kung ano ang uri ng funky ay na, kung ikaw ay tumingin sa paglipas dito, tulad ng inaasahan, 874 00:38:25,220 --> 00:38:29,720 isang kuwit b ay 1 at 2, ayon sa pagkakabanggit. 875 00:38:29,720 --> 00:38:33,840 Bakit temp 32,767? 876 00:38:33,840 --> 00:38:36,560 Recalling na temp, magkano ang gusto ang walang laman na tasa ng ilang sandali ang nakalipas, 877 00:38:36,560 --> 00:38:38,980 ay ipinahayag dito sa 21 linya. 878 00:38:38,980 --> 00:38:43,390 Bakit 32,000- Ibig kong sabihin, kung bakit ito lamang ang ilang mga kakaibang halaga? 879 00:38:43,390 --> 00:38:43,890 Oo? 880 00:38:43,890 --> 00:38:45,190 >> Madla: Ito ay hindi nasimulan. 881 00:38:45,190 --> 00:38:46,940 >> David J. MALAN: Ito ay hindi pa nasimulan. 882 00:38:46,940 --> 00:38:49,370 Kaya aming mga computer na laging may pisikal na memory. 883 00:38:49,370 --> 00:38:50,544 Palaging Ito ay may pisikal na RAM. 884 00:38:50,544 --> 00:38:52,710 At may laging zero ni at isa ang doon, di ba? 885 00:38:52,710 --> 00:38:54,626 Dahil kami ay gumagamit ng aming mga buong araw computer, 886 00:38:54,626 --> 00:38:57,210 ginagamit mo ang CS50 IDE o sa mga server sa buong araw. 887 00:38:57,210 --> 00:39:01,159 Kaya na RAM alinman ay may ilang mga zero o ilang isa o ilang mga zero at mga. 888 00:39:01,159 --> 00:39:02,950 Hindi mahalaga kung o hindi ka gumagamit ng mga ito. 889 00:39:02,950 --> 00:39:05,270 Hindi ka na magkaroon ng blangko mga puwang kung saan mo nais bits. 890 00:39:05,270 --> 00:39:06,850 Ang mga ito ay alinman sa zero at mga. 891 00:39:06,850 --> 00:39:09,610 >> Kaya ito ay lumiliko out na ang temp, dahil hindi na namin pa nasimulan ito, 892 00:39:09,610 --> 00:39:14,580 kami ay may 32 bit mga ngunit sila ay hindi initialize sa anumang halaga na kilala. 893 00:39:14,580 --> 00:39:18,110 Kaya kahit na ano sila ay pinaka kamakailang ginamit for-- mga 32 bits-- 894 00:39:18,110 --> 00:39:23,000 lang namin nakikita ang artifacts ng ilang nakaraang paggamit ng mga partikular na mga 32 895 00:39:23,000 --> 00:39:23,500 bits. 896 00:39:23,500 --> 00:39:27,780 Sa sandaling nag-click ako Tumawid bagaman, phew, temp ay pagpunta upang makuha ang halaga 1. 897 00:39:27,780 --> 00:39:31,600 At kung ito ang gagawin ko muli, ang isang ay pagpunta sa ay bibigyan ng halaga 2 898 00:39:31,600 --> 00:39:33,830 at pagkatapos ay b ay pagpunta sa ay bibigyan ng halaga 1. 899 00:39:33,830 --> 00:39:36,390 >> At kaya kung ano ang magaling na ngayon sa puntong ito sa kuwento 900 00:39:36,390 --> 00:39:39,750 ay na ang debugger ay nagpapakita sa akin, sobrang dahan-dahan 901 00:39:39,750 --> 00:39:42,640 sa aking sarili mong bilis, kung ano ang estado ng Swap ay. 902 00:39:42,640 --> 00:39:47,490 Ngunit paunawa sa tuktok dito, notice na ang stack ng tawag talaga 903 00:39:47,490 --> 00:39:49,180 ay may dalawang mga layer na ito. 904 00:39:49,180 --> 00:39:53,240 Ngayon ang isa na naka-highlight bilang Swap, kung sa halip-click ako sa Main, 905 00:39:53,240 --> 00:39:57,100 paunawa kung paano baguhin ang mga lokal na mga variable dahil maaari lamang lumukso ang mga developer 906 00:39:57,100 --> 00:39:59,740 paligid at pumunta sa anumang ibang saklaw. 907 00:39:59,740 --> 00:40:04,070 Kaya kahit na ginagawa namin ang lahat ng ito trabaho at tama ng pagpapalit ng isang at b, 908 00:40:04,070 --> 00:40:09,080 kung pumunta ako pabalik-balik sa pagitan Swap kung saan ang isang ay 2 at b ay 1 at Main, 909 00:40:09,080 --> 00:40:11,851 Matagal Pangunahing naapektuhan sa lahat? 910 00:40:11,851 --> 00:40:12,350 Hindi. 911 00:40:12,350 --> 00:40:13,930 Kaya kung ano ang takeaway dito? 912 00:40:13,930 --> 00:40:18,200 Well, ito lumiliko na anumang oras tumawag ka ng isang function tulad Swap, 913 00:40:18,200 --> 00:40:21,600 at ipasa mo ito arguments, kung ano kayo ay dumadaan sa Swap function na 914 00:40:21,600 --> 00:40:24,730 sa kasong ito ay isang kopya ng mga argumento. 915 00:40:24,730 --> 00:40:28,620 Kaya kung x at y ay bawat ayon sa pagkakabanggit 32 bits, ano Swap ay nakakakuha 916 00:40:28,620 --> 00:40:30,760 ay dalawang bagong lokal na variable, o mga argument, 917 00:40:30,760 --> 00:40:34,380 tinatawag na isang at b-- ngunit ang mga ay arbitrary names-- ngunit ang pattern ng mga zero 918 00:40:34,380 --> 00:40:39,520 at sa buhay sa loob ng isang at b ay may linya up upang maging katulad sa x at y 919 00:40:39,520 --> 00:40:42,610 ngunit ang mga ito ay hindi ang parehong bagay tulad ng x at y. 920 00:40:42,610 --> 00:40:46,880 >> Ito ay parang Main ay sa kanyang piraso ng papel ang numero 1 at 2 para sa x at y, 921 00:40:46,880 --> 00:40:49,260 at pagkatapos ay kapag ito kamay na piraso ng papel upang magpalitan, 922 00:40:49,260 --> 00:40:51,970 Swap masyadong mabilis ang makakakuha kanyang sariling panulat, magsusulat down 923 00:40:51,970 --> 00:40:56,240 1 at 2 sa sarili nitong sheet ng papel, kamay-back ang orihinal xy sa Main 924 00:40:56,240 --> 00:40:58,790 at pagkatapos ay sa kanyang sariling bagay na may isang at b. 925 00:40:58,790 --> 00:41:01,940 At ito ay ngayon sobrang mahalaga dahil na ito ay may nontrivial implikasyon 926 00:41:01,940 --> 00:41:06,260 para sa aktwal na pagsusulat tamang code dahil ito ay tila hindi namin maaaring magpalitan 927 00:41:06,260 --> 00:41:07,500 dalawang variable. 928 00:41:07,500 --> 00:41:09,150 >> Ako ay may nakasulat na isang tamang function Swap. 929 00:41:09,150 --> 00:41:12,770 Ipinatupad namin ang mga ito sa Lauren bilang isang tamang pag-andar swap sa katotohanan, 930 00:41:12,770 --> 00:41:16,700 ngunit tila wala sa mga iyon mga bagay na kung ikaw ay hindi na talaga 931 00:41:16,700 --> 00:41:19,530 permanente magpalitan ng dalawang mga halaga. 932 00:41:19,530 --> 00:41:21,970 Kaya kailangan namin ng isa pang paraan sa aktwal na makakuha sa ito, 933 00:41:21,970 --> 00:41:24,472 at kailangan namin upang ma- aktwal na malutas ang problemang ito. 934 00:41:24,472 --> 00:41:27,180 At ito ay lumiliko out-- at kami ay bumalik sa mga ito partikular na larawan 935 00:41:27,180 --> 00:41:30,500 bago long-- ito ay isang paraan na maaari kang maglabas ng memory ng iyong computer. 936 00:41:30,500 --> 00:41:31,460 Ito ay isang parihaba lamang. 937 00:41:31,460 --> 00:41:32,960 Maaari mo itong maglabas ng anumang bilang ng mga paraan ngunit ito ay 938 00:41:32,960 --> 00:41:35,740 maginhawa upang gumuhit ng mga ito bilang isang rektanggulo para sa mga sumusunod na dahilan. 939 00:41:35,740 --> 00:41:40,040 >> Kami ay pagpunta sa simulan ngayon at sa hinaharap pakikipag-usap tungkol sa tinatawag na stack. 940 00:41:40,040 --> 00:41:43,870 At ang mga stack ay isang tipak lamang ng RAM-- isang tipak ng na memorya 941 00:41:43,870 --> 00:41:47,100 na ang mga function ng access na kapag sila ay tinatawag na. 942 00:41:47,100 --> 00:41:49,800 At kaya ito ay lumiliko out na sa pinakailalim ng stack 943 00:41:49,800 --> 00:41:53,590 ay kung saan ang lahat ng lokal na mga variable Main ni at org C at org V at ang lahat ng mga bagay-bagay na 944 00:41:53,590 --> 00:41:56,950 ay pagpunta sa pumunta sa pamamagitan ng default. At kung Main tawag sa ibang mga pag-andar tulad ng Swap, 945 00:41:56,950 --> 00:42:00,330 well, Swap ay pagpunta upang makakuha ng isa pang layer ng memory up sa itaas nito. 946 00:42:00,330 --> 00:42:04,490 >> At kaya lang na magbigay sa iyo ng isang mabilis na mabilis larawan ng mga ito, kung pumunta ako sa ibabaw here-- 947 00:42:04,490 --> 00:42:09,450 at ipaalam sa akin mirror na ito sa overhead bilang well-- kung ano talaga ang mayroon ako, 948 00:42:09,450 --> 00:42:12,100 kung mahalaga lamang namin ang tungkol sa mga ibaba ng larawan na ito sa ngayon, 949 00:42:12,100 --> 00:42:15,070 ay na kapag nagpatakbo ako ng isang programa at Main makakakuha ng tinatawag na, 950 00:42:15,070 --> 00:42:18,330 Main ay bibigyan ng isang tipak ng RAM sa aking computer na ito ay 951 00:42:18,330 --> 00:42:20,060 sa ibaba ng ito sa tinatawag na stack. 952 00:42:20,060 --> 00:42:22,143 At ako pagpunta sa gumuhit ito kusa bilang isang parisukat. 953 00:42:22,143 --> 00:42:24,540 Kaya ito ay tulad ng 32 bits o apat na bytes. 954 00:42:24,540 --> 00:42:28,790 At kung ito pangunahing function ay may isang variable na tinatawag na x na may isang halaga ng 1 955 00:42:28,790 --> 00:42:32,626 at ito ay isang variable na tinatawag na y sa mga halaga ng 2, na ang 956 00:42:32,626 --> 00:42:35,750 tulad ng pagkuha ito magtilad ng memorya na Pangunahing ito ay ibinigay sa pamamagitan ng mga operating 957 00:42:35,750 --> 00:42:38,850 system at naghahati up ito sa gayon ay dito napupunta ang unang lokal na variable, 958 00:42:38,850 --> 00:42:40,930 ang ikalawang isa dito napupunta, at na ang mga ito. 959 00:42:40,930 --> 00:42:45,590 >> Kapag Main tawag Swap, Swap makakakuha ng kanyang sariling slice ng memory 960 00:42:45,590 --> 00:42:48,280 na kami gumuhit tulad nito mula sa operating system, 961 00:42:48,280 --> 00:42:50,820 at ito ay pagpunta sa may nito sariling lokal na mga variable na batay 962 00:42:50,820 --> 00:42:53,825 sa aming mga pagpapatupad ng mas maaga sa mga lokal na mga variable ng 963 00:42:53,825 --> 00:42:58,010 at b na sa una makuha ang mga halaga ng 1 at 2. 964 00:42:58,010 --> 00:43:00,450 Ngunit pagkatapos, sa lalong madaling ang Swap code executes, 965 00:43:00,450 --> 00:43:03,760 at Lauren talagang swaps ang OJ at gatas, kung ano ang nangyayari? 966 00:43:03,760 --> 00:43:09,030 Well, ang 2 ay nagiging isang 1, ito 1 ay nagiging isang 2, at, sa pamamagitan ng ang paraan, 967 00:43:09,030 --> 00:43:13,360 mayroong isang temp variable na pagiging ginagamit na buong panahon na ang huli 968 00:43:13,360 --> 00:43:14,470 umaalis. 969 00:43:14,470 --> 00:43:16,720 Ngunit ito ay hindi mahalaga kung magkano ang trabaho mo 970 00:43:16,720 --> 00:43:22,160 sa linya na ito of-- sa puwang na ito memory, x at y ay ganap na hindi nagalaw. 971 00:43:22,160 --> 00:43:26,320 >> Kaya kailangan namin ng ilang mga paraan ng pagbibigay Pagpalitin at pag-andar tulad ng ito 972 00:43:26,320 --> 00:43:32,640 lihim na pag-access, kung ikaw ay, upang function like-- sa memory tulad ng x at y. 973 00:43:32,640 --> 00:43:35,110 Kaya sabihin kumuha ng isang pagtingin sa isang halimbawa na tumutulong sa 974 00:43:35,110 --> 00:43:38,220 sa amin makita kung ano mismo ang nangyaring nangyayari ito sa buong panahon. 975 00:43:38,220 --> 00:43:40,284 Pupunta ako sa sige at buksan up Ihambing Zero. 976 00:43:40,284 --> 00:43:42,200 At ako pagpunta upang isara aming debugger, pupuntahan ko 977 00:43:42,200 --> 00:43:44,360 upang isara ang nakakatakot na naghahanap ng mensahe ang lang sabi, maghintay ng isang minuto, 978 00:43:44,360 --> 00:43:45,800 ikaw ay nasa gitna ng pag-debug. 979 00:43:45,800 --> 00:43:48,383 Pupunta ako upang itago ang tab na ito dito lamang na bumalik sa pagiging simple. 980 00:43:48,383 --> 00:43:50,160 Kaya huwag mag-alala kung GDB ay pinatay. 981 00:43:50,160 --> 00:43:53,910 Iyon ay nangangahulugan lamang na ang programa ay tinanggal umalis, kusa sa kasong ito, 982 00:43:53,910 --> 00:43:54,820 gawa ko. 983 00:43:54,820 --> 00:43:57,700 >> At ngayon Ihambing Ginagawa ito sa Zero. 984 00:43:57,700 --> 00:44:00,110 Ako gamit ang CS50 library sa standard I / O. 985 00:44:00,110 --> 00:44:04,319 Mayroon akong isang pangunahing pag-andar na unang sabi, sabihin ng isang bagay, at makakakuha ng isang string. 986 00:44:04,319 --> 00:44:06,110 Pagkatapos ay sinasabi nito muli at makakakuha ng isa pang string. 987 00:44:06,110 --> 00:44:09,910 At mapansin na ito ng dalawang mga string ay tinatawag na s at t, ayon sa pagkakabanggit. 988 00:44:09,910 --> 00:44:12,910 At ngayon sa programang ito, Ihambing Zero, kanyang layunin sa buhay, 989 00:44:12,910 --> 00:44:15,470 ito ay dapat na sabihin sa akin, hindi ko type ang mga parehong bagay? 990 00:44:15,470 --> 00:44:16,910 At kaya ako balik sa isang linggo. 991 00:44:16,910 --> 00:44:19,950 Gumagamit ako ng aking pantay pantay na operator kung saan ay ang kalidad ng operator. 992 00:44:19,950 --> 00:44:22,220 Hindi ang assignment operator, ang pagkakapantay-pantay operator. 993 00:44:22,220 --> 00:44:23,890 Ako ng paghahambing lamang s at t. 994 00:44:23,890 --> 00:44:27,470 >> Kaya sabihin aktwal na magpatuloy at gawin ito. 995 00:44:27,470 --> 00:44:32,680 At ako pagpunta sa sige at gumawa ng Ihambing Zero. 996 00:44:32,680 --> 00:44:35,110 Pupunta ako sa gawin ./comparezero. 997 00:44:35,110 --> 00:44:37,150 At ako pagpunta upang pumunta maaga at sabihin ang isang bagay 998 00:44:37,150 --> 00:44:43,450 like, gagawin ni mom in lowercase ipaalam at kung paano tungkol sa ina sa uppercase. 999 00:44:43,450 --> 00:44:45,034 At syempre kong i-type ang iba't ibang bagay. 1000 00:44:45,034 --> 00:44:45,533 Lahat tama. 1001 00:44:45,533 --> 00:44:46,570 Iyan ay na inaasahan. 1002 00:44:46,570 --> 00:44:47,640 >> Tumakbo itong muli. 1003 00:44:47,640 --> 00:44:49,740 Parehong beses gawin lowercase, lowercase. 1004 00:44:49,740 --> 00:44:51,490 Na mukhang super magkapareho sa akin. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 SIGE. 1007 00:44:53,430 --> 00:44:55,804 Siguro ito ay kakaiba dahil lang hindi ito gustuhin ang aking grammar. 1008 00:44:55,804 --> 00:44:59,930 Kaya sabihin gawin ang isang capital MOM ipaalam, capital MOM, magkapareho. 1009 00:44:59,930 --> 00:45:01,490 Iba't-ibang mga bagay-bagay. 1010 00:45:01,490 --> 00:45:03,907 >> Kaya bakit ay na? 1011 00:45:03,907 --> 00:45:06,240 Well, kung ano ang aktwal na pagpunta sa ilalim ng hood dito? 1012 00:45:06,240 --> 00:45:08,180 Kaya sabihin bumalik sa paglipas ng dito para sa isang sandali lamang 1013 00:45:08,180 --> 00:45:10,910 at isaalang-alang kung ano ang GetString ay talagang ginagawa. 1014 00:45:10,910 --> 00:45:13,385 Kapag tumawag ka GetString, na ang isang pag-andar namin 1015 00:45:13,385 --> 00:45:16,510 Isinulat ang ating sarili at ito sa anumang paraan ay makakakuha ng isang pagkakasunod-sunod ng mga character mula sa user. 1016 00:45:16,510 --> 00:45:20,280 At ipagpalagay na ang unang hayaan oras na tawagan ako GetString, na nagbibigay sa akin 1017 00:45:20,280 --> 00:45:21,930 isang tipak ng memory na ganito ang hitsura. 1018 00:45:21,930 --> 00:45:26,990 At kung nag-type ko sa lahat ng maliit m-o-M-- at kung ano ang napupunta pagkatapos na ito? 1019 00:45:26,990 --> 00:45:28,840 Lamang ng isang mabilis na check katinuan. 1020 00:45:28,840 --> 00:45:29,780 >> Backslash zero. 1021 00:45:29,780 --> 00:45:30,510 Alam natin na ang. 1022 00:45:30,510 --> 00:45:32,784 At isipin na kami nag-play sa paligid na may pangalan Zamila ni 1023 00:45:32,784 --> 00:45:34,950 at isang bungkos ng iba pang mga pangalan kapag Rob ay dito naghahanap 1024 00:45:34,950 --> 00:45:36,280 sa kung ano ang nangyayari sa loob ng memory. 1025 00:45:36,280 --> 00:45:37,780 Kaya na kuwento ay eksaktong kapareho. 1026 00:45:37,780 --> 00:45:40,160 Ito ay kung ano GetString ay bumabalik sa akin. 1027 00:45:40,160 --> 00:45:44,780 Ngayon, ang aking code sa isang sandali ang nakalipas na naka-imbak ang return halaga ng GetString 1028 00:45:44,780 --> 00:45:47,510 sa isang variable na tinatawag s. 1029 00:45:47,510 --> 00:45:51,390 At pagkatapos ay ang pangalawang pagkakataon na tinatawag na ito, ito na naka-imbak ang mga ito sa variable na tinatawag na t a. 1030 00:45:51,390 --> 00:45:55,070 >> Kaya kung pumunta ako sa paglipas dito, kailangan ko upang gumuhit ng mga ito ng lokal variable-- 1031 00:45:55,070 --> 00:45:59,610 at ako karaniwang pagpunta sa gumuhit ng isang string bilang just-- bibigyan namin ng 1032 00:45:59,610 --> 00:46:02,360 tumawag ito s-- bilang isang maliit na square dito. 1033 00:46:02,360 --> 00:46:09,760 At ngayon, somehow-- paano gumagana mom pumunta sa loob ng variable s ito? 1034 00:46:09,760 --> 00:46:12,010 Well, kailangan namin upang bumalik sa unang prinsipyo dito. 1035 00:46:12,010 --> 00:46:15,660 Ano ang tunay na pagbabalik GetString? 1036 00:46:15,660 --> 00:46:19,030 >> Kaya ito ay lumiliko out na ang M-O-M backslash zero, at ang anumang mga numero ng 1037 00:46:19,030 --> 00:46:22,364 ng iba pang mga string sa memory tulad ng Zamila at Rob o Andy o anumang iba, 1038 00:46:22,364 --> 00:46:24,280 mga kurso sa aming RAM o memory computer. 1039 00:46:24,280 --> 00:46:27,760 At ang iyong RAM ay like-- mayroon kang isang gig ng RAM, dalawang gig ng RAM, 1040 00:46:27,760 --> 00:46:30,860 o isang bilyon o dalawang bilyong bytes, o marahil kahit na higit pa na mga araw. 1041 00:46:30,860 --> 00:46:34,070 Kaya Ipagpalagay nating, para sa mga layunin sa ngayon hayaan, na ito ay hindi mahalaga kung paano namin bilangin 1042 00:46:34,070 --> 00:46:36,640 ang mga ito, ngunit maaari naming bilangin ang bawat sa mga bilyon o dalawang bilyong 1043 00:46:36,640 --> 00:46:37,880 o apat na bilyong bytes. 1044 00:46:37,880 --> 00:46:42,240 >> At sabihin lang mang sabihin na ito ay ang unang kagat, pangalawang kagat, 1045 00:46:42,240 --> 00:46:43,380 third, ika-apat na. 1046 00:46:43,380 --> 00:46:46,570 Sadyang hindi ako gamit zero para sa araw na ito ngunit kami ay bumalik sa na. 1047 00:46:46,570 --> 00:46:49,570 Kaya sa ibang salita, kung ito ay ang unang pagkakataon ako gamit ang program, 1048 00:46:49,570 --> 00:46:52,715 Lang ako nakakakuha ng masuwerteng at ang unang kagat ay sa isang lokasyon at pagkatapos ng dalawang 1049 00:46:52,715 --> 00:46:53,590 pagkatapos ng tatlong sa apat. 1050 00:46:53,590 --> 00:46:57,430 At kung ako malinis pagguhit, number box dalawang bilyon ay magiging paraan sa paglipas dito. 1051 00:46:57,430 --> 00:47:02,200 >> Kaya kung ano ang tingin mo, pagkatapos, Aktwal na nagbabalik GetString? 1052 00:47:02,200 --> 00:47:06,010 Ito ay hindi bumabalik M-O-M backslash zero per se dahil na malinaw 1053 00:47:06,010 --> 00:47:08,180 hindi magkasya sa box na iginuhit ko. 1054 00:47:08,180 --> 00:47:11,210 Kaya ano pa ang maaaring GetString talaga bumabalik ang lahat ng mga linggo? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Ang sagot ay sa board dito sa isang lugar. 1057 00:47:16,820 --> 00:47:20,390 Hindi ka maaaring magkasya M-O-M backslash zero, kaya kung ano ang maaaring magkaroon ng kahulugan sa halip? 1058 00:47:20,390 --> 00:47:23,424 Kung ikaw ay nagkaroon na maging sobrang matalino, paglagay on ang tinatawag na sumbrero engineering, 1059 00:47:23,424 --> 00:47:24,340 kung ano ang maaari mong ibalik? 1060 00:47:24,340 --> 00:47:27,340 Ano ang hindi bababa sa halaga ng mga impormasyon maaari kang bumalik na gagawin pa rin 1061 00:47:27,340 --> 00:47:30,610 hayaan mahanap ka M-O-M sa memory? 1062 00:47:30,610 --> 00:47:31,270 Oo? 1063 00:47:31,270 --> 00:47:31,950 >> Madla: One. 1064 00:47:31,950 --> 00:47:32,200 >> David J. MALAN: One. 1065 00:47:32,200 --> 00:47:33,021 At bakit isa? 1066 00:47:33,021 --> 00:47:35,520 Madla: Dahil ito ay sabihin mo kung saan pupunta [hindi marinig]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 David J. MALAN: Eksakto. 1069 00:47:39,390 --> 00:47:44,300 Lamang ako pagpunta sa bumalik ang mga address ng string na aking nakuha. 1070 00:47:44,300 --> 00:47:46,570 Ang address na ito kaso ay lokasyon isa. 1071 00:47:46,570 --> 00:47:51,280 Kaya kung ano ang tunay na ito ay naka-imbak sa s-- at sa gayon ang bawat variable string far-- 1072 00:47:51,280 --> 00:47:53,430 ay may lamang ang address ng na string. 1073 00:47:53,430 --> 00:47:57,840 >> Samantala, kung ang tawag ko GetString sa pangalawang pagkakataon at ako 1074 00:47:57,840 --> 00:48:03,300 type sa literal ang parehong thing-- M-O-M sa lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 at ng iba pang backslash zero, at ngayon marahil ang aking programa 1076 00:48:06,200 --> 00:48:09,820 tumatakbo para sa ilang oras kaya marahil ito ay 10, ito ay ang lokasyon 11, ito ay 12, 1077 00:48:09,820 --> 00:48:10,700 ito ay 13. 1078 00:48:10,700 --> 00:48:13,590 Ang mga computer gamit ang ilan sa iba pang mga memory para sa anumang dahilan. 1079 00:48:13,590 --> 00:48:18,172 Ano ngayon ang papunta sa aking pangalawang variable sa aking t program? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Mismong. 1082 00:48:20,050 --> 00:48:23,910 >> At kaya kapag tinitingnan namin ang mga source code ng programang ito 1083 00:48:23,910 --> 00:48:26,550 kung saan lang sinusubukan ko upang ihambing ang dalawang mga halaga, 1084 00:48:26,550 --> 00:48:32,180 ay s pantay pantay sa t, kung ano ang ang malinaw na sagot ng tao? 1085 00:48:32,180 --> 00:48:34,890 Basta walang dahil 1 ay hindi katumbas ng 10. 1086 00:48:34,890 --> 00:48:36,861 At kaya narito ang isang pagkakataon para sa amin talagang 1087 00:48:36,861 --> 00:48:39,610 pumunta lamang pabalik sa, muli, una prinsipyo at isipin ang tungkol sa, well, 1088 00:48:39,610 --> 00:48:41,110 ano ang nangyayari sa ilalim ng hood? 1089 00:48:41,110 --> 00:48:43,240 Nai-uusapan natin ang tungkol mga bit at byte at memorya, 1090 00:48:43,240 --> 00:48:46,820 ngunit ito ay talagang kapaki-pakinabang upang maunawaan dahil kapag tumawag ka GetString, 1091 00:48:46,820 --> 00:48:50,280 kahit na sa tingin namin ng ito ay bumabalik M-O-M o string mom 1092 00:48:50,280 --> 00:48:53,120 o Andy o Zamila o ang gusto, technically 1093 00:48:53,120 --> 00:48:55,510 lamang ito ay bumabalik address ng na tipak ng memory. 1094 00:48:55,510 --> 00:48:56,910 >> Ngunit iyon lamang ang OK. 1095 00:48:56,910 --> 00:49:00,570 Dahil paano ko malalaman kung saan nagtatapos ang string? 1096 00:49:00,570 --> 00:49:03,840 Kung ako bibigyan lamang ng una? 1097 00:49:03,840 --> 00:49:05,380 Well, ang backslash zero, di ba? 1098 00:49:05,380 --> 00:49:08,800 Just in sa haba ng panahon maaari ko i-print out na may print def M-O-M. 1099 00:49:08,800 --> 00:49:11,820 At sa lalong madaling nakikita ko backslash zero, Wala akong pakialam kung saan ako nagsimula, 1100 00:49:11,820 --> 00:49:14,950 Na alam ko nang kataon lamang kung saan kailangan ko upang tapusin. 1101 00:49:14,950 --> 00:49:18,700 >> At kaya ngayon ay minamarkahan ang beginning-- at hayaan mo akong gawin ito kapansin-pansing dahil tayo 1102 00:49:18,700 --> 00:49:21,800 nagpunta sa pamamagitan ng isang pulutong ng mga problema sa makakuha ng mga dito pagsasanay wheels-- 1103 00:49:21,800 --> 00:49:29,840 kaya ngayon simulan ang mga gulong ng pagsasanay sa darating off at ihayag namin sa least-- 1104 00:49:29,840 --> 00:49:31,373 >> [Palakpakan] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Iyon ay nagkakahalaga ng mabuti ang trip sa Target na ito umaga, yes? 1107 00:49:36,160 --> 00:49:39,600 Kaya now-- mayroong, ito ay lumiliko out, walang bagay na tulad string. 1108 00:49:39,600 --> 00:49:41,140 String ay hindi umiiral. 1109 00:49:41,140 --> 00:49:43,760 Ito ay isang kasingkahulugan na mayroon kaming sa loob ng CS50 library. 1110 00:49:43,760 --> 00:49:48,660 Simula ngayon, kami ay pagpunta upang simulan ang pagtawag s at t hindi string ngunit char bituin. 1111 00:49:48,660 --> 00:49:51,180 At ang mga char star bibigyan namin ng mang-ulol hiwalay bago ang haba. 1112 00:49:51,180 --> 00:49:53,510 Ngunit ito ay upang sabihin, na kahit na patuloy naming 1113 00:49:53,510 --> 00:49:56,180 gamit GetString para sa ngayon, technically dapat kong 1114 00:49:56,180 --> 00:49:59,010 maging sinasabi char star at char star. 1115 00:49:59,010 --> 00:50:01,720 >> At ito ay lumiliko out kung ano na ang star ay pagpunta sa magpakilala ay isang bagay na 1116 00:50:01,720 --> 00:50:04,340 tinatawag na isang pointer o address. 1117 00:50:04,340 --> 00:50:06,110 At sa katunayan, isang teaser para sa kung ano ang namamalagi maaga 1118 00:50:06,110 --> 00:50:09,760 ay ito 20 ikalawang clip mula sa aming kaibigan Nick Parlante sa Stanford 1119 00:50:09,760 --> 00:50:12,927 sino, lubos ng ilang oras ang nakalipas, gastusin isang katotohanan na halaga ng oras, 1120 00:50:12,927 --> 00:50:15,010 bilang pinakamahusay na maaari kong sabihin sa kanyang kusina o sa kanyang basement, 1121 00:50:15,010 --> 00:50:17,140 paggawa claymation pagpapasok sa mundo 1122 00:50:17,140 --> 00:50:20,010 isang character na may pangalang Binky kung kanino kami 1123 00:50:20,010 --> 00:50:22,010 ay ipinakilala sa susunod na pagkakataon sa mga payo. 1124 00:50:22,010 --> 00:50:24,588 Kaya dito ay isang preview ng kung ano ang darating. 1125 00:50:24,588 --> 00:50:26,370 >> [Playback ng video] 1126 00:50:26,370 --> 00:50:27,510 >> -Hey, Binky. 1127 00:50:27,510 --> 00:50:28,260 Gising na. 1128 00:50:28,260 --> 00:50:30,672 Ito ay oras para sa masaya pointer. 1129 00:50:30,672 --> 00:50:31,616 >> -Ano yan? 1130 00:50:31,616 --> 00:50:33,032 Alamin ang tungkol sa mga payo? 1131 00:50:33,032 --> 00:50:34,450 Oh, mabait. 1132 00:50:34,450 --> 00:50:35,431 >> [END playback] 1133 00:50:35,431 --> 00:50:38,055 David J. MALAN: At sa na tala, kami ay nakikita mo sa Miyerkules. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Lahat tama. 1136 00:50:48,090 --> 00:50:48,740 Sinong dancing? 1137 00:50:48,740 --> 00:50:49,240 Sige na. 1138 00:50:49,240 --> 00:50:50,330 Sinong dancing? 1139 00:50:50,330 --> 00:50:51,820 Gusto mo sa akin upang makakuha ng ito nagsimula? 1140 00:50:51,820 --> 00:50:53,770 Kukunin ko ang mga ito na nagsimula. 1141 00:50:53,770 --> 00:50:54,270 Woooo! 1142 00:50:54,270 --> 00:51:04,070 1143 00:51:04,070 --> 00:51:07,580 >> LAUREN: Sweet fancy Moses.