1 00:00:00,000 --> 00:00:02,200 [Powered by Google Translate] [Wythnos 3] 2 00:00:02,200 --> 00:00:03,950 [David J. Malan - Harvard University] 3 00:00:03,950 --> 00:00:07,140 [Mae hyn yn CS50. - CS50.TV] 4 00:00:07,140 --> 00:00:10,720 Gadewch i mi llywio i ni yn y cyfeiriad o ble rydym yn gadael i ffwrdd tro diwethaf, 5 00:00:10,720 --> 00:00:13,890 a oedd yn dechrau meddwl ychydig yn fwy na thua cystrawen 6 00:00:13,890 --> 00:00:17,150 ac yn ceisio meddwl ychydig yn llai am bob un y manylion pitw 7 00:00:17,150 --> 00:00:20,630 sy'n cymryd ychydig o amser i acclimate i hyd yn hyn o ran hanner colon 8 00:00:20,630 --> 00:00:22,360 a cromfachau a braces cyrliog, 9 00:00:22,360 --> 00:00:25,630 i ddechrau cymryd pethau ychydig i lefel uwch cysyniadol 10 00:00:25,630 --> 00:00:28,800 fel bod y problemau yr ydym yn awr yn dechrau datrys dros yr wythnosau nesaf nifer 11 00:00:28,800 --> 00:00:32,340 yn mynd i gynnwys llawer mwy o broblemau lefel uwch cysyniadol 12 00:00:32,340 --> 00:00:36,310 ac ychydig yn llai yn y cystrawennol wrth i chi gael eich traed gwlyb 13 00:00:36,310 --> 00:00:40,090 a rhowch eich dwylo budr gyda rhai o'r gystrawen o'r ychydig wythnosau diwethaf. 14 00:00:40,090 --> 00:00:43,690 >> Felly, yn cofio bod yr wythnos diwethaf, cyflwynwyd y syniad o amrywiaeth. 15 00:00:43,690 --> 00:00:49,320 A gall amrywiaeth yn Saesneg yn cael ei ddisgrifio fel beth? >> [Anghlywadwy ymateb y myfyrwyr] 16 00:00:49,320 --> 00:00:51,710 Mae'n ddrwg gennym? 17 00:00:51,710 --> 00:00:54,810 Casgliad o? >> [Anghlywadwy ymateb y myfyrwyr] >> Iawn, da. 18 00:00:54,810 --> 00:00:57,820 Casgliad o eitemau. Felly, rydym yn gweld araeau yn Scratch. 19 00:00:57,820 --> 00:01:01,880 Os ydych yn digwydd i'w ddefnyddio ar gyfer pset 0 un o Scratch rhestrau y gallwch llusgo pethau 20 00:01:01,880 --> 00:01:05,410 fel orennau a bananas i mewn, rhestr o ryw fath, 21 00:01:05,410 --> 00:01:07,100 sy'n fath o fel hyn y mae amrywiaeth yn. 22 00:01:07,100 --> 00:01:10,980 Ac yna yn fwy technegol, yng nghyd-destun cyfrifiadur go iawn, 23 00:01:10,980 --> 00:01:14,730 arae yn syml, yn dalp cyffiniol o gof. 24 00:01:14,730 --> 00:01:18,590 Mewn geiriau eraill, mae gennych beit, yna arall beit, yna arall beit, yna arall beit, 25 00:01:18,590 --> 00:01:21,330 ac os ydych yn tynnu y rhai bytes mewn llun, 26 00:01:21,330 --> 00:01:24,510 byddent yn gefn wrth gefn wrth gefn wrth gefn. Dyna beth a olygwn wrth cyffiniol. 27 00:01:24,510 --> 00:01:26,690 >> Felly mae'n rhif beit 1, yna 2, yna 3. 28 00:01:26,690 --> 00:01:29,680 Nid yw'n golygu yma, hyd yma, i fyny yma, i fyny yma. 29 00:01:29,680 --> 00:01:33,800 Mae amrywiaeth yn dalp cyffiniol o 0 neu fwy o bytes. 30 00:01:33,800 --> 00:01:36,160 Felly, beth ydynt ddefnyddiol ar gyfer? 31 00:01:36,160 --> 00:01:40,090 Cofio inni gael y math hwnnw o esiampl contrived o raddau cwis pobl storio mewn rhaglen 32 00:01:40,090 --> 00:01:42,580 i gyfrifo eich cyfartaledd cwis ar gyfer rhai cyrsiau, 33 00:01:42,580 --> 00:01:46,780 a dwyn i gof y gallem ddechrau ysgrifennu y rhaglen honno drwy ddatgan quiz1 amrywiol. 34 00:01:46,780 --> 00:01:49,550 Yna, gallem gael newidyn arall o'r enw quiz2. 35 00:01:49,550 --> 00:01:52,030 Ond yna os roedd 3 cwisiau yn y dosbarth hwn, quiz4. 36 00:01:52,030 --> 00:01:55,710 Neu os oedd cwis wythnosol, byddai'n quiz5, quiz6, quiz7. 37 00:01:55,710 --> 00:01:58,520 Felly, byddech yn cael yr holl newidynnau hyn datgan y tu mewn o brif 38 00:01:58,520 --> 00:02:00,470 neu rywle arall yn eich rhaglen, 39 00:02:00,470 --> 00:02:03,870 ac mae'r broblem gyda'r dull hwnnw, yn hawdd er ei bod ydy at jyst adysgrifia a bastio, 40 00:02:03,870 --> 00:02:06,120 a yw'n dim ond yn gyflym yn dod yn anhylaw. 41 00:02:06,120 --> 00:02:09,360 Duw a'n gwaredo rhag i chi mewn gwirionedd gennych 30 cwisiau neu 50 cwisiau. 42 00:02:09,360 --> 00:02:12,080 Os mae fel cwis pop yr ysgol bob dydd arddull yn uchel, 43 00:02:12,080 --> 00:02:15,910 Yna, os oes gen ti restr chwerthinllyd hir o newidynnau yn cael eu datgan, 44 00:02:15,910 --> 00:02:17,780 ac mae hyn yn unig yn gyflym iawn mynd allan o reolaeth. 45 00:02:17,780 --> 00:02:20,820 Mae'n hyll, mae'n anodd i'w cynnal, mae'n llawer haws i wneud typo 46 00:02:20,820 --> 00:02:23,910 os ydych yn cael rhif 1 gamdeipio'r enw rhywle yn eich rhaglen. 47 00:02:23,910 --> 00:02:26,800 >> Felly, rydym yn cyflwyno'r syniad o amrywiaeth yn lle hynny. 48 00:02:26,800 --> 00:02:30,760 Ac yn cofio i ni weithredu rhaglen hon drwy wneud rhywbeth bach fel hyn. 49 00:02:30,760 --> 00:02:33,950 Gadewch i mi fynd i mewn i cyfeiriadur heddiw Ffynhonnell Dydd Llun 3 50 00:02:33,950 --> 00:02:37,160 ac yn agor i fyny amrywiaeth, a gwelsom y tro diwethaf. 51 00:02:37,160 --> 00:02:39,940 A hyd yn oed er nad oedd ychydig o driciau newydd C yma, 52 00:02:39,940 --> 00:02:41,920 yn eu plith y syniad o gyson, 53 00:02:41,920 --> 00:02:47,140 cofio ein bod yn datgan fflotiau lluosog yn y bôn trwy ddefnyddio'r chystrawen: 54 00:02:47,140 --> 00:02:51,750 arnofio, yna enw'r newidyn, yna rydym yn defnyddio braces sgwâr mewn gwirionedd am y tro cyntaf, 55 00:02:51,750 --> 00:02:55,450 a'r hyn a wnaethom y tu mewn o'r rhai braces sgwâr i bob pwrpas yn rhoi rhif. 56 00:02:55,450 --> 00:02:59,780 Ond yn hytrach na rhoi nifer, yr wyf yn rhoi y gair hwn gyfalafu, cwisiau. 57 00:02:59,780 --> 00:03:03,220 A beth oedd y cymhelliant ar gyfer rhoi gair gyfalafu fel cwisiau 58 00:03:03,220 --> 00:03:08,170 ac yna gan ddefnyddio tric 17 llinell yma i mewn gwirionedd yn rhoi bod nifer? 59 00:03:08,170 --> 00:03:11,240 Beth oedd y cymhelliant yno? Yeah. 60 00:03:11,240 --> 00:03:13,360 >> [Ymateb y myfyrwyr Anghlywadwy] >> Yn union. 61 00:03:13,360 --> 00:03:16,630 Os ydym am newid y gwerth 2, rydym dim ond ei newid mewn 1 lle 62 00:03:16,630 --> 00:03:19,680 oherwydd ystyried - nid wyf ddim hyd yn oed gofio beth wnaeth y rhaglen hon yn union, 63 00:03:19,680 --> 00:03:22,040 ond os ydych yn unig sgimio fyddwch yn gweld Cwisiau, posau. 64 00:03:22,040 --> 00:03:24,720 Byddwch yn gweld Cwisiau, i lawr yma yn fwy cwisiau. 65 00:03:24,720 --> 00:03:28,180 Felly, os nad oedd gennym y cyson, mae'r defnydd o finiog diffinio, 66 00:03:28,180 --> 00:03:33,320 byddem wedi teipio 2, yna 2, yna 2, yna 2, sy'n iawn. Byddai'n yr un mor gywir. 67 00:03:33,320 --> 00:03:36,220 Ond mae'n debyg y flwyddyn nesaf mae gennym 3 cwisiau yn CS50. 68 00:03:36,220 --> 00:03:39,190 Felly, rhaid i mi fynd a diweddaru'r cod, rhaid i mi ail-grynhoi hynny, 69 00:03:39,190 --> 00:03:43,820 ond y broblem yw os wyf yn gwneud rhywbeth twp, fel yr wyf yn edrych dros 1 sôn o 2 70 00:03:43,820 --> 00:03:46,750 ac anghofio i blygio mewn 3, gallai'r rhaglen gyfan yn dda iawn torri. 71 00:03:46,750 --> 00:03:48,720 Felly, rydym yn unig yn gofyn am drwbl. 72 00:03:48,720 --> 00:03:53,170 >> Felly, y syniad o gyson yn ymwneud â ffactoreiddio nodi rhai darn o ddata, 73 00:03:53,170 --> 00:03:56,070 boed yn llinyn neu golosg neu arnofio neu beth bynnag, 74 00:03:56,070 --> 00:04:00,070 ac yn datgan ei fod 1 lle fel y gallwch yn haws ei newid yn y dyfodol. 75 00:04:00,070 --> 00:04:03,660 Ac mae hefyd yn dweud y gwir, ychydig yn haws i'w ddarllen oherwydd os ydych yn unig yn meddwl am hyn yn awr, 76 00:04:03,660 --> 00:04:07,840 mae'n Cwisiau, neu gallem hyd yn oed ailenwi rhywbeth fel NUMBER_OF_QUIZZES 77 00:04:07,840 --> 00:04:09,430 neu rywbeth mwy penodol. 78 00:04:09,430 --> 00:04:11,830 Mae'r cod yn unig yn dod yn ychydig yn fwy amlwg o ran yr hyn y mae'n ei wneud, 79 00:04:11,830 --> 00:04:15,780 ac rydych yn meddwl ychydig yn llai beth allai ddigwydd rhif 2 i olygu. 80 00:04:15,780 --> 00:04:18,920 Felly, yr cyson oedd unrhyw beth i'w wneud sylfaenol gyda arrays. 81 00:04:18,920 --> 00:04:22,990 Mae amrywiaeth ei gyflwyno gan ffordd y braces sgwâr. 82 00:04:22,990 --> 00:04:26,610 >> Felly, yn sylwi bod yn llinell 23 byddwn yn gofyn i'r defnyddiwr, "Beth oedd eich sgôr cwis?" 83 00:04:26,610 --> 00:04:31,120 Yna, rydym yn unig yn cael y ddolen yn ôl pob golwg yn gofyn i'r defnyddiwr ar gyfer eu graddau. Sut? 84 00:04:31,120 --> 00:04:37,460 Mae'n ailadrodd 0-2. Ac yr wyf yn dweud 2 oherwydd cwisiau yn yr holl gapiau ar hyn o bryd 2. 85 00:04:37,460 --> 00:04:42,310 Felly, mae'n ailadrodd o 0 hyd at 2 ac yna bydd yn argraffu allan Cwis # rywbeth o rywbeth, 86 00:04:42,310 --> 00:04:45,830 ac yna y mae'n eu defnyddio GetFloat i gael gwerth o'r defnyddiwr. 87 00:04:45,830 --> 00:04:49,050 Felly sylwi ar hyn yw'r unig ddarn arall newydd o gystrawen o ddydd Mercher diwethaf. 88 00:04:49,050 --> 00:04:53,120 Os ydych am storio rhywbeth mewn lleoliad penodol yn y array, 89 00:04:53,120 --> 00:04:55,460 chi eto defnyddiwch y cromfachau sgwâr. 90 00:04:55,460 --> 00:04:57,030 >> Felly mae 'na dipyn o ddeuoliaeth yma. 91 00:04:57,030 --> 00:04:59,040 Y tro cyntaf y byddwch yn defnyddio'r cromfachau sgwâr 92 00:04:59,040 --> 00:05:02,250 ydych yn ei ddefnyddio i nodi pa mor fawr ydych am i'r amrywiaeth fod. 93 00:05:02,250 --> 00:05:06,580 Ond y cyd-destun nesaf yma lle rydym unwaith eto yn cyflogi hyn cromfachau sgwâr 94 00:05:06,580 --> 00:05:10,540 golygu lle yn y casgliad ydych chi am roi rhywfaint o werth? 95 00:05:10,540 --> 00:05:13,650 A gall y gwahaniaeth yma yn cael ei gasglu o gyd-destun. 96 00:05:13,650 --> 00:05:17,130 Hysbysiad yma mae gennym fath data, yna mae gennym enw newidyn, 97 00:05:17,130 --> 00:05:20,770 Yna, rydym wedi ein braces sgwâr gyda nifer y tu mewn, hanner colon. Dyna ni. 98 00:05:20,770 --> 00:05:22,290 Felly dyna datganiad. 99 00:05:22,290 --> 00:05:28,390 Mae'n union fel petaem wedi gwneud rhywbeth fel arnofio Gradd 1, arnofio Gradd 2; 100 00:05:28,390 --> 00:05:31,730 ond eto, mae hyn yn gyflym iawn yn datganoli i gopi ffordd gormod, past, 101 00:05:31,730 --> 00:05:34,260 felly yn lle rydym yn unig yn syml gan fel y cyfryw, 102 00:05:34,260 --> 00:05:38,800 sy'n golygu o hyn ymlaen mae gennym gradd y gellir ei storio yn braced 0, 103 00:05:38,800 --> 00:05:41,760 mae gennym arall gradd y gellir eu storio yn braced 1, 104 00:05:41,760 --> 00:05:46,890 ond beth os wyf goof ac, er enghraifft, fy ddolen yn mynd hyd yn hyn - 105 00:05:46,890 --> 00:05:48,740 er enghraifft, yr wyf yn gwneud hyn yn llai na neu'n hafal i, 106 00:05:48,740 --> 00:05:50,620 sy'n galw i gof oedd y ffynhonnell nam blaenorol - 107 00:05:50,620 --> 00:05:55,590 sydd i bob pwrpas yn golygu bod ar rai fersiwn damweiniol traean o'r hyn dolen 108 00:05:55,590 --> 00:06:00,380 Rwy'n defnyddio braced 2. I bob pwrpas, yr hyn a allai ddigwydd yma? Mae'n ddrwg gennym? 109 00:06:00,380 --> 00:06:02,860 [Myfyrwyr] Mae'n mynd i gael eu disodli. >> A yw'n mynd i gael ei ddisodli? 110 00:06:02,860 --> 00:06:04,520 Beth fyddai'n cael ei ddisodli? 111 00:06:04,520 --> 00:06:10,890 Mae hyn yn llythrennol yn ei ddweud lle'r hyn sydd yn y lleoliad 2 gyda'r gwerth dychwelyd GetFloat. 112 00:06:10,890 --> 00:06:13,690 Ond y broblem yw pa mor fawr yw'r amrywiaeth yn y fan hon yn y stori? 113 00:06:13,690 --> 00:06:17,730 [Ymateb y myfyrwyr Anghlywadwy] >> Mae'r amrywiaeth yn dal i fod yn unig o maint 2 114 00:06:17,730 --> 00:06:22,730 oherwydd yr amrywiaeth, fel unrhyw newidyn, ei ddatgan yn gyntaf, cyn i ni ei ddefnyddio, 115 00:06:22,730 --> 00:06:27,220 ac rydym yn nodi yma oherwydd hyn cyson bod gen i 2 radd fy mod i'n mynd i roi. 116 00:06:27,220 --> 00:06:29,930 >> Ond cofiwch, mae'r gwyddonwyr cyfrifiadurol yn dechrau cyfrif o 0. 117 00:06:29,930 --> 00:06:33,620 Felly, y lleoliad cyntaf yn y casgliad yn braced 0. 118 00:06:33,620 --> 00:06:40,210 Y lleoliad nesaf yw 1. Mae hyn yn peth yn erioed mor ychydig yn rhy bell drosodd i'r ochr. 119 00:06:40,210 --> 00:06:42,870 Felly, mewn geiriau eraill, os wyf mewn gwirionedd yn cael y casgliad - 120 00:06:42,870 --> 00:06:46,790 a gadewch i mi weld pa mor dda y cydweithio yma i ni - 121 00:06:46,790 --> 00:06:52,360 os oes gennyf amrywiaeth yr wyf wedi tynnu yn syml fel a ganlyn 122 00:06:52,360 --> 00:06:56,750 ac rwyf wedi neilltuo lle ar gyfer 2 elfen, efallai y byddwn yn tynnu hyn fel hyn mewn cof 123 00:06:56,750 --> 00:06:58,020 lle mae hyn cynfas gwyn mawr yw. 124 00:06:58,020 --> 00:07:00,920 Dim ond y RAM sydd gennyf yn fy nghyfrifiadur, a gig o RAM, 2 gigs o RAM, beth bynnag, 125 00:07:00,920 --> 00:07:05,400 ond y 2 flwch bellach yn unigol yn cynrychioli fflôt, 32 did. 126 00:07:05,400 --> 00:07:10,860 Felly, os wyf yn rhoi rhif 1 yma fel 1.0, yna yr wyf yn rhoi rhif arall yma, fel 3.2 127 00:07:10,860 --> 00:07:15,280 ond yna yr wyf yn ei wneud braced 2, dyna fel rhoi rhywbeth yma. 128 00:07:15,280 --> 00:07:17,820 Ac fel y llun yn awgrymu, nid oes dim byd yno. 129 00:07:17,820 --> 00:07:20,450 Mae'n fath o fel dir neb oherwydd nid wyf wedi gofyn i'r system weithredu 130 00:07:20,450 --> 00:07:23,550 i roi i mi y cwis drydydd. 131 00:07:23,550 --> 00:07:26,940 Os ydw i ddim eisiau bod cwis parti, dylai'r wyf wedi cael y feddwl ymlaen llaw 132 00:07:26,940 --> 00:07:31,700 i ofyn i'r system weithredu ar ei gyfer gan ddatgan cwisiau i fod yn 2 Nid 133 00:07:31,700 --> 00:07:34,210 ond i yn hytrach cyfartal 3. 134 00:07:34,210 --> 00:07:39,000 >> Felly, mewn geiriau eraill, mae'r darlun sydd gennym yn effeithiol gael o law yn edrych fel hyn yma. 135 00:07:39,000 --> 00:07:42,260 Mae hyn eto yn dir neb. Nid ydym yn well ceisio ysgrifennu gwerthoedd yma. 136 00:07:42,260 --> 00:07:45,300 Ond unwaith eto, gwyddonwyr cyfrifiadurol oherwydd cyfrif o 0, 137 00:07:45,300 --> 00:07:49,520 pan fyddwn yn sôn am y lleoliad hwn yn yr amrywiaeth, sy'n fod i fod yn lleoliad 0, 138 00:07:49,520 --> 00:07:53,890 mae hyn yn dybiedig i fod yn lleoliad 1, ac nid yw hyn yn bodoli hyd yn oed 139 00:07:53,890 --> 00:07:57,380 gan mai dim ond gofyn i'r system weithredu ar gyfer 2 le o'r fath. 140 00:07:57,380 --> 00:08:00,130 Felly, y rhai ohonoch sydd â phrofiad blaenorol rhaglennu o ieithoedd eraill 141 00:08:00,130 --> 00:08:04,150 efallai yn gwybod nad yw hyn yn wir bob amser gyda arae neu bethau o'r enw fectorau. 142 00:08:04,150 --> 00:08:06,930 Yn hytrach, gallwch barhau i ychwanegu ac yn ychwanegu ac ychwanegu pethau i arrays, 143 00:08:06,930 --> 00:08:10,720 sydd, a dweud y gwir, cawsom y gallu yn Scratch ac eto rydym yn ymddangos i wedi rhoi i fyny yma 144 00:08:10,720 --> 00:08:15,160 oherwydd gyda C ydych yn rhaglennu yn llawer mwy penodol. 145 00:08:15,160 --> 00:08:17,980 Dim ond chi a'r cyfrifiadur ar hyn o bryd, ac mae'r cyfrifiadur yn unig yn mynd i wneud 146 00:08:17,980 --> 00:08:19,530 hyn a ddywedwch iddo ei wneud. 147 00:08:19,530 --> 00:08:24,270 Felly, os ydych ond yn dweud i roi chi 2 fflotiau drwy gyfrwng llinell 22 yma, 148 00:08:24,270 --> 00:08:27,640 dyna'r cyfan ydych yn mynd i fynd yn ôl oddi wrth y system weithredu: lle i 2. 149 00:08:27,640 --> 00:08:34,049 >> Felly, yn gynyddol yn cael eu eich rhaglenni yn mynd i weithiau fod yn buggy o ran araeau. 150 00:08:34,049 --> 00:08:37,520 Mae hyn yn unig fath o natur y bwystfil lle mae pob un ohonom yn ffaeledig, 151 00:08:37,520 --> 00:08:42,490 ac ar ryw adeg byddwch mynegai debygol iawn y tu hwnt i ffin eich casgliad. 152 00:08:42,490 --> 00:08:45,980 A dim ond ffordd ffansi o ddweud i chi fynd i mewn i rywbeth braced 153 00:08:45,980 --> 00:08:49,970 a rhywbeth oedd yn rhy fawr o nifer. Rydych yn mynd y tu hwnt i ffiniau eich casgliad. 154 00:08:49,970 --> 00:08:51,530 Ond y upside yn awr yw hyn. 155 00:08:51,530 --> 00:08:54,990 Mae gweddill y rhaglen hon yn wir wedi dim sylfaenol i'w wneud gyda arrays. 156 00:08:54,990 --> 00:08:58,180 Mae'n i gyd yn unig am rai rhifyddeg syml ar gyfer cyfartaleddau cyfrifiadurol. 157 00:08:58,180 --> 00:09:03,200 Felly mae gennym yma yn hyn ar gyfer dolen yma yn gyntaf a swm amrwyiol yn enw ein bod yn ymgychwyn i 0. 158 00:09:03,200 --> 00:09:09,020 Yna, rydym yn ailadrodd o 0 hyd at 2 eto ac rydym yn ychwanegu at y newidyn symiant 159 00:09:09,020 --> 00:09:12,620 y radd ith, felly braced 0 yna braced 1. 160 00:09:12,620 --> 00:09:15,130 Ac yna fel y byddech yn ei wneud yn yr ysgol radd i gyfrifo cyfartaledd, 161 00:09:15,130 --> 00:09:19,420 rydym yn syml yn cymryd y swm, ei rannu gan y nifer cyfanswm o gwisiau, 162 00:09:19,420 --> 00:09:22,520 ac yna ar gyfer mesur da yr ydym yn galw swyddogaeth yma a elwir yn rownd. 163 00:09:22,520 --> 00:09:28,580 >> Yn awr, wrth fynd heibio, beth yw'r ddelio â hyn int cromfachau ar llinell 34? 164 00:09:28,580 --> 00:09:31,730 Efallai ei fod wedi dod i fyny yn barod yn adran, wedi siarad digon amdano yn ffurfiol yma, 165 00:09:31,730 --> 00:09:35,210 ond beth yw hyn int mewn parens yn ôl pob tebyg yn ei wneud? >> [Anghlywadwy ymateb y myfyrwyr] 166 00:09:35,210 --> 00:09:38,500 Yeah, mae hyn yn cyfeirio at castio neu stereoteipio, 167 00:09:38,500 --> 00:09:41,690 sy'n golygu cymryd 1 Data math a drosi i un arall. 168 00:09:41,690 --> 00:09:45,400 Ni allwch wneud hyn gyda phob math ddata oherwydd weithiau byddai hi braidd yn rhyfedd. 169 00:09:45,400 --> 00:09:49,640 Ond yn yr achos hwn, os yw gwerth dychwelyd rownd yn arnofio 170 00:09:49,640 --> 00:09:53,880 oherwydd, wedi'r cyfan, rwy'n cymryd arnofio a'i rannu gan nifer fel 2, 171 00:09:53,880 --> 00:09:55,840 Rydw i'n mynd i fynd yn ôl fflôt. 172 00:09:55,840 --> 00:10:00,760 Ond nid yw pobl ysgol radd yn wir yn hoffi gwybod bod eu gyfartaledd oedd 93.4 173 00:10:00,760 --> 00:10:04,420 oherwydd fe wna nhw sylweddoli eu bod erioed mor agos at fod 95 pwynt talgrynnu. 174 00:10:04,420 --> 00:10:09,540 >> Felly, rydym am yn hytrach defnyddiwch int i rownd pawb i'r int agosaf, 175 00:10:09,540 --> 00:10:12,730 sydd yn yr achos yn mynd i yn 94 heb unrhyw fan ar ei ôl. 176 00:10:12,730 --> 00:10:14,530 Felly dyna dim ond tric mathemategol bach. 177 00:10:14,530 --> 00:10:17,570 A byddwn yn dod yn ôl at y syniad o fwrw oherwydd bydd yn cael goblygiadau, 178 00:10:17,570 --> 00:10:21,640 os nad ydych eisoes wedi darganfod, ar gyfer problem gosod 2. 179 00:10:21,640 --> 00:10:25,210 Felly, arae, yna, gallwch chi feddwl - mae'n mynd i wneud i mi wenu drwy'r dydd. 180 00:10:25,210 --> 00:10:27,830 Mae'n edrych fel hyn os ydych yn tynnu llun ohono, 181 00:10:27,830 --> 00:10:31,460 ond yr allwedd yw bod y maint yn cael ei ddewis hefyd gan eich 182 00:10:31,460 --> 00:10:34,050 pan fyddwch yn gofyn oddi wrth y system weithredu. 183 00:10:34,050 --> 00:10:39,460 Unrhyw gwestiynau yna ar rhesi? Yeah. 184 00:10:39,460 --> 00:10:47,080 [Gwestiwn myfyrwyr Anghlywadwy] 185 00:10:47,080 --> 00:10:49,310 Ah, cwestiwn da. 186 00:10:49,310 --> 00:10:53,150 Y cwestiwn yw beth sy'n digwydd i'r y 0 null yn yr amrywiaeth? Nid yw'n bodoli yn y cyd-destun. 187 00:10:53,150 --> 00:10:57,430 Mai dim ond yn bodoli yng nghyd-destun llinynnau, yr ydym chi ar fin i ddod i mewn dim ond hyn o bryd. 188 00:10:57,430 --> 00:11:02,300 Ond ar gyfer amrywiaeth, fel yn yr achos hwn, y cyfan a gewch yn yr hyn yr ydych yn gofyn i'r system gweithredu ar gyfer. 189 00:11:02,300 --> 00:11:04,050 >> Ac fel o'r neilltu, fel na byddo hyn fod yn aneglur, 190 00:11:04,050 --> 00:11:07,030 Rwy'n cadw yn dweud i chi ofyn y system weithredu, gofynnwch i'r system weithredu. 191 00:11:07,030 --> 00:11:10,090 Mae system weithredu, fel y gwyddoch mae'n debyg, yw Mac OS, Windows, Linux. 192 00:11:10,090 --> 00:11:13,560 Pan fyddwch chi'n ffonio swyddogaethau fel GetFloat 193 00:11:13,560 --> 00:11:19,280 neu os ydych yn datgan newidynnau fel graddau, 194 00:11:19,280 --> 00:11:23,200 ar ddiwedd y dydd yr ydych yn effeithiol gofyn i rywun arall i roi y cof 195 00:11:23,200 --> 00:11:25,940 oherwydd ein bod yn dyheu rhaglenwyr 196 00:11:25,940 --> 00:11:28,800 oes ganddynt unrhyw syniad sut i mewn gwirionedd yn cael mynediad corfforol i gof. 197 00:11:28,800 --> 00:11:31,100 Ond mae rhywun yn ei wneud: y system weithredu. 198 00:11:31,100 --> 00:11:36,630 Felly, ar wahân i ni gyflwyno gydag eiconau 'n bert a bwydlenni a ffolderi ac yn y blaen 199 00:11:36,630 --> 00:11:39,050 a welwch ar eich bwrdd gwaith, boed yn Mac neu PC, 200 00:11:39,050 --> 00:11:42,240 systemau gweithredu hefyd yn gwneud y pethau cyffredin ar lefel isel, 201 00:11:42,240 --> 00:11:44,680 y pethau dechnegol iawn o reoli'r gigabyte 202 00:11:44,680 --> 00:11:48,780 neu 2 gigabeit o gof sydd gennych, reoli'r CPU sydd gennych, ac yn y blaen. 203 00:11:48,780 --> 00:11:50,170 Felly, pan fyddwch yn ysgrifennu cod, 204 00:11:50,170 --> 00:11:53,900 ydych wirioneddol yn bacho i mewn i'ch system weithredu yn yr ystyr honno. 205 00:11:53,900 --> 00:11:55,720 Rydw i'n mynd i gael i leihau hynny. Mae pob hawl. 206 00:11:55,720 --> 00:11:59,980 >> Gwestiynau eraill am araeau? 207 00:12:00,330 --> 00:12:02,520 Na? Iawn. 208 00:12:02,520 --> 00:12:06,680 Felly, y newid naturiol o araeau mewn gwirionedd i bwnc sydd ychydig yn gyfarwydd. 209 00:12:06,680 --> 00:12:09,570 Ac rydym yn edrych erioed mor fyr ar hyn o bryd diwethaf hefyd. 210 00:12:09,570 --> 00:12:12,500 Roedd hon yn enghraifft llinyn o ddydd Mercher. 211 00:12:12,500 --> 00:12:15,060 Mae'r enghraifft hon yn llinyn yn rhaglen eithaf syml, 212 00:12:15,060 --> 00:12:18,120 ac rydw i wedi symleiddio mewn gwirionedd gan bâr o linellau ar gyfer dibenion heddiw. 213 00:12:18,120 --> 00:12:22,680 Mae pob mae'n ei wneud yn unol 19 yn cael llinyn gan y defnyddiwr, ei storio mewn newidyn a elwir s. 214 00:12:22,680 --> 00:12:28,670 Yna, yn ymlaen llinell 22 mae'n debyg argraffu 1 a llinyn cymeriad fesul llinell. 215 00:12:28,670 --> 00:12:30,730 Ond sut y mae'n gwneud hyn? 216 00:12:30,730 --> 00:12:33,350 Rydym yn datgan i amrywiol, gan ei gosod hafal i 0, 217 00:12:33,350 --> 00:12:35,770 ac mae hyn yn dod yn hen arferiad yn awr. 218 00:12:35,770 --> 00:12:39,270 Nid ydym wedi gweld y tan ddydd Mercher, ond gallwch fath o casglu oddi wrth ei enw 219 00:12:39,270 --> 00:12:44,610 strlen dim ond yn dychwelyd yr hyn pan roddir s? Mae hyd y llinyn. 220 00:12:44,610 --> 00:12:47,940 Felly, os ydw i'n pasio ei fod yn llinyn, dyfynnwch-unquote DAVID, 221 00:12:47,940 --> 00:12:51,810 mae'n gobeithio mynd i ddychwelyd i mi y nifer 5 oherwydd DAVID. 222 00:12:51,810 --> 00:12:55,600 Felly dyna ei bwrpas mewn bywyd yw cymryd llinyn, p'un a chodio caled gan eich 223 00:12:55,600 --> 00:12:58,840 neu yn yr achos hwn blygio i mewn fel newidyn, fel dadl, 224 00:12:58,840 --> 00:13:01,980 ac mae'n ffigurau allan beth yw hyd y llinyn yn. 225 00:13:01,980 --> 00:13:06,470 >> Felly dyma nawr rydym ni'n benthyg rhywfaint o nodiant gan yr enghraifft cwis blaenorol. 226 00:13:06,470 --> 00:13:09,390 Mae hyn wedi ddim i'w wneud gyda fflotiau, wedi ddim i'w wneud â cwisiau, 227 00:13:09,390 --> 00:13:13,100 ond mae'n troi allan fod y celwydd gwyn bach rydym wedi bod yn dweud wrthych ers wythnos 1 228 00:13:13,100 --> 00:13:16,330 yw nad yw llinyn yn bodoli mewn gwirionedd yn C. 229 00:13:16,330 --> 00:13:20,230 Mae llinyn ar ddiwedd y dydd yn wirioneddol yn unig arae. 230 00:13:20,230 --> 00:13:25,140 Mae'n amrywiaeth o bytes, felly beit, beit, beit, beit, a oedd yn galw i gof yn unig yw 8 did, 231 00:13:25,140 --> 00:13:28,130 felly darn o gof, darn o gof, darn o gof, darn o gof. 232 00:13:28,130 --> 00:13:31,210 A'r modd y llinyn yn cael ei weithredu 233 00:13:31,210 --> 00:13:33,070 yw drwy roi cymeriad cyntaf yma, 234 00:13:33,070 --> 00:13:37,470 yna yma, yna yma, yna yma, gefn wrth gefn wrth gefn er cof y cyfrifiadur. 235 00:13:37,470 --> 00:13:42,160 Felly, os ydych eisiau i sillafu allan gair fel HELO, byddech yn rhoi cymeriad 1 H, 236 00:13:42,160 --> 00:13:48,240 Yna, E, yna i'r Ch ac yna i'r Ch, yna O - 5 nod i gyd - rhywle yn RAM eich cyfrifiadur. 237 00:13:48,240 --> 00:13:52,080 Ond mae'r manylion allweddol yma yw eu bod yn mynd i fod yn gefn wrth gefn wrth gefn i gefn, 238 00:13:52,080 --> 00:13:54,200 dde nesaf at ei gilydd. 239 00:13:54,200 --> 00:13:58,820 Pan pan fyddaf yn dweud s [i], beth yn Saesneg yw hyn yn rhoi i mi? 240 00:14:01,240 --> 00:14:04,550 Beth mae s [i] cynrychioli yn yr achos hwn? Yeah. 241 00:14:04,550 --> 00:14:07,800 >> [Myfyrwyr] Y cymeriad ith yn y llinyn. >> Yn union. Mae cymeriad ith yn y llinyn. 242 00:14:07,800 --> 00:14:12,260 Yn awr, i yn mynd i ddechrau ar 0 yn unol fy gyfer ddolen yma, 243 00:14:12,260 --> 00:14:14,850 ond mae hynny'n dda oherwydd mae popeth yn dechrau cyfrif o 0. 244 00:14:14,850 --> 00:14:19,160 Felly s [0] yn mynd i gynrychioli'r H llythyr mewn gair fel HELO, 245 00:14:19,160 --> 00:14:24,530 s [1] yn mynd i gynrychioli llythyr fel E mewn gair fel HELO, ac yn y blaen. 246 00:14:24,530 --> 00:14:27,130 A beth rydym yn ymddangos i fod yn ei wneud ar bob fersiwn o hwn yn ddolen 247 00:14:27,130 --> 00:14:32,780 yn cael ei storio dros dro cymeriad ith mewn newidyn a elwir yn c, sydd ychydig golosg, 248 00:14:32,780 --> 00:14:35,010 ac yna rydym yn argraffu c 249 00:14:35,010 --> 00:14:37,620 felly ar ddiwedd y dydd beth mae hyn yn rhaglen yn ei wneud yw y canlynol. 250 00:14:37,620 --> 00:14:42,900 Os byddaf yn mynd i mewn i'r cyfeiriadur ffynhonnell ac rwy'n gwneud string1 ac rwy'n mynd yn ei flaen ac yn rhedeg string1, 251 00:14:42,900 --> 00:14:51,920 ac yna mi deipio gair fel HELO, Mewnbynnu, i gyd mae'n ei wneud yw argraffu'r gymeriad 1 ar y tro. 252 00:14:51,920 --> 00:14:54,010 >> Felly, mae cyfle i fireinio yma. 253 00:14:54,010 --> 00:14:58,150 Rwy'n fath o wneud mwy o waith, hyd yn oed er ei fod yn fwy eglur efallai y modd hwn, nag sydd raid. 254 00:14:58,150 --> 00:15:03,270 Pa linell o god yma yn ôl pob tebyg daflu i ffwrdd yn gyfan gwbl? Yeah. 255 00:15:03,270 --> 00:15:08,290 Llinell 24. Yn llinell 24 Rwy'n datgan c amrywiol. 256 00:15:08,290 --> 00:15:14,320 Rwy'n storio cymeriad ith y sydd ynddo, ond yna rwy'n ei ddefnyddio c yma. 257 00:15:14,320 --> 00:15:20,160 Felly rwy'n defnyddio c, felly yr wyf yn teimlo fel na all Fi jyst daflu i ffwrdd llinell 24. 258 00:15:20,160 --> 00:15:23,850 [Myfyriwr yn Anghlywadwy] >> Yn union. 259 00:15:23,850 --> 00:15:26,240 Felly, pan ddaw i siarad am y cynllunio rhaglenni, 260 00:15:26,240 --> 00:15:30,740 sylwi ar hyn symleiddio ychydig o'r cod, sydd yr un mor ddarllenadwy, 261 00:15:30,740 --> 00:15:34,680 ond yn sylweddoli fod ef yn unig newidyn, y math o ddata yn array, 262 00:15:34,680 --> 00:15:38,610 felly s [i] yn unig yn mynd i yn syth i chi ddychwelyd y cymeriad ith yn y llinyn. 263 00:15:38,610 --> 00:15:40,620 Ac os ydych chi am ei argraffu, mae hynny'n iawn. 264 00:15:40,620 --> 00:15:43,680 Mae'n rhaid i chi ddefnyddio c% oherwydd nad ydych yn argraffu llinyn, 265 00:15:43,680 --> 00:15:48,520 eich bod yn argraffu cymeriad mewn llinyn, ac mae hyn hefyd yn cael yr effaith o argraffu cymeriad ith. 266 00:15:48,520 --> 00:15:51,390 Ac yn dwyn i gof yr unig wahaniaeth mewn gwirionedd ers yr wythnos diwethaf gyda defnyddio printf 267 00:15:51,390 --> 00:15:54,220 yw bod ond yn ystod yr wythnosau diwethaf y byddem yn gwneud rhywbeth super syml 268 00:15:54,220 --> 00:15:58,510 fel dalfan y% s yna enw'r llinyn yma, 269 00:15:58,510 --> 00:16:01,190 yn awr rydym yn deifio mewn ychydig yn ddyfnach o dan y cwfl a dweud, 270 00:16:01,190 --> 00:16:06,090 peidiwch ag argraffu y llinyn; argraffu'r cymeriad unigol ynddo. 271 00:16:06,090 --> 00:16:10,570 >> Felly, gallwn wneud rhywbeth ychydig yn wahanol yma oherwydd mae 1 arall - nid bug 272 00:16:10,570 --> 00:16:14,090 oherwydd bod y rhaglen hon yn iawn, ond fy mod yn gwneud rhywbeth twp 273 00:16:14,090 --> 00:16:16,810 y soniais amdanynt yn fyr ar ddydd Mercher. 274 00:16:16,810 --> 00:16:22,680 Ond wrth edrych yn ôl, gallai sut mae dyluniad y rhaglen hon yn cael ei gwella hyd yn oed ymhellach? Yeah. 275 00:16:22,680 --> 00:16:28,280 [Ymateb y myfyrwyr Anghlywadwy] >> O, yn dda. 276 00:16:28,280 --> 00:16:32,120 Felly, yn cofio inni gyflwyno newidyn 2 elwir n tro diwethaf, 277 00:16:32,120 --> 00:16:34,850 sy'n ymddangos i fod yn gwrth ein hunain oherwydd fy nod eiliad yn ôl 278 00:16:34,850 --> 00:16:37,380 yn unig oedd i daflu i ffwrdd newidyn yn ddiangen, 279 00:16:37,380 --> 00:16:40,700 ond dwyn i gof bod ar ddydd Mercher yr ydym mewn gwirionedd yn gwneud hyn. 280 00:16:40,700 --> 00:16:46,170 I newid y ddolen am i mewn gwirionedd yn cael coma yma, yna n = strlen, 281 00:16:46,170 --> 00:16:52,120 ac yna draw fan hyn wnes i 00:16:57,660 Beth yw'r cynnydd sylfaenol mod i'n cyflawni drwy newid fy initialization i hyn 283 00:16:57,660 --> 00:17:01,590 a fy nghyflwr i hyn nawr? >> [Anghlywadwy ymateb y myfyrwyr] >> Yn union. 284 00:17:01,590 --> 00:17:06,170 Dydw i ddim yn cofio strlen eto ac eto ac eto oherwydd dwyn i gof sut y ddolen ar gyfer gwaith. 285 00:17:06,170 --> 00:17:08,790 Hyd yn oed os ydynt yn dechrau cael mwy cymhleth-edrych, 286 00:17:08,790 --> 00:17:12,480 dwyn i gof bod y peth cyn y colon cyntaf yw y initialization, sy'n digwydd unwaith. 287 00:17:12,480 --> 00:17:14,359 Mae cyflwr, fodd bynnag, yn y canol, 288 00:17:14,359 --> 00:17:17,710 ac mae hyn yn cael ei gwirio bob tro y byddwch yn mynd drwy'r ddolen. 289 00:17:17,710 --> 00:17:22,420 >> Felly, mae'n fath o dwp i fod yn gofyn y cyfrifiadur yr un cwestiwn eto ac eto - 290 00:17:22,420 --> 00:17:25,920 Beth yw hyd y HELO? Beth yw hyd y HELO? Beth yw hyd y HELO? - 291 00:17:25,920 --> 00:17:29,740 oherwydd fel y byddwn yn gweld heddiw ac ar ddydd Mercher, mae hyn yn bendant yn mynd i gymryd amser, 292 00:17:29,740 --> 00:17:34,320 ac nid yw'n ddefnydd da iawn o amser oherwydd i chyfrif i maes hyd y llinyn 293 00:17:34,320 --> 00:17:37,030 mewn gwirionedd yn cymryd ychydig o ymdrech. 294 00:17:37,030 --> 00:17:39,760 Dyw hi ddim y pryd, fel y mae mewn rhai ieithoedd. 295 00:17:39,760 --> 00:17:43,920 Felly, drwy newid hyn i n, y pris rwy'n ei dalu yw beth? 296 00:17:43,920 --> 00:17:45,640 Rydym yn gweld fasnach-off yma. 297 00:17:45,640 --> 00:17:49,460 Gallaf arbed amser drwy beidio â gofyn y cwestiwn damn un fath eto ac eto, 298 00:17:49,460 --> 00:17:51,740 ond mae'n mynd i gostio i mi rhywbeth, sef yr hyn? 299 00:17:51,740 --> 00:17:55,050 >> [Myfyrwyr] Byddwch yn colli rhywfaint o gof. >> Yn union. Mae'n mynd i gostio i mi peth cof. 300 00:17:55,050 --> 00:17:56,670 Felly, yn yr achos hwn mae'n costio i mi beth? 301 00:17:56,670 --> 00:18:01,530 32 o ddarnau oherwydd n yn unig yw int, fel a awgrymir gan y int gair yma. 302 00:18:01,530 --> 00:18:03,300 Ond a yw hynny'n iawn? 303 00:18:03,300 --> 00:18:05,800 A dweud y gwir, mae hynny'n debyg iawn oherwydd os ydych yn meddwl am y peth, 304 00:18:05,800 --> 00:18:09,030 po hiraf y llinyn yw, y mwy o amser Rydw i'n mynd i fod yn gwastraffu 305 00:18:09,030 --> 00:18:11,920 oherwydd strlen yn mynd i cael eu galw unwaith eto ac eto ac eto 306 00:18:11,920 --> 00:18:13,520 ar gyfer pob iteriad y ddolen. 307 00:18:13,520 --> 00:18:18,070 Ac y dyddiau hyn, fy Mac wedi 2 gigs o RAM, mae'r diwrnod 4 gigs o RAM weithiau. 308 00:18:18,070 --> 00:18:22,420 Rwy'n meddwl y gallaf fforddio 4 o'r bytes i mewn gwirionedd gyflymu pethau. 309 00:18:22,420 --> 00:18:26,590 Ond mae hyn yn mynd i fod yn fasnach-off ac yn thema gwirioneddol mewn rhaglenni ac mewn gwyddoniaeth gyfrifiadurol 310 00:18:26,590 --> 00:18:28,320 o byth yn wir yn mynd unrhyw beth am ddim. 311 00:18:28,320 --> 00:18:32,880 Os ydych am wella rhywbeth yma, rhaid i chi dalu ar ei gyfer yn y llaw arall rhywsut. 312 00:18:32,880 --> 00:18:35,880 Gofod yn erbyn amser yn yr achos hwn. 313 00:18:35,880 --> 00:18:40,700 >> Felly, mae hyn yn i gyd yn arwain i fyny tuag at rywbeth cryptig fel hyn, 314 00:18:40,700 --> 00:18:44,070 sydd, fel chithau mae'n debyg cyfrifedig allan erbyn hyn, mewn gwirionedd yn dweud? 315 00:18:44,070 --> 00:18:47,420 [Ymateb y myfyrwyr Anghlywadwy] >> Yeah, felly mae hwn yn, Byddwch yn siwr i yfed eich Ovaltine, 316 00:18:47,420 --> 00:18:52,490 mewn gwirionedd gan ddefnyddio algorithm a elwir yn ROT13, ROT 1-3, 317 00:18:52,490 --> 00:18:55,500 a dim ond yn golygu cylchdroi pob un o'r llythyrau 13 o leoedd, 318 00:18:55,500 --> 00:18:58,720 sy'n golygu cymryd A ac yna ychwanegu 13 i iddo a mynd dot, dot, dot 319 00:18:58,720 --> 00:19:04,640 yr holl ffordd i'r llythyr 13eg i ffwrdd, yn gwneud yr un peth i B ac ar gyfer C a D ac yn y blaen. 320 00:19:04,640 --> 00:19:10,850 Ac felly os ydym mewn gwirionedd yn trosi hyn yma gan ddefnyddio symudiad o 13 o leoedd, 321 00:19:10,850 --> 00:19:14,580 byddwn yn mynd yn ôl yr hyn a oedd Ralphie bach, a oedd, Byddwch yn siwr i yfed eich Ovaltine. 322 00:19:14,580 --> 00:19:18,160 Ond yn awr ar gyfer problem gosod 2, yn y rhifyn safonol o leiaf, 323 00:19:18,160 --> 00:19:21,680 rhaid i chi math o gwneud hyn enciphering eich hun, 324 00:19:21,680 --> 00:19:25,990 a rhaid i ni rywsut gymryd mewnbwn fel hyn ac amgryptio neu ei dadgriptio. 325 00:19:25,990 --> 00:19:29,850 >> Felly, pa un o'r rhain yn fath hanfodion yn ein harwain at y cyfle hwnnw? 326 00:19:29,850 --> 00:19:32,650 Gadewch i ni edrych ar y drydedd enghraifft yma. 327 00:19:32,650 --> 00:19:38,430 Yn gyntaf oll, fe'i gelwir yn ASCII. Beth mae ASCII gyfeirio'n ôl at? 328 00:19:38,430 --> 00:19:40,460 Cod American Standard ar gyfer Cyfnewidfa Gwybodaeth, 329 00:19:40,460 --> 00:19:43,850 sy'n ffordd hir iawn o ddweud beth? Beth yw ASCII? 330 00:19:43,850 --> 00:19:47,890 [Ymateb y myfyrwyr Anghlywadwy] >> Beth sy'n bod? >> [Myfyrwyr] Mae map cymeriad. >> A map cymeriad. 331 00:19:47,890 --> 00:19:51,390 'I jyst mapio niferoedd i lythyrau oherwydd bod y byd wedi safoni 332 00:19:51,390 --> 00:19:55,380 beth fydd rhifau cynrychioli'r hyn llythyrau fel y gall pob un ohonom yn defnyddio cyfrifiaduron 333 00:19:55,380 --> 00:19:59,340 ac mae ein rhaglenni i gyd yn unig cyd-fynd pan ddaw i argraffu pethau ar y sgrin. 334 00:19:59,340 --> 00:20:04,680 Felly cofio bod 65 yn digwydd cynrychioli A, roedd 97 yn digwydd cynrychioli lythrennau bach a. 335 00:20:04,680 --> 00:20:08,510 Ac felly y rhaglen syml yma ASCII yn cymryd mantais o'r ffaith honno - 336 00:20:08,510 --> 00:20:12,770 bod y byd yn gwybod bod cyfalaf A yn 65 oed - ac mai dim ond argraffu'r mapio. 337 00:20:12,770 --> 00:20:16,320 >> Felly, cyn i ni plymio i mewn y Cod hwn, gadewch i mi yn lle agor ffenestr terfynell. 338 00:20:16,320 --> 00:20:21,550 Gadewch i mi fynd yn ei flaen ac yn gwneud ASCII, ac yna gadewch i ni dim ond yn rhedeg y peth yn unig i ddifetha yr allbwn. 339 00:20:21,550 --> 00:20:25,960 A 'i jyst yn gwneud hyn: siart mawr iawn mai dim ond dweud wrthyf yr holl godau amrywiol 340 00:20:25,960 --> 00:20:27,950 gyfer pob un o'r llythyrau amrywiol. 341 00:20:27,950 --> 00:20:32,100 Felly, mae rhaglen syml super, ond nid oedd rhaid i mi cod caled y rhai 52 llinellau o allbwn: 342 00:20:32,100 --> 00:20:34,860 26 priflythyren, 26 llythrennau bach. 343 00:20:34,860 --> 00:20:37,790 Yn lle hynny, yr wyf yn gwneud hyn programmatically gyda chwpl o ddolenni. 344 00:20:37,790 --> 00:20:39,720 Hysbysiad beth wnes i yma. 345 00:20:39,720 --> 00:20:44,790 I bwysleisiodd o fi yn 65 oed ar hyd at 65 + 26 oherwydd roeddwn i eisiau argraffu 26 o lythyrau 346 00:20:44,790 --> 00:20:49,860 yn yr wyddor Saesneg, i + + ar bob iteriad, ac yn awr sylwi ar hyn eto. 347 00:20:49,860 --> 00:20:52,540 Mae'n digwydd eto ein stereoteipio ffrind 348 00:20:52,540 --> 00:20:54,620 lle rydych yn newid 1 Data fath i un arall 349 00:20:54,620 --> 00:20:57,480 oherwydd yr hyn ydw i eisiau ei wneud yn y rhaglen benodol hon? 350 00:20:57,480 --> 00:21:02,650 Rwyf am i gyfrif niferoedd oherwydd dyna sut yr wyf yn magu cyfrif - 65, 66, 67, ac yn y blaen - 351 00:21:02,650 --> 00:21:04,420 ond nid wyf am i argraffu dim ond y rhifau. 352 00:21:04,420 --> 00:21:08,030 Rwyf am i argraffu'r lythyren ac yna gan y nifer. 353 00:21:08,030 --> 00:21:18,640 Rwyf eisiau argraffu A: rhif, B: rhif, ond gallaf wneud hyn gyda'r newidyn union yr un. 354 00:21:18,640 --> 00:21:21,630 Felly, yr wyf argraffu c% fel dalfan ar gyfer cymeriad, 355 00:21:21,630 --> 00:21:25,080 D% fel dalfan ar gyfer digid neu rif. 356 00:21:25,080 --> 00:21:27,750 Yna beth ddylwn i ei blygio i mewn ar gyfer y 2 bachau? 357 00:21:27,750 --> 00:21:33,960 I plwg cyntaf yn yr hyn sy'n cyfateb i gymeriad, ac yna yr argraffu i ei hun. 358 00:21:33,960 --> 00:21:36,400 >> Felly sylwi ar hyn hefyd dim ond yn gweithio. 359 00:21:36,400 --> 00:21:39,320 Yn union fel y gallaf fwrw o'r fflôt i int 360 00:21:39,320 --> 00:21:41,750 er mwyn mynd o nifer go iawn i cyfanrif, 361 00:21:41,750 --> 00:21:46,100 yma gallaf fynd o int i torgoch, sef ychydig yn rhyfedd - 362 00:21:46,100 --> 00:21:48,680 nid yw'n hollol mapio ar y byd go iawn - ond mewn cyfrifiaduron 363 00:21:48,680 --> 00:21:51,140 golosg yn unig yw rhif o dan y cwfl, 364 00:21:51,140 --> 00:21:53,590 felly rydym ni'n cael erioed mor amlwg yma at y cyfrifiadur, gan ddywedyd, 365 00:21:53,590 --> 00:21:58,920 printf, nid argraffu i fel 65, argraffwch hi fel ei cyfatebol rhifol. 366 00:21:58,920 --> 00:22:02,110 Ac mae'n troi allan yr wyf yn dechnegol hyd yn oed angen hyn. 367 00:22:02,110 --> 00:22:05,020 Beth oeddwn yn ei wneud funud yn ôl yn benodol bwrw 368 00:22:05,020 --> 00:22:08,760 drwy nodi pa fath o ddata Dw i eisiau mynd o ac i. 369 00:22:08,760 --> 00:22:11,840 Ond sylwi fy mod eisoes yn cael y placeholder c% 370 00:22:11,840 --> 00:22:14,930 ac mae hyn yn dalfan c% arall yma. 371 00:22:14,930 --> 00:22:18,880 Er nad yw hyn yn int, mae'r cyfrifiadur yn sylweddoli bod golosg, 372 00:22:18,880 --> 00:22:21,080 'i' jyst yn int o dan y cwfl. 373 00:22:21,080 --> 00:22:25,100 >> Felly, os wyf mewn gwirionedd yn ail-grynhoi hyn ac ailgynnal y rhaglen ASCII, 374 00:22:25,100 --> 00:22:31,210 sylwi ei fod yn dal i jyst yn gweithio oherwydd bod y cyfrifiadur yn sylweddoli bod yna ohebiaeth hon. 375 00:22:31,210 --> 00:22:34,870 Nawr, mae'n fwy pwysig i wneud y castio yn amlwg yn y byd o fflotiau i ints 376 00:22:34,870 --> 00:22:37,460 oherwydd bod eich bod mewn gwirionedd yn gwneud penderfyniad cyfrifo: 377 00:22:37,460 --> 00:22:40,140 taflu i ffwrdd popeth ar ôl y pwynt degol. 378 00:22:40,140 --> 00:22:44,990 Yma mae 'n sylweddol ddim i daflu i ffwrdd oherwydd bod cymeriad yn unig yw rhif, 379 00:22:44,990 --> 00:22:48,220 a llinyn yn unig yw amrywiaeth o gymeriadau. 380 00:22:48,220 --> 00:22:52,530 Felly pan ddaw amser i weithredu rhai amgryptio neu dadgriptio, 381 00:22:52,530 --> 00:22:56,770 sut y caiff ei bod yn gallu mewn gwirionedd yn gyfieithu rhywbeth fel hyn nonsens i, 382 00:22:56,770 --> 00:22:58,670 Byddwch yn siwr i yfed eich Ovaltine? 383 00:22:58,670 --> 00:23:02,700 Beth os ydym yn gwybod ar hyn o bryd - gadewch i ni gymryd fel rhagdybiaeth - bod y allweddol, 384 00:23:02,700 --> 00:23:08,010 y nifer a rydym yn cylchdroi pob un o'r llythyrau gan, yw'r rhif 13? 385 00:23:08,010 --> 00:23:11,800 Felly, rydym yn mynd oddi wrth y llythyren B yr holl ffordd i S ar ddechrau'r frawddeg, 386 00:23:11,800 --> 00:23:14,710 Byddwch yn siwr i yfed eich Ovaltine, oherwydd os wyf yn gwneud B 387 00:23:14,710 --> 00:23:19,600 ac yna yr wyf yn mynd C, D, E, F, G, H, I, J, K, L, M, N, O, 388 00:23:19,600 --> 00:23:23,760 dyna pam y amgryptio y llythyren B yn dod O 389 00:23:23,760 --> 00:23:26,570 oherwydd Fi jyst ychwanegu 13 i iddo. 390 00:23:26,570 --> 00:23:33,460 >> Felly, os ydw i eisiau dadgryptio hyn, yr wyf yn y bôn yn rhaid i gymryd O ac yna tynnu 13 o ohono. 391 00:23:33,460 --> 00:23:36,880 Neu, a dweud y gwir, oherwydd mae 26 o lythyrau yn yr wyddor, mae hyn yn rhyfeddol gymesur, 392 00:23:36,880 --> 00:23:41,260 gallwn hefyd dim ond ychwanegu 13 a byddwn yn mynd yn ôl i'r llythyr B. 393 00:23:41,260 --> 00:23:44,290 Ond sut mae mynd ati i weithredu rhywbeth fel hyn yn Caesar 394 00:23:44,290 --> 00:23:46,600 neu mewn gwirionedd trin llinynnau yn gyffredinol? 395 00:23:46,600 --> 00:23:51,380 Os yw'r llythyren B yw pa rif? 396 00:23:51,380 --> 00:23:55,290 Beth yw'r B llythyr? Felly mae'n 66, dde? 397 00:23:55,290 --> 00:23:59,220 Felly, os y llythyr A yn 65 oed ac mae'r llythyren B yn 66, 398 00:23:59,220 --> 00:24:03,940 felly 66, i gyd yn rhaid i mi ei wneud yw ychwanegu 13 i hynny, ac mae hyn yn rhoi i mi 79. 399 00:24:03,940 --> 00:24:09,150 Ac os ydym yn mynd at ein taflen twyllo ychydig, 79 yn wir mapiau ar O. 400 00:24:09,150 --> 00:24:11,290 >> Ond mae ychydig o achos cornel yma. 401 00:24:11,290 --> 00:24:15,170 Beth yw, dyweder, y llythyr Z? 402 00:24:15,170 --> 00:24:20,180 Os ydym yn ei wneud 66 + 25 i gael yr holl ffordd i ddiwedd y wyddor, ein bod chi yn 91. 403 00:24:20,180 --> 00:24:24,520 91 + 13 yn rhoi i mi 104, a dyfalu beth? 404 00:24:24,520 --> 00:24:29,200 Nid yw 104 yn hafal llythyr priflythyren. 405 00:24:29,200 --> 00:24:31,610 Gadewch i ni fynd yn ôl i daflen twyllo ychydig yma. 406 00:24:31,610 --> 00:24:38,070 Os byddaf yn ailgynnal y rhaglen hon yn yr hysbysiad offer bod 104, os byddaf yn mynd yn ôl at y ffenestr derfynell, 407 00:24:38,070 --> 00:24:41,800 104, mae'n debyg, h llythrennau bach. 408 00:24:41,800 --> 00:24:46,400 Felly, mae angen rhywfaint o tric allweddol yma er mwyn gwneud yn siŵr bod pan fyddwn yn dechrau ar Z 409 00:24:46,400 --> 00:24:50,260 ac rydym yn ychwanegu 13 i nid ydym am i ychydig chadw bwrw ymlaen i niferoedd mwy ac yn fwy. 410 00:24:50,260 --> 00:24:52,600 Beth ydym yn wir eisiau ei wneud? 411 00:24:52,600 --> 00:24:54,570 Rydych am i lapio o gwmpas. 412 00:24:54,570 --> 00:25:00,250 >> Felly, mae'n troi allan, fel yr ydych wedi gweld yn ôl pob tebyg yn adran awr neu yn y set problem fanyleb ei hun 413 00:25:00,250 --> 00:25:05,730 sylweddoli bod y gweithredwr arall yn C sydd hefyd yn arwydd y cant, 414 00:25:05,730 --> 00:25:11,020 ond tra rydym wedi defnyddio% yma i bennu dalfan, 415 00:25:11,020 --> 00:25:15,420 yn gwybod hynny, yn enwedig ar gyfer 2 set problem, mae hefyd yn rhywbeth fel hyn: 416 00:25:15,420 --> 00:25:18,990 int x% y = z. 417 00:25:18,990 --> 00:25:22,770 Gadewch i mi gyflwyno hyn fel ffurf generig iawn o hyn. 418 00:25:22,770 --> 00:25:25,580 Canran yn golygu beth mewn iaith raglennu? >> [Myfyrwyr] modwlo. 419 00:25:25,580 --> 00:25:28,790 Modwlo, sy'n ffordd ffansi o ddweud y gweddill. 420 00:25:28,790 --> 00:25:31,620 Hyd yn oed er mae yna wahaniaeth bach gyda'r diffiniad yno, 421 00:25:31,620 --> 00:25:37,210 mae hyn yn golygu rhannu gan y z ond nid ydynt yn dychwelyd y canlyniad y rhanbarth hwnnw; 422 00:25:37,210 --> 00:25:39,650 yn lle hynny, dychwelyd y gweddill. 423 00:25:39,650 --> 00:25:47,390 >> Felly, os y gwirionedd yn 3 a z mewn gwirionedd yn 2, 3 wedi'i rannu â 2 yn 1 gyda gweddill o 1, 424 00:25:47,390 --> 00:25:51,550 felly, beth mae x mewn gwirionedd yn gyfartal yn y sefyllfa hon? 1. 425 00:25:51,550 --> 00:25:54,540 Mae hwn yn fath syml, lefel isel syniad. 426 00:25:54,540 --> 00:25:56,480 Mae'n cymryd ychydig o amser i gael eich meddwl lapio o amgylch ei 427 00:25:56,480 --> 00:25:58,740 oherwydd ei fod wedi bod yn ôl pob tebyg ychydig ers i chi hyd yn oed wedi i ofalu am y gweddill 428 00:25:58,740 --> 00:26:01,160 ac mewn gwirionedd yn eu defnyddio ar gyfer rhywbeth pwrpasol, 429 00:26:01,160 --> 00:26:05,290 ond yn yr achos hwn y ffaith syml y gallwch fynd o nifer mawr fel 3 430 00:26:05,290 --> 00:26:08,920 i nifer cymharol fach fel 2 ac yna lapio o gwmpas yn effeithiol 431 00:26:08,920 --> 00:26:14,160 trwy ddefnyddio'r gweddill at werth llai fel 1 yn mynd i fod yn tric amhrisiadwy 432 00:26:14,160 --> 00:26:17,690 y gallwn eu defnyddio ar gyfer rhywbeth fel Caesar, ac mae hyn Vigenere beth arall 433 00:26:17,690 --> 00:26:22,240 mewn datrys gosod 2, ond mae hyn yn mynd i fod yn tric dro ar ôl tro drwy gydol y semester. 434 00:26:22,240 --> 00:26:24,880 Mae hyn yn syml, syniad syml o ddim ond gymryd y gweddill yn gyffredinol 435 00:26:24,880 --> 00:26:26,530 yn mynd i ganiatáu i ni i lapio o gwmpas. 436 00:26:26,530 --> 00:26:31,140 Ac wrth i ni ddechrau chwarae mwy gyda arrays, wrth i ni ddechrau chwarae mwy â'r cof ei hun, 437 00:26:31,140 --> 00:26:35,800 hyn yn mynd i ddod yn fwy a mwy o tric pwerus. 438 00:26:35,800 --> 00:26:43,420 >> Felly unrhyw gwestiynau yna ar ASCII neu gynrychiolaeth o linynnau fel araeau? 439 00:26:43,420 --> 00:26:47,430 A byddwn yn mynd ag ef i fyny 1 radd ymhellach. Yeah. 440 00:26:47,430 --> 00:26:52,350 [Gwestiwn myfyrwyr Anghlywadwy] >> Cwestiwn da. 441 00:26:52,350 --> 00:26:55,370 Beth mae'n ei olygu pan newidyn yn cael seren o'i flaen? 442 00:26:55,370 --> 00:26:57,720 Gadewch i mi ateb y gohirio mewn unrhyw fanylder, 443 00:26:57,720 --> 00:27:00,100 ond sy'n cyfeirio at bwnc a elwir yn pwyntydd. 444 00:27:00,100 --> 00:27:03,440 Pointers wedi ei wneud gyda cof, ac rydym mewn gwirionedd heddiw 445 00:27:03,440 --> 00:27:06,330 cymryd y cam cyntaf tuag at y drafodaeth honno, 446 00:27:06,330 --> 00:27:08,600 ond ar hyn o bryd, gadewch i mi esgus nad yw'r seren yn bodoli 447 00:27:08,600 --> 00:27:15,380 a byddwn yn parhau galw llinynnau llinynnau yn hytrach na defnyddio * torgoch, 448 00:27:15,380 --> 00:27:19,530 yr ydych wedi gweld yn ôl pob tebyg o'r blaen a byddaf yn eu rhoi ar y sgrîn mewn dim ond hyn o bryd fel teaser. 449 00:27:19,530 --> 00:27:23,010 Felly, byddwn yn dod yn ôl i hynny'n fanwl ffordd fwy fydd na llawer ohonoch mae'n debyg ei hoffi. 450 00:27:23,010 --> 00:27:25,760 Nid Yn y pen draw, heddiw. Yeah. 451 00:27:25,760 --> 00:27:42,810 >> [Gwestiwn myfyrwyr Anghlywadwy] 452 00:27:42,810 --> 00:27:47,080 Ym mha gyd-destun oes rhaid i chi ddarparu yr arwydd ar gyfer cymeriad? >> [Myfyrwyr] Yeah. 453 00:27:47,080 --> 00:27:52,130 Felly, yn ddiofyn, pan nad ydych yn rhoi +, dim ond rhifau positif yn cael eu cymryd yn ganiataol. 454 00:27:52,130 --> 00:27:55,390 Felly, os dim ond ysgrifennwch y rhif 1, mae'n 1 cadarnhaol. 455 00:27:55,390 --> 00:27:57,710 Os ydych chi mewn gwirionedd yn awyddus i bennu negyddu gwerth, 456 00:27:57,710 --> 00:28:01,060 yn llythrennol yn rhaid i wneud -1 ar eich bysellfwrdd. 457 00:28:01,060 --> 00:28:20,440 Ond nid yw hyn yn ôl pob tebyg yw eich cwestiwn. >> [Anghlywadwy ymateb y myfyrwyr] 458 00:28:20,440 --> 00:28:22,200 >> Da cwestiwn. Iawn. 459 00:28:22,200 --> 00:28:24,970 Felly, mae hyn wedi ei wneud, yr wyf yn casglu, gyda rhyw fath o nam rydych yn rhedeg i mewn i 460 00:28:24,970 --> 00:28:27,640 oherwydd eich bod yn troi cyfanrif i gymeriad, 461 00:28:27,640 --> 00:28:29,780 ond rhywsut negyddol cymryd rhan, 462 00:28:29,780 --> 00:28:32,380 ac felly mae'r cymeriad yn unig yn dod allan munged rhywsut. 463 00:28:32,380 --> 00:28:36,710 Felly, ar hyn o bryd, gadewch i mi gorsymleiddio'r ychydig hyd nes y byddwn yn dychwelyd at y math hwn o pwnc. 464 00:28:36,710 --> 00:28:39,570 Am y tro, meddwl am bethau fel hyn - ac mae hyn yn gorsymleiddio. 465 00:28:39,570 --> 00:28:43,500 Ond yn y byd o gyfanrif, mae gennych sawl darnau ar gael i chi? 466 00:28:43,500 --> 00:28:45,190 Mae gennych 32 catiau. 467 00:28:45,190 --> 00:28:49,030 Ac hyd yn hyn, rydym wedi siarad am y nifer cyfanswm o gyfanrifau felly gallwch gynrychioli 468 00:28:49,030 --> 00:28:52,430 yn fras 4 biliwn mewn cyfanswm oherwydd eich bod wedi 32 darnau, 469 00:28:52,430 --> 00:28:55,100 felly dyna 2 i 32, felly dyna tua 4 biliwn. 470 00:28:55,100 --> 00:28:58,810 Ond gwelsom yr wythnos neu 2 yn ôl nad ydych ddim yn cael amrywiaeth o rifau 471 00:28:58,810 --> 00:29:01,240 o 0 ar hyd at 4 biliwn. 472 00:29:01,240 --> 00:29:06,340 Mae'r amrediad yn hytrach na mynd o tua negyddol 2 biliwn i cadarnhaol 2 biliwn. 473 00:29:06,340 --> 00:29:10,990 Ond mae hynny'n codi'r cwestiwn, sut ydych chi'n cynrychioli y syniad o negyddol 2000000000 474 00:29:10,990 --> 00:29:13,260 heb sôn negyddol 1? 475 00:29:13,260 --> 00:29:17,960 Am nawr, gallwn gorsymleiddio'r a dim ond dweud ein bod yn mynd i ddefnyddio y rhan leftmost 476 00:29:17,960 --> 00:29:22,380 o'r rhai 32 catiau, ac os yw'n 1 ei fod yn rhif negatif, 477 00:29:22,380 --> 00:29:25,090 ac os yw'n o 0 mae'n rhif positif. 478 00:29:25,090 --> 00:29:28,570 Y broblem gyda hynny chynrychiolaeth symlach o rifau negyddol 479 00:29:28,570 --> 00:29:33,700 yw os oeddech yn fwriadol fod yn glyfar ac yn ceisio troi o gymeriad i nifer 480 00:29:33,700 --> 00:29:37,190 neu i'r gwrthwyneb, nid oes y fath beth fel cymeriad negyddol. 481 00:29:37,190 --> 00:29:42,550 Yn y byd o ASCII, sy'n defnyddio dim ond 8 did, pob un o'r 8 o'r rheiny mater darnau, 482 00:29:42,550 --> 00:29:46,810 a'r did leftmost wedi ddim i'w wneud â negyddiaeth. 483 00:29:46,810 --> 00:29:49,670 A dim ond i fod yn glir, pan fyddaf yn dweud darnau leftmost, 484 00:29:49,670 --> 00:29:54,610 cofio pan wnaethom ein rhan-gysylltiedig enghreifftiau yn yr wythnos gyntaf 485 00:29:54,610 --> 00:30:02,570 yn cofio i ni dynnu pethau fel 1001101, rhywbeth fel hyn. 486 00:30:02,570 --> 00:30:07,210 Pan fyddaf yn dweud y darn leftmost, Fi jyst yn llythrennol yn golygu 1 eich bod yn ysgrifennu yr holl ffordd drosodd i'r chwith. 487 00:30:07,210 --> 00:30:11,910 Felly, yn y byd o gymeriadau nid oes unrhyw syniad o negyddiaeth, 488 00:30:11,910 --> 00:30:16,360 fel bod ychydig yn leftmost mewn gwirionedd wedi rywbeth i'w wneud â ASCII, dim i'w wneud â negyddiaeth. 489 00:30:16,360 --> 00:30:19,390 >> Felly, mae'n swnio fel - ac allan o'u cyd-destun mae'n anodd i ateb yn union - 490 00:30:19,390 --> 00:30:25,840 ond rywsut, eich cod yn ddryslyd ychydig yn leftmost yn cynrychioli gwerth negyddol 491 00:30:25,840 --> 00:30:29,160 pan fo gwir oedd yn rhan o gymeriad dan sylw. 492 00:30:29,160 --> 00:30:32,250 Ac eto, yr wyf i'n gorsymleiddio oherwydd bod cyfrifiaduron mewn gwirionedd yn gwneud rhywbeth ychydig yn fwy ffansi 493 00:30:32,250 --> 00:30:37,080 na dim ond newid ychydig yn leftmost at 1 am arwydd negyddol yn erbyn o 0. 494 00:30:37,080 --> 00:30:41,270 Maent yn lle hynny, os ydych chi'n chwilfrydig i Google, defnyddio rhywbeth a elwir fel arfer 2 ategu, 495 00:30:41,270 --> 00:30:43,830 sydd ychydig yn fwy soffistigedig o ymagwedd 496 00:30:43,830 --> 00:30:45,490 ond mae'r syniad yn y pen draw yr un fath. 497 00:30:45,490 --> 00:30:50,530 >> Felly, yn fyr, roedd yn rhaid i wneud â'r ffaith eich bod yn massaging rhif i gymeriad 498 00:30:50,530 --> 00:30:53,750 neu nid i'r gwrthwyneb, ond eich cod yn ymwybodol o'r ffaith 499 00:30:53,750 --> 00:30:56,510 bod 1 o'r rhai darnau oedd arwyddocâd yn y byd rhifol. 500 00:30:56,510 --> 00:30:59,940 Nid yw hyn yn wir yn y byd cymeriad. 501 00:30:59,940 --> 00:31:04,270 Ond mae'n swnio fel sefydlog i chi, ac yn yr achos dadleuol nawr. Cwestiynau eraill. 502 00:31:06,030 --> 00:31:07,110 Iawn. 503 00:31:07,110 --> 00:31:11,560 Hyd yn hyd yn hyn, mae pob un o'r rhaglenni rydym wedi ysgrifennu wedi cymryd mewnbwn efallai gan y defnyddiwr 504 00:31:11,560 --> 00:31:14,330 ar ffurf swyddogaethau fel GetInt, GetString, 505 00:31:14,330 --> 00:31:16,990 neu os ydych wedi bod yn darllen ymlaen mewn llyfrau amrywiol neu gyfeiriadau ar-lein, 506 00:31:16,990 --> 00:31:21,390 efallai y byddwch eich hunain wedi defnyddio swyddogaethau fel scanf sydd, a dweud y gwir, rydym yn defnyddio yn y llyfrgell CS50. 507 00:31:21,390 --> 00:31:25,370 Ond mewn wythnos neu 2, byddwn mewn gwirionedd yn dangos i chi sut mae'r llyfrgell CS50 yn cael ei weithredu 508 00:31:25,370 --> 00:31:27,890 fel y gallwn gymryd y olwynion hyfforddiant i ffwrdd yn gyfan gwbl. 509 00:31:27,890 --> 00:31:31,340 >> Ond mae'n troi allan yna ffordd arall i gael mewnbwn gan ddefnyddiwr. 510 00:31:31,340 --> 00:31:34,670 Yn wir, rydym ni ein hunain wedi bod yn defnyddio dadleuon llinell orchymyn 511 00:31:34,670 --> 00:31:36,500 am ychydig o wythnosau bellach. 512 00:31:36,500 --> 00:31:41,150 Bob tro yr ydym wedi cynnal Clang neu ein bod wedi rhedeg ei wneud, 513 00:31:41,150 --> 00:31:45,050 Nid ydym wedi teipio yn unig clang, Mewnbynnu, nid ydym wedi teipio wneud, Enter. 514 00:31:45,050 --> 00:31:49,340 Beth ydym ni wedi ysgrifennu fel arfer ar ôl y gair clang yn ein terfynell ffenestri brydlon? 515 00:31:51,110 --> 00:31:52,900 [Myfyrwyr] Yr enw ffeil. >> Mae'r enw ffeil, dde? 516 00:31:52,900 --> 00:31:57,560 Hello.c neu mario.c neu beth bynnag yr enw ffeil berthnasol yw. 517 00:31:57,560 --> 00:32:01,910 Ac yn yr ystyr hwnnw yr hyn yr ydych wedi ei wneud mewn gwirionedd yn eich bod wedi dylanwadu ar ymddygiad Clang 518 00:32:01,910 --> 00:32:05,750 oherwydd yn sicr y bobl a ysgrifennodd Clang ganddi ddim syniad bod ychydig yn hen chi 519 00:32:05,750 --> 00:32:08,890 yn mynd i ysgrifennu rhaglen o'r enw mlynedd mario.c yn ddiweddarach. 520 00:32:08,890 --> 00:32:13,150 Felly, bu'n rhaid i chi rywsut ddylanwadu ar ymddygiad y rhaglen honno, 521 00:32:13,150 --> 00:32:18,140 a bod Clang rhaglen wedi cael ei hysgrifennu yn y fath fodd fel y gellir derbyn mewnbwn oddi wrthych 522 00:32:18,140 --> 00:32:23,480 drwy ychwanegu geiriau ar y brydlon cyn y hits defnyddiwr Enter. 523 00:32:23,480 --> 00:32:27,860 >> Felly, mae'n troi allan bod ers peth amser rydym wedi bod yn datgan bron pob un o'n rhaglenni 524 00:32:27,860 --> 00:32:32,840 i ddechrau fel hyn - prif int (gwag) - ac yna rydym wedi mynd ymlaen 525 00:32:32,840 --> 00:32:35,110 a dechreuodd ysgrifennu ein cod. 526 00:32:35,110 --> 00:32:37,910 Ac efallai y byddwn yn cael rhywfaint o miniog yn cynnwys ar ben y ffeil, 527 00:32:37,910 --> 00:32:40,660 ond mae bron pob un o'n rhaglenni hyd yn hyn wedi dechrau gyda hyn 528 00:32:40,660 --> 00:32:44,200 hyd yn oed er efallai y byddwch wedi gweld yn adran, mewn llyfrau, cyfeiriadau ar-lein 529 00:32:44,200 --> 00:32:46,570 nad yw hyn yn mewn gwirionedd yn ddi-rym. 530 00:32:46,570 --> 00:32:55,820 Ffurf arall dilys i hyn gymryd yn int argc ac yna string argv []. 531 00:32:55,820 --> 00:32:57,500 Felly, yn awr beth mae hyn yn awgrymu? 532 00:32:57,500 --> 00:33:01,320 Mae'n troi allan y argc, sef confensiwn ddynol - gallech ei alw'n hyn foo, 533 00:33:01,320 --> 00:33:03,710 ond byddai'n dim ond yn llawer llai eglur i ddarllenwyr - 534 00:33:03,710 --> 00:33:09,330 argc yn unig yw dadl i swyddogaeth a elwir yn brif beth sy'n cynrychioli? 535 00:33:09,330 --> 00:33:12,450 Beth mae argc sefyll am ar gyfer y rhai sy'n gyfarwydd? 536 00:33:12,450 --> 00:33:14,980 >> [Ymateb y myfyrwyr Anghlywadwy] >> Yeah, nifer o ddadleuon neu gyfrif ddadl. 537 00:33:14,980 --> 00:33:16,510 Mae mor syml â hynny. 538 00:33:16,510 --> 00:33:19,160 Faint o ddadleuon gael eu trosglwyddo i'r rhaglen hon? 539 00:33:19,160 --> 00:33:20,630 Beth mae hynny'n ei olygu? 540 00:33:20,630 --> 00:33:27,090 Os ydynt ar y llinell orchymyn yr wyf wedi rhedeg rhywbeth fel hyn - clang mario.c-- 541 00:33:27,090 --> 00:33:35,440 argc pan fyddaf daro Enter yn mynd i gymryd ar werth, braidd yn ddryslyd, 2. 542 00:33:35,440 --> 00:33:40,150 Felly, mae'n troi allan bod argc yn cyfrif ddadl, 543 00:33:40,150 --> 00:33:46,280 ond am resymau hanesyddol, enw'r rhaglen ei hun yn cael ei gynnwys yn y cyfrif. 544 00:33:46,280 --> 00:33:51,950 Felly argc yw 2 pan ysgrifennais clang mario.c. 545 00:33:51,950 --> 00:33:54,290 Beth mae argv ei gynnwys? 546 00:33:54,290 --> 00:33:57,020 Yn gyntaf oll, argv edrych fel llinyn ond nid yn eithaf 547 00:33:57,020 --> 00:33:59,310 oherwydd o ddydd Mercher diwethaf ac yn fwy heddiw, 548 00:33:59,310 --> 00:34:02,890 hyn cromfachau sgwâr dynodi beth? Dyna arae. 549 00:34:02,890 --> 00:34:07,110 Does dim rhif yn y casgliad, a ddylai fod yn gwneud synnwyr yn reddfol 550 00:34:07,110 --> 00:34:10,790 oherwydd bod y bobl a ysgrifennodd mlynedd yn ôl Clang sicr nid oedd syniad 551 00:34:10,790 --> 00:34:16,300 faint o bobl geiriau fel ni deipio wrth yr anogwr cyn taro Enter. 552 00:34:16,300 --> 00:34:22,280 >> Felly, yn yr achos hwn dyma nhw wedi datgan prif swyddogaeth fel cymryd amrywiaeth o ddadleuon, 553 00:34:22,280 --> 00:34:24,590 0 neu fwy o ddadleuon. 554 00:34:24,590 --> 00:34:26,460 Nid ydynt yn gwybod ymlaen llaw faint ohonynt sydd, 555 00:34:26,460 --> 00:34:29,690 felly nid oes dim yn fwriadol y tu mewn nifer o'r cromfachau sgwâr. 556 00:34:29,690 --> 00:34:32,750 Ond y ffaith bod y cromfachau sgwâr yno yn dweud wrth y cyfrifiadur, 557 00:34:32,750 --> 00:34:34,639 disgwyl arae. 558 00:34:34,639 --> 00:34:37,489 Argv yn unig nodiant fector llaw fer ar gyfer dadl. 559 00:34:37,489 --> 00:34:39,889 Mae fector yn ffordd ffansi o ddweud array, 560 00:34:39,889 --> 00:34:42,980 ac amrywiaeth yn ffordd ffansi o ddweud rhestr neu gasgliad. 561 00:34:42,980 --> 00:34:47,360 Felly, mae hyn yn unig yn golygu os byddwch yn ysgrifennu phrif fel hyn 562 00:34:47,360 --> 00:34:51,100 yn hytrach na fel sut rydym wedi bod yn gwneud hynny ar gyfer yr ychydig o wythnosau diwethaf, 563 00:34:51,100 --> 00:34:54,699 eich rhaglen yn awr y pŵer i dderbyn dadleuon llinell gorchymyn 564 00:34:54,699 --> 00:34:58,520 fel nad ydynt bellach yn rhaid i chi ei ysgrifennu Mario ac yna pwyswch Enter, 565 00:34:58,520 --> 00:35:01,610 yna teipiwch mewn nifer ar gyfer faint o flociau uchel ydych am i'r pyramid i fod, 566 00:35:01,610 --> 00:35:03,100 yna pwyswch Enter eto. 567 00:35:03,100 --> 00:35:07,720 Nid ydym yn hyd yn oed angen i ddefnyddio GetString anymore neu GetInt neu GetFloat ar gyfer y mater. 568 00:35:07,720 --> 00:35:12,370 Gall Rydym yn unig yn disgwyl i'r defnyddiwr i deipio geiriau hynny wrth yr anogwr ei hun 569 00:35:12,370 --> 00:35:16,850 yn union fel y awduron Clang penderfynu y byddai'n fod yn rhaglen wirioneddol yn blino 570 00:35:16,850 --> 00:35:20,550 os i lunio eich cod chi yn gyntaf clang teipio, pwyswch Enter, 571 00:35:20,550 --> 00:35:24,090 yna rydym yn dweud wrth y defnyddiwr, os gwelwch yn dda teipiwch enw'r ffeil rydych am ei lunio, 572 00:35:24,090 --> 00:35:26,920 yna rydym deipio i mewn mario.c a daro Chofnoda. 573 00:35:26,920 --> 00:35:29,850 Ond dyna'n union beth rydym wedi bod yn ei wneud i'n defnyddwyr yr ychydig o wythnosau diwethaf. 574 00:35:29,850 --> 00:35:33,550 Rydym yn defnyddio GetString ac rydym yn aros nes bod y rhaglen yn rhedeg i'w hannog ar gyfer mewnbwn. 575 00:35:33,550 --> 00:35:36,710 Nad oes bellach angen i fod yn wir. 576 00:35:36,710 --> 00:35:41,160 >> Felly, yn yr enghraifft hon yma, mae gennym bellach llinyn argv, 577 00:35:41,160 --> 00:35:43,390 ac mae hyn hefyd yn gorsymleiddio, 578 00:35:43,390 --> 00:35:45,610 olwynion hyfforddiant a fydd yn fuan iawn yn dod i ffwrdd. 579 00:35:45,610 --> 00:35:50,860 Dyma'r ffordd fwy priodol o ysgrifennu datganiad hwn amgen o brif 580 00:35:50,860 --> 00:35:54,740 oherwydd ei fod yn troi allan bod yr hyn yr ydym yn cadw galw llinyn mewn gwirionedd wedi seren, 581 00:35:54,740 --> 00:35:58,440 seren, yn ei ddiffiniad ei hun, ond mae hyn yn edrych yn gymhleth, 582 00:35:58,440 --> 00:36:02,600 mae'n ddryslyd ar y dechrau, felly rydym yn symleiddio trwy dim ond creu gyfystyr o fath 583 00:36:02,600 --> 00:36:09,340 yn y llyfrgell CS50 bod mapiau * torgoch i'r llinyn yma gair yn fwy defnyddiwr-gyfeillgar. 584 00:36:09,340 --> 00:36:13,180 >> Felly, gadewch i ni mewn gwirionedd rhowch gynnig ar hyn bryd hynny. Gadewch i mi fynd yn ei flaen ac yn agor i fyny gedit yma. 585 00:36:13,180 --> 00:36:17,010 Gadewch i mi fynd yn ei flaen ac yn agor argv o 1. 586 00:36:17,010 --> 00:36:21,620 Mae'r rhaglen hon yn ymddangos yn argraffu'r dadleuon, ond o ran Saesneg, 587 00:36:21,620 --> 00:36:26,290 drwy edrych ar y cod hwn, beth mae hyn yn ei wneud yn fwy penodol? 588 00:36:26,290 --> 00:36:35,910 Os wyf yn fath yn y gorchymyn a.out foo bar, yr hyn sy'n cael ei argraffu yn fy ffenestr ddu a gwyn? 589 00:36:35,910 --> 00:36:41,260 A.out foo bar, Enter. 590 00:36:43,120 --> 00:36:48,300 Mynd yn ei flaen. Yeah. >> [Anghlywadwy ymateb y myfyrwyr] 591 00:36:48,300 --> 00:36:52,730 Da. Felly a.out, llinell newydd, foo, newydd llinell, bar, llinell newydd. 592 00:36:52,730 --> 00:36:54,980 Pam fod hyn? Gallwn yn sicr gadarnhau mewn dim ond hyn o bryd. 593 00:36:54,980 --> 00:36:56,940 Mae hyn yn fath o linell fluffy o god. 594 00:36:56,940 --> 00:36:59,560  'I jyst yn argraffu llinell newydd dim ond er mwyn gwneud pethau'n prettier ar y sgrin. 595 00:36:59,560 --> 00:37:03,730 Mae hwn yn ddolen sydd wedi ailadrodd o 0 ar hyd at argc, 596 00:37:03,730 --> 00:37:07,210 ac mae hyn yn incrementing ar bob iteriad + +. 597 00:37:07,210 --> 00:37:12,270 Felly, mae hyn yn awr yn dweud argraffu llinyn, fel a awgrymir gan y% s. 598 00:37:12,270 --> 00:37:16,460 Argv [i] 'n bert lawer yr un syniad gan yr enghraifft flaenorol. 599 00:37:16,460 --> 00:37:19,580 Rydym yn eu defnyddio i alw y au amrywiol; nawr mae'n cael ei alw, fympwyol, argv. 600 00:37:19,580 --> 00:37:24,270 Mae hyn yn golygu argraffu'r ddadl ith a teipio ar y llinell orchymyn, 601 00:37:24,270 --> 00:37:28,690 ac yna ar ôl y peth i gyd yn cael ei wneud, dim ond ar gyfer mesur da argraffu llinell arall newydd. 602 00:37:28,690 --> 00:37:31,600 >> Felly, gadewch i ni weld hyn. Gadewch i mi agor y ffenestr terfynell. 603 00:37:31,600 --> 00:37:37,470 Gadewch i mi lunio argv o 1, ac yn awr gad i mi redeg argv o 1, Enter. Hmm. Iawn. 604 00:37:37,470 --> 00:37:40,850 Gadewch i ni redeg foo bar. Diddorol. Baz. 605 00:37:40,850 --> 00:37:42,640 Ac os ydych chi erioed wedi meddwl pam yr wyf yn teipio hwn, 606 00:37:42,640 --> 00:37:45,010 yn unig yw hwn hefyd yn gonfensiwn gwyddoniaeth gyfrifiadurol dwp. 607 00:37:45,010 --> 00:37:48,050 Mae'r byd yn aml yn angen dim ond bachau ar lafar am eiriau. 608 00:37:48,050 --> 00:37:50,090 Felly, os ydych am siarad am rai llinyn generig, 609 00:37:50,090 --> 00:37:53,250 gwyddonwyr cyfrifiadurol yn unig, yn tueddu i ddweud foo pan fydd angen gair ar hap, 610 00:37:53,250 --> 00:37:55,530 wedyn maent yn dweud bar os ydynt angen gair ar hap ail 611 00:37:55,530 --> 00:37:59,100 wedyn maent yn dweud Baz os ydynt angen trydydd gair, yna maent yn dweud qux os bydd angen gair pedwerydd, 612 00:37:59,100 --> 00:38:01,520 ac yna mae 'na ar-lein dadl grefyddol enfawr o ran yr hyn a ddaw ar ôl qux, 613 00:38:01,520 --> 00:38:04,940 fel y gallwch Google bod at chyfrif i maes yr hyn y dylai'r gair fympwyol eraill. 614 00:38:04,940 --> 00:38:07,480 Ond mae'r rhain yn cael unrhyw ystyr o gwbl, 615 00:38:07,480 --> 00:38:10,100 er foo bar, os ydych yn Google hynny, fod oes gan ystyr, 616 00:38:10,100 --> 00:38:12,780 sy'n rhan o'r tarddiad yma. 617 00:38:12,780 --> 00:38:17,550 >> Felly, hyn i gyd yn ei wneud, yna yn argraffu 1 o'r llinynnau fesul llinell. 618 00:38:17,550 --> 00:38:19,900 Felly, os wyf yn lle hynny, fodd bynnag, yn awyddus i gael ychydig yn fwy ffansi, 619 00:38:19,900 --> 00:38:22,550 Mae'n debyg nad oeddwn eisiau argraffu pob llinyn fesul llinell; 620 00:38:22,550 --> 00:38:26,220 Roeddwn i eisiau argraffu pob cymeriad o bob llinyn y llinell. 621 00:38:26,220 --> 00:38:28,550 Sut gallwn i yn hytrach na gwneud hynny? 622 00:38:28,550 --> 00:38:33,720 Beth sydd angen i mi newid am y rhaglen hon os ydw i eisiau argraffu nad yw pob gair 623 00:38:33,720 --> 00:38:37,290 ond yr wyf eisiau argraffu pob llythyren gair trwy lythyr trwy lythyr, 624 00:38:37,290 --> 00:38:40,590 yna bydd y llythyr gair nesaf drwy lythyr drwy lythyr? 625 00:38:40,590 --> 00:38:43,650 Sut rydym yn cyfuno syniadau hyn hyd yn hyn? Yeah. 626 00:38:43,650 --> 00:38:47,390 [Myfyrwyr]% c. >> Mae pob hawl. Felly mae angen rhywle c%. 627 00:38:47,390 --> 00:38:50,680 Da, oherwydd nid wyf eisiau argraffu llinynnau cyfan, rwyf eisiau argraffu cymeriadau. Beth arall? 628 00:38:50,680 --> 00:38:54,290 >> [Ymateb y myfyrwyr Anghlywadwy] >> ddiddorol. 629 00:38:54,290 --> 00:38:56,860 Felly, mae angen rhyw fath o ail ddimensiwn yma nawr 630 00:38:56,860 --> 00:39:02,300 oherwydd feddwl am argv fel array, ond ei fod yn amrywiaeth o linynnau. 631 00:39:02,300 --> 00:39:07,170 Ond fel y, fel, 15 munud yn ôl, beth llinyn? Mae'n amrywiaeth o gymeriadau. 632 00:39:07,170 --> 00:39:12,320 Felly mewn gwirionedd, argv llu o amrywiaeth o gymeriadau, 633 00:39:12,320 --> 00:39:14,870 amrywiaeth o araeau o gymeriadau. 634 00:39:14,870 --> 00:39:19,170 Felly, mae'n troi allan y gallwn ddefnyddio nodiannau braced yn unig yn fwy sgwâr. Felly, gadewch i ni wneud hyn. 635 00:39:19,170 --> 00:39:23,650 Yn frig y ddolen ar llinell 19, yr wyf i'n mynd i ailadrodd o i fyny i argc, 636 00:39:23,650 --> 00:39:25,760 ond yna yr wyf i'n mynd i wneud hyn: 637 00:39:25,760 --> 00:39:27,580 gyfer hyn - ni allaf ddefnyddio i nawr. 638 00:39:27,580 --> 00:39:30,300 Fi angen newidyn arall oherwydd yr wyf am i ailadrodd dros y geiriau 639 00:39:30,300 --> 00:39:32,640 ond yna hefyd dros y llythrennau yn y geiriau 640 00:39:32,640 --> 00:39:37,280 felly wyf yn fath o gael echelin fertigol a llorweddol echelin, math o gysyniadol. 641 00:39:37,280 --> 00:39:43,930 Felly j int yn cael 0, yna rwyf am wneud j cyhyd ag j yn llai na - a byddaf yn glanhau hyn i fyny mewn ychydig. 642 00:39:43,930 --> 00:39:48,410 Sut ydw i'n ailadrodd dros y llythrennau mewn llinyn? Gwnaethom hyn funud yn ôl. 643 00:39:48,410 --> 00:39:54,670 Strlen o argv [i]. Da. 644 00:39:54,670 --> 00:39:57,860 Ac eto, dwi'n gwneud ychydig o aneffeithlonrwydd yma drwy beidio â chreu n neu beth bynnag, 645 00:39:57,860 --> 00:39:59,610 ond byddwn yn dod yn ôl at hynny. 646 00:39:59,610 --> 00:40:03,270 >> Felly nawr j + +. Nawr mae'n rhaid i mi indent pellach yma. 647 00:40:03,270 --> 00:40:06,950 Beth ydw i'n eisiau argraffu ar bob iteriad? 648 00:40:06,950 --> 00:40:09,720 [Ymateb y myfyrwyr Anghlywadwy] >> Felly, [i] yn rhoi i mi y gair. 649 00:40:09,720 --> 00:40:12,910 [I] [j], math o fel matrics. 650 00:40:12,910 --> 00:40:14,810 Mae'r rhai ohonoch sydd â mathemateg-y gefndiroedd, 651 00:40:14,810 --> 00:40:19,340 rydym yn fath o mynegeio hyd yn oed yn ddyfnach i mewn i'r matrics hwn neu amrywiaeth o araeau, 652 00:40:19,340 --> 00:40:21,380 strwythur hwn 2-ddimensiwn. 653 00:40:21,380 --> 00:40:25,070 Felly nawr gadewch i ni weld beth sy'n digwydd yma. Gadewch i mi agor fy ffenest terfynell mwy. 654 00:40:25,070 --> 00:40:28,170 Gadewch i mi ailadrodd ei wneud o argv o 1. 655 00:40:28,170 --> 00:40:33,090 Ac yr wyf wedi sgriwio i fyny yma, sydd yn wers dda oherwydd fy mod yn rhy anghofio i wneud hyn. 656 00:40:33,090 --> 00:40:37,150 Ymhlyg yn datgan 'strlen' swyddogaeth llyfrgell C gyda heb eu llofnodi math '- 657 00:40:37,150 --> 00:40:40,360 Dydw i ddim hyd yn oed yn gwybod beth yw'r gweddill y mae hynny'n ei olygu, ond yr wyf wedi gweld hyn o'r blaen, 658 00:40:40,360 --> 00:40:42,000 ymhlyg datgan. 659 00:40:42,000 --> 00:40:45,540 Pryd bynnag y byddwn yn gweld y gwall hwn, beth mae hyn fel arfer yn arwyddo? 660 00:40:45,540 --> 00:40:48,520 >> [Ymateb y myfyrwyr Anghlywadwy] >> Wedi anghofio llyfrgell i fyny top. Ond arhoswch funud. 661 00:40:48,520 --> 00:40:51,690 Fel arfer dwi wedi sgriwio i fyny oherwydd fy mod yn anghofio y llyfrgell CS50, ond mae hynny'n yno. 662 00:40:51,690 --> 00:40:54,480 Fel arfer dwi wedi sgriwio i fyny am fy mod i wedi anghofio safon I / O. 663 00:40:54,480 --> 00:40:57,960 A dweud y gwir, nid wyf yn hyd yn oed angen hyn. Nid ydym yn defnyddio GetString heddiw. 664 00:40:57,960 --> 00:40:59,900 Felly, beth ydw i'n methu? 665 00:40:59,900 --> 00:41:04,860 Mae lyfrgell arall sydd yn awr mae angen i ddefnyddio string.h a elwir o bryd i'w gilydd, 666 00:41:04,860 --> 00:41:08,980 ac mae hyn yn unig yw eto lyfrgell arall sydd â swyddogaethau yn fwy nad ydynt yn safonol I / O. 667 00:41:08,980 --> 00:41:11,640 >> Felly, gadewch i ni fynd yn ôl at fy ffenestr terfynell mawr. 668 00:41:11,640 --> 00:41:16,670 Iawn. Yn awr, damn ei, Amcana oeddwn yn anghywir. Roeddwn yn defnyddio'r llyfrgell CS50. 669 00:41:16,670 --> 00:41:18,460 Felly gallwn atgyweiria hon yn un o'r 2 ffordd. 670 00:41:18,460 --> 00:41:21,510 Gallwn gymryd y olwynion hyfforddiant i ffwrdd ar hyn o bryd a dim ond gwneud hyn, 671 00:41:21,510 --> 00:41:26,600 neu gadewch i fath o gadw'r symleiddio yn unig ar hyn o bryd, bastio hwn yn ôl yn, 672 00:41:26,600 --> 00:41:30,180 datrys y broblem honno, ac yn awr yn mynd yn ôl at y ffenestr derfynell. 673 00:41:30,180 --> 00:41:33,080 Felly i fod yn glir, yn y llyfrgell CS50 yn unig swyddogaethau, 674 00:41:33,080 --> 00:41:36,920 mae hefyd y llinyn gair allweddol a dyna pam bod gwall jyst yn digwydd. 675 00:41:36,920 --> 00:41:43,010 >> Felly, yma rydym yn mynd. Yr wyf yn sefydlog ddau o'r materion llyfrgell. Enter. Da. 676 00:41:43,010 --> 00:41:49,250 Argv o 1, foo bar, Enter. Ardderchog. 677 00:41:49,250 --> 00:41:52,830 Felly, yn awr mae gennym pob llythyren o bob gair printiedig 1 y llinell, 678 00:41:52,830 --> 00:41:55,290 nad yw'n gwneud ar gyfer rhaglen diddorol iawn, 679 00:41:55,290 --> 00:41:59,350 ond bod rhybudd yn awr mae gennym y gallu nid yn unig ailadrodd dros eiriau 680 00:41:59,350 --> 00:42:04,090 ond hefyd dros llythrennau unigol mewn geiriau, sy'n swnio'n ofnadwy cyfarwydd 681 00:42:04,090 --> 00:42:10,330 i hyd yn oed y symlaf o geisiadau fel llythyrau sgramblo mewn llinyn fel hyn. 682 00:42:10,330 --> 00:42:12,410 Gadewch i ni fynd yn ei flaen ac yn cymryd ein 5-munud egwyl yma. 683 00:42:12,410 --> 00:42:14,410 A phan fyddwn yn dod yn ôl, byddwn yn dechrau siarad am effeithlonrwydd 684 00:42:14,410 --> 00:42:17,670 gyda y gallwn wneud y pethau hyn yn well. 685 00:42:19,370 --> 00:42:21,900 >> Mae pob hawl. Rydym yn ôl. 686 00:42:21,900 --> 00:42:26,970 Diolch i un o'n TFS sy'n chwarae llawer o bananagrams, 687 00:42:26,970 --> 00:42:30,000 rydym mewn gwirionedd yn cael criw cyfan o chars gyda ni yma heddiw 688 00:42:30,000 --> 00:42:32,520 gorfforol incarnated â'r darnau bach plastig, 689 00:42:32,520 --> 00:42:36,910 a gadewch i mi yn cynnig bod y llechi gwyn gwag yma yn cynrychioli y RAM yn fy chyfrifiadur - 690 00:42:36,910 --> 00:42:39,790 gliniadur, n ben-desg, beth bynnag - ac mae edrych fel llawer ohono 691 00:42:39,790 --> 00:42:44,090 oherwydd os ydym yn dechrau torri i fyny y RAM i mewn i bach beit-maint ddarnau, 692 00:42:44,090 --> 00:42:48,970 gadewch i ni fympwyol dweud bod rhywbeth y maint a bod yn cynrychioli blurry - 693 00:42:48,970 --> 00:42:52,430 dyna ni, a gadewch i chwyddo allan ychydig bach yma - 694 00:42:52,430 --> 00:42:56,120 gadewch i ni ddweud rhywbeth y maint yn cynrychioli beit unigol. 695 00:42:56,120 --> 00:43:00,400 Felly, gallwn yn wir ffitio criw cyfan o bytes neu gymeriadau tu mewn y cof, 696 00:43:00,400 --> 00:43:02,860 fel yr awgrymwyd gan faint cymharol yma. 697 00:43:02,860 --> 00:43:06,780 >> Felly mae'n debyg yn awr bod y nod yw dyrannu cof ar gyfer llinyn. 698 00:43:06,780 --> 00:43:08,680 Sut mae hyn yn gweithio mewn gwirionedd? 699 00:43:08,680 --> 00:43:11,380 Yn y rhaglenni rydym wedi bod yn ysgrifennu, rydym wedi arfer bod yn defnyddio GetString, 700 00:43:11,380 --> 00:43:16,300 ond erbyn hyn, yn amlwg, mae hwn yn sianel eraill drwy y gallwn gael mewnbwn defnyddwyr yn argv 701 00:43:16,300 --> 00:43:18,190 drwy dadleuon llinell orchymyn. 702 00:43:18,190 --> 00:43:20,580 Ond beth sy'n wir yn mynd ymlaen o dan y cwfl? 703 00:43:20,580 --> 00:43:24,920 Mae'n troi allan os ydym yn galw - gadewch i ni sgrolio yn ôl i GetString - y GetString swyddogaeth 704 00:43:24,920 --> 00:43:28,190 yn y llyfrgell CS50, mae'r defnyddiwr yn cael ei annog ar gyfer llinyn, 705 00:43:28,190 --> 00:43:30,780 y mathau o ddefnyddwyr mewn rhyw air - gadewch i ni ei alw HELO. 706 00:43:30,780 --> 00:43:35,410 Ac rydym wedi bod yn ei ddweud am yr ychydig wythnosau diwethaf fod y gwerth dychwelyd GetString 707 00:43:35,410 --> 00:43:37,750 mewn gwirionedd yn llinyn, fel y gair HELO. 708 00:43:37,750 --> 00:43:39,660 >> Ond beth sy'n GetString ei wneud mewn gwirionedd? 709 00:43:39,660 --> 00:43:45,230 Gan fod y mathau o ddefnyddwyr yn HELO, Mewnbynnu, GetString yn figuring allan, 710 00:43:45,230 --> 00:43:47,930 iawn, faint o gymeriadau yw hwn? Mae hyn yn H-E-L-L-O. 711 00:43:47,930 --> 00:43:52,500 Felly mae angen dyrannu, mae angen gofyn y system weithredu - Linux yn yr achos hwn - 712 00:43:52,500 --> 00:43:55,410 am o leiaf 5 bytes i storio HELO. 713 00:43:55,410 --> 00:43:59,570 A beth wedyn yn mynd yn ei flaen i wneud unwaith y bydd yn mynd yn ôl y 5 bytes o'r system weithredu 714 00:43:59,570 --> 00:44:04,120 yw gosod allan HELO gefn wrth gefn wrth gefn wrth gefn. 715 00:44:04,120 --> 00:44:11,070 Ac felly beth sy'n dychwelyd fawr o'r GetString yn ddarn o ddata sy'n edrych fel hyn. 716 00:44:11,070 --> 00:44:16,850 Ond mae hyn yn ychydig yn anghywir oherwydd ei fod yn troi at y ffaith nad yw mor syml 717 00:44:16,850 --> 00:44:20,310 fel dim ond storio HELO yn gof y cyfrifiadur 718 00:44:20,310 --> 00:44:24,140 oherwydd mae'n debyg bod fy rhaglen fy mod i'n ysgrifennu yn C, yna galwadau GetString eto, 719 00:44:24,140 --> 00:44:28,210 a'r gair nesaf y defnyddiwr mathau mewn yn IS, IS. 720 00:44:28,210 --> 00:44:31,300 Wel, mae angen i mi osod y gair-DDEDDFAU rhywle yn y cof. 721 00:44:31,300 --> 00:44:33,790 Ni allaf trosysgrifo'r HELO. 722 00:44:33,790 --> 00:44:37,320 Er enghraifft, nid wyf am y cyfrifiadur i dim ond dechrau trosysgrifo fel hyn 723 00:44:37,320 --> 00:44:41,400 y gair gwreiddiol oherwydd gall y byddaf yn dal yn defnyddio'r gair HELO mewn newidyn 724 00:44:41,400 --> 00:44:43,070 rhywle arall yn fy rhaglen. 725 00:44:43,070 --> 00:44:45,900 >> Felly, B-Y-E ddod i ben i fyny yn rhywle arall yn y cof. 726 00:44:45,900 --> 00:44:50,460 Ond y confensiwn fel arfer yw bod y llinyn nesaf y byddwch yn dyrannu 727 00:44:50,460 --> 00:44:54,940 yn ôl pob tebyg, ond nid bob amser, yn mynd i roi diwedd ar i fyny yn y lleoliad cof nesaf sydd ar gael. 728 00:44:54,940 --> 00:44:57,370 Ac os nad wyf wedi gofyn i'r system weithredu ar gyfer unrhyw cof 729 00:44:57,370 --> 00:45:01,380 ers y tro diwethaf i mi alw GetString, groes yn y gair-DDEDDFAU 730 00:45:01,380 --> 00:45:05,790 yn mynd i roi diwedd ar i fyny dde ar ôl y gair HELO yn y cof. 731 00:45:05,790 --> 00:45:10,550 Ond ar y pwynt hwn, efallai y gallwch weld lle mae problem posibl yn codi. 732 00:45:10,550 --> 00:45:13,310 Oherwydd bod y darnau nesaf y cof, y bytes nesaf a oedd yn union am ddim - 733 00:45:13,310 --> 00:45:18,230 glân llechi gwyn - er cof am y cyfrifiadur yn iawn nesaf i HELO, 734 00:45:18,230 --> 00:45:23,670 mae'n teimlo fel y llinyn cyntaf a ofynnais am y gallai newid yn awr yn sydyn 735 00:45:23,670 --> 00:45:26,410 oherwydd fy mod wedi newid yn y bôn i HELLOBYE 736 00:45:26,410 --> 00:45:31,310 yn hytrach na rhywsut demarcing dechrau'r-DDEDDFAU a diwedd HELO. 737 00:45:31,310 --> 00:45:33,920 >> Felly, mae'n troi allan bod yr hyn sy'n digwydd mewn gwirionedd o dan y cwfl, 738 00:45:33,920 --> 00:45:37,570 y gallech wedi cael cipolwg ar mewn cyfeiriadau ar-lein neu adran neu lyfrau 739 00:45:37,570 --> 00:45:41,780 neu ddim o gwbl eto yw bod mewn gwirionedd yn llinell derfyn bwriadol 740 00:45:41,780 --> 00:45:45,890 rhwng geiriau mewn cof cyfrifiadur. 741 00:45:45,890 --> 00:45:52,480 Ac mewn gwirionedd, yn yr achos yma, yn hytrach na dim ond rhoi IS dde nesaf at HELO, 742 00:45:52,480 --> 00:45:58,610 yn lle hynny, mae'r cyfrifiadur yn rhoi cymeriad arbennig, cymeriad null arbennig, fel petai, 743 00:45:58,610 --> 00:46:03,050 sy'n cael ei gynrychioli gyda marciwr gyda slaes 0. 744 00:46:03,050 --> 00:46:06,700 Felly, stori fer hir, dwyn i gof bod cymeriadau yn cael eu cynrychioli yn ASCII. 745 00:46:06,700 --> 00:46:09,680 ASCII yn unig yw mapio rhwng rhifau a llythrennau, 746 00:46:09,680 --> 00:46:13,870 ac mae'r rhan fwyaf o'r llythyrau hynny yn dechrau tua 65 ar gyfer cyfalaf A, 747 00:46:13,870 --> 00:46:19,780 ond mae'n troi allan y gallwch chi yn sicr yn cynrychioli y 0 rhif fel cyfanrif neu mewn deuaidd, 748 00:46:19,780 --> 00:46:22,690 ac mae'n troi allan y byd penderfynodd hir, maith yn ôl, "Rydych yn gwybod beth?" 749 00:46:22,690 --> 00:46:27,550 "Gadewch i 0 o rif wrth gefn gan nad gynrychioli unrhyw cymeriadau ar y bysellfwrdd - 750 00:46:27,550 --> 00:46:30,810 "Unrhyw lythyrau, dim rhifau, dim atalnodi. 0 yn arbennig." 751 00:46:30,810 --> 00:46:35,830 "Mae'n mynd i fod yn gymeriad null arbennig, ac rydym yn mynd i'w ysgrifennu fel \ 0." 752 00:46:35,830 --> 00:46:41,170 Y gwahaniaeth yw os ydym newydd ei ysgrifennu 0, 0 yn gymeriad. 753 00:46:41,170 --> 00:46:45,700 Dwyn i gof bod codau ASCII ar gyfer plant 0, am 1, am 2, am 3 754 00:46:45,700 --> 00:46:50,570 oherwydd bod y 0 cymeriad yn wahanol y 0 rhif. 755 00:46:50,570 --> 00:46:54,270 A gallwch weld os ydych yn edrych yn ôl o wythnos 1 pan fyddwn yn gyntaf yn siarad am ASCII, 756 00:46:54,270 --> 00:46:59,130 0 ac 1 a 2 a 3 yr holl ffordd hyd at 9 wedi cael eu codau ASCII eu hunain. 757 00:46:59,130 --> 00:47:02,300 Nid ydynt yn, gyd-ddigwyddiad, 0 i 9. Maen nhw'n wahanol iawn. 758 00:47:02,300 --> 00:47:08,770 Felly, 0 yn golygu dim ond "Yr wyf yn arbennig," ac y 0 \ modd, yn llythrennol, "Nid fi yw'r cymeriad 0." 759 00:47:08,770 --> 00:47:11,360 "Rwy'n hwn werth arbennig, cymeriad null." 760 00:47:11,360 --> 00:47:16,930 Felly, Fi 'n weithredol angen un arall o'r rhain gan na allaf wneud yr un camgymeriad ddwywaith. 761 00:47:16,930 --> 00:47:21,550 >> Felly, ar ôl y gair-DDEDDFAU rydym hefyd yn mynd i angen un arall o'r cymeriadau null. 762 00:47:21,550 --> 00:47:27,090 Gadewch i mi cydio fy pen yma a gadewch i mi yn gyflym tynnu un arall \ 0 763 00:47:27,090 --> 00:47:30,480 fel bod ar ôl i mi wedi gofyn i'r system weithredu ar gyfer 2 llinynnau 764 00:47:30,480 --> 00:47:33,270 trwy GetString ddilyn gan alwad arall i GetString, 765 00:47:33,270 --> 00:47:35,640 mae hyn yn beth mewn gwirionedd yn y cof. 766 00:47:35,640 --> 00:47:39,900 Felly, pan fyddaf yn mynd yn ôl llinyn, yr wyf i'n mynd yn ôl hynny, 767 00:47:39,900 --> 00:47:43,450 a phan fyddaf yn cael y llinyn nesaf, yr wyf i'n mynd yn ôl hynny. 768 00:47:43,450 --> 00:47:47,910 Felly, mae hyn yn codi'r cwestiwn, strlen, yn gyntaf oll, dylai hyn y mae'n ei ddychwelyd? 769 00:47:47,910 --> 00:47:54,650 Pan fyddaf yn galw strlen ar y au llinyn ac s oedd y gair HELO bod y defnyddiwr deipio i mewn, 770 00:47:54,650 --> 00:47:57,800 beth a wnaethom yn amlwg yn dweud hyd HELO oedd ychydig funudau yn ôl? 771 00:47:57,800 --> 00:48:01,290 Roedd 5, dde? H-E-L-L-O. A dyna yn wir sut strlen yn gweithio. 772 00:48:01,290 --> 00:48:05,670 Mae'n dychwelyd beth fyddai bod dynol arferol disgwyl hyd y llinyn i fod. 773 00:48:05,670 --> 00:48:11,030 Ond mewn gwirionedd, pa mor fawr yw'r amrywiaeth o gymeriadau sydd wedi storio hello? 774 00:48:11,030 --> 00:48:12,770 Mae'n mewn gwirionedd 6. 775 00:48:12,770 --> 00:48:15,740 Felly strlen yn sôn am y ffaith honno i chi. 776 00:48:15,740 --> 00:48:20,300 Ond o dan y cwfl y cyfrifiadur yn wir yn defnyddio 6 bytes i storio gair 5-llythyr, 777 00:48:20,300 --> 00:48:22,380 ac mae hyn yn wir ni waeth pa mor hir y gair hwnnw. 778 00:48:22,380 --> 00:48:26,470 Mae bob amser yn mynd i fod yn gymeriad null arbennig dod i ben ar ddiwedd y llinyn 779 00:48:26,470 --> 00:48:28,800 i demarc ei hyd cyfan. 780 00:48:28,800 --> 00:48:33,430 >> Felly, yna os ydych yn awr yn y person gweithredu strlen 20, 30 mlynedd yn ôl, 781 00:48:33,430 --> 00:48:35,520 sut ydych chi'n mynd ati i weithredu strlen ei hun? 782 00:48:35,520 --> 00:48:39,980 Rydym yn cymryd yn ganiataol ei fod yn bodoli, yn union fel rydym yn cymryd yn ganiataol y printf yn bodoli, 783 00:48:39,980 --> 00:48:42,850 ond os HELO yw'r gair dan sylw 784 00:48:42,850 --> 00:48:45,220 ac yr hyn sydd gennyf mewn cof yn rhywbeth sy'n edrych fel hyn, 785 00:48:45,220 --> 00:48:48,130 os bu'n rhaid i chi reimplement strlen oherwydd gofynnwyd i chi 786 00:48:48,130 --> 00:48:50,260 neu oherwydd, a dweud y gwir, nid ydych yn gwybod strlen bodoli - 787 00:48:50,260 --> 00:48:54,280 bu'n rhaid i chi gyflwyno hyn un ar eich pen eich hun - gallai sut yr ydych yn gweithredu strlen 788 00:48:54,280 --> 00:48:57,760 pan roddir rhywbeth sy'n edrych fel hyn? 789 00:48:57,760 --> 00:49:02,750 Nawr ein bod yn gwybod llinyn yn array, gallwn ailadrodd dros bob un o'r cymeriadau unigol 790 00:49:02,750 --> 00:49:06,320 defnyddio rhywbeth fel - Gadewch i geisio gwneud hyn ar y hedfan. 791 00:49:06,320 --> 00:49:12,060 >> Gadewch i mi fynd i mewn i'r ddyfais. Gadewch i mi greu ffeil newydd, strlen.c. 792 00:49:12,060 --> 00:49:19,260 Gadewch i mi fynd yn ei flaen yn awr ac yn cynnwys stdio.h fel bod gennym fynediad i printf. 793 00:49:19,260 --> 00:49:25,820 Gadewch i mi wneud int brif (gwag). Oh. 'N annhymerus' jyst yn gwneud hyn ar fy mhen fy hun am y tro wedyn. [Chuckles] 794 00:49:25,820 --> 00:49:28,300 Diolch yn fawr. 795 00:49:28,300 --> 00:49:31,000 Mae hyn yn beth rwy'n ei wneud. Mae pob hawl. 796 00:49:31,000 --> 00:49:34,820 Felly, cyn i mi droi ar y sgrin, rwy'n deipio hynny i gyd. 797 00:49:34,820 --> 00:49:37,550 Ac yn awr yr hyn yr wyf i'n mynd i wneud yw y canlynol: 798 00:49:37,550 --> 00:49:40,360 printf ("Rhowch i mi llinyn:") 799 00:49:40,360 --> 00:49:42,700 Dyna dim ond cyfarwyddiadau blewog. 800 00:49:42,700 --> 00:49:45,700 Nawr, gadewch i mi wneud llinyn s = GetString. 801 00:49:45,700 --> 00:49:47,260 Rwyf eisoes angen i wneud newid yn awr. 802 00:49:47,260 --> 00:49:52,740 Rwy'n defnyddio'r llyfrgell CS50 yn sydyn, felly gadewch i mi fynd yn ei flaen a deipio i mewn cs50.h. 803 00:49:52,740 --> 00:50:00,720 Ac yn awr gadewch i ni wneud hyn: printf ("Hyd yw:% d, strlen [s] - 804 00:50:00,720 --> 00:50:03,540 ac nid wyf yn gwneud hynny eto. Beth arall sydd raid i mi ychwanegu at y rhaglen hon? 805 00:50:03,540 --> 00:50:05,740 >> [Myfyrwyr] string.h. >> String.h. 806 00:50:05,740 --> 00:50:10,800 Felly, ar hyn o bryd, rydym yn defnyddio strlen, felly gadewch i ni wneud yn siŵr bod y casglwr yn gwybod lle hynny yw, 807 00:50:10,800 --> 00:50:12,390 felly bwyll bach gwirio. 808 00:50:12,390 --> 00:50:16,400 Im 'yn cael llinyn yn llinell 8, ac yn unol 9 Rwyf i'n argraffu ei hyd gyda d%. 809 00:50:16,400 --> 00:50:19,400 Felly, gadewch i ni fynd yn ei flaen ac yn agor hyn i fyny. 810 00:50:19,400 --> 00:50:23,380 Rydym wedi gwneud strlen - llunio iawn - 811 00:50:23,380 --> 00:50:30,120 strlen - gadewch i mi chwyddo i mewn - Mewnbynnu, H-E-L-L-O, Enter. Mae hyd yn 5. 812 00:50:30,120 --> 00:50:32,730 >> Iawn, felly strlen ymddangos i weithio, ond y byd yn gwybod hynny. 813 00:50:32,730 --> 00:50:37,310 Felly, gadewch i ni nawr weithredu strlen ein hunain fel a ganlyn. 814 00:50:37,310 --> 00:50:39,490 Gadewch i mi gymryd y llyfrgell i ffwrdd. 815 00:50:39,490 --> 00:50:42,590 Nid ydym bellach yn cael mynediad i string.h oherwydd doeddwn i ddim hyd yn oed yn gwybod ei fod yn bodoli. 816 00:50:42,590 --> 00:50:45,970 Ond mae hynny'n iawn oherwydd gallaf weithredu strlen fy hun 817 00:50:45,970 --> 00:50:50,200 ac wedi ei gymryd o'r enw llinyn mewnbwn, 818 00:50:50,200 --> 00:50:53,830 ac yn awr yr wyf angen at chyfrif i maes hyd y llinyn. 819 00:50:53,830 --> 00:50:55,880 Felly, sut y gallaf wneud hyn? 820 00:50:55,880 --> 00:51:00,190 Beth os wyf yn gwneud - gadewch i ni weld sut i wneud hyn - Beth ydych chi eisiau ei wneud? 821 00:51:00,190 --> 00:51:04,130 >> [Ymateb y myfyrwyr Anghlywadwy] >> Iawn. 822 00:51:04,130 --> 00:51:05,970 Fel y gallwn wneud hyn mewn criw o ffyrdd. Gadewch i mi geisio cymryd yr ymagwedd hon. 823 00:51:05,970 --> 00:51:10,220 Gadewch i mi roi fy hun yn newidyn int i, felly fi yn dechrau ar 0. 824 00:51:10,220 --> 00:51:19,380 A gadewch i mi ddweud hyn: er bod mewnbwn [i] ddim yn hafal i beth? \ 0. 825 00:51:19,380 --> 00:51:23,480 Felly, mae'n troi allan, fel yn achos gyda'r holl chars wrth ysgrifennu eu llythrennol mewn rhaglen, 826 00:51:23,480 --> 00:51:25,940 rhaid i chi ddefnyddio dyfyniadau nad sengl, dyfynodau dwbl. 827 00:51:25,940 --> 00:51:29,250 Felly, os wyf yn ysgrifennu'r llythyr, byddwn yn gwneud hynny, mae'r b llythyr, byddwn yn gwneud hynny. 828 00:51:29,250 --> 00:51:33,440 Mae hyn, ar y llaw arall, fyddai llinyn, nid cymeriad unigol. 829 00:51:33,440 --> 00:51:38,470 >> Felly, yr wyf am i \ 0 llythrennol. Beth ydw i am ei wneud yn y cylch? 830 00:51:38,470 --> 00:51:42,650 A dweud y gwir, yr wyf angen newidyn arall, felly hyd int yn cael 0. 831 00:51:42,650 --> 00:51:46,190 Hyd yn oed os nad ydych yn siwr pam rydym yn dechrau ar y ffordd yr ydym yn gwneud hynny, 832 00:51:46,190 --> 00:51:50,110 yn awr ein bod ni'n mynd i lawr y ffordd hon, beth ydw i eisiau ei wneud ar-lein 9? 833 00:51:50,110 --> 00:51:55,820 hyd + + ac yna i lawr yma ar llinell 10, hyd dychwelyd. 834 00:51:55,820 --> 00:51:58,370 Felly sut mae strlen gweithredu? 835 00:51:58,370 --> 00:52:00,550 Mae'n gweithredu mewn gwirionedd yn ôl pob tebyg fel hyn. 836 00:52:00,550 --> 00:52:03,470 Efallai y person yn defnyddio ar gyfer dolen, efallai wneud tra dolen - pwy a ŵyr? 837 00:52:03,470 --> 00:52:05,940 Byddem yn rhaid i edrych o dan y cwfl ar y cod ffynhonnell wirioneddol 838 00:52:05,940 --> 00:52:08,520 mewn rhai ffeil o'r enw string.c yn ôl pob tebyg. 839 00:52:08,520 --> 00:52:10,480 >> Ond yma gadewch i ni feddwl am yr hyn rwy'n ei wneud. 840 00:52:10,480 --> 00:52:13,640 Rwy'n datgan newidyn enw i, gan ei gosod gyfartal i 0. 841 00:52:13,640 --> 00:52:17,520 Rwy'n yna datgan arall hyd newidiol o'r enw, gan ei gosod gyfartal i 0. 842 00:52:17,520 --> 00:52:25,440 Yna i ddim yn dweud tra nad yw'r cymeriad ith yn y mewnbwn yn hafal i gymeriad null arbennig, \ 0, 843 00:52:25,440 --> 00:52:27,070 cynyddiad hyd. 844 00:52:27,070 --> 00:52:32,550 Ond cyn gynted ag y cymeriad ith yw hyn gymeriad arbennig, beth sy'n digwydd i'r ddolen? 845 00:52:32,550 --> 00:52:36,540 Mae'n cylchedau byr. Mae'n atal, sy'n golygu ein bod wedyn yn syth yn dychwelyd hyd. 846 00:52:36,540 --> 00:52:40,740 >> Felly, os nad wyf yn llanast i fyny, gadewch i ni fynd yn ei flaen ac yn mynd yn ôl at fy ffenestr terfynell. 847 00:52:40,740 --> 00:52:43,550 Gadewch i mi ail-grynhoi. Ac yr wyf yn sgriw i fyny. 848 00:52:43,550 --> 00:52:46,320 Redeclaration anghydnaws llyfrgell swyddogaeth strlen. 849 00:52:46,320 --> 00:52:48,650 Felly, yr wyf yn ceisio mynd yn rhy glyfar ar gyfer fy hun yn dda yma. 850 00:52:48,650 --> 00:52:51,610 Mae'r compiler mewn gwirionedd yn gwybod bod yn swyddogaeth o'r enw strlen 851 00:52:51,610 --> 00:52:55,290 er nad ydym wedi cynnwys y llyfrgell. Mae hynny'n iawn. Beth bynnag. 852 00:52:55,290 --> 00:52:58,230 Rydym yn unig yn mynd i gydweithredu hynny. Gadewch i ni ail-enwi hyd hwn. 853 00:52:58,230 --> 00:53:04,110 Gadewch i mi newid y defnydd ohono i hyd yma, a bydd hyn yn gwneud Clang hapusach. 854 00:53:04,110 --> 00:53:08,900 Fel o'r neilltu, am fod rhai o'r swyddogaethau hyn mor darn cyffredin - 855 00:53:08,900 --> 00:53:12,390 strlen, prinf - y maent mewn gwirionedd yn cael rhyw fath o statws arbennig. 856 00:53:12,390 --> 00:53:15,310 Ac felly dim ond yn gwybod Clang rhywbeth bach arbennig amdanynt. 857 00:53:15,310 --> 00:53:18,760 Dyw hynny ddim yn wir bob amser gyda swyddogaethau y rhan fwyaf o, felly dyna pam rydym yn cael yelled. 858 00:53:18,760 --> 00:53:21,350 >> Gadewch i mi geisio eto. Diolch byth, mae'n gweithio yr adeg honno. 859 00:53:21,350 --> 00:53:23,560 Felly nawr gadewch i mi redeg fy mhen fy hun strlen rhaglen. 860 00:53:23,560 --> 00:53:29,740 Rhowch i mi llinyn: H-E-L-L-O, Enter. Ac yr wyf wedi sgriwio i fyny. 861 00:53:29,740 --> 00:53:34,750 Pam? >> [Anghlywadwy ymateb y myfyrwyr] >> Yn union. 862 00:53:34,750 --> 00:53:39,180 Felly mae gen i fy hun yma dolen iawn 'n glws-edrych yn ddiddiwedd 863 00:53:39,180 --> 00:53:42,270 oherwydd hyd yn oed er fy mod i'n incrementing hyd ar bob iteriad, 864 00:53:42,270 --> 00:53:47,860 beth ydw Nid wyf yn glir yn ei wneud? Dydw i ddim yn incrementing i. Iawn. Atgyweiria hawdd. Ydw? 865 00:53:47,860 --> 00:53:52,430 Iawn. Na Nawr byddem yn rhedeg afoul o ryw gamgymeriad cyffredin eraill lle mae angen imi cromfachau. 866 00:53:52,430 --> 00:53:54,430 A dweud y gwir, mae'r cod yn dechrau edrych yn hyll, 867 00:53:54,430 --> 00:53:56,460 felly byddwn yn cymryd drywanu yn glanhau hyn i fyny mewn munud. 868 00:53:56,460 --> 00:53:58,810 Ond nawr rwy'n incrementing ddau hyd a i. 869 00:53:58,810 --> 00:54:02,630 A dweud y gwir, yr wyf eisoes yn gweld cyfle i wella yma, ond byddwn yn dod yn ôl at hynny. 870 00:54:02,630 --> 00:54:05,270 >> Felly nawr gadewch i ni dim ond gwneud yn siŵr ein bod o leiaf yn gwneud cynnydd. 871 00:54:05,270 --> 00:54:08,320 Mae hyn wedi digwydd i rai ohonoch, ac yr wyf esgeuluso sôn am hyn ymlaen llaw. 872 00:54:08,320 --> 00:54:12,420 Pan fyddwch yn cael y anffawd o sefyllfa fel hyn, sut ydych chi'n atgyweiria hon 873 00:54:12,420 --> 00:54:15,130 byr o ail gychwyn yr offer neu eich cyfrifiadur neu gau y ffenestr? 874 00:54:15,130 --> 00:54:16,860 Mae'n mewn gwirionedd yn hawdd. 875 00:54:16,860 --> 00:54:21,680 Bydd Rheoli C anfon y moron bach symbol C, ac mai dim ond yn dod i ben rhaglenni mwyaf. 876 00:54:21,680 --> 00:54:25,990 Os oes gennych dolen drwg iawn anfeidraidd sydd wedi argraffu gwaith pethau ganmil lawer, 877 00:54:25,990 --> 00:54:29,960 Weithiau efallai y byddwch yn rhaid i daro Rheoli C fil o weithiau i wneud yn mewn gwirionedd yn ei glywed. 878 00:54:29,960 --> 00:54:33,910 Felly, dim ond yn sylweddoli nawr oherwydd dydw i ddim yn argraffu unrhyw beth, a oedd yn eithaf hawdd. 879 00:54:33,910 --> 00:54:37,970 Ac yn dechnegol, unwaith suffices, ond rwy'n cael ddiamynedd, ac yr wyf fel arfer yn taro ei fod lawer gwaith. 880 00:54:37,970 --> 00:54:43,400 >> Felly strlen. Rhowch i mi llinyn: HELO. A yw'n mynd i weithio y tro hwn? 881 00:54:44,580 --> 00:54:47,490 Iawn. Camgymeriad arall cyffredin. Gorfod ail-grynhoi. 882 00:54:47,490 --> 00:54:50,430 Dyna oedd fwriadol, bod un. Mae pob hawl. 883 00:54:50,430 --> 00:54:54,260 Felly strlen, H-E-L-L-O, Enter. Ardderchog. 884 00:54:54,260 --> 00:54:55,910 Felly, mae gennym bellach strlen i 5. 885 00:54:55,910 --> 00:54:58,100 Felly, rydym wedi reimplemented llythrennol yr olwyn. 886 00:54:58,100 --> 00:55:02,080 Felly nawr gadewch i ni lanhau hyn i fyny oherwydd nid yw hyn yn gwneud i mi argraff 887 00:55:02,080 --> 00:55:04,080 â dyluniad fy cod. 888 00:55:04,080 --> 00:55:07,200 Beth allwn ni ei ddileu yn glir yn y rhaglen hon i lanhau hyn i fyny? 889 00:55:07,200 --> 00:55:11,840 [Ymateb y myfyrwyr Anghlywadwy] >> Yeah. Yn llythrennol, rydym yn trin i a hyd yn union. 890 00:55:11,840 --> 00:55:16,440 Felly pam nad ydym yn unig yn cael smart a dweud wrth hyd? 891 00:55:16,440 --> 00:55:20,450 Yn hytrach, gadewch i 'jyst alw hyd i ddechrau, ymgychwyn ei i 0 892 00:55:20,450 --> 00:55:23,340 oherwydd yn ddiofyn y llinyn nid oes hyd nes i ni chyfrif i maes beth ydyw. 893 00:55:23,340 --> 00:55:26,160 >> Nawr rydym yn gwneud hyn, ac yn awr mae hon yn rhaglen eithaf cain. 894 00:55:26,160 --> 00:55:28,660 Un newidyn. Wyf yn glanhau i fyny, ei dynhau i fyny. 895 00:55:28,660 --> 00:55:31,980 Felly nawr gadewch i ni fynd yn ôl at fy ffenestr terfynell. Gadewch i ni fynd yn ei flaen ac yn rhedeg y. 896 00:55:31,980 --> 00:55:35,670 Gwnewch strlen. Edrych yn dda. Rhedeg strlen eto, Enter. 897 00:55:35,670 --> 00:55:40,680 Rhowch i mi llinyn: HELO, Enter. Ac mae'n ymddangos ei fod yn gweithio fel 5. 898 00:55:40,680 --> 00:55:45,580 Nawr, i fod yn glir, os nad wyf wedi ysgrifennu, er enghraifft, HELO mewn 1 llinyn 899 00:55:45,580 --> 00:55:48,840 ac yna IS mewn un arall, gallwn yn sicr geiriau lluosog. 900 00:55:48,840 --> 00:55:53,150 Os nad yw'r ymadrodd yr wyf mewn gwirionedd yn awyddus i deipio yn HELO, ond, er enghraifft, 901 00:55:53,150 --> 00:55:58,920 HELO BYD, hysbysiad bod yr hyn ni fyddai gennym yw hyn yn sefyllfa yma, dde? 902 00:55:58,920 --> 00:56:00,580 Byddai hynny'n awgrymu bod hynny'n 2 llinynnau. 903 00:56:00,580 --> 00:56:06,060 Gallwch yn sicr wedi cymeriadau bar gofod, felly os ydym yn teipio mewn gwirionedd mewn ymadrodd hirach 904 00:56:06,060 --> 00:56:08,390 fel HELO BYD, yr hyn y byddem yn cael yn y cof 905 00:56:08,390 --> 00:56:12,730 yn edrych rhywbeth bach fel 'na yno. 906 00:56:12,730 --> 00:56:18,910 >> Mae pob hawl. Unrhyw gwestiynau yna am y gynrychiolaeth yma o linynnau? 907 00:56:18,910 --> 00:56:20,450 Na? Mae pob hawl. 908 00:56:20,450 --> 00:56:25,130 Felly dywedais yn gynharach fod galw strlen dro ar ôl tro yn fwriadol fel 'na 909 00:56:25,130 --> 00:56:28,070 debyg nad yw'r syniad gorau oherwydd eich bod yn mynd i fod yn gwneud llawer iawn o waith 910 00:56:28,070 --> 00:56:30,280 eto ac eto ac eto. 911 00:56:30,280 --> 00:56:36,150 Yn wir, pa fath o waith yn angenrheidiol ar gyfer figuring allan hyd y llinyn, mae'n debyg? 912 00:56:36,150 --> 00:56:40,720 Mae'n rhaid i chi ddechrau ar y dechrau ac yna edrych, edrych, edrych, edrych, edrych 913 00:56:40,720 --> 00:56:44,930 hyd nes y byddwch yn olaf yn gweld bod cymeriad arbennig, a phryd hynny, AH, yn awr yr wyf yn gwybod hyd. 914 00:56:44,930 --> 00:56:48,040 Felly, yn gynharach pan yr oeddem wedi strlen cael eu galw unwaith eto ac eto ac eto, 915 00:56:48,040 --> 00:56:52,080 y rheswm pam yr oedd cynnig y math o dwp oherwydd unwaith eto, y llinyn yn edrych fel 'na. 916 00:56:52,080 --> 00:56:54,880 Dyw hi ddim yn mynd i newid bob tro y byddwch yn ailadrodd drwy rai dolen, 917 00:56:54,880 --> 00:56:56,890 felly rydych yn gwneud gwaith diangen. 918 00:56:56,890 --> 00:57:00,620 Ar yr un pryd, dylech wybod, wrth fynd heibio, y detholwyr fel y Clang y dyddiau hyn 919 00:57:00,620 --> 00:57:02,530 wedi cael eu datblygu dros nifer o flynyddoedd, 920 00:57:02,530 --> 00:57:05,690 ac awduron compiler, rhaglenwyr, yn eithaf smart. 921 00:57:05,690 --> 00:57:10,170 Ac felly mae'n troi allan y gall crynoadyddion Clang ac eraill mewn gwirionedd yn chyfrif i maes bod, 922 00:57:10,170 --> 00:57:13,650 iawn, ie, rydych wedi ysgrifennu strlen yn eich cyflwr, 923 00:57:13,650 --> 00:57:17,520 sydd yn dechnegol yn golygu y byddwn yn galw eto ac eto ac eto. 924 00:57:17,520 --> 00:57:21,880 Ond gall crynoadyddion smart mewn gwirionedd yn gwneud y gorau y mathau hynny o benderfyniadau defnyddiwr gwael 925 00:57:21,880 --> 00:57:23,870 allan o'ch cod i wneud iawn am bethau. 926 00:57:23,870 --> 00:57:27,360 >> Felly peidiwch â dim ond yn sylweddoli bod weithiau yn y compiler yn gallach na ni 927 00:57:27,360 --> 00:57:29,210 a bydd yn fath o guddio ein camgymeriadau ein hunain. 928 00:57:29,210 --> 00:57:31,620 Ond yn sicr pan ddaw i setiau broblem ac yn y blaen, 929 00:57:31,620 --> 00:57:35,340 peidiwch fod yn meddwl am y penderfyniadau dylunio sylfaenol wallus 930 00:57:35,340 --> 00:57:38,110 o bosibl am y rheswm syml y byddem yn gwneud gwaith ffordd fwy 931 00:57:38,110 --> 00:57:41,330 nag yr ydym mewn gwirionedd yn rhaid i ni ei wneud. Ond faint mwy o waith? 932 00:57:41,330 --> 00:57:44,960 Yn achos BYD HELO, gadewch i ni ddechrau i gyffredinoli maint y broblem. 933 00:57:44,960 --> 00:57:48,100 Beth yw hyd y broblem neu faint y broblem 934 00:57:48,100 --> 00:57:50,770 pan fydd y gair y defnyddiwr deipio i mewn yn HELO? 935 00:57:50,770 --> 00:57:53,790 Mae'n debyg 5, efallai 6. Plws neu finws 1. Beth bynnag. 936 00:57:53,790 --> 00:57:55,680 Mae mor agos byddwn yn ei alw'n ddim 5. 937 00:57:55,680 --> 00:58:00,480 >> Felly beth yw'r maint y broblem yma wrth geisio chyfrif i maes hyd HELO? 938 00:58:00,480 --> 00:58:06,790 Mae'n 1, 2, 3, 4, 5, ac efallai 6 ar gyfer y cymeriad diwethaf, ond gadewch i ni cyffredinoli gan fod n. 939 00:58:06,790 --> 00:58:10,300 Felly n, dim ond y n amrywiol, yw'r hyn y byddai gwyddonwyr cyfrifiadurol fel arfer yn defnyddio 940 00:58:10,300 --> 00:58:13,890 i ddisgrifio faint o broblem, ac mae'r broblem dan sylw yw pa mor hir yw HELO? 941 00:58:13,890 --> 00:58:17,050 Faint o amser mae'n cymryd strlen? 942 00:58:17,050 --> 00:58:21,010 Mae'n cymryd ar y drefn o gamau n, lle mae pob cam yn golygu edrych ar gymeriad, 943 00:58:21,010 --> 00:58:23,350 edrych ar gymeriad, yn edrych ar gymeriad. 944 00:58:23,350 --> 00:58:26,850 Ac rydym wedi cael y drafodaeth hon ychydig yn ôl, nifer y llawdriniaethau rhywbeth yn mynd. 945 00:58:26,850 --> 00:58:29,910 Y diwrnod cyntaf o ddosbarth rydym wedi bawb lletchwith yn sefyll i fyny, 946 00:58:29,910 --> 00:58:32,060 ac yna pawb yn dechrau paru i ffwrdd gyda'i gilydd 947 00:58:32,060 --> 00:58:35,990 er mwyn gwirionedd yn ddelfrydol cyfrif faint o bobl oedd yn yr ystafell. 948 00:58:35,990 --> 00:58:39,860 Ac rydym hefyd yn gwneud beth arall lle os byddaf yn hytrach yn gwneud yn y ffordd hen ysgol 949 00:58:39,860 --> 00:58:44,800 o jyst yn cychwyn 1, 2, 3, 4, 5, 6 ac yn y blaen, 950 00:58:44,800 --> 00:58:49,360 hynny hefyd, maint y broblem yn n maint. Roedd pobl n yn yr ystafell. 951 00:58:49,360 --> 00:58:52,010 Ond roeddwn yn gallu cyflymu'r bod hyd, dde? Arddull ysgol radd gallwn ddechrau cyfrif mewn 2s. 952 00:58:52,010 --> 00:58:55,560 2, 4, 6, 8, 10, 12. A bod yn teimlo mor llawer cyflymach, ac yn wir mae'n. 953 00:58:55,560 --> 00:59:01,720 Mae'n llythrennol ddwywaith mor gyflym, ond eto, os arall 400 o bobl yn cerdded i mewn i'r ystafell 954 00:59:01,720 --> 00:59:08,250 i gyd ar unwaith, byddai'r rhai algorithmau yn cymryd 200 o 400 neu efallai camau. 955 00:59:08,250 --> 00:59:13,310 >> Ond ar y llaw arall, os ydym mewn gwirionedd yn cael smart, ac rydym yn hytrach yn cael yr holl ydych yn cyfrif eich hunain, 956 00:59:13,310 --> 00:59:15,280 dwyn i gof sut y algorithm yn gweithio. 957 00:59:15,280 --> 00:59:17,110 Chi i gyd yn sefyll i fyny. Gadewch i mi yn gyflym-ymlaen at hyn. 958 00:59:17,110 --> 00:59:20,430 Rydych chi i gyd yn sefyll i fyny, byddwch yn paru i ffwrdd, yna hanner chi eistedd i lawr, 959 00:59:20,430 --> 00:59:22,510 hanner ohonoch eistedd i lawr, hanner chi eistedd i lawr, 960 00:59:22,510 --> 00:59:27,350 ac ar bob fersiwn o hwn yn ddolen o wythnos 0, rydym yn haneru problem wrth law 961 00:59:27,350 --> 00:59:30,040 ac aeth i n / 2, ac yna n / 4, ac yna n / 8. 962 00:59:30,040 --> 00:59:35,350 Ac goblygiad hynny yw, os arall 400 o bobl yn cerdded i mewn i'r ystafell, dim llawer mawr, 963 00:59:35,350 --> 00:59:40,120 bydd yn mynd â ni rownd 1 yn fwy, nid 400 rowndiau mwy, nid 200 rowndiau mwy. 964 00:59:40,120 --> 00:59:43,640 Ac felly y stori rydym yn dweud beth amser yn ôl roedd yn rhaid i wneud rhywbeth bach gyda hyn. 965 00:59:43,640 --> 00:59:47,750 Mae'r llinell goch yma yn llinol, mae'n syth, ac mae'n labelu fel n 966 00:59:47,750 --> 00:59:50,250 oherwydd wrth i faint o broblem yn tyfu, 967 00:59:50,250 --> 00:59:54,690 os yw eich algorithm neu raglen yr ydych chi'n ei datrys yn cymryd camau n, 968 00:59:54,690 --> 00:59:58,620 gallwn blotio fel llinell syth lle mae'n cymryd mwy o amser po fwyaf y maint y broblem. 969 00:59:58,620 --> 01:00:03,280 A'r dull twosies cyfrif 2, 4, 6, 8, dal i fod yn llinell syth, dim ond ychydig yn well. 970 01:00:03,280 --> 01:00:08,440 Mae'n cymryd amser ychydig yn llai, felly mae'r llinell melyn yn is na'r pwynt llinell goch ar gyfer pwynt. 971 01:00:08,440 --> 01:00:12,580 >> Ond hyd yn oed yn well oedd y greal sanctaidd yr hyn rydym yn galw amser logarithmig 972 01:00:12,580 --> 01:00:14,830 lle hyd yn oed os ydym unwaith eto yn dyblu nifer y bobl yn yr ystafell, 973 01:00:14,830 --> 01:00:18,240 rydym yn dyblu maint y llyfr ffôn o ddiwrnod cyntaf y dosbarthiadau, 974 01:00:18,240 --> 01:00:22,310 dim llawer mawr, mae'n cymryd 1 rhwyg dudalen mwy, yn cymryd 1 eistedd i lawr mwy o 975 01:00:22,310 --> 01:00:25,550 er mwyn datrys problem sy'n ddwywaith mor fawr. 976 01:00:25,550 --> 01:00:27,460 Ac felly y sgwrs ydym yn awr yn mynd i ddechrau cael ei 977 01:00:27,460 --> 01:00:30,380 sut ydym yn mewn gwirionedd yn datrys problemau effeithiol 978 01:00:30,380 --> 01:00:32,510 os byddwn yn ystyried y symlaf o broblemau fel hyn? 979 01:00:32,510 --> 01:00:36,210 Tybiwch fod gennym 8 ddrysau y tu ôl sef rhai rhifau, 980 01:00:36,210 --> 01:00:39,720 ac nid pob un o'r rhifau hyn yn cael ei datrys mewn unrhyw ffordd, 981 01:00:39,720 --> 01:00:42,830 eu bod yn gyfanrifau dim ond ar hap y tu ôl i'r drysau, 982 01:00:42,830 --> 01:00:47,290 ac rydym yn gofyn y cwestiwn sut ydych chi'n mynd ati i ddod o hyd i'r rhif - pwy a ŵyr - 983 01:00:47,290 --> 01:00:50,250 7 tu ôl i'r drysau? 984 01:00:50,250 --> 01:00:53,400 Beth fyddech chi, bod dynol, ei wneud er mwyn dod o hyd i mi rhif 7 985 01:00:53,400 --> 01:00:56,810 os unwaith eto bob un o'r rhain yn ddrysau ac i weld gwerth yn rhaid i chi agor drws? 986 01:00:56,810 --> 01:00:59,650 Beth fyddai eich algorithm fod yn efallai? 987 01:00:59,650 --> 01:01:05,310 >> [Ymateb y myfyrwyr Anghlywadwy] >> Felly dechrau gyda'r chwith ac agor drws, agor drws, agor drws. 988 01:01:05,310 --> 01:01:08,570 Ac yn yr achos gwaethaf, pa mor hir mae'n mynd i fynd â ni i ddod o hyd i'r rhif 7? 989 01:01:08,570 --> 01:01:12,800 Ac eto, nid ydynt yn didoli, felly nid yw mor hawdd â, wel, dw i'n mynd i agor y drws 7fed. 990 01:01:12,800 --> 01:01:15,240 Gallai gymryd i ni, maximally, 8 cam. 991 01:01:15,240 --> 01:01:19,940 Yn yr achos gwaethaf, 7 yn hap ar ddiwedd y llinell o ddrysau, 992 01:01:19,940 --> 01:01:22,090 felly efallai y rhaid i ni geisio yr holl ddrysau n. 993 01:01:22,090 --> 01:01:24,440 Felly eto yma, rydym yn ymddangos i gael algorithm llinol. 994 01:01:24,440 --> 01:01:27,030 Yn wir, rydym yn gwneud hyn dim ond ychydig o flynyddoedd yn ôl. 995 01:01:27,030 --> 01:01:29,910 Mae un o'ch rhagflaenwyr ei herio gyda'r union y 996 01:01:29,910 --> 01:01:32,050 lle nad oedd gennym fersiwn digidol, yr ydym yn hytrach roedd bwrdd du 997 01:01:32,050 --> 01:01:33,780 gyda rhai darnau o bapur arno. 998 01:01:33,780 --> 01:01:36,940 A hyn yr wyf yn meddwl y byddwn i'n ei wneud yw cymryd cipolwg yn ôl ar sut y mae hyn yn mynd, 999 01:01:36,940 --> 01:01:40,760 un o'r cyfleoedd gorau ac efallai yn bwysicaf lletchwith ar y llwyfan 1000 01:01:40,760 --> 01:01:42,530 i gael arddangosfa yma ar Sanders. 1001 01:01:42,530 --> 01:01:44,000 Cawsom 2 res o rifau. 1002 01:01:44,000 --> 01:01:47,280 Rydym yn unig yn mynd i edrych ar yr hyn sy'n digwydd yma gyda Sean gyfer frig y rhesi. 1003 01:01:47,280 --> 01:01:49,660 Oni bai nad oes neb byth eto gwirfoddolwyr yn CS50, 1004 01:01:49,660 --> 01:01:52,010 cawsom Sean bendith i gadw hyn ar gamera, 1005 01:01:52,010 --> 01:01:54,670 fel ei fod yn gwybod bod cannoedd o bobl wedi bod yn gwylio hyn yn awr am flynyddoedd. 1006 01:01:54,670 --> 01:01:59,500 Ond mae Sean wedi gwneud gwaith anhygoel - neu a oedd ef -? Yn mewn gwirionedd yn dod o hyd i ni nifer arbennig. 1007 01:01:59,500 --> 01:02:04,570 >> Felly, gadewch i ni weld sut y datrys y algorithm fel y byddwn yn ailgydio yn y sgwrs hon cyn bo hir 1008 01:02:04,570 --> 01:02:08,300 o sut rydym yn dod o hyd i bethau yn effeithlon. 1009 01:02:08,300 --> 01:02:12,300 [Malan ar fideo] wyf wedi cuddio y tu ôl i'r drysau y rhif 7, 1010 01:02:12,300 --> 01:02:16,710 ond cuddio yn rhai o'r drysau yn ogystal yn eraill nad ydynt yn negyddol rhifau, 1011 01:02:16,710 --> 01:02:19,980 a bod eich nod yw i feddwl am y rhes uchaf o rifau fel dim ond arae 1012 01:02:19,980 --> 01:02:22,920 neu dim ond dilyniant o ddarnau o bapur gyda rhifau y tu ôl iddynt, 1013 01:02:22,920 --> 01:02:26,960 a bod eich nod yw, dim ond gan ddefnyddio amrywiaeth top yma, dod o hyd i 'm' r rhif 7. 1014 01:02:26,960 --> 01:02:30,800 Ac rydym yn wedyn yn mynd i feirniadu sut yr ydych yn mynd ati i wneud hynny. >> Mae pob hawl. 1015 01:02:30,800 --> 01:02:33,880 [Malan] Dod o hyd i ni y rhif 7, os gwelwch yn dda. 1016 01:02:36,210 --> 01:02:38,350 [Chwerthin] 1017 01:02:41,610 --> 01:02:44,460 [Malan] Rhif [chwerthin] 1018 01:02:45,760 --> 01:02:58,080 5, 19, 13, [chwerthin]. Nid yw'n gwestiwn castia. 1019 01:03:00,560 --> 01:03:02,390 1. 1020 01:03:04,560 --> 01:03:06,910 [Chwerthin] 1021 01:03:06,910 --> 01:03:10,760 Ar y pwynt hwn nad yw eich sgôr yn dda iawn, felly efallai y byddwch yn ogystal dal i fynd. [Chwerthin] 1022 01:03:12,490 --> 01:03:14,070 3. 1023 01:03:17,340 --> 01:03:23,480 Ewch ymlaen. A dweud y gwir, ni allaf helpu ond meddwl beth ydych yn hyd yn oed yn meddwl am. [Chwerthin] 1024 01:03:25,010 --> 01:03:28,870 Dim ond y rhes uchaf, felly mae gennych 3 ar y chwith. Felly dod o hyd i mi 7. 1025 01:03:28,870 --> 01:03:45,360 [Fyfyrwyr grwgnach] 1026 01:03:46,270 --> 01:03:49,870 [Malan] 17. 1027 01:03:49,870 --> 01:03:55,460 [Fyfyrwyr grwgnach] 1028 01:03:56,920 --> 01:04:01,550 [Malan] 7! [Cymeradwyaeth] 1029 01:04:01,550 --> 01:04:06,080 >> Felly, ar ddydd Mercher byddwn yn plymio i mewn i hyn ac algorithmau soffistigedig mwy am ddod o hyd i bethau. 1030 01:04:06,080 --> 01:04:10,200 Am nawr byddwn yn gadael i chi gyda Sean a gweld chi ar ddydd Mercher. 1031 01:04:11,280 --> 01:04:13,000 [CS50.TV]