1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> DAVID J. Malan: Kjo është CS50 dhe ky është fillimi i javës së katër. 3 00:00:14,050 --> 00:00:18,630 Dhe, djalë, është në Volkswagen probleme të gjitha për shkak të softuerit. 4 00:00:18,630 --> 00:00:20,264 Le të marrin një sy. 5 00:00:20,264 --> 00:00:20,930 [VIDEO rishikim] 6 00:00:20,930 --> 00:00:25,560 -Cars, Personazhet të zgjuar në filma Shpejtë dhe i furishëm. 7 00:00:25,560 --> 00:00:29,100 Kjo automaker gjermane javë Volkswagen gjeti veten 8 00:00:29,100 --> 00:00:32,490 në mes të një skandali të proporcione potencialisht kriminale. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Po bëhet gati për miliarda në gjobave, akuza të mundshme penale 10 00:00:36,060 --> 00:00:38,560 për drejtuesit e saj, si Kompania kërkon ndjesë 11 00:00:38,560 --> 00:00:41,840 për manipulim 11 milionë makina për ndihmojë atë të mundi teste emisionet. 12 00:00:41,840 --> 00:00:44,950 >> Modelet -Certain naftë ishin projektuar me software të sofistikuar 13 00:00:44,950 --> 00:00:48,440 që informacioni përdorur duke përfshirë Pozicioni i drejtimit dhe automjeteve 14 00:00:48,440 --> 00:00:51,870 shpejtuar për të përcaktuar se makina ishte nënshtruar testimit emisionet. 15 00:00:51,870 --> 00:00:55,650 Nën këtë rrethanë, motor do të reduktonte emetimet toksike. 16 00:00:55,650 --> 00:00:59,070 Por makina ishte i manipuluar për të anashkalojë që kur ai ishte duke u shtyrë. 17 00:00:59,070 --> 00:01:03,320 Emetimet rritur 10 deri 40 herë mbi nivele të pranueshme EPA. 18 00:01:03,320 --> 00:01:04,280 >> [END rishikim] 19 00:01:04,280 --> 00:01:05,220 >> DAVID J. Malan: Pra, le të hidhini një sy në këtë 20 00:01:05,220 --> 00:01:07,250 dhe parë saktësisht se si kjo mund të zbatohen 21 00:01:07,250 --> 00:01:09,680 dhe se si kjo mund të ndikojë kaq shumë makina si kjo. 22 00:01:09,680 --> 00:01:12,840 Pra, në dorën time këtu janë shtypi lirimin se është lëshuar nga EPA-- 23 00:01:12,840 --> 00:01:14,620 e Mjedisit Agjencia e Mbrojtjes e cila 24 00:01:14,620 --> 00:01:18,032 është agjencia rregullatore amerikane që trajton shqetësimet mjedisore, 25 00:01:18,032 --> 00:01:19,740 dhe pastaj aktual Njoftim ligjor që ishte 26 00:01:19,740 --> 00:01:22,420 dërgojnë në Volkswagen vetëm pak ditë më parë. 27 00:01:22,420 --> 00:01:26,530 >> Pra, EPA shkruan, dhe zbulon tani publikisht, një software të sofistikuar 28 00:01:26,530 --> 00:01:29,390 algorithm për të caktuar Automjetet Volkswagen zbulon 29 00:01:29,390 --> 00:01:32,630 kur makina është duke kaluar nëpër Testimi emisionet zyrtare 30 00:01:32,630 --> 00:01:36,505 dhe kthehet emisioneve të plota kontrollon në vetëm gjatë testit. 31 00:01:36,505 --> 00:01:38,380 Efektiviteti i këto ndotja automjeteve 32 00:01:38,380 --> 00:01:43,260 Pajisjet e kontrollit emisioneve është në masë të madhe reduktuar gjatë gjithë ngarje normale 33 00:01:43,260 --> 00:01:44,320 situata. 34 00:01:44,320 --> 00:01:48,190 Kjo rezulton në makinat që plotësojnë Standardet në laborator ose testimin 35 00:01:48,190 --> 00:01:52,790 stacion, por gjatë funksionimit normal lëshojnë oxides-- azoti ose NOx-- 36 00:01:52,790 --> 00:01:54,950 në deri në 40 herë standardit. 37 00:01:54,950 --> 00:01:58,220 Software prodhuar nga Volkswagen është një pajisje kuotë mbyll thonjëzat, humbjen, 38 00:01:58,220 --> 00:02:00,650 siç përcaktohet nga Clean Air Act në SHBA. 39 00:02:00,650 --> 00:02:03,410 >> Ata shkojnë të thotë se EPA dhe një tjetër agjenci 40 00:02:03,410 --> 00:02:07,020 zbuluar pajisjen humbjen software pas analizave të pavarura 41 00:02:07,020 --> 00:02:09,660 nga hulumtuesit në Perëndim Universiteti Virginia. 42 00:02:09,660 --> 00:02:14,160 Ndotja e NOx kontribuon në dioksidi i azotit, ozoni i nivelit tokë, 43 00:02:14,160 --> 00:02:15,700 dhe çështje gjobë grimcat. 44 00:02:15,700 --> 00:02:18,090 Ekspozimi ndaj këtyre Ndotësit ka qenë e lidhur 45 00:02:18,090 --> 00:02:20,870 me një gamë të gjerë të efekte serioze shëndetësore, 46 00:02:20,870 --> 00:02:23,637 duke përfshirë edhe rritjen e astmës Sulmet dhe frymëmarrjes të tjera 47 00:02:23,637 --> 00:02:26,470 Sëmundje që mund të jenë mjaft serioze për të dërguar njerëzit në spital. 48 00:02:26,470 --> 00:02:28,660 Ekspozimit ndaj ozonit dhe grimcat ka edhe 49 00:02:28,660 --> 00:02:31,960 qenë lidhur me parakohshme vdekje për shkak të rrugëve të frymëmarrjes të lidhura 50 00:02:31,960 --> 00:02:35,690 ose kardiovaskulare efekte të lidhura. 51 00:02:35,690 --> 00:02:38,940 Fëmijët, të moshuarit, njerëzit me sëmundje preexisting frymëmarrjes 52 00:02:38,940 --> 00:02:42,840 janë veçanërisht në rrezik për Efektet shëndetësore të këtyre ndotësve. 53 00:02:42,840 --> 00:02:45,056 >> Mjaftojnë do të thotë, se është mjaft serioze. 54 00:02:45,056 --> 00:02:46,930 Dhe le të shkojnë në për të lexuar vetëm një fragment më shumë 55 00:02:46,930 --> 00:02:49,370 dhe pastaj ne do të hedhim një vështrim në implikimet themelore 56 00:02:49,370 --> 00:02:50,920 e kjo në kontekstin e një makine. 57 00:02:50,920 --> 00:02:53,730 Në mënyrë të veçantë, Volkswagen prodhuar dhe instaluar 58 00:02:53,730 --> 00:02:56,210 software në të ashtuquajturat kontrollit elektronik 59 00:02:56,210 --> 00:02:59,320 module-- ose ECM-- e këto automjete që ndjen 60 00:02:59,320 --> 00:03:03,580 kur automjeti ishte duke u testuar për pajtueshmëria me standardet EPA emetimit. 61 00:03:03,580 --> 00:03:07,510 Bazuar në të dhënat e ndryshme duke përfshirë edhe Pozicioni i timonit, automjeteve 62 00:03:07,510 --> 00:03:11,280 shpejtësi, kohëzgjatja e motor-së operacion, dhe presion barometrik, 63 00:03:11,280 --> 00:03:13,720 këto inputeve pikërisht gjurmuar parametrat 64 00:03:13,720 --> 00:03:17,600 e procedurës së testimit federale përdoren për testimi emision për certifikimin EPA 65 00:03:17,600 --> 00:03:18,400 qëllime. 66 00:03:18,400 --> 00:03:21,850 >> Gjatë testimit EPA emetimit, Automjetet ECM software 67 00:03:21,850 --> 00:03:25,060 vrapoi software që prodhuar emisionet përputhje rezultate. 68 00:03:25,060 --> 00:03:28,340 Në të gjitha raste të tjera, software ECM automjeteve 69 00:03:28,340 --> 00:03:31,090 u zhvillua një rrugë të veçantë kalibrimit e cila reduktuar 70 00:03:31,090 --> 00:03:34,360 efikasiteti i sistemi i përgjithshëm i kontrollit të emetimit, 71 00:03:34,360 --> 00:03:37,864 veçanërisht katalitik selektiv reduktimi i NOx Lean trap-- 72 00:03:37,864 --> 00:03:39,280 të cilat ne do të shohim për në një moment. 73 00:03:39,280 --> 00:03:43,040 Si rezultat, emetimet e NOx u rritën me një faktor prej 10 deri në 40 herë 74 00:03:43,040 --> 00:03:47,450 mbi nivelet EPA përputhje në varësi të llojit të ciklit të drejtimit. 75 00:03:47,450 --> 00:03:50,800 >> Pra, çfarë do të thotë kjo me të vërtetë, dhe kod burim të software running 76 00:03:50,800 --> 00:03:53,190 në Volkswagen nuk ka ende nuk është ditur publikisht, 77 00:03:53,190 --> 00:03:56,460 është se, në mënyrë efektive, kjo ekuivalent ka diku brenda 78 00:03:56,460 --> 00:03:57,830 e kodit Volkswagen. 79 00:03:57,830 --> 00:04:02,200 Në qoftë se ju jeni duke u testuar, dhe nëse makina zbulon disa faktorë mjedisorë 80 00:04:02,200 --> 00:04:04,330 si timon pozicioni apo lëvizja 81 00:04:04,330 --> 00:04:06,710 ose mungesa e tij e makinave ose çdo numër i faktorëve të tjerë 82 00:04:06,710 --> 00:04:09,940 që janë aktualisht hypothesized të jetë pjesë e kësaj formule, 83 00:04:09,940 --> 00:04:12,370 ata thjesht kthehet në emisionet Kontrolli i plotë. 84 00:04:12,370 --> 00:04:15,670 Me fjalë të tjera, ata fillojnë emitting më pak e ndotësve. 85 00:04:15,670 --> 00:04:18,769 >> Tjetër, në çdo situatë tjetër kur ajo nuk është zbuluar si 86 00:04:18,769 --> 00:04:20,790 në laborator, ata thjesht nuk e bëjnë. 87 00:04:20,790 --> 00:04:24,320 Dhe kështu që ju mund të thjeshtojë këtë në më shumë pseudokod konkrete me diçka 88 00:04:24,320 --> 00:04:24,820 si kjo. 89 00:04:24,820 --> 00:04:27,810 Nëse rrotat janë kthyer, por timon nuk është, sugjestive 90 00:04:27,810 --> 00:04:30,060 se makina është në disa lloj i rradhës cilindër 91 00:04:30,060 --> 00:04:32,550 por në një lloj depo duke u testuar, 92 00:04:32,550 --> 00:04:36,070 atëherë sillen si EPA do të doja të. 93 00:04:36,070 --> 00:04:37,960 Përndryshe nuk e bëjnë. 94 00:04:37,960 --> 00:04:40,420 Pra, le të marrin një vështrim në një video të shkurtër që 95 00:04:40,420 --> 00:04:45,391 merr një vështrim në atë implikimet janë kjo në fakt mekanikisht. 96 00:04:45,391 --> 00:04:48,620 >> [VIDEO rishikim] 97 00:04:48,620 --> 00:04:52,800 >> -Last Premten EPA njoftoi se disa Makina Volkswagen Audi bërë midis viteve 2009 98 00:04:52,800 --> 00:04:55,840 dhe këtë vit ishin duke përdorur një të ashtu-quajtur pajisje disfatë 99 00:04:55,840 --> 00:04:59,060 për të marrë rreth ligjeve emisionet projektuar për të mbajtur në ajër të pastër. 100 00:04:59,060 --> 00:05:01,700 Por çfarë do të thotë kjo saktësisht? 101 00:05:01,700 --> 00:05:04,666 >> E pra, makina moderne kanë dhjetra e kompjuterëve brenda tyre. 102 00:05:04,666 --> 00:05:07,040 Dhe disa prej këtyre kompjuterëve të ndihmuar koordinimin e funksionet 103 00:05:07,040 --> 00:05:09,590 e motorit për optimal Performanca ndërsa duke u siguruar 104 00:05:09,590 --> 00:05:12,340 se nuk ka shumë mbeturina vjen nga tub i shkarkimit. 105 00:05:12,340 --> 00:05:15,170 Ata kanë qenë në fakt duke punuar në këtë mënyrë për disa dekada. 106 00:05:15,170 --> 00:05:17,380 Në thelb, çdo pjesë e motorit një makinë moderne të 107 00:05:17,380 --> 00:05:20,080 ka një sensor apo kontrollues në të, dhe këta kompjuterë 108 00:05:20,080 --> 00:05:23,460 duke e lexuar në të dhënat e mijëra të herë në rregullimet e dytë e bërë 109 00:05:23,460 --> 00:05:26,220 si raportin e karburantit në ajër që po ndodh në cilindra. 110 00:05:26,220 --> 00:05:28,730 >> Këto Volkswagen mashtrimit dhe modelet Audi janë diesels, 111 00:05:28,730 --> 00:05:30,890 dhe diesels kanë një më shumë kompjuter të vërtetë e rëndësishme 112 00:05:30,890 --> 00:05:34,030 parametra të kontrolluar, i cili është sasia e karburantit padjegur shkuar 113 00:05:34,030 --> 00:05:35,200 në shter. 114 00:05:35,200 --> 00:05:36,310 Tani që tingëllon keq. 115 00:05:36,310 --> 00:05:39,642 A nuk të tingëllojë si ju do të duan lëndë djegëse e padjegur shkon në shter. 116 00:05:39,642 --> 00:05:41,600 Por në rastin e një naftë, ju keni diçka 117 00:05:41,600 --> 00:05:46,110 quhet një kurth NOx cila është një pajisje që thith dhe kurthe për oksidet e azotit 118 00:05:46,110 --> 00:05:48,880 që janë ndotës që do të ndryshe shkojnë në atmosferë. 119 00:05:48,880 --> 00:05:53,040 Dhe efekti i kësaj kurth NOx është rritur me karburant të padjegur. 120 00:05:53,040 --> 00:05:56,650 Pra, një pajisje disfatë është një program i veçantë brenda këtyre kompjuterat që mund të bëjë atë 121 00:05:56,650 --> 00:05:59,527 duken si makina takohet emisionit Standardet e madje edhe kur ajo nuk ka. 122 00:05:59,527 --> 00:06:01,110 Volkswagen kishte një problem në duart e saj. 123 00:06:01,110 --> 00:06:04,050 Motorët e saj naftë ishin të njohur për marrjen e ekonomisë madhe e karburantit, 124 00:06:04,050 --> 00:06:07,510 por kurthi NOx punon vetëm mirë kur më shumë karburant është duke u përdorur. 125 00:06:07,510 --> 00:06:10,460 Pra, makina do të zbulojë, përdorur këtë pajisje humbjen, 126 00:06:10,460 --> 00:06:13,870 kur ajo ishte duke u një emisioneve provë, kjo do të përdorin më shumë karburant, 127 00:06:13,870 --> 00:06:16,830 të bëjë punën e NOx kurth mirë, Emisionet do të jetë mirë. 128 00:06:16,830 --> 00:06:21,130 Por pastaj ju merrni në rrugë, pajisjen fiket, ju jeni djegur më pak karburant 129 00:06:21,130 --> 00:06:24,256 por ju jeni vënë sa më shumë që 40 herë më shumë ndotësve në atmosferë. 130 00:06:24,256 --> 00:06:26,130 Por si dreq e bëri makina dinte se ishte 131 00:06:26,130 --> 00:06:27,720 duke u testuar për pajtim emisioneve? 132 00:06:27,720 --> 00:06:30,590 EPA thotë se ishte një i sofistikuar sistem që kontrollohen gjërat 133 00:06:30,590 --> 00:06:34,090 si drejtues rrota pozicion, shpejtësi, sa kohë motori ishte në, 134 00:06:34,090 --> 00:06:35,507 dhe madje presioni atmosferik. 135 00:06:35,507 --> 00:06:37,673 Me fjalë të tjera, ka pasur asnjë mënyrë kjo ishte aksidentale 136 00:06:37,673 --> 00:06:40,260 sepse software ishte projektuar me shumë kujdes për të zbuluar 137 00:06:40,260 --> 00:06:41,630 një testi zyrtar emisionet. 138 00:06:41,630 --> 00:06:43,588 Kjo është një shumë serioze mashtrim dhe kjo është 139 00:06:43,588 --> 00:06:45,420 pse Volkswagen është në probleme të tilla serioze. 140 00:06:45,420 --> 00:06:48,600 Në fakt, CEO i tyre, Martin Winterkorn, sapo u largua poshtë. 141 00:06:48,600 --> 00:06:49,820 >> Pra, çfarë ndodh më pas? 142 00:06:49,820 --> 00:06:53,900 E pra, në qoftë se ju jeni një nga gjysmë milion Jettas naftë, Beatles, Golfs, Passats, 143 00:06:53,900 --> 00:06:56,220 ose Audi A3s kryer, një lajm i mirë është është 144 00:06:56,220 --> 00:06:57,886 se makina juaj është ende i sigurt për të përzënë. 145 00:06:57,886 --> 00:07:00,510 Ju nuk keni për të vënë atë larg derisa Volkswagen lëshon një risjell. 146 00:07:00,510 --> 00:07:02,509 Por në një moment ata janë ndoshta do të ketë 147 00:07:02,509 --> 00:07:04,230 për të rinovuar software brenda makinën tuaj. 148 00:07:04,230 --> 00:07:06,927 Kur kjo ndodh ju fuqi merrni pak milje në tank. 149 00:07:06,927 --> 00:07:09,260 Avokatët tashmë janë duke u përgatitur up për padi veprim klasës 150 00:07:09,260 --> 00:07:12,500 kështu që pronarët mund të merrni kompensohen në disa pika në të ardhmen. 151 00:07:12,500 --> 00:07:15,832 Por kjo nuk do të të ndodhë në çdo kohë së shpejti. 152 00:07:15,832 --> 00:07:16,711 >> [END rishikim] 153 00:07:16,711 --> 00:07:19,960 DAVID J. Malan: Pra, ky fakt ngre një pyetje e madhe interesant foto 154 00:07:19,960 --> 00:07:20,660 si të besojnë. 155 00:07:20,660 --> 00:07:21,160 E drejtë? 156 00:07:21,160 --> 00:07:24,300 Të gjithë ne kemi iPhone ose androids ose diçka në xhepat tonë ka shumë të ngjarë 157 00:07:24,300 --> 00:07:26,500 këto ditë, apo laptopë në xhiro tona që janë 158 00:07:26,500 --> 00:07:28,510 software running bërë nga Apple dhe Microsoft 159 00:07:28,510 --> 00:07:30,710 dhe rrush të kompanive të tjera. 160 00:07:30,710 --> 00:07:34,240 Por si nuk e dimë se çfarë këto produkte software janë duke bërë 161 00:07:34,240 --> 00:07:37,680 në fakt është ajo që këto kompanitë thonë se ata janë duke bërë? 162 00:07:37,680 --> 00:07:39,610 >> Për shembull, kush është për të thonë se çdo herë që 163 00:07:39,610 --> 00:07:42,200 të bëjë një telefonatë në iPhone tuaj ose telefon Android apo si, 164 00:07:42,200 --> 00:07:45,650 se se numri i telefonit gjithashtu nuk është e duke u ngarkuar për serverin e disa kompanisë 165 00:07:45,650 --> 00:07:48,399 për shkak të ndonjë program ju keni shkruar, nëse kjo është operativ 166 00:07:48,399 --> 00:07:51,070 sistem veten si iOS apo Android, ose për shkak se ju keni shkarkuar 167 00:07:51,070 --> 00:07:53,880 disa app palës së tretë që në njëfarë mënyre është dëgjuar 168 00:07:53,880 --> 00:07:57,120 për çdo gjë që ju jeni të shtypni ose çdo gjë që ju jeni në të vërtetë duke thënë. 169 00:07:57,120 --> 00:07:59,500 Si nuk e dini se, kur ju djema janë duke tingëllimë 170 00:07:59,500 --> 00:08:02,590 ose të bëjë për të hartuar tuaj software vet në CS50, si 171 00:08:02,590 --> 00:08:06,080 a Stafi vetë atij CS50-së, me anë të bibliotekës CS50, 172 00:08:06,080 --> 00:08:08,690 nuk ka qenë prerjet çdo string ju keni marrë ndonjëherë 173 00:08:08,690 --> 00:08:10,276 ose çdo inç ju keni marrë ndonjëherë? 174 00:08:10,276 --> 00:08:12,900 E pra, ju me siguri mund të shikoni në kodin burim për diçka 175 00:08:12,900 --> 00:08:15,233 si bibliotekë CS50, ju mund të shikoni në kodin burimor 176 00:08:15,233 --> 00:08:18,170 për sistemin operativ Linux kandidon për CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Por një prezantim të mahnitshme u dha në vitin 1984 178 00:08:23,090 --> 00:08:26,730 në marrjen e Çmimit Turing nga një shkencëtar shumë i njohur kompjuterik të njohur 179 00:08:26,730 --> 00:08:29,750 as-- emrin Ken Thompson i cili mori Çmimin Turing që 180 00:08:29,750 --> 00:08:33,500 është lloj i shkenca kompjuterike të Çmimi Nobel, në qoftë se ju do të, 181 00:08:33,500 --> 00:08:35,309 për punën e tij në një Sistemi operativ i quajtur 182 00:08:35,309 --> 00:08:39,039 Unix, e cila është shumë e ngjashme në shpirt për atë që ne përdorim cila është Linux. 183 00:08:39,039 --> 00:08:41,960 Dhe pyetja që ai pyeti në e tij Fjalimi i pranimit, në thelb 184 00:08:41,960 --> 00:08:44,910 hedhjen poshtë kornizën për vjet dhe vitet e diskutimit 185 00:08:44,910 --> 00:08:46,970 në lidhje me besimin dhe sigurinë, ishte kjo. 186 00:08:46,970 --> 00:08:50,410 Deri në çfarë mase duhet një besoni një deklaratë që një program-- një copë 187 00:08:50,410 --> 00:08:53,010 i software-- është i lirë nga kuajt e Trojës? 188 00:08:53,010 --> 00:08:56,500 Ndoshta kjo është më e rëndësishme për të besimit njerëzit që shkruan software. 189 00:08:56,500 --> 00:08:58,650 >> Dhe në fakt, ne kemi lidhur për fjalimin që ai 190 00:08:58,650 --> 00:09:02,400 dha kur pranuar këtë çmim në vitet '80 në faqen CS50 e 191 00:09:02,400 --> 00:09:04,030 nën faqen Lectures për sot. 192 00:09:04,030 --> 00:09:06,071 Sepse ajo që ju do të shihni është se ai në fakt i jep 193 00:09:06,071 --> 00:09:09,430 një shembull mjaft të thjeshtë se si edhe një përpilues si tingëllimë ose çfarëdo 194 00:09:09,430 --> 00:09:13,950 Përpiluesit të tjerë kanë përdorur në të kaluarën, çfarë nëse ngulitur në përpilues ne 195 00:09:13,950 --> 00:09:18,190 vetë janë duke përdorur është pak nëse kusht që në thelb thotë: 196 00:09:18,190 --> 00:09:22,360 në qoftë se ju të vini re se ky kod është duke përdorur funksioni getString ose GetInt 197 00:09:22,360 --> 00:09:26,600 funksion, të shkojnë përpara dhe të futur një derë prapa apo një kalë trojan 198 00:09:26,600 --> 00:09:29,340 tillë që kjo program tani ka disa zero 199 00:09:29,340 --> 00:09:30,930 dhe ato që bëjnë diçka me qëllim të keq. 200 00:09:30,930 --> 00:09:33,080 Logging gjithë tuaj tasteve, ngarkimi që të dhënat 201 00:09:33,080 --> 00:09:35,100 në një server, apo me të vërtetë ndonjë gjë. 202 00:09:35,100 --> 00:09:37,290 >> Dhe çfarë Ken Thompson vazhdon të bëjë në fjalë 203 00:09:37,290 --> 00:09:40,580 është për të treguar se edhe në qoftë se ju keni qasje në burimin 204 00:09:40,580 --> 00:09:43,794 Kodi i një përpilues që keqdashje mund të jetë bërë këtë, 205 00:09:43,794 --> 00:09:46,210 kjo nuk ka rëndësi, sepse ka kjo pule dhe vezë 206 00:09:46,210 --> 00:09:49,500 Realiteti i shumë kaluarën vjet Xhibrili hartuesit 207 00:09:49,500 --> 00:09:51,960 janë përdorur për të hartuar vetë. 208 00:09:51,960 --> 00:09:55,440 Me fjalë të tjera, në mënyrë mbrapa kur dikush duhet të kishte shkruar përpiluesit e parë. 209 00:09:55,440 --> 00:09:59,060 Dhe pas kësaj, çdo herë ata kanë përditësuar një përpilues duke ndryshuar kodin e saj burimor, 210 00:09:59,060 --> 00:10:02,020 duke shtuar veçori dhe recompiling atë për njerëz si ne që të përdorin, mirë, 211 00:10:02,020 --> 00:10:04,270 ata janë duke përdorur të vjetër Versioni i përpiluesit 212 00:10:04,270 --> 00:10:06,370 për hartimin e re Versioni i përpiluesit. 213 00:10:06,370 --> 00:10:08,370 Dhe nëse ju merrni një vështrim në diskutim që ai dha, 214 00:10:08,370 --> 00:10:10,970 ju do të shihni se për shkak se e atij qarkullimit, 215 00:10:10,970 --> 00:10:14,330 ju në fakt mund të ketë bugs ose Trojan horses ngulitur në software 216 00:10:14,330 --> 00:10:14,990 ne jemi duke përdorur. 217 00:10:14,990 --> 00:10:18,010 Dhe edhe në qoftë se ju shikoni në kod burim për ato programe, 218 00:10:18,010 --> 00:10:21,550 ajo nuk mund edhe të jetë e qartë sepse dinakëri është në fakt 219 00:10:21,550 --> 00:10:24,710 në disa version të vjetër të një përpilues që nga atëherë ka qenë 220 00:10:24,710 --> 00:10:27,340 injektuar kërcënimin në software tonë. 221 00:10:27,340 --> 00:10:29,740 >> E cila është vetëm për të thënë, ne me të vërtetë nuk mund dhe nuk duhet të 222 00:10:29,740 --> 00:10:32,939 software besimi kandidon për laptopë tonë ose telefonat apo ndonjë numër të vendeve. 223 00:10:32,939 --> 00:10:36,230 Dhe në fakt, më vonë në këtë semestër kur ne fillojmë të flasim për programimin e web 224 00:10:36,230 --> 00:10:38,521 dhe në fakt të fillojë ndërtimin e aplikimet web Jonë, 225 00:10:38,521 --> 00:10:40,285 ne do të flasim për këto kërcënimet dhe të tjerët. 226 00:10:40,285 --> 00:10:43,410 Tani, ju mund të keni menduar dhe vënë re se ka pasur një Darth vogël pak 227 00:10:43,410 --> 00:10:45,842 Vader në klipet që Prag u treguar atje 228 00:10:45,842 --> 00:10:47,550 për Volkswagen. Nëse ju kurrë nuk kam parë, unë 229 00:10:47,550 --> 00:10:49,190 menduam se duhet të ndriçohet humor, sepse kjo është e gjitha 230 00:10:49,190 --> 00:10:50,780 shumë të dëshpëruar dhe të frikshme. 231 00:10:50,780 --> 00:10:52,910 Unë do të shikojmë prapa në Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 kur një nga tregtar Volkswagen-- dhe kjo 233 00:10:55,300 --> 00:10:59,620 pothuajse i bën ata të pëlqyeshëm again-- transmetuar për herë të parë në TV. 234 00:10:59,620 --> 00:11:04,039 Është clip 60 dytë që unë mendoj se ju do të gëzojnë. 235 00:11:04,039 --> 00:11:04,705 [VIDEO rishikim] 236 00:11:04,705 --> 00:11:08,198 [MUSIC - TEMA NGA "star wars"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [Barks qen] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [CAR FILLON] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [END rishikim] 243 00:12:05,955 --> 00:12:06,830 DAVID J. Malan: Po. 244 00:12:06,830 --> 00:12:07,663 Unë kam qenë vetëm kontrolluar. 245 00:12:07,663 --> 00:12:11,360 Kjo makinë është në listën e shkeljeve. 246 00:12:11,360 --> 00:12:12,000 Në rregull. 247 00:12:12,000 --> 00:12:14,040 Pra, ne shikojmë në disa pseudokod një moment më parë. 248 00:12:14,040 --> 00:12:15,380 Dhe këtu është një më i madh copë e kodit pseudokod 249 00:12:15,380 --> 00:12:16,921 që ne kemi parë disa herë deri tani. 250 00:12:16,921 --> 00:12:19,970 Dhe le të përdorim kjo është një mundësi tani për të futur një programimit të re 251 00:12:19,970 --> 00:12:23,776 teknikë që ne e bëmë shih algoritmikisht 252 00:12:23,776 --> 00:12:25,400 javën e kaluar kur kemi shikuar në merge lloj. 253 00:12:25,400 --> 00:12:28,270 Por le të formalizuar atë dhe të shohim se si ne mund të përdorin atë në kodin aktual, 254 00:12:28,270 --> 00:12:30,350 dhe pastaj ne jemi duke shkuar për të përdorur këtë Teknika poshtë rrugës më 255 00:12:30,350 --> 00:12:32,000 gjasa për të zgjidhur disa probleme të tjera. 256 00:12:32,000 --> 00:12:35,790 >> Pra, kjo ishte një nga programet e para ne shkruar ndonjëherë, megjithëse në kodin pseudokod. 257 00:12:35,790 --> 00:12:37,790 Dhe çfarë ky program na lejohet të bëjmë kurs 258 00:12:37,790 --> 00:12:41,510 ishte për të gjetur Mike Smith në një libër telefoni. 259 00:12:41,510 --> 00:12:46,216 Dhe vini re në veçanti linjat e tetë dhe 11 e cila kishte këtë deklaratë të shkuar në. 260 00:12:46,216 --> 00:12:48,090 Dhe në fakt, të caktuara gjuhë, C në mesin e tyre, 261 00:12:48,090 --> 00:12:50,006 në fakt kanë një deklaratë se është fjalë për fjalë 262 00:12:50,006 --> 00:12:52,710 shkoni në që ju lejon për të hidhen në një linjë të veçantë. 263 00:12:52,710 --> 00:12:55,470 Është përgjithësisht frowned mbi të, sepse ajo mund të jetë abuzuar shumë lehtë 264 00:12:55,470 --> 00:12:58,490 dhe ju mund të filloni duke kërcyer tuaj program në të gjithë vendin si krahasim 265 00:12:58,490 --> 00:13:00,690 për të përdorur llojin e Logjika dhe rrjedha kontrollit 266 00:13:00,690 --> 00:13:04,000 se ne kemi përdorur deri tani me vetëm sythe dhe kushtet dhe si. 267 00:13:04,000 --> 00:13:08,660 >> Por ne mund të thjeshtojë këtë algorithm në kodin pseudokod si vijon. 268 00:13:08,660 --> 00:13:11,250 Në vend të kësaj përsëritës ose qasje looping 269 00:13:11,250 --> 00:13:14,160 ku do të vazhdojmë duke shkuar prapa dhe përsëri dhe përsëri për të vijë tre, 270 00:13:14,160 --> 00:13:18,300 pse nuk kemi vetëm lloji i vë bast dhe më shumë përgjithësisht thonë se në përputhje shtatë dhe 10, 271 00:13:18,300 --> 00:13:20,570 vetëm të zëvendësojë ato dy palë linjave me, 272 00:13:20,570 --> 00:13:22,810 tjetër në qoftë se Smith është herët në libër ne do të 273 00:13:22,810 --> 00:13:25,110 kërkoni për Mike në gjysma e majtë e librit. 274 00:13:25,110 --> 00:13:28,560 Tjetër në qoftë se Smith është më vonë në libër, kërkoni për Mike në të drejtën 275 00:13:28,560 --> 00:13:29,540 gjysma libri. 276 00:13:29,540 --> 00:13:31,180 Dhe vini re tashmë qarkullimit. 277 00:13:31,180 --> 00:13:31,680 E drejtë? 278 00:13:31,680 --> 00:13:34,250 Unë jam në kërkim për Mike në libri telefon dhe pastaj 279 00:13:34,250 --> 00:13:37,090 Unë përfundimisht goditi ndoshta Linja e shtatë apo ndoshta line 10 280 00:13:37,090 --> 00:13:41,089 dhe udhëzim ime për veten time është kërkimi për Mike në gjysmën e librin e telefonit. 281 00:13:41,089 --> 00:13:42,380 E pra, si mund ta kërkoni për Mike? 282 00:13:42,380 --> 00:13:44,213 Unë jam në mes të kërkim për Mike, pse 283 00:13:44,213 --> 00:13:45,860 po ju lloj i dërguar mua në një rreth? 284 00:13:45,860 --> 00:13:49,590 Por kjo është në rregull, sepse ajo që është ndodh me madhësinë e problemit, 285 00:13:49,590 --> 00:13:52,630 ashtu siç është shkruar në përputhje 7 dhe 10? 286 00:13:52,630 --> 00:13:54,989 Ne nuk jemi vetëm duke thënë kërkimin për Mike, kërkoni për Mike. 287 00:13:54,989 --> 00:13:56,280 Ne jemi duke thënë në mënyrë specifike se çfarë? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Kërko për të në gjysmën e majtë të gjysma e drejtë që është efektivisht 290 00:14:01,610 --> 00:14:03,440 gjysma e madhësisë së problemit. 291 00:14:03,440 --> 00:14:07,170 Pra, kjo është në rregull që ne jemi lloj i të angazhohen në këtë qarkullimit, 292 00:14:07,170 --> 00:14:09,180 ky argument rrethore, sepse të paktën ne jemi 293 00:14:09,180 --> 00:14:11,090 duke e bërë problem vogla dhe të vogla. 294 00:14:11,090 --> 00:14:14,220 Dhe në fund ne jemi duke shkuar për të arritur se i ashtuquajturi rasti bazë ku 295 00:14:14,220 --> 00:14:16,780 ne kemi vetëm një faqe left-- si vullnetar tonë javën e kaluar 296 00:14:16,780 --> 00:14:18,684 did-- kemi pasur një faqe majtas dhe pastaj ne nuk e bëjmë 297 00:14:18,684 --> 00:14:21,600 duhet të mbajnë në kërkim për Mike Smith sepse ai është ose në atë faqe 298 00:14:21,600 --> 00:14:23,080 ose ai nuk është. 299 00:14:23,080 --> 00:14:27,480 >> Pra, si mund ta zbatojë këtë ide, këtë lloj i qarkullimit në kodin aktual? 300 00:14:27,480 --> 00:14:31,030 E pra, ne mund të levave një teknikë që është e njohur përgjithësisht si recursion. 301 00:14:31,030 --> 00:14:33,960 Dhe ne kemi parë këtë në pseudokod për merge lloj javën e kaluar. 302 00:14:33,960 --> 00:14:37,190 Kujtojnë se ky ishte pseudokod për merge lloj. 303 00:14:37,190 --> 00:14:40,560 Kjo është ndoshta edhe më e thjeshtë se flluskë apo përzgjedhje apo futje lloj 304 00:14:40,560 --> 00:14:43,310 vetëm në aspektin e thjeshtësisë me të cilat ju mund të shprehin atë. 305 00:14:43,310 --> 00:14:46,750 >> Por kjo është për shkak ne jemi lloj rrethore 306 00:14:46,750 --> 00:14:51,350 duke i thënë: kërkoni për diçka duke kërkuar për atë përsëri. 307 00:14:51,350 --> 00:14:53,960 Por ne jemi në kërkim ose në gjysmën e majtë apo gjysma e djathtë 308 00:14:53,960 --> 00:14:56,070 dhe pastaj në fund ne jemi bashkimi në këtë rast. 309 00:14:56,070 --> 00:14:58,520 Por edhe këtu, me këto dy linja lloj, 310 00:14:58,520 --> 00:15:01,320 kishte ne përsëri kemi këtë Ideja e recursion. 311 00:15:01,320 --> 00:15:05,350 Dhe konkretisht se çfarë do të thotë kjo, në kontekstin e një algoritmi, 312 00:15:05,350 --> 00:15:10,880 është se një algoritmi është gjithkund rekursive nëse ajo përdor ose e quan veten. 313 00:15:10,880 --> 00:15:14,330 >> Apo në aspektin e C, një funksion është recursive-- një funksion të quajtur 314 00:15:14,330 --> 00:15:18,510 foo është gjithkund rekursive nëse foo, diku në kodin e tij burimor, 315 00:15:18,510 --> 00:15:21,250 e quan foo funksion vetë. 316 00:15:21,250 --> 00:15:25,790 Dhe kjo është e keqe në qoftë se të gjithë foo ndonjëherë bën është e quajnë veten përsëri dhe përsëri. 317 00:15:25,790 --> 00:15:30,600 Është në rregull nëse foo përfundimisht ndalesa, siç bën shkrihen lloj, duke thënë, prit një minutë, 318 00:15:30,600 --> 00:15:32,980 në qoftë se ky problem është super të vogla, për shembull, 319 00:15:32,980 --> 00:15:35,840 ose kam gjetur atë që unë jam në kërkim të, vetëm të kthehet. 320 00:15:35,840 --> 00:15:41,000 Mos Recursively, nuk ciklikisht quaj veten përsëri. 321 00:15:41,000 --> 00:15:44,200 >> Dhe kështu që le të marrin një vështrim në se si kjo mund të vërtetë punojnë. 322 00:15:44,200 --> 00:15:48,430 Kështu që unë jam duke shkuar për të shkuar përpara dhe të hapur deri dy shembuj të kodit burim këtu. 323 00:15:48,430 --> 00:15:50,321 Një prej të cilave është quajtur sigma 0. 324 00:15:50,321 --> 00:15:52,320 Dhe kjo nuk është aspak e gjithkund rekursive, por le të marrin 325 00:15:52,320 --> 00:15:53,694 një vështrim në atë ky program bën. 326 00:15:53,694 --> 00:15:55,737 Unë e kam hequr nga të gjithë Komentet e prej saj, por të gjithë 327 00:15:55,737 --> 00:15:58,070 e kodit burim të CS50-së Faqja e internetit ka komente Nëse ju 328 00:15:58,070 --> 00:15:59,570 dëshironi të lexoni nëpërmjet saj përsëri më vonë. 329 00:15:59,570 --> 00:16:02,010 Dhe le të bëjmë një çift e mendje e shëndoshë kontrollon këtu. 330 00:16:02,010 --> 00:16:06,640 >> Kështu që në majë të këtij kod, ne kemi përfshijnë CS50.h. 331 00:16:06,640 --> 00:16:07,650 Çfarë do të bëni këtë? 332 00:16:07,650 --> 00:16:08,990 Pse është ajo këtu? 333 00:16:08,990 --> 00:16:11,740 Në terma laik arsyeshme. 334 00:16:11,740 --> 00:16:12,424 Çfarë do të bëni? 335 00:16:12,424 --> 00:16:12,858 Po. 336 00:16:12,858 --> 00:16:14,160 >> Audienca: Pra, që funksioni i GetInt punon. 337 00:16:14,160 --> 00:16:16,243 >> DAVID J. Malan: Pra, që funksioni GetInt punon. 338 00:16:16,243 --> 00:16:18,115 Sepse brenda këtij file, CS50.h, e cila 339 00:16:18,115 --> 00:16:20,950 ne do të shohim para se të gjatë në kushtet e kodit të tij burim, 340 00:16:20,950 --> 00:16:23,270 ka një bandë e funksioneve të declared-- GetInt, getString, 341 00:16:23,270 --> 00:16:26,950 dhe një bandë e others-- dhe nëse ne fakt kemi që përfshijnë linjë, 342 00:16:26,950 --> 00:16:29,320 tingëllimë përpilues nuk është do të dinë se ajo ekziston. 343 00:16:29,320 --> 00:16:32,400 Dhe njëjta gjë vlen edhe për linjë dy ku int është përcaktuar 344 00:16:32,400 --> 00:16:35,101 printf, i cili është një funksion do të vazhdojmë të përdorim mjaft. 345 00:16:35,101 --> 00:16:37,850 Tani, linja katër duket një Funky vogël sepse kjo është vetëm një avion i linjës. 346 00:16:37,850 --> 00:16:41,570 Atë e mori një pikëpresje, asnjë kaçurrel formatimin e teksteve, nuk ka kod në brendësi të saj. 347 00:16:41,570 --> 00:16:44,640 Por ajo që bëri që ne e quajmë kjo gjë në javët e fundit? 348 00:16:44,640 --> 00:16:45,140 Po. 349 00:16:45,140 --> 00:16:46,060 Pra, një prototip. 350 00:16:46,060 --> 00:16:48,390 Dhe pse nuk kemi një prototip që duket 351 00:16:48,390 --> 00:16:51,050 të jetë i tepërt pak zakonisht sepse ne zakonisht 352 00:16:51,050 --> 00:16:53,474 shoh funksionin përsëri më vonë në dosje, e drejtë? 353 00:16:53,474 --> 00:16:56,390 Pra, pse nuk kemi have-- ju jeni vetëm kruarje kokën tuaj, por unë do të marrë atë. 354 00:16:56,390 --> 00:16:57,302 Po. 355 00:16:57,302 --> 00:17:00,000 >> Audienca: [padëgjueshme] Funksioni pas kryesor. 356 00:17:00,000 --> 00:17:01,000 DAVID J. Malan: Pikërisht. 357 00:17:01,000 --> 00:17:04,089 Në mënyrë që përpiluesit ju njeh përfundimisht do të përcaktojë ose të zbatojë 358 00:17:04,089 --> 00:17:06,579 se funksioni kryesor pas, me sa duket. 359 00:17:06,579 --> 00:17:08,462 Pra tingëllimë dhe më Hartuesit janë lloj i heshtur 360 00:17:08,462 --> 00:17:10,510 dhe ata vetëm do të dinë ajo që ju tregoni atyre. 361 00:17:10,510 --> 00:17:12,569 Dhe në qoftë se ju doni të përdorni një funksion të quajtur sigma, 362 00:17:12,569 --> 00:17:15,710 ju më mirë mësojnë përpiluesit se ajo ekziston që më parë. 363 00:17:15,710 --> 00:17:17,970 >> Tani, në vetvete kryesor, madje edhe edhe pse kjo është një bandë e linjave, 364 00:17:17,970 --> 00:17:19,839 është shumë e njohur shpresojmë se nga tani. 365 00:17:19,839 --> 00:17:21,942 Atë e mori një të bërë, ndërsa loop qëllimi i të cilit në jetë 366 00:17:21,942 --> 00:17:24,400 këtu me sa duket është për të marrë një numër i plotë pozitiv nga përdoruesit. 367 00:17:24,400 --> 00:17:27,349 Dhe vetëm i mbajnë pestering atë ose të saj derisa ata të bashkëpunojnë. 368 00:17:27,349 --> 00:17:30,670 Pastaj në linjë 16 Unë kam një telefonatë interesant. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 E cila në të majtë Ana më jep një int 371 00:17:33,710 --> 00:17:36,650 e cila mund të quhet store-- Answer-- e cila do të ruajtur, me sa duket, 372 00:17:36,650 --> 00:17:39,090 vlera kthimi i SIGMA-s. 373 00:17:39,090 --> 00:17:41,840 Pra Sigma është vetëm një Emri arbitrare por kuptimplotë 374 00:17:41,840 --> 00:17:44,500 që unë kam dhënë një funksion qëllimi i të cilit në jetë 375 00:17:44,500 --> 00:17:47,680 është që të marrë një argument-- ne do të thërrasë atë N në këtë case-- 376 00:17:47,680 --> 00:17:52,280 dhe vetëm për të marrë shumën e atij numri plus çdo numër pozitiv që është 377 00:17:52,280 --> 00:17:53,200 më e vogël se ajo. 378 00:17:53,200 --> 00:17:58,140 >> Pra, nëse unë kaloj në numrin 2 të SIGMA, unë dua të shtoj 2 plus 1 379 00:17:58,140 --> 00:18:00,240 plus 0-- jo 0-- në mënyrë që më jep 3. 380 00:18:00,240 --> 00:18:05,320 Në qoftë se unë të kalojë në 3 deri SIGMA, unë dua të kanë 3 plus 2 plus 1, e cila i jep më 6. 381 00:18:05,320 --> 00:18:05,900 Dhe kështu me radhë. 382 00:18:05,900 --> 00:18:09,750 Pra, ai thjesht shton deri të gjithë Numrat më pak se ose e barabartë me të. 383 00:18:09,750 --> 00:18:12,040 >> Tani, këtu poshtë unë jam vetëm duke shkuar për të shtypur jashtë përgjigjen. 384 00:18:12,040 --> 00:18:17,330 Pra, si një kontroll të shpejtë mendje e shëndoshë, le të bëjnë SIGMA 0-- dot SIGMA slash 0-- 385 00:18:17,330 --> 00:18:18,690 dhe më lejoni të shkruani në 2. 386 00:18:18,690 --> 00:18:19,960 Dhe unë me të vërtetë të merrni 3. 387 00:18:19,960 --> 00:18:21,240 Më lejoni të shkruani në 3. 388 00:18:21,240 --> 00:18:22,860 Unë me të vërtetë të merrni 6. 389 00:18:22,860 --> 00:18:27,636 Dhe në qoftë se dikush mund të bëjë matematikë shpejt, në qoftë se unë bëj 50 çfarë jam unë do të merrni? 390 00:18:27,636 --> 00:18:29,839 >> Audienca: [padëgjueshme]. 391 00:18:29,839 --> 00:18:30,880 DAVID J. Malan: E pra, nuk ka. 392 00:18:30,880 --> 00:18:33,340 Por 1,275 cila është shumë afër. 393 00:18:33,340 --> 00:18:38,850 Pra, kjo është rezultat i bërë 50 plus 49 plus 48 plus 47 plus 46 394 00:18:38,850 --> 00:18:40,349 gjithë rrugën poshtë në 1. 395 00:18:40,349 --> 00:18:41,390 Pra, kjo është e gjitha sigma bën. 396 00:18:41,390 --> 00:18:43,350 Por le të shohim se si ne kemi zbatuar atë tani. 397 00:18:43,350 --> 00:18:45,790 Kështu që këtu poshtë është funksioni vetë. 398 00:18:45,790 --> 00:18:49,000 Dhe kjo nuk duket të ketë asgjë të bëjë me recursion ende. 399 00:18:49,000 --> 00:18:51,070 Në fakt, ne jemi duke përdorur një teknikë e vjetër e shkollës. 400 00:18:51,070 --> 00:18:56,680 Unë jam fillimin e një ndryshore të quajtur shumë në zero, atëherë unë kam një foreloop këtu, 401 00:18:56,680 --> 00:19:00,790 dhe unë jam deklaruar një int quajtur Unë, vendosjen e atë të barabartë me 1-- 402 00:19:00,790 --> 00:19:04,080 edhe pse unë mund të vënë atë të barabartë me zero, por pasi që unë jam duke bërë shtimin, 403 00:19:04,080 --> 00:19:05,340 kush kujdeset nëse është zero ose një. 404 00:19:05,340 --> 00:19:06,660 Ajo do të ketë asnjë efekt. 405 00:19:06,660 --> 00:19:10,110 >> Kështu që unë jam iterating aq kohë sa unë është me pak se ose te barabarte me m, e cila 406 00:19:10,110 --> 00:19:11,671 është argumenti që u miratua në. 407 00:19:11,671 --> 00:19:13,670 Dhe atëherë unë vetëm i mbajnë bën rritjen I. dhe depërtim 408 00:19:13,670 --> 00:19:20,010 e lak të gjitha unë jam duke bërë është duke bërë shumë plus barabartë I. Dhe kjo është e qëllimshme. 409 00:19:20,010 --> 00:19:22,326 Unë nuk dua të bëj, në këtë rast, si shumë plus plus. 410 00:19:22,326 --> 00:19:24,790 Unë dua që në fakt të shtuar vlera aktuale e I 411 00:19:24,790 --> 00:19:28,190 e cila mban marrë më të mëdha dhe më i madh për drejtimin numërimin. 412 00:19:28,190 --> 00:19:30,210 >> Dhe pastaj do të kthehem shumë. 413 00:19:30,210 --> 00:19:33,850 Dhe kështu përgjigje merr shumën e vlerës. 414 00:19:33,850 --> 00:19:35,282 Dhe pastaj unë të shtypura it out. 415 00:19:35,282 --> 00:19:37,740 Pra, ka një mundësi këtu, Megjithatë, për lloj të lehtësuar 416 00:19:37,740 --> 00:19:41,260 ky kod konceptualisht dhe lloji i një goditje e 417 00:19:41,260 --> 00:19:43,250 mendje në aspektin e Thjeshtësia edhe pse ajo 418 00:19:43,250 --> 00:19:45,700 merr një kohë për të zgjidhur e vlerësojmë pse kjo 419 00:19:45,700 --> 00:19:47,330 është i fuqishëm në këto shembuj të vogla. 420 00:19:47,330 --> 00:19:50,380 Këtu është SIGMA one-- kështu Versioni i dytë i këtij kodi. 421 00:19:50,380 --> 00:19:55,290 Çdo gjë deri të lartë është identike aq se e njëjta histori vlen edhe si më parë. 422 00:19:55,290 --> 00:19:59,220 Por tani le të shohim në zbatimi i SIGMA-s që 423 00:19:59,220 --> 00:20:05,040 Unë kam whittled poshtë për vetëm këto lines-- katër rreshta të kodit, me të vërtetë, 424 00:20:05,040 --> 00:20:06,980 plus disa formatimin e teksteve kaçurrel dhe hapësirë ​​të bardhë. 425 00:20:06,980 --> 00:20:07,930 >> Por çfarë jam unë duke bërë? 426 00:20:07,930 --> 00:20:11,050 Nëse m është më pak se ose e barabartë me zero, Unë kam nevojë për lloj të trajtuar 427 00:20:11,050 --> 00:20:12,490 se çështja e thjeshtë super. 428 00:20:12,490 --> 00:20:15,450 Dhe nëse ju dorëzojë mua zero ose asgjë negative e cila është vetëm i çuditshëm, 429 00:20:15,450 --> 00:20:17,909 Unë jam vetëm duke shkuar për të në mënyrë arbitrare por vazhdimisht kthehen zero. 430 00:20:17,909 --> 00:20:20,200 Unë nuk dua këtë gjë për merrni në disa Infinite pazakontë 431 00:20:20,200 --> 00:20:21,810 lak për shkak të një vlerë negative. 432 00:20:21,810 --> 00:20:25,070 Kështu që unë jam vetëm duke thënë, në qoftë se ju më jepni zero ose më pak, unë jam kthyer zero. 433 00:20:25,070 --> 00:20:28,220 >> Por kjo është e mirë, sepse kjo është se faqja e vetme e librit të telefonit 434 00:20:28,220 --> 00:20:28,790 që ka mbetur. 435 00:20:28,790 --> 00:20:32,660 Unë jam ashpër nga një problem shumë të veçantë dhe jo duke e quajtur diçka Recursively. 436 00:20:32,660 --> 00:20:36,580 Por në linjë 31, çfarë mund të duket të jetë bërë? 437 00:20:36,580 --> 00:20:39,780 Kllapa janë vetëm duke e mbajtur gjëra, me shpresë, pak më të qarta. 438 00:20:39,780 --> 00:20:42,110 Por të gjitha unë jam duke bërë është që unë jam kthyer m-- çfarëdo 439 00:20:42,110 --> 00:20:45,790 ju dorëzojë me-- plus Vlera e m-- keq, 440 00:20:45,790 --> 00:20:49,052 plus vlera e SIGMA-s e m minus 1. 441 00:20:49,052 --> 00:20:50,010 Pra, çfarë do të thotë kjo? 442 00:20:50,010 --> 00:20:53,965 Në qoftë se ju më jepni numrin 3 si input, përgjigja unë dua të merrni në fund të fundit 443 00:20:53,965 --> 00:20:57,307 është 6 për shkak se 3 plus 2 plus 1 më jep 6. 444 00:20:57,307 --> 00:20:59,390 Por si mund ta mendoj për si ky kod është i rrjedhshëm? 445 00:20:59,390 --> 00:21:03,070 Hera e parë që unë e quaj sigma dhe unë të kalojë në vlerën 3, 446 00:21:03,070 --> 00:21:07,960 kjo është si duke thënë se në një copë e letrës, këtu është vlera 3 447 00:21:07,960 --> 00:21:09,920 dhe unë kam qenë miratuar këtë si SIGMA. 448 00:21:09,920 --> 00:21:13,090 3 është qartë jo më pak se 0 kështu gjendja NESE nuk aplikohet. 449 00:21:13,090 --> 00:21:14,020 Tjetër e bën. 450 00:21:14,020 --> 00:21:14,990 Pra, çfarë të bëj? 451 00:21:14,990 --> 00:21:19,902 Unë dua të m kthehen, e cila është 3, plus sigma i m minus 1. 452 00:21:19,902 --> 00:21:21,110 Pra më lejoni të mbajnë gjurmët e kësaj. 453 00:21:21,110 --> 00:21:22,710 Unë jam duke shkuar për të vënë këtë copë letër poshtë. 454 00:21:22,710 --> 00:21:24,668 Dhe çfarë vlere, që të jetë qartë, jam duke shkuar për të kaluar 455 00:21:24,668 --> 00:21:26,540 në SIGMA në këtë pikë në histori? 456 00:21:26,540 --> 00:21:28,080 Çfarë numri? 457 00:21:28,080 --> 00:21:28,610 2, e drejtë? 458 00:21:28,610 --> 00:21:29,670 3 minus 1 është 2. 459 00:21:29,670 --> 00:21:32,000 Kështu që unë vetëm nevojë për pak skrape të letrës këtu. 460 00:21:32,000 --> 00:21:33,931 Kështu që tani SIGMA është duke u quajtur përsëri. 461 00:21:33,931 --> 00:21:35,930 Dhe unë kam vënë qëllimisht kjo për shkak se ajo është 462 00:21:35,930 --> 00:21:38,070 lloj si heshti se versioni i historisë 463 00:21:38,070 --> 00:21:40,720 sepse tani unë jam i fokusuar në sinjal të m minus 1. 464 00:21:40,720 --> 00:21:42,660 Pra, m ishte 3, M minus 1 është 2. 465 00:21:42,660 --> 00:21:45,110 Kështu që këtu është 2 që unë kam kaluar. 466 00:21:45,110 --> 00:21:48,510 2 është padyshim jo më pak se 0 në mënyrë që çështja nuk zbatohet. 467 00:21:48,510 --> 00:21:53,445 Tjetër unë kthehen m, e cila është ky gjë, plus sigma i asaj vlere? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Pra, nëse sigma i 1-- sepse m është tani 2 kështu 2 minus 1 është 1. 470 00:21:59,650 --> 00:22:01,950 Deri tani unë kam vetëm vlerën 1. 471 00:22:01,950 --> 00:22:04,810 Unë jam duke kaluar vetëm numrin 1 në sigma-- funksionit 472 00:22:04,810 --> 00:22:09,120 ose veten here-- kështu që natyrisht që nuk është e 1 më pak se zero, ende nuk zbatohet. 473 00:22:09,120 --> 00:22:12,970 >> Kthimi tjetër plus 1 sigma e çfarë? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Pra më lejoni vetëm mos harroni se. 476 00:22:14,678 --> 00:22:15,920 Unë do të kthehet në atë më vonë. 477 00:22:15,920 --> 00:22:18,060 Tani unë jam duke shkuar për të shkuar përpara dhe shënoj poshtë numrit 0, sepse kjo është 478 00:22:18,060 --> 00:22:19,470 argumenti im apo parametër. 479 00:22:19,470 --> 00:22:22,400 Unë jam duke kaluar numrin 0 dhe më në fund ky proces 480 00:22:22,400 --> 00:22:25,760 i vetëm duke përsëritur veten ad nauseum pushon, sepse çfarë 481 00:22:25,760 --> 00:22:28,820 mund menjëherë të bëjë një herë unë shoh këtë 0? 482 00:22:28,820 --> 00:22:29,790 Kthehem zero. 483 00:22:29,790 --> 00:22:31,790 Deri tani ju keni për të Rewind histori. 484 00:22:31,790 --> 00:22:34,430 >> Nëse unë tani të shkojnë prapa në kohë, çfarë ishte gjëja më e fundit 485 00:22:34,430 --> 00:22:36,670 Unë e bëri qoftë se keni qenë fjalë për fjalë rewinding një video? 486 00:22:36,670 --> 00:22:41,630 Unë jam duke shkuar për të marr më të fundit 1 dhe që më jep 1 plus 0 është 1. 487 00:22:41,630 --> 00:22:44,100 Nëse unë mbaj rewinding histori, që do të më jepni 488 00:22:44,100 --> 00:22:46,880 2 plus kjo vlerë të rrjedhshëm, i cili është 1. 489 00:22:46,880 --> 00:22:47,789 Pra, kjo është 3. 490 00:22:47,789 --> 00:22:49,330 Dhe atëherë unë jam duke shkuar për të mbajtur rewinding. 491 00:22:49,330 --> 00:22:54,220 Kur kam parë vënë poshtë numrin 3-- kështu 3 plus 3 jep 6. 492 00:22:54,220 --> 00:22:57,272 >> Dhe tani, në qoftë se ju keni rewound video deri në këtë pikë, 493 00:22:57,272 --> 00:22:58,980 kjo ishte shumë Pyetja e parë që unë pyeta. 494 00:22:58,980 --> 00:23:01,450 Kur kaloi 3, çfarë është sigma e 3? 495 00:23:01,450 --> 00:23:04,204 Është e vërtetë 6, shuma e të gjitha këto copa letre. 496 00:23:04,204 --> 00:23:07,120 Pra, nëse kjo merr pak kohë për të përfundojë mendjen tuaj rreth, kjo është në rregull. 497 00:23:07,120 --> 00:23:10,700 Por e konsiderojnë atë ishte një little-- saj ishte shumë e qëllimshme që kam bërë pirg 498 00:23:10,700 --> 00:23:12,990 këto shifra në krye të njëri-tjetrit. 499 00:23:12,990 --> 00:23:17,440 Kjo është lloj i si të paturit e një memory-- një rekord në kohë, 500 00:23:17,440 --> 00:23:19,940 si një aparat pastrimi në një video, që unë mund të vërtetë Rewind në. 501 00:23:19,940 --> 00:23:24,350 Dhe ne jemi duke shkuar për të ardhur përsëri në që metaforë në vetëm pak. 502 00:23:24,350 --> 00:23:28,240 >> Por së pari, rezulton se nuk ka shumë geeks dhe njerëz qesharake, 503 00:23:28,240 --> 00:23:29,614 I guess, në Google. 504 00:23:29,614 --> 00:23:31,530 A do dikush që është shumë mirë në mendje googling 505 00:23:31,530 --> 00:23:34,270 vjen për vetëm një moment dhe të më ndihmojë të kërkoni për diçka? 506 00:23:34,270 --> 00:23:35,650 Shumë, kyç shumë e ulët. 507 00:23:35,650 --> 00:23:37,870 Dikush që nuk është dalë përpara, ndoshta. 508 00:23:37,870 --> 00:23:38,370 NE RREGULL. 509 00:23:38,370 --> 00:23:39,030 Po? 510 00:23:39,030 --> 00:23:39,530 Eja. 511 00:23:39,530 --> 00:23:41,410 Eja poshtë. 512 00:23:41,410 --> 00:23:42,183 Si e ke emrin? 513 00:23:42,183 --> 00:23:42,870 >> SAM: Sam. 514 00:23:42,870 --> 00:23:44,290 >> DAVID J. Malan: Sam, vijnë më poshtë. 515 00:23:44,290 --> 00:23:45,320 Ky është i njëjtë. 516 00:23:45,320 --> 00:23:46,280 Gëzohem që u njohëm. 517 00:23:46,280 --> 00:23:46,780 Hej. 518 00:23:46,780 --> 00:23:47,580 Ejani në më shumë. 519 00:23:47,580 --> 00:23:51,290 Pra, të gjitha unë duhet të bëni, nëse ju mund të, Sam, këtu është Google. 520 00:23:51,290 --> 00:23:53,240 Mund të kërkoni për recursion afat? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Nuk e prishin. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> Dhe tani let's-- vërtet. 525 00:24:00,970 --> 00:24:03,380 OK Kliko se. 526 00:24:03,380 --> 00:24:04,315 Më mirë të klikoni atë. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, të merrni atë. 529 00:24:08,020 --> 00:24:08,520 Nuk ka? 530 00:24:08,520 --> 00:24:09,050 NE RREGULL. 531 00:24:09,050 --> 00:24:10,430 Pra, le të bëjë një çift të tjerët. 532 00:24:10,430 --> 00:24:12,830 Jo aq shumë të lidhura në shkollë këtu, por a keni 533 00:24:12,830 --> 00:24:14,520 kërkuar ndonjëherë Google për anagram? 534 00:24:14,520 --> 00:24:15,280 >> SAM: Jo. 535 00:24:15,280 --> 00:24:15,520 >> DAVID J. Malan: OK. 536 00:24:15,520 --> 00:24:17,186 Kërko për anagram vend të recursion. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Si në lidhje me shtrembër. 539 00:24:23,790 --> 00:24:25,515 Ju ndonjëherë kërkuar për shtrembër? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Tani, kjo është pak e vështirë për shih por shpresojmë everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 Është vetëm ju dhe mua shijuar këtë. 543 00:24:34,150 --> 00:24:34,690 NE RREGULL. 544 00:24:34,690 --> 00:24:38,950 >> Pra më në fund, kjo one's-- kjo është një shtrembër pak. 545 00:24:38,950 --> 00:24:40,810 Tani të bëjë një listë fuçi. 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 Në rregull. 549 00:24:45,910 --> 00:24:47,110 Madh ju falënderoj për Sam. 550 00:24:47,110 --> 00:24:49,416 Këtu ju shkoni. 551 00:24:49,416 --> 00:24:50,400 Faleminderit. 552 00:24:50,400 --> 00:24:52,807 >> Pra, çfarë po ndodh në të gjithë nga këta shembuj pa kuptim? 553 00:24:52,807 --> 00:24:55,640 Pra me të vërtetë, nën kapuç e Miliona Google e linjave të kodit 554 00:24:55,640 --> 00:24:58,860 me sa duket është një budalla pak ose kushtet që janë në thelb 555 00:24:58,860 --> 00:25:01,160 kontrolluar nëse përdoruesi ka shtypur në këtë frazë, 556 00:25:01,160 --> 00:25:03,760 të bëjë diçka që ndoshta mori një sasi jo trivialë kohës 557 00:25:03,760 --> 00:25:06,080 për të zbatuar vetëm për të të jetë zbavitës në këtë mënyrë. 558 00:25:06,080 --> 00:25:08,430 Por kjo është e gjitha ajo vlon deri nën kapuç. 559 00:25:08,430 --> 00:25:11,570 Por, natyrisht, recursion është më i geekier 560 00:25:11,570 --> 00:25:13,880 shembull në mesin e atyre mashtrimeve të veçanta. 561 00:25:13,880 --> 00:25:16,880 Dhe me siguri nuk ka të tjerë atje po ashtu se ne ndoshta kemi as 562 00:25:16,880 --> 00:25:18,230 zbuluar vetëm ende. 563 00:25:18,230 --> 00:25:22,830 >> Pra, të marrë një sy, ose e konsiderojnë tani programi në vijim, 564 00:25:22,830 --> 00:25:24,830 dhe sigurisht kap ndonjë prej tyre në rrugën tuaj jashtë. 565 00:25:24,830 --> 00:25:28,820 Unë jam duke shkuar për të shkuar përpara dhe hapur një program që është 566 00:25:28,820 --> 00:25:30,920 do të përpiqet të bie në ujdi dy vlera. 567 00:25:30,920 --> 00:25:33,210 Por, para se të shkojmë atje, le ta bëjmë këtë. 568 00:25:33,210 --> 00:25:38,500 A mund ne të merrni një më shumë vullnetar, unë mendoj se? 569 00:25:38,500 --> 00:25:40,480 Do të dëshironit që të dalin vullnetarë? 570 00:25:40,480 --> 00:25:40,980 Nuk ka? 571 00:25:40,980 --> 00:25:41,890 Eja up. 572 00:25:41,890 --> 00:25:42,390 Eja up. 573 00:25:42,390 --> 00:25:42,890 Në rregull. 574 00:25:42,890 --> 00:25:44,136 Pra, emri juaj është ajo? 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 Eja lart, Lauren. 578 00:25:46,890 --> 00:25:50,140 Pra, Lauren është duke u sfiduar këtu si më poshtë. 579 00:25:50,140 --> 00:25:52,310 Gëzohem që u njohëm. 580 00:25:52,310 --> 00:25:55,730 Kështu Lauren këtu ka para dy gota e saj bosh. 581 00:25:55,730 --> 00:25:57,570 Dhe ne kemi disa portokalli lëng dhe disa qumësht 582 00:25:57,570 --> 00:26:00,301 dhe ne jemi duke shkuar për të shkuar përpara dhe të bëjë të mëposhtme. 583 00:26:00,301 --> 00:26:01,550 Ne jemi vetëm duke shkuar për të mbushur këtë. 584 00:26:01,550 --> 00:26:07,840 Disa ounces e qumështit mbi këtu dhe le të plotësoni një lëng portokalli të vogël këtu. 585 00:26:07,840 --> 00:26:11,475 >> Dhe në frontin e të gjitha këta anëtarët e publikut, 586 00:26:11,475 --> 00:26:13,550 të bie në ujdi dy vlerat e këtyre gota. 587 00:26:13,550 --> 00:26:16,970 Vendos lëng portokalli në filxhan qumësht dhe qumësht në filxhan lëng portokalli. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Si do ta bëni këtë në qoftë se keni qenë në shtëpi dhe kishte qasje në furnizimeve të tjera? 590 00:26:26,150 --> 00:26:27,400 Lauren: Vendoseni atë në një filxhan. 591 00:26:27,400 --> 00:26:28,191 DAVID J. Malan: OK. 592 00:26:28,191 --> 00:26:31,940 Pra, le të ketë një të përkohshme ndryshueshme, në qoftë se ne do të. 593 00:26:31,940 --> 00:26:35,871 Dhe të shkojnë përpara tani dhe të zbatojë kjo procedurë njëjtë shkëmbejnë. 594 00:26:35,871 --> 00:26:36,370 Shume mire. 595 00:26:36,370 --> 00:26:41,490 Ne kemi vënë OJ në të përkohshme ndryshueshme, qumësht në ndryshore OJ, 596 00:26:41,490 --> 00:26:44,481 dhe tani variabli i përkohshëm në variablin e qumështit. 597 00:26:44,481 --> 00:26:44,980 NE RREGULL. 598 00:26:44,980 --> 00:26:48,740 Pra bërë shumë mirë deri tani. 599 00:26:48,740 --> 00:26:50,990 Pra, ajo rezulton out-- mbajë atë menduar për vetëm një moment. 600 00:26:50,990 --> 00:26:54,479 Këtu, të vetëm geek atë pak, kjo do të jetë kodi përkatës C 601 00:26:54,479 --> 00:26:55,520 që ne vetëm zbatuar. 602 00:26:55,520 --> 00:26:58,650 Ne kishim dy inpute, a dhe b, të dyja të cilat ne do të themi vetëm për thjeshtësi janë 603 00:26:58,650 --> 00:26:59,260 int-së. 604 00:26:59,260 --> 00:27:02,780 Dhe vini re këtu, në qoftë se unë dua të bie në ujdi vlerat e dy variablave, a dhe b, 605 00:27:02,780 --> 00:27:06,890 ne me të vërtetë nevojë për një ndërmjetës, një ndryshueshme të përkohshme, një filxhan i përkohshëm, 606 00:27:06,890 --> 00:27:10,830 në të cilën derdh një nga vlerat kështu që ne kemi një placeholder për të. 607 00:27:10,830 --> 00:27:13,480 Por pastaj kodi është pikërisht si Lauren zbatuar këtu. 608 00:27:13,480 --> 00:27:15,500 >> Tani, vetëm për të marrë një pak crazier, rezulton 609 00:27:15,500 --> 00:27:20,930 që ju mund ta bëni këtë pa një variabël i përkohshëm. 610 00:27:20,930 --> 00:27:24,870 Për ta bërë këtë si duhet, edhe pse, ne jemi duke shkuar që duhet të mashtrojnë me disa kimi. 611 00:27:24,870 --> 00:27:26,380 Ne kemi disa gota ekstra këtu. 612 00:27:26,380 --> 00:27:29,600 Pra, gjëja më e afërt që duket si qumësht dhe ujë perhaps-- 613 00:27:29,600 --> 00:27:34,090 ose qumësht dhe OJ-- është që ne kemi një ujë, kështu që ne do të plotësoj këtë një deri 614 00:27:34,090 --> 00:27:36,486 me një ounces pak e ujë të pastër. 615 00:27:36,486 --> 00:27:38,332 Kjo është ndoshta shumë. 616 00:27:38,332 --> 00:27:38,832 Po. 617 00:27:38,832 --> 00:27:39,934 Kjo është padyshim shumë. 618 00:27:39,934 --> 00:27:40,600 Të mbajë në një sec. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> Dhe tani ne kemi të naftës, e cila, si unë kujtoj nga kimi mesme shkollore të klasës, 621 00:27:48,420 --> 00:27:49,990 shpresojmë se kjo nuk do të përzihen me ujë. 622 00:27:49,990 --> 00:27:53,650 Por kjo lloj lloj duket si qumësht dhe OJ. 623 00:27:53,650 --> 00:27:55,760 Deri tani, pa përdorur një variabël i përkohshëm, 624 00:27:55,760 --> 00:27:59,260 mund të bie në ujdi këto dy vlera? 625 00:27:59,260 --> 00:28:03,884 Pra, vajra shkon në filxhan të ujit, uji shkon në filxhan të naftës. 626 00:28:03,884 --> 00:28:04,800 Lauren: Nuk ka gota tjetër? 627 00:28:04,800 --> 00:28:05,940 DAVID J. Malan: Nuk ka gota tjera. 628 00:28:05,940 --> 00:28:07,860 Dhe unë nuk kam në fakt testuar këtë më parë këtë vit 629 00:28:07,860 --> 00:28:10,110 kështu që unë nuk e di nëse kjo do të të vërtetë punojnë kimikisht. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Kjo nuk duhej të ndodhte. 632 00:28:18,650 --> 00:28:19,761 A është duke punuar? 633 00:28:19,761 --> 00:28:20,260 Në rregull. 634 00:28:20,260 --> 00:28:20,990 Pra, ndarja? 635 00:28:20,990 --> 00:28:21,490 Të mirë. 636 00:28:21,490 --> 00:28:24,714 Tani kemi marrë për të marrë ujë në filxhan tjetër. 637 00:28:24,714 --> 00:28:27,630 Concentrators Smarter kimi mund të ndoshta e bëjnë këtë më mirë se unë. 638 00:28:27,630 --> 00:28:28,510 >> Lauren: Uji është në pjesën e poshtme. 639 00:28:28,510 --> 00:28:31,910 >> DAVID J. Malan: The water-- që ishte çfarë është çelësi hera e fundit që ne e bëmë këtë. 640 00:28:31,910 --> 00:28:33,950 Ju duhet të bëni atë në mënyrë të drejtë. 641 00:28:33,950 --> 00:28:34,450 Po. 642 00:28:34,450 --> 00:28:35,270 Eshte ne rregull. 643 00:28:35,270 --> 00:28:37,290 Deri tani ne kemi dy gota e naftës. 644 00:28:37,290 --> 00:28:37,790 NE RREGULL. 645 00:28:37,790 --> 00:28:38,510 Eshte ne rregull. 646 00:28:38,510 --> 00:28:40,110 Por kimikisht, nëse kjo ka punuar se I-- 647 00:28:40,110 --> 00:28:41,200 >> Lauren: Kjo është ujë. 648 00:28:41,200 --> 00:28:41,930 >> DAVID J. Malan: Kjo është kryesisht ujë. 649 00:28:41,930 --> 00:28:42,430 Në rregull. 650 00:28:42,430 --> 00:28:44,210 Por kjo është ende e njëjtë si më parë filxhan. 651 00:28:44,210 --> 00:28:47,570 Pra, pour it-- provoni atje. 652 00:28:47,570 --> 00:28:49,300 NE RREGULL. 653 00:28:49,300 --> 00:28:51,010 Kjo është një përdorim të mirë të kohës së klasës sot. 654 00:28:51,010 --> 00:28:51,510 NE RREGULL. 655 00:28:51,510 --> 00:28:53,890 Deri tani we-- bukur. 656 00:28:53,890 --> 00:28:55,460 Dicka e tille. 657 00:28:55,460 --> 00:28:55,960 Në rregull. 658 00:28:55,960 --> 00:28:56,690 Pra, shumë i mirë. 659 00:28:56,690 --> 00:29:00,006 Faleminderit për Lauren. 660 00:29:00,006 --> 00:29:01,950 Bërë shumë mirë. 661 00:29:01,950 --> 00:29:04,570 >> Pra, vetëm për të hedhur në mendjet tuaja, dhe kjo është ndoshta diçka 662 00:29:04,570 --> 00:29:08,660 për të luajtur me të në qoftë se ju pëlqen në ID CS50, ju mund, në fakt, të bie në ujdi dy variablave 663 00:29:08,660 --> 00:29:11,470 pa përdorur një numër të plotë të përkohshme. 664 00:29:11,470 --> 00:29:13,060 Dhe kjo është kodi përkatës C. 665 00:29:13,060 --> 00:29:16,110 Dhe në qoftë se ju kujtohet nga të fundit E mërkurë, ne kemi prezantuar, nëse shkurtimisht, 666 00:29:16,110 --> 00:29:19,720 disa operatorë të reja në C. dhe nuk dikush kujtojnë se çfarë karrota pak 667 00:29:19,720 --> 00:29:23,660 Simboli është, se trekëndësh pak simbol nga tastierë përfaqëson? 668 00:29:23,660 --> 00:29:26,003 Çfarë bitwise operator? 669 00:29:26,003 --> 00:29:26,770 >> Audienca: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> DAVID J. Malan: EXOR. 671 00:29:27,645 --> 00:29:28,560 Ekskluzive Ose. 672 00:29:28,560 --> 00:29:32,920 Pra, nëse ju dëshironi, vetëm për argëtim në shtëpi, për të dhënë a dhe b dy arbitrar 673 00:29:32,920 --> 00:29:36,072 Vlerat si çdo eight-- dhe I do të zgjedhin një vlerë tetë bit. 674 00:29:36,072 --> 00:29:38,530 Nëse ju bëni këtë me 32 bit, ju do të shumë shpejt të mërzitem. 675 00:29:38,530 --> 00:29:42,150 Por vetëm të japë një një tetë pak vlerë që është çfarëdo, një ose dy, 676 00:29:42,150 --> 00:29:43,790 dhe të japë b një vlerë të ngjashme. 677 00:29:43,790 --> 00:29:46,810 Dhe pastaj duke përdorur përkufizimin i XOR nga e mërkura e kaluar, 678 00:29:46,810 --> 00:29:52,560 zbatojë këtë pak nga pak, secili prej këto tetë bit në secilën prej A dhe B, 679 00:29:52,560 --> 00:29:54,980 dhe pastaj të bëjë atë pikërisht në këtë kod. 680 00:29:54,980 --> 00:29:58,170 Dhe kjo nuk është e gabuar ajo që ju shihni këtu në ekran. 681 00:29:58,170 --> 00:30:02,100 Ajo me të vërtetë boils poshtë për tre operacionet XOR 682 00:30:02,100 --> 00:30:05,910 dhe disi magjike dhe një b do të shkëmbejnë pozitat 683 00:30:05,910 --> 00:30:08,010 pa humbur asnjë informacion. 684 00:30:08,010 --> 00:30:11,580 >> Pra, vaj dhe ujë mashtrim është afërt mishërim bota reale 685 00:30:11,580 --> 00:30:12,980 Unë mund të mendoj për të imitoj atë. 686 00:30:12,980 --> 00:30:15,950 Por kjo është me siguri më e lehtë për të përdorni një ndryshore të përkohshme, 687 00:30:15,950 --> 00:30:16,920 si në këtë rast këtu. 688 00:30:16,920 --> 00:30:21,190 Dhe kjo shumë është e them një mundësi, gjithashtu, ky lloj i optimization mikro, 689 00:30:21,190 --> 00:30:23,590 si një shkencëtar kompjuteri do të thonë, ndërsa lloj i fun 690 00:30:23,590 --> 00:30:27,060 të mburrem në lidhje me se si ju e bëri këtë pa si shkëmbejnë me një variabël shtesë, 691 00:30:27,060 --> 00:30:28,640 kjo nuk është e gjitha që bindëse. 692 00:30:28,640 --> 00:30:31,619 Sepse për të shpëtuar 32 bit, si në rastin e një int aktual, 693 00:30:31,619 --> 00:30:33,410 nuk është e gjitha që bindëse në një sistem ku 694 00:30:33,410 --> 00:30:36,722 ju mund të jetë duke përdorur dhjetëra megabajt apo edhe më shumë memorie të tillë këto ditë. 695 00:30:36,722 --> 00:30:38,680 Dhe në fakt, kur ne të merrni në një grup të mëvonshme e problemeve 696 00:30:38,680 --> 00:30:41,010 dhe ju të zbatojë magji checker dhe ju do të 697 00:30:41,010 --> 00:30:43,550 të sfidohen për ta bërë këtë me kjo RAM sa më pak dhe sa më pak 698 00:30:43,550 --> 00:30:46,820 kohë të jetë e mundur mbi computer-- ju ende 699 00:30:46,820 --> 00:30:50,160 kanë një javë për të zbatuar it-- ju do have-- ju do të jetë 700 00:30:50,160 --> 00:30:51,799 sfiduar për të minimizuar këto burime. 701 00:30:51,799 --> 00:30:53,840 Dhe kjo është me të vërtetë e vetmja rast ky semestër 702 00:30:53,840 --> 00:30:57,940 ku ju do të inkurajohen për të rruhem off edhe performancën mirën 703 00:30:57,940 --> 00:30:59,340 kushton ndryshe. 704 00:30:59,340 --> 00:31:02,200 >> Pra what-- si mund të shihni këtë në kodin aktual? 705 00:31:02,200 --> 00:31:04,530 Më lejoni të shkoj përpara tani dhe të hapë një shembull 706 00:31:04,530 --> 00:31:07,700 se qëllimisht është quajtur Jo Swap për shkak se ajo nuk ka 707 00:31:07,700 --> 00:31:10,670 në fakt bie në ujdi variablave si ju në fakt mund të presin. 708 00:31:10,670 --> 00:31:12,260 Pra, le të marrin një vështrim. 709 00:31:12,260 --> 00:31:17,050 Këtu është një program që ka CS50 bibliotekë në vazhdim e sipër, unë vetëm standarde / O. 710 00:31:17,050 --> 00:31:19,560 Tani ne kemi një prototip për shkëmbim deri të lartë që sapo 711 00:31:19,560 --> 00:31:21,540 do të thotë se e mori për të përcaktohet më vonë. 712 00:31:21,540 --> 00:31:22,550 Dhe këtu është kryesor. 713 00:31:22,550 --> 00:31:26,000 >> Unë në mënyrë arbitrare caktuar X dhe Y, përkatësisht, një vlerat dhe dy 714 00:31:26,000 --> 00:31:28,590 vetëm për shkak se ata janë të vogla dhe të lehtë për të menduar. 715 00:31:28,590 --> 00:31:32,280 Dhe atëherë unë vetëm kam një bandë e printfs ku unë kam një kontroll mendje e shëndoshë. x eshte 1 716 00:31:32,280 --> 00:31:35,110 dhe y eshte 2 është duket çfarë ato printfs do të thonë. 717 00:31:35,110 --> 00:31:36,530 Pra, nuk ka magji deri tani. 718 00:31:36,530 --> 00:31:40,100 >> Atëherë unë jam duke shkuar për të kërkuar me shtypura def, shkëmbejnë dot Dot Dot. 719 00:31:40,100 --> 00:31:43,730 Unë jam duke shkuar për të thirrur shkëmbim funksion, duke kaluar në x dhe y. 720 00:31:43,730 --> 00:31:47,350 Dhe le të supozojmë për tani që shkëmbim është zbatuar saktësisht 721 00:31:47,350 --> 00:31:49,930 si ajo ishte një moment më parë me një ndryshore të përkohshme. 722 00:31:49,930 --> 00:31:52,670 Dhe kështu që unë pretendojnë guxim, swapped. 723 00:31:52,670 --> 00:31:55,429 x është tani kjo dhe y tani është se. 724 00:31:55,429 --> 00:31:57,220 Por fotografi, natyrisht, quhet No Swap. 725 00:31:57,220 --> 00:31:58,678 Pra, le të vërtetë të shohim se çfarë ndodh. 726 00:31:58,678 --> 00:32:04,450 Nëse unë përpilojnë asnjë shkëmbim dhe pastaj bëjnë ./noswap, x është 1, y është 2. 727 00:32:04,450 --> 00:32:05,770 Shkëmbejnë swapped. 728 00:32:05,770 --> 00:32:07,200 x eshte 1, y eshte 2. 729 00:32:07,200 --> 00:32:11,980 Pra, në fakt duket të jetë me të meta edhe pse swap-- le të lëvizni poshtë now-- 730 00:32:11,980 --> 00:32:16,542 është zbatuar saktësisht sipas rregulloreve Kodi kam propozuar një moment më parë. 731 00:32:16,542 --> 00:32:19,000 Pra, ne nuk jemi duke shkuar për të marrë dashuroj me gjëra të XOR për tani. 732 00:32:19,000 --> 00:32:21,890 Kjo, gjithashtu, duhet të punojnë vetëm si me qumësht dhe FZ, 733 00:32:21,890 --> 00:32:25,820 por kjo nuk duket të jetë duke punuar. 734 00:32:25,820 --> 00:32:27,180 >> Pra, le ta bëjmë këtë përsëri. 735 00:32:27,180 --> 00:32:29,310 Ndoshta unë thjesht nuk ishte duke ecur atë të drejtë. 736 00:32:29,310 --> 00:32:32,010 Pra, le të kandidojë No Swap përsëri. 737 00:32:32,010 --> 00:32:32,900 Ndoshta I-- nr. 738 00:32:32,900 --> 00:32:34,400 Pra, kjo nuk është vetëm duke punuar. 739 00:32:34,400 --> 00:32:36,060 Pra, le të bëjmë një kontroll të vogël mendje e shëndoshë. 740 00:32:36,060 --> 00:32:39,690 Më lejoni të shkoj përpara këtu në Swap dhe vetëm të shtoni, prit një minutë, 741 00:32:39,690 --> 00:32:43,856 një është% i / n dhe le të plug-në vlerën e një. 742 00:32:43,856 --> 00:32:45,730 Sepse unë me të vërtetë duan për të parë se çfarë po ndodh. 743 00:32:45,730 --> 00:32:47,570 Dhe në të vërtetë, kjo është një teknikë debugging 744 00:32:47,570 --> 00:32:50,028 që ju mund të jetë duke përdorur në orë zyrë apo në shtëpi tashmë, 745 00:32:50,028 --> 00:32:53,560 ngjashme me gjysmën e parë të Danit Video Armendariz në PSET3 746 00:32:53,560 --> 00:32:56,870 ku ne kemi prezantuar shtypura def si një teknikë e rekomanduar, të paktën 747 00:32:56,870 --> 00:32:58,080 për raste të thjeshta. 748 00:32:58,080 --> 00:33:01,720 Më lejoni të shkoj përpara dhe të drejtuar të bëjë nuk ka shkëmbim përsëri, ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Interesante. 751 00:33:05,840 --> 00:33:11,670 Pra, vini re atë që duket të jetë e vërtetë. x eshte 1, y eshte 2, por a është 2 kur b është 1. 752 00:33:11,670 --> 00:33:16,790 Pra, ata të dy disi u swapped por x dhe y nuk janë duke u swapped. 753 00:33:16,790 --> 00:33:21,090 Pra, të jetë i qartë, se çfarë po ndodh po, këtu unë kam x dhe y 754 00:33:21,090 --> 00:33:25,380 dhe ata janë variabla lokale në Qëllimi i kryesor, unë jam duke kaluar në x dhe y 755 00:33:25,380 --> 00:33:26,170 të bie në ujdi. 756 00:33:26,170 --> 00:33:29,080 Tani, swap, si një funksion të veçantë, është i lirë për të thirrur argumentet e saj 757 00:33:29,080 --> 00:33:30,590 ose parametrat ndonjë gjë e saj ajo dëshiron. 758 00:33:30,590 --> 00:33:33,280 Foo ose bar apo x apo y ose A ose B. 759 00:33:33,280 --> 00:33:36,870 Vetëm për të bërë të qartë se ata janë jo identike me x dhe y në vetvete, 760 00:33:36,870 --> 00:33:38,020 Unë e kam thënë a dhe b. 761 00:33:38,020 --> 00:33:40,040 Por ne mund të telefononi ata çdo gjë që duam. 762 00:33:40,040 --> 00:33:43,960 >> Dhe kështu ajo duket si shkëmbim është duke u kaluar 763 00:33:43,960 --> 00:33:48,980 x-- AKA a-- dhe kjo është duke kaluar y-- AKA b. 764 00:33:48,980 --> 00:33:51,900 Disi këto tri linja janë shkëmbejnë ato vlera saktësisht 765 00:33:51,900 --> 00:33:53,510 ashtu si Lauren me qumësht dhe FZ. 766 00:33:53,510 --> 00:33:56,010 Por, kur kemi të shtypura nga vlerat, a dhe b 767 00:33:56,010 --> 00:34:01,340 janë me të vërtetë të bie në ujdi, por x dhe y nuk kanë asnjë ndryshim në to. 768 00:34:01,340 --> 00:34:03,150 Kujtojnë se x dhe y janë deri këtu. 769 00:34:03,150 --> 00:34:05,320 >> Pra, ne mund të shohim këtë nëpërmjet Një tjetër teknikë si edhe. 770 00:34:05,320 --> 00:34:08,110 Dhe kjo shumë është një teknikë ngulitur në problemin vendosur tre. 771 00:34:08,110 --> 00:34:10,780 Le të shkojnë përpara dhe të bëjë këtë në CS50 ID qoftë se ju nuk e keni tashmë. 772 00:34:10,780 --> 00:34:13,730 Në anën e djathtë ne kanë këtë tab Rregullues. 773 00:34:13,730 --> 00:34:16,159 Dhe në qoftë se keni hapur këtë ide, ka disa informata misterioze 774 00:34:16,159 --> 00:34:17,530 që është hedhur në ju në fillim. 775 00:34:17,530 --> 00:34:19,310 Por le të të vë në lojë kjo përveç reale të shpejtë. 776 00:34:19,310 --> 00:34:21,620 >> Pra, një, ju shihni variabla lokale. 777 00:34:21,620 --> 00:34:26,230 Rezulton se të ndërtuar në CS50 IDE, dhe një shumë e mjediseve të programimit më shumë 778 00:34:26,230 --> 00:34:28,060 në përgjithësi, është një Rregullues. 779 00:34:28,060 --> 00:34:31,340 Një mjet që ju lejon të shihni me sy çfarë po ndodh brenda programit tuaj 780 00:34:31,340 --> 00:34:34,380 pa pasur nevojë të përdorë shtuar printfs dhe hartimin dhe drejtimin e 781 00:34:34,380 --> 00:34:37,588 dhe duke shtuar printf-së dhe hartimin dhe drejtimin, i cili tashmë, në orarit të punës 782 00:34:37,588 --> 00:34:40,070 ose në shtëpi, është ndoshta duke marrë mjaft i lodhshëm. 783 00:34:40,070 --> 00:34:43,090 >> Kështu që këtu, në vetëm një moment, ne jemi duke shkuar për të parë në kohë reale 784 00:34:43,090 --> 00:34:44,760 vlerat e variablave tonë lokale. 785 00:34:44,760 --> 00:34:47,880 Ne jemi gjithashtu do të jetë në gjendje për të vendosur ato që quhen pikat e ndalimit të cilat 786 00:34:47,880 --> 00:34:52,570 mundësi në programin tim për pauzë Ekzekutimi në një linjë të veçantë të kodit 787 00:34:52,570 --> 00:34:53,710 që unë jam kurioz rreth. 788 00:34:53,710 --> 00:34:54,210 E drejtë? 789 00:34:54,210 --> 00:34:55,969 Këto programe të kandidojë në një ndarje të dytë. 790 00:34:55,969 --> 00:35:00,450 Kjo është lloj i bukur për ne njerëzit ngadalshme të jetë në gjendje të bëj një pauzë, të marrë një moment, shih 791 00:35:00,450 --> 00:35:02,380 çfarë po ndodh përreth një linjë të caktuar të kodit 792 00:35:02,380 --> 00:35:05,050 pa plugimi programit nëpërmjet saj dhe duke përfunduar tërësisht. 793 00:35:05,050 --> 00:35:08,510 Pra, një pikat e ndalimit do të na lejojë që të pushim dhe pushim në një pikë të caktuar. 794 00:35:08,510 --> 00:35:12,990 >> Rafte thirrje është një mënyrë e sofistikuar për duke thënë se ajo që funksionet janë aktualisht 795 00:35:12,990 --> 00:35:14,140 duke u thirrur në këtë moment. 796 00:35:14,140 --> 00:35:15,370 Kryesor është quajtur gjithmonë i pari. 797 00:35:15,370 --> 00:35:17,230 Por në qoftë se kryesore quan një funksion i quajtur Swap, 798 00:35:17,230 --> 00:35:20,470 Ne jemi të vërtetë duke shkuar për të parë këtë kullë e funksioneve që kanë qenë 799 00:35:20,470 --> 00:35:22,400 quajtur në mënyrë kronologjike. 800 00:35:22,400 --> 00:35:23,310 Pra, le të shohim se. 801 00:35:23,310 --> 00:35:24,327 >> Unë jam duke shkuar për të zoom jashtë. 802 00:35:24,327 --> 00:35:25,660 Unë jam duke shkuar për të shkuar mbrapa në kodin tim. 803 00:35:25,660 --> 00:35:27,540 Dhe vetëm për shkak se unë dua të jetë pedant këtu, 804 00:35:27,540 --> 00:35:31,100 Unë jam duke shkuar për të shkuar përpara dhe klikoni vetëm në të majtë të linjës pesë. 805 00:35:31,100 --> 00:35:32,830 Dhe kjo krijon një njollë të kuqe. 806 00:35:32,830 --> 00:35:36,200 Dhe vini re në anën e djathtë se debugger di, hej, 807 00:35:36,200 --> 00:35:41,020 Unë vetëm tha një breakpoint në Linja noswap.c pesë, në mënyrë specifike 808 00:35:41,020 --> 00:35:42,480 në këtë linjë të kodit. 809 00:35:42,480 --> 00:35:45,090 Pra debugger dinë se unë kanë kërkuar që herën tjetër 810 00:35:45,090 --> 00:35:48,530 I drejtuar tim atë program pauzë Ekzekutimi atje në vend se vetëm 811 00:35:48,530 --> 00:35:50,390 drejtimin e gjithë gjë super të shpejtë. 812 00:35:50,390 --> 00:35:53,889 >> Kështu që tani unë jam duke shkuar për të klikoni korrigjoj button në krye të IDE 813 00:35:53,889 --> 00:35:55,430 dhe kjo do të bëjë të mëposhtme. 814 00:35:55,430 --> 00:36:00,680 Ajo do të hapë një fillimisht disi frikshme në kërkim terminal dytë window-- 815 00:36:00,680 --> 00:36:02,679 debugging largët nga presë të tilla dhe such-- 816 00:36:02,679 --> 00:36:04,970 dhe ne do të kthehen në atë që të gjithë ata që do të thotë para se të gjatë. 817 00:36:04,970 --> 00:36:09,020 Por çfarë është e rëndësishme për tani është që kjo pikë të kuqe u godit, 818 00:36:09,020 --> 00:36:11,735 debugger ka qëllimisht ndaluar execution-- 819 00:36:11,735 --> 00:36:15,560 jo në atë linjë në vetvete, por në ditën e parë linjë e kodit aktual në atë funksion. 820 00:36:15,560 --> 00:36:18,040 Dhe kjo është arsyeja pse linja shtatë është tani theksuar në të verdhë. 821 00:36:18,040 --> 00:36:20,550 >> Dhe tani le të marrin një vështrim në anën e djathtë. 822 00:36:20,550 --> 00:36:27,300 Ajo duket si, by default, bukur të mjaftueshme, x ka çfarë vlerë? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 Dhe y ka çfarë vlerë? 825 00:36:29,750 --> 00:36:30,410 Zero. 826 00:36:30,410 --> 00:36:35,540 Dhe kjo është për t'u pritur në kuptimin se x dhe y-- që line-- verdhë ka 827 00:36:35,540 --> 00:36:36,770 Nuk ekzekutuar ende. 828 00:36:36,770 --> 00:36:38,510 Pra, x nuk duhet të ketë vlerën 1. 829 00:36:38,510 --> 00:36:41,470 Ajo mund të ketë ndonjë vlerë tjetër, një të ashtu-quajtur vlera e mbeturinave. 830 00:36:41,470 --> 00:36:44,320 Dhe kemi marrë me fat në atë që është zero në këtë pikë, në thelb. 831 00:36:44,320 --> 00:36:46,400 >> Kështu që tani ka vetëm disa butonat ne duhet të kujdesemi 832 00:36:46,400 --> 00:36:48,100 kur debugging në këtë mënyrë. 833 00:36:48,100 --> 00:36:49,970 Vini re këtu, ne kemi një butonin Luaj. 834 00:36:49,970 --> 00:36:51,877 Dhe në qoftë se ne të luajë apo goditur rinisë, kjo është vetëm 835 00:36:51,877 --> 00:36:53,710 duke shkuar për të drejtuar përmes pjesa tjetër e programit 836 00:36:53,710 --> 00:36:55,300 ose deri sa ajo godet një tjetër breakpoint. 837 00:36:55,300 --> 00:36:56,910 Por unë nuk kam vendosur ndonjë tjetër pikat e ndalimit kështu që kjo është vetëm 838 00:36:56,910 --> 00:36:58,118 do të vazhdojë deri në fund. 839 00:36:58,118 --> 00:37:00,280 Kjo lloj humbje Qëllimi i poking rreth. 840 00:37:00,280 --> 00:37:03,290 >> Pra, në vend, më intereson këto ikona në të djathtë. 841 00:37:03,290 --> 00:37:05,360 Dhe në qoftë se unë rri pezull mbi ato, si ju duhet të too, 842 00:37:05,360 --> 00:37:07,450 ju do të shihni pak këshilla tips-- mjet. 843 00:37:07,450 --> 00:37:09,020 Ky është hap gjatë. 844 00:37:09,020 --> 00:37:11,290 Tani kjo nuk do të thotë kaloni vija e mëposhtme të kodit. 845 00:37:11,290 --> 00:37:14,840 Kjo thjesht do të thotë të ekzekutuar atë dhe lëvizin në të ardhshëm, të lëvizin për të ardhshëm, 846 00:37:14,840 --> 00:37:15,580 lëvizin për të ardhshëm. 847 00:37:15,580 --> 00:37:17,610 Me fjalë të tjera, me anë të që buton, mund të eci 848 00:37:17,610 --> 00:37:20,390 përmes sime Kodi një hap në një kohë. 849 00:37:20,390 --> 00:37:21,914 Rresht pas rreshti, fjalë për fjalë. 850 00:37:21,914 --> 00:37:23,830 Tani, në të djathtë të se, ka një tjetër 851 00:37:23,830 --> 00:37:25,163 se ne do të shohim në një moment të vetëm. 852 00:37:25,163 --> 00:37:27,820 Kjo është e ashtuquajtura Hapi në ikonën që është 853 00:37:27,820 --> 00:37:30,300 do të më lejoni pikiatë në një tjetër funksion. 854 00:37:30,300 --> 00:37:31,800 Por le të shohim këtë në një moment të vetëm. 855 00:37:31,800 --> 00:37:33,280 Kështu që unë jam duke shkuar për të klikoni mbi hap. 856 00:37:33,280 --> 00:37:35,820 Dhe tani vini re, si unë klikoni ky buton në krye të drejtë, 857 00:37:35,820 --> 00:37:41,260 mbani sytë tuaj afërsisht nën Lokale Variablat dhe shikoni se çfarë ndodh me x. 858 00:37:41,260 --> 00:37:44,115 x është tani 1 sepse vija e verdhë ka ekzekutuar tani 859 00:37:44,115 --> 00:37:45,840 dhe ne kemi lëvizur në në linjë 8. 860 00:37:45,840 --> 00:37:49,840 Dhe në një moment të vetëm y duhet të shpresojmë se të bëhet 2. 861 00:37:49,840 --> 00:37:52,330 >> Tani, asgjë që interesante ndodh për një grimë. 862 00:37:52,330 --> 00:37:53,390 E gjithë kjo është është printf. 863 00:37:53,390 --> 00:37:58,010 Dhe vini re, në terminalin e mia mesëm dritare, unë shoh prodhimin e def shtypura. 864 00:37:58,010 --> 00:38:01,080 Dhe tani unë kam për të bërë një Vendimi si programues. 865 00:38:01,080 --> 00:38:04,360 Unë mund të hap mbi këtë linjë të Kodi, ekzekutimin e tij por jo 866 00:38:04,360 --> 00:38:06,220 duke marrë kurioz për atë që është brenda. 867 00:38:06,220 --> 00:38:11,130 Ose unë në fakt mund të futemi në atë dhe shko brenda vetë Swap. 868 00:38:11,130 --> 00:38:12,340 Pra, le ta bëjmë këtë të fundit. 869 00:38:12,340 --> 00:38:15,550 >> Më lejoni të shkoj përpara dhe klikoni jo Hapi Mbi por Hapi në. 870 00:38:15,550 --> 00:38:17,300 Njoftim, të gjithë një e papritur ndryshimet dritare 871 00:38:17,300 --> 00:38:19,330 për të nxjerrë në pah të parë linjë e kodit në Swap. 872 00:38:19,330 --> 00:38:20,710 Kjo është linjë 21. 873 00:38:20,710 --> 00:38:25,220 Dhe tani, çfarë është lloj i shokuar është se, në qoftë se ju shikoni mbi këtu, siç pritej, 874 00:38:25,220 --> 00:38:29,720 a comma b eshte 1 dhe 2, respektivisht. 875 00:38:29,720 --> 00:38:33,840 Pse është temp 32.767? 876 00:38:33,840 --> 00:38:36,560 Duke kujtuar se temp, ashtu si kupa bosh një moment më parë, 877 00:38:36,560 --> 00:38:38,980 është deklaruar këtu në linjë 21. 878 00:38:38,980 --> 00:38:43,390 Pse 32,000- Dua të them, pse është ajo vetëm disa vlera pazakontë? 879 00:38:43,390 --> 00:38:43,890 Po? 880 00:38:43,890 --> 00:38:45,190 >> Audienca: Kjo nuk është nisur. 881 00:38:45,190 --> 00:38:46,940 >> DAVID J. Malan: Është e nuk është nisur. 882 00:38:46,940 --> 00:38:49,370 Pra, kompjuteri ynë gjithmonë ka memorie fizike. 883 00:38:49,370 --> 00:38:50,544 Ajo gjithmonë ka RAM fizik. 884 00:38:50,544 --> 00:38:52,710 Dhe ka gjithmonë zero-së dhe një është në atje, apo jo? 885 00:38:52,710 --> 00:38:54,626 Sepse ne jemi duke përdorur tonë kompjuter gjatë gjithë ditës, 886 00:38:54,626 --> 00:38:57,210 ju jeni duke përdorur CS50 IDE ose serverat gjatë gjithë ditës. 887 00:38:57,210 --> 00:39:01,159 Kështu që RAM ose ka disa zero ose disa dikujt apo disa zero dhe ato. 888 00:39:01,159 --> 00:39:02,950 Nuk ka rëndësi nëse janë apo nuk jeni duke përdorur ato. 889 00:39:02,950 --> 00:39:05,270 Ju nuk mund të ketë vetëm bosh hapësira ku ju doni bit. 890 00:39:05,270 --> 00:39:06,850 Ata janë as zero dhe ato. 891 00:39:06,850 --> 00:39:09,610 >> Pra, ajo rezulton se temp, sepse ne nuk kemi nisur atë ende, 892 00:39:09,610 --> 00:39:14,580 ne kemi këto 32 bit, por ata nuk e kam janë nisur për çdo vlerave të njohura. 893 00:39:14,580 --> 00:39:18,110 Pra, çdo gjë që ata ishin më përdorur kohët e fundit for-- ato 32 bits-- 894 00:39:18,110 --> 00:39:23,000 ne jemi vetëm duke parë objekte të disa Përdorimi i mëparshëm i atyre të veçantë 32 895 00:39:23,000 --> 00:39:23,500 bit. 896 00:39:23,500 --> 00:39:27,780 Sapo unë klikoni kalosh edhe pse, phew, temp do të marrë vlerën 1. 897 00:39:27,780 --> 00:39:31,600 Dhe në qoftë se unë bëj atë përsëri, një është do të jepet vlera 2 898 00:39:31,600 --> 00:39:33,830 dhe pastaj b do të jepet vlera 1. 899 00:39:33,830 --> 00:39:36,390 >> Dhe kështu që çfarë është e bukur tani në këtë pikë në histori 900 00:39:36,390 --> 00:39:39,750 është se Rregullues është treguar mua, super ngadalë 901 00:39:39,750 --> 00:39:42,640 në ritmin tim, çfarë gjendja e Swap është. 902 00:39:42,640 --> 00:39:47,490 Por vini re në krye këtu, njoftimi se thirrja rafte në fakt 903 00:39:47,490 --> 00:39:49,180 ka dy shtresa në të. 904 00:39:49,180 --> 00:39:53,240 Tani ajo që është theksuar si Swap, në qoftë se unë klikoni mbi Main në vend të kësaj, 905 00:39:53,240 --> 00:39:57,100 vini re se si të ndryshojë variablat lokale sepse zhvilluesi i mund vetëm hop 906 00:39:57,100 --> 00:39:59,740 përreth dhe të shkojnë në ndonjë fushëveprimit të ndryshme. 907 00:39:59,740 --> 00:40:04,070 Pra, edhe pse ne jemi duke bërë të gjithë këtë punojnë dhe të saktë të shkëmbejnë a dhe b, 908 00:40:04,070 --> 00:40:09,080 kur të shkoj mbrapa dhe me radhë në mes Swap ku a është 2 dhe b eshte 1 dhe kryesore, 909 00:40:09,080 --> 00:40:11,851 ka qenë e prekur kryesor në të gjitha? 910 00:40:11,851 --> 00:40:12,350 Jo. 911 00:40:12,350 --> 00:40:13,930 Pra, çfarë është takeaway këtu? 912 00:40:13,930 --> 00:40:18,200 E pra, ajo rezulton se çdo kohë ju telefononi një funksion si Swap, 913 00:40:18,200 --> 00:40:21,600 dhe ju të kalojë argumente atë, çfarë ju jeni duke kaluar me funksionin Swap 914 00:40:21,600 --> 00:40:24,730 në këtë rast është një kopje prej atyre argumenteve. 915 00:40:24,730 --> 00:40:28,620 Kështu që nëse x dhe y jane secili respektivisht 32 bit, çfarë po bëhet Swap 916 00:40:28,620 --> 00:40:30,760 është dy të reja lokale variabla, apo argumentet, 917 00:40:30,760 --> 00:40:34,380 quhet dhe b--, por ato janë arbitrare names-- por modeli i zero 918 00:40:34,380 --> 00:40:39,520 dhe ato brenda të A dhe B janë rreshtuar të jetë identike me x dhe y 919 00:40:39,520 --> 00:40:42,610 por ato nuk janë të njëjta gjë si x dhe y. 920 00:40:42,610 --> 00:40:46,880 >> Është sikur ka Main në pjesë e saj e letër numri 1 dhe 2 për të x dhe y, 921 00:40:46,880 --> 00:40:49,260 dhe atëherë kur ajo që duart copë letër të bie në ujdi, 922 00:40:49,260 --> 00:40:51,970 Swap shumë shpejt merr stilolaps e vet, shkruan poshtë 923 00:40:51,970 --> 00:40:56,240 1 dhe 2 në bilancin e vet të letrës, Duart mbështetur xy origjinale në Main 924 00:40:56,240 --> 00:40:58,790 dhe pastaj e bën vet gjë me a dhe b. 925 00:40:58,790 --> 00:41:01,940 Dhe kjo tani është super i rëndësishëm për shkak se kjo ka implikime nontrivial 926 00:41:01,940 --> 00:41:06,260 për fakt të shkruar kodin e saktë sepse kjo do të duket ne nuk mund të bie në ujdi 927 00:41:06,260 --> 00:41:07,500 dy variablave. 928 00:41:07,500 --> 00:41:09,150 >> Unë kam shkruar një funksion të saktë Swap. 929 00:41:09,150 --> 00:41:12,770 Ne e kemi zbatuar atë me Lauren si një funksion i saktë swap në realitet, 930 00:41:12,770 --> 00:41:16,700 por me sa duket asnjë nga që çështje në qoftë se ju nuk mund të vërtetë 931 00:41:16,700 --> 00:41:19,530 të bie në ujdi dy vlera të përhershme. 932 00:41:19,530 --> 00:41:21,970 Pra, ne kemi nevojë për një mënyrë tjetër që në fakt të marrë në këtë, 933 00:41:21,970 --> 00:41:24,472 dhe ne duhet të jenë në gjendje të në fakt të zgjidhur këtë problem. 934 00:41:24,472 --> 00:41:27,180 Dhe kjo rezulton out-- dhe ne do të vijnë përsëri në këtë foto të veçantë 935 00:41:27,180 --> 00:41:30,500 para long-- kjo është një mënyrë që ju mund të tërheqë kujtesën e kompjuterit tuaj. 936 00:41:30,500 --> 00:41:31,460 Është vetëm një drejtkëndësh. 937 00:41:31,460 --> 00:41:32,960 Ju mund të tërheqë atë ndonjë disa mënyra, por kjo është 938 00:41:32,960 --> 00:41:35,740 i përshtatshëm për të nxjerrë atë si një drejtkëndësh për arsyen vijuese. 939 00:41:35,740 --> 00:41:40,040 >> Ne jemi duke shkuar për të filluar sot dhe më tej duke folur për të ashtuquajturin rafte. 940 00:41:40,040 --> 00:41:43,870 Dhe rafte është vetëm një copë e RAM-- një copë të memory-- 941 00:41:43,870 --> 00:41:47,100 që funksionon kanë qasje kur ata janë quajtur. 942 00:41:47,100 --> 00:41:49,800 Dhe kështu kjo rezulton se në në fund shumë të këtij rafte 943 00:41:49,800 --> 00:41:53,590 është vendi ku të gjithë variablat lokale kryesor i dhe org C dhe org V dhe të gjitha këto gjëra 944 00:41:53,590 --> 00:41:56,950 do të shkojnë by default. Dhe nëse Main e quan një funksion tjetër si Swap, 945 00:41:56,950 --> 00:42:00,330 mirë, Swap do të marrë një tjetër shtresë e kujtesës lart atë. 946 00:42:00,330 --> 00:42:04,490 >> Dhe kështu që vetëm të ju jap një të përciptë të shpejtë foto e kësaj, në qoftë se unë shkoj mbi here-- 947 00:42:04,490 --> 00:42:09,450 dhe më lejoni të pasqyrojnë këtë në lart si well-- çfarë me të vërtetë unë kam, 948 00:42:09,450 --> 00:42:12,100 në qoftë se ne kujdesemi vetëm për fund të kësaj foto për tani, 949 00:42:12,100 --> 00:42:15,070 është se kur unë të drejtuar një program dhe Main merr quajtur, 950 00:42:15,070 --> 00:42:18,330 Kryesor i është dhënë një copë të RAM në kompjuterin tim që është i 951 00:42:18,330 --> 00:42:20,060 në pjesën e poshtme të këtij ashtuquajturës pirg. 952 00:42:20,060 --> 00:42:22,143 Dhe unë jam duke shkuar për të nxjerrë atë qëllimisht si një katror. 953 00:42:22,143 --> 00:42:24,540 Pra, kjo është si 32 bit apo katër bytes. 954 00:42:24,540 --> 00:42:28,790 Dhe në qoftë se ky funksion kryesor ka një ndryshueshme quajtur x me një vlerë prej 1 955 00:42:28,790 --> 00:42:32,626 dhe ajo ka një ndryshore të quajtur y me vlerën e 2, kjo është 956 00:42:32,626 --> 00:42:35,750 si duke marrë këtë copë e kujtesës që Kryesor është dhënë nga operative 957 00:42:35,750 --> 00:42:38,850 sistem dhe duke e ndarë atë në mënyrë që variabli i parë lokal shkon këtu, 958 00:42:38,850 --> 00:42:40,930 e dyta shkon këtu, dhe kjo është ajo. 959 00:42:40,930 --> 00:42:45,590 >> Kur Main quan Swap, Swap merr fetë e vet të kujtesës 960 00:42:45,590 --> 00:42:48,280 se ne do të tërheqë si kjo nga sistemi operues, 961 00:42:48,280 --> 00:42:50,820 dhe ajo do të ketë saj Variablat e veta lokale bazuar 962 00:42:50,820 --> 00:42:53,825 mbi zbatimin tonë më parë me variablat lokale një 963 00:42:53,825 --> 00:42:58,010 dhe b që fillimisht të marrë vlerat 1 dhe 2. 964 00:42:58,010 --> 00:43:00,450 Por pastaj, sa më shpejt që kodi Swap ekzekuton, 965 00:43:00,450 --> 00:43:03,760 dhe Lauren fakt këmbime OJ dhe qumësht, çfarë po ndodh? 966 00:43:03,760 --> 00:43:09,030 E pra, kjo 2 po bëhet një 1, këtë 1 është bërë një 2, dhe, nga rruga, 967 00:43:09,030 --> 00:43:13,360 ka një variabël temp që është duke u përdorur atë gjithë kohës që eventualisht 968 00:43:13,360 --> 00:43:14,470 shkon larg. 969 00:43:14,470 --> 00:43:16,720 Por kjo nuk ka rëndësi si puna sa ju të bëni 970 00:43:16,720 --> 00:43:22,160 në këtë linjë of-- në këtë hapësirë ​​e kujtesës, x dhe y janë plotësisht paprekur. 971 00:43:22,160 --> 00:43:26,320 >> Pra, ne kemi nevojë për një mënyrë e dhënies Swap dhe funksionet si ai 972 00:43:26,320 --> 00:43:32,640 Qasje sekret, në qoftë se ju do të, për Funksionet like-- të kujtesës si x dhe y. 973 00:43:32,640 --> 00:43:35,110 Pra, le të marrin një vështrim në një shembull që ndihmon 974 00:43:35,110 --> 00:43:38,220 na shikoni saktësisht çfarë ka qenë ndodh në këtë kohë e tërë. 975 00:43:38,220 --> 00:43:40,284 Unë jam duke shkuar për të shkuar përpara dhe e hapur deri Krahaso Zero. 976 00:43:40,284 --> 00:43:42,200 Dhe unë jam duke shkuar për të mbyllur Rregullues ynë, unë jam duke shkuar 977 00:43:42,200 --> 00:43:44,360 për ta mbyllur këtë mesazh frikshme në kërkim i drejti thotë, prit një minutë, 978 00:43:44,360 --> 00:43:45,800 ju jeni në debugging mesme. 979 00:43:45,800 --> 00:43:48,383 Unë jam duke shkuar për të fshehur këtë skedë këtu vetëm për të shkuar përsëri në thjeshtësi. 980 00:43:48,383 --> 00:43:50,160 Pra, mos u bëni merak nëse GDB është vrarë. 981 00:43:50,160 --> 00:43:53,910 Kjo thjesht do të thotë se programi ka u lë, me qëllim në këtë rast, 982 00:43:53,910 --> 00:43:54,820 nga une. 983 00:43:54,820 --> 00:43:57,700 >> Dhe tani Krahasoni Zero bën këtë. 984 00:43:57,700 --> 00:44:00,110 Unë jam duke përdorur CS50 Biblioteka në I / O standarde. 985 00:44:00,110 --> 00:44:04,319 Unë kam marrë një funksion kryesor që për herë të parë thotë, të themi diçka, dhe merr një varg. 986 00:44:04,319 --> 00:44:06,110 Pastaj thotë atë përsëri dhe merr një tjetër varg. 987 00:44:06,110 --> 00:44:09,910 Dhe vini re se këto dy vargje quhen s dhe t, respektivisht. 988 00:44:09,910 --> 00:44:12,910 Dhe tani ky program, Krahaso Zero, qëllimi i tij në jetë, 989 00:44:12,910 --> 00:44:15,470 është menduar për të më thoni, nuk kam lloji të njëjtën gjë? 990 00:44:15,470 --> 00:44:16,910 Dhe kështu që unë jam duke shkuar prapa në javë një. 991 00:44:16,910 --> 00:44:19,950 Unë jam duke përdorur operatorin tim të barabartë të barabartë që është operatori cilësisë. 992 00:44:19,950 --> 00:44:22,220 Jo operatori detyrë, operatori barazi. 993 00:44:22,220 --> 00:44:23,890 Unë jam vetëm duke krahasuar s dhe t. 994 00:44:23,890 --> 00:44:27,470 >> Pra, le të vërtetë të shkojnë përpara dhe të bëjë këtë. 995 00:44:27,470 --> 00:44:32,680 Dhe unë jam duke shkuar për të shkuar përpara dhe të bëjnë Krahaso Zero. 996 00:44:32,680 --> 00:44:35,110 Unë jam duke shkuar për të bërë ./comparezero. 997 00:44:35,110 --> 00:44:37,150 Dhe unë jam duke shkuar për të shkuar përpara dhe të thonë diçka 998 00:44:37,150 --> 00:44:43,450 si, le ta bëjmë mom në Fjala dhe si për mom në uppercase. 999 00:44:43,450 --> 00:44:45,034 Dhe sigurisht unë lloji gjëra të ndryshme. 1000 00:44:45,034 --> 00:44:45,533 Në rregull. 1001 00:44:45,533 --> 00:44:46,570 Kjo është për të pritur. 1002 00:44:46,570 --> 00:44:47,640 >> Le të drejtuar atë përsëri. 1003 00:44:47,640 --> 00:44:49,740 Dy herë bëjnë vogle, vogle. 1004 00:44:49,740 --> 00:44:51,490 Kjo duket super identik me mua. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 NE RREGULL. 1007 00:44:53,430 --> 00:44:55,804 Ndoshta kjo është vetëm për shkak se pazakontë kjo nuk është simpati gramatikë tim. 1008 00:44:55,804 --> 00:44:59,930 Pra, le të bëjmë një mom kapitalit, Kapitali mom, identike. 1009 00:44:59,930 --> 00:45:01,490 Gjëra të ndryshme. 1010 00:45:01,490 --> 00:45:03,907 >> Pra, pse është kjo? 1011 00:45:03,907 --> 00:45:06,240 E pra, çfarë në të vërtetë do në nën kapuç këtu? 1012 00:45:06,240 --> 00:45:08,180 Pra, le të kthehemi mbi këtu për vetëm një moment 1013 00:45:08,180 --> 00:45:10,910 dhe të marrë parasysh se çfarë getString është në të vërtetë duke bërë. 1014 00:45:10,910 --> 00:45:13,385 Kur ju telefononi getString, kjo është një funksion ne 1015 00:45:13,385 --> 00:45:16,510 vetë shkroi dhe ajo disi merr një Sekuenca e karaktere nga përdoruesit. 1016 00:45:16,510 --> 00:45:20,280 Dhe le të supozojmë se i pari herë që unë quaj getString, që i jep më 1017 00:45:20,280 --> 00:45:21,930 një copë e kujtesës që duket si kjo. 1018 00:45:21,930 --> 00:45:26,990 Dhe në qoftë se unë shtypur në të gjitha Fjala m-o-m-- dhe atë që shkon pas tij? 1019 00:45:26,990 --> 00:45:28,840 Vetëm një kontroll i shpejtë mendje e shëndoshë. 1020 00:45:28,840 --> 00:45:29,780 >> Zero backslash. 1021 00:45:29,780 --> 00:45:30,510 Ne e dimë se. 1022 00:45:30,510 --> 00:45:32,784 Dhe kujtoj se kemi luajtur rreth me emrin Zamila së 1023 00:45:32,784 --> 00:45:34,950 dhe një bandë e emra të tjerë kur Rob ishte këtu në kërkim 1024 00:45:34,950 --> 00:45:36,280 në atë që po ndodh në brendësi të kujtesës. 1025 00:45:36,280 --> 00:45:37,780 Pra kjo histori është saktësisht e njëjtë. 1026 00:45:37,780 --> 00:45:40,160 Kjo është ajo që getString po kthehet në mua. 1027 00:45:40,160 --> 00:45:44,780 Tani, kodi im një moment më parë ruajtura vlera kthimi i getString 1028 00:45:44,780 --> 00:45:47,510 në një ndryshore të quajtur s. 1029 00:45:47,510 --> 00:45:51,390 Dhe pastaj herën e dytë unë e quajti atë, ajo ruajtur atë në një ndryshore të quajtur t. 1030 00:45:51,390 --> 00:45:55,070 >> Pra, nëse unë shkoj këtu, Unë kam nevojë për për të nxjerrë këtë variable-- lokale 1031 00:45:55,070 --> 00:45:59,610 dhe unë jam duke shkuar për të në përgjithësi të nxjerrë një varg si just-- ne do të 1032 00:45:59,610 --> 00:46:02,360 e quajti atë s-- si një shesh të vogël këtu. 1033 00:46:02,360 --> 00:46:09,760 Dhe tani, somehow-- si e bën mom shkoni brenda këtij s ndryshueshme? 1034 00:46:09,760 --> 00:46:12,010 E pra, ne duhet të kthehemi në parimet e parë këtu. 1035 00:46:12,010 --> 00:46:15,660 Çfarë është getString fakt kthyer? 1036 00:46:15,660 --> 00:46:19,030 >> Pra, ajo rezulton se M-O-M backslash zero, dhe çdo numër 1037 00:46:19,030 --> 00:46:22,364 e vargjeve të tjera në kujtesë si Zamila dhe Rob ose Andy apo çfarëdo të tjerët, 1038 00:46:22,364 --> 00:46:24,280 janë sigurisht në tonë RAM kompjuterit apo kujtesës. 1039 00:46:24,280 --> 00:46:27,760 Dhe RAM juaj ka like-- ju keni një koncert të RAM, dy koncerte të RAM, 1040 00:46:27,760 --> 00:46:30,860 ose një miliard apo dy miliardë bytes, apo ndoshta edhe më shumë këto ditë. 1041 00:46:30,860 --> 00:46:34,070 Pra, le të supozojmë, për qëllime të sotme, se kjo nuk ka rëndësi se si ne të numërojë 1042 00:46:34,070 --> 00:46:36,640 ata, por ne mund të llogarisë çdo e atyre miliardë lekë ose dy miliardë 1043 00:46:36,640 --> 00:46:37,880 ose katër miliardë bytes. 1044 00:46:37,880 --> 00:46:42,240 >> Dhe le të vetëm në mënyrë arbitrare të themi se kjo është kafshoj i parë, pickim të dytë, 1045 00:46:42,240 --> 00:46:43,380 të tretë, të katërt. 1046 00:46:43,380 --> 00:46:46,570 Unë jam qëllimisht jo duke përdorur zero për sot, por ne do të kthehen në atë. 1047 00:46:46,570 --> 00:46:49,570 Pra, me fjalë të tjera, nëse kjo është e hera e parë që unë jam duke përdorur programin, 1048 00:46:49,570 --> 00:46:52,715 Unë jam vetëm duke u fat dhe i pari pickim është në një vend pastaj dy 1049 00:46:52,715 --> 00:46:53,590 pastaj tre se katër. 1050 00:46:53,590 --> 00:46:57,430 Dhe në qoftë se unë mbajtur vizatim, numri kuti dy miliardë do të jetë mënyra më e gjatë këtu. 1051 00:46:57,430 --> 00:47:02,200 >> Pra, çfarë mendoni ju, atëherë, GetString fakt kthehet? 1052 00:47:02,200 --> 00:47:06,010 Kjo nuk është kthyer M-O-M backslash zero në vetvete për shkak se në mënyrë të qartë 1053 00:47:06,010 --> 00:47:08,180 nuk do të përshtaten në kuti që unë kam tërhequr. 1054 00:47:08,180 --> 00:47:11,210 Pra, çfarë tjetër mund të vërtetë të getString të kthehen të gjitha këto javë? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Përgjigja është mbi Bordi këtu diku. 1057 00:47:16,820 --> 00:47:20,390 Ju nuk mund të përshtatet M-O-M backslash zero, kështu që ajo që mund të ketë kuptim në vend? 1058 00:47:20,390 --> 00:47:23,424 Nëse keni pasur të jetë super i zgjuar, duke në të ashtuquajturën hat inxhinieri, 1059 00:47:23,424 --> 00:47:24,340 çfarë mund të kthehet? 1060 00:47:24,340 --> 00:47:27,340 Çfarë është më pak e informacionit ju mund të kthehet se do ende 1061 00:47:27,340 --> 00:47:30,610 ju lejojnë të gjeni M-O-M në kujtesë? 1062 00:47:30,610 --> 00:47:31,270 Po? 1063 00:47:31,270 --> 00:47:31,950 >> Audienca: Një. 1064 00:47:31,950 --> 00:47:32,200 >> DAVID J. Malan: Një. 1065 00:47:32,200 --> 00:47:33,021 Dhe pse një? 1066 00:47:33,021 --> 00:47:35,520 Audienca: Për shkak se ajo do të tregoj ju ku të shkoni [e padëgjueshme]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 DAVID J. Malan: Pikërisht. 1069 00:47:39,390 --> 00:47:44,300 Unë jam vetëm duke shkuar për të kthyer adresën e vargut që unë kam marrë. 1070 00:47:44,300 --> 00:47:46,570 Adresa në këtë Rasti është vend një. 1071 00:47:46,570 --> 00:47:51,280 Pra, çfarë me të vërtetë është duke u ruajtur në s-- dhe çdo variabël string kështu far-- 1072 00:47:51,280 --> 00:47:53,430 ka qenë vetëm Adresa e atë varg. 1073 00:47:53,430 --> 00:47:57,840 >> Ndërkohë, në qoftë se unë e quaj GetString për herë të dytë dhe unë 1074 00:47:57,840 --> 00:48:03,300 shkruani në fjalë për fjalë të njëjtën thing-- M-O-M me lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 dhe një tjetër backslash zero, dhe tani ndoshta programin tim 1076 00:48:06,200 --> 00:48:09,820 qenë duke konkurruar për disa kohë kështu që ndoshta kjo është 10, kjo është vendndodhja 11, kjo është 12, 1077 00:48:09,820 --> 00:48:10,700 kjo është 13. 1078 00:48:10,700 --> 00:48:13,590 Kompjuterët që përdorin disa të tjera kujtesës për çfarëdo arsye. 1079 00:48:13,590 --> 00:48:18,172 Çka tani shkon në sekondë tim ndryshueshme në t programin tim? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Pikërisht. 1082 00:48:20,050 --> 00:48:23,910 >> Dhe kështu, kur ne shikojmë në Kodi burimor i këtij programi 1083 00:48:23,910 --> 00:48:26,550 ku unë jam thjesht duke u përpjekur për të krahasuar dy vlera, 1084 00:48:26,550 --> 00:48:32,180 është s barabartë e barabartë me t, çfarë është përgjigja e qartë e njeriut? 1085 00:48:32,180 --> 00:48:34,890 Vetëm për shkak se nuk ka 1 nuk ka të barabartë 10. 1086 00:48:34,890 --> 00:48:36,861 Dhe kështu këtu qëndron një mundësi për ne të vërtetë 1087 00:48:36,861 --> 00:48:39,610 për të thjesht shkoni përsëri në, përsëri, për herë të parë parimet dhe mendoni rreth, mirë, 1088 00:48:39,610 --> 00:48:41,110 çfarë po ndodh nën kapuç? 1089 00:48:41,110 --> 00:48:43,240 Ne kemi qenë duke folur për copa dhe bytes dhe kujtesës, 1090 00:48:43,240 --> 00:48:46,820 por është e vërtetë e dobishme për të kuptuar sepse kur ju telefononi getString, 1091 00:48:46,820 --> 00:48:50,280 edhe pse ne mendojmë se është kthimit M-O-M ose string nëna 1092 00:48:50,280 --> 00:48:53,120 ose Andy apo Zamila ose si, teknikisht 1093 00:48:53,120 --> 00:48:55,510 kjo është vetëm kthimin adresa e atij copë e kujtesës. 1094 00:48:55,510 --> 00:48:56,910 >> Por kjo është në rregull. 1095 00:48:56,910 --> 00:49:00,570 Sepse si mund ta di ku mbaron vargu? 1096 00:49:00,570 --> 00:49:03,840 Nëse unë jam duke pasur parasysh vetëm fillimi? 1097 00:49:03,840 --> 00:49:05,380 E pra, backslash zero, e drejtë? 1098 00:49:05,380 --> 00:49:08,800 Vetëm në kohë lineare unë mund shtypura nga me def shtypura M-O-M. 1099 00:49:08,800 --> 00:49:11,820 Dhe sa më shpejt që unë shoh backslash zero, unë nuk bëj kujdes se ku kam filluar, 1100 00:49:11,820 --> 00:49:14,950 Unë tashmë e di pa dyshim ku kam nevojë për t'i dhënë fund. 1101 00:49:14,950 --> 00:49:18,700 >> Dhe kështu sot shënon beginning-- dhe më lejoni të bëjë këtë në mënyrë dramatike sepse ne 1102 00:49:18,700 --> 00:49:21,800 shkoi nëpër shumë vështirësi për merrni këto këtu trajnimin wheels-- 1103 00:49:21,800 --> 00:49:29,840 kështu që sot rrotat e trajnimit të fillojë të çohet dhe publikojmë në least-- 1104 00:49:29,840 --> 00:49:31,373 >> [Duartrokitje] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Kjo ishte edhe vlerë të udhëtimit për të synuar këtë mëngjes, po? 1107 00:49:36,160 --> 00:49:39,600 Pra now-- ka, ajo kthehet jashtë, nuk ka gjë të tillë si string. 1108 00:49:39,600 --> 00:49:41,140 String nuk ekziston. 1109 00:49:41,140 --> 00:49:43,760 Është një sinonim që ne i kemi pasur brenda bibliotekës CS50. 1110 00:49:43,760 --> 00:49:48,660 Tani e tutje, ne do të fillojnë duke e quajtur s dhe t jo vargjet, por yjet char. 1111 00:49:48,660 --> 00:49:51,180 Dhe ylli char ne do të vë në lojë përveç para se të gjatë. 1112 00:49:51,180 --> 00:49:53,510 Por kjo do të thotë, se edhe në qoftë se ne vazhdojmë 1113 00:49:53,510 --> 00:49:56,180 duke përdorur getString për tani, teknikisht unë duhet 1114 00:49:56,180 --> 00:49:59,010 të jetë duke thënë yll char dhe yllin char. 1115 00:49:59,010 --> 00:50:01,720 >> Dhe kjo rezulton se çka yllin do të të treguar është diçka 1116 00:50:01,720 --> 00:50:04,340 quajtur një tregues apo një adresë. 1117 00:50:04,340 --> 00:50:06,110 Dhe në fakt, një ngacmues për çfarë shtrihet përpara 1118 00:50:06,110 --> 00:50:09,760 është kjo clip 20 dytë nga tonë Miku Nick Parlante në Stanford 1119 00:50:09,760 --> 00:50:12,927 i cili, mjaft disa kohë më parë, shpenzojnë një sasi qesharake të kohës, 1120 00:50:12,927 --> 00:50:15,010 si të mira unë mund të them në e tij kuzhinë ose bodrumin e tij, 1121 00:50:15,010 --> 00:50:17,140 duke e bërë claymation Futja në botë 1122 00:50:17,140 --> 00:50:20,010 një karakter të quajtur Binky me të cilët ne do të 1123 00:50:20,010 --> 00:50:22,010 të futet herën tjetër për pointers. 1124 00:50:22,010 --> 00:50:24,588 Kështu që këtu është një vrojtim të asaj që është për të ardhur. 1125 00:50:24,588 --> 00:50:26,370 >> [VIDEO rishikim] 1126 00:50:26,370 --> 00:50:27,510 >> Hej, Binky. 1127 00:50:27,510 --> 00:50:28,260 Zgjohu. 1128 00:50:28,260 --> 00:50:30,672 Është koha për argëtim akrep. 1129 00:50:30,672 --> 00:50:31,616 >> -Cfare eshte kjo? 1130 00:50:31,616 --> 00:50:33,032 Mësoni rreth pointers? 1131 00:50:33,032 --> 00:50:34,450 Oh, Goody. 1132 00:50:34,450 --> 00:50:35,431 >> [END rishikim] 1133 00:50:35,431 --> 00:50:38,055 DAVID J. Malan: Dhe në këtë shënim, ne do të shohim të mërkurën. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Në rregull. 1136 00:50:48,090 --> 00:50:48,740 Kush është vallëzimi? 1137 00:50:48,740 --> 00:50:49,240 Eja. 1138 00:50:49,240 --> 00:50:50,330 Kush është vallëzimi? 1139 00:50:50,330 --> 00:50:51,820 Ju doni mua për të marrë atë filluar? 1140 00:50:51,820 --> 00:50:53,770 Unë do të marrë atë filluar. 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: dashuroj Sweet Moisiu.