1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> DAVID J. Malan: Tas ir CS50 un šis ir sākums nedēļas četri. 3 00:00:14,050 --> 00:00:18,630 Un, zēns, ir Volkswagen in nepatikšanas visi, jo programmatūru. 4 00:00:18,630 --> 00:00:20,264 Ļaujiet mums to apskatīt. 5 00:00:20,264 --> 00:00:20,930 [Video atskaņošana] 6 00:00:20,930 --> 00:00:25,560 -Cars, Gudrākais rakstzīmes Jo ātri un negants filmas. 7 00:00:25,560 --> 00:00:29,100 Šonedēļ Vācijas autoražotājs Volkswagen atradās 8 00:00:29,100 --> 00:00:32,490 vidū ir skandāls potenciāli noziedzīgi proporcijas. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Ir spirdzinošs miljardiem naudas sodu, iespējamās apsūdzības 10 00:00:36,060 --> 00:00:38,560 tās vadītāji, kā uzņēmums atvainojas 11 00:00:38,560 --> 00:00:41,840 par takelāžas 11 miljonus automašīnu, lai palīdzētu pārspēt emisiju testus. 12 00:00:41,840 --> 00:00:44,950 >> -Certain Dīzeļa modeļi bija paredzēts ar sarežģītu programmatūru 13 00:00:44,950 --> 00:00:48,440 kas izmantota informācija, tostarp nostāja stūres un transportlīdzekļa 14 00:00:48,440 --> 00:00:51,870 ātrums noteikt automašīna bija veikta emisijas testēšanu. 15 00:00:51,870 --> 00:00:55,650 Saskaņā ar šo apstākli, dzinējs samazinātu toksisko izmešu. 16 00:00:55,650 --> 00:00:59,070 Bet automašīna tika savienoti uz apvedceļa ka tad, kad tas tika brauc. 17 00:00:59,070 --> 00:01:03,320 Emisijas pieaudzis 10 līdz 40 reizes virs pieļaujamam līmenim EPN. 18 00:01:03,320 --> 00:01:04,280 >> [Beigtu atskaņošanu] 19 00:01:04,280 --> 00:01:05,220 >> DAVID J. Malan: Tātad pieņemsim ieskatieties šajā 20 00:01:05,220 --> 00:01:07,250 un redzēt, kā tieši tas varētu tikt īstenots 21 00:01:07,250 --> 00:01:09,680 un kā tas varētu ietekmēt tik daudz automašīnu, kā šis. 22 00:01:09,680 --> 00:01:12,840 Tātad manā rokā šeit ir prese atlaišanu, kas tika izsniegts pēc EPA-- 23 00:01:12,840 --> 00:01:14,620 Vides Protection Agency, kas 24 00:01:14,620 --> 00:01:18,032 ir ASV regulatīvā aģentūra, kas rokturi vides problēmas, 25 00:01:18,032 --> 00:01:19,740 un pēc tam faktiskā juridisks paziņojums, ka bija 26 00:01:19,740 --> 00:01:22,420 sūtīt uz Volkswagen tikai pirms dažām dienām. 27 00:01:22,420 --> 00:01:26,530 >> Tātad EPA raksta, un atklāj tagad publiski, sarežģītu programmatūras 28 00:01:26,530 --> 00:01:29,390 algoritms par dažu Volkswagen automobiļi atrod 29 00:01:29,390 --> 00:01:32,630 kad automašīna tiek veikta oficiālās emisijas testēšana 30 00:01:32,630 --> 00:01:36,505 un kļūst pilnu emisijas kontrole, tikai testa laikā. 31 00:01:36,505 --> 00:01:38,380 Efektivitātes Šie transportlīdzekļi piesārņojums 32 00:01:38,380 --> 00:01:43,260 emisijas kontroles ierīces ir ļoti samazināts visās normālas braukšanas laikā 33 00:01:43,260 --> 00:01:44,320 situācijām. 34 00:01:44,320 --> 00:01:48,190 Tas rada automašīnas, kas atbilstu standarti laboratorijā vai testēšanas 35 00:01:48,190 --> 00:01:52,790 stacija, bet normālas darbības laikā izstarot slāpekļa oxides-- vai NOx-- 36 00:01:52,790 --> 00:01:54,950 līdz pat 40 reizes standartam. 37 00:01:54,950 --> 00:01:58,220 Programmatūra, ko Volkswagen ir citāts likt pēdiņas beigās, pārveidošanas ierīci, 38 00:01:58,220 --> 00:02:00,650 kā noteikts ar Tīru Air aktu ASV. 39 00:02:00,650 --> 00:02:03,410 >> Viņi iet uz saka, ka EPA un citu aģentūra 40 00:02:03,410 --> 00:02:07,020 atklāja izslēgšanas ierīces programmatūra pēc neatkarīgas analīzes 41 00:02:07,020 --> 00:02:09,660 pētniekiem West Virginia University. 42 00:02:09,660 --> 00:02:14,160 NOx piesārņojums veicina slāpekļa dioksīda, piezemes ozons, 43 00:02:14,160 --> 00:02:15,700 un smalkās daļiņas. 44 00:02:15,700 --> 00:02:18,090 Ekspozīcijas šiem piesārņotāji ir saistīta 45 00:02:18,090 --> 00:02:20,870 ar plašu nopietnas sekas uz veselību, 46 00:02:20,870 --> 00:02:23,637 tostarp palielinot astma uzbrukumiem un citiem elpošanas 47 00:02:23,637 --> 00:02:26,470 slimības, kas var būt pietiekami nopietnas nosūtīt cilvēkus uz slimnīcu. 48 00:02:26,470 --> 00:02:28,660 Iedarbība uz ozona un daļiņas ir arī 49 00:02:28,660 --> 00:02:31,960 bijusi saistīta ar priekšlaicīgs nāves dēļ elpošanas saistīto 50 00:02:31,960 --> 00:02:35,690 vai sirds un asinsvadu saistīto ietekmi. 51 00:02:35,690 --> 00:02:38,940 Bērniem, vecākiem cilvēkiem, cilvēkiem ar preexisting elpceļu slimība 52 00:02:38,940 --> 00:02:42,840 ir īpaši riska ietekme uz veselību šo piesārņotāju. 53 00:02:42,840 --> 00:02:45,056 >> Pietiek proti, tas ir diezgan nopietni. 54 00:02:45,056 --> 00:02:46,930 Un iesim tālāk, lai lasītu tikai vēl viens fragments 55 00:02:46,930 --> 00:02:49,370 un tad mēs ņemšu apskatīt pakārtotie sekas 56 00:02:49,370 --> 00:02:50,920 no šī saistībā ar automašīnas. 57 00:02:50,920 --> 00:02:53,730 Konkrēti, Volkswagen izgatavotas un uzstādītas 58 00:02:53,730 --> 00:02:56,210 programmatūra tā saukto elektroniskā vadība 59 00:02:56,210 --> 00:02:59,320 module-- vai ECM-- no šie transportlīdzekļi, kas devējiem 60 00:02:59,320 --> 00:03:03,580 kad transportlīdzeklis tika pārbaudīta atbilstība EPA emisijas standartiem. 61 00:03:03,580 --> 00:03:07,510 Pamatojoties uz dažādām izejvielām ieskaitot stāvoklim, kad stūres rata, transportlīdzeklis 62 00:03:07,510 --> 00:03:11,280 ātrums, ilgums motora darbība, un atmosfēras spiediens, 63 00:03:11,280 --> 00:03:13,720 šīs izejvielas precīzi kāpurķēžu parametrus 64 00:03:13,720 --> 00:03:17,600 no izmantotās federālās testa procedūras emisijas testēšana EPA sertifikāciju 65 00:03:17,600 --> 00:03:18,400 mērķiem. 66 00:03:18,400 --> 00:03:21,850 >> EPA emisijas testēšanas laikā, transportlīdzekļi ECM programmatūra 67 00:03:21,850 --> 00:03:25,060 skrēja programmatūra, kas ražots atbilstošu emisiju rezultātus. 68 00:03:25,060 --> 00:03:28,340 Visos citos laikos, transportlīdzeklis ECM programmatūra 69 00:03:28,340 --> 00:03:31,090 skrēja atsevišķu ceļu kalibrēšana kas samazināja 70 00:03:31,090 --> 00:03:34,360 efektivitāti Kopējais emisiju kontroles sistēma, 71 00:03:34,360 --> 00:03:37,864 īpaši selektīvā katalītiskā samazināšana Lean NOx trap-- 72 00:03:37,864 --> 00:03:39,280 ko mēs redzēsim aptuveni pēc brīža. 73 00:03:39,280 --> 00:03:43,040 Tā rezultātā, emisijas NOx palielināts ar koeficientu no 10 līdz 40 reizēm 74 00:03:43,040 --> 00:03:47,450 virs EPN atbilstošu līmeņiem atkarībā no piedziņas cikla veida. 75 00:03:47,450 --> 00:03:50,800 >> Tātad, ko tas īsti nozīmē, un pirmkods ar programmatūru, kas darbojas 76 00:03:50,800 --> 00:03:53,190 uz Volkswagen ir ne vēl nav publiski izpausta, 77 00:03:53,190 --> 00:03:56,460 ir tas, ka, faktiski, šis ekvivalents ir kaut kur tur iekšā 78 00:03:56,460 --> 00:03:57,830 no Volkswagen kodu. 79 00:03:57,830 --> 00:04:02,200 Ja Jums tiek pārbaudīti, un, ja automašīnai atklāj dažus vides faktorus 80 00:04:02,200 --> 00:04:04,330 tāpat stūres rata amats vai kustība 81 00:04:04,330 --> 00:04:06,710 vai tās trūkuma automašīnas vai jebkuru citu faktoru skaits 82 00:04:06,710 --> 00:04:09,940 ka pašlaik hipotēze būt daļa no šo formulu, 83 00:04:09,940 --> 00:04:12,370 viņi vienkārši ieslēgt pilna emisiju kontroli. 84 00:04:12,370 --> 00:04:15,670 Citiem vārdiem sakot, viņi sāk izstaro mazāk piesārņojošo vielu. 85 00:04:15,670 --> 00:04:18,769 >> Else, jebkurā citā situācijā ja tas nav konstatēts kā 86 00:04:18,769 --> 00:04:20,790 laboratorijā, viņi vienkārši nav. 87 00:04:20,790 --> 00:04:24,320 Un lai jūs varētu vienkāršot to vērā vairāk betona pseudocode ar kaut ko 88 00:04:24,320 --> 00:04:24,820 kā šis. 89 00:04:24,820 --> 00:04:27,810 Ja riteņi ir pagrieziena, bet stūre nav, liecina 90 00:04:27,810 --> 00:04:30,060 ka auto ir par dažiem veida rotējošu cilindru 91 00:04:30,060 --> 00:04:32,550 bet sava veida noliktava tiek pārbaudīta, 92 00:04:32,550 --> 00:04:36,070 tad uzvesties kā EPA gribētu, lai jūs. 93 00:04:36,070 --> 00:04:37,960 Pretējā gadījumā nav. 94 00:04:37,960 --> 00:04:40,420 Tātad, pieņemsim to apskatīt pie īsu video, kas 95 00:04:40,420 --> 00:04:45,391 ņem apskatīt, kādas būs sekas ir tas patiesībā mehāniski. 96 00:04:45,391 --> 00:04:48,620 >> [Video atskaņošana] 97 00:04:48,620 --> 00:04:52,800 >> -Last Piektdien EPA paziņoja, ka daži Volkswagen Audi automašīnām veikti laikā no 2009. gada 98 00:04:52,800 --> 00:04:55,840 un šogad tika izmantojot ts pārveidošanas ierīci 99 00:04:55,840 --> 00:04:59,060 lai iegūtu ap emisiju likumus paredzēti, lai saglabātu gaisa tīrības. 100 00:04:59,060 --> 00:05:01,700 Bet ko tas nozīmē tieši tā? 101 00:05:01,700 --> 00:05:04,666 >> Nu, mūsdienu automobiļi ir desmitiem Datoru iekšpusē tiem. 102 00:05:04,666 --> 00:05:07,040 Un daži no šiem datoriem palīdzētu koordinēt funkcijas 103 00:05:07,040 --> 00:05:09,590 Motora optimālai veiktspēju, vienlaikus pārliecinoties 104 00:05:09,590 --> 00:05:12,340 ka nav pārāk daudz atkritumu nāk no izplūdes caurules. 105 00:05:12,340 --> 00:05:15,170 Viņi tiešām strādā Tādā veidā jau vairākus gadu desmitus. 106 00:05:15,170 --> 00:05:17,380 Būtībā, katrs daļa mūsdienīgu auto dzinējs 107 00:05:17,380 --> 00:05:20,080 ir sensors vai kontrolieris par to, kā šie datori 108 00:05:20,080 --> 00:05:23,460 lasa datos tūkstošiem reižu sekundē veicot korekcijas 109 00:05:23,460 --> 00:05:26,220 tāpat proporcijā degvielu gaisā kas notiek uz cilindru. 110 00:05:26,220 --> 00:05:28,730 >> Tie krāpšanos Volkswagen un Audi modeļi ir dīzeļi, 111 00:05:28,730 --> 00:05:30,890 un dīzeļdzinēji ir viens vairāk patiešām svarīgi dators 112 00:05:30,890 --> 00:05:34,030 kontrolēti parametrus, kas ir daudzums nesadegušās degvielas dodas 113 00:05:34,030 --> 00:05:35,200 izplūdes. 114 00:05:35,200 --> 00:05:36,310 Tagad, izklausās slikti. 115 00:05:36,310 --> 00:05:39,642 Neizklausās jūs vēlaties nesadegusi degviela nonākšana izplūdes. 116 00:05:39,642 --> 00:05:41,600 Bet ja runa ir dīzelis, jums ir kaut kas 117 00:05:41,600 --> 00:05:46,110 sauc NOx filtrs, kas ir ierīce, kas absorbē un slazdus slāpekļa oksīdu 118 00:05:46,110 --> 00:05:48,880 ka ir piesārņotājiem, kas citādi iet atmosfērā. 119 00:05:48,880 --> 00:05:53,040 Un ar to ar šo NOx filtrs ir uzlabota ar nesadegušās degvielas. 120 00:05:53,040 --> 00:05:56,650 Tātad izslēgšanas ierīce ir īpaša programma iekšā šiem datoriem, kas var padarīt to 121 00:05:56,650 --> 00:05:59,527 izskatās automašīna atbilst emisijas standarti, pat ja tā nav. 122 00:05:59,527 --> 00:06:01,110 Volkswagen bija problēma uz rokām. 123 00:06:01,110 --> 00:06:04,050 Tās dīzeļdzinēji bija zināms lai iegūtu lielisku degvielas ekonomiju, 124 00:06:04,050 --> 00:06:07,510 bet NOx slazds darbojas tikai labi ja vairāk degviela tiek izmantota. 125 00:06:07,510 --> 00:06:10,460 Tātad auto varētu atklāt, Izmantojot šo izslēgšanas ierīci, 126 00:06:10,460 --> 00:06:13,870 kad tas kļūst par emisijas tests, tas patērē vairāk degvielas, 127 00:06:13,870 --> 00:06:16,830 padarīt NOx filtrs darbu labi, emisijas būtu labi. 128 00:06:16,830 --> 00:06:21,130 Bet tad jums uz ceļa, ierīci izslēdzas, jūs dedzināšana mazāk degvielas 129 00:06:21,130 --> 00:06:24,256 bet jūs liekot tik daudz kā 40 reizes vairāk piesārņojošās vielas atmosfērā. 130 00:06:24,256 --> 00:06:26,130 Bet kā heck darīja auto zinu, ka tas bija 131 00:06:26,130 --> 00:06:27,720 tiek pārbaudīta emisijas atbilstību? 132 00:06:27,720 --> 00:06:30,590 EPA saka, ka tā bija sarežģīta sistēma, kas pārbauda lietas 133 00:06:30,590 --> 00:06:34,090 piemēram, stūres rats, ātrums, cik ilgi motors bija, 134 00:06:34,090 --> 00:06:35,507 un pat atmosfēras spiediens. 135 00:06:35,507 --> 00:06:37,673 Citiem vārdiem sakot, tur bija nekādā veidā tas bija nejauša 136 00:06:37,673 --> 00:06:40,260 jo programmatūra izstrādāts ļoti rūpīgi, lai noteiktu 137 00:06:40,260 --> 00:06:41,630 oficiāls emisiju tests. 138 00:06:41,630 --> 00:06:43,588 Tas ir daži diezgan nopietns maldināšana un tas ir 139 00:06:43,588 --> 00:06:45,420 kāpēc Volkswagen ir piemēram nopietnas nepatikšanas. 140 00:06:45,420 --> 00:06:48,600 Faktiski to CEO, Martin Vinterkorns, vienkārši atkāpās. 141 00:06:48,600 --> 00:06:49,820 >> Tātad, kas notiek tālāk? 142 00:06:49,820 --> 00:06:53,900 Nu, ja jūs esat viens no pusmiljons dīzeļa jettas, Beatles, Golfs, Passats, 143 00:06:53,900 --> 00:06:56,220 vai Audi A3s veikta, Labā ziņa ir tā ir 144 00:06:56,220 --> 00:06:57,886 ka jūsu automašīna ir vēl droši braukt. 145 00:06:57,886 --> 00:07:00,510 Jums nav, lai to prom līdz Volkswagen izdod atsaukšanu. 146 00:07:00,510 --> 00:07:02,509 Bet kādā brīdī viņi iespējams, nāksies 147 00:07:02,509 --> 00:07:04,230 atjaunināt programmatūru iekšpusē jūsu automašīnu. 148 00:07:04,230 --> 00:07:06,927 Kad tas notiek, jūs varētu saņemt mazāk jūdzes uz vienu tvertni. 149 00:07:06,927 --> 00:07:09,260 Advokāti jau gatavojas up klases darbības tiesas prāvas 150 00:07:09,260 --> 00:07:12,500 tā īpašnieki var saņemt kompensāciju kādā brīdī nākotnē. 151 00:07:12,500 --> 00:07:15,832 Bet tas nav gatavojas notikt jebkurā laikā drīz. 152 00:07:15,832 --> 00:07:16,711 >> [Beigtu atskaņošanu] 153 00:07:16,711 --> 00:07:19,960 DAVID J. Malan: Tātad tas faktiski rada interesants lielāks attēla jautājums 154 00:07:19,960 --> 00:07:20,660 kā uzticēties. 155 00:07:20,660 --> 00:07:21,160 Tiesības? 156 00:07:21,160 --> 00:07:24,300 Visi no mums ir iPhone vai Androids vai kaut kas mūsu kabatās, visticamāk, 157 00:07:24,300 --> 00:07:26,500 Šajās dienās, vai laptops mūsu apļus, kas ir 158 00:07:26,500 --> 00:07:28,510 darbojas programmatūra, Apple un Microsoft 159 00:07:28,510 --> 00:07:30,710 un ķekarus citiem uzņēmumiem. 160 00:07:30,710 --> 00:07:34,240 Bet kā mēs zinām, ka tas, ko šie programmatūras produkti darāt 161 00:07:34,240 --> 00:07:37,680 ir tiešām tas, ko šie uzņēmumi atzīst, ka viņi dara? 162 00:07:37,680 --> 00:07:39,610 >> Piemēram, kas ir to saka, ka katru reizi, kad 163 00:07:39,610 --> 00:07:42,200 veiktu zvanu uz jūsu iPhone vai Android tālruni vai tamlīdzīgi, 164 00:07:42,200 --> 00:07:45,650 ka tālruņa numurs arī nav tiek augšupielādēts dažu uzņēmuma serverim 165 00:07:45,650 --> 00:07:48,399 tāpēc, ka daži programmas jūs esat rakstīts, vai tas ir darbības 166 00:07:48,399 --> 00:07:51,070 Sistēma pati, piemēram, iOS vai Android, vai tāpēc, ka esat lejupielādējis 167 00:07:51,070 --> 00:07:53,880 daži trešo personu app ka kaut klausās 168 00:07:53,880 --> 00:07:57,120 lai viss jūs rakstīt vai Viss, jūs faktiski sakot. 169 00:07:57,120 --> 00:07:59,500 Kā jūs zināt, ka, ja jūs puiši darbojas šķindēt 170 00:07:59,500 --> 00:08:02,590 vai Marka sastādīt savu pašu programmatūru CS50, kā 171 00:08:02,590 --> 00:08:06,080 Vai jums, ka CS50 pašas personālu, veidā ar CS50 bibliotēkas, 172 00:08:06,080 --> 00:08:08,690 nav bijis piesakoties ik string esat kādreiz gotten 173 00:08:08,690 --> 00:08:10,276 vai katru collu esat kādreiz gotten? 174 00:08:10,276 --> 00:08:12,900 Nu, jūs, protams, var meklēt pie pirmkodu kaut 175 00:08:12,900 --> 00:08:15,233 kā CS50 bibliotēkā, jūs varēja apskatīt pirmkodu 176 00:08:15,233 --> 00:08:18,170 Linux operētājsistēmu darbojas CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Bet pārsteidzošs prezentāciju tika dots atpakaļ 1984.gadā 178 00:08:23,090 --> 00:08:26,730 in saņemšanas Tjūringa balvu, ko ļoti slavena datorzinātnieks zināms 179 00:08:26,730 --> 00:08:29,750 as-- nosaukts Ken Thompson, kas saņēma Tjūringa balvu, kas 180 00:08:29,750 --> 00:08:33,500 ir sava veida datorzinātnes s Nobela prēmijas, ja jūs, 181 00:08:33,500 --> 00:08:35,309 par viņa darbu pie operētājsistēmas sauc 182 00:08:35,309 --> 00:08:39,039 Unix, kas ir ļoti līdzīgs gars to, ko mēs izmantojam, kas ir Linux. 183 00:08:39,039 --> 00:08:41,960 Un jautājums viņš jautāja viņa pieņemšana runas, būtībā 184 00:08:41,960 --> 00:08:44,910 ar ko nosaka pamatu gadi un gadu diskusijām 185 00:08:44,910 --> 00:08:46,970 par uzticēšanos un drošību, bija šī. 186 00:08:46,970 --> 00:08:50,410 Cik lielā mērā viens uzticēties apgalvojums, ka program-- gabals 187 00:08:50,410 --> 00:08:53,010 no software-- ir bez Trojas zirgi? 188 00:08:53,010 --> 00:08:56,500 Varbūt tas ir vairāk svarīgi uzticēties cilvēki, kuri rakstīja programmatūru. 189 00:08:56,500 --> 00:08:58,650 >> Un patiesībā, mēs esam saistīti to runāt, ka viņš 190 00:08:58,650 --> 00:09:02,400 sniedza, pieņemot šo balvu '80s par CS50 mājas lapā 191 00:09:02,400 --> 00:09:04,030 zem Lekcijas lapā šodien. 192 00:09:04,030 --> 00:09:06,071 Jo tas, ko jūs redzēsiet ir tas, ka viņš faktiski dod 193 00:09:06,071 --> 00:09:09,430 diezgan vienkāršs piemērs tam, kā pat kompilators piemēram šķindēt vai kāds 194 00:09:09,430 --> 00:09:13,950 sastādītāji citi ir izmantoti pagātnē, Ko darīt, ja iestrādāta kompilators mēs 195 00:09:13,950 --> 00:09:18,190 paši izmanto, ir maz, ja nosacījums, kas būtībā saka: 196 00:09:18,190 --> 00:09:22,360 ja ievērojat, ka šis kods ir, izmantojot GetString funkcija vai GetInt 197 00:09:22,360 --> 00:09:26,600 funkcija, iet uz priekšu un ievietojiet sētas durvīm vai Trojas zirgs 198 00:09:26,600 --> 00:09:29,340 tāds, ka šī programma Tagad ir dažas nullēm 199 00:09:29,340 --> 00:09:30,930 un tie, kas kaut ko darīt ļaunprātīgu. 200 00:09:30,930 --> 00:09:33,080 Mežizstrāde visas jūsu keystrokes, augšupielādējot, ka dati 201 00:09:33,080 --> 00:09:35,100 uz kādu serveri, vai tiešām neko. 202 00:09:35,100 --> 00:09:37,290 >> Un ko Ken Thompson iet uz darīt savā runā 203 00:09:37,290 --> 00:09:40,580 ir parādīt, ka pat tad, ja jums ir piekļuve avota 204 00:09:40,580 --> 00:09:43,794 kods kompilatoru, kas ļaunprātīgi varētu to izdarīt, 205 00:09:43,794 --> 00:09:46,210 tas nav svarīgi, jo tur ir šis vistas un olas 206 00:09:46,210 --> 00:09:49,500 realitāte pēdējo daudzu gadu, kad sastādītāji 207 00:09:49,500 --> 00:09:51,960 tiek izmantoti, lai apkopotu paši. 208 00:09:51,960 --> 00:09:55,440 Citiem vārdiem sakot, ceļu atpakaļ, kad kāds bija, ir uzrakstījis pirmo kompilatoru. 209 00:09:55,440 --> 00:09:59,060 Un pēc tam, jebkurā laikā viņi atjaunināts kompilators mainot tās pirmkodu, 210 00:09:59,060 --> 00:10:02,020 pievienojot funkcijas un recompiling to lai cilvēki, piemēram, mums, lai izmantotu, labi, 211 00:10:02,020 --> 00:10:04,270 viņi izmanto veco versija kompilators 212 00:10:04,270 --> 00:10:06,370 sastādīt jauno versija kompilatoru. 213 00:10:06,370 --> 00:10:08,370 Un, ja jūs to apskatīt tajā runāt, ka Viņš devis, 214 00:10:08,370 --> 00:10:10,970 Jūs redzēsiet, ka, jo Minētās cirkulāro, 215 00:10:10,970 --> 00:10:14,330 jūs faktiski var būt bugs vai Trojas zirgi iestrādāta programmatūru 216 00:10:14,330 --> 00:10:14,990 mēs izmantojam. 217 00:10:14,990 --> 00:10:18,010 Un pat tad, ja paskatās pirmkods šo programmu, 218 00:10:18,010 --> 00:10:21,550 tas varētu pat nebūt skaidrs jo krāpšana ir faktiski 219 00:10:21,550 --> 00:10:24,710 kādā vecāku versiju kompilators ka kopš ir 220 00:10:24,710 --> 00:10:27,340 injicēšanas draudus mūsu programmatūru. 221 00:10:27,340 --> 00:10:29,740 >> Kas ir tikai teikt, mēs tiešām nevar un nedrīkst 222 00:10:29,740 --> 00:10:32,939 uzticēšanās programmatūru, kas darbojas uz mūsu klēpjdatorus vai telefonu vai kādu vietu skaits. 223 00:10:32,939 --> 00:10:36,230 Un patiesībā, vēlāk šajā semestrī, kad mēs sākam runāt par web programmēšanu 224 00:10:36,230 --> 00:10:38,521 un faktiski sākt veidot tīmekļa lietojumprogrammas sevi, 225 00:10:38,521 --> 00:10:40,285 mēs runājam par šiem draudi un citi. 226 00:10:40,285 --> 00:10:43,410 Tagad, iespējams, esat domājuši, un pamanīju ka tur bija niecīga mazliet Darth 227 00:10:43,410 --> 00:10:45,842 Vader in klipus, kas Draudēja rādīja tur 228 00:10:45,842 --> 00:10:47,550 par Volkswagen. Ja jūs nekad neesmu redzējis, es 229 00:10:47,550 --> 00:10:49,190 domāju, mums vajadzētu atvieglot noskaņojums, jo tas ir viss 230 00:10:49,190 --> 00:10:50,780 ļoti nomācoši un biedējošas. 231 00:10:50,780 --> 00:10:52,910 Es esmu gatavojas atskatīties Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 kad komerciāla ar Volkswagen-- un tas 233 00:10:55,300 --> 00:10:59,620 gandrīz padara tos patīkams again-- aired pirmo reizi televīzijā. 234 00:10:59,620 --> 00:11:04,039 Tas ir 60 sekunžu klips ka es domāju, ka jums patiks. 235 00:11:04,039 --> 00:11:04,705 [Video atskaņošana] 236 00:11:04,705 --> 00:11:08,198 [MUSIC - tēmu no "Star Wars"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [DOG Barks] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [CAR STARTS] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [Beigtu atskaņošanu] 243 00:12:05,955 --> 00:12:06,830 DAVID J. Malan: Jā. 244 00:12:06,830 --> 00:12:07,663 Man bija tikai pārbaudes. 245 00:12:07,663 --> 00:12:11,360 Šis auto ir sarakstā pārkāpumiem. 246 00:12:11,360 --> 00:12:12,000 Viss kārtībā. 247 00:12:12,000 --> 00:12:14,040 Tātad mēs apskatīt dažus pseudocode brīdi pirms. 248 00:12:14,040 --> 00:12:15,380 Un šeit ir lielāks fragments no pseudocode kodu 249 00:12:15,380 --> 00:12:16,921 ka mēs esam redzējuši vairākas reizes līdz šim. 250 00:12:16,921 --> 00:12:19,970 Un pieņemsim izmantot šī ir iespēja tagad ieviest jaunu programmēšanu 251 00:12:19,970 --> 00:12:23,776 paņēmiens, kas mēs darījām skatīt algoritmiski 252 00:12:23,776 --> 00:12:25,400 pagājušajā nedēļā, kad mēs paskatījās sapludināšanas kārtošanas. 253 00:12:25,400 --> 00:12:28,270 Bet pieņemsim formalizēt to un redzēt, kā mēs varētu izmantot to faktisko kodu, 254 00:12:28,270 --> 00:12:30,350 un tad mēs spēsim izmantot šo paņēmiens pa ceļu visvairāk 255 00:12:30,350 --> 00:12:32,000 iespējams atrisināt atsevišķas citas problēmas. 256 00:12:32,000 --> 00:12:35,790 >> Tātad šī bija viena no pirmajām programmām, mēs kādreiz rakstīja, lai gan pseudocode kodu. 257 00:12:35,790 --> 00:12:37,790 Un ko šī programma mums ļāva darīt kursu 258 00:12:37,790 --> 00:12:41,510 bija atrast Mike Smith tālruņu grāmatā. 259 00:12:41,510 --> 00:12:46,216 Un paziņojuma īpaši līnijām Astoņi un 11, kas bija šo Go To paziņojumu. 260 00:12:46,216 --> 00:12:48,090 Un patiesībā, dažās valodas, C starp tiem, 261 00:12:48,090 --> 00:12:50,006 faktiski darīt ir apgalvojums, ka ir burtiski 262 00:12:50,006 --> 00:12:52,710 iet uz kas ļauj pārlēkt uz noteiktu līniju. 263 00:12:52,710 --> 00:12:55,470 Tas parasti sarauca pieri, jo to var ļoti viegli izmantot ļaunprātīgi 264 00:12:55,470 --> 00:12:58,490 un jūs varat sākt lekt savu programma visas vietas pretstatā 265 00:12:58,490 --> 00:13:00,690 lai, izmantojot veida loģika un vadības plūsma 266 00:13:00,690 --> 00:13:04,000 ka mēs esam izmantojuši līdz šim ar tikko cilpas un nosacījumi un tamlīdzīgi. 267 00:13:04,000 --> 00:13:08,660 >> Bet mēs varam vienkāršot šo algoritmu in pseudocode kodu šādi. 268 00:13:08,660 --> 00:13:11,250 Tā vietā iteratīvs vai looping pieeju 269 00:13:11,250 --> 00:13:14,160 ja mēs turpinām iet uz priekšu un atpakaļ un atpakaļ rindā trīs, 270 00:13:14,160 --> 00:13:18,300 kāpēc nav mēs tikai veida punt un vairāk parasti saka septiņās līnijas un 10, 271 00:13:18,300 --> 00:13:20,570 vienkārši nomainīt šos divus pāri līnijām ar, 272 00:13:20,570 --> 00:13:22,810 cits ja Smith ir agrāk grāmatā mēs 273 00:13:22,810 --> 00:13:25,110 meklēt Mike In kreisā puse no grāmatas. 274 00:13:25,110 --> 00:13:28,560 Cits ja Smith ir vēlāk grāmata, meklēt Mike labajā 275 00:13:28,560 --> 00:13:29,540 puse grāmata. 276 00:13:29,540 --> 00:13:31,180 Un paziņojums jau ir cirkulārās. 277 00:13:31,180 --> 00:13:31,680 Tiesības? 278 00:13:31,680 --> 00:13:34,250 Es esmu meklē Mike tālrunis grāmatu un pēc tam 279 00:13:34,250 --> 00:13:37,090 Es beidzot hit varbūt line septiņi vai varbūt līnija 10 280 00:13:37,090 --> 00:13:41,089 un mans norādījums sevi, ir meklēt Mike pusē tālruņu grāmatā. 281 00:13:41,089 --> 00:13:42,380 Nu, kā es varu meklēt Mike? 282 00:13:42,380 --> 00:13:44,213 Es esmu pa vidu meklējot Mike, kāpēc 283 00:13:44,213 --> 00:13:45,860 Jūs veida nosūtot mani pa apli? 284 00:13:45,860 --> 00:13:49,590 Bet tas ir OK, jo to, kas ir notiek ar izmēru problēmas, 285 00:13:49,590 --> 00:13:52,630 kā rakstīts 7. līnija un 10? 286 00:13:52,630 --> 00:13:54,989 Mēs esam ne tikai saku meklēšanu Mike, meklēt Mike. 287 00:13:54,989 --> 00:13:56,280 Mēs esam īpaši, sakot, ko? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Meklēt viņam kreisajā pusē labajā pusē, kas ir efektīvi 290 00:14:01,610 --> 00:14:03,440 uz pusi mazāks par problēmu. 291 00:14:03,440 --> 00:14:07,170 Tātad, tas ir OK, ka mēs esam sava veida iesaistoties šajā cirkulāro, 292 00:14:07,170 --> 00:14:09,180 šis apkārtraksts arguments, jo vismaz mēs esam 293 00:14:09,180 --> 00:14:11,090 padarot problēma mazākas un mazākas. 294 00:14:11,090 --> 00:14:14,220 Un galu galā mēs ejam, lai sasniegtu ka tā sauktais bāzes gadījums 295 00:14:14,220 --> 00:14:16,780 mums ir tikai viena lappuse left-- kā mūsu brīvprātīgais pagājušajā nedēļā 296 00:14:16,780 --> 00:14:18,684 did-- mums bija viena lapa pa kreisi un tad mums nav 297 00:14:18,684 --> 00:14:21,600 ir saglabāt meklējot Mike Smith jo viņš ir vai nu šajā lapā 298 00:14:21,600 --> 00:14:23,080 vai viņš nav. 299 00:14:23,080 --> 00:14:27,480 >> Tātad, kā mēs varam īstenot šo ideju, šo kārtot cirkulārās faktiskajā kodu? 300 00:14:27,480 --> 00:14:31,030 Nu, mēs varam sviras tehniku kas ir parasti sauc par recursion. 301 00:14:31,030 --> 00:14:33,960 Un mēs esam redzējuši šo In pseudocode par sapludināšanas veida pagājušajā nedēļā. 302 00:14:33,960 --> 00:14:37,190 Atgādināt, ka tas bija pseudocode par sapludināšanas kārtošanas. 303 00:14:37,190 --> 00:14:40,560 Tas varbūt pat vienkāršāk, nekā burbulis vai izvēle vai ievietošanas kārtošanas 304 00:14:40,560 --> 00:14:43,310 tikai attiecībā uz vienkāršību ar kuru jūs varat izteikt to. 305 00:14:43,310 --> 00:14:46,750 >> Bet tas ir tāpēc, ka mēs esam sava veida cirkulāri 306 00:14:46,750 --> 00:14:51,350 sakot, meklēt kaut ko meklējot to vēlreiz. 307 00:14:51,350 --> 00:14:53,960 Bet mēs esam meklējot vai nu uz kreiso pusi vai labajā pusē 308 00:14:53,960 --> 00:14:56,070 un tad galu galā mēs esam apvienojot šajā gadījumā. 309 00:14:56,070 --> 00:14:58,520 Bet šeit, arī ar šie divi kārtot līnijas, 310 00:14:58,520 --> 00:15:01,320 vai mēs atkal ir šī Ideja recursion. 311 00:15:01,320 --> 00:15:05,350 Un konkrēti, ko tas nozīmē, saistībā ar algoritmu, 312 00:15:05,350 --> 00:15:10,880 ir tas, ka algoritms ir rekursīvs ja tā izmanto vai prasa pats. 313 00:15:10,880 --> 00:15:14,330 >> Vai attiecībā uz C, funkcija ir recursive-- funkciju sauc 314 00:15:14,330 --> 00:15:18,510 foo ir rekursīvs ja foo, kaut kur savā pirmkodu, 315 00:15:18,510 --> 00:15:21,250 aicina funkciju pati foo. 316 00:15:21,250 --> 00:15:25,790 Un tas ir slikti, ja viss foo kādreiz dara ir sevi dēvēt atkal un atkal. 317 00:15:25,790 --> 00:15:30,600 Tas ir OK, ja foo beidzot apstājas, kā to dara apvienot kārtot, sakot, pagaidiet minūti, 318 00:15:30,600 --> 00:15:32,980 Ja šī problēma ir super mazs, piemēram, 319 00:15:32,980 --> 00:15:35,840 vai es atklāju viņam kuru es esmu meklē, vienkārši atgriezties. 320 00:15:35,840 --> 00:15:41,000 Nelietojiet rekursīvi, nav cikliski saucam sevi vēlreiz. 321 00:15:41,000 --> 00:15:44,200 >> Un tāpēc pieņemsim to apskatīt cik tas varētu faktiski strādā. 322 00:15:44,200 --> 00:15:48,430 Tāpēc es esmu gatavojas iet uz priekšu un atvērt līdz divām source koda piemērus šeit. 323 00:15:48,430 --> 00:15:50,321 Viens no tiem sauc sigma 0. 324 00:15:50,321 --> 00:15:52,320 Un tas nav vispār rekursīvs, bet pieņemsim 325 00:15:52,320 --> 00:15:53,694 apskatīt to, ko šī programma dara. 326 00:15:53,694 --> 00:15:55,737 Esmu attīrīta no visiem komentāri no tā, bet visi 327 00:15:55,737 --> 00:15:58,070 avota kodu uz CS50 s Mājas lapā ir komentāri, ja jums 328 00:15:58,070 --> 00:15:59,570 gribu lasīt caur to vēlreiz vēlāk. 329 00:15:59,570 --> 00:16:02,010 Un pieņemsim darīt pāris par veselo saprātu pārbauda šeit. 330 00:16:02,010 --> 00:16:06,640 >> Tā augšpusē šo kodu, mums ir jāiekļauj CS50.h. 331 00:16:06,640 --> 00:16:07,650 Ko tas dara? 332 00:16:07,650 --> 00:16:08,990 Kāpēc tas ir šeit? 333 00:16:08,990 --> 00:16:11,740 Saprātīgos lajs izteiksmē. 334 00:16:11,740 --> 00:16:12,424 Ko tas dara? 335 00:16:12,424 --> 00:16:12,858 Jā. 336 00:16:12,858 --> 00:16:14,160 >> Mērķauditorija: Lai GetInt funkcija darbojas. 337 00:16:14,160 --> 00:16:16,243 >> DAVID J. Malan: Tāpēc, ka GetInt funkcija darbojas. 338 00:16:16,243 --> 00:16:18,115 Tāpēc, ka iekšpusē šis fails, CS50.h, kas 339 00:16:18,115 --> 00:16:20,950 mēs redzēsim pirms ilgi saistībā ar tās pirmkodu, 340 00:16:20,950 --> 00:16:23,270 ir ķekars funkcijas declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 un ķekars others-- un ja mums tiešām ir, ka Iekļaut līnija, 342 00:16:26,950 --> 00:16:29,320 kompilators šķindēt nav gatavojas zināt, ka tā pastāv. 343 00:16:29,320 --> 00:16:32,400 Un pats attiecas uz līniju divi kur int ir definēts 344 00:16:32,400 --> 00:16:35,101 printf, kas ir funkcija mēs turpinām izmantot diezgan daudz. 345 00:16:35,101 --> 00:16:37,850 Tagad, līnija četri šķiet mazliet bailīgs jo tā ir tikai viena līnijpārvadātāju. 346 00:16:37,850 --> 00:16:41,570 Tas ir ieguvuši semikolu, ne cirtaini bikšturi, neviens kods iekšpusē no tā. 347 00:16:41,570 --> 00:16:44,640 Bet tas, ko darīja mēs saucam šī lieta nedēļas agrāk? 348 00:16:44,640 --> 00:16:45,140 Jā. 349 00:16:45,140 --> 00:16:46,060 Tā prototipu. 350 00:16:46,060 --> 00:16:48,390 Un kāpēc mums ir prototipu, kas, šķiet, 351 00:16:48,390 --> 00:16:51,050 būt nedaudz lieka Parasti, jo mēs parasti 352 00:16:51,050 --> 00:16:53,474 skatiet funkciju atkal vēlāk failu, vai ne? 353 00:16:53,474 --> 00:16:56,390 Tad kāpēc mēs have-- jūs vienkārši nesaskrāpē galvu, bet es ņemšu to. 354 00:16:56,390 --> 00:16:57,302 Jā. 355 00:16:57,302 --> 00:17:00,000 >> Mērķauditorija: [dzirdams] funkcija pēc galvenās. 356 00:17:00,000 --> 00:17:01,000 DAVID J. Malan: Tieši tā. 357 00:17:01,000 --> 00:17:04,089 Tā, ka kompilators zina tevi galu galā noteikt vai īstenot 358 00:17:04,089 --> 00:17:06,579 ka funkcija pēc galvenās, domājams. 359 00:17:06,579 --> 00:17:08,462 Tātad šķindēt un visvairāk sastādītāji ir sava veida mēms 360 00:17:08,462 --> 00:17:10,510 un tie būs tikai zināt ko jūs viņiem saku. 361 00:17:10,510 --> 00:17:12,569 Un, ja jūs vēlaties izmantot funkcija sauc sigma, 362 00:17:12,569 --> 00:17:15,710 jūs labāk mācīt kompilators ka tā eksistē iepriekš. 363 00:17:15,710 --> 00:17:17,970 >> Tagad, galvenais pati, pat lai gan tas ir ķekars līniju, 364 00:17:17,970 --> 00:17:19,839 ir diezgan pazīstams, cerams, ko tagad. 365 00:17:19,839 --> 00:17:21,942 Tas ir ieguvuši darīt, kamēr cilpa kuras mērķis dzīvē 366 00:17:21,942 --> 00:17:24,400 šeit acīmredzot ir iegūt pozitīvs vesels skaitlis no lietotāja. 367 00:17:24,400 --> 00:17:27,349 Un tikai glabāt pestering viņu vai viņai līdz tie sadarbojas. 368 00:17:27,349 --> 00:17:30,670 Tad 16. rindā man ir interesants zvanu. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Kura no kreisās puses sānu dod man Int 371 00:17:33,710 --> 00:17:36,650 kas var store-- sauc Answer-- kas gatavojas glabāt, acīmredzot, 372 00:17:36,650 --> 00:17:39,090 atgriešanās vērtību sigma. 373 00:17:39,090 --> 00:17:41,840 Tātad sigma ir tikai patvaļīga bet jēgpilna vārds 374 00:17:41,840 --> 00:17:44,500 ka es esmu devis uz funkciju kuras mērķis dzīvē 375 00:17:44,500 --> 00:17:47,680 ir veikt vienu argument-- mēs to saucam N šajā case-- 376 00:17:47,680 --> 00:17:52,280 un vienkārši veikt šo numuru summu plus katrs pozitīvs skaitlis, kas ir 377 00:17:52,280 --> 00:17:53,200 mazāka nekā tā. 378 00:17:53,200 --> 00:17:58,140 >> Tātad, ja es iet skaita 2 līdz sigma, es vēlos pievienot 2 plus 1 379 00:17:58,140 --> 00:18:00,240 plus 0-- ne 0-- lai dod man 3. 380 00:18:00,240 --> 00:18:05,320 Ja es iet 3. līdz SIGMA, es gribu ir 3, plus 2 plus 1, kas dod man 6. 381 00:18:05,320 --> 00:18:05,900 Un tā tālāk. 382 00:18:05,900 --> 00:18:09,750 Tātad tas tikai palielina up visu numuri mazāks vai vienāds ar to. 383 00:18:09,750 --> 00:18:12,040 >> Tagad, noteikti šeit es esmu tikai gatavojas izdrukāt atbildi. 384 00:18:12,040 --> 00:18:17,330 Tā kā ātri veselība pārbaudītu, pieņemsim padarīt sigma 0-- dot slash sigma 0-- 385 00:18:17,330 --> 00:18:18,690 un ļaujiet man ierakstiet 2. 386 00:18:18,690 --> 00:18:19,960 Un es tiešām iegūt 3. 387 00:18:19,960 --> 00:18:21,240 Ļaujiet man ierakstiet 3. 388 00:18:21,240 --> 00:18:22,860 Es tiešām saņem 6. 389 00:18:22,860 --> 00:18:27,636 Un, ja kāds var darīt to math ātri, ja man 50, ko es esmu gatavojas saņemt? 390 00:18:27,636 --> 00:18:29,839 >> Mērķauditorija: [nedzirdama]. 391 00:18:29,839 --> 00:18:30,880 DAVID J. Malan: Nu, nē. 392 00:18:30,880 --> 00:18:33,340 Bet 1275, kas ir diezgan tuvu. 393 00:18:33,340 --> 00:18:38,850 Tātad šis ir rezultāts dara 50 plus 49 plus 48 plus 47 plus 46 394 00:18:38,850 --> 00:18:40,349 visu ceļu uz leju līdz 1. 395 00:18:40,349 --> 00:18:41,390 Tā ka viss ir sigma dara. 396 00:18:41,390 --> 00:18:43,350 Bet pieņemsim redzēt, kā mēs esam īstenoti to tagad. 397 00:18:43,350 --> 00:18:45,790 Tātad, šeit lejā ir funkcija pati. 398 00:18:45,790 --> 00:18:49,000 Un tas, šķiet, nav kaut ko darīt ar recursion vēl. 399 00:18:49,000 --> 00:18:51,070 Patiesībā, mēs esam izmantojot vecās skolas paņēmiens. 400 00:18:51,070 --> 00:18:56,680 Es esmu inicializēšana mainīga sauc summu līdz nullei, tad man ir foreloop šeit, 401 00:18:56,680 --> 00:19:00,790 un es esmu pasludinātu Int sauc Es, nosakot to vienāds ar 1-- 402 00:19:00,790 --> 00:19:04,080 lai gan es varētu noteikt, ka ir vienāds ar nulle, bet kopš es esmu dara saskaitīšanu, 403 00:19:04,080 --> 00:19:05,340 Who cares, ja tas ir nulle vai viens. 404 00:19:05,340 --> 00:19:06,660 Tas notiek, lai nav spēkā. 405 00:19:06,660 --> 00:19:10,110 >> Tāpēc es esmu atkārtojot tik ilgi, kamēr es ir mazāks par vai vienāds ar m, kas 406 00:19:10,110 --> 00:19:11,671 ir arguments, ka tika pieņemts. 407 00:19:11,671 --> 00:19:13,670 Un tad es tikai glabāt palielināšanai I. un izpratne 408 00:19:13,670 --> 00:19:20,010 cilpas es esmu dara dara summa plus vienāds I. Un tas ir apzināts. 409 00:19:20,010 --> 00:19:22,326 Es nevēlos darīt, šajā gadījumā, piemēram, summa plus plus. 410 00:19:22,326 --> 00:19:24,790 Es gribu, lai faktiski pievienot pašreizējā vērtība I 411 00:19:24,790 --> 00:19:28,190 kas tur kļūst lielāka un lielāka un lielāks velšanās saskan. 412 00:19:28,190 --> 00:19:30,210 >> Un tad es atgrieztos summu. 413 00:19:30,210 --> 00:19:33,850 Un tā atbilde izpaužas vērtību summu. 414 00:19:33,850 --> 00:19:35,282 Un tad es to izdrukāt. 415 00:19:35,282 --> 00:19:37,740 Tātad tur ir iespēja šeit, lai gan, lai veida vienkāršotu 416 00:19:37,740 --> 00:19:41,260 šis kods konceptuāli un veida izšņaukt 417 00:19:41,260 --> 00:19:43,250 prāta ziņā no vienkāršība, pat ja tā 418 00:19:43,250 --> 00:19:45,700 notiek laikā, lai kārtotu no novērtēt, kāpēc tas 419 00:19:45,700 --> 00:19:47,330 ir spēcīgs šajos maziem piemēriem. 420 00:19:47,330 --> 00:19:50,380 Šeit ir sigma one-- tā Otrā versija šo kodu. 421 00:19:50,380 --> 00:19:55,290 Viss up top ir identisks tik ka pats stāsts attiecas kā pirms tam. 422 00:19:55,290 --> 00:19:59,220 Bet tagad pieņemsim apskatīt īstenošana SIGMA, kas 423 00:19:59,220 --> 00:20:05,040 Esmu samazināts līdz tikai tie lines-- četras rindas kods, tiešām, 424 00:20:05,040 --> 00:20:06,980 plus daži cirtaini bikšturi un atstarpēm. 425 00:20:06,980 --> 00:20:07,930 >> Bet ko es daru? 426 00:20:07,930 --> 00:20:11,050 Ja m ir mazāks par vai vienāds ar nulle, man ir nepieciešams, lai veida rokturi 427 00:20:11,050 --> 00:20:12,490 ka super vienkārša lieta. 428 00:20:12,490 --> 00:20:15,450 Un, ja jūs nodot man nulle vai neko negatīvs kas ir tikai dīvaini, 429 00:20:15,450 --> 00:20:17,909 Es esmu tikai gatavojas patvaļīgi bet konsekventi atgriezties nulli. 430 00:20:17,909 --> 00:20:20,200 Es nevēlos šo lieta iekļūt daži dīvaini Infinite 431 00:20:20,200 --> 00:20:21,810 cilpa, jo negatīvu vērtību. 432 00:20:21,810 --> 00:20:25,070 Tāpēc es tikai saku, ja tu dod man nulle vai mazāk, es esmu atpakaļ nulli. 433 00:20:25,070 --> 00:20:28,220 >> Bet tas ir labi, jo tas ir ka vienas lapas no tālruņu kataloga 434 00:20:28,220 --> 00:20:28,790 kas palicis pāri. 435 00:20:28,790 --> 00:20:32,660 Es esmu biting off ļoti konkrētu problēmu un nepiestājot kaut rekursīvi. 436 00:20:32,660 --> 00:20:36,580 Bet līnijā 31, ko man šķiet, ir darīt? 437 00:20:36,580 --> 00:20:39,780 Iekavās ir tikai tur lietas, cerams, nedaudz skaidrāks. 438 00:20:39,780 --> 00:20:42,110 Bet viss, ko es daru, ir es esmu atgriežoties m-- neatkarīgi 439 00:20:42,110 --> 00:20:45,790 jums roku me-- plus vērtība m-- sorry, 440 00:20:45,790 --> 00:20:49,052 plus vērtība sigma m mīnus 1. 441 00:20:49,052 --> 00:20:50,010 Tātad, ko tas nozīmē? 442 00:20:50,010 --> 00:20:53,965 Ja jūs varētu man numuru 3 kā ievade, atbilde Es vēlos saņemt galu galā 443 00:20:53,965 --> 00:20:57,307 ir 6, jo 3 plus 2 plus 1 dod man 6. 444 00:20:57,307 --> 00:20:59,390 Bet kā es varu domāt par kā šis kods darbojas? 445 00:20:59,390 --> 00:21:03,070 Pirmo reizi es aicinu sigma un es iet vērtības 3, 446 00:21:03,070 --> 00:21:07,960 tas ir tāpat kā teikt par kādu papīra, šeit ir vērtība 3 447 00:21:07,960 --> 00:21:09,920 un es esmu izturējis šo kā sigma. 448 00:21:09,920 --> 00:21:13,090 3 protams, nav mazāks par 0 tik IF nosacījums neattiecas. 449 00:21:13,090 --> 00:21:14,020 Cits dara. 450 00:21:14,020 --> 00:21:14,990 Tātad, ko man darīt? 451 00:21:14,990 --> 00:21:19,902 Es gribu atgriezties m, kas ir 3, plus sigma no m mīnus 1. 452 00:21:19,902 --> 00:21:21,110 Tāpēc ļaujiet man sekot to. 453 00:21:21,110 --> 00:21:22,710 Es esmu gatavojas īstenot šo gabals papīra leju. 454 00:21:22,710 --> 00:21:24,668 Un kāda vērtība, lai būtu skaidrs, es esmu gatavojas iet 455 00:21:24,668 --> 00:21:26,540 uz SIGMA šajā brīdī stāsts? 456 00:21:26,540 --> 00:21:28,080 Kas numurs? 457 00:21:28,080 --> 00:21:28,610 2, vai ne? 458 00:21:28,610 --> 00:21:29,670 3 mīnus 1: 2. 459 00:21:29,670 --> 00:21:32,000 Tāpēc es vienkārši vajag nedaudz lūžņi papīra šeit. 460 00:21:32,000 --> 00:21:33,931 Tāpēc tagad sigma kļūst sauc atkal. 461 00:21:33,931 --> 00:21:35,930 Un es esmu apzināti likts tas uz leju, jo tas ir 462 00:21:35,930 --> 00:21:38,070 veida, piemēram, apturot ka versija stāsts 463 00:21:38,070 --> 00:21:40,720 jo tagad es esmu vērsta par signāla m mīnus 1. 464 00:21:40,720 --> 00:21:42,660 Tātad m bija 3, m mīnus 1: 2. 465 00:21:42,660 --> 00:21:45,110 Tātad, šeit ir 2, kas es esmu pagājis. 466 00:21:45,110 --> 00:21:48,510 2 protams, nav mazāks par 0, lai lieta neattiecas. 467 00:21:48,510 --> 00:21:53,445 Else I atgriezties m, kas ir šī lieta, plus kāda vērtība sigma? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Tātad, ja sigma no 1-- jo m ir tagad 2 tik 2 mīnus 1 ir 1. 470 00:21:59,650 --> 00:22:01,950 Tāpēc tagad man ir tikai vērtība 1. 471 00:22:01,950 --> 00:22:04,810 Es esmu iet tikai skaitu 1 uz funkciju sigma-- 472 00:22:04,810 --> 00:22:09,120 vai pats here-- tik 1 acīmredzami nav mazāk par nulli, vēl neattiecas. 473 00:22:09,120 --> 00:22:12,970 >> Else atgriešanās 1 plus sigma, ko? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Tāpēc ļaujiet man tikai jāatceras, ka. 476 00:22:14,678 --> 00:22:15,920 Es nopirkšu atpakaļ, ka vēlāk. 477 00:22:15,920 --> 00:22:18,060 Tagad es esmu gatavojas iet uz priekšu un īsi pierakstīt lejup pa skaita 0, jo tas ir 478 00:22:18,060 --> 00:22:19,470 mans arguments vai parametru. 479 00:22:19,470 --> 00:22:22,400 Es esmu izturējis numuru 0 un, visbeidzot, šis process 480 00:22:22,400 --> 00:22:25,760 no tikai atkārtojot sev reklāmu nauseum tas vairs jo tas, ko 481 00:22:25,760 --> 00:22:28,820 man uzreiz darīt, kad es redzu šo 0? 482 00:22:28,820 --> 00:22:29,790 Es atgriezties nulli. 483 00:22:29,790 --> 00:22:31,790 Tātad, tagad jums ir, lai attīt stāsts. 484 00:22:31,790 --> 00:22:34,430 >> Ja es tagad iet atpakaļ laikā, kāda bija pēdējā lieta 485 00:22:34,430 --> 00:22:36,670 Es darīju, ja Jums bija burtiski pārtīšana video? 486 00:22:36,670 --> 00:22:41,630 Es esmu gatavojas uzņemt jaunāko 1 un kas dod man 1 plus 0 ir 1. 487 00:22:41,630 --> 00:22:44,100 Ja es glabāt tīšana stāsts, kas notiek, lai dod man 488 00:22:44,100 --> 00:22:46,880 2, kā arī šī darba vērtība, kas ir 1. 489 00:22:46,880 --> 00:22:47,789 Tātad tas ir 3. 490 00:22:47,789 --> 00:22:49,330 Un tad es esmu gatavojas glabāt pārtīšana. 491 00:22:49,330 --> 00:22:54,220 Kad es pirmo reizi nolika numuru 3-- tik 3 plus 3 dod man 6. 492 00:22:54,220 --> 00:22:57,272 >> Un tagad, ja jūs esat jāpārtin video līdz šim punktam, 493 00:22:57,272 --> 00:22:58,980 tas bija ļoti Pirmais jautājums man jautāja. 494 00:22:58,980 --> 00:23:01,450 Kad pagājuši 3, kas ir sigma no 3? 495 00:23:01,450 --> 00:23:04,204 Tas ir patiešām 6, summa, ko veido Visi šie papīra gabalus. 496 00:23:04,204 --> 00:23:07,120 Tātad, ja tas aizņem maz, bet, lai wrap savas domas apkārt, tas ir jauki. 497 00:23:07,120 --> 00:23:10,700 Bet uzskata, ka tas bija tā little-- bija ļoti apzināta, ka es kaudzē 498 00:23:10,700 --> 00:23:12,990 šie skaitļi par virs otra. 499 00:23:12,990 --> 00:23:17,440 Tas ir veids, piemēram, ņemot memory-- ierakstu laikā, 500 00:23:17,440 --> 00:23:19,940 kā skruberis ar video, ka es patiešām var attīt in. 501 00:23:19,940 --> 00:23:24,350 Un mēs esam gatavojas atgriezties ka metafora tikai mazliet. 502 00:23:24,350 --> 00:23:28,240 >> Bet vispirms, izrādās, ka tur ir daudz dīvaiņi un smieklīgi cilvēki, 503 00:23:28,240 --> 00:23:29,614 Es domāju, Google. 504 00:23:29,614 --> 00:23:31,530 Vai kāds, kurš ir ļoti labi googling prātā 505 00:23:31,530 --> 00:23:34,270 nāk klajā tikai brīdi un palīdziet man meklēt kaut ko? 506 00:23:34,270 --> 00:23:35,650 Ļoti, ļoti zems taustiņu. 507 00:23:35,650 --> 00:23:37,870 Kāds, kurš nekad nav nākt klajā pirms, varbūt. 508 00:23:37,870 --> 00:23:38,370 LABI. 509 00:23:38,370 --> 00:23:39,030 Yeah? 510 00:23:39,030 --> 00:23:39,530 Nāc šurp. 511 00:23:39,530 --> 00:23:41,410 Nāciet uz leju. 512 00:23:41,410 --> 00:23:42,183 Kā tevi sauc? 513 00:23:42,183 --> 00:23:42,870 >> SAM: Sam. 514 00:23:42,870 --> 00:23:44,290 >> DAVID J. Malan: Sam, nāk uz leju. 515 00:23:44,290 --> 00:23:45,320 Tas ir tas pats. 516 00:23:45,320 --> 00:23:46,280 Prieks iepazīties. 517 00:23:46,280 --> 00:23:46,780 Hey. 518 00:23:46,780 --> 00:23:47,580 Nāc uz vairāk. 519 00:23:47,580 --> 00:23:51,290 Tātad viss, kas man ir nepieciešams, lai jūs darīt, ja jūs varētu, Sam, šeit ir Google. 520 00:23:51,290 --> 00:23:53,240 Vai jūs varat meklēt terminu recursion? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Nebojā. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> Un tagad let's-- yeah. 525 00:24:00,970 --> 00:24:03,380 Labi Click to. 526 00:24:03,380 --> 00:24:04,315 Labāk noklikšķiniet kas. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, saņemt to. 529 00:24:08,020 --> 00:24:08,520 Nē? 530 00:24:08,520 --> 00:24:09,050 LABI. 531 00:24:09,050 --> 00:24:10,430 Tātad, pieņemsim darīt pāris citiem. 532 00:24:10,430 --> 00:24:12,830 Ne tik daudz saistīta akadēmiski šeit, bet jūs esat 533 00:24:12,830 --> 00:24:14,520 kādreiz meklējis Google Anagram? 534 00:24:14,520 --> 00:24:15,280 >> SAM: Nē. 535 00:24:15,280 --> 00:24:15,520 >> DAVID J. Malan: OK. 536 00:24:15,520 --> 00:24:17,186 Meklēt Anagram nevis recursion. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Kā par šķībi. 539 00:24:23,790 --> 00:24:25,515 Jūs kādreiz meklēja šķībi? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Tagad, šis viens ir nedaudz grūti redzēt, bet, cerams, everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 Tas ir tikai tu un es bauda to. 543 00:24:34,150 --> 00:24:34,690 LABI. 544 00:24:34,690 --> 00:24:38,950 >> Tātad beidzot, šis one's-- tas ir mazliet šķībi. 545 00:24:38,950 --> 00:24:40,810 Tagad do barelu roll. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Wonderful. 548 00:24:45,310 --> 00:24:45,910 Viss kārtībā. 549 00:24:45,910 --> 00:24:47,110 Liels paldies Sam. 550 00:24:47,110 --> 00:24:49,416 Šeit jums iet. 551 00:24:49,416 --> 00:24:50,400 Pateicība. 552 00:24:50,400 --> 00:24:52,807 >> Tātad, kas notiek visās Šo dumjš piemēriem? 553 00:24:52,807 --> 00:24:55,640 Tik tiešām, zem motora pārsega Google miljoniem rindas kodu 554 00:24:55,640 --> 00:24:58,860 acīmredzot ir daži dumjš IF apstākļi, kas ir būtiski 555 00:24:58,860 --> 00:25:01,160 pārbaude, ja lietotājs ir drukāti šajā frāzē, 556 00:25:01,160 --> 00:25:03,760 darīt kaut ko, kas, iespējams, veikusi netriviāls laika daudzums 557 00:25:03,760 --> 00:25:06,080 īstenot tikai būt uzjautrinoši šādā veidā. 558 00:25:06,080 --> 00:25:08,430 Bet tas ir viss tas sāk vārīties uz leju, lai zem motora pārsega. 559 00:25:08,430 --> 00:25:11,570 Bet, protams, rekursijas ir vairāk no geekier 560 00:25:11,570 --> 00:25:13,880 piemērs starp šiem īpašajiem trikiem. 561 00:25:13,880 --> 00:25:16,880 Un, protams, tur ir citi, kas tur kā arī to, ka mēs, iespējams, nav pat 562 00:25:16,880 --> 00:25:18,230 atklāja tikai vēl. 563 00:25:18,230 --> 00:25:22,830 >> Tātad to apskatīt, vai apsvērt Tagad šādu programmu, 564 00:25:22,830 --> 00:25:24,830 un, protams, paķert kādu no šiem pa ceļam ārā. 565 00:25:24,830 --> 00:25:28,820 Es iešu uz priekšu un atvērt programmu, kas ir 566 00:25:28,820 --> 00:25:30,920 gatavojas izmēģināt, lai mijmaiņas divas vērtības. 567 00:25:30,920 --> 00:25:33,210 Bet, pirms mēs ejam tur, pieņemsim to izdarītu. 568 00:25:33,210 --> 00:25:38,500 Mēs varētu iegūt vēl vienu brīvprātīgo, es domāju? 569 00:25:38,500 --> 00:25:40,480 Vai jūs vēlētos veikt brīvprātīgo darbu? 570 00:25:40,480 --> 00:25:40,980 Nē? 571 00:25:40,980 --> 00:25:41,890 Nāciet uz augšu. 572 00:25:41,890 --> 00:25:42,390 Nāciet uz augšu. 573 00:25:42,390 --> 00:25:42,890 Viss kārtībā. 574 00:25:42,890 --> 00:25:44,136 Tātad jūsu vārds ir tas, ko? 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 Nāciet uz augšu, Lauren. 578 00:25:46,890 --> 00:25:50,140 Tātad Lauren tiek apstrīdēt šeit šādi. 579 00:25:50,140 --> 00:25:52,310 Prieks iepazīties. 580 00:25:52,310 --> 00:25:55,730 Tātad Lauren šeit ir priekšā viņas diviem tukšiem tases. 581 00:25:55,730 --> 00:25:57,570 Un mums ir dažas oranžs sulu un pienu 582 00:25:57,570 --> 00:26:00,301 un mēs esam gatavojas iet uz priekšu un darīt šādi. 583 00:26:00,301 --> 00:26:01,550 Mēs esam tikai gatavojas aizpildīt to. 584 00:26:01,550 --> 00:26:07,840 Dažas unces piena nekā šeit, un pieņemsim aizpildīt nedaudz apelsīnu sulas nekā šeit. 585 00:26:07,840 --> 00:26:11,475 >> Un pie visiem šie skatītāji, 586 00:26:11,475 --> 00:26:13,550 mijmaiņas divas vērtības šo tases. 587 00:26:13,550 --> 00:26:16,970 Ielieciet apelsīnu sulu piena kauss un piens ar apelsīnu sulu čempionātā. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Kā jūs darīt, ja jums bija mājās un bija pieejami citām piegādēm? 590 00:26:26,150 --> 00:26:27,400 LAUREN: Ielieciet to citā čempionātā. 591 00:26:27,400 --> 00:26:28,191 DAVID J. Malan: OK. 592 00:26:28,191 --> 00:26:31,940 Tātad pieņemsim ir pagaidu mainīgs, ja mēs. 593 00:26:31,940 --> 00:26:35,871 Un iet uz priekšu tagad un īstenot šī pati pārnešana procedūra. 594 00:26:35,871 --> 00:26:36,370 Tik labi. 595 00:26:36,370 --> 00:26:41,490 Mēs esam izveidojuši OV vērā pagaidu mainīgs, piens uz OV mainīgo, 596 00:26:41,490 --> 00:26:44,481 un tagad pagaidu mainīgo pienā mainīgo. 597 00:26:44,481 --> 00:26:44,980 LABI. 598 00:26:44,980 --> 00:26:48,740 Tik ļoti labi darīts līdz šim. 599 00:26:48,740 --> 00:26:50,990 Tātad izrādās out-- uzskatīt, ka domāja tikai brīdi. 600 00:26:50,990 --> 00:26:54,479 Lūk, tikai geek to uz augšu mazliet, šis būtu atbilstošs C kods 601 00:26:54,479 --> 00:26:55,520 ka mēs tikko īstenots. 602 00:26:55,520 --> 00:26:58,650 Mums bija divas ieejas, A un B abi kas mēs vienkārši sakām vienkāršību, ir 603 00:26:58,650 --> 00:26:59,260 int s. 604 00:26:59,260 --> 00:27:02,780 Un paziņojums šeit, ja es gribu apmainīt vērtības diviem mainīgajiem A un B, 605 00:27:02,780 --> 00:27:06,890 mums tiešām ir nepieciešams starpnieks A pagaidu mainīgo, pagaidu kauss, 606 00:27:06,890 --> 00:27:10,830 uz kuru pour viena no vērtībām tāpēc, ka mums ir vietturis to. 607 00:27:10,830 --> 00:27:13,480 Bet tad kods ir tieši kā Lauren šeit īstenots. 608 00:27:13,480 --> 00:27:15,500 >> Tagad, tikai, lai iegūtu maz crazier, izrādās, 609 00:27:15,500 --> 00:27:20,930 ka jūs varat darīt bez pagaidu mainīgs. 610 00:27:20,930 --> 00:27:24,870 Lai to izdarītu pareizi, lai gan, mēs ejam ir krāpties ar kādu ķīmiju. 611 00:27:24,870 --> 00:27:26,380 Mums ir daži papildu kausus šeit. 612 00:27:26,380 --> 00:27:29,600 Tātad vistuvāk lieta, kas izskatās piemēram, piena un ūdens perhaps-- 613 00:27:29,600 --> 00:27:34,090 vai piens un OJ-- ir mums ir daži ūdens, tāpēc mēs aizpildīt šo vienu up 614 00:27:34,090 --> 00:27:36,486 ar dažiem uncēm tīru ūdeni. 615 00:27:36,486 --> 00:27:38,332 Tas ir iespējams, ir pārāk daudz. 616 00:27:38,332 --> 00:27:38,832 Jā. 617 00:27:38,832 --> 00:27:39,934 Tas noteikti ir pārāk daudz. 618 00:27:39,934 --> 00:27:40,600 Turiet par vienu sek. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> Un tagad mums ir eļļa, kas, kā es atceros no vidējā skolas ķīmijas klasē, 621 00:27:48,420 --> 00:27:49,990 cerams, tas nav sajaukt ar ūdeni. 622 00:27:49,990 --> 00:27:53,650 Bet tas veida veida Izskatās, pienu un OV. 623 00:27:53,650 --> 00:27:55,760 Tāpēc tagad, neizmantojot pagaidu mainīgo, 624 00:27:55,760 --> 00:27:59,260 Jūs varat mijmaiņas šīs divas vērtības? 625 00:27:59,260 --> 00:28:03,884 Tātad eļļas tērēta ūdens kauss, ūdens tērēta naftas kauss. 626 00:28:03,884 --> 00:28:04,800 LAUREN: Nav citu krūzes? 627 00:28:04,800 --> 00:28:05,940 DAVID J. Malan: Nav citu tases. 628 00:28:05,940 --> 00:28:07,860 Un man nav reāli pārbaudīts tas pirms šā gada 629 00:28:07,860 --> 00:28:10,110 tāpēc es nezinu, ja tas būs faktiski strādā ķīmiski. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Tas nebija paredzēts notikt. 632 00:28:18,650 --> 00:28:19,761 Vai tas darbojas? 633 00:28:19,761 --> 00:28:20,260 Viss kārtībā. 634 00:28:20,260 --> 00:28:20,990 Tātad atdalot? 635 00:28:20,990 --> 00:28:21,490 Labs. 636 00:28:21,490 --> 00:28:24,714 Tagad mēs saņēmām, lai iegūtu Ūdens uz otru čempionātā. 637 00:28:24,714 --> 00:28:27,630 Gudrāki ķīmija koncentratorus varētu iespējams darīt labāk nekā man. 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: Ūdens ir apakšā. 639 00:28:28,510 --> 00:28:31,910 >> DAVID J. Malan: The water-- tas bija kas ir galvenais pēdējā reize, kad mēs to darījām. 640 00:28:31,910 --> 00:28:33,950 Jums ir darīt to pareizā secībā. 641 00:28:33,950 --> 00:28:34,450 Jā. 642 00:28:34,450 --> 00:28:35,270 Tas ir labi. 643 00:28:35,270 --> 00:28:37,290 Tāpēc tagad mums ir divas tases eļļas. 644 00:28:37,290 --> 00:28:37,790 LABI. 645 00:28:37,790 --> 00:28:38,510 Tas ir labi. 646 00:28:38,510 --> 00:28:40,110 Bet ķīmiski ja tas strādāja par I-- 647 00:28:40,110 --> 00:28:41,200 >> LAUREN: Tas ir ūdens. 648 00:28:41,200 --> 00:28:41,930 >> DAVID J. Malan: Tas ir galvenokārt ūdens. 649 00:28:41,930 --> 00:28:42,430 Viss kārtībā. 650 00:28:42,430 --> 00:28:44,210 Bet tas joprojām ir tas pats kauss, kā pirms tam. 651 00:28:44,210 --> 00:28:47,570 Tātad ieliet it-- izmēģināt to tur. 652 00:28:47,570 --> 00:28:49,300 LABI. 653 00:28:49,300 --> 00:28:51,010 Tas ir labs izmantot klases laika šodien. 654 00:28:51,010 --> 00:28:51,510 LABI. 655 00:28:51,510 --> 00:28:53,890 Tāpēc tagad we-- jauki. 656 00:28:53,890 --> 00:28:55,460 Kārtot. 657 00:28:55,460 --> 00:28:55,960 Viss kārtībā. 658 00:28:55,960 --> 00:28:56,690 Tik ļoti labs. 659 00:28:56,690 --> 00:29:00,006 Paldies Lauren. 660 00:29:00,006 --> 00:29:01,950 Ļoti labi darīts. 661 00:29:01,950 --> 00:29:04,570 >> Tik vienkārši, lai trieciens jūsu prātus, un tas ir kaut kas, iespējams, 662 00:29:04,570 --> 00:29:08,660 spēlēt ar, ja jums patīk CS50 ID, jūs varat, faktiski, mijmaiņas divi mainīgie 663 00:29:08,660 --> 00:29:11,470 neizmantojot pagaidu skaitlim. 664 00:29:11,470 --> 00:29:13,060 Un tas ir atbilstošs C kodu. 665 00:29:13,060 --> 00:29:16,110 Un, ja jūs atceraties no pēdējās Trešdiena, mēs ieviesām, ja īsi, 666 00:29:16,110 --> 00:29:19,720 daži jauni operatori C un tas kāds atgādināt to, ko maz burkāns 667 00:29:19,720 --> 00:29:23,660 simbols ir, ka maz trīsstūrveida simbols no klaviatūras pārstāv? 668 00:29:23,660 --> 00:29:26,003 Kas Bitu līmeņa uzņēmējs? 669 00:29:26,003 --> 00:29:26,770 >> Mērķauditorija: 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 Tātad, ja jūs vēlaties, vienkārši prieka pēc mājās, lai dotu un b divi patvaļīgs 673 00:29:32,920 --> 00:29:36,072 vērtības, piemēram, kāds eight-- un I izvēlētos astoņu bitu vērtību. 674 00:29:36,072 --> 00:29:38,530 Ja jūs to izdarītu ar 32 bitiem, jūs ļoti ātri garlaicīgi. 675 00:29:38,530 --> 00:29:42,150 Bet tikai dod astoņu bitu vērtība, kas ir neatkarīgi, viens vai divi, 676 00:29:42,150 --> 00:29:43,790 un dot b līdzīgā vērtībā. 677 00:29:43,790 --> 00:29:46,810 Un tad, izmantojot definīciju no XOR no pagājušajā trešdienā, 678 00:29:46,810 --> 00:29:52,560 piemēro šo pamazām, katrs šie astoņi biti katrā no A un B, 679 00:29:52,560 --> 00:29:54,980 un pēc tam darīt to tieši par šo kodu. 680 00:29:54,980 --> 00:29:58,170 Un tas nav nepareizi, ko jūs redzēt šeit uz ekrāna. 681 00:29:58,170 --> 00:30:02,100 Tas tiešām vārīties uz leju trīs XOR operācijām 682 00:30:02,100 --> 00:30:05,910 un kaut kā maģiski a un b apmainīsies pozīcijas 683 00:30:05,910 --> 00:30:08,010 nezaudējot informāciju. 684 00:30:08,010 --> 00:30:11,580 >> Tātad eļļas un ūdens triks ir tuvākais reālās pasaules iemiesojums 685 00:30:11,580 --> 00:30:12,980 Es varētu iedomāties, lai atdarinātu to. 686 00:30:12,980 --> 00:30:15,950 Bet tas, protams, ir vieglāk izmantot pagaidu mainīgo, 687 00:30:15,950 --> 00:30:16,920 kā šajā gadījumā šeit. 688 00:30:16,920 --> 00:30:21,190 Un tas arī ir iespēja teikt, Arī šāda veida mikro optimizāciju, 689 00:30:21,190 --> 00:30:23,590 kā datorzinātnieks teiktu, bet sava veida jautrību 690 00:30:23,590 --> 00:30:27,060 lielīties par to, kā jūs to izdarīja bez tāpat pārnešana ar papildu mainīgo, 691 00:30:27,060 --> 00:30:28,640 tas nav viss, kas pārliecinoši. 692 00:30:28,640 --> 00:30:31,619 Tāpēc, ka, lai saglabātu 32 biti, AS gadījumā, ja faktiskā int, 693 00:30:31,619 --> 00:30:33,410 nav tik pārliecinošs uz sistēmu, kurā 694 00:30:33,410 --> 00:30:36,722 Jums varētu būt, izmantojot desmitiem megabaitu vai pat vairāk, piemēram atmiņas šajās dienās. 695 00:30:36,722 --> 00:30:38,680 Un patiesībā, kad mēs nokļūt uz vēlāku problēmu kopumu 696 00:30:38,680 --> 00:30:41,010 un jūs īstenot burvestību pārbaudītājs un jūs 697 00:30:41,010 --> 00:30:43,550 apstrīdēt to darīt ar tas tik maz RAM un kā maz 698 00:30:43,550 --> 00:30:46,820 laiks ir iespējams, uz computer-- jūs joprojām 699 00:30:46,820 --> 00:30:50,160 ir nedēļa, lai īstenotu it-- jūs have-- jūs būsiet 700 00:30:50,160 --> 00:30:51,799 apstrīdēja lai samazinātu šos resursus. 701 00:30:51,799 --> 00:30:53,840 Un tas ir tiešām vienīgais godu šo semestri 702 00:30:53,840 --> 00:30:57,940 kur jums tiks aicināti noskūties off pat smalkāko sniegumu 703 00:30:57,940 --> 00:30:59,340 izmaksas citādi. 704 00:30:59,340 --> 00:31:02,200 >> Tātad what-- kā mēs varam redzēt šo faktisko kodu? 705 00:31:02,200 --> 00:31:04,530 Ļaujiet man iet uz priekšu tagad un atvērt piemēru 706 00:31:04,530 --> 00:31:07,700 ka apzināti tiek saukta Nē Swap jo tas nav 707 00:31:07,700 --> 00:31:10,670 faktiski mijmaiņas mainīgos kā jūs tiešām varētu gaidīt. 708 00:31:10,670 --> 00:31:12,260 Tātad, pieņemsim to apskatīt. 709 00:31:12,260 --> 00:31:17,050 Lūk programma, kas nav CS50 bibliotēka notiek, vienkārši standarta I / O. 710 00:31:17,050 --> 00:31:19,560 Tagad mums ir prototipu par mijmaiņas up top, kas tikko 711 00:31:19,560 --> 00:31:21,540 nozīmē, ka tas ir nokļuvis definēt vēlāk. 712 00:31:21,540 --> 00:31:22,550 Un šeit ir galvenais. 713 00:31:22,550 --> 00:31:26,000 >> Es patvaļīgi piešķirts x un y, attiecīgi, vērtības viens un divi 714 00:31:26,000 --> 00:31:28,590 tikai tāpēc, ka viņi ir mazi un viegli domāt par. 715 00:31:28,590 --> 00:31:32,280 Un tad man vienkārši ir ķekars printfs kur man ir veselība pārbaudītu. x ir 1 716 00:31:32,280 --> 00:31:35,110 un y ir 2, ir iespējams kādi ir šie printfs teiks. 717 00:31:35,110 --> 00:31:36,530 Līdz ar to nav burvju līdz šim. 718 00:31:36,530 --> 00:31:40,100 >> Tad es esmu gatavojas pieprasīt ar drukāt def, pārnešana dot dot dot. 719 00:31:40,100 --> 00:31:43,730 Es esmu gatavojas, lai izsauktu mijmaiņas funkcija, kas iet x un y. 720 00:31:43,730 --> 00:31:47,350 Un pieņemsim, tagad, ka swap tiek īstenota tieši 721 00:31:47,350 --> 00:31:49,930 kā tas bija pirms brīža ar pagaidu mainīgo. 722 00:31:49,930 --> 00:31:52,670 Un tāpēc es apgalvot droši, nomainīju. 723 00:31:52,670 --> 00:31:55,429 x tagad šo un y tagad ir tā, ka. 724 00:31:55,429 --> 00:31:57,220 Bet lieta, protams, sauc Nr Swap. 725 00:31:57,220 --> 00:31:58,678 Tātad, pieņemsim faktiski redzēt, kas notiek. 726 00:31:58,678 --> 00:32:04,450 Ja es sastādīt nav swap un tad do ./noswap, x ir 1, y ir 2. 727 00:32:04,450 --> 00:32:05,770 Pārnešana nomainīju. 728 00:32:05,770 --> 00:32:07,200 x ir 1, y ir 2. 729 00:32:07,200 --> 00:32:11,980 Tātad, tas tiešām šķiet, ir kļūdains, pat gan swap-- pieņemsim ritināt uz leju now-- 730 00:32:11,980 --> 00:32:16,542 tiek īstenota tieši vienu kods es ierosināju pirms brīža. 731 00:32:16,542 --> 00:32:19,000 Tātad mēs nebrauksim, lai saņemtu fancy ar XOR stuff tagad. 732 00:32:19,000 --> 00:32:21,890 Tas arī būtu jāstrādā tikai tāpat ar pienu un OV, 733 00:32:21,890 --> 00:32:25,820 bet tas nav, šķiet, darbojas. 734 00:32:25,820 --> 00:32:27,180 >> Tātad, pieņemsim darīt atkal. 735 00:32:27,180 --> 00:32:29,310 Varbūt es vienkārši bija nedarbojas pareizi. 736 00:32:29,310 --> 00:32:32,010 Tātad pieņemsim palaist Nr Swap vēlreiz. 737 00:32:32,010 --> 00:32:32,900 Varbūt I-- nē. 738 00:32:32,900 --> 00:32:34,400 Tātad tas ir tikai nedarbojas. 739 00:32:34,400 --> 00:32:36,060 Tātad, pieņemsim darīt nedaudz veselo saprātu pārbaudi. 740 00:32:36,060 --> 00:32:39,690 Ļaujiet man iet uz priekšu šeit Swap un vienkārši pievienot, pagaidiet minūti, 741 00:32:39,690 --> 00:32:43,856 a ir% i / n un pieņemsim plug-in a vērtība. 742 00:32:43,856 --> 00:32:45,730 Tā kā es tiešām gribu lai redzētu, kas notiek. 743 00:32:45,730 --> 00:32:47,570 Un tiešām, tas ir atkļūdošanas paņēmiens 744 00:32:47,570 --> 00:32:50,028 kas jums varētu būt, izmantojot in darba laika vai mājās jau, 745 00:32:50,028 --> 00:32:53,560 līdzīgi pirmajā pusē Dan Armendariz ir video in PSET3 746 00:32:53,560 --> 00:32:56,870 kur mēs iepazīstinājām drukāt def kā ieteicamā metode, vismaz 747 00:32:56,870 --> 00:32:58,080 vienkāršiem gadījumiem. 748 00:32:58,080 --> 00:33:01,720 Ļaujiet man iet uz priekšu un palaist padarīt nē swap atkal ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Interesanti. 751 00:33:05,840 --> 00:33:11,670 Tātad paziņojums, kas, šķiet, ir taisnība. x ir 1, y ir 2, bet ir 2, ja b ir 1. 752 00:33:11,670 --> 00:33:16,790 Tātad šie divi kaut got samainīti bet X un Y ir ne kļūst apmainīti. 753 00:33:16,790 --> 00:33:21,090 Tātad, lai būtu skaidrs, kas notiek ir, šeit man ir X un Y 754 00:33:21,090 --> 00:33:25,380 un tie ir mainīgie vietējie In joma galvenais, es esmu iet uz x un y 755 00:33:25,380 --> 00:33:26,170 apmainīt. 756 00:33:26,170 --> 00:33:29,080 Tagad, maiņas, kā atsevišķu funkciju, ir brīvi, lai izsauktu savus argumentus 757 00:33:29,080 --> 00:33:30,590 vai tā parametrus kaut tā vēlas. 758 00:33:30,590 --> 00:33:33,280 Foo vai bārā vai X vai Y vai a vai b. 759 00:33:33,280 --> 00:33:36,870 Tikai, lai būtu skaidrs, ka viņi nav identisks ar X un Y, per se, 760 00:33:36,870 --> 00:33:38,020 Es esmu teica a un b. 761 00:33:38,020 --> 00:33:40,040 Bet mēs varētu tos saucam neko mēs gribam. 762 00:33:40,040 --> 00:33:43,960 >> Un tā tas izskatās swap tiek nodots 763 00:33:43,960 --> 00:33:48,980 X- AKA a-- un tas ir tiek nodots y-- AKA b. 764 00:33:48,980 --> 00:33:51,900 Kaut kā šie trīs līnijas ir pārnešana šīs vērtības tieši 765 00:33:51,900 --> 00:33:53,510 kā Lauren darīja ar pienu un OV. 766 00:33:53,510 --> 00:33:56,010 Bet, kad mēs izdrukāt vērtībām, a un b 767 00:33:56,010 --> 00:34:01,340 patiešām mijmaiņas bet x un y nav izmaiņas tiem. 768 00:34:01,340 --> 00:34:03,150 Atgādināt, ka x un y ir šeit. 769 00:34:03,150 --> 00:34:05,320 >> Tātad, mēs varam redzēt šo via Vēl viens paņēmiens, kā arī. 770 00:34:05,320 --> 00:34:08,110 Un tas arī ir tehnika iestrādāta problēma noteikti trīs. 771 00:34:08,110 --> 00:34:10,780 Iesim uz priekšu un darīt to CS50 ID, ja Jums vēl nav. 772 00:34:10,780 --> 00:34:13,730 No labajā pusē mēs ir šī atkļūdotāju tab. 773 00:34:13,730 --> 00:34:16,159 Un, ja jūs atvērt šo augšu, tur ir daži arcane informācija 774 00:34:16,159 --> 00:34:17,530 kas ir izmet pie jums sākotnēji. 775 00:34:17,530 --> 00:34:19,310 Bet pieņemsim kaitināt šis intervālu nekustamo ātri. 776 00:34:19,310 --> 00:34:21,620 >> Tik viens, jūs redzat vietējo mainīgie. 777 00:34:21,620 --> 00:34:26,230 Izrādās, ka iebūvējamā CS50 IDE, un daudz programmēšanas vidēm vairāk 778 00:34:26,230 --> 00:34:28,060 parasti, ir atkļūdotājs. 779 00:34:28,060 --> 00:34:31,340 Rīks, kas ļauj jums, lai vizuāli redzēt kas notiek iekšpusē jūsu programmā 780 00:34:31,340 --> 00:34:34,380 bez ķerties pie pievienojot printfs un apkopojot un darbojas 781 00:34:34,380 --> 00:34:37,588 un pievienojot printf s un apkopojot un skriešana, kas jau, jo darba laika 782 00:34:37,588 --> 00:34:40,070 vai mājās, ir iespējams kļūst diezgan garlaicīgs. 783 00:34:40,070 --> 00:34:43,090 >> Tātad šeit, tikai brīdi, mēs esam gatavojas redzēt reālajā laikā 784 00:34:43,090 --> 00:34:44,760 vērtības mūsu vietējo mainīgo. 785 00:34:44,760 --> 00:34:47,880 Mēs arī gatavojas, lai varētu noteikt ko sauc kontrolpunkti, kas 786 00:34:47,880 --> 00:34:52,570 Ir iespējas manā programmā, lai apturētu izpilde noteiktā koda rindu 787 00:34:52,570 --> 00:34:53,710 ka es esmu ziņkārīgs par. 788 00:34:53,710 --> 00:34:54,210 Tiesības? 789 00:34:54,210 --> 00:34:55,969 Šīs programmas darbojas vienā mirklī. 790 00:34:55,969 --> 00:35:00,450 Tas ir sava veida jauki mums lēnāku cilvēkiem lai varētu apstāties, veltiet laiku, skatiet 791 00:35:00,450 --> 00:35:02,380 Kas notiek apkārt noteikta līnija koda 792 00:35:02,380 --> 00:35:05,050 bez programmas aršanas caur to un apdares pilnībā. 793 00:35:05,050 --> 00:35:08,510 Tātad kontrolpunkti gatavojas ļaut mums pauze un pauzes kādā noteiktā brīdī. 794 00:35:08,510 --> 00:35:12,990 >> Zvanu kaudze ir iedomātā veids sakot, kādas funkcijas ir šobrīd 795 00:35:12,990 --> 00:35:14,140 tiek saukta brīdī. 796 00:35:14,140 --> 00:35:15,370 Galvenais vienmēr sauc pirmo reizi. 797 00:35:15,370 --> 00:35:17,230 Bet, ja Main tā dēvētajā funkcija sauc Swap, 798 00:35:17,230 --> 00:35:20,470 mēs patiešām gatavojas, lai redzētu šo tornis funkciju, kas ir 799 00:35:20,470 --> 00:35:22,400 sauc apgrieztā hronoloģiskā secībā. 800 00:35:22,400 --> 00:35:23,310 Tātad, pieņemsim redzēt, ka. 801 00:35:23,310 --> 00:35:24,327 >> Es esmu gatavojas, lai tālinātu. 802 00:35:24,327 --> 00:35:25,660 Es esmu gatavojas doties atpakaļ uz manu kodu. 803 00:35:25,660 --> 00:35:27,540 Un tikai tāpēc, ka es gribu būt pedantiska šeit, 804 00:35:27,540 --> 00:35:31,100 Es iešu uz priekšu un noklikšķiniet tikai pa kreisi no līnijas pieci. 805 00:35:31,100 --> 00:35:32,830 Un tas rada sarkanu punktu. 806 00:35:32,830 --> 00:35:36,200 Un paziņojums labajā pusē ka atkļūdotājs zina, hey, 807 00:35:36,200 --> 00:35:41,020 Es tikai teicu pārtraukumpunkts at noswap.c line pieci, īpaši 808 00:35:41,020 --> 00:35:42,480 šajā rindā kodu. 809 00:35:42,480 --> 00:35:45,090 Tātad atkļūdotājs zina, ka es ir pieprasījušas nākamo reizi 810 00:35:45,090 --> 00:35:48,530 Es palaist manu programma to pauzi izpilde ir nevis tikai 811 00:35:48,530 --> 00:35:50,390 darbojas viss super ātri. 812 00:35:50,390 --> 00:35:53,889 >> Tāpēc tagad es esmu gatavojas noklikšķiniet uz Debug poga pašā augšā IDE 813 00:35:53,889 --> 00:35:55,430 un kas notiek, lai veiktu šādas darbības. 814 00:35:55,430 --> 00:36:00,680 Tas notiek, lai atvērtu sākotnēji nedaudz biedējošu meklē otrais terminālis window-- 815 00:36:00,680 --> 00:36:02,679 attālā atkļūdošana no uzņēmējas piemēram un such-- 816 00:36:02,679 --> 00:36:04,970 un mēs būsim atpakaļ uz to, kas viss, kas nozīmē, pirms ilgi. 817 00:36:04,970 --> 00:36:09,020 Bet to, kas ir svarīgi, lai tagad ir tā, ka tas red dot notrieca, 818 00:36:09,020 --> 00:36:11,735 atkļūdotājs tīši apturēta execution-- 819 00:36:11,735 --> 00:36:15,560 ne uz šīs līnijas per se, bet par pirmo līnija faktisko koda šo funkciju. 820 00:36:15,560 --> 00:36:18,040 Un tas ir iemesls, kāpēc septiņi līnija Tagad izcelta dzeltenā krāsā. 821 00:36:18,040 --> 00:36:20,550 >> Un tagad pieņemsim to apskatīt pie labās malas. 822 00:36:20,550 --> 00:36:27,300 Izskatās, pēc noklusējuma, labi pietiekami, x ir kāda vērtība? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 Un y ir kāda vērtība? 825 00:36:29,750 --> 00:36:30,410 Zero. 826 00:36:30,410 --> 00:36:35,540 Un tas ir sagaidāms tādā nozīmē, ka x un y-- ka dzeltenā line-- ir 827 00:36:35,540 --> 00:36:36,770 vēl nav izpildīts. 828 00:36:36,770 --> 00:36:38,510 Tātad x nevajadzētu būt vērtība 1. 829 00:36:38,510 --> 00:36:41,470 Tas varētu būt jebkura cita vērtība, tā sauktais atkritumu vērtība. 830 00:36:41,470 --> 00:36:44,320 Un mēs palaimējies, jo tas ir nulle šajā brīdī, būtībā. 831 00:36:44,320 --> 00:36:46,400 >> Tāpēc tagad tur ir tikai daži pogas mums ir nepieciešams rūpēties 832 00:36:46,400 --> 00:36:48,100 par to, kad debugging šādā veidā. 833 00:36:48,100 --> 00:36:49,970 Ievērojiet šeit, mums ir atskaņošanas pogu. 834 00:36:49,970 --> 00:36:51,877 Un, ja mēs spēlējam vai hit atsākt, tas ir tikai 835 00:36:51,877 --> 00:36:53,710 gatavojas palaist cauri pārējā programmas 836 00:36:53,710 --> 00:36:55,300 vai arī līdz brīdim, kad tas hits cita koncentrācija. 837 00:36:55,300 --> 00:36:56,910 Bet es esmu nav noteikti jebkura cita kontrolpunkti tāpēc tas ir tikai 838 00:36:56,910 --> 00:36:58,118 gatavojas palaist cauri beigām. 839 00:36:58,118 --> 00:37:00,280 Šāda veida uzvar mērķis papētījis. 840 00:37:00,280 --> 00:37:03,290 >> Tā vietā, man rūp Šīs ikonas pa labi. 841 00:37:03,290 --> 00:37:05,360 Un, ja es lidināties virs viņiem, jo ​​jums ir pārāk, 842 00:37:05,360 --> 00:37:07,450 jūs redzēsiet maz tips-- rīku padomus. 843 00:37:07,450 --> 00:37:09,020 Tas viens ir soli pa. 844 00:37:09,020 --> 00:37:11,290 Tagad tas nenozīmē izlaist šādu līnija kodu. 845 00:37:11,290 --> 00:37:14,840 Tas nozīmē tikai to izpildīt un pārietu uz nākamo, pāriet uz nākamo, 846 00:37:14,840 --> 00:37:15,580 pārietu uz nākamo. 847 00:37:15,580 --> 00:37:17,610 Citiem vārdiem sakot, izmantojot ka poga, es varu staigāt 848 00:37:17,610 --> 00:37:20,390 caur manu kods vienu soli laikā. 849 00:37:20,390 --> 00:37:21,914 Pozīcijai, burtiski. 850 00:37:21,914 --> 00:37:23,830 Tagad, pa labi no ka tur ir vēl viens 851 00:37:23,830 --> 00:37:25,163 ka mēs redzēsim tikai brīdi. 852 00:37:25,163 --> 00:37:27,820 Tas ir tā sauktā Step Into ikonas, kas ir 853 00:37:27,820 --> 00:37:30,300 gatavojas atļaut man nirt uz citu funkciju. 854 00:37:30,300 --> 00:37:31,800 Bet pieņemsim redzēt to tikai brīdi. 855 00:37:31,800 --> 00:37:33,280 Tāpēc es esmu gatavojas noklikšķiniet soli pāri. 856 00:37:33,280 --> 00:37:35,820 Un tagad paziņojums, kā es noklikšķiniet šo pogu augšējā labajā stūrī, 857 00:37:35,820 --> 00:37:41,260 turēt acis aptuveni zem Local Mainīgie un redzēt, kas notiek ar x. 858 00:37:41,260 --> 00:37:44,115 x tagad 1, jo dzeltenā līnija tagad ir izpildīts 859 00:37:44,115 --> 00:37:45,840 un mēs esam pārvietots uz līnijas 8. 860 00:37:45,840 --> 00:37:49,840 Un tikai brīdi y cerams kļūt 2. 861 00:37:49,840 --> 00:37:52,330 >> Tagad, nekas, ka interesanti notiek mazliet. 862 00:37:52,330 --> 00:37:53,390 Tas viss ir ir printf. 863 00:37:53,390 --> 00:37:58,010 Un paziņojums, manā sekundārajā terminālī logu, es redzu rezultātu drukas Def. 864 00:37:58,010 --> 00:38:01,080 Un tagad man ir padarīt Lēmums par programmētājs. 865 00:38:01,080 --> 00:38:04,360 Es varu soli pār šo līniju kods, izpildes, bet ne 866 00:38:04,360 --> 00:38:06,220 kļūst ziņkārīgs par to, kas ir iekšā. 867 00:38:06,220 --> 00:38:11,130 Vai es tiešām var soli tajā un iet iekšā Swap pati. 868 00:38:11,130 --> 00:38:12,340 Tātad, pieņemsim darīt tā. 869 00:38:12,340 --> 00:38:15,550 >> Ļaujiet man iet uz priekšu un noklikšķiniet ne soli pa bet solis. 870 00:38:15,550 --> 00:38:17,300 Paziņojums, pēkšņi logu izmaiņas 871 00:38:17,300 --> 00:38:19,330 lai izceltu pirmais līnija koda Swap. 872 00:38:19,330 --> 00:38:20,710 Tas ir līnija 21. 873 00:38:20,710 --> 00:38:25,220 Un tagad, kas ir sava veida bailīgs ir tas, ka, ja paskatās nekā šeit, kā plānots, 874 00:38:25,220 --> 00:38:29,720 komatu b ir 1 un 2, attiecīgi. 875 00:38:29,720 --> 00:38:33,840 Kāpēc temp 32767? 876 00:38:33,840 --> 00:38:36,560 Atgādinot, ka temp, līdzīgi tukša kauss pirms brīža, 877 00:38:36,560 --> 00:38:38,980 ir deklarēts šeit uz līnijas 21. 878 00:38:38,980 --> 00:38:43,390 Kāpēc 32,000- es domāju, kāpēc ir tas tikai daži dīvaini vērtība? 879 00:38:43,390 --> 00:38:43,890 Yeah? 880 00:38:43,890 --> 00:38:45,190 >> Mērķauditorija: Tas nav inicializēts. 881 00:38:45,190 --> 00:38:46,940 >> DAVID J. Malan: Tas ir nav inicializēts. 882 00:38:46,940 --> 00:38:49,370 Tātad mūsu dators vienmēr ir fiziskā atmiņa. 883 00:38:49,370 --> 00:38:50,544 Tas vienmēr ir fizisko RAM. 884 00:38:50,544 --> 00:38:52,710 Un tur vienmēr ir nulle 's un viens ir tur, vai ne? 885 00:38:52,710 --> 00:38:54,626 Tāpēc, ka mēs izmantojam mūsu dators visu dienu, 886 00:38:54,626 --> 00:38:57,210 jūs izmantojat CS50 IDE vai serveri visas dienas garumā. 887 00:38:57,210 --> 00:39:01,159 Tā, ka RAM nu ir dažas nullēm vai daži viens ir vai daži nullēm un uzņēmumiem. 888 00:39:01,159 --> 00:39:02,950 Nav svarīgi, vai ne jūs, izmantojot tos. 889 00:39:02,950 --> 00:39:05,270 Jūs nevarat vienkārši ir tukšs vietas, kur vēlaties biti. 890 00:39:05,270 --> 00:39:06,850 Viņi vai nu nullēm un uzņēmumiem. 891 00:39:06,850 --> 00:39:09,610 >> Tātad izrādās, ka temp, jo mēs esam nav inicializēts to vēl, 892 00:39:09,610 --> 00:39:14,580 mums ir šie 32 biti, bet tie esam ne inicializēts visām zināmajām vērtībām. 893 00:39:14,580 --> 00:39:18,110 Tātad kādi tie bija visvairāk nesen izmantota for-- tām 32 bits-- 894 00:39:18,110 --> 00:39:23,000 mēs esam tikai redzēt artifacts dažu iepriekšējais lietošana šiem konkrētajiem 32 895 00:39:23,000 --> 00:39:23,500 biti. 896 00:39:23,500 --> 00:39:27,780 Tiklīdz es noklikšķiniet Step Over gan, Phew, temp gatavojas iegūt vērtību 1. 897 00:39:27,780 --> 00:39:31,600 Un, ja es to darīt atkal, a ir tiks dota vērtība 2 898 00:39:31,600 --> 00:39:33,830 un tad b gatavojas jādod vērtību 1. 899 00:39:33,830 --> 00:39:36,390 >> Un tā, kādi ir jauki tagad šis punkts stāsts 900 00:39:36,390 --> 00:39:39,750 ir tā, ka atkļūdotājs ir rāda man, super lēni 901 00:39:39,750 --> 00:39:42,640 pie mana savā tempā, ko stāvoklis Swap ir. 902 00:39:42,640 --> 00:39:47,490 Bet paziņojums augšpusē šeit, paziņojums ka zvanu kaudze faktiski 903 00:39:47,490 --> 00:39:49,180 ir divi slāņi uz to. 904 00:39:49,180 --> 00:39:53,240 Tagad viens, kas ir iezīmēts kā Swap, ja es noklikšķiniet uz Main vietā, 905 00:39:53,240 --> 00:39:57,100 paziņojums, kā vietējās mainīgie mainās jo attīstītājs var tikai apiņu 906 00:39:57,100 --> 00:39:59,740 apkārt un doties jebkurā citā darbības jomā. 907 00:39:59,740 --> 00:40:04,070 Tātad, pat ja mēs darām visu to strādāt un pareizi pārnešana A un B, 908 00:40:04,070 --> 00:40:09,080 ja man iet uz priekšu un atpakaļ starp Swap kur a ir 2, un b ir 1 un Main, 909 00:40:09,080 --> 00:40:11,851 ir Main skārusi vispār? 910 00:40:11,851 --> 00:40:12,350 Nē. 911 00:40:12,350 --> 00:40:13,930 Tātad, kas ir takeaway šeit? 912 00:40:13,930 --> 00:40:18,200 Nu, izrādās, ka jebkurā brīdī tu sauc funkciju, piemēram, Swap, 913 00:40:18,200 --> 00:40:21,600 un jūs nodot to argumentus, ko jūs iet uz Swap funkcijai 914 00:40:21,600 --> 00:40:24,730 Šajā gadījumā, ja ir kopija no šiem argumentiem. 915 00:40:24,730 --> 00:40:28,620 Tātad, ja X un Y katrs ir attiecīgi 32 biti, ko Swap kļūst 916 00:40:28,620 --> 00:40:30,760 ir divas jaunas vietējās mainīgie, vai argumenti, 917 00:40:30,760 --> 00:40:34,380 sauc un b-- bet tie ir patvaļīgi names-- bet modelis nullēm 918 00:40:34,380 --> 00:40:39,520 un vieni no A un B iekšā ir izklāta līdz būt identisks x un y 919 00:40:39,520 --> 00:40:42,610 bet tie nav pats kā x un y. 920 00:40:42,610 --> 00:40:46,880 >> Tas ir tā, it kā Main ir tās gabala papīrs numurs 1 un 2 x un y, 921 00:40:46,880 --> 00:40:49,260 un tad, kad tā rokām, kas papīra apmainīt, 922 00:40:49,260 --> 00:40:51,970 Swap ļoti ātri kļūst pati pildspalva, raksta uz leju 923 00:40:51,970 --> 00:40:56,240 1 un 2 uz savas papīra loksnes, rokas atpakaļ sākotnējo XY galvenā 924 00:40:56,240 --> 00:40:58,790 un tad dara to pašu lieta ar a un b. 925 00:40:58,790 --> 00:41:01,940 Un tagad tas ir super svarīgi, jo Tas ir sarežģītākus sekas 926 00:41:01,940 --> 00:41:06,260 par faktiski rakstot pareizo kodu jo šķiet, mēs nevaram mijmaiņas 927 00:41:06,260 --> 00:41:07,500 divi mainīgie. 928 00:41:07,500 --> 00:41:09,150 >> Es esmu uzrakstījis pareizu Swap funkciju. 929 00:41:09,150 --> 00:41:12,770 Mēs esam īstenots ar Lauren kā pareizs mijmaiņas funkcija patiesībā, 930 00:41:12,770 --> 00:41:16,700 bet acīmredzot neviens no šo lietās, ja jūs nevarat patiešām 931 00:41:16,700 --> 00:41:19,530 mijmaiņas divas vērtības pastāvīgi. 932 00:41:19,530 --> 00:41:21,970 Tāpēc mums ir vēl viens veids, kā lai faktiski saņemtu šajā, 933 00:41:21,970 --> 00:41:24,472 un mums ir jāspēj faktiski atrisināt šo problēmu. 934 00:41:24,472 --> 00:41:27,180 Un izrādās out-- un mēs nākt atpakaļ uz šo konkrēto attēlu 935 00:41:27,180 --> 00:41:30,500 pirms long-- šis ir viens no veidiem, kas jūs varētu izdarīt datora atmiņā. 936 00:41:30,500 --> 00:41:31,460 Tas ir tikai taisnstūris. 937 00:41:31,460 --> 00:41:32,960 Jūs varētu izdarīt to jebkurš vairāki veidi, bet tas ir 938 00:41:32,960 --> 00:41:35,740 ērti izdarīt to kā taisnstūris šāda iemesla dēļ. 939 00:41:35,740 --> 00:41:40,040 >> Mēs ejam, lai sāktu šodien un turpmāk runājam par tā saukto kaudze. 940 00:41:40,040 --> 00:41:43,870 Un kaudze ir tikai rieciens no RAM-- rieciens memory-- 941 00:41:43,870 --> 00:41:47,100 ka funkcijas ir pieejamas lai tad, kad viņi sauc. 942 00:41:47,100 --> 00:41:49,800 Un tā izrādās, ka pie ļoti apakšā šo kaudze 943 00:41:49,800 --> 00:41:53,590 ir vieta, kur visi galvenie vietējo mainīgie un org C un org V un visu, kas stuff 944 00:41:53,590 --> 00:41:56,950 gatavojas doties pēc noklusējuma. Un, ja galvenās prasa dažas citas funkcijas, piemēram, Swap, 945 00:41:56,950 --> 00:42:00,330 labi, Swap gatavojas saņemt citu slānis atmiņu līdz virs tā. 946 00:42:00,330 --> 00:42:04,490 >> Un tā tikai, lai dotu jums ātri paviršs priekšstatu par to, ja es eju pa here-- 947 00:42:04,490 --> 00:42:09,450 un ļaujiet man spogulis šo par gaisvadu kā well-- to, kas patiešām man ir, 948 00:42:09,450 --> 00:42:12,100 ja mēs rūpējamies tikai par apakšā šo attēlu tagad, 949 00:42:12,100 --> 00:42:15,070 ir tas, ka tad, kad es palaist programmu un Main izpaužas sauc, 950 00:42:15,070 --> 00:42:18,330 Galvenais ir dota rieciens RAM manā datorā, kas ir 951 00:42:18,330 --> 00:42:20,060 apakšā šo tā saukto skursteni. 952 00:42:20,060 --> 00:42:22,143 Un es esmu gatavojas izdarīt to apzināti kā kvadrāts. 953 00:42:22,143 --> 00:42:24,540 Tātad, tas ir tāpat kā 32 bitu vai četriem baitiem. 954 00:42:24,540 --> 00:42:28,790 Un, ja tas galvenā funkcija has a mainīgo sauc x, kuru vērtība ir 1 955 00:42:28,790 --> 00:42:32,626 un tā ir mainīga, ko sauc par y ar vērtību 2, kas ir 956 00:42:32,626 --> 00:42:35,750 piemēram, ņemot šo skaida atmiņu, kas Galvenais ir devusi pamatdarbības 957 00:42:35,750 --> 00:42:38,850 sistēma un dalot to uz augšu, lai pirmais vietējās mainīgais iet šeit, 958 00:42:38,850 --> 00:42:40,930 otrais iet šeit, un tas arī viss. 959 00:42:40,930 --> 00:42:45,590 >> Kad Main aicina swap, Swap izpaužas savu šķēle atmiņas 960 00:42:45,590 --> 00:42:48,280 ka mēs izdarīt kā šis no operētājsistēmas, 961 00:42:48,280 --> 00:42:50,820 un tas notiek, lai būtu tā pašu vietējie mainīgie balstīta 962 00:42:50,820 --> 00:42:53,825 mūsu īstenošanu agrāk ar vietējiem mainīgajiem lielumiem 963 00:42:53,825 --> 00:42:58,010 un b, ka sākotnēji iegūt vērtības 1 un 2. 964 00:42:58,010 --> 00:43:00,450 Bet tad, tiklīdz mijmaiņas kods izpilda, 965 00:43:00,450 --> 00:43:03,760 un Lauren faktiski mijmaiņas OV un piens, kas notiek? 966 00:43:03,760 --> 00:43:09,030 Nu, šī 2 kļūst par 1, tas 1 kļūst par 2, un, starp citu, 967 00:43:09,030 --> 00:43:13,360 ir temp mainīgs, kas ir to izmantojusi šo visu laiku, kas galu galā 968 00:43:13,360 --> 00:43:14,470 iet prom. 969 00:43:14,470 --> 00:43:16,720 Bet tas nav svarīgi cik daudz darba jūs darīt 970 00:43:16,720 --> 00:43:22,160 šajā rindā of-- šajā atmiņas telpa, x un y neatkarīgi ir pilnīgi neskarta. 971 00:43:22,160 --> 00:43:26,320 >> Tāpēc mums ir nepieciešams zināms veids, kā dot Swap un funkcijas patīk 972 00:43:26,320 --> 00:43:32,640 noslēpums piekļuve, ja vēlaties, lai funkcijas like-- atmiņā, piemēram, x un y. 973 00:43:32,640 --> 00:43:35,110 Tātad, pieņemsim to apskatīt piemērs, kas palīdz 974 00:43:35,110 --> 00:43:38,220 mums redzēt, tieši to, kas ir bijis notiek visu šo laiku. 975 00:43:38,220 --> 00:43:40,284 Es iešu uz priekšu un atvērt Salīdziniet nulle. 976 00:43:40,284 --> 00:43:42,200 Un es esmu gatavojas slēgt Mūsu atkļūdotājs, es eju 977 00:43:42,200 --> 00:43:44,360 aizvērt šo biedējošu meklējat ziņu tikko saka, pagaidiet minūti, 978 00:43:44,360 --> 00:43:45,800 tu esi vidū atkļūdošanu. 979 00:43:45,800 --> 00:43:48,383 Es esmu gatavojas, lai slēptu šo cilni šeit tikai, lai dotos atpakaļ uz vienkāršību. 980 00:43:48,383 --> 00:43:50,160 Tāpēc nav jāuztraucas, ja GDB tiek nogalināti. 981 00:43:50,160 --> 00:43:53,910 Tas nozīmē tikai to, ka programma ir ir atmest, apzināti šajā gadījumā, 982 00:43:53,910 --> 00:43:54,820 ar mani. 983 00:43:54,820 --> 00:43:57,700 >> Un tagad salīdziniet Zero tas. 984 00:43:57,700 --> 00:44:00,110 Es esmu, izmantojot CS50 bibliotēka standarta I / O. 985 00:44:00,110 --> 00:44:04,319 Man galvenā funkcija, kas pirmo reizi saka, kaut ko pateikt, un saņem virkni. 986 00:44:04,319 --> 00:44:06,110 Tad saka, ka tā atkal un izpaužas vēl virkni. 987 00:44:06,110 --> 00:44:09,910 Un paziņojums, ka šie divi virknes sauc par S un T, attiecīgi. 988 00:44:09,910 --> 00:44:12,910 Un tagad šī programma, salīdziniet Zero, tās mērķis dzīvē, 989 00:44:12,910 --> 00:44:15,470 tas ir paredzēts, lai man pateikt, did I tipa to pašu? 990 00:44:15,470 --> 00:44:16,910 Un tāpēc es esmu dodas atpakaļ uz nedēļu vienu. 991 00:44:16,910 --> 00:44:19,950 Es esmu, izmantojot manu vienlīdzīgu vienlīdzīgu operatoru kas ir kvalitāte operators. 992 00:44:19,950 --> 00:44:22,220 Ne piešķiršana operatoram, vienlīdzības operators. 993 00:44:22,220 --> 00:44:23,890 Es esmu tikai salīdzinot s un t. 994 00:44:23,890 --> 00:44:27,470 >> Tātad pieņemsim faktiski iet uz priekšu un darīt to. 995 00:44:27,470 --> 00:44:32,680 Un es iešu uz priekšu un padarīt Salīdziniet nulle. 996 00:44:32,680 --> 00:44:35,110 Es esmu gatavojas darīt ./comparezero. 997 00:44:35,110 --> 00:44:37,150 Un es iešu priekšu un pateikt kaut ko 998 00:44:37,150 --> 00:44:43,450 piemēram, pieņemsim darīt mamma ar mazajiem un kā par mammu ar lielajiem. 999 00:44:43,450 --> 00:44:45,034 Un, protams, es rakstīt dažādas lietas. 1000 00:44:45,034 --> 00:44:45,533 Viss kārtībā. 1001 00:44:45,533 --> 00:44:46,570 Tas ir sagaidāms. 1002 00:44:46,570 --> 00:44:47,640 >> Pieņemsim palaist vēlreiz. 1003 00:44:47,640 --> 00:44:49,740 Abas reizes darīt mazos, mazos. 1004 00:44:49,740 --> 00:44:51,490 Tas izskatās super identiski man. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 LABI. 1007 00:44:53,430 --> 00:44:55,804 Varbūt tā ir tikai dīvaini, jo tas nav patika manu gramatiku. 1008 00:44:55,804 --> 00:44:59,930 Tātad, pieņemsim do kapitāla MOM, kapitāls MOM, identiski. 1009 00:44:59,930 --> 00:45:01,490 Dažādas lietas. 1010 00:45:01,490 --> 00:45:03,907 >> Tātad, kāpēc ir tā, ka? 1011 00:45:03,907 --> 00:45:06,240 Nu, ko patiesībā notiek par zem motora pārsega šeit? 1012 00:45:06,240 --> 00:45:08,180 So iesim atpakaļ pār šeit tikai brīdi 1013 00:45:08,180 --> 00:45:10,910 un apsvērt, kādi GetString ir faktiski dara. 1014 00:45:10,910 --> 00:45:13,385 Kad jūs zvanu GetString, tas ir funkcija mēs 1015 00:45:13,385 --> 00:45:16,510 paši rakstīja un tas kaut kā izpaužas rakstzīmju sekvence no lietotāja. 1016 00:45:16,510 --> 00:45:20,280 Un pieņemsim, ka pirmais Šoreiz es aicinu GetString, kas dod man 1017 00:45:20,280 --> 00:45:21,930 rieciens atmiņas, kas izskatās šādi. 1018 00:45:21,930 --> 00:45:26,990 Un, ja es drukāti visiem mazajiem m-o-m-- un to, kas notiek pēc tam? 1019 00:45:26,990 --> 00:45:28,840 Just a quick veselība pārbaudītu. 1020 00:45:28,840 --> 00:45:29,780 >> Slīpsvītru nulle. 1021 00:45:29,780 --> 00:45:30,510 Mēs zinām, ka. 1022 00:45:30,510 --> 00:45:32,784 Un atcerēties, ka mēs spēlējām apkārt ar Zamila nosaukumu 1023 00:45:32,784 --> 00:45:34,950 un ķekars citus nosaukumus kad Rob bija šeit meklē 1024 00:45:34,950 --> 00:45:36,280 par to, kas notiek iekšā atmiņas. 1025 00:45:36,280 --> 00:45:37,780 Tā, ka stāsts ir tieši tāds pats. 1026 00:45:37,780 --> 00:45:40,160 Tas ir tas, ko GetString atgriežas pie manis. 1027 00:45:40,160 --> 00:45:44,780 Tagad, mans kods pirms brīža uzglabāti atgriešanās vērtību GetString 1028 00:45:44,780 --> 00:45:47,510 lielumâ sauc s. 1029 00:45:47,510 --> 00:45:51,390 Un tad otrā reize, kad es to sauca, tā glabājas to mainīgo sauc t. 1030 00:45:51,390 --> 00:45:55,070 >> Tātad, ja es iet vairāk nekā šeit, man ir nepieciešams izdarīt šo vietējo variable-- 1031 00:45:55,070 --> 00:45:59,610 un es esmu vispār gatavojas izdarīt virkni kā just-- mēs 1032 00:45:59,610 --> 00:46:02,360 sauc to s-- kā mazs laukumā šeit. 1033 00:46:02,360 --> 00:46:09,760 Un tagad, somehow-- kā tas mamma iet iekšā šo mainīgo s? 1034 00:46:09,760 --> 00:46:12,010 Nu, mums ir nepieciešams, lai dotos atpakaļ uz pirmajiem principiem šeit. 1035 00:46:12,010 --> 00:46:15,660 Kas ir GetString faktiski atgriežas? 1036 00:46:15,660 --> 00:46:19,030 >> Tātad izrādās, ka M-O-M slīpsvītru nulle, un jebkurš skaits 1037 00:46:19,030 --> 00:46:22,364 Citu stīgas atmiņā līdzīgu Zamila un Rob vai Andy vai jebkuras citas metodes, 1038 00:46:22,364 --> 00:46:24,280 Ir, protams, mūsu datora RAM vai atmiņas. 1039 00:46:24,280 --> 00:46:27,760 Un jūsu RAM ir like-- esat GIG RAM, divas gigs RAM, 1040 00:46:27,760 --> 00:46:30,860 vai miljards vai divi miljardi baiti, vai varbūt pat vairāk šajās dienās. 1041 00:46:30,860 --> 00:46:34,070 Tātad pieņemsim, šodienas vajadzībām, ka tas nav svarīgi, kā mēs numurēt 1042 00:46:34,070 --> 00:46:36,640 viņiem, taču mēs varam skaits katrai no tiem miljardiem vai divi miljardi 1043 00:46:36,640 --> 00:46:37,880 vai četri miljardi baiti. 1044 00:46:37,880 --> 00:46:42,240 >> Un pieņemsim tikai patvaļīgi teikt, ka šis ir pirmais sakodiens, otrais sakodiens, 1045 00:46:42,240 --> 00:46:43,380 trešo, ceturto. 1046 00:46:43,380 --> 00:46:46,570 Es apzināti nelieto nulli šodien, bet mēs atgriezīsimies pie tā. 1047 00:46:46,570 --> 00:46:49,570 Tātad, citiem vārdiem sakot, ja tas ir Pirmo reizi es esmu, izmantojot programmu, 1048 00:46:49,570 --> 00:46:52,715 Es esmu tikai kļūst laimīgs un pirmais sakodiens ir atrašanās vienā tad divas 1049 00:46:52,715 --> 00:46:53,590 tad trīs nekā četri. 1050 00:46:53,590 --> 00:46:57,430 Un, ja es tur zīmēšanas, kastītes numurs divi miljardi būtu veids, nekā šeit. 1051 00:46:57,430 --> 00:47:02,200 >> Tātad, ko jūs domājat, tad, GetString faktiski atgriežas? 1052 00:47:02,200 --> 00:47:06,010 Tas neatgriezīsies M-O-M slīpsvītru nulle per se, jo tas skaidri 1053 00:47:06,010 --> 00:47:08,180 neiederas lodziņu, kas es esmu novilkta. 1054 00:47:08,180 --> 00:47:11,210 Tātad, ko vēl varētu GetString faktiski atgriežas visas šīs nedēļas? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Atbilde ir par dēlis šeit kaut kur. 1057 00:47:16,820 --> 00:47:20,390 Jūs nevarat fit M-O-M slīpsvītru nulles, Tātad, ko varētu jēgas vietā? 1058 00:47:20,390 --> 00:47:23,424 Ja jums bija jābūt super gudrs, liekot uz tā saukto inženierijas cepure, 1059 00:47:23,424 --> 00:47:24,340 Ko jūs varētu atgriezties? 1060 00:47:24,340 --> 00:47:27,340 Kas ir vismazāk informācijas apjoms jūs varētu atgriezties, ka joprojām 1061 00:47:27,340 --> 00:47:30,610 ļauj jums atrast M-O-M atmiņā? 1062 00:47:30,610 --> 00:47:31,270 Yeah? 1063 00:47:31,270 --> 00:47:31,950 >> Mērķauditorija: One. 1064 00:47:31,950 --> 00:47:32,200 >> DAVID J. Malan: One. 1065 00:47:32,200 --> 00:47:33,021 Un kāpēc viens? 1066 00:47:33,021 --> 00:47:35,520 Mērķauditorija: Jo tas varētu pateikt Jums, kur doties [nedzirdama]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 DAVID J. Malan: Tieši tā. 1069 00:47:39,390 --> 00:47:44,300 Es esmu tikai gatavojas atgriezties adresi no virknes, kas man ir gotten. 1070 00:47:44,300 --> 00:47:46,570 Ar šī adrese Lieta ir vieta viena. 1071 00:47:46,570 --> 00:47:51,280 Tātad, kas īsti tiek glabāti s-- un katrs string mainīgais tādējādi far-- 1072 00:47:51,280 --> 00:47:53,430 tikko bijis adrese, virkni. 1073 00:47:53,430 --> 00:47:57,840 >> Tikmēr, ja es aicinu GetString otro reizi, un es 1074 00:47:57,840 --> 00:48:03,300 ierakstiet burtiski to pašu thing-- M-O-M ar lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 un vēl slīpsvītru nulle, un tagad varbūt mana programma ir 1076 00:48:06,200 --> 00:48:09,820 darbojas jau kādu laiku, tāpēc varbūt tas ir 10, tas ir vieta 11, tas ir 12, 1077 00:48:09,820 --> 00:48:10,700 tas ir 13. 1078 00:48:10,700 --> 00:48:13,590 Datori izmantojot kādu citu atmiņa jebkāda iemesla dēļ. 1079 00:48:13,590 --> 00:48:18,172 Kas tagad notiek manā sekundē mainīgs manā programmā t? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Tieši tā. 1082 00:48:20,050 --> 00:48:23,910 >> Un tad, kad mēs apskatīt pirmkods šī programma 1083 00:48:23,910 --> 00:48:26,550 kur es esmu vienkārši cenšos salīdzināt divas vērtības, 1084 00:48:26,550 --> 00:48:32,180 ir s vienāds vienāds ar t, kas ir skaidrs cilvēka atbilde? 1085 00:48:32,180 --> 00:48:34,890 Tikai ne tāpēc, ka 1 nav vienāds 10. 1086 00:48:34,890 --> 00:48:36,861 Un tā šeit slēpjas iespēja mums patiešām 1087 00:48:36,861 --> 00:48:39,610 tikai iet atpakaļ, atkal pirmais principus un domāt par, labi, 1088 00:48:39,610 --> 00:48:41,110 kas notiek zem motora pārsega? 1089 00:48:41,110 --> 00:48:43,240 Mēs esam runājuši par biti un baiti un atmiņa, 1090 00:48:43,240 --> 00:48:46,820 bet patiesībā tas ir noderīgi, lai izprastu jo, kad jūs zvanu GetString, 1091 00:48:46,820 --> 00:48:50,280 pat ja mēs domājam par to atgriežoties M-O-M vai stīgu mamma 1092 00:48:50,280 --> 00:48:53,120 vai Andy vai Zamila vai tamlīdzīgi, tehniski 1093 00:48:53,120 --> 00:48:55,510 tas ir tikai atgriežas adresi Minētās rieciens atmiņas. 1094 00:48:55,510 --> 00:48:56,910 >> Bet tas ir OK. 1095 00:48:56,910 --> 00:49:00,570 Jo kā es varu zināt kur stīgu beidzas? 1096 00:49:00,570 --> 00:49:03,840 Ja es esmu tikai dota sākumu? 1097 00:49:03,840 --> 00:49:05,380 Nu, slīpsvītru nulle, vai ne? 1098 00:49:05,380 --> 00:49:08,800 Tieši lineārā laika es varu izdrukāt ar drukas def M-O-M. 1099 00:49:08,800 --> 00:49:11,820 Un tiklīdz es redzu slīpsvītru nulle, man vienalga, kur es sāku, 1100 00:49:11,820 --> 00:49:14,950 Es jau zinu, netieši kur man ir nepieciešams, lai izbeigtu. 1101 00:49:14,950 --> 00:49:18,700 >> Un tā šodien iezīmē beginning-- un ļaujiet man darīt dramatiski, jo mēs 1102 00:49:18,700 --> 00:49:21,800 pārdzīvoja daudz problēmas ar saņemt šos šeit mācības wheels-- 1103 00:49:21,800 --> 00:49:29,840 Tātad šodien mācību riteņi sāk atrauties un mēs atklāt pie least-- 1104 00:49:29,840 --> 00:49:31,373 >> [Aplausi] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Tas bija labi vērts ceļojums Target šorīt, jā? 1107 00:49:36,160 --> 00:49:39,600 Tātad now-- ir, izrādās ārā, nav tādas lietas kā virkni. 1108 00:49:39,600 --> 00:49:41,140 String neeksistē. 1109 00:49:41,140 --> 00:49:43,760 Tas ir sinonīmu, ka mēs esam bija iekšpusē CS50 bibliotēkā. 1110 00:49:43,760 --> 00:49:48,660 Turpmāk, mēs ejam, lai sāktu zvanīt s un t nevis virknes, bet char zvaigznes. 1111 00:49:48,660 --> 00:49:51,180 Un char zvaigzne mēs ķircināt intervālu pirms ilgi. 1112 00:49:51,180 --> 00:49:53,510 Bet tas ir, ka pat tad, ja mēs turpināsim 1113 00:49:53,510 --> 00:49:56,180 izmantojot GetString tagad, tehniski es būtu 1114 00:49:56,180 --> 00:49:59,010 būt sakot char zvaigzne un char zvaigzne. 1115 00:49:59,010 --> 00:50:01,720 >> Un izrādās, ka kāda zvaigzne gatavojas apzīmētu ir kaut kas 1116 00:50:01,720 --> 00:50:04,340 sauc rādītājs vai adrese. 1117 00:50:04,340 --> 00:50:06,110 Un patiesībā, teaser par to, kas ir priekšā 1118 00:50:06,110 --> 00:50:09,760 tas ir 20 sekunžu klips no mūsu draugs Nick Parlante Stenfordas 1119 00:50:09,760 --> 00:50:12,927 kurš, pirms diezgan kādu laiku, pavadīt smieklīgs daudz laika, 1120 00:50:12,927 --> 00:50:15,010 cik labi es varu pateikt viņa virtuves vai viņa pagrabā, 1121 00:50:15,010 --> 00:50:17,140 padarot claymation ievieš uz pasauli 1122 00:50:17,140 --> 00:50:20,010 raksturs nosaukts Binky ar kuriem mēs 1123 00:50:20,010 --> 00:50:22,010 jāievieš nākamreiz uz norādes. 1124 00:50:22,010 --> 00:50:24,588 Tātad, šeit ir preview par to, kas ir nākt. 1125 00:50:24,588 --> 00:50:26,370 >> [Video atskaņošana] 1126 00:50:26,370 --> 00:50:27,510 >> -Hey, Mīkstās. 1127 00:50:27,510 --> 00:50:28,260 Celies. 1128 00:50:28,260 --> 00:50:30,672 Ir pienācis laiks, lai rādītāju jautri. 1129 00:50:30,672 --> 00:50:31,616 >> -Kas tas ir? 1130 00:50:31,616 --> 00:50:33,032 Uzziniet par norādes? 1131 00:50:33,032 --> 00:50:34,450 Ak, našķis. 1132 00:50:34,450 --> 00:50:35,431 >> [Beigtu atskaņošanu] 1133 00:50:35,431 --> 00:50:38,055 DAVID J. Malan: Un par šo piezīmi, mēs redzēsim tevi trešdien. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Viss kārtībā. 1136 00:50:48,090 --> 00:50:48,740 Kas ir dejas? 1137 00:50:48,740 --> 00:50:49,240 Nāc šurp. 1138 00:50:49,240 --> 00:50:50,330 Kas ir dejas? 1139 00:50:50,330 --> 00:50:51,820 Tu gribi, lai saņemtu to sākās? 1140 00:50:51,820 --> 00:50:53,770 Es nopirkšu tas sākās. 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 iedomātā Mozus.