1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> DAVID J. Malan: Mae hwn yn CS50 ac mae hyn yn ddechrau wythnos pedwar. 3 00:00:14,050 --> 00:00:18,630 Ac, bachgen, mae Volkswagen yn trafferth i gyd oherwydd y meddalwedd. 4 00:00:18,630 --> 00:00:20,264 Gadewch i ni gymryd golwg. 5 00:00:20,264 --> 00:00:20,930 [VIDEO Playback] 6 00:00:20,930 --> 00:00:25,560 -Cars, Y cymeriadau smartest yn y ffilmiau Cyflym a Furious. 7 00:00:25,560 --> 00:00:29,100 Mae'r automaker Almaeneg wythnos Canfu Volkswagen ei hun 8 00:00:29,100 --> 00:00:32,490 yng nghanol sgandal o cyfrannau a allai fod yn droseddol. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Yn iachus ar gyfer biliynau mewn dirwyon, taliadau troseddol posibl 10 00:00:36,060 --> 00:00:38,560 ar gyfer ei swyddogion gweithredol, fel y mae'r cwmni yn ymddiheuro 11 00:00:38,560 --> 00:00:41,840 ar gyfer rigio 11 miliwn o geir i helpu i guro profion allyriadau. 12 00:00:41,840 --> 00:00:44,950 >> Modelau diesel -Certain oedd cynllunio gyda meddalwedd soffistigedig 13 00:00:44,950 --> 00:00:48,440 bod gwybodaeth a ddefnyddir gan gynnwys y lleoliad y llywio a cherbydau 14 00:00:48,440 --> 00:00:51,870 gyflymu'r i benderfynu ar y car oedd cael profion allyriadau. 15 00:00:51,870 --> 00:00:55,650 O dan yr amgylchiad, yr injan Byddai lleihau allyriadau gwenwynig. 16 00:00:55,650 --> 00:00:59,070 Ond y car yn rigged i ffordd osgoi pan oedd yn cael ei yrru. 17 00:00:59,070 --> 00:01:03,320 Allyriadau cynyddu 10-40 amseroedd uchod lefelau EPA derbyniol. 18 00:01:03,320 --> 00:01:04,280 >> [DIWEDD Playback] 19 00:01:04,280 --> 00:01:05,220 >> DAVID J. Malan: Felly gadewch i ni yn edrych ar hyn 20 00:01:05,220 --> 00:01:07,250 a gweld yn union sut mae hyn allai gael eu rhoi ar waith 21 00:01:07,250 --> 00:01:09,680 a sut y gallai hyn effeithio ar cymaint o geir fel hyn. 22 00:01:09,680 --> 00:01:12,840 Felly, yn fy llaw dyma y wasg rhyddhau a gyhoeddwyd gan y EPA-- 23 00:01:12,840 --> 00:01:14,620 yr Amgylchedd Asiantaeth Diogelu a oedd 24 00:01:14,620 --> 00:01:18,032 yw'r asiantaeth reoleiddio Unol Daleithiau sy'n ymdrin pryderon amgylcheddol, 25 00:01:18,032 --> 00:01:19,740 ac yna bydd y gwir hysbysiad cyfreithiol a oedd yn 26 00:01:19,740 --> 00:01:22,420 anfon at Volkswagen ychydig ddyddiau yn ôl. 27 00:01:22,420 --> 00:01:26,530 >> Felly yr EPA yn ysgrifennu, ac yn datgelu bellach yn gyhoeddus, mae meddalwedd soffistigedig 28 00:01:26,530 --> 00:01:29,390 algorithm ar rai Cerbydau Volkswagen detects 29 00:01:29,390 --> 00:01:32,630 pan fydd y car yn mynd profi allyriadau swyddogol 30 00:01:32,630 --> 00:01:36,505 ac yn troi gollyngiadau llawn rheolaethau ar unig yn ystod y prawf. 31 00:01:36,505 --> 00:01:38,380 Effeithiolrwydd cerbydau hyn llygredd 32 00:01:38,380 --> 00:01:43,260 dyfeisiau rheoli allyriadau yn fawr gostwng yn ystod yr holl gyrru arferol 33 00:01:43,260 --> 00:01:44,320 sefyllfaoedd. 34 00:01:44,320 --> 00:01:48,190 Mae hyn yn arwain mewn ceir sy'n bodloni safonau yn y labordy neu brofion 35 00:01:48,190 --> 00:01:52,790 orsaf, ond yn ystod gweithrediad arferol allyrru oxides-- nitrogen neu NOx-- 36 00:01:52,790 --> 00:01:54,950 ar hyd at 40 gwaith y safon. 37 00:01:54,950 --> 00:01:58,220 Mae'r meddalwedd a gynhyrchwyd gan Volkswagen yn ddyfais dyfyniad unquote, trechu, 38 00:01:58,220 --> 00:02:00,650 fel y diffinnir gan Glân Ddeddf Aer yn yr Unol Daleithiau. 39 00:02:00,650 --> 00:02:03,410 >> Maent yn mynd ymlaen i ddweud bod yr Atwrneiaeth Barhaus a asiantaeth arall 40 00:02:03,410 --> 00:02:07,020 heb ei orchuddio y ddyfais trechu meddalwedd ar ôl dadansoddiad annibynnol 41 00:02:07,020 --> 00:02:09,660 gan ymchwilwyr ym West Prifysgol Virginia. 42 00:02:09,660 --> 00:02:14,160 Llygredd NOx yn cyfrannu at nitrogen deuocsid, osôn ar lefel y ddaear, 43 00:02:14,160 --> 00:02:15,700 a mater gronynnol mân. 44 00:02:15,700 --> 00:02:18,090 Dod i gysylltiad â hyn llygryddion wedi cael ei gysylltu 45 00:02:18,090 --> 00:02:20,870 gydag ystod eang o effeithiau iechyd difrifol, 46 00:02:20,870 --> 00:02:23,637 gan gynnwys mwy o asthma ymosodiadau a anadlu eraill 47 00:02:23,637 --> 00:02:26,470 afiechydon a all fod yn ddigon difrifol i anfon pobl i'r ysbyty. 48 00:02:26,470 --> 00:02:28,660 Dod i gysylltiad â osôn a mater gronynnol hefyd 49 00:02:28,660 --> 00:02:31,960 bod yn gysylltiedig â cynamserol marwolaeth o ganlyniad i anadlu cysylltiedig 50 00:02:31,960 --> 00:02:35,690 neu gardiofasgwlaidd effeithiau cysylltiedig. 51 00:02:35,690 --> 00:02:38,940 Plant, yr henoed, pobl ag clefyd anadlol preexisting 52 00:02:38,940 --> 00:02:42,840 yn arbennig mewn perygl ar gyfer effeithiau iechyd llygryddion hyn. 53 00:02:42,840 --> 00:02:45,056 >> Digon yw dweud, 'i' eithaf difrifol. 54 00:02:45,056 --> 00:02:46,930 A gadewch i ni fynd ymlaen i ddarllen dim ond un dyfyniad mwy 55 00:02:46,930 --> 00:02:49,370 ac yna byddwn yn edrych ar y goblygiadau sylfaenol 56 00:02:49,370 --> 00:02:50,920 o hyn yng nghyd-destun car. 57 00:02:50,920 --> 00:02:53,730 Yn benodol, Volkswagen cynhyrchu a'u gosod 58 00:02:53,730 --> 00:02:56,210 meddalwedd yn yr hyn a elwir rheolaeth electronig 59 00:02:56,210 --> 00:02:59,320 module-- neu ECM-- o cerbydau hyn sy'n synhwyro 60 00:02:59,320 --> 00:03:03,580 pan fydd y cerbyd yn cael ei brofi am cydymffurfio â safonau allyriadau EPA. 61 00:03:03,580 --> 00:03:07,510 Yn seiliedig ar wahanol fewnbynnau gan gynnwys y lleoliad y llyw, cerbyd 62 00:03:07,510 --> 00:03:11,280 cyflymder, hyd y peiriant gweithredu, a gwasgedd barometrig, 63 00:03:11,280 --> 00:03:13,720 mewnbynnau hyn yn fanwl olrhain y paramedrau 64 00:03:13,720 --> 00:03:17,600 o'r weithdrefn prawf ffederal a ddefnyddir ar gyfer profi allyriadau ar gyfer ardystio EPA 65 00:03:17,600 --> 00:03:18,400 ddibenion. 66 00:03:18,400 --> 00:03:21,850 >> Yn ystod profion allyriadau EPA, meddalwedd cerbydau ECM 67 00:03:21,850 --> 00:03:25,060 Rhedodd meddalwedd sy'n cynhyrchu canlyniadau allyriadau cydymffurfio. 68 00:03:25,060 --> 00:03:28,340 Ar bob adeg arall, mae'r Meddalwedd ECM cerbyd 69 00:03:28,340 --> 00:03:31,090 Rhedodd ffordd ar wahân graddnodi oedd yn lleihau 70 00:03:31,090 --> 00:03:34,360 effeithiolrwydd y system rheoli allyriadau yn gyffredinol, 71 00:03:34,360 --> 00:03:37,864 yn benodol y catalytig detholus gostyngiad yn y NOx Lean trap-- 72 00:03:37,864 --> 00:03:39,280 sy'n byddwn yn gweld tua mewn munud. 73 00:03:39,280 --> 00:03:43,040 O ganlyniad, mae allyriadau NOx cynyddu ffactor o 10 hyd at 40 gwaith 74 00:03:43,040 --> 00:03:47,450 uwch na'r lefelau cydymffurfio EPA yn dibynnu ar y math o gylchred gyrru. 75 00:03:47,450 --> 00:03:50,800 >> Felly beth mae hyn yn ei olygu mewn gwirionedd, a'r cod ffynhonnell at redeg meddalwedd 76 00:03:50,800 --> 00:03:53,190 ar y Volkswagen i beidio ganddo ac eto ei ddatgelu yn gyhoeddus, 77 00:03:53,190 --> 00:03:56,460 yw bod, yn effeithiol, mae hyn yn cyfwerth yn rhywle yno y tu mewn 78 00:03:56,460 --> 00:03:57,830 o god Volkswagen. 79 00:03:57,830 --> 00:04:02,200 Os ydych yn cael eu profi, ac os bydd y car canfod ffactorau amgylcheddol penodol 80 00:04:02,200 --> 00:04:04,330 fel y llyw safle neu y mudiad 81 00:04:04,330 --> 00:04:06,710 neu brin o hynny y car neu unrhyw nifer o ffactorau eraill 82 00:04:06,710 --> 00:04:09,940 sy'n cael eu Tybiwyd ar hyn o bryd i fod yn rhan o'r fformiwla hwn, 83 00:04:09,940 --> 00:04:12,370 maent yn syml troi ar allyriadau llawn rheoli. 84 00:04:12,370 --> 00:04:15,670 Mewn geiriau eraill, maent yn dechrau allyrru llai o'r llygryddion. 85 00:04:15,670 --> 00:04:18,769 >> Else, ym mhob sefyllfa arall pan nad yw'n canfod fel rhai 86 00:04:18,769 --> 00:04:20,790 yn y labordy, eu bod nid yn unig yn ei wneud. 87 00:04:20,790 --> 00:04:24,320 Ac fel y gallwch symleiddio hyn i fwy pseudocode concrid gyda rhywbeth 88 00:04:24,320 --> 00:04:24,820 fel hyn. 89 00:04:24,820 --> 00:04:27,810 Os yr olwynion yn troi, ond mae'r Nid olwyn lywio yw, awgrymog 90 00:04:27,810 --> 00:04:30,060 bod y car ar rai math o gylchdroi silindr 91 00:04:30,060 --> 00:04:32,550 ond mewn rhyw fath o warws cael ei brofi, 92 00:04:32,550 --> 00:04:36,070 Yna, yn ymddwyn fel y Byddai EPA hoffi i chi. 93 00:04:36,070 --> 00:04:37,960 Fel arall, ni ei wneud. 94 00:04:37,960 --> 00:04:40,420 Felly, gadewch i ni edrych ar fideo byr sy'n 95 00:04:40,420 --> 00:04:45,391 yn edrych ar yr hyn y goblygiadau yn o hyn mewn gwirionedd yn fecanyddol. 96 00:04:45,391 --> 00:04:48,620 >> [VIDEO Playback] 97 00:04:48,620 --> 00:04:52,800 >> -Last Dydd Gwener cyhoeddodd y EPA fod rhai Ceir Volkswagen Audi a wnaed rhwng 2009 98 00:04:52,800 --> 00:04:55,840 ac eleni yn defnyddio dyfais drechu hyn a elwir yn 99 00:04:55,840 --> 00:04:59,060 i fynd o amgylch deddfau allyriadau cynllunio i gadw'r aer glân. 100 00:04:59,060 --> 00:05:01,700 Ond beth mae hynny'n ei olygu yn union? 101 00:05:01,700 --> 00:05:04,666 >> Wel, ceir modern wedi dwsinau o gyfrifiaduron y tu mewn iddynt. 102 00:05:04,666 --> 00:05:07,040 Ac mae rhai o gyfrifiaduron rhai helpu i gydlynu swyddogaethau 103 00:05:07,040 --> 00:05:09,590 o'r peiriant ar gyfer optimwm perfformiad tra'n sicrhau 104 00:05:09,590 --> 00:05:12,340 nad oes gormod o garbage dod allan o'r bibell gwacáu. 105 00:05:12,340 --> 00:05:15,170 Maen nhw wedi bod yn gweithio mewn gwirionedd y ffordd hon am sawl degawd bellach. 106 00:05:15,170 --> 00:05:17,380 Yn y bôn, mae pob rhan o injan car modern 107 00:05:17,380 --> 00:05:20,080 Mae gan synhwyrydd neu reolwr arno, a chyfrifiaduron hyn 108 00:05:20,080 --> 00:05:23,460 yn darllen yn y data miloedd o gwaith yr addasiadau eiliad gwneud 109 00:05:23,460 --> 00:05:26,220 fel y gymhareb o danwydd i'r aer sy'n mynd i mewn i'r silindrau. 110 00:05:26,220 --> 00:05:28,730 >> Mae'r rhain yn Volkswagen twyllo a modelau Audi yn disel, 111 00:05:28,730 --> 00:05:30,890 a disel wedi un yn fwy cyfrifiadur yn bwysig iawn 112 00:05:30,890 --> 00:05:34,030 paramedrau a reolir, sydd yn faint o danwydd heb ei losgi yn mynd 113 00:05:34,030 --> 00:05:35,200 i mewn i'r nwyon llosg. 114 00:05:35,200 --> 00:05:36,310 Nawr bod swnio'n ddrwg. 115 00:05:36,310 --> 00:05:39,642 Nid yw'n swnio fel fyddech am tanwydd heb ei losgi yn mynd i mewn i'r nwyon llosg. 116 00:05:39,642 --> 00:05:41,600 Ond yn yr achos diesel, mae gennych rywbeth 117 00:05:41,600 --> 00:05:46,110 Gelwir trap NOx sy'n yn ddyfais sy'n amsugno a thrapiau ar gyfer ocsidau nitrogen 118 00:05:46,110 --> 00:05:48,880 sy'n llygryddion a fyddai fel arall yn mynd i mewn i'r atmosffer. 119 00:05:48,880 --> 00:05:53,040 Ac effaith y trap NOx cael ei wella gyda thanwydd unburned. 120 00:05:53,040 --> 00:05:56,650 Felly dyfais drechu yn rhaglen arbennig y tu mewn cyfrifiaduron hyn all ei gwneud yn 121 00:05:56,650 --> 00:05:59,527 edrych fel y car yn cwrdd allyriad safonau hyd yn oed pan nad yw'n gwneud hynny. 122 00:05:59,527 --> 00:06:01,110 Roedd gan Volkswagen broblem ar ei ddwylo. 123 00:06:01,110 --> 00:06:04,050 Mae ei beiriannau diesel yn hysbys ar gyfer cael economi tanwydd mawr, 124 00:06:04,050 --> 00:06:07,510 ond mae'r fagl NOx ond yn gweithio'n dda pan fydd mwy o danwydd yn cael ei ddefnyddio. 125 00:06:07,510 --> 00:06:10,460 Felly byddai'r car canfod, yn arfer hon dyfais trechu, 126 00:06:10,460 --> 00:06:13,870 pan gafodd ei cael allyriadau prawf, y byddai'n defnyddio mwy o danwydd, 127 00:06:13,870 --> 00:06:16,830 yn gwneud y gwaith trap NOx yn dda, Byddai gollyngiadau yn iawn. 128 00:06:16,830 --> 00:06:21,130 Ond yna byddwch yn cael ar y ffordd, y ddyfais yn troi i ffwrdd, rydych yn llosgi llai o danwydd 129 00:06:21,130 --> 00:06:24,256 ond eich bod yn rhoi cymaint â 40 gwaith fwy o lygryddion i'r atmosffer. 130 00:06:24,256 --> 00:06:26,130 Ond sut y gwnaeth y Heck y car yn gwybod ei bod yn 131 00:06:26,130 --> 00:06:27,720 cael eu profi ar gyfer cydymffurfio allyriadau? 132 00:06:27,720 --> 00:06:30,590 Dywed yr EPA ei fod yn soffistigedig system sy'n gwirio pethau 133 00:06:30,590 --> 00:06:34,090 fel sefyllfa olwyn lywio, cyflymder, pa mor hir oedd y peiriant ymlaen, 134 00:06:34,090 --> 00:06:35,507 a hyd yn oed y gwasgedd atmosfferig. 135 00:06:35,507 --> 00:06:37,673 Mewn geiriau eraill, roedd unrhyw ffordd roedd hyn yn ddamweiniol 136 00:06:37,673 --> 00:06:40,260 oherwydd bod y feddalwedd yn a gynlluniwyd yn ofalus iawn i ganfod 137 00:06:40,260 --> 00:06:41,630 prawf allyriadau swyddogol. 138 00:06:41,630 --> 00:06:43,588 Dyna rai eithaf difrifol twyll a dyna 139 00:06:43,588 --> 00:06:45,420 pam Volkswagen yn trafferth mor ddifrifol. 140 00:06:45,420 --> 00:06:48,600 Yn wir, mae eu Prif Swyddog Gweithredol, Martin Winterkorn, dim ond camu i lawr. 141 00:06:48,600 --> 00:06:49,820 >> Felly beth sy'n digwydd nesaf? 142 00:06:49,820 --> 00:06:53,900 Wel, os ydych chi'n un o'r hanner miliwn Jettas diesel, Beatles, golfs, Passats, 143 00:06:53,900 --> 00:06:56,220 neu Audi A3s effeithio, y newyddion da yn cael ei 144 00:06:56,220 --> 00:06:57,886 fod eich car yn dal i fod yn ddiogel i yrru. 145 00:06:57,886 --> 00:07:00,510 Nid oes rhaid i chi ei roi i ffwrdd hyd nes y Volkswagen yn cyhoeddi adalw. 146 00:07:00,510 --> 00:07:02,509 Ond ar ryw adeg eu bod yn yn ôl pob tebyg yn mynd i gael 147 00:07:02,509 --> 00:07:04,230 i ddiweddaru'r meddalwedd y tu mewn i'ch car. 148 00:07:04,230 --> 00:07:06,927 Pan fydd hynny'n digwydd i chi efallai cael llai o filltiroedd y tanc. 149 00:07:06,927 --> 00:07:09,260 Cyfreithwyr eisoes yn paratoi ar gyfer chyngawsion gweithredu dosbarth 150 00:07:09,260 --> 00:07:12,500 felly efallai y perchnogion yn cael iawndal ar ryw adeg yn y dyfodol. 151 00:07:12,500 --> 00:07:15,832 Ond nid yw mynd i yn digwydd yn y dyfodol agos. 152 00:07:15,832 --> 00:07:16,711 >> [DIWEDD Playback] 153 00:07:16,711 --> 00:07:19,960 DAVID J. Malan: Felly mae hyn mewn gwirionedd yn codi cwestiwn darlun mwy diddorol 154 00:07:19,960 --> 00:07:20,660 ag i ymddiried ynddo. 155 00:07:20,660 --> 00:07:21,160 Iawn? 156 00:07:21,160 --> 00:07:24,300 Mae pob un ohonom wedi iPhones neu Androids neu rhywbeth yn ein pocedi fwyaf tebygol 157 00:07:24,300 --> 00:07:26,500 y dyddiau hyn, neu gliniaduron ar ein lap sydd yn 158 00:07:26,500 --> 00:07:28,510 Meddalwedd sy'n rhedeg ei wneud gan Apple a Microsoft 159 00:07:28,510 --> 00:07:30,710 a sypiau o gwmnïau eraill. 160 00:07:30,710 --> 00:07:34,240 Ond sut ydyn ni'n gwybod bod yr hyn cynnyrch meddalwedd rhain yn ei wneud 161 00:07:34,240 --> 00:07:37,680 yw'r hyn mae'r rhain mewn gwirionedd cwmnïau yn dweud eu bod yn ei wneud? 162 00:07:37,680 --> 00:07:39,610 >> Er enghraifft, pwy sydd i yn dweud bod bob tro y byddwch yn 163 00:07:39,610 --> 00:07:42,200 gwneud galwad ffôn ar eich iPhone neu Android ffôn neu debyg, 164 00:07:42,200 --> 00:07:45,650 bod y rhif ffôn nad hefyd yn yn cael eu llwytho i fyny i weinydd rhywfaint cwmni 165 00:07:45,650 --> 00:07:48,399 oherwydd rhai rhaglen eich bod wedi ysgrifenedig, boed yn y gweithredu 166 00:07:48,399 --> 00:07:51,070 system ei hun fel iOS neu Android, neu am eich bod wedi llwytho i lawr 167 00:07:51,070 --> 00:07:53,880 rhai trydydd parti app hynny rywsut yn gwrando 168 00:07:53,880 --> 00:07:57,120 i bopeth yr ydych yn teipio i mewn neu popeth rydych yn ei ddweud mewn gwirionedd. 169 00:07:57,120 --> 00:07:59,500 Sut ydych chi'n gwybod bod, pan fydd rydych guys yn rhedeg chlang 170 00:07:59,500 --> 00:08:02,590 neu Gwneud i lunio eich meddalwedd eu hunain yn CS50, sut 171 00:08:02,590 --> 00:08:06,080 a ydych staff hynny CS50 ei hun, drwy gyfrwng y llyfrgell CS50, 172 00:08:06,080 --> 00:08:08,690 Nid yw wedi bod yn logio pob llinyn yr ydych wedi gotten erioed 173 00:08:08,690 --> 00:08:10,276 neu bob modfedd eich bod wedi gotten erioed? 174 00:08:10,276 --> 00:08:12,900 Wel, fe allech chi yn sicr yn edrych yn y cod ffynhonnell ar gyfer rhywbeth 175 00:08:12,900 --> 00:08:15,233 fel y llyfrgell CS50, byddwch yn Gallai edrych ar y cod ffynhonnell 176 00:08:15,233 --> 00:08:18,170 ar gyfer system weithredu Linux rhedeg ar IDE CS50. 177 00:08:18,170 --> 00:08:23,090 Ond cyflwyniad anhygoel Rhoddwyd nôl yn 1984 178 00:08:23,090 --> 00:08:26,730 sy'n derbyn y Wobr Turing gan gwyddonydd cyfrifiadurol enwog iawn hysbys 179 00:08:26,730 --> 00:08:29,750 as-- enw Ken Thompson sy'n Derbyniodd y Wobr Turing a oedd 180 00:08:29,750 --> 00:08:33,500 yn fath o gyfrifiadur gwyddoniaeth yn Gwobr Nobel, os gwnewch, 181 00:08:33,500 --> 00:08:35,309 am ei waith ar system weithredu o'r enw 182 00:08:35,309 --> 00:08:39,039 Unix, sy'n debyg iawn o ran ysbryd i'r hyn rydym yn ei ddefnyddio sydd yn Linux. 183 00:08:39,039 --> 00:08:41,960 A'r cwestiwn gofynnodd yn ei araith dderbyn, yn y bôn 184 00:08:41,960 --> 00:08:44,910 sy'n gosod y fframwaith ar gyfer blynyddoedd a blynyddoedd o drafod 185 00:08:44,910 --> 00:08:46,970 am ymddiriedaeth a diogelwch, roedd hyn. 186 00:08:46,970 --> 00:08:50,410 I ba raddau y dylai un ymddiriedolaeth a datganiad bod program-- darn 187 00:08:50,410 --> 00:08:53,010 o software-- yn rhad ac am ceffylau Trojan? 188 00:08:53,010 --> 00:08:56,500 Efallai ei bod yn bwysicach i ymddiried y bobl a ysgrifennodd y feddalwedd. 189 00:08:56,500 --> 00:08:58,650 >> Ac yn wir, rydym wedi cysylltu i'r sgwrs ei fod ef 190 00:08:58,650 --> 00:09:02,400 Rhoddodd wrth dderbyn y wobr hon yn y '80au ar wefan CS50 yn 191 00:09:02,400 --> 00:09:04,030 o dan y dudalen Darlithoedd ar gyfer heddiw. 192 00:09:04,030 --> 00:09:06,071 Oherwydd yr hyn y byddwch yn gweld yw ei fod mewn gwirionedd yn rhoi 193 00:09:06,071 --> 00:09:09,430 enghraifft gweddol syml o sut hyd yn oed casglwr fel chlang neu beth bynnag 194 00:09:09,430 --> 00:09:13,950 crynoadyddion mae eraill wedi'u defnyddio yn y gorffennol, beth os wreiddio yn y compiler ydym 195 00:09:13,950 --> 00:09:18,190 ni ein hunain yn defnyddio ychydig os cyflwr sy'n dweud ei hanfod, 196 00:09:18,190 --> 00:09:22,360 os byddwch yn sylwi bod y cod hwn yn defnyddio y swyddogaeth GetString neu'r GetInt 197 00:09:22,360 --> 00:09:26,600 swyddogaeth, mynd yn ei flaen a rhowch yn ei le drws cefn neu geffyl Trojan 198 00:09:26,600 --> 00:09:29,340 fel bod y rhaglen Erbyn hyn, mae rhai seroau 199 00:09:29,340 --> 00:09:30,930 a rhai sy'n gwneud rhywbeth maleisus. 200 00:09:30,930 --> 00:09:33,080 Logio eich holl keystrokes, llwytho i fyny data hwnnw 201 00:09:33,080 --> 00:09:35,100 i ryw gweinydd, neu yn wir unrhyw beth. 202 00:09:35,100 --> 00:09:37,290 >> A beth Ken Thompson yn mynd ymlaen i wneud yn ei sgwrs 203 00:09:37,290 --> 00:09:40,580 yw dangos hyd yn oed os oes gennych fynediad i'r ffynhonnell 204 00:09:40,580 --> 00:09:43,794 cod casglwr sy'n faleisus allai fod yn gwneud hyn, 205 00:09:43,794 --> 00:09:46,210 nid oes gwahaniaeth, oherwydd mae cyw iâr hwn a'r wy 206 00:09:46,210 --> 00:09:49,500 realiti y mae llawer yn y gorffennol flynyddoedd lle crynoadyddion 207 00:09:49,500 --> 00:09:51,960 cael eu defnyddio i lunio eu hunain. 208 00:09:51,960 --> 00:09:55,440 Mewn geiriau eraill, ffordd yn ôl pan fydd rhywun Roedd i wedi ysgrifennu y compiler cyntaf. 209 00:09:55,440 --> 00:09:59,060 Ac wedi hynny, unrhyw adeg y maent wedi eu diweddaru casglwr drwy newid ei cod ffynhonnell, 210 00:09:59,060 --> 00:10:02,020 ychwanegu nodweddion a recompiling ei i bobl fel ni ddefnyddio, yn dda, 211 00:10:02,020 --> 00:10:04,270 maent yn eu defnyddio hen fersiwn o'r compiler 212 00:10:04,270 --> 00:10:06,370 i lunio'r newydd fersiwn o'r compiler. 213 00:10:06,370 --> 00:10:08,370 Ac os ydych yn cymryd golwg yn y sgwrs a roddodd, 214 00:10:08,370 --> 00:10:10,970 byddwch yn gweld hynny oherwydd o hynny cylchogrwydd, 215 00:10:10,970 --> 00:10:14,330 gallwch chi mewn gwirionedd yn cael bugs neu Ceffylau Caerdroia gwreiddio mewn meddalwedd 216 00:10:14,330 --> 00:10:14,990 rydym yn ei ddefnyddio. 217 00:10:14,990 --> 00:10:18,010 A hyd yn oed os ydych yn edrych ar y cod ffynhonnell ar gyfer y rhaglenni hynny, 218 00:10:18,010 --> 00:10:21,550 efallai na hyd yn oed fod yn amlwg oherwydd bod y twyll mewn gwirionedd 219 00:10:21,550 --> 00:10:24,710 mewn rhyw fersiwn hŷn o compiler sydd byth ers hynny wedi bod yn 220 00:10:24,710 --> 00:10:27,340 chwistrellu y bygythiad i mewn i'n meddalwedd. 221 00:10:27,340 --> 00:10:29,740 >> Sydd ond yn dweud, rydym yn Ni all 'n sylweddol, ac ni ddylai 222 00:10:29,740 --> 00:10:32,939 meddalwedd ymddiriedolaeth yn rhedeg ar ein gliniaduron neu ffonau neu unrhyw nifer o leoedd. 223 00:10:32,939 --> 00:10:36,230 Ac yn wir, yn nes ymlaen yn y semester hwn pan rydym yn dechrau siarad am rhaglennu ar y we 224 00:10:36,230 --> 00:10:38,521 ac mewn gwirionedd ddechrau adeiladu ceisiadau ar y we i ni ein hunain, 225 00:10:38,521 --> 00:10:40,285 byddwn yn siarad am y rhain bygythiadau ac eraill. 226 00:10:40,285 --> 00:10:43,410 Yn awr, efallai y byddwch wedi meddwl tybed a sylwi bod Darth bach bach 227 00:10:43,410 --> 00:10:45,842 Vader yn y clipiau sy'n Mae'r Ymyl yn dangos yno 228 00:10:45,842 --> 00:10:47,550 am Volkswagen. Os nad ydych erioed wedi ei weld, yr wyf yn 229 00:10:47,550 --> 00:10:49,190 meddwl y dylem ysgafnhau y naws gan fod hyn i gyd 230 00:10:49,190 --> 00:10:50,780 ddigalon iawn ac yn frawychus. 231 00:10:50,780 --> 00:10:52,910 Rydw i'n mynd i edrych yn ôl yn Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 pan fydd masnachol gan Volkswagen-- ac mae hyn 233 00:10:55,300 --> 00:10:59,620 bron yn eu gwneud yn likable again-- ddarlledwyd am y tro cyntaf ar y teledu. 234 00:10:59,620 --> 00:11:04,039 Mae'n y 60 eiliad clip fy mod yn credu y byddwch yn ei fwynhau. 235 00:11:04,039 --> 00:11:04,705 [VIDEO Playback] 236 00:11:04,705 --> 00:11:08,198 [CERDDORIAETH - THEMA O "WARS STAR"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [Ci'n cyfarth] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [CAR YN CYCHWYN] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [DIWEDD Playback] 243 00:12:05,955 --> 00:12:06,830 DAVID J. Malan: Yeah. 244 00:12:06,830 --> 00:12:07,663 Nid oeddwn ond yn gwirio. 245 00:12:07,663 --> 00:12:11,360 Y car hwnnw ar y rhestr o droseddau. 246 00:12:11,360 --> 00:12:12,000 Iawn. 247 00:12:12,000 --> 00:12:14,040 Felly, rydym yn edrych ar rai pseudocode funud yn ôl. 248 00:12:14,040 --> 00:12:15,380 A dyma 'na fwy snippet cod pseudocode 249 00:12:15,380 --> 00:12:16,921 ein bod wedi gweld ychydig o weithiau hyd yn hyn. 250 00:12:16,921 --> 00:12:19,970 A gadewch i ni ddefnyddio hyn yn gyfle yn awr i gyflwyno rhaglennu newydd 251 00:12:19,970 --> 00:12:23,776 techneg a wnaethom gweld algorithmically 252 00:12:23,776 --> 00:12:25,400 yr wythnos diwethaf pan edrychasom ar fath uno. 253 00:12:25,400 --> 00:12:28,270 Ond gadewch i ni ffurfioli ei a gweld sut efallai y byddwn yn ei ddefnyddio mewn cod gwirioneddol, 254 00:12:28,270 --> 00:12:30,350 ac yna rydym yn mynd i ddefnyddio hwn techneg i lawr y ffordd fwyaf 255 00:12:30,350 --> 00:12:32,000 debygol o ddatrys problemau penodol eraill. 256 00:12:32,000 --> 00:12:35,790 >> Felly, mae hyn yn un o'r rhaglenni cyntaf i ni erioed ysgrifennodd, er mewn cod pseudocode. 257 00:12:35,790 --> 00:12:37,790 A beth y rhaglen hon ganiateir i ni wneud cwrs 258 00:12:37,790 --> 00:12:41,510 oedd dod o hyd Mike Smith mewn llyfr ffôn. 259 00:12:41,510 --> 00:12:46,216 Ac yn sylwi mewn llinellau penodol wyth a 11 a oedd y datganiad hwn Go I. 260 00:12:46,216 --> 00:12:48,090 Ac yn wir, mae rhai ieithoedd, C yn eu plith, 261 00:12:48,090 --> 00:12:50,006 ei wneud mewn gwirionedd yn cael datganiad bod yn llythrennol 262 00:12:50,006 --> 00:12:52,710 ewch i sy'n eich galluogi i neidio i'r llinell benodol. 263 00:12:52,710 --> 00:12:55,470 Mae wedi gwgu arno oherwydd gellir ei gam-drin yn hawdd iawn 264 00:12:55,470 --> 00:12:58,490 a gallwch ddechrau neidio ar eich rhaglen dros y lle yn hytrach na 265 00:12:58,490 --> 00:13:00,690 i ddefnyddio'r math o rhesymeg a llif rheoli 266 00:13:00,690 --> 00:13:04,000 ein bod wedi defnyddio hyd yn hyn gyda dim ond dolenni a'r amodau ac yn y blaen. 267 00:13:04,000 --> 00:13:08,660 >> Ond gallwn symleiddio'r algorithm hwn yn y cod pseudocode fel a ganlyn. 268 00:13:08,660 --> 00:13:11,250 Yn hytrach na hyn ailadroddol neu ddull looping 269 00:13:11,250 --> 00:13:14,160 lle rydym yn cadw mynd yn ôl ac yn ôl ac yn ôl i linell tri, 270 00:13:14,160 --> 00:13:18,300 pam nad ydym yn unig fath o punt a mwy Yn gyffredinol, yn dweud yn unol saith a 10, 271 00:13:18,300 --> 00:13:20,570 dim ond yn cymryd lle dau rheiny parau o linellau gyda, 272 00:13:20,570 --> 00:13:22,810 arall os Smith yn gynharach yn y llyfr yr ydym chi helpu 273 00:13:22,810 --> 00:13:25,110 chwilio am Mike yn y chwith hanner y llyfr. 274 00:13:25,110 --> 00:13:28,560 Arall os Smith yn ddiweddarach yn y lyfr, chwiliwch am Mike yn yr hawl 275 00:13:28,560 --> 00:13:29,540 hanner y llyfr. 276 00:13:29,540 --> 00:13:31,180 Ac yn sylwi eisoes y cylchogrwydd. 277 00:13:31,180 --> 00:13:31,680 Iawn? 278 00:13:31,680 --> 00:13:34,250 Im 'yn chwilio am Mike yn y llyfr ffôn ac yna 279 00:13:34,250 --> 00:13:37,090 Yn y pen draw taro efallai llinell saith neu efallai llinell 10 280 00:13:37,090 --> 00:13:41,089 ac mae fy cyfarwyddyd i mi fy hun yn chwilio i Mike yn hanner y llyfr ffôn. 281 00:13:41,089 --> 00:13:42,380 Wel, sut mae chwilio am Mike? 282 00:13:42,380 --> 00:13:44,213 Rwyf yn y canol chwilio am Mike, pam 283 00:13:44,213 --> 00:13:45,860 a ydych yn fath o anfon i mi mewn cylch? 284 00:13:45,860 --> 00:13:49,590 Ond mae hynny'n iawn oherwydd mae'r hyn sy'n digwydd i faint y broblem, 285 00:13:49,590 --> 00:13:52,630 fel yr ysgrifennwyd yn unol 7 ac 10? 286 00:13:52,630 --> 00:13:54,989 Nid ydym yn jyst yn deud chwilio i Mike, chwiliwch am Mike. 287 00:13:54,989 --> 00:13:56,280 Ni ddim yn dweud yn benodol beth? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Chwilio am iddo ef yn ystod hanner chwith yr hanner cywir sydd i bob pwrpas 290 00:14:01,610 --> 00:14:03,440 hanner maint y broblem. 291 00:14:03,440 --> 00:14:07,170 Felly mae'n iawn ein bod yn fath o cymryd rhan mewn cylchogrwydd hwn, 292 00:14:07,170 --> 00:14:09,180 ddadl y cylchlythyr hwn, oherwydd o leiaf rydym yn 293 00:14:09,180 --> 00:14:11,090 gan wneud y broblem yn llai ac yn llai. 294 00:14:11,090 --> 00:14:14,220 Ac yn y diwedd rydyn ni'n mynd i gyrraedd bod achos sylfaenol hyn a elwir yn lle 295 00:14:14,220 --> 00:14:16,780 rydym wedi dim ond un dudalen left-- fel ein gwirfoddolwr yr wythnos ddiwethaf 296 00:14:16,780 --> 00:14:18,684 did-- roedd gennym un dudalen i'r chwith ac yna nid ydym yn ei wneud 297 00:14:18,684 --> 00:14:21,600 rhaid cadw chwilio am Mike Smith oherwydd ei fod yn naill ai ar y dudalen 298 00:14:21,600 --> 00:14:23,080 neu os nad yw'n. 299 00:14:23,080 --> 00:14:27,480 >> Felly, sut y gallwn weithredu y syniad hwn, mae hyn yn fath o cylchogrwydd mewn cod gwirioneddol? 300 00:14:27,480 --> 00:14:31,030 Wel, gallwn trosoledd techneg sy'n ei adnabod yn gyffredinol fel dychweliad. 301 00:14:31,030 --> 00:14:33,960 Ac rydym wedi gweld hyn yn y pseudocode ar gyfer math uno yr wythnos diwethaf. 302 00:14:33,960 --> 00:14:37,190 Dwyn i gof bod hwn oedd y pseudocode ar gyfer math uno. 303 00:14:37,190 --> 00:14:40,560 Mae'n dadlau hyd yn oed yn symlach na swigod neu dethol neu fewnosod fath 304 00:14:40,560 --> 00:14:43,310 unig o ran symlrwydd gallwch fynegi ei ag ef. 305 00:14:43,310 --> 00:14:46,750 >> Ond mae hynny oherwydd rydym yn fath o circularly 306 00:14:46,750 --> 00:14:51,350 gan ddywedyd, chwilio am rywbeth trwy chwilio amdano eto. 307 00:14:51,350 --> 00:14:53,960 Ond rydym yn chwilio naill ai ar yr hanner chwith neu hanner cywir 308 00:14:53,960 --> 00:14:56,070 ac yna yn y pen draw rydym yn uno yn yr achos hwn. 309 00:14:56,070 --> 00:14:58,520 Ond yma, hefyd, gyda y rhai ddwy linell yn didoli, 310 00:14:58,520 --> 00:15:01,320 wnaethom ni eto yn cael y syniad o dychweliad. 311 00:15:01,320 --> 00:15:05,350 Ac diriaethol beth mae hyn yn ei olygu, yng nghyd-destun algorithm, 312 00:15:05,350 --> 00:15:10,880 yw bod algorithm dychweliadol yn os yw'n defnyddio neu'n galw ei hun. 313 00:15:10,880 --> 00:15:14,330 >> Neu yn nhermau C, swyddogaeth yw recursive-- swyddogaeth o'r enw 314 00:15:14,330 --> 00:15:18,510 foo yn recursive os foo, rhywle yn ei cod ffynhonnell, 315 00:15:18,510 --> 00:15:21,250 galwadau y foo swyddogaeth ei hun. 316 00:15:21,250 --> 00:15:25,790 A dyna ddrwg os yw pob foo byth yn ei wneud yn galw ei hun dro ar ôl tro. 317 00:15:25,790 --> 00:15:30,600 Mae'n iawn os foo yn y pen draw yn dod i ben, fel y mae uno didoli, drwy ddweud, arhoswch funud, 318 00:15:30,600 --> 00:15:32,980 os yw hyn broblem yn super bach, er enghraifft, 319 00:15:32,980 --> 00:15:35,840 neu yr wyf yn dod o hyd iddo pwy rwy'n chwilio am, dim ond yn dychwelyd. 320 00:15:35,840 --> 00:15:41,000 Peidiwch â recursively, peidiwch gylchol galw fy hun eto. 321 00:15:41,000 --> 00:15:44,200 >> Ac felly gadewch i ni edrych ar sut y gallai hyn weithio mewn gwirionedd. 322 00:15:44,200 --> 00:15:48,430 Felly, yr wyf i'n mynd i fynd yn ei flaen ac yn agored i fyny dwy enghraifft cod ffynhonnell yma. 323 00:15:48,430 --> 00:15:50,321 Cael ei alw'n un o'r rhain sigma 0. 324 00:15:50,321 --> 00:15:52,320 Ac nid yw hyn yn gwbl recursive, ond gadewch i ni gymryd 325 00:15:52,320 --> 00:15:53,694 a edrych ar yr hyn y rhaglen hon yn ei wneud. 326 00:15:53,694 --> 00:15:55,737 Rwyf wedi tynnu allan yr holl sylwadau ohono ond mae pob 327 00:15:55,737 --> 00:15:58,070 y cod ffynhonnell ar CS50 yn Mae gan y wefan sylwadau os ydych yn 328 00:15:58,070 --> 00:15:59,570 eisiau darllen drwyddo eto yn nes ymlaen. 329 00:15:59,570 --> 00:16:02,010 A gadewch i ni wneud un neu ddau o bwyll yn gwirio yma. 330 00:16:02,010 --> 00:16:06,640 >> Felly, ar frig y cod hwn, rydym wedi cynnwys CS50.h. 331 00:16:06,640 --> 00:16:07,650 Beth mae hyn yn ei wneud? 332 00:16:07,650 --> 00:16:08,990 Pam ei fod yn fan hyn? 333 00:16:08,990 --> 00:16:11,740 Yn nhermau lleygwr rhesymol i. 334 00:16:11,740 --> 00:16:12,424 Beth mae'n ei wneud? 335 00:16:12,424 --> 00:16:12,858 Yeah. 336 00:16:12,858 --> 00:16:14,160 >> GYNULLEIDFA: Felly swyddogaeth honno GetInt yn gweithio. 337 00:16:14,160 --> 00:16:16,243 >> DAVID J. Malan: Felly y y swyddogaeth GetInt yn gweithio. 338 00:16:16,243 --> 00:16:18,115 Oherwydd tu mewn hon ffeiliau, CS50.h, a oedd yn 339 00:16:18,115 --> 00:16:20,950 byddwn yn gweld cyn bo hir mewn ran ei cod ffynhonnell, 340 00:16:20,950 --> 00:16:23,270 Mae criw o swyddogaethau declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 a bagad o others-- ac oni bai gennym mewn gwirionedd fod Cynnwys llinell, 342 00:16:26,950 --> 00:16:29,320 nid yw'r chlang compiler yn mynd i wybod ei fod yn bodoli. 343 00:16:29,320 --> 00:16:32,400 Ac un peth yn wir ar gyfer llinell dau lle int ei ddiffinio 344 00:16:32,400 --> 00:16:35,101 printf, sydd yn swyddogaeth byddwn yn cadw defnyddio gryn dipyn. 345 00:16:35,101 --> 00:16:37,850 Yn awr, llinell pedwar ymddangos ychydig yn ffynci oherwydd mai dim ond un leinin. 346 00:16:37,850 --> 00:16:41,570 Mae'n cael hanner colon, dim cyrliog bresys, dim cod tu mewn iddo. 347 00:16:41,570 --> 00:16:44,640 Ond yr hyn a wnaethom yn galw y peth hyn yn yr wythnosau diwethaf? 348 00:16:44,640 --> 00:16:45,140 Yeah. 349 00:16:45,140 --> 00:16:46,060 Felly prototeip. 350 00:16:46,060 --> 00:16:48,390 A pham mae gennym prototeip sy'n ymddangos 351 00:16:48,390 --> 00:16:51,050 i fod ychydig yn ddiangen fel arfer oherwydd ein bod fel arfer 352 00:16:51,050 --> 00:16:53,474 gweld y swyddogaeth eto yn nes ymlaen yn y ffeil, dde? 353 00:16:53,474 --> 00:16:56,390 Felly pam yr ydym yn have-- rydych yn unig crafu eich pen, ond byddaf yn cymryd ei. 354 00:16:56,390 --> 00:16:57,302 Yeah. 355 00:16:57,302 --> 00:17:00,000 >> GYNULLEIDFA: [Anghlywadwy] swyddogaeth ar ôl y prif. 356 00:17:00,000 --> 00:17:01,000 DAVID J. Malan: Yn union. 357 00:17:01,000 --> 00:17:04,089 Fel bod y compiler gwybod i chi yn y pen draw yn diffinio neu'n gweithredu 358 00:17:04,089 --> 00:17:06,579 swyddogaeth honno ar ôl prif, yn ôl pob tebyg. 359 00:17:06,579 --> 00:17:08,462 Felly chlang ac mae'r rhan fwyaf crynoadyddion yn fath o fud 360 00:17:08,462 --> 00:17:10,510 a byddant yn unig yn gwybod yr hyn yr ydych yn dweud wrthynt. 361 00:17:10,510 --> 00:17:12,569 Ac os ydych am ddefnyddio swyddogaeth o'r enw sigma, 362 00:17:12,569 --> 00:17:15,710 yn eich dysgu y casglwr yn well ei bod yn bodoli o flaen llaw. 363 00:17:15,710 --> 00:17:17,970 >> Yn awr, prif hun, hyd yn oed er 'i' criw o linellau, 364 00:17:17,970 --> 00:17:19,839 yn eithaf cyfarwydd, gobeithio erbyn hyn. 365 00:17:19,839 --> 00:17:21,942 Mae'n got a do tra dolen y mae ei bwrpas mewn bywyd 366 00:17:21,942 --> 00:17:24,400 yma mae'n debyg yw i gael cyfanrif positif oddi wrth y defnyddiwr. 367 00:17:24,400 --> 00:17:27,349 A dim ond cadw aflonyddu arno neu hi nes eu bod yn cydweithredu. 368 00:17:27,349 --> 00:17:30,670 Yna, yn unol 16 Mae gen i alwad diddorol. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Pa ar y llaw chwith ochr yn rhoi i mi yn Int 371 00:17:33,710 --> 00:17:36,650 sy'n gallu store-- elwir Answer-- sydd yn mynd i storio, mae'n debyg, 372 00:17:36,650 --> 00:17:39,090 mae'r gwerth dychwelyd sigma. 373 00:17:39,090 --> 00:17:41,840 Felly sigma yn unig yw enw mympwyol ond ystyrlon 374 00:17:41,840 --> 00:17:44,500 fy mod i wedi rhoi i swyddogaeth y mae ei bwrpas mewn bywyd 375 00:17:44,500 --> 00:17:47,680 yw cymryd un argument-- byddwn yn galw ei achos-- N yn hwn 376 00:17:47,680 --> 00:17:52,280 a dim ond i gymryd y swm o y rhif hwnnw ynghyd pob rhif positif sy'n 377 00:17:52,280 --> 00:17:53,200 llai nag y mae'n. 378 00:17:53,200 --> 00:17:58,140 >> Felly os wyf yn pasio yn y nifer 2 i sigma, yr wyf am ychwanegu 2 plws 1 379 00:17:58,140 --> 00:18:00,240 yn ogystal â 0-- Nid yw 0-- fel bod yn rhoi i mi 3. 380 00:18:00,240 --> 00:18:05,320 Os byddaf yn pasio mewn 3 i sigma, yr wyf am 3 a 2 ac 1, sy'n rhoi i mi 6. 381 00:18:05,320 --> 00:18:05,900 Ac yn y blaen. 382 00:18:05,900 --> 00:18:09,750 Felly dim ond yn ychwanegu i fyny yr holl rhifau llai na neu'n hafal iddo. 383 00:18:09,750 --> 00:18:12,040 >> Yn awr, i lawr yma Im 'jyst yn mynd argraffu'r yr ateb. 384 00:18:12,040 --> 00:18:17,330 Felly, fel gwiriad pwyll gyflym, gadewch i ni gwneud sigma 0-- sigma slaes dot 0-- 385 00:18:17,330 --> 00:18:18,690 a gadewch i mi deipio i mewn 2. 386 00:18:18,690 --> 00:18:19,960 Ac yr wyf yn wir yn cael 3. 387 00:18:19,960 --> 00:18:21,240 Gadewch i mi deipio mewn 3. 388 00:18:21,240 --> 00:18:22,860 Yr wyf yn wir yn cael 6. 389 00:18:22,860 --> 00:18:27,636 Ac os gall unrhyw un ei wneud y math yn gyflym, os wyf yn gwneud 50 beth ydw i'n mynd yn ei gael? 390 00:18:27,636 --> 00:18:29,839 >> GYNULLEIDFA: [Anghlywadwy]. 391 00:18:29,839 --> 00:18:30,880 DAVID J. Malan: Wel, dim. 392 00:18:30,880 --> 00:18:33,340 Ond 1,275 sydd yn eithaf agos. 393 00:18:33,340 --> 00:18:38,850 Felly, mae hyn yn ganlyniad i wneud 50 ynghyd â 49 plws 48 a mwy 47 plws 46 394 00:18:38,850 --> 00:18:40,349 yr holl ffordd i lawr i 1. 395 00:18:40,349 --> 00:18:41,390 Felly dyna i gyd sigma ei wneud. 396 00:18:41,390 --> 00:18:43,350 Ond gadewch i ni weld sut rydym wedi rhoi ar waith yn awr. 397 00:18:43,350 --> 00:18:45,790 Felly lawr yma yw swyddogaeth ei hun. 398 00:18:45,790 --> 00:18:49,000 Ac nid yw'n ymddangos bod hyn yn cael unrhyw beth i'w wneud â dychweliad eto. 399 00:18:49,000 --> 00:18:51,070 Yn wir, rydym yn defnyddio hen dechneg ysgol. 400 00:18:51,070 --> 00:18:56,680 Rydw i'n ymgychwyn swm newidyn enw i sero, yna mae gen i foreloop yma, 401 00:18:56,680 --> 00:19:00,790 ac rwy'n datgan Int enw Rwyf, a'i osod cyfartal i 1-- 402 00:19:00,790 --> 00:19:04,080 er y gallwn i ei osod yn hafal i sero, ond ers i mi mod yn gwneud hynny, 403 00:19:04,080 --> 00:19:05,340 sy'n gofalu os yw'n sero neu un. 404 00:19:05,340 --> 00:19:06,660 Mae'n mynd i gael unrhyw effaith. 405 00:19:06,660 --> 00:19:10,110 >> Felly rwy'n ailadrodd cyn belled gan fy mod yn llai na neu'n hafal i m, sy'n 406 00:19:10,110 --> 00:19:11,671 yw'r ddadl a basiwyd mewn. 407 00:19:11,671 --> 00:19:13,670 Ac yna Fi jyst cadw incrementing I. A mewnwelediad 408 00:19:13,670 --> 00:19:20,010 o'r ddolen i gyd rwy'n ei wneud yn ei wneud swm yn ogystal hafal I. Ac mae hynny'n fwriadol. 409 00:19:20,010 --> 00:19:22,326 Dydw i ddim am ei wneud, yn hyn o achos, fel swm a mwy a mwy. 410 00:19:22,326 --> 00:19:24,790 Rwyf eisiau ychwanegu gwirionedd gwerth cyfredol i mi 411 00:19:24,790 --> 00:19:28,190 sy'n cadw mynd yn fwy ac yn fwy ac yn fwy at y cyfrif yn olynol. 412 00:19:28,190 --> 00:19:30,210 >> Ac yna byddaf yn dychwelyd swm. 413 00:19:30,210 --> 00:19:33,850 Ac felly ateb yn cael y swm gwerth. 414 00:19:33,850 --> 00:19:35,282 Ac yna yr wyf yn ei hargraffu. 415 00:19:35,282 --> 00:19:37,740 Felly mae 'na gyfle fan hyn, fodd bynnag, at y math o symleiddio 416 00:19:37,740 --> 00:19:41,260 cod hwn gysyniadol a'r math o ergyd un i ' 417 00:19:41,260 --> 00:19:43,250 meddwl o ran y symlrwydd er ei fod yn 418 00:19:43,250 --> 00:19:45,700 cymryd amser i ddidoli o'r gwerthfawrogi pam mae hyn 419 00:19:45,700 --> 00:19:47,330 yn bwerus yn y esiamplau bach. 420 00:19:47,330 --> 00:19:50,380 Dyma sigma one-- felly mae'r ail fersiwn o'r cod hwn. 421 00:19:50,380 --> 00:19:55,290 Mae popeth i fyny top yn union yr un fath, felly yr un stori yn berthnasol fel o'r blaen. 422 00:19:55,290 --> 00:19:59,220 Ond yn awr gadewch i ni edrych ar y gweithredu sigma sy'n 423 00:19:59,220 --> 00:20:05,040 Rydw i wedi ei dreulio o dipyn i lawr i ddim ond y rhain lines-- pedair llinell o god, mewn gwirionedd, 424 00:20:05,040 --> 00:20:06,980 yn ogystal â rhai braces cyrliog a gofod gwyn. 425 00:20:06,980 --> 00:20:07,930 >> Ond beth ydw i'n ei wneud? 426 00:20:07,930 --> 00:20:11,050 Os yw m yn llai na neu'n hafal i sero, mae angen i mi fath o drin 427 00:20:11,050 --> 00:20:12,490 yr achos hwnnw super syml. 428 00:20:12,490 --> 00:20:15,450 Ac os ydych yn llaw i mi sero neu unrhyw beth negyddol sydd ychydig yn rhyfedd, 429 00:20:15,450 --> 00:20:17,909 Im 'jyst yn mynd i fympwyol ond yn dychwelyd sero gyson. 430 00:20:17,909 --> 00:20:20,200 Nid wyf am y peth hyn i fynd i mewn i rai anfeidrol 'n annaearol 431 00:20:20,200 --> 00:20:21,810 dolen oherwydd gwerth negyddol. 432 00:20:21,810 --> 00:20:25,070 Felly, Im 'jyst yn dweud, os byddwch yn rhoi i mi sero neu lai, Im 'yn dychwelyd sero. 433 00:20:25,070 --> 00:20:28,220 >> Ond mae hynny'n dda oherwydd dyna bod un dudalen o'r llyfr ffôn 434 00:20:28,220 --> 00:20:28,790 sydd ar ôl. 435 00:20:28,790 --> 00:20:32,660 Rydw i'n brathu oddi ar broblem benodol iawn ac nid galw rhywbeth recursively. 436 00:20:32,660 --> 00:20:36,580 Ond mewn llinell 31, yr hyn Nid wyf yn ymddangos i fod yn ei wneud? 437 00:20:36,580 --> 00:20:39,780 Mae'r cromfachau yn unig cadw pethau, gobeithio, ychydig yn gliriach. 438 00:20:39,780 --> 00:20:42,110 Ond yr holl rwy'n ei wneud yw fy mod dychwelyd m-- beth bynnag 439 00:20:42,110 --> 00:20:45,790 ydych yn llaw me-- yn ogystal â'r gwerth m-- ddrwg gennym, 440 00:20:45,790 --> 00:20:49,052 a gwerth sigma m minws 1. 441 00:20:49,052 --> 00:20:50,010 Felly beth mae hyn yn ei olygu? 442 00:20:50,010 --> 00:20:53,965 Os byddwch yn rhoi rhif 3 mi fel mewnbwn, yr ateb Rwyf am gael yn y pen draw 443 00:20:53,965 --> 00:20:57,307 yw 6 gan fod 3 a 2 ac 1 yn rhoi i mi 6. 444 00:20:57,307 --> 00:20:59,390 Ond sut ydw i'n meddwl am sut y cod hwn yn rhedeg? 445 00:20:59,390 --> 00:21:03,070 Y tro cyntaf yr wyf yn galw sigma ac yr wyf yn pasio yng ngwerth 3, 446 00:21:03,070 --> 00:21:07,960 hynny fel dweud ar ddarn o bapur, dyma y gwerth 3 447 00:21:07,960 --> 00:21:09,920 ac rwyf wedi bod yn pasio hyn fel sigma. 448 00:21:09,920 --> 00:21:13,090 3 yn amlwg heb fod yn llai na 0, felly Nid yw cyflwr OS yn berthnasol. 449 00:21:13,090 --> 00:21:14,020 Mae'r ARALL wneud. 450 00:21:14,020 --> 00:21:14,990 Felly, beth ddylwn i ei wneud? 451 00:21:14,990 --> 00:21:19,902 Yr wyf am ddychwelyd m, sef 3, yn ogystal â sigma m minws 1. 452 00:21:19,902 --> 00:21:21,110 Felly, gadewch i mi gadw golwg ar hyn. 453 00:21:21,110 --> 00:21:22,710 Rydw i'n mynd i roi hyn darn o lawr bapur. 454 00:21:22,710 --> 00:21:24,668 A beth gwerth, i fod yn glir, a wyf yn mynd i basio 455 00:21:24,668 --> 00:21:26,540 i mewn i sigma yn y fan hon yn y stori? 456 00:21:26,540 --> 00:21:28,080 Pa rif? 457 00:21:28,080 --> 00:21:28,610 2, dde? 458 00:21:28,610 --> 00:21:29,670 3 minws 1 yw 2. 459 00:21:29,670 --> 00:21:32,000 Felly, Fi jyst angen ychydig sgrap o bapur yma. 460 00:21:32,000 --> 00:21:33,931 Felly, yn awr yn cael elwir sigma eto. 461 00:21:33,931 --> 00:21:35,930 Ac yr wyf wedi rhoi yn fwriadol i lawr hwn am ei fod yn 462 00:21:35,930 --> 00:21:38,070 math o fel oedi bod fersiwn o'r stori 463 00:21:38,070 --> 00:21:40,720 oherwydd erbyn hyn rwy'n canolbwyntio ar arwydd o m minws 1. 464 00:21:40,720 --> 00:21:42,660 Felly m yn 3, m minws 1 yw 2. 465 00:21:42,660 --> 00:21:45,110 Felly dyma yw 2 fy mod i wedi ei basio. 466 00:21:45,110 --> 00:21:48,510 2 yn amlwg heb fod yn llai na 0 fel nad yw achos yn berthnasol. 467 00:21:48,510 --> 00:21:53,445 Else Dychwelaf m, sef hwn beth, yn ogystal â sigma o'r hyn werth? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Felly os sigma o 1-- gan fod m yn ar hyn o bryd 2, felly 2 minws 1 yw 1. 470 00:21:59,650 --> 00:22:01,950 Felly, yn awr Fi jyst gwerth 1. 471 00:22:01,950 --> 00:22:04,810 Im 'jyst pasio rhif 1 i'r sigma-- swyddogaeth 472 00:22:04,810 --> 00:22:09,120 neu fy hun Yma-- felly mae 1 yn amlwg nid llai na sero, yn dal yn berthnasol. 473 00:22:09,120 --> 00:22:12,970 >> Dychwelyd Arall 1 plws sigma o'r hyn? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Felly gadewch i mi dim ond cofiwch hynny. 476 00:22:14,678 --> 00:22:15,920 'N annhymerus' yn mynd yn ôl at hynny yn nes ymlaen. 477 00:22:15,920 --> 00:22:18,060 Nawr rydw i'n mynd i fynd yn ei flaen a jot i lawr y rhif 0, oherwydd dyna 478 00:22:18,060 --> 00:22:19,470 fy nadl neu paramedr. 479 00:22:19,470 --> 00:22:22,400 Im 'yn llwyddo yn y nifer 0 ac yn olaf y broses hon 480 00:22:22,400 --> 00:22:25,760 o ychydig ailadrodd fy hun ad nauseum yn peidio oherwydd yr hyn 481 00:22:25,760 --> 00:22:28,820 ydw i'n syth yn ei wneud unwaith y byddaf yn gweld hyn 0? 482 00:22:28,820 --> 00:22:29,790 Dychwelaf sero. 483 00:22:29,790 --> 00:22:31,790 Felly, yn awr mae'n rhaid i chi ail-ddirwyn y stori. 484 00:22:31,790 --> 00:22:34,430 >> Os byddaf yn nawr yn mynd yn ôl mewn amser, beth oedd y peth mwyaf diweddar 485 00:22:34,430 --> 00:22:36,670 Fe wnes os oeddech yn llythrennol ailddirwyn fideo? 486 00:22:36,670 --> 00:22:41,630 Rydw i'n mynd i godi'r mwyaf diweddar 1 ac mae hynny'n rhoi i mi 1 plws 0 yw 1. 487 00:22:41,630 --> 00:22:44,100 Os byddaf yn cadw ailddirwyn y stori, mae hynny'n mynd i roi i mi 488 00:22:44,100 --> 00:22:46,880 2 a gwerth rhedeg hyn, sydd 1. 489 00:22:46,880 --> 00:22:47,789 Felly dyna 3. 490 00:22:47,789 --> 00:22:49,330 Ac yna dwi'n mynd i gadw ailddirwyn. 491 00:22:49,330 --> 00:22:54,220 Pan fyddaf yn rhoi i lawr yn gyntaf y rhif 3-- felly 3 ynghyd â 3 yn rhoi i mi 6. 492 00:22:54,220 --> 00:22:57,272 >> Ac yn awr, os ydych wedi hailddirwyn y fideo hyd at y pwynt hwn, 493 00:22:57,272 --> 00:22:58,980 hwn oedd y iawn cwestiwn cyntaf a ofynnais. 494 00:22:58,980 --> 00:23:01,450 Pan gaiff ei basio 3, beth yw sigma o 3? 495 00:23:01,450 --> 00:23:04,204 Mae'n wir 6, mae'r swm o yr holl darnau hyn o bapur. 496 00:23:04,204 --> 00:23:07,120 Felly, os nad yn cymryd ychydig amser i lapio eich meddwl o gwmpas, mae hynny'n iawn. 497 00:23:07,120 --> 00:23:10,700 Ond yn ystyried ei fod yn little-- iddo yn fwriadol iawn fy mod stacio 498 00:23:10,700 --> 00:23:12,990 rhifau hyn ar ben ei gilydd. 499 00:23:12,990 --> 00:23:17,440 Mae'n fath o fel cael memory-- cofnod mewn amser, 500 00:23:17,440 --> 00:23:19,940 fel sgwrwyr mewn fideo, y gallaf wir ailddirwyn mewn. 501 00:23:19,940 --> 00:23:24,350 Ac rydym yn mynd i ddod yn ôl i bod trosiad mewn dim ond ychydig. 502 00:23:24,350 --> 00:23:28,240 >> Ond yn gyntaf, mae'n ymddangos fod yna mae llawer o geeks a phobl doniol, 503 00:23:28,240 --> 00:23:29,614 Amcana, yn Google. 504 00:23:29,614 --> 00:23:31,530 A fyddai rhywun sy'n iawn dda am Googling meddwl 505 00:23:31,530 --> 00:23:34,270 dod i fyny am ychydig funudau'n a fy helpu i chwilio am rywbeth? 506 00:23:34,270 --> 00:23:35,650 Iawn, allwedd isel iawn. 507 00:23:35,650 --> 00:23:37,870 Rhywun sydd byth yn dod i fyny o'r blaen, efallai. 508 00:23:37,870 --> 00:23:38,370 IAWN. 509 00:23:38,370 --> 00:23:39,030 Yeah? 510 00:23:39,030 --> 00:23:39,530 Dewch ar. 511 00:23:39,530 --> 00:23:41,410 Dewch ar i lawr. 512 00:23:41,410 --> 00:23:42,183 Beth yw dy enw? 513 00:23:42,183 --> 00:23:42,870 >> SAM: Sam. 514 00:23:42,870 --> 00:23:44,290 >> DAVID J. Malan: Sam, yn dod ar i lawr. 515 00:23:44,290 --> 00:23:45,320 Mae hyn yn un. 516 00:23:45,320 --> 00:23:46,280 Neis i gwrdd â chi. 517 00:23:46,280 --> 00:23:46,780 Hey. 518 00:23:46,780 --> 00:23:47,580 Dewch ar drosodd. 519 00:23:47,580 --> 00:23:51,290 Felly, y cyfan sydd angen i mi i chi ei wneud, os gallech, Sam, dyma Google. 520 00:23:51,290 --> 00:23:53,240 Gallwch chwilio am y term recursion? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Peidiwch â difetha. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> Ac yn awr let's-- yeah. 525 00:24:00,970 --> 00:24:03,380 OK Cliciwch hynny. 526 00:24:03,380 --> 00:24:04,315 Gwell cliciwch hynny. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, ei gael. 529 00:24:08,020 --> 00:24:08,520 Na? 530 00:24:08,520 --> 00:24:09,050 IAWN. 531 00:24:09,050 --> 00:24:10,430 Felly, gadewch i ni wneud cwpl o rai eraill. 532 00:24:10,430 --> 00:24:12,830 Nid yn gymaint cysylltiedig yn academaidd yma, ond rhaid i chi 533 00:24:12,830 --> 00:24:14,520 erioed chwilio Google am anagram? 534 00:24:14,520 --> 00:24:15,280 >> SAM: Na 535 00:24:15,280 --> 00:24:15,520 >> DAVID J. Malan: Iawn. 536 00:24:15,520 --> 00:24:17,186 Chwilio am anagram yn lle dychweliad. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Beth am Askew. 539 00:24:23,790 --> 00:24:25,515 Chi erioed wedi chwilio am Askew? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Yn awr, mae hyn yn un ychydig yn anodd i'w gweld ond gobeithio everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 'I' jyst chi a fi yn mwynhau hyn. 543 00:24:34,150 --> 00:24:34,690 IAWN. 544 00:24:34,690 --> 00:24:38,950 >> Felly yn olaf, one's-- hon mae'n ychydig Askew. 545 00:24:38,950 --> 00:24:40,810 Nawr gwneud rholyn baril. 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 Iawn. 549 00:24:45,910 --> 00:24:47,110 Diolch yn fawr i Sam. 550 00:24:47,110 --> 00:24:49,416 Yma byddwch yn mynd. 551 00:24:49,416 --> 00:24:50,400 Diolch. 552 00:24:50,400 --> 00:24:52,807 >> Felly beth sy'n mynd ymlaen ym mhob o enghreifftiau gwirion hyn? 553 00:24:52,807 --> 00:24:55,640 Felly mewn gwirionedd, o dan y cwfl o Google miliynau o linellau o god 554 00:24:55,640 --> 00:24:58,860 yn ôl pob golwg yn rhai gwirion OS amodau sydd yn eu hanfod 555 00:24:58,860 --> 00:25:01,160 gwirio a yw'r defnyddiwr teipio yn yr ymadrodd hwn, 556 00:25:01,160 --> 00:25:03,760 wneud rhywbeth sydd yn ôl pob tebyg yn cymryd swm nontrivial o amser 557 00:25:03,760 --> 00:25:06,080 i weithredu dim ond er mwyn fod yn ddifyr yn y modd hwn. 558 00:25:06,080 --> 00:25:08,430 Ond dyna i gyd y mae'n berwi i lawr at dan y cwfl. 559 00:25:08,430 --> 00:25:11,570 Ond, wrth gwrs, recursion yn fwy o geekier 560 00:25:11,570 --> 00:25:13,880 enghraifft ymhlith driciau arbennig hynny. 561 00:25:13,880 --> 00:25:16,880 Ac yn sicr mae yna bobl eraill i maes 'na yn ogystal ein bod efallai wedi nid hyd yn oed yn 562 00:25:16,880 --> 00:25:18,230 darganfod eto. 563 00:25:18,230 --> 00:25:22,830 >> Felly edrychwch, neu ystyried Erbyn hyn mae'r rhaglen ganlynol, 564 00:25:22,830 --> 00:25:24,830 ac yn sicr chrafangia unrhyw y rhain ar eich ffordd allan. 565 00:25:24,830 --> 00:25:28,820 Rydw i'n mynd i fynd yn ei flaen a agor rhaglen sy'n 566 00:25:28,820 --> 00:25:30,920 mynd i geisio i gyfnewid ddau werth. 567 00:25:30,920 --> 00:25:33,210 Ond cyn i ni fynd yno, gadewch i ni wneud hyn. 568 00:25:33,210 --> 00:25:38,500 A allem gael un yn fwy gwirfoddolwr, yr wyf yn meddwl? 569 00:25:38,500 --> 00:25:40,480 Hoffech chi wirfoddoli? 570 00:25:40,480 --> 00:25:40,980 Na? 571 00:25:40,980 --> 00:25:41,890 Dewch ar i fyny. 572 00:25:41,890 --> 00:25:42,390 Dewch ar i fyny. 573 00:25:42,390 --> 00:25:42,890 Iawn. 574 00:25:42,890 --> 00:25:44,136 Felly eich enw i yw beth? 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 Dewch ar i fyny, Lauren. 578 00:25:46,890 --> 00:25:50,140 Felly Lauren yn cael ei herio yma fel a ganlyn. 579 00:25:50,140 --> 00:25:52,310 Neis i gwrdd â chi. 580 00:25:52,310 --> 00:25:55,730 Felly Lauren yma wedi yn blaen o'i ddau gwpan gwag. 581 00:25:55,730 --> 00:25:57,570 Ac mae gennym rai oren sudd a rhywfaint o laeth 582 00:25:57,570 --> 00:26:00,301 ac rydym yn mynd i fynd yn ei flaen ac yn gwneud y canlynol. 583 00:26:00,301 --> 00:26:01,550 Rydym yn jyst yn mynd i lenwi'r hyn. 584 00:26:01,550 --> 00:26:07,840 Mae ychydig owns o laeth dros yma a gadewch i ni lenwi ychydig o sudd oren dros yma. 585 00:26:07,840 --> 00:26:11,475 >> Ac o flaen pob un aelodau o'r gynulleidfa hyn, 586 00:26:11,475 --> 00:26:13,550 cyfnewid y ddau werth o gwpanau hyn. 587 00:26:13,550 --> 00:26:16,970 Rhowch y sudd oren yn y cwpan llaeth ac mae'r llaeth yn y cwpan sudd oren. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Sut y byddech yn gwneud hyn os oeddech yn cartref ac yn cael mynediad at gyflenwadau eraill? 590 00:26:26,150 --> 00:26:27,400 LAUREN: Rhowch ef mewn cwpan arall. 591 00:26:27,400 --> 00:26:28,191 DAVID J. Malan: Iawn. 592 00:26:28,191 --> 00:26:31,940 Felly gadewch i ni gael dros dro amrywiol, os byddwn yn gwneud hynny. 593 00:26:31,940 --> 00:26:35,871 Ac yn mynd yn ei flaen yn awr ac yn gweithredu y weithdrefn hon yr un gyfnewid. 594 00:26:35,871 --> 00:26:36,370 Mor dda. 595 00:26:36,370 --> 00:26:41,490 Rydym wedi rhoi OJ mewn i'r dros dro amrywiol, llaeth i mewn i'r newidyn OJ, 596 00:26:41,490 --> 00:26:44,481 ac yn awr y newidyn dros dro i mewn i'r newidyn llaeth. 597 00:26:44,481 --> 00:26:44,980 IAWN. 598 00:26:44,980 --> 00:26:48,740 Felly gwneud yn dda iawn hyd yn hyn. 599 00:26:48,740 --> 00:26:50,990 Felly mae'n troi out-- dal bod yn meddwl am ddim ond eiliad. 600 00:26:50,990 --> 00:26:54,479 Yma, i ddim ond geek i fyny ychydig, mae hyn fyddai'r cod C cyfatebol 601 00:26:54,479 --> 00:26:55,520 ein bod newydd roi ar waith. 602 00:26:55,520 --> 00:26:58,650 Roedd gennym ddwy mewnbynnau, aab, y ddau y byddwn yn jyst dweud am symlrwydd yn 603 00:26:58,650 --> 00:26:59,260 int yn. 604 00:26:59,260 --> 00:27:02,780 Ac yn sylwi yma, os wyf am gyfnewid gwerthoedd dau newidyn, a a b, 605 00:27:02,780 --> 00:27:06,890 rydym yn wir angen middleman, a newidyn dros dro, cwpan dros dro, 606 00:27:06,890 --> 00:27:10,830 y mae'r arllwys un o'r gwerthoedd fel bod gennym dalfan ar ei gyfer. 607 00:27:10,830 --> 00:27:13,480 Ond yna mae'r cod yn union fel Lauren gweithredu yma. 608 00:27:13,480 --> 00:27:15,500 >> Yn awr, dim ond i gael Ychydig crazier, troi allan 609 00:27:15,500 --> 00:27:20,930 eich bod yn gallu gwneud hyn heb newidyn dros dro. 610 00:27:20,930 --> 00:27:24,870 Er mwyn gwneud hyn yn iawn, fodd bynnag, rydym yn mynd i gael i dwyllo gyda rhai cemeg. 611 00:27:24,870 --> 00:27:26,380 Mae gennym rai cwpanau ychwanegol yma. 612 00:27:26,380 --> 00:27:29,600 Felly, y peth agosaf sy'n edrych fel llaeth a dŵr perhaps-- 613 00:27:29,600 --> 00:27:34,090 neu laeth a OJ-- yw gennym rai dŵr, felly byddwn yn llenwi'r hwn yn un i fyny 614 00:27:34,090 --> 00:27:36,486 gydag ychydig o owns o ddŵr clir. 615 00:27:36,486 --> 00:27:38,332 Dyna mae'n debyg gormod. 616 00:27:38,332 --> 00:27:38,832 Yeah. 617 00:27:38,832 --> 00:27:39,934 Dyna bendant gormod. 618 00:27:39,934 --> 00:27:40,600 Daliwch ar un sec. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> Ac yn awr mae gennym olew, sydd, fel yr wyf yn cofio o ddosbarth cemeg ysgol ganol, 621 00:27:48,420 --> 00:27:49,990 gobeithio nad yw'n cymysgu'n gyda dŵr. 622 00:27:49,990 --> 00:27:53,650 Ond mae'n fath o fath o edrych fel llaeth a OJ. 623 00:27:53,650 --> 00:27:55,760 Felly nawr, heb ddefnyddio newidyn dros dro, 624 00:27:55,760 --> 00:27:59,260 gallwch gyfnewid dau gwerthoedd hynny? 625 00:27:59,260 --> 00:28:03,884 Felly olew yn mynd i mewn i'r gwpan dŵr, dŵr yn mynd i mewn i'r cwpan olew. 626 00:28:03,884 --> 00:28:04,800 LAUREN: Dim cwpanau eraill? 627 00:28:04,800 --> 00:28:05,940 DAVID J. Malan: Dim cwpanau eraill. 628 00:28:05,940 --> 00:28:07,860 Ac nid wyf i wedi mewn gwirionedd profi hyn cyn y flwyddyn hon 629 00:28:07,860 --> 00:28:10,110 felly nid wyf yn gwybod os bydd hyn gweithio mewn gwirionedd yn gemegol. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Nid oedd i fod i ddigwydd. 632 00:28:18,650 --> 00:28:19,761 A yw'n gweithio? 633 00:28:19,761 --> 00:28:20,260 Iawn. 634 00:28:20,260 --> 00:28:20,990 Felly gwahanu? 635 00:28:20,990 --> 00:28:21,490 Da. 636 00:28:21,490 --> 00:28:24,714 Nawr rhaid i ni gael y dŵr i mewn i'r gwpan arall. 637 00:28:24,714 --> 00:28:27,630 Crynodyddion cemeg Doethach gallai yn ôl pob tebyg yn gwneud hyn yn well na fi. 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: Mae'r dŵr sydd ar y gwaelod. 639 00:28:28,510 --> 00:28:31,910 >> DAVID J. Malan: Y water-- a oedd yn beth sy'n allweddol y tro diwethaf i ni yn gwneud hyn. 640 00:28:31,910 --> 00:28:33,950 Mae'n rhaid i chi wneud hynny yn y drefn gywir. 641 00:28:33,950 --> 00:28:34,450 Yeah. 642 00:28:34,450 --> 00:28:35,270 Mae hynny'n iawn. 643 00:28:35,270 --> 00:28:37,290 Felly nawr mae gennym ddau gwpan o olew. 644 00:28:37,290 --> 00:28:37,790 IAWN. 645 00:28:37,790 --> 00:28:38,510 Mae hynny'n iawn. 646 00:28:38,510 --> 00:28:40,110 Ond os yw hyn yn gemegol yn gweithio na I-- 647 00:28:40,110 --> 00:28:41,200 >> LAUREN: Mae hwn yn dŵr. 648 00:28:41,200 --> 00:28:41,930 >> DAVID J. Malan: Mae hynny'n bennaf dŵr. 649 00:28:41,930 --> 00:28:42,430 Iawn. 650 00:28:42,430 --> 00:28:44,210 Ond dyna dal i fod yr un fath ag o'r blaen cwpan. 651 00:28:44,210 --> 00:28:47,570 Felly arllwys iddo-- cynnig arni dros yno. 652 00:28:47,570 --> 00:28:49,300 IAWN. 653 00:28:49,300 --> 00:28:51,010 Mae hyn yn ddefnydd da o amser dosbarth heddiw. 654 00:28:51,010 --> 00:28:51,510 IAWN. 655 00:28:51,510 --> 00:28:53,890 Felly nawr we-- 'n glws. 656 00:28:53,890 --> 00:28:55,460 Math o. 657 00:28:55,460 --> 00:28:55,960 Iawn. 658 00:28:55,960 --> 00:28:56,690 Felly da iawn. 659 00:28:56,690 --> 00:29:00,006 Diolch yn fawr i Lauren. 660 00:29:00,006 --> 00:29:01,950 Gwneud yn dda iawn. 661 00:29:01,950 --> 00:29:04,570 >> Felly, dim ond i chwythu eich meddyliau, ac mae hyn yn rhywbeth efallai 662 00:29:04,570 --> 00:29:08,660 i chwarae gyda os ydych yn hoffi yn ID CS50, gallwch chi, mewn gwirionedd, gyfnewid ddau newidyn 663 00:29:08,660 --> 00:29:11,470 heb ddefnyddio cyfanrif dros dro. 664 00:29:11,470 --> 00:29:13,060 Ac mae hyn yn y cod C cyfatebol. 665 00:29:13,060 --> 00:29:16,110 Ac os ydych yn cofio o ddiwethaf Dydd Mercher, rydym yn cyflwyno, os yn fyr, 666 00:29:16,110 --> 00:29:19,720 rhai gweithredwyr newydd yng C. A yn gwneud unrhyw un yn galw i gof yr hyn y mae'r moron bach 667 00:29:19,720 --> 00:29:23,660 symbol yw, mai ychydig trionglog symbol o'r bysellfwrdd gynrychioli? 668 00:29:23,660 --> 00:29:26,003 Pa bitwise gweithredwr? 669 00:29:26,003 --> 00:29:26,770 >> GYNULLEIDFA: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> DAVID J. Malan: EXOR. 671 00:29:27,645 --> 00:29:28,560 Exclusive Or. 672 00:29:28,560 --> 00:29:32,920 Felly os ydych am, dim ond am hwyl yn cartref, er mwyn rhoi a b dau mympwyol 673 00:29:32,920 --> 00:29:36,072 Gwerthoedd fel unrhyw eight-- ac yr wyf yn Byddai ddewis werth wyth did. 674 00:29:36,072 --> 00:29:38,530 Os byddwch yn gwneud hyn gyda 32 darnau, byddwch yn gyflym iawn yn diflasu. 675 00:29:38,530 --> 00:29:42,150 Ond dim ond yn rhoi wyth bit gwerth dyna beth bynnag, un neu ddau, 676 00:29:42,150 --> 00:29:43,790 ac yn rhoi b gwerth tebyg. 677 00:29:43,790 --> 00:29:46,810 Ac yna ddefnyddio'r diffiniad o XOR o ddydd Mercher diwethaf, 678 00:29:46,810 --> 00:29:52,560 cymhwyso hynny fesul tipyn, pob un y rhai wyth darnau ym mhob un a a b, 679 00:29:52,560 --> 00:29:54,980 ac yna yn ei wneud yn union fesul cod hwn. 680 00:29:54,980 --> 00:29:58,170 Ac nid yw'n anghywir beth byddwch yn gweld yma ar y sgrin. 681 00:29:58,170 --> 00:30:02,100 Mae'n wir boils i lawr i dair gweithrediadau XOR 682 00:30:02,100 --> 00:30:05,910 a rhywsut magically yn a b Bydd cyfnewid swyddi 683 00:30:05,910 --> 00:30:08,010 heb golli unrhyw wybodaeth. 684 00:30:08,010 --> 00:30:11,580 >> Felly, y tric olew a dŵr yn y agosaf ymgnawdoliad byd go iawn 685 00:30:11,580 --> 00:30:12,980 Gallwn feddwl am i ddynwared hynny. 686 00:30:12,980 --> 00:30:15,950 Ond mae'n sicr yn haws i defnyddio newidyn dros dro, 687 00:30:15,950 --> 00:30:16,920 fel yn yr achos yma. 688 00:30:16,920 --> 00:30:21,190 Ac mae hyn hefyd yn gyfle dweud, hefyd, y math hwn o optimization micro, 689 00:30:21,190 --> 00:30:23,590 fel gwyddonydd cyfrifiadurol Byddai dweud, er bod math o hwyl 690 00:30:23,590 --> 00:30:27,060 i Brag am sut y gwnaethoch hyn heb fel cyfnewid gyda newidyn ychwanegol, 691 00:30:27,060 --> 00:30:28,640 nid yw'n bob un sy'n cymhellol. 692 00:30:28,640 --> 00:30:31,619 Gan fod i achub 32 o ddarnau, fel y yn achos int go iawn, 693 00:30:31,619 --> 00:30:33,410 Nid yw'r cyfan sydd gymhellol ar system lle 694 00:30:33,410 --> 00:30:36,722 efallai y byddwch yn defnyddio degau o megabeit neu hyd yn oed fwy o gof o'r fath y dyddiau hyn. 695 00:30:36,722 --> 00:30:38,680 Ac yn wir, pan gawn i set problem yn ddiweddarach 696 00:30:38,680 --> 00:30:41,010 ac yr ydych yn gweithredu sillafu checker a byddwch yn 697 00:30:41,010 --> 00:30:43,550 cael eu herio i wneud hynny gyda hwn RAM cyn lleied a chyn lleied 698 00:30:43,550 --> 00:30:46,820 amser ag y bo modd ar y computer-- byddwch yn dal 699 00:30:46,820 --> 00:30:50,160 cael wythnos i weithredu iddo-- byddwch have-- byddwch yn 700 00:30:50,160 --> 00:30:51,799 herio i leihau'r adnoddau hynny. 701 00:30:51,799 --> 00:30:53,840 A dyna wir yr unig achlysur semester hwn 702 00:30:53,840 --> 00:30:57,940 lle byddwch yn cael eich annog i eillio oddi ar hyd yn oed y perfformiad gorau 703 00:30:57,940 --> 00:30:59,340 costau fel arall. 704 00:30:59,340 --> 00:31:02,200 >> Felly what-- sut y gallwn gweld hyn mewn cod gwirioneddol? 705 00:31:02,200 --> 00:31:04,530 Gadewch i mi fynd yn ei flaen yn awr ac agor enghraifft 706 00:31:04,530 --> 00:31:07,700 sy'n cael ei alw'n fwriadol Dim Swap am nad yw'n gwneud 707 00:31:07,700 --> 00:31:10,670 yn wir gyfnewid y newidynnau fel yr ydych mewn gwirionedd gallai ei ddisgwyl. 708 00:31:10,670 --> 00:31:12,260 Felly, gadewch i ni edrych. 709 00:31:12,260 --> 00:31:17,050 Dyma raglen sydd heb CS50 llyfrgell digwydd, Fi jyst safon / O. 710 00:31:17,050 --> 00:31:19,560 Nawr mae gennym prototeip ar gyfer cyfnewid fyny top a dim ond 711 00:31:19,560 --> 00:31:21,540 yn golygu mae'n rhaid iddo gael ei ddiffinio yn nes ymlaen. 712 00:31:21,540 --> 00:31:22,550 A dyma brif. 713 00:31:22,550 --> 00:31:26,000 >> Rwy'n neilltuo x ac y yn fympwyol, yn y drefn honno, mae'r gwerthoedd un a dau 714 00:31:26,000 --> 00:31:28,590 dim ond oherwydd eu bod yn fach ac yn hawdd i feddwl am. 715 00:31:28,590 --> 00:31:32,280 Ac yna Fi jyst cael bagad o printfs lle yr wyf yn cael archwiliad bwyll. x yw 1 716 00:31:32,280 --> 00:31:35,110 ac y yw 2 yn ôl pob tebyg beth fydd printfs rhai yn dweud. 717 00:31:35,110 --> 00:31:36,530 Felly dim hud hyd yn hyn. 718 00:31:36,530 --> 00:31:40,100 >> Yna dwi'n mynd i wneud cais gyda argraffu def, cyfnewid dot dot dot. 719 00:31:40,100 --> 00:31:43,730 Rydw i'n mynd i alw'r cyfnewid swyddogaeth, gan fynd heibio yn x ac y. 720 00:31:43,730 --> 00:31:47,350 A gadewch i ni dybio am nawr bod gyfnewid yn cael ei weithredu yn union 721 00:31:47,350 --> 00:31:49,930 fel yr oedd funud yn ôl gyda newidyn dros dro. 722 00:31:49,930 --> 00:31:52,670 Ac felly yr wyf yn hawlio boldly, cyfnewid. 723 00:31:52,670 --> 00:31:55,429 x yn awr hon ac y mae yn awr fod. 724 00:31:55,429 --> 00:31:57,220 Ond y ffeil, wrth gwrs, gelwir Dim Swap. 725 00:31:57,220 --> 00:31:58,678 Felly gadewch i ni mewn gwirionedd yn gweld beth sy'n digwydd. 726 00:31:58,678 --> 00:32:04,450 Os byddaf yn llunio dim cyfnewid ac yna gwneud ./noswap, x yw 1, y mae 2. 727 00:32:04,450 --> 00:32:05,770 Cyfnewid cyfnewid. 728 00:32:05,770 --> 00:32:07,200 x yw 1, y mae 2. 729 00:32:07,200 --> 00:32:11,980 Felly mae'n ymddangos mewn gwirionedd yn ddiffygiol hyd yn oed er swap-- gadewch i sgrolio i lawr now-- 730 00:32:11,980 --> 00:32:16,542 yn cael ei weithredu yn union fesul y cod cynigiais eiliad yn ôl. 731 00:32:16,542 --> 00:32:19,000 Felly, nid ydym yn mynd i gael ffansi gyda'r stwff XOR am y tro. 732 00:32:19,000 --> 00:32:21,890 Mae hyn, hefyd, weithio yn unig fel gyda'r llaeth a OJ, 733 00:32:21,890 --> 00:32:25,820 ond nid yw'n ymddangos i fod yn gweithio. 734 00:32:25,820 --> 00:32:27,180 >> Felly, gadewch i ni wneud hyn eto. 735 00:32:27,180 --> 00:32:29,310 Efallai fy mod nid yn unig yn rhedeg yn iawn. 736 00:32:29,310 --> 00:32:32,010 Felly gadewch i ni redeg Dim Cyfnewid eto. 737 00:32:32,010 --> 00:32:32,900 Efallai I-- dim. 738 00:32:32,900 --> 00:32:34,400 Felly mae'n nid yn unig ei gwaith. 739 00:32:34,400 --> 00:32:36,060 Felly, gadewch i ni wneud ychydig gwiriad bwyll. 740 00:32:36,060 --> 00:32:39,690 Gadewch i mi fynd yn ei flaen yma yn Swap a dim ond ychwanegu, arhoswch funud, 741 00:32:39,690 --> 00:32:43,856 a yw% i / n a gadewch i ni plug-yng ngwerth a. 742 00:32:43,856 --> 00:32:45,730 Gan fy mod wir eisiau i weld beth sy'n digwydd. 743 00:32:45,730 --> 00:32:47,570 Ac yn wir, mae hyn yn techneg debugging 744 00:32:47,570 --> 00:32:50,028 y gallech fod yn defnyddio mewn oriau swyddfa neu gartref yn barod, 745 00:32:50,028 --> 00:32:53,560 debyg i hanner cyntaf Dan 'N fideo Armendariz mewn PSET3 746 00:32:53,560 --> 00:32:56,870 wherein cyflwynasom print def fel techneg a argymhellir, o leiaf 747 00:32:56,870 --> 00:32:58,080 ar gyfer achosion syml. 748 00:32:58,080 --> 00:33:01,720 Gadewch i mi fynd yn ei flaen ac yn rhedeg yn gwneud dim cyfnewid eto, ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Diddorol. 751 00:33:05,840 --> 00:33:11,670 Felly sylwi ar yr hyn sy'n ymddangos i fod yn wir. x yw 1, y yw 2, ond mae 2 pan b yw 1. 752 00:33:11,670 --> 00:33:16,790 Felly dau rheini rywsut got cyfnewid ond nid yw x ac y yn cael eu cyfnewid. 753 00:33:16,790 --> 00:33:21,090 Felly, er mwyn bod yn glir, beth sy'n digwydd yw, hyd yma yr wyf wedi x ac y 754 00:33:21,090 --> 00:33:25,380 ac mae'r rheini'n newidynnau lleol yn y cwmpas prif, Im 'yn pasio yn x ac y 755 00:33:25,380 --> 00:33:26,170 i gyfnewid. 756 00:33:26,170 --> 00:33:29,080 Yn awr, cyfnewid, fel swyddogaeth ar wahân, yn rhad ac am ddim i alw ei ddadleuon 757 00:33:29,080 --> 00:33:30,590 neu ei unrhyw beth baramedrau y mae am. 758 00:33:30,590 --> 00:33:33,280 Foo neu far neu x neu y neu a neu b. 759 00:33:33,280 --> 00:33:36,870 Dim ond i wneud yn glir eu bod yn Nid yw union x ac y fel y cyfryw, 760 00:33:36,870 --> 00:33:38,020 Rwyf wedi dweud a a b. 761 00:33:38,020 --> 00:33:40,040 Ond gallem alw unrhyw beth rydym am iddynt. 762 00:33:40,040 --> 00:33:43,960 >> Ac felly mae'n edrych fel gyfnewid yn cael ei basio 763 00:33:43,960 --> 00:33:48,980 x-- AKA a-- ac mae'n yn cael ei drosglwyddo y-- AKA b. 764 00:33:48,980 --> 00:33:51,900 Rhywsut tair llinell hyn yn cyfnewid gwerthoedd hynny yn union 765 00:33:51,900 --> 00:33:53,510 fel y gwnaeth Lauren gyda'r llaeth a OJ. 766 00:33:53,510 --> 00:33:56,010 Ond pan fyddwn yn argraffu gwerthoedd, a a b 767 00:33:56,010 --> 00:34:01,340 yn wir cyfnewid ond x a y rhaid i unrhyw newid iddynt. 768 00:34:01,340 --> 00:34:03,150 Dwyn i gof bod x ac y yn i fyny yma. 769 00:34:03,150 --> 00:34:05,320 >> Felly, gallwn weld hyn drwy techneg arall hefyd. 770 00:34:05,320 --> 00:34:08,110 Ac mae hyn hefyd yn dechneg rhan annatod o broblem gosod tri. 771 00:34:08,110 --> 00:34:10,780 Gadewch i ni fynd yn ei flaen ac yn gwneud hyn mewn CS50 ID os nad ydych wedi gwneud hynny'n barod. 772 00:34:10,780 --> 00:34:13,730 Ar yr ochr dde i ni gael y tab Bar offer. 773 00:34:13,730 --> 00:34:16,159 Ac os byddwch yn agor hyn i fyny, mae rhywfaint o wybodaeth ddirgel 774 00:34:16,159 --> 00:34:17,530 sy'n taflu ar chi i ddechrau. 775 00:34:17,530 --> 00:34:19,310 Ond gadewch i ni tynnu coes hyn ar wahân go gyflym. 776 00:34:19,310 --> 00:34:21,620 >> Felly un, byddwch yn gweld newidynnau lleol. 777 00:34:21,620 --> 00:34:26,230 Troi allan sy'n adeiladu i mewn i IDE CS50, ac llawer o amgylcheddau rhaglennu mwy 778 00:34:26,230 --> 00:34:28,060 yn gyffredinol, yn dadfygiwr. 779 00:34:28,060 --> 00:34:31,340 Mae offeryn sy'n eich galluogi i weld eu golwg beth sy'n mynd ymlaen tu mewn i'ch rhaglen 780 00:34:31,340 --> 00:34:34,380 heb orfod troi at ychwanegu printfs a llunio a rhedeg 781 00:34:34,380 --> 00:34:37,588 ac ychwanegu printf a llunio ac rhedeg, sydd eisoes, yn ystod oriau swyddfa 782 00:34:37,588 --> 00:34:40,070 neu gartref, yn ôl pob tebyg mynd yn eithaf diflas. 783 00:34:40,070 --> 00:34:43,090 >> Felly dyma, mewn dim ond hyn o bryd, rydym yn mynd i ei weld mewn amser real 784 00:34:43,090 --> 00:34:44,760 gwerthoedd ein newidynnau lleol. 785 00:34:44,760 --> 00:34:47,880 Rydym ni hefyd yn mynd i fod yn gallu gosod hyn a elwir yn torbwyntiau sy'n 786 00:34:47,880 --> 00:34:52,570 cyfleoedd yn fy rhaglen i oedi gweithredu ar linell benodol o god 787 00:34:52,570 --> 00:34:53,710 fy mod yn chwilfrydig am. 788 00:34:53,710 --> 00:34:54,210 Iawn? 789 00:34:54,210 --> 00:34:55,969 Mae'r rhaglenni hyn yn rhedeg mewn eiliad. 790 00:34:55,969 --> 00:35:00,450 Mae'n fath o 'n glws i ni bodau dynol arafach i allu oedi, cymryd hyn o bryd, gweler 791 00:35:00,450 --> 00:35:02,380 yr hyn sy'n digwydd o gwmpas llinell benodol o god 792 00:35:02,380 --> 00:35:05,050 heb y aredig rhaglen drwyddo ac yn gorffen yn gyfan gwbl. 793 00:35:05,050 --> 00:35:08,510 Felly mae torbwyntiau yn mynd i'n galluogi i torri ac oedi ar bwynt penodol. 794 00:35:08,510 --> 00:35:12,990 >> Pentwr Call yn ffordd ffansi o gan ddweud pa swyddogaethau ar hyn o bryd 795 00:35:12,990 --> 00:35:14,140 yn cael ei alw ar hyn o bryd. 796 00:35:14,140 --> 00:35:15,370 Prif cael ei alw'n gyntaf bob amser. 797 00:35:15,370 --> 00:35:17,230 Ond os Prif alwadau y swyddogaeth o'r enw Swap, 798 00:35:17,230 --> 00:35:20,470 rydym yn wir yn mynd i weld hon twr o swyddogaethau sydd wedi bod 799 00:35:20,470 --> 00:35:22,400 Gelwir mewn trefn gronolegol. 800 00:35:22,400 --> 00:35:23,310 Felly, gadewch i ni weld hynny. 801 00:35:23,310 --> 00:35:24,327 >> Rydw i'n mynd i chwyddo allan. 802 00:35:24,327 --> 00:35:25,660 Rydw i'n mynd i fynd yn ôl at fy cod. 803 00:35:25,660 --> 00:35:27,540 A dim ond am fy mod eisiau i fod yn bedantig yma, 804 00:35:27,540 --> 00:35:31,100 Rydw i'n mynd i fynd yn ei flaen a chliciwch ychydig i'r chwith o'r llinell pump. 805 00:35:31,100 --> 00:35:32,830 A bod yn creu dot coch. 806 00:35:32,830 --> 00:35:36,200 Ac yn sylwi ar yr ochr dde bod y dadnamydd yn gwybod, hey, 807 00:35:36,200 --> 00:35:41,020 Wyf newydd ei ddweud yn torbwynt ar llinell noswap.c pump, yn benodol 808 00:35:41,020 --> 00:35:42,480 yn y llinell hon o god. 809 00:35:42,480 --> 00:35:45,090 Felly mae'r debugger yn gwybod fy mod wedi gofyn bod y tro nesaf 810 00:35:45,090 --> 00:35:48,530 Rwy'n rhedeg fy rhaglen ei oedi gweithredu yno yn hytrach na dim ond 811 00:35:48,530 --> 00:35:50,390 rhedeg yr holl beth super gyflym. 812 00:35:50,390 --> 00:35:53,889 >> Felly, yn awr yr wyf i'n mynd i glicio ar y Dadfygio botwm ar frig y DRhA 813 00:35:53,889 --> 00:35:55,430 ac mae hynny'n mynd i wneud y canlynol. 814 00:35:55,430 --> 00:36:00,680 Mae'n mynd i agor y cychwyn braidd brawychus edrych yn ail terfynell window-- 815 00:36:00,680 --> 00:36:02,679 debugging bell oddi wrth cynnal o'r fath ac such-- 816 00:36:02,679 --> 00:36:04,970 a byddwn yn dod yn ôl at yr hyn bob un sy'n golygu cyn bo hir. 817 00:36:04,970 --> 00:36:09,020 Ond yr hyn sy'n bwysig i nawr yw bod y dot coch ei tharo, 818 00:36:09,020 --> 00:36:11,735 dadfygiwr wedi fwriadol seibio execution-- 819 00:36:11,735 --> 00:36:15,560 nid ar y llinell honno fel y cyfryw, ond ar y cyntaf llinell o god gwirioneddol mewn y swyddogaeth honno. 820 00:36:15,560 --> 00:36:18,040 A dyna pam llinell saith yw bellach a amlygwyd mewn melyn. 821 00:36:18,040 --> 00:36:20,550 >> Ac yn awr gadewch i ni edrych ar yr ochr dde. 822 00:36:20,550 --> 00:36:27,300 Mae'n edrych fel, yn ddiofyn, yn ddigon 'n glws, x wedi pa werth? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 Ac y mae pa werth? 825 00:36:29,750 --> 00:36:30,410 Zero. 826 00:36:30,410 --> 00:36:35,540 A dyna i'w ddisgwyl yn yr ystyr bod x a y-- bod line-- melyn wedi 827 00:36:35,540 --> 00:36:36,770 Nid yw ddienyddio eto. 828 00:36:36,770 --> 00:36:38,510 Felly ni ddylai x gael y gwerth 1. 829 00:36:38,510 --> 00:36:41,470 Gallai fod yn cael unrhyw werth arall, gwerth garbage fel y'u gelwir. 830 00:36:41,470 --> 00:36:44,320 Ac rydym yn got 'n ffodus yn ei bod yn sero yn y fan hon, yn ei hanfod. 831 00:36:44,320 --> 00:36:46,400 >> Felly, erbyn hyn does ond ychydig botymau mae angen i ni ofalu 832 00:36:46,400 --> 00:36:48,100 ynghylch pryd debugging yn y ffordd hon. 833 00:36:48,100 --> 00:36:49,970 Hysbysiad yma, mae gennym botwm Chwarae. 834 00:36:49,970 --> 00:36:51,877 Ac os ydym yn chwarae neu daro ailddechrau, dyna'n union 835 00:36:51,877 --> 00:36:53,710 mynd i redeg drwy gweddill y rhaglen 836 00:36:53,710 --> 00:36:55,300 neu nes ei fod yn taro torbwynt arall. 837 00:36:55,300 --> 00:36:56,910 Ond nid wyf wedi gosod unrhyw un arall torbwyntiau felly mae'n jyst 838 00:36:56,910 --> 00:36:58,118 mynd i redeg trwy'r diwedd. 839 00:36:58,118 --> 00:37:00,280 Y math hwnnw o colli y Pwrpas procio o gwmpas. 840 00:37:00,280 --> 00:37:03,290 >> Felly, yn hytrach, yr wyf yn poeni am eiconau hyn i'r dde. 841 00:37:03,290 --> 00:37:05,360 Ac os wyf yn hofran dros iddynt, fel y dylech hefyd, 842 00:37:05,360 --> 00:37:07,450 byddwch yn gweld ychydig o awgrymiadau offeryn tips--. 843 00:37:07,450 --> 00:37:09,020 Mae hyn yn un yn camu drosodd. 844 00:37:09,020 --> 00:37:11,290 Nawr nid yw hynny'n golygu sgip y llinell ganlynol o god. 845 00:37:11,290 --> 00:37:14,840 Mae hynny'n ei olygu yw chyflawni ac symud i'r nesaf, yn symud i'r nesaf, 846 00:37:14,840 --> 00:37:15,580 symud ymlaen i'r nesaf. 847 00:37:15,580 --> 00:37:17,610 Mewn geiriau eraill, drwy hynny botwm, gallaf gerdded 848 00:37:17,610 --> 00:37:20,390 drwy fy cod un cam ar y tro. 849 00:37:20,390 --> 00:37:21,914 Fesul llinell, yn llythrennol. 850 00:37:21,914 --> 00:37:23,830 Yn awr, ar y dde hynny, mae un arall 851 00:37:23,830 --> 00:37:25,163 y byddwn yn gweld mewn dim ond hyn o bryd. 852 00:37:25,163 --> 00:37:27,820 Mae hyn yn yr hyn a elwir Step Into eicon sy'n 853 00:37:27,820 --> 00:37:30,300 mynd i ganiatáu plymio i mi i mewn i swyddogaeth arall. 854 00:37:30,300 --> 00:37:31,800 Ond gadewch i ni weld hyn mewn dim ond hyn o bryd. 855 00:37:31,800 --> 00:37:33,280 Felly dw i'n mynd i glicio gamu drosodd. 856 00:37:33,280 --> 00:37:35,820 Ac yn awr yn sylwi, fel yr wyf clicio botwm hwn ar dde uchaf, 857 00:37:35,820 --> 00:37:41,260 cadwch eich llygaid yn fras o dan Lleol Newidynnau a gweld beth sy'n digwydd i x. 858 00:37:41,260 --> 00:37:44,115 x yn awr yn 1 am fod y llinell felen bellach wedi dienyddio 859 00:37:44,115 --> 00:37:45,840 ac yr ydym wedi symud ymlaen i linell 8. 860 00:37:45,840 --> 00:37:49,840 Ac mewn dim ond eiliad y gobeithio, dylai fod yn 2. 861 00:37:49,840 --> 00:37:52,330 >> Yn awr, nid oes dim sy'n ddiddorol digwydd am ychydig. 862 00:37:52,330 --> 00:37:53,390 Mae'r holl mae hwn yn ei printf. 863 00:37:53,390 --> 00:37:58,010 Ac yn sylwi, yn fy terfynell uwchradd ffenestr, yr wyf yn gweld allbwn print def. 864 00:37:58,010 --> 00:38:01,080 Ac yn awr mae'n rhaid i mi wneud penderfyniad gan fod y rhaglennydd. 865 00:38:01,080 --> 00:38:04,360 Gallaf cam dros y llinell hon o cod, gweithredu, ond nid 866 00:38:04,360 --> 00:38:06,220 mynd yn chwilfrydig ynghylch yr hyn sydd y tu mewn. 867 00:38:06,220 --> 00:38:11,130 Neu gall Fi 'n weithredol gamu i mewn iddo ac yn mynd y tu mewn o Swap ei hun. 868 00:38:11,130 --> 00:38:12,340 Felly, gadewch i ni wneud yr olaf. 869 00:38:12,340 --> 00:38:15,550 >> Gadewch i mi fynd yn ei flaen a chliciwch Nid yw Cam Dros ond Step Into. 870 00:38:15,550 --> 00:38:17,300 Rhybudd, yn sydyn newidiadau ffenestr 871 00:38:17,300 --> 00:38:19,330 i dynnu sylw at y cyntaf llinell o god yn Swap. 872 00:38:19,330 --> 00:38:20,710 Dyna llinell 21. 873 00:38:20,710 --> 00:38:25,220 Ac yn awr, pa fath o ffynci yw bod, os ydych yn edrych dros yma, yn ôl y disgwyl, 874 00:38:25,220 --> 00:38:29,720 coma a b yn 1 a 2, yn y drefn honno. 875 00:38:29,720 --> 00:38:33,840 Pam fod dros dro 32,767? 876 00:38:33,840 --> 00:38:36,560 Gan gofio hynny dros dro, yn debyg iawn y cwpan gwag eiliad yn ôl, 877 00:38:36,560 --> 00:38:38,980 ei ddatgan yma ar y llinell 21. 878 00:38:38,980 --> 00:38:43,390 Pam 32,000- Yr wyf yn golygu, pam mae 'i jyst rhywfaint o werth rhyfedd? 879 00:38:43,390 --> 00:38:43,890 Yeah? 880 00:38:43,890 --> 00:38:45,190 >> GYNULLEIDFA: Nid yw'n ymgychwyn. 881 00:38:45,190 --> 00:38:46,940 >> DAVID J. Malan: Mae'n Nid yw wedi'i ymgychwyn. 882 00:38:46,940 --> 00:38:49,370 Felly ein cyfrifiadur bob amser Mae gan gof corfforol. 883 00:38:49,370 --> 00:38:50,544 Mae bob amser wedi RAM corfforol. 884 00:38:50,544 --> 00:38:52,710 Ac mae bob amser yn sero ac un sydd yn yno, dde? 885 00:38:52,710 --> 00:38:54,626 Oherwydd ein bod yn defnyddio ein cyfrifiadur drwy'r dydd, 886 00:38:54,626 --> 00:38:57,210 ydych chi'n defnyddio'r CS50 IDE neu'r gweinyddion drwy'r dydd hir. 887 00:38:57,210 --> 00:39:01,159 Er mwyn i RAM naill ai ganddo rai sero neu rhyw un neu rai sero a rhai. 888 00:39:01,159 --> 00:39:02,950 Ni waeth pa un a nad ydych yn eu defnyddio. 889 00:39:02,950 --> 00:39:05,270 Nid ydych yn gallu cael yn wag mannau lle rydych am ddarnau. 890 00:39:05,270 --> 00:39:06,850 Maent yn naill ai sero a rhai. 891 00:39:06,850 --> 00:39:09,610 >> Felly, mae'n troi allan y temp, oherwydd Nid ydym wedi initialized eto, 892 00:39:09,610 --> 00:39:14,580 mae gennym y rhai 32 o ddarnau, ond nid ydynt i wedi wedi'i ymgychwyn i unrhyw werthoedd hysbys. 893 00:39:14,580 --> 00:39:18,110 Felly, beth bynnag y maent yn fwyaf a ddefnyddiwyd yn ddiweddar for-- 32 rhai bits-- 894 00:39:18,110 --> 00:39:23,000 rydym yn jyst yn gweld y arteffactau rhai defnydd blaenorol o'r rhai 32 arbennig 895 00:39:23,000 --> 00:39:23,500 darnau. 896 00:39:23,500 --> 00:39:27,780 Cyn gynted ag yr wyf yn clicio Camu Dros fodd bynnag, phew, temp yn mynd i gael y gwerth 1. 897 00:39:27,780 --> 00:39:31,600 Ac os wyf yn ei wneud eto, mae hwn yn mynd i gael ei roi gwerth 2 898 00:39:31,600 --> 00:39:33,830 ac yna b yn mynd i yn cael y gwerth 1. 899 00:39:33,830 --> 00:39:36,390 >> Ac felly beth braf nawr ar y pwynt hwn yn y stori 900 00:39:36,390 --> 00:39:39,750 yw bod y dadnamydd yn yn dangos i mi, super araf 901 00:39:39,750 --> 00:39:42,640 yn fy cyflymder eich hun, beth cyflwr Swap yw. 902 00:39:42,640 --> 00:39:47,490 Ond yn sylwi ar y brig yma, rhybudd bod y pentwr galw mewn gwirionedd 903 00:39:47,490 --> 00:39:49,180 Mae dwy haen iddo. 904 00:39:49,180 --> 00:39:53,240 Nawr bod y un sy'n cael ei amlygu fel Swap, os wyf yn clicio ar Main lle hynny, 905 00:39:53,240 --> 00:39:57,100 yn sylwi sut y mae'r newidynnau lleol yn newid oherwydd gall y datblygwr yn unig hop 906 00:39:57,100 --> 00:39:59,740 o gwmpas ac yn mynd i mewn i unrhyw le gwahanol. 907 00:39:59,740 --> 00:40:04,070 Felly, er ein bod yn gwneud hyn oll yn gweithio a chyfnewid yn gywir aab, 908 00:40:04,070 --> 00:40:09,080 os byddaf yn mynd yn ôl ac ymlaen rhwng Swap lle mae yn 2 a b yw 1 a Main, 909 00:40:09,080 --> 00:40:11,851 wedi cael Main cael ei effeithio o gwbl? 910 00:40:11,851 --> 00:40:12,350 Na 911 00:40:12,350 --> 00:40:13,930 Felly beth yw'r prydau parod yma? 912 00:40:13,930 --> 00:40:18,200 Wel, mae'n ymddangos fod unrhyw adeg byddwch yn ffonio swyddogaeth fel Swap, 913 00:40:18,200 --> 00:40:21,600 ac yr ydych yn ei throsglwyddo dadleuon, beth eich bod yn pasio i'r swyddogaeth Swap 914 00:40:21,600 --> 00:40:24,730 yn yr achos hwn yn gopi o ddadleuon hynny. 915 00:40:24,730 --> 00:40:28,620 Felly, os x ac y yn y drefn honno bob 32 darnau, pa Swap yn mynd yn 916 00:40:28,620 --> 00:40:30,760 yn lleol dwy newydd newidynnau, neu ddadleuon, 917 00:40:30,760 --> 00:40:34,380 a elwir yn a b-- ond dyna'r fympwyol names-- ond mae'r patrwm o zeros 918 00:40:34,380 --> 00:40:39,520 a rhai tu mewn i a a b yn trefnu i fod yn union x ac y 919 00:40:39,520 --> 00:40:42,610 ond nid yw'r ydynt un peth â x ac y. 920 00:40:42,610 --> 00:40:46,880 >> Mae'n fel pe bai Main yn ei gael ar ei ddarn o papur rhif 1 a 2 ar gyfer x ac y, 921 00:40:46,880 --> 00:40:49,260 ac yna pan mae'n dwylo bod darn o bapur i gyfnewid, 922 00:40:49,260 --> 00:40:51,970 Swap gyflym iawn yn cael ei pen ei hun, yn ysgrifennu i lawr 923 00:40:51,970 --> 00:40:56,240 1 a 2 ar ei ben ei hun ddalen o bapur, dwylo cefnogi'r xy gwreiddiol i Main 924 00:40:56,240 --> 00:40:58,790 ac yna gwneud ei hun beth sydd â a b. 925 00:40:58,790 --> 00:41:01,940 Ac mae hyn yn awr yn super bwysig oherwydd gan hyn oblygiadau nontrivial 926 00:41:01,940 --> 00:41:06,260 am gwirionedd yn ysgrifennu cod cywir oherwydd y byddai'n ymddangos na allwn ni gyfnewid 927 00:41:06,260 --> 00:41:07,500 dau newidyn. 928 00:41:07,500 --> 00:41:09,150 >> Rwyf wedi ysgrifennu swyddogaeth Cyfnewid gywir. 929 00:41:09,150 --> 00:41:12,770 Rydyn ni wedi rhoi ar waith gyda Lauren fel swyddogaeth cyfnewid gywir mewn gwirionedd, 930 00:41:12,770 --> 00:41:16,700 ond mae'n debyg dim o hynny materion os nad ydych yn gallu mewn gwirionedd 931 00:41:16,700 --> 00:41:19,530 gyfnewid dau werth yn barhaol. 932 00:41:19,530 --> 00:41:21,970 Felly mae angen ffordd arall i gael mewn gwirionedd ar hyn, 933 00:41:21,970 --> 00:41:24,472 ac mae angen i ni fod yn gallu mewn gwirionedd yn datrys y broblem hon. 934 00:41:24,472 --> 00:41:27,180 Ac mae'n troi out-- a byddwn yn dod yn ôl i'r llun arbennig hwn 935 00:41:27,180 --> 00:41:30,500 cyn long-- mae hyn yn un ffordd y efallai y byddwch yn tynnu cof eich cyfrifiadur. 936 00:41:30,500 --> 00:41:31,460 Mae'n dim ond petryal. 937 00:41:31,460 --> 00:41:32,960 Gallech dynnu unrhyw sawl ffordd ond mae'n 938 00:41:32,960 --> 00:41:35,740 gyfleus i dynnu fel petryal am y rheswm canlynol. 939 00:41:35,740 --> 00:41:40,040 >> Rydym yn mynd i ddechrau heddiw a thu hwnt siarad am y pentwr fel y'u gelwir. 940 00:41:40,040 --> 00:41:43,870 Ac mae'r pentwr yn unig yw dalp o RAM-- darn o memory-- 941 00:41:43,870 --> 00:41:47,100 bod swyddogaethau yn cael mynediad i pan fyddant yn eu galw. 942 00:41:47,100 --> 00:41:49,800 Ac felly mae'n ymddangos fod yn waelod y pentwr hwn 943 00:41:49,800 --> 00:41:53,590 yw lle i gyd Main yn newidynnau lleol a org C a V org a'r holl bethau hynny 944 00:41:53,590 --> 00:41:56,950 yn mynd i fynd yn ddiofyn. Ac os Main yn galw rhyw swyddogaeth eraill fel Swap, 945 00:41:56,950 --> 00:42:00,330 yn dda, Swap yn mynd i gael un arall haen o gof i fyny uwch ei ben. 946 00:42:00,330 --> 00:42:04,490 >> Ac felly dim ond i roi frysiog cyflym i chi llun o hyn, os byddaf yn mynd dros Yma-- 947 00:42:04,490 --> 00:42:09,450 a gadewch i mi adlewyrchu'r hyn ar y uwchben fel well-- yr hyn mewn gwirionedd yr wyf wedi, 948 00:42:09,450 --> 00:42:12,100 os ydym yn gofalu dim ond am y waelod y llun hwn am y tro, 949 00:42:12,100 --> 00:42:15,070 yw bod pan fyddaf yn cynnal rhaglen a Main cael ei alw, 950 00:42:15,070 --> 00:42:18,330 Prif Rhoddir darn o RAM yn fy chyfrifiadur sydd yn 951 00:42:18,330 --> 00:42:20,060 ar waelod y hyn a elwir yn simnai. 952 00:42:20,060 --> 00:42:22,143 Ac yr wyf i'n mynd i dynnu ei yn fwriadol fel sgwâr. 953 00:42:22,143 --> 00:42:24,540 Felly mae fel 32 o ddarnau neu bedwar bytes. 954 00:42:24,540 --> 00:42:28,790 Ac os yw hyn yn brif swyddogaeth mae gan newidyn a elwir x gyda gwerth o 1 955 00:42:28,790 --> 00:42:32,626 ac mae ganddo enw newidyn y gyda gwerth o 2, dyna 956 00:42:32,626 --> 00:42:35,750 fel cymryd sliver hwn o gof sy'n Prif wedi cael ei roi gan y gweithredu 957 00:42:35,750 --> 00:42:38,850 system ac yn ei rannu i fyny fel bod y newidyn lleol cyntaf yn mynd yma, 958 00:42:38,850 --> 00:42:40,930 mae'r ail un yn mynd yma, a dyna ni. 959 00:42:40,930 --> 00:42:45,590 >> Pan fydd Main galwadau Swap, Swap yn cael ei tafell ei hun o gof 960 00:42:45,590 --> 00:42:48,280 y byddwn yn tynnu fel hyn oddi wrth y system weithredu, 961 00:42:48,280 --> 00:42:50,820 ac mae'n mynd i gael ei yn seiliedig ar newidynnau lleol eu hunain 962 00:42:50,820 --> 00:42:53,825 ar ein gweithredu yn gynt gyda newidynnau lleol 963 00:42:53,825 --> 00:42:58,010 a b y lle cyntaf cael y gwerthoedd 1 a 2. 964 00:42:58,010 --> 00:43:00,450 Ond wedyn, cyn gynted ag y y cod Swap executes, 965 00:43:00,450 --> 00:43:03,760 a Lauren mewn gwirionedd cyfnewidiadau y OJ a llaeth, beth sy'n digwydd? 966 00:43:03,760 --> 00:43:09,030 Wel, mae hyn yn 2 yn dod yn 1, mae hyn yn 1 yn dod yn 2, a, gyda llaw, 967 00:43:09,030 --> 00:43:13,360 mae newidyn dros dro sy'n cael ei Defnyddir yr amser cyfan yn y pen draw 968 00:43:13,360 --> 00:43:14,470 yn mynd i ffwrdd. 969 00:43:14,470 --> 00:43:16,720 Ond does dim ots faint o waith rydych yn ei wneud 970 00:43:16,720 --> 00:43:22,160 yn y llinell hon o- yn y gofod hwn cof, x ac y yn gwbl heb eu cyffwrdd. 971 00:43:22,160 --> 00:43:26,320 >> Felly mae angen rhyw ffordd o roi Swap a swyddogaethau yn ei hoffi 972 00:43:26,320 --> 00:43:32,640 mynediad cudd, os mynnwch, i swyddogaethau like-- i gof fel x ac y. 973 00:43:32,640 --> 00:43:35,110 Felly, gadewch i ni edrych ar enghraifft sy'n helpu 974 00:43:35,110 --> 00:43:38,220 ni weld yn union beth sydd wedi bod mynd ar y tro cyfan. 975 00:43:38,220 --> 00:43:40,284 Rydw i'n mynd i fynd yn ei flaen ac yn agor i fyny Cymharu Zero. 976 00:43:40,284 --> 00:43:42,200 Ac yr wyf i'n mynd i gau ein dadnamydd, dw i'n mynd 977 00:43:42,200 --> 00:43:44,360 i gau'r hyn neges frawychus edrych yr unig dywed, arhoswch funud, 978 00:43:44,360 --> 00:43:45,800 ydych yn y debugging canol. 979 00:43:45,800 --> 00:43:48,383 Rydw i'n mynd i guddio y tab hwn yma dim ond i fynd yn ôl i'r symlrwydd. 980 00:43:48,383 --> 00:43:50,160 Felly peidiwch â phoeni os GDB ei ladd. 981 00:43:50,160 --> 00:43:53,910 Mae hynny'n ei olygu yw bod y rhaglen wedi bod rhoi'r gorau iddi, yn fwriadol yn yr achos hwn, 982 00:43:53,910 --> 00:43:54,820 gan i mi. 983 00:43:54,820 --> 00:43:57,700 >> Ac yn awr Cymharwch Zero yn gwneud hyn. 984 00:43:57,700 --> 00:44:00,110 Im 'yn arfer y CS50 llyfrgell yn I safonol / O. 985 00:44:00,110 --> 00:44:04,319 Mae gen i brif swyddogaeth sy'n gyntaf yn dweud, yn dweud rhywbeth, ac yn cael llinyn. 986 00:44:04,319 --> 00:44:06,110 Yna, yn dweud ei fod unwaith eto ac yn cael llinyn arall. 987 00:44:06,110 --> 00:44:09,910 Ac yn sylwi bod y ddau linyn yn cael eu galw s a t, yn y drefn honno. 988 00:44:09,910 --> 00:44:12,910 Ac yn awr y rhaglen hon, Cymharu Zero, ei bwrpas mewn bywyd, 989 00:44:12,910 --> 00:44:15,470 mae'n fod i ddweud wrthyf, wnes i deipio yr un peth? 990 00:44:15,470 --> 00:44:16,910 Ac felly yr wyf i'n mynd yn ôl i wythnos un. 991 00:44:16,910 --> 00:44:19,950 Im 'yn arfer fy gweithredwr cyfartal cyfartal sef y gweithredwr ansawdd. 992 00:44:19,950 --> 00:44:22,220 Nid y gweithredwr aseiniad, gweithredwr cydraddoldeb. 993 00:44:22,220 --> 00:44:23,890 Im 'jyst yn cymharu s a t. 994 00:44:23,890 --> 00:44:27,470 >> Felly gadewch i ni mewn gwirionedd yn mynd yn ei flaen ac yn gwneud hyn. 995 00:44:27,470 --> 00:44:32,680 Ac yr wyf i'n mynd i fynd yn ei flaen ac yn gwneud Cymharwch Zero. 996 00:44:32,680 --> 00:44:35,110 Rydw i'n mynd i wneud ./comparezero. 997 00:44:35,110 --> 00:44:37,150 Ac yr wyf i'n mynd i fynd ymlaen llaw a dweud rhywbeth 998 00:44:37,150 --> 00:44:43,450 fel, gadewch i ni wneud mom mewn llythrennau bach a beth am mom yn priflythyren. 999 00:44:43,450 --> 00:44:45,034 Ac wrth gwrs yr wyf yn teipio pethau gwahanol. 1000 00:44:45,034 --> 00:44:45,533 Iawn. 1001 00:44:45,533 --> 00:44:46,570 Dyna i'w ddisgwyl. 1002 00:44:46,570 --> 00:44:47,640 >> Gadewch i ni redeg eto. 1003 00:44:47,640 --> 00:44:49,740 Mae'r ddau amseroedd yn gwneud llythrennau bach, llythrennau bach. 1004 00:44:49,740 --> 00:44:51,490 Sy'n edrych super union yr un fath i mi. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 IAWN. 1007 00:44:53,430 --> 00:44:55,804 Efallai mai dim ond rhyfedd oherwydd bod nid yw'n hoffi fy gramadeg. 1008 00:44:55,804 --> 00:44:59,930 Felly, gadewch i ni wneud yn MOM cyfalaf, cyfalaf MOM, union yr un fath. 1009 00:44:59,930 --> 00:45:01,490 Gwahanol bethau. 1010 00:45:01,490 --> 00:45:03,907 >> Felly pam yw bod? 1011 00:45:03,907 --> 00:45:06,240 Wel, beth sy'n mynd mewn gwirionedd ar dan y cwfl yma? 1012 00:45:06,240 --> 00:45:08,180 Felly gadewch i ni fynd yn ôl dros yma am ychydig funudau'n 1013 00:45:08,180 --> 00:45:10,910 ac ystyried beth GetString yn ei wneud mewn gwirionedd. 1014 00:45:10,910 --> 00:45:13,385 Pan fyddwch yn ffonio GetString, dyna swyddogaeth yr ydym 1015 00:45:13,385 --> 00:45:16,510 ein hunain ysgrifennu ac mae rhywsut yn cael dilyniant o gymeriadau o'r defnyddiwr. 1016 00:45:16,510 --> 00:45:20,280 A gadewch i ni dybio bod y cyntaf amser Rwy'n galw GetString, sy'n rhoi i mi 1017 00:45:20,280 --> 00:45:21,930 darn o gof sy'n edrych fel hyn. 1018 00:45:21,930 --> 00:45:26,990 Ac os wyf yn teipio ym mhob llythrennau bach m-o-m-- a'r hyn sy'n mynd ar ei ôl? 1019 00:45:26,990 --> 00:45:28,840 Dim ond gwiriad bwyll cyflym. 1020 00:45:28,840 --> 00:45:29,780 >> Sero slaes. 1021 00:45:29,780 --> 00:45:30,510 Rydym yn gwybod hynny. 1022 00:45:30,510 --> 00:45:32,784 A dwyn i gof bod yn chwarae o gwmpas gyda enw Zamila yn 1023 00:45:32,784 --> 00:45:34,950 a bagad o enwau eraill pan oedd Rob yn edrych yma 1024 00:45:34,950 --> 00:45:36,280 ar yr hyn sy'n mynd ymlaen y tu mewn o gof. 1025 00:45:36,280 --> 00:45:37,780 Er mwyn i stori yn union yr un fath. 1026 00:45:37,780 --> 00:45:40,160 Dyma beth GetString yn dychwelyd i mi. 1027 00:45:40,160 --> 00:45:44,780 Yn awr, fy cod funud yn ôl ei storio mae'r gwerth dychwelyd GetString 1028 00:45:44,780 --> 00:45:47,510 mewn newidyn a elwir s. 1029 00:45:47,510 --> 00:45:51,390 Ac yna yr ail waith gelwais ef, ei storio mewn newidyn a elwir t. 1030 00:45:51,390 --> 00:45:55,070 >> Felly os dwi'n mynd dros yma, mae angen i mi i dynnu hwn variable-- lleol 1031 00:45:55,070 --> 00:45:59,610 ac rwy'n gyffredinol yn mynd i tynnu llinyn fel just-- ydym chi helpu 1032 00:45:59,610 --> 00:46:02,360 alw s-- cyn lleied sgwâr yma. 1033 00:46:02,360 --> 00:46:09,760 Ac yn awr, somehow-- sut mae mom fynd y tu mewn o hyn s amrywiol? 1034 00:46:09,760 --> 00:46:12,010 Wel, mae angen i ni fynd yn ôl i egwyddorion cyntaf yma. 1035 00:46:12,010 --> 00:46:15,660 Yr hyn sydd ei GetString mewn gwirionedd yn dychwelyd? 1036 00:46:15,660 --> 00:46:19,030 >> Felly, mae'n troi allan y M-O-M slaes sero, ac unrhyw rif 1037 00:46:19,030 --> 00:46:22,364 o linynnau eraill er cof fel Zamila a Rob neu Andy neu unrhyw bobl eraill, 1038 00:46:22,364 --> 00:46:24,280 wrth gwrs yn ein RAM neu gof cyfrifiadur. 1039 00:46:24,280 --> 00:46:27,760 Ac mae eich RAM wedi like-- gennych gig o RAM, dau gigs o RAM, 1040 00:46:27,760 --> 00:46:30,860 neu biliwn neu dau biliwn o bytes, neu efallai hyd yn oed yn fwy y dyddiau hyn. 1041 00:46:30,860 --> 00:46:34,070 Felly gadewch i ni dybio, ar gyfer dibenion heddiw, nad yw o bwys sut rydym yn rhifo 1042 00:46:34,070 --> 00:46:36,640 iddynt, ond gallwn rifo pob o'r rhai biliwn neu dau biliwn o 1043 00:46:36,640 --> 00:46:37,880 neu i bedwar biliwn o bytes. 1044 00:46:37,880 --> 00:46:42,240 >> A gadewch i ni jyst fympwyol dweud bod hwn yw'r brathiad cyntaf, ail brathu, 1045 00:46:42,240 --> 00:46:43,380 drydydd, pedwerydd. 1046 00:46:43,380 --> 00:46:46,570 Yn fwriadol Dydw i ddim yn defnyddio sero ar gyfer heddiw, ond byddwn yn dod yn ôl at hynny. 1047 00:46:46,570 --> 00:46:49,570 Felly, mewn geiriau eraill, os yw hyn yn y tro cyntaf Im 'yn arfer y rhaglen, 1048 00:46:49,570 --> 00:46:52,715 Im 'jyst yn mynd yn lwcus a'r cyntaf brathiad yw mewn un lleoliad, yna dau 1049 00:46:52,715 --> 00:46:53,590 Yna tair na phedair. 1050 00:46:53,590 --> 00:46:57,430 Ac os wyf yn cadw arlunio, rhif blwch Byddai dau biliwn o fod yn ffordd dros yma. 1051 00:46:57,430 --> 00:47:02,200 >> Felly beth yn eich barn chi, yna, GetString mewn gwirionedd yn dychwelyd? 1052 00:47:02,200 --> 00:47:06,010 Dyw hi ddim yn dychwelyd M-O-M slaes sero fel y cyfryw gan fod yn glir 1053 00:47:06,010 --> 00:47:08,180 Ni fydd yn ffitio yn y blwch fy mod wedi tynnu. 1054 00:47:08,180 --> 00:47:11,210 Felly, beth arall a allai GetString mewn gwirionedd yn dychwelyd yr holl wythnosau hyn? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Yr ateb yw ar y bwrdd yma yn rhywle. 1057 00:47:16,820 --> 00:47:20,390 Ni allwch ffitio M-O-M slaes sero, felly beth allai wneud synnwyr yn lle hynny? 1058 00:47:20,390 --> 00:47:23,424 Petai'n rhaid i chi fod yn super glyfar, gan roi ar yr het peirianneg fel y'i gelwir, 1059 00:47:23,424 --> 00:47:24,340 hyn y gallech ddychwelyd? 1060 00:47:24,340 --> 00:47:27,340 Beth yw swm lleiaf o wybodaeth gallech ddychwelyd y byddai dal i 1061 00:47:27,340 --> 00:47:30,610 gadael i chi ddod o hyd i M-O-M yn y cof? 1062 00:47:30,610 --> 00:47:31,270 Yeah? 1063 00:47:31,270 --> 00:47:31,950 >> GYNULLEIDFA: Un. 1064 00:47:31,950 --> 00:47:32,200 >> DAVID J. Malan: Un. 1065 00:47:32,200 --> 00:47:33,021 A pham un? 1066 00:47:33,021 --> 00:47:35,520 GYNULLEIDFA: Oherwydd y byddai'n dweud chi ble i fynd [Anghlywadwy]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 DAVID J. Malan: Yn union. 1069 00:47:39,390 --> 00:47:44,300 Yr wyf yn mynd i ddychwelyd y cyfeiriad y llinyn yr wyf wedi gotten. 1070 00:47:44,300 --> 00:47:46,570 Gall y cyfeiriad yn hyn achos yn lleoliad un. 1071 00:47:46,570 --> 00:47:51,280 Felly beth sydd wir yn cael ei storio yn s-- a phob newidyn llinyn felly far-- 1072 00:47:51,280 --> 00:47:53,430 wedi newydd fod y cyfeiriad y llinyn. 1073 00:47:53,430 --> 00:47:57,840 >> Yn y cyfamser, os galwaf GetString yr eildro, ac rwy'n 1074 00:47:57,840 --> 00:48:03,300 teipiwch llythrennol yr un thing-- M-O-M gyda lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 a slaes arall sero, ac erbyn hyn efallai fy rhaglen 1076 00:48:06,200 --> 00:48:09,820 bod yn rhedeg ers peth amser felly efallai hwn yw 10, mae hyn yn lleoliad 11, mae hyn yn 12, 1077 00:48:09,820 --> 00:48:10,700 mae hyn yn 13. 1078 00:48:10,700 --> 00:48:13,590 Mae'r cyfrifiaduron defnyddio rhai eraill cof am ba reswm bynnag. 1079 00:48:13,590 --> 00:48:18,172 Yr hyn yn awr yn mynd yn fy ail yn amrywiol o ran fy rhaglen t? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Yn union. 1082 00:48:20,050 --> 00:48:23,910 >> Ac felly pan fyddwn yn edrych ar y cod ffynhonnell y rhaglen hon 1083 00:48:23,910 --> 00:48:26,550 lle dwi'n syml yn ceisio i gymharu'r ddau werth, 1084 00:48:26,550 --> 00:48:32,180 yn s hafal cyfartal i t, beth sydd yr ateb dynol amlwg? 1085 00:48:32,180 --> 00:48:34,890 Dim ond nid oes gan 1 Nid yw gyfartal 10. 1086 00:48:34,890 --> 00:48:36,861 Ac felly yma yn gorwedd yn cyfle i ni mewn gwirionedd 1087 00:48:36,861 --> 00:48:39,610 i ddim ond mynd yn ôl i'r, unwaith eto, yn gyntaf egwyddorion a meddwl am, yn dda, 1088 00:48:39,610 --> 00:48:41,110 beth sy'n mynd ymlaen o dan y cwfl? 1089 00:48:41,110 --> 00:48:43,240 Rydyn ni wedi bod yn siarad am darnau a bytes a chof, 1090 00:48:43,240 --> 00:48:46,820 ond mewn gwirionedd mae'n ddefnyddiol i ddeall oherwydd pan fyddwch yn ffonio GetString, 1091 00:48:46,820 --> 00:48:50,280 er ein bod yn meddwl am ei fod yn dychwelyd M-O-M neu mom llinyn 1092 00:48:50,280 --> 00:48:53,120 neu Andy neu Zamila neu yn y blaen, yn dechnegol 1093 00:48:53,120 --> 00:48:55,510 'i' jyst yn dychwelyd y cyfeiriad y darn o gof. 1094 00:48:55,510 --> 00:48:56,910 >> Ond mae hynny'n iawn. 1095 00:48:56,910 --> 00:49:00,570 Oherwydd sut ydw i'n gwybod lle y llinyn yn dod i ben? 1096 00:49:00,570 --> 00:49:03,840 Os ydw i'n dim ond o ystyried y dechrau? 1097 00:49:03,840 --> 00:49:05,380 Wel, mae'r slaes sero, dde? 1098 00:49:05,380 --> 00:49:08,800 Dim ond mewn amser llinol gallaf argraffwch gyda phrint def M-O-M. 1099 00:49:08,800 --> 00:49:11,820 A chyn gynted ag yr wyf yn gweld slaes sero, nid wyf yn poeni ble i mi ddechrau, 1100 00:49:11,820 --> 00:49:14,950 Rwyf eisoes yn gwybod yn ymhlyg lle mae angen i mi ddod i ben. 1101 00:49:14,950 --> 00:49:18,700 >> Ac felly heddiw yn nodi beginning-- a gadewch i mi wneud hyn yn sylweddol oherwydd ein 1102 00:49:18,700 --> 00:49:21,800 aeth trwy lawer o drafferth i gael y rhain hyfforddiant wheels-- yma 1103 00:49:21,800 --> 00:49:29,840 felly heddiw mae'r olwynion hyfforddiant yn dechrau i ddod oddi ar ac rydym yn datgelu leiaf-- 1104 00:49:29,840 --> 00:49:31,373 >> [Cymeradwyaeth] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Dyna oedd yn werth y daith i dargedu y bore yma, ie? 1107 00:49:36,160 --> 00:49:39,600 Felly now-- oes, mae'n troi allan, oes y fath beth â llinyn. 1108 00:49:39,600 --> 00:49:41,140 Nid yw Llinynnol yn bodoli. 1109 00:49:41,140 --> 00:49:43,760 Mae'n cyfystyr yr ydym wedi cael du mewn y llyfrgell CS50. 1110 00:49:43,760 --> 00:49:48,660 O hyn allan, rydyn ni'n mynd i ddechrau galw s a t Nid yw llinynnau ond sêr torgoch. 1111 00:49:48,660 --> 00:49:51,180 A seren torgoch ydym chi helpu canfod ar wahân cyn bo hir. 1112 00:49:51,180 --> 00:49:53,510 Ond mae hyn yn ei ddweud, bod hyd yn oed os byddwn yn parhau 1113 00:49:53,510 --> 00:49:56,180 gan ddefnyddio GetString am y tro, dechnegol dylwn 1114 00:49:56,180 --> 00:49:59,010 yn dweud seren torgoch a'r seren torgoch. 1115 00:49:59,010 --> 00:50:01,720 >> Ac mae'n troi allan yr hyn y seren yn mynd i ddynodi yn rhywbeth 1116 00:50:01,720 --> 00:50:04,340 a elwir yn pwyntydd neu gyfeiriad. 1117 00:50:04,340 --> 00:50:06,110 Ac yn wir, mae ymlid ar gyfer yr hyn sydd i ddod 1118 00:50:06,110 --> 00:50:09,760 mae hyn yn 20 eiliad clip oddi wrth ein cyfaill Nick Parlante yn Stanford 1119 00:50:09,760 --> 00:50:12,927 sydd, yn eithaf beth amser yn ôl, yn treulio swm chwerthinllyd o amser, 1120 00:50:12,927 --> 00:50:15,010 fel y gorau gallaf ddweud yn ei cegin neu ei islawr, 1121 00:50:15,010 --> 00:50:17,140 gan wneud claymation cyflwyno i'r byd 1122 00:50:17,140 --> 00:50:20,010 cymeriad o'r enw Binky byddwn yn â hwy 1123 00:50:20,010 --> 00:50:22,010 yn cael eu cyflwyno y tro nesaf i awgrymiadau. 1124 00:50:22,010 --> 00:50:24,588 Felly dyma yn rhagolwg o'r hyn sydd i ddod. 1125 00:50:24,588 --> 00:50:26,370 >> [VIDEO Playback] 1126 00:50:26,370 --> 00:50:27,510 >> -Hey, Binky. 1127 00:50:27,510 --> 00:50:28,260 Deffro. 1128 00:50:28,260 --> 00:50:30,672 Mae'n amser am hwyl pwyntydd. 1129 00:50:30,672 --> 00:50:31,616 >> -Beth yw hwnna? 1130 00:50:31,616 --> 00:50:33,032 Dysgu am awgrymiadau? 1131 00:50:33,032 --> 00:50:34,450 O, nwyddau. 1132 00:50:34,450 --> 00:50:35,431 >> [DIWEDD Playback] 1133 00:50:35,431 --> 00:50:38,055 DAVID J. Malan: Ac ar y nodyn hwnnw, byddwn yn eich gweld ar ddydd Mercher. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Iawn. 1136 00:50:48,090 --> 00:50:48,740 Pwy 'di dawnsio? 1137 00:50:48,740 --> 00:50:49,240 Dewch ar. 1138 00:50:49,240 --> 00:50:50,330 Pwy 'di dawnsio? 1139 00:50:50,330 --> 00:50:51,820 Ydych am i mi gael iddo ddechrau? 1140 00:50:51,820 --> 00:50:53,770 Byddaf yn cael ei ddechrau. 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: ffansi Sweet Moses.