1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Wythnos 4] 2 00:00:03,000 --> 00:00:05,000 [David J. Malan] [Harvard University] 3 00:00:05,000 --> 00:00:08,000 [Mae hyn yn CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Mae pob hawl, mae hyn yn CS50, ac mae hyn yn dechrau o wythnos 4, 5 00:00:12,000 --> 00:00:16,000 a dyma un o'r algorithmau didoli arafaf posibl. 6 00:00:16,000 --> 00:00:19,000 Pa un sydd yn wir ein bod dim ond gwylio yno? 7 00:00:19,000 --> 00:00:24,000 Dyna oedd fath swigod, er mawr O (n ^ 2) + swm, 8 00:00:24,000 --> 00:00:28,000 ac yn wir nid ni yw'r unig rai yn y byd hwn i bob golwg yn gwybod 9 00:00:28,000 --> 00:00:30,000 pa fath swigod yn neu ei amser yn rhedeg. 10 00:00:30,000 --> 00:00:33,000 Yn wir, roedd hyn yn cyfweliad gyda Eric Schmidt o Google 11 00:00:33,000 --> 00:00:45,000 a chyn Seneddwr Barack Obama dim ond ychydig flynyddoedd yn ôl. 12 00:00:45,000 --> 00:00:48,000 >> Yn awr, Seneddwr, rydych yma yn Google, 13 00:00:48,000 --> 00:00:54,000 ac rwy'n hoffi meddwl am y llywyddiaeth fel cyfweliad am swydd. 14 00:00:54,000 --> 00:00:58,000 Yn awr, mae'n anodd i gael swydd fel llywydd, a ydych yn mynd trwy'r llymder yn awr. 15 00:00:58,000 --> 00:01:00,000 Mae hefyd yn anodd i gael swydd yn Google. 16 00:01:00,000 --> 00:01:05,000 Mae gennym gwestiynau, ac rydym yn gofyn i'n cwestiynau i ymgeiswyr, 17 00:01:05,000 --> 00:01:10,000 ac mae hyn yn un yn dod o Larry Schwimmer. 18 00:01:10,000 --> 00:01:14,000 Rydych guys meddwl fy mod i'n kidding? Mae'n iawn yma. 19 00:01:14,000 --> 00:01:18,000 Beth yw'r ffordd fwyaf effeithlon i ddatrys miliwn o 32-bit gyfanrifau? 20 00:01:18,000 --> 00:01:21,000 [Chwerthin] 21 00:01:21,000 --> 00:01:24,000 Wel- 22 00:01:24,000 --> 00:01:26,000 Mae'n ddrwg gen i. >> Na, na, na, na. 23 00:01:26,000 --> 00:01:34,000 Dwi'n meddwl y byddai'r fath swigen yn y ffordd anghywir i fynd. 24 00:01:34,000 --> 00:01:39,000 >> Dewch ymlaen, a ddywedodd wrtho hyn? 25 00:01:39,000 --> 00:01:43,000 Yr wythnos diwethaf yn cofio rydym yn cymryd seibiant o god, o leiaf am y dydd, 26 00:01:43,000 --> 00:01:46,000 a dechrau canolbwyntio ar rai syniadau ar lefel uwch a datrys problemau yn fwy cyffredinol 27 00:01:46,000 --> 00:01:49,000 yng nghyd-destun chwilio a didoli, 28 00:01:49,000 --> 00:01:53,000 ac rydym yn cyflwyno rhywbeth nad ydym yn slap yr enw hwn yr wythnos diwethaf, 29 00:01:53,000 --> 00:01:56,000 ond nodiant asymptotic, O Fawr, mae Omega Fawr, 30 00:01:56,000 --> 00:02:00,000 ac weithiau y nodiant Theta Fawr, ac roedd y rhain yn syml ffyrdd 31 00:02:00,000 --> 00:02:02,000 o ddisgrifio amser yn rhedeg o algorithmau, 32 00:02:02,000 --> 00:02:05,000 faint o amser mae'n ei gymryd i algorithm i redeg. 33 00:02:05,000 --> 00:02:08,000 >> Ac efallai y byddwch yn cofio eich bod yn siarad am yr amser yn rhedeg o ran maint 34 00:02:08,000 --> 00:02:11,000 y cyfraniad, yr ydym yn gyffredinol yn galw n, beth bynnag y gall y broblem fod, 35 00:02:11,000 --> 00:02:13,000 lle mae n yw nifer y bobl yn yr ystafell, 36 00:02:13,000 --> 00:02:17,000 nifer y tudalennau mewn llyfr ffôn, ac rydym yn dechrau ysgrifennu pethau allan 37 00:02:17,000 --> 00:02:21,000 fel O (n ^ 2) neu O (n) neu O (n log n), 38 00:02:21,000 --> 00:02:24,000 a hyd yn oed pan nad yw'r math oedd yn eithaf gweithio allan mor berffaith 39 00:02:24,000 --> 00:02:28,000 ac roedd n ² - n / 2 neu rywbeth fel 'na 40 00:02:28,000 --> 00:02:31,000 fe fyddwn yn hytrach dim ond taflu rhai o'r termau a gorchymyn llai, 41 00:02:31,000 --> 00:02:34,000 ac mae'r chymhelliant, nid yw ein bod wir eisiau 42 00:02:34,000 --> 00:02:37,000 math o ffordd wrthrychol o werthuso 43 00:02:37,000 --> 00:02:39,000 perfformiad rhaglenni neu berfformiad o algorithmau 44 00:02:39,000 --> 00:02:42,000 ar ddiwedd y dydd wedi ddim i'w wneud, er enghraifft, 45 00:02:42,000 --> 00:02:45,000 gyda cyflymder eich cyfrifiadur heddiw. 46 00:02:45,000 --> 00:02:47,000 >> Er enghraifft, os ydych yn gweithredu fath swigod, 47 00:02:47,000 --> 00:02:50,000 neu os ydych yn gweithredu gyfuno fath neu ddewis didoli ar gyfrifiadur heddiw, 48 00:02:50,000 --> 00:02:53,000 cyfrifiadur GHz 2, a ydych yn rhedeg, 49 00:02:53,000 --> 00:02:56,000 ac mae'n cymryd rhywfaint o nifer o eiliadau, y flwyddyn nesaf, mae 'na GHz 3 50 00:02:56,000 --> 00:02:59,000 neu efallai y cyfrifiadur GHz 4, ac yna yn honni bod "Wow, fy algorithm 51 00:02:59,000 --> 00:03:03,000 yn awr ddwywaith mor gyflym, "pan mewn gwirionedd nad amlwg yn yr achos. 52 00:03:03,000 --> 00:03:06,000 Dim ond y caledwedd wedi gotten yn gyflymach, ond mae eich cyfrifiadur 53 00:03:06,000 --> 00:03:10,000 nad yw wedi, ac felly rydym yn awyddus iawn i daflu i ffwrdd pethau fel 54 00:03:10,000 --> 00:03:13,000 lluosrifau o 2 neu luosrifau o 3 pan ddaw i ddisgrifio 55 00:03:13,000 --> 00:03:17,000 pa mor gyflym neu mor araf algorithm yw hi a dim ond yn canolbwyntio 56 00:03:17,000 --> 00:03:20,000 ar n neu ryw ffactor ohono, 57 00:03:20,000 --> 00:03:24,000 rhai grym hi fel yn achos y math o wythnos diwethaf. 58 00:03:24,000 --> 00:03:27,000 A dwyn i gof bod gyda chymorth uno fath 59 00:03:27,000 --> 00:03:31,000 oeddem yn gallu gwneud hynny yn llawer gwell na math swigod a didoli dewis 60 00:03:31,000 --> 00:03:33,000 a didoli gosod hyd yn oed. 61 00:03:33,000 --> 00:03:36,000 >> Rydym yn mynd i lawr i log n n, ac unwaith eto, 62 00:03:36,000 --> 00:03:39,000 dwyn i gof bod n log yn gyffredinol yn cyfeirio at rywbeth sy'n tyfu 63 00:03:39,000 --> 00:03:43,000 arafach, yna n, felly n log n hyd yn hyn yn dda 64 00:03:43,000 --> 00:03:45,000 oherwydd ei fod yn llai na n ². 65 00:03:45,000 --> 00:03:47,000 Ond er mwyn cyflawni n mewngofnodi n ag uno fath 66 00:03:47,000 --> 00:03:51,000 beth oedd y germ sylfaenol o syniad bod rhaid i ni trosoledd 67 00:03:51,000 --> 00:03:54,000 ein bod leveraged hefyd yn ôl yn yr wythnos 0? 68 00:03:54,000 --> 00:03:58,000 Sut wnaethom ni fynd i'r afael â'r broblem didoli gelfydd gyda uno fath? 69 00:03:58,000 --> 00:04:04,000 Beth oedd y mewnwelediad allweddol, efallai? 70 00:04:04,000 --> 00:04:07,000 Unrhyw un o gwbl. 71 00:04:07,000 --> 00:04:09,000 Iawn, gadewch i ni gymryd cam yn ôl. 72 00:04:09,000 --> 00:04:11,000 Disgrifiwch uno fath yn eich geiriau eich hun. 73 00:04:11,000 --> 00:04:15,000 Sut wnaeth hyn weithio? 74 00:04:15,000 --> 00:04:17,000 Iawn, byddwn yn rwyfo yn ôl i 0 wythnos. 75 00:04:17,000 --> 00:04:19,000 Iawn, yeah. 76 00:04:19,000 --> 00:04:22,000 [Anghlywadwy-myfyrwyr] 77 00:04:22,000 --> 00:04:26,000 Iawn, da, felly rydym yn rhannu yr amrywiaeth o rifau i mewn i 2 ddarn. 78 00:04:26,000 --> 00:04:29,000 Rydym yn datrys pob un o'r darnau, ac yna rydym yn uno nhw, 79 00:04:29,000 --> 00:04:33,000 ac rydym wedi gweld y syniad hwn o'r blaen o gymryd problem sy'n ydyn nhw fawr 80 00:04:33,000 --> 00:04:36,000 ac yn torri i fyny i mewn i broblem sy'n ydyn mawr neu fawr hon. 81 00:04:36,000 --> 00:04:38,000 >> Dwyn i gof y ffôn enghraifft llyfr. 82 00:04:38,000 --> 00:04:42,000 Dwyn i gof y algorithm hunan-gyfrif o wythnosau yn ôl, 83 00:04:42,000 --> 00:04:45,000 fath felly uno ei grynhoi gan y pseudocode yma. 84 00:04:45,000 --> 00:04:48,000 Pan fyddwch chi'n rhoi elfennau n, yn gyntaf roedd yn pwyll gwirio. 85 00:04:48,000 --> 00:04:51,000 Os n <2 peidiwch â'i wneud unrhyw beth o gwbl 86 00:04:51,000 --> 00:04:55,000 oherwydd os n <2 yna n yn amlwg yn 0 neu 1, 87 00:04:55,000 --> 00:04:57,000 ac felly os yw naill ai 0 neu 1 does dim byd i ddatrys. 88 00:04:57,000 --> 00:04:59,000 Rydych yn ei wneud. 89 00:04:59,000 --> 00:05:01,000 Mae eich rhestr eisoes yn didoli trivially. 90 00:05:01,000 --> 00:05:04,000 Ond fel arall, os oes gennych 2 neu fwy o elfennau mynd yn ei flaen ac yn eu rhannu 91 00:05:04,000 --> 00:05:06,000 yn 2 hanner, chwith ac i'r dde. 92 00:05:06,000 --> 00:05:09,000 Trefnu pob un o'r hanner, ac yna cyfuno'r hanner didoli. 93 00:05:09,000 --> 00:05:13,000 Ond y broblem yma yw bod ar yr olwg gyntaf mae hyn yn teimlo fel ein bod yn punting. 94 00:05:13,000 --> 00:05:17,000 Mae hwn yn ddiffiniad cylchol yn, os wyf wedi gofyn i chi i roi trefn ar yr elfennau n 95 00:05:17,000 --> 00:05:22,000 ac rydych yn dweud wrthyf "Mae pob hawl, iawn, byddwn yn didoli elfennau hynny n / 2 a'r rhai n / 2," 96 00:05:22,000 --> 00:05:27,000 yna fy nghwestiwn nesaf yn mynd i fod yn "Iawn, sut ydych chi'n datrys y n / 2 elfen?" 97 00:05:27,000 --> 00:05:30,000 >> Ond oherwydd strwythur y rhaglen, 98 00:05:30,000 --> 00:05:33,000 oherwydd bod yr achos sylfaenol, fel petai, 99 00:05:33,000 --> 00:05:39,000 yr achos hwn arbennig sy'n dweud os yw 00:05:42,000 Nad ydynt yn ymateb â'r ateb hwnnw cylchlythyr un. 101 00:05:42,000 --> 00:05:46,000 Mae'r broses hon, bydd y cyclicity yn y pen draw dod i ben. 102 00:05:46,000 --> 00:05:50,000 Os byddaf yn gofyn i chi "Trefnu elfennau hyn n," a ydych yn dweud, "Iawn, trefn ar y n / 2," 103 00:05:50,000 --> 00:05:53,000 yna dweud, "Iawn, math y rhain n / 4, n / 8, n/16," 104 00:05:53,000 --> 00:05:56,000 yn y pen draw byddwch yn rhannu gan nifer ddigon mawr 105 00:05:56,000 --> 00:05:59,000 y byddwch yn cael dim ond 1 y chwith elfen, a phryd hynny gallwch ddweud, 106 00:05:59,000 --> 00:06:02,000 "Yma, dyma elfen datrys sengl." 107 00:06:02,000 --> 00:06:06,000 Yna y disgleirdeb y algorithm i fyny yma yn deillio o'r ffaith 108 00:06:06,000 --> 00:06:09,000 , pan fydd gennych yr holl restrau hyn didoli unigol, 109 00:06:09,000 --> 00:06:12,000 pob un ohonynt o faint 1, sy'n ymddangos i fod yn ddiwerth, 110 00:06:12,000 --> 00:06:15,000 unwaith i chi ddechrau cyfuno ac uno nhw eu 111 00:06:15,000 --> 00:06:19,000 rydych yn adeiladu i fyny yn olaf fel y gwnaeth Rob yn y fideo rhestr datrys o'r diwedd. 112 00:06:19,000 --> 00:06:22,000 >> Ond mae hyn yn syniad yn ymestyn ymhell y tu hwnt i didoli. 113 00:06:22,000 --> 00:06:26,000 Mae hwn yn syniad gwreiddio yn y rhaglen hon a elwir yn dychweliad, 114 00:06:26,000 --> 00:06:29,000 y syniad lle rydych yn rhaglen, 115 00:06:29,000 --> 00:06:32,000 ac i ddatrys rhyw broblem fyddwch yn ffonio eich hun, 116 00:06:32,000 --> 00:06:36,000 neu eu rhoi yng nghyd-destun ieithoedd rhaglennu ydych yn swyddogaeth, 117 00:06:36,000 --> 00:06:39,000 ac er mwyn datrys problem, rydych yn y swyddogaeth galw eich hun 118 00:06:39,000 --> 00:06:42,000 eto ac eto ac eto, ond i chi y swyddogaeth 119 00:06:42,000 --> 00:06:44,000 ni all alw eich hun weithiau anfeidrol lawer. 120 00:06:44,000 --> 00:06:47,000 Yn y pen draw mae'n rhaid i chi gwaelod allan, fel petai, 121 00:06:47,000 --> 00:06:49,000 a chael rhyw amod sylfaen hard-coded sy'n dweud 122 00:06:49,000 --> 00:06:53,000 ar y pwynt hwn roi'r gorau i ffonio eich hun fel bod yr holl broses 123 00:06:53,000 --> 00:06:56,000 yn olaf mewn gwirionedd yn dod i ben. 124 00:06:56,000 --> 00:06:58,000 Beth mae hyn yn ei olygu mewn gwirionedd, i recurse? 125 00:06:58,000 --> 00:07:01,000 >> Gadewch i ni weld, os gallwn wneud syml, er enghraifft ddibwys â, dyweder, 126 00:07:01,000 --> 00:07:03,000 3 o bobl gyda mi i fyny yma ar y llwyfan, os yw rhywun yn gyfforddus. 127 00:07:03,000 --> 00:07:06,000 1, yn dod ar hyd, 2 a 3. 128 00:07:06,000 --> 00:07:09,000 Os chi 3 eisiau dod i fyny yma. 129 00:07:09,000 --> 00:07:12,000 Os ydych am sefyll drws nesaf i mi yma mewn llinell, mae'n debyg bod y broblem dan sylw 130 00:07:12,000 --> 00:07:15,000 iawn trivially cyfrif y nifer o bobl sydd yma. 131 00:07:15,000 --> 00:07:18,000 Ond dweud y gwir, rwy'n wedi blino o'r holl enghreifftiau hyn gyfrif. 132 00:07:18,000 --> 00:07:21,000 Mae hyn yn mynd i gymryd peth amser, 1, 2, a dot, dot, dot. 133 00:07:21,000 --> 00:07:23,000 Mae'n mynd i gymryd am byth. 134 00:07:23,000 --> 00:07:25,000 Roeddwn yn hytrach dim ond punt y broblem hon yn gyfan gwbl gyda chymorth o-beth yw eich enw? 135 00:07:25,000 --> 00:07:27,000 Sara. >> Sara, popeth yn iawn. 136 00:07:27,000 --> 00:07:29,000 Kelly. >> Kelly a? 137 00:07:29,000 --> 00:07:31,000 >> Willy. >> Willy, Sara, Kelly, a Willy. 138 00:07:31,000 --> 00:07:34,000 Ar hyn o bryd rwyf wedi bod yn gofyn y cwestiwn gan rywun 139 00:07:34,000 --> 00:07:37,000 faint o bobl sydd i fyny ar hyn o bryd, ac nid oes gennyf syniad. 140 00:07:37,000 --> 00:07:40,000 Mae hon yn rhestr hir iawn, ac felly yn lle rwyf i'n mynd i wneud y gamp. 141 00:07:40,000 --> 00:07:43,000 Rydw i'n mynd i ofyn i'r person nesaf i mi i wneud y rhan fwyaf o'r gwaith, 142 00:07:43,000 --> 00:07:46,000 ac unwaith mae hi'n ei wneud gwneud y rhan fwyaf o'r gwaith 143 00:07:46,000 --> 00:07:49,000 Rydw i'n mynd i wneud y maint lleiaf o waith posibl a dim ond ychwanegu 1 144 00:07:49,000 --> 00:07:51,000 i beth bynnag ei ​​hateb yw, felly dyma ni. 145 00:07:51,000 --> 00:07:54,000 Rwyf wedi bod yn gofyn faint o bobl sydd ar y llwyfan. 146 00:07:54,000 --> 00:07:57,000 Faint o bobl sydd ar y llwyfan ar y chwith i chi? 147 00:07:57,000 --> 00:08:00,000 Rhaid i'r chwith i mi? >> Iawn, ond nid ydynt yn twyllo. 148 00:08:00,000 --> 00:08:04,000 Mae hynny'n dda, mae hynny'n gywir, ond os ydym am barhau â'r rhesymeg 149 00:08:04,000 --> 00:08:08,000 gadewch i ni dybio eich bod yn yr un modd am punt y broblem hon ar y chwith i chi, 150 00:08:08,000 --> 00:08:11,000 felly, yn hytrach nag ateb yn uniongyrchol mynd yn ei flaen a dim ond taflu'r baich. 151 00:08:11,000 --> 00:08:14,000 O, faint o bobl sydd ar y chwith i mi? 152 00:08:14,000 --> 00:08:16,000 Faint o bobl sydd ar y chwith? 153 00:08:16,000 --> 00:08:18,000 1. 154 00:08:18,000 --> 00:08:27,000 [Chwerthin] 155 00:08:27,000 --> 00:08:30,000 Iawn, felly 0, felly beth nawr Willy wedi gwneud 156 00:08:30,000 --> 00:08:33,000 yn ydych wedi dychwelyd eich ateb i'r cyfeiriad hwn yn dweud 0. 157 00:08:33,000 --> 00:08:36,000 Nawr, beth ddylech chi ei wneud? >> 1. 158 00:08:36,000 --> 00:08:39,000 Iawn, felly rydych chi'n 1, er mwyn i chi ddweud, "Mae pob hawl, yr wyf i'n mynd i ychwanegu 1 159 00:08:39,000 --> 00:08:41,000 i ba bynnag Willy yn cyfrif oedd, "felly 1 + 0. 160 00:08:41,000 --> 00:08:43,000 Rydych yn awr yn 1 fel eich ateb i'r dde yn awr- 161 00:08:43,000 --> 00:08:45,000 1. Byddai >> Ac mi fod yn 2. 162 00:08:45,000 --> 00:08:48,000 Da, felly rydych yn cymryd yr ateb blaenorol o 1, 163 00:08:48,000 --> 00:08:51,000 ychwanegu cyn lleied o waith rydych am ei wneud, sef +1. 164 00:08:51,000 --> 00:08:55,000 Rydych yn awr wedi 2, ac yna yn llaw wrthyf pa werth? 165 00:08:55,000 --> 00:08:57,000 3, yr wyf yn golygu, mae'n ddrwg gennyf, 2. 166 00:08:57,000 --> 00:08:59,000 Da. 167 00:08:59,000 --> 00:09:02,000 >> Wel, oedd gennym 0 i'r chwith. 168 00:09:02,000 --> 00:09:05,000 Yna cawsom 1, ac yna rydym yn ychwanegu 2, 169 00:09:05,000 --> 00:09:07,000 ac yn awr ydych chi'n trosglwyddo i mi y rhif 2, 170 00:09:07,000 --> 00:09:10,000 ac felly i ddim yn dweud, iawn, +1, 3. 171 00:09:10,000 --> 00:09:13,000 Mae 3 o bobl wir yn sefyll nesaf i mi ar hyn o bryd, 172 00:09:13,000 --> 00:09:16,000 felly gallem fod wedi gwneud yn amlwg mae hyn yn llinol, 173 00:09:16,000 --> 00:09:19,000 fawr iawn yn y ffasiwn amlwg, ond yr hyn wnaethon ni mewn gwirionedd yn ei wneud? 174 00:09:19,000 --> 00:09:21,000 Rydym yn cymryd problem o maint 3 i ddechrau. 175 00:09:21,000 --> 00:09:24,000 Yna byddwn yn torri i lawr i mewn i problem o faint 2, 176 00:09:24,000 --> 00:09:27,000 yna problem o ran maint 1, ac yna yn olaf yr achos sylfaenol 177 00:09:27,000 --> 00:09:29,000 oedd mewn gwirionedd, oh, does neb yno, 178 00:09:29,000 --> 00:09:33,000 lle dychwelodd bwynt Willy yn effeithiol ateb hard-coded cwpl o weithiau, 179 00:09:33,000 --> 00:09:36,000 ac mae'r ail un yn bubbled Yna, swigod i fyny, swigod i fyny, 180 00:09:36,000 --> 00:09:39,000 ac yna drwy ychwanegu hyn 1 un ychwanegol 181 00:09:39,000 --> 00:09:41,000 rydym wedi rhoi ar waith y syniad sylfaenol o dychweliad. 182 00:09:41,000 --> 00:09:44,000 >> Yn awr, yn yr achos hwn nad oedd yn datrys problem 183 00:09:44,000 --> 00:09:46,000 unrhyw yn fwy effeithiol, yna rydym wedi gweld hyd yn hyn. 184 00:09:46,000 --> 00:09:48,000 Ond meddyliwch am y algorithmau rydym wedi ei wneud ar y llwyfan hyd yn hyn. 185 00:09:48,000 --> 00:09:51,000 Cawsom 8 darn o bapur ar y bwrdd sialc, 186 00:09:51,000 --> 00:09:55,000 ar fideo pan Sean yn chwilio am y rhif 7, a beth oedd ei fod mewn gwirionedd yn ei wneud? 187 00:09:55,000 --> 00:09:58,000 Wel, nid oedd yn gwneud unrhyw fath o raniad a gorchfygu. 188 00:09:58,000 --> 00:10:01,000 Nid oedd yn gwneud unrhyw fath o dychweliad. 189 00:10:01,000 --> 00:10:03,000 Yn hytrach e jyst yn gwneud hyn algorithm llinol. 190 00:10:03,000 --> 00:10:07,000 Ond pan gyflwynwyd y syniad o rifau didoli ar y llwyfan yn byw yr wythnos diwethaf 191 00:10:07,000 --> 00:10:09,000 yna rydym yn cael y greddf o fynd i'r canol, 192 00:10:09,000 --> 00:10:13,000 a phryd hynny roedd gennym restr llai o faint 4 neu restr arall o faint 4, 193 00:10:13,000 --> 00:10:17,000 ac yna rydym yn cael yr un broblem yn union, felly rydym yn ailadrodd, dro ar ôl tro, dro ar ôl tro. 194 00:10:17,000 --> 00:10:19,000 Mewn geiriau eraill, rydym yn recursed. 195 00:10:19,000 --> 00:10:24,000 Diolch yn fawr iawn at ein 3 o wirfoddolwyr yma i ddangos dychweliad gyda ni. 196 00:10:24,000 --> 00:10:28,000 >> Gawn ni weld os na allwn wneud hyn yn awr concrid ychydig yn fwy, 197 00:10:28,000 --> 00:10:30,000 ddatrys problem hynny eto gallem ei wneud yn eithaf hawdd, 198 00:10:30,000 --> 00:10:34,000 ond byddwn yn ei ddefnyddio fel cam tuag at weithredu'r syniad sylfaenol. 199 00:10:34,000 --> 00:10:37,000 Os ydw i eisiau i gyfrifo y Crynodeb o'r criw o rifau, 200 00:10:37,000 --> 00:10:39,000 er enghraifft, os byddwch yn llwyddo yn y rhif 3, 201 00:10:39,000 --> 00:10:42,000 Rwyf am i roi'r gwerth sigma 3, 202 00:10:42,000 --> 00:10:46,000 felly mae'r swm o 3 + 2 + 1 + 0. 203 00:10:46,000 --> 00:10:48,000 Rwyf eisiau mynd yn ôl yr ateb 6, 204 00:10:48,000 --> 00:10:51,000 felly byddwn yn gweithredu'r swyddogaeth hon sigma, y ​​swyddogaeth hon symiant 205 00:10:51,000 --> 00:10:54,000 hynny, unwaith eto, yn cymryd yn fewnbwn, ac yna dychwelyd y Crynodeb 206 00:10:54,000 --> 00:10:57,000 o'r nifer yr holl ffordd i lawr i 0. 207 00:10:57,000 --> 00:10:59,000 Gallem wneud hyn yn eithaf syml, dde? 208 00:10:59,000 --> 00:11:01,000 Gallem wneud hyn gyda rhyw fath o strwythur dolennu, 209 00:11:01,000 --> 00:11:04,000 felly gadewch i mi fynd yn ei flaen a chael y cychwyn. 210 00:11:04,000 --> 00:11:07,000 >> Cynnwys stdio.h. 211 00:11:07,000 --> 00:11:09,000 Gadewch i mi gael fy hun i mewn i brif i weithio â hwy yma. 212 00:11:09,000 --> 00:11:12,000 Gadewch i ni arbed hyn fel sigma.c. 213 00:11:12,000 --> 00:11:14,000 Wedyn dw i'n mynd i fynd i mewn yma, a dw i'n mynd i ddatgan n int, 214 00:11:14,000 --> 00:11:18,000 ac yr wyf i'n mynd i wneud y canlynol er nad yw'r defnyddiwr yn cydweithredu. 215 00:11:18,000 --> 00:11:22,000 Er nad yw'r defnyddiwr wedi rhoi i mi rhif positif 216 00:11:22,000 --> 00:11:26,000 gadewch i mi fynd yn ei flaen a'u hannog i GetInt n =, 217 00:11:26,000 --> 00:11:28,000 a gadewch i mi rhoi rhai cyfarwyddiadau ynghylch beth i'w wneud, 218 00:11:28,000 --> 00:11:33,000 felly printf ("cyfanrif positif os gwelwch yn dda"). 219 00:11:33,000 --> 00:11:39,000 Dim ond rhywbeth cymharol syml fel hyn fel bod erbyn i ni gyrraedd llinell 14 220 00:11:39,000 --> 00:11:42,000 mae gennym bellach gyfanrif positif yn ôl pob tebyg yn n. 221 00:11:42,000 --> 00:11:44,000 >> Nawr gadewch i ni wneud rhywbeth yn ei gylch. 222 00:11:44,000 --> 00:11:50,000 Gadewch i mi fynd yn ei flaen ac yn y Crynodeb gyfrifo, felly int swm = sigma (n). 223 00:11:50,000 --> 00:11:54,000 Sigma yn unig symiant, felly rwy'n dim ond ysgrifennu yn y modd ffansi. 224 00:11:54,000 --> 00:11:56,000 Byddwn yn ei alw'n ddim sigma yno. 225 00:11:56,000 --> 00:11:58,000 Dyna y swm, a nawr rwy'n mynd i argraffu'r canlyniad, 226 00:11:58,000 --> 00:12:08,000 printf ("Y swm yw% d, \ n", swm). 227 00:12:08,000 --> 00:12:11,000 Ac yna byddaf yn dychwelyd 0 ar gyfer mesur da. 228 00:12:11,000 --> 00:12:15,000 Rydym wedi gwneud popeth bod y rhaglen yn gofyn ac eithrio y rhan ddiddorol, 229 00:12:15,000 --> 00:12:18,000 sydd mewn gwirionedd yn gweithredu'r swyddogaeth sigma. 230 00:12:18,000 --> 00:12:22,000 >> Gadewch i mi fynd i lawr yma i'r gwaelod, a gadewch i mi ddatgan swyddogaeth sigma. 231 00:12:22,000 --> 00:12:26,000 Mae'n rhaid i gymryd newidyn sy'n sydd o cyfanrif fath, 232 00:12:26,000 --> 00:12:30,000 a pha fath o ddata ydw i am ddychwelyd yn ôl pob tebyg o sigma? 233 00:12:30,000 --> 00:12:34,000 Int, oherwydd yr wyf am i gyd-fynd fy nisgwyliadau ar-lein 15. 234 00:12:34,000 --> 00:12:37,000 Yn fan hyn gadewch i mi fynd yn ei flaen a'i rhoi ar waith 235 00:12:37,000 --> 00:12:41,000 mewn ffordd eithaf syml. 236 00:12:41,000 --> 00:12:45,000 >> Gadewch i ni fynd yn ei flaen ac yn dweud swm int = 0, 237 00:12:45,000 --> 00:12:47,000 ac yn awr yr wyf i'n mynd i fynd yn cael ychydig i ddolen yma 238 00:12:47,000 --> 00:12:50,000 mae hynny'n mynd i ddweud rhywbeth fel hyn, 239 00:12:50,000 --> 00:13:01,000 ar gyfer (i int = 0; I <= rhif; i + +) swm + = i. 240 00:13:01,000 --> 00:13:05,000 Ac yna dwi'n mynd i ddychwelyd swm. 241 00:13:05,000 --> 00:13:07,000 Gallwn fod wedi gweithredu hyn mewn unrhyw nifer o ffyrdd. 242 00:13:07,000 --> 00:13:09,000 Gallwn fod wedi defnyddio dolen gyfnod. 243 00:13:09,000 --> 00:13:11,000 Gallwn fod wedi hepgor defnyddio'r newidyn swm os Fi 'n sylweddol eisiau, 244 00:13:11,000 --> 00:13:15,000 ond yn fyr, rydym yn unig yn cael swyddogaeth, os nad oeddwn yn goof datgan swm yw 0. 245 00:13:15,000 --> 00:13:18,000 Yna mae'n ailadrodd o 0 i fyny drwy nifer, 246 00:13:18,000 --> 00:13:23,000 ac ar bob fersiwn yn ychwanegu, gwerth cyfredol i swm ac yna yn dychwelyd swm. 247 00:13:23,000 --> 00:13:25,000 >> Nawr, mae 'na optimization bach yma. 248 00:13:25,000 --> 00:13:29,000 Mae hwn yn debyg yn gam wastraffu, ond dyna ni. Mae hynny'n iawn ar hyn o bryd. 249 00:13:29,000 --> 00:13:32,000 Rydym yn o leiaf eu bod yn drylwyr ac yn mynd 0 yr holl ffordd ar i fyny. 250 00:13:32,000 --> 00:13:34,000 Ddim yn galed iawn a 'n bert syml, 251 00:13:34,000 --> 00:13:37,000 ond mae'n troi allan fod y swyddogaeth sigma mae gennym yr un cyfle 252 00:13:37,000 --> 00:13:39,000 fel y gwnaethom yma ar y llwyfan. 253 00:13:39,000 --> 00:13:42,000 Ar y llwyfan rydym yn unig cyfrif faint o bobl oedd yn nesaf i mi, 254 00:13:42,000 --> 00:13:47,000 ond yn hytrach, os oeddem am i gyfrif y rhif 3 + 2 + 1 255 00:13:47,000 --> 00:13:51,000 ar i lawr i 0 gallem yn yr un modd punt i swyddogaeth 256 00:13:51,000 --> 00:13:55,000 y byddaf yn hytrach na disgrifio fel bod yn ailadroddus. 257 00:13:55,000 --> 00:13:57,000 Yma Gadewch i ni wneud bwyll cyflym gwirio a gwneud yn siwr nad wnes i goof. 258 00:13:57,000 --> 00:14:00,000 >> Rwy'n gwybod bod o leiaf un peth yn y rhaglen y gwneuthum ei wneud o'i le. 259 00:14:00,000 --> 00:14:04,000 Pan fyddaf daro chofnoda ydw i'n mynd i gael unrhyw fath o gweiddi arna i? 260 00:14:04,000 --> 00:14:06,000 Beth ydw i'n mynd i gael ei yelled am? 261 00:14:06,000 --> 00:14:11,000 Yeah, yr wyf yn anghofio y prototeip, felly rwy'n defnyddio swyddogaeth o'r enw sigma ar llinell 15, 262 00:14:11,000 --> 00:14:16,000 ond nid yw'n datgan tan llinell 22, felly yr wyf orau rhagweithiol yn mynd i fyny yma 263 00:14:16,000 --> 00:14:22,000 ac yn datgan prototeip, a byddaf yn dweud int sigma (int rhif), a dyna ni. 264 00:14:22,000 --> 00:14:24,000 Mae gweithredu ar y gwaelod. 265 00:14:24,000 --> 00:14:27,000 >> Neu ffordd arall y gallwn ddatrys hyn, 266 00:14:27,000 --> 00:14:30,000 Gallwn symud y swyddogaeth i fyny yno, ac nid yn ddrwg, 267 00:14:30,000 --> 00:14:32,000 ond o leiaf pan fydd eich rhaglen yn dechrau i gael hir, a dweud y gwir, 268 00:14:32,000 --> 00:14:35,000 Rwy'n credu bod yna rhywfaint o werth mewn bob amser yn cael y prif ar y brig 269 00:14:35,000 --> 00:14:38,000 fel y gallwch yn y darllenydd agor y ffeil ac yna yn syth yn gweld 270 00:14:38,000 --> 00:14:40,000 hyn y mae'r rhaglen yn ei wneud heb orfod chwilio drwyddo 271 00:14:40,000 --> 00:14:42,000 chwilio am y prif swyddogaeth. 272 00:14:42,000 --> 00:14:49,000 Gadewch i ni fynd i lawr at fy ffenestr terfynell yma, ceisiwch wneud sigma gwneud sigma, 273 00:14:49,000 --> 00:14:51,000 ac yr wyf gwyneb i fyny yma hefyd. 274 00:14:51,000 --> 00:14:55,000 Datganiad Ymhlyg o GetInt swyddogaeth yn golygu fy mod i wedi anghofio gwneud beth arall? 275 00:14:55,000 --> 00:14:57,000 [Anghlywadwy-myfyrwyr] 276 00:14:57,000 --> 00:15:00,000 Da, felly mae'n debyg mai camgymeriad cyffredin, felly gadewch i ni roi hyn i fyny yma, 277 00:15:00,000 --> 00:15:04,000 cs50.h, ac yn awr gad i ni fynd yn ôl at fy ffenestr terfynell. 278 00:15:04,000 --> 00:15:08,000 >> 'N annhymerus' yn glir y sgrîn, a byddaf yn gwneud ailgynnal sigma. 279 00:15:08,000 --> 00:15:11,000 Mae'n ymddangos i wedi ei lunio. Gadewch i mi redeg yn awr sigma. 280 00:15:11,000 --> 00:15:15,000 'N annhymerus' deipio'r rhif 3, ac i ddim yn cael 6, felly nid yw gwiriad trylwyr, 281 00:15:15,000 --> 00:15:18,000 ond o leiaf mae'n ymddangos ei fod yn gweithio ar yr olwg gyntaf, ond nawr gadewch i RIP ar wahân, 282 00:15:18,000 --> 00:15:21,000 a gadewch i ni mewn gwirionedd yn trosoledd y syniad o dychweliad, unwaith eto, 283 00:15:21,000 --> 00:15:24,000 mewn cyd-destun syml iawn fel bod ymhen ychydig wythnosau ' 284 00:15:24,000 --> 00:15:27,000 pan fyddwn yn dechrau archwilio strwythurau data ffansi na araeau 285 00:15:27,000 --> 00:15:30,000 mae gennym offeryn arall yn y pecyn cymorth i'w ddefnyddio i 286 00:15:30,000 --> 00:15:33,000 trin strwythurau hynny data gan y byddwn yn gweld. 287 00:15:33,000 --> 00:15:36,000 Dyma'r dull ailadroddol, y dull sy'n seiliedig ar ddolen. 288 00:15:36,000 --> 00:15:39,000 >> Gadewch i mi yn lle nawr wneud hyn. 289 00:15:39,000 --> 00:15:44,000 Gadewch i mi yn hytrach na dweud bod y Crynodeb o'r nifer 290 00:15:44,000 --> 00:15:48,000 ar i lawr i 0 yn wir yr un peth â 291 00:15:48,000 --> 00:15:53,000 Rhif + sigma (rhif - 1). 292 00:15:53,000 --> 00:15:57,000 Mewn geiriau eraill, yn union fel ar y llwyfan I punted i bob un o'r bobl nesaf i mi, 293 00:15:57,000 --> 00:16:00,000 ac maent yn eu tro cadw punting nes ein bod o'r diwedd gwaelod y tu allan yn Willy, 294 00:16:00,000 --> 00:16:03,000 a oedd yn gorfod dychwelyd ateb hard-coded fel 0. 295 00:16:03,000 --> 00:16:07,000 Yma yn awr rydym yn yn yr un modd punting i sigma 296 00:16:07,000 --> 00:16:10,000 un swyddogaeth fel y gelwid yn wreiddiol, ond y mewnwelediad allweddol yma 297 00:16:10,000 --> 00:16:12,000 yw nad ydym yn galw sigma yn union. 298 00:16:12,000 --> 00:16:14,000 Nid ydym yn pasio yn n. 299 00:16:14,000 --> 00:16:17,000 Rydym yn amlwg yn pasio o ran nifer - 1, 300 00:16:17,000 --> 00:16:20,000 felly mae problem ychydig yn llai, problem ychydig yn llai. 301 00:16:20,000 --> 00:16:23,000 >> Yn anffodus, nid yw hyn yn dipyn o ateb eto, a chyn i ni atgyweiria 302 00:16:23,000 --> 00:16:26,000 hyn y gellid ei neidio allan mor amlwg mewn rhai ohonoch 303 00:16:26,000 --> 00:16:28,000 gadewch i mi fynd yn ei flaen ac ailgynnal wneud. 304 00:16:28,000 --> 00:16:30,000 Mae'n ymddangos i lunio iawn. 305 00:16:30,000 --> 00:16:32,000 Gadewch i mi ailgynnal gyda 6 sigma. 306 00:16:32,000 --> 00:16:37,000 Wps, gadewch i mi ailgynnal gyda 6 sigma. 307 00:16:37,000 --> 00:16:42,000 Rydym wedi gweld hyn o'r blaen, er amser yn ddamweiniol diwethaf yn ogystal. 308 00:16:42,000 --> 00:16:48,000 Pam wnes i gael y wall cryptig? Yeah. 309 00:16:48,000 --> 00:16:50,000 [Anghlywadwy-myfyrwyr] 310 00:16:50,000 --> 00:16:53,000 Does dim achos sylfaenol, ac yn fwy penodol, beth yn ôl pob tebyg yn digwydd? 311 00:16:53,000 --> 00:16:58,000 Mae hyn yn symptom o'r hyn ymddygiad? 312 00:16:58,000 --> 00:17:00,000 Dweud ei fod ychydig yn uwch. 313 00:17:00,000 --> 00:17:02,000 [Anghlywadwy-myfyrwyr] 314 00:17:02,000 --> 00:17:05,000 Mae'n dolen ddiddiwedd yn effeithiol, ac mae'r broblem gyda dolenni ddiddiwedd 315 00:17:05,000 --> 00:17:08,000 pan fyddant yn golygu dychweliad yn yr achos hwn, mae swyddogaeth galw ei hun, 316 00:17:08,000 --> 00:17:10,000 beth sy'n digwydd bob tro y byddwch yn galw swyddogaeth? 317 00:17:10,000 --> 00:17:13,000 Wel, meddwl yn ôl i sut rydym yn gosod allan y cof mewn cyfrifiadur. 318 00:17:13,000 --> 00:17:16,000 Rydym yn dweud fod yna darn hwn o gof a elwir yn y simnai sy'n ar y gwaelod, 319 00:17:16,000 --> 00:17:19,000 a phob tro y byddwch yn galw swyddogaeth cof ychydig yn fwy yn cael ei rhoi 320 00:17:19,000 --> 00:17:24,000 ar y pentwr hyn a elwir yn cynnwys newidynnau y swyddogaeth yn lleol neu baramedrau, 321 00:17:24,000 --> 00:17:27,000 felly os sigma yn galw galwadau sigma sigma yn galw sigma 322 00:17:27,000 --> 00:17:29,000  yn galw sigma lle mae hyn yn stori'n gorffen? 323 00:17:29,000 --> 00:17:31,000 >> Wel, yn y pen draw overruns y cyfanswm 324 00:17:31,000 --> 00:17:33,000 o gof sydd gennych ar gael ar eich cyfrifiadur. 325 00:17:33,000 --> 00:17:37,000 Byddwch fynd oddi ar y segment eich bod yn fod i aros o fewn, 326 00:17:37,000 --> 00:17:40,000 a byddwch yn cael y wall, craidd gadael, 327 00:17:40,000 --> 00:17:43,000 a pha craidd adael ei olygu yw fy mod bellach ffeil o'r enw craidd 328 00:17:43,000 --> 00:17:46,000 sy'n ffeil yn cynnwys sero a rhai 329 00:17:46,000 --> 00:17:49,000 y bydd mewn gwirionedd yn y dyfodol yn ddiagnostig ddefnyddiol. 330 00:17:49,000 --> 00:17:52,000 Os nad yw'n amlwg i chi lle mae eich nam yn 331 00:17:52,000 --> 00:17:54,000 alli 'n weithredol wneud ychydig o ddadansoddiad fforensig, fel petai, 332 00:17:54,000 --> 00:17:58,000 ar y domen graidd ffeil, sydd, unwaith eto, yn unig yw criw cyfan o zeros a rhai 333 00:17:58,000 --> 00:18:02,000 sydd i bob pwrpas yn cynrychioli cyflwr eich rhaglen er cof 334 00:18:02,000 --> 00:18:05,000 hyn o bryd mae'n ddamwain yn y modd hwn. 335 00:18:05,000 --> 00:18:11,000 >> Mae'r atgyweiria yma yw na allwn yn unig blindly dychwelyd sigma, 336 00:18:11,000 --> 00:18:14,000 y nifer + sigma o broblem ychydig yn llai. 337 00:18:14,000 --> 00:18:16,000 Mae angen i ni gael rhyw fath o achos sylfaenol yma, 338 00:18:16,000 --> 00:18:19,000 a beth ddylai'r achos sylfaenol yn debygol o fod? 339 00:18:19,000 --> 00:18:22,000 [Anghlywadwy-myfyrwyr] 340 00:18:22,000 --> 00:18:25,000 Iawn, felly cyhyd â bod y rhif yn gadarnhaol dylem mewn gwirionedd ddychwelyd y ffurflen hon, 341 00:18:25,000 --> 00:18:29,000 neu mewn geiriau eraill, os yw rhif, dweud, <= i 0 342 00:18:29,000 --> 00:18:32,000 eich bod yn gwybod beth, byddaf yn mynd yn ei flaen ac yn dychwelyd 0, 343 00:18:32,000 --> 00:18:36,000 yn debyg iawn i Willy gwnaeth, ac arall, yr wyf i'n mynd i fynd yn ei flaen 344 00:18:36,000 --> 00:18:41,000 hon a'i dychwelyd, felly nid yw'n bod llawer byrrach 345 00:18:41,000 --> 00:18:44,000 na'r fersiwn iterus ein bod yn chwipio i fyny gyntaf, gan ddefnyddio gyfer dolen, 346 00:18:44,000 --> 00:18:48,000 ond sylwi fod yna y math hwn o geinder iddo. 347 00:18:48,000 --> 00:18:51,000 Yn hytrach na dychwelyd ryw nifer a pherfformio hyn i gyd math 348 00:18:51,000 --> 00:18:54,000 ac ychwanegu pethau i fyny gyda newidynnau lleol 349 00:18:54,000 --> 00:18:57,000 eich bod yn hytrach yn dweud "Iawn, os yw hyn yn broblem hawdd super, 350 00:18:57,000 --> 00:19:01,000 fel y rhif yw <0, gadewch i mi ar unwaith yn dychwelyd 0. " 351 00:19:01,000 --> 00:19:03,000 >> Nid ydym yn mynd i drafferthu rhifau negyddol cefnogi, 352 00:19:03,000 --> 00:19:05,000 felly dwi'n mynd i cod caled gwerth o 0. 353 00:19:05,000 --> 00:19:08,000 Ond fel arall, i weithredu'r syniad o grynhoi 354 00:19:08,000 --> 00:19:11,000 pob un o'r rhifau hyn gyda'ch gilydd, gallwch bob pwrpas byddai'n cymryd brathiad bach 355 00:19:11,000 --> 00:19:14,000 allan o'r broblem, yn debyg iawn ni wneud hynny yma ar y llwyfan, 356 00:19:14,000 --> 00:19:18,000 yna punt gweddill y broblem i'r person nesaf, 357 00:19:18,000 --> 00:19:20,000 ond yn yr achos y person nesaf yw eich hun. 358 00:19:20,000 --> 00:19:22,000 Mae'n swyddogaeth a enwir yn union. 359 00:19:22,000 --> 00:19:25,000 Dim ond yn ei throsglwyddo yn broblem llai a llai ac yn llai bob tro, 360 00:19:25,000 --> 00:19:28,000 ac er bod gennym nad yw pethau'n eithaf ffurfioli mewn cod yma 361 00:19:28,000 --> 00:19:33,000 mae hyn yn union beth oedd yn digwydd yn wythnos 0 y llyfr ffôn. 362 00:19:33,000 --> 00:19:36,000 Mae hyn yn union beth oedd yn digwydd yn ystod yr wythnosau diwethaf gyda Sean 363 00:19:36,000 --> 00:19:39,000 a gyda'n arddangosiadau o chwilio am rifau. 364 00:19:39,000 --> 00:19:42,000 Mae'n cymryd ychydig o broblem a rhannu dro ar ôl tro. 365 00:19:42,000 --> 00:19:44,000 >> Mewn geiriau eraill, mae yna ffordd yn awr o gyfieithu 366 00:19:44,000 --> 00:19:47,000 y lluniad byd go iawn, mae hyn yn adeiledd lefel uwch 367 00:19:47,000 --> 00:19:51,000 o rannu a gorchfygu a gwneud rhywbeth eto ac eto 368 00:19:51,000 --> 00:19:56,000 mewn cod, felly mae hyn yn rhywbeth y byddwn yn gweld eto dros gyfnod o amser. 369 00:19:56,000 --> 00:20:00,000 Yn awr, wrth fynd heibio, os ydych yn newydd i dychweliad dylech o leiaf yn deall yn awr 370 00:20:00,000 --> 00:20:02,000 pam fod hyn yn ddoniol. 371 00:20:02,000 --> 00:20:05,000 Rydw i'n mynd i fynd i google.com, 372 00:20:05,000 --> 00:20:17,000 ac rydw i'n mynd i chwilio am rai awgrymiadau a driciau ar dychweliad, rhowch. 373 00:20:17,000 --> 00:20:21,000 Dywedwch wrth y person nesaf i chi os nad oeddent yn chwerthin yn unig nawr. 374 00:20:21,000 --> 00:20:23,000 A oeddech yn meddwl dychweliad? 375 00:20:23,000 --> 00:20:25,000 A oeddech yn meddwl-AH, dyna ni. 376 00:20:25,000 --> 00:20:28,000 Iawn, yn awr dyna gweddill pawb. 377 00:20:28,000 --> 00:20:30,000 Mae wy Pasg bach hymgorffori yn rhywle yno yn Google. 378 00:20:30,000 --> 00:20:33,000 Fel o'r neilltu, un o'r dolenni rydym yn rhoi ar wefan y cwrs 379 00:20:33,000 --> 00:20:36,000 ar gyfer heddiw yn unig yw hwn grid o algorithmau didoli amrywiol, 380 00:20:36,000 --> 00:20:39,000 rhai yr ydym yn edrych ar yr wythnos diwethaf, ond yr hyn sy'n braf am hyn delweddu 381 00:20:39,000 --> 00:20:43,000 wrth i chi geisio i lapio eich meddwl o amgylch bethau amrywiol yn ymwneud ag algorithmau 382 00:20:43,000 --> 00:20:46,000 yn gwybod y gallwch yn hawdd iawn yn awr yn dechrau gyda mathau gwahanol o fewnbynnau. 383 00:20:46,000 --> 00:20:50,000 Mae'r mewnbwn gwrthdroi i gyd, y mewnbynnau didoli yn bennaf, y mewnbynnau ar hap ac yn y blaen. 384 00:20:50,000 --> 00:20:53,000 Wrth i chi geisio, eto, gwahaniaethu rhwng y rhain pethau yn eich meddwl 385 00:20:53,000 --> 00:20:57,000 sylweddoli bod y URL ar wefan y cwrs ar y dudalen Darlithoedd 386 00:20:57,000 --> 00:21:00,000 allai eich helpu chi reswm drwy rai o'r rheini. 387 00:21:00,000 --> 00:21:05,000 >> Heddiw, rydym o'r diwedd yn cael i ddatrys y broblem o amser yn ôl, 388 00:21:05,000 --> 00:21:08,000 a oedd yn bod y swyddogaeth hon gyfnewid nid yn unig oedd yn gweithio, 389 00:21:08,000 --> 00:21:12,000 a beth oedd y broblem sylfaenol gyda hyn cyfnewid swyddogaeth, 390 00:21:12,000 --> 00:21:15,000 oedd y nod o sydd, unwaith eto, i gyfnewid gwerth yma ac yma 391 00:21:15,000 --> 00:21:17,000 fel bod hyn yn digwydd? 392 00:21:17,000 --> 00:21:20,000 Nid oedd hyn yn gweithio mewn gwirionedd. Pam? 393 00:21:20,000 --> 00:21:22,000 Yeah. 394 00:21:22,000 --> 00:21:28,000 [Anghlywadwy-myfyrwyr] 395 00:21:28,000 --> 00:21:31,000 Yn union, yr esboniad ar gyfer y bugginess 396 00:21:31,000 --> 00:21:34,000 yn syml oedd oherwydd pan fyddwch yn ffonio swyddogaethau mewn C 397 00:21:34,000 --> 00:21:38,000 a'r rhai swyddogaethau yn cymryd dadleuon, fel a b yma, 398 00:21:38,000 --> 00:21:42,000 fyddwch yn gyrru heibio mewn copïau o ba bynnag werth rydych yn ei roi i swyddogaeth honno. 399 00:21:42,000 --> 00:21:46,000 Nid ydych yn darparu'r gwerthoedd gwreiddiol eu hunain, 400 00:21:46,000 --> 00:21:49,000 felly rydym yn gweld hyn yng nghyd-destun buggyc, 401 00:21:49,000 --> 00:21:52,000 buggy3.c, a oedd yn edrych rhywbeth bach fel hyn. 402 00:21:52,000 --> 00:21:57,000 >> Dwyn i gof bod gennym x ac y ymgychwyn i 1 a 2, yn y drefn honno. 403 00:21:57,000 --> 00:21:59,000 Rydym yn argraffu ac yna beth oeddent. 404 00:21:59,000 --> 00:22:03,000 Yna honni fy mod yn cyfnewid â hwy drwy ffonio cyfnewid o x, y. 405 00:22:03,000 --> 00:22:06,000 Ond y broblem oedd bod y cyfnewid yn gweithio, 406 00:22:06,000 --> 00:22:10,000 ond dim ond yn y cwmpas y cyfnewid gweithredu ei hun. 407 00:22:10,000 --> 00:22:13,000 Cyn gynted ag y byddwn yn cyrraedd llinell 40 gwerthoedd hynny cyfnewid 408 00:22:13,000 --> 00:22:16,000 eu taflu i ffwrdd, ac felly nid oes dim 409 00:22:16,000 --> 00:22:21,000 yn y swyddogaeth wreiddiol brif newid mewn gwirionedd o gwbl, 410 00:22:21,000 --> 00:22:26,000 felly os ydych yn credu bryd hynny ynghylch beth mae hyn yn edrych fel yn nhermau ein cof 411 00:22:26,000 --> 00:22:29,000 os yw hyn ochr chwith y bwrdd yn cynrychioli- 412 00:22:29,000 --> 00:22:33,000 a byddaf yn gwneud fy ngorau i bawb i weld y-os yw hyn ochr chwith y bwrdd 413 00:22:33,000 --> 00:22:37,000 cynrychioli, dyweder, eich RAM, ac mae'r pentwr yn mynd i dyfu ar hyd y ffordd hon, 414 00:22:37,000 --> 00:22:43,000 ac rydym yn galw swyddogaeth fel prif, a phrif Mae 2 newidynnau lleol, x ac y, 415 00:22:43,000 --> 00:22:48,000 gadewch i ni disgrifio rhai fel x yma, a gadewch i ni disgrifio y rhain fel y fan hyn, 416 00:22:48,000 --> 00:22:55,000 a gadewch i ni ei roi yn y gwerthoedd 1 a 2, felly mae hyn yma yn bennaf, 417 00:22:55,000 --> 00:22:58,000 a phan fydd yn galw phrif swyddogaeth cyfnewid y system weithredu 418 00:22:58,000 --> 00:23:02,000 yn rhoi swyddogaeth cyfnewid ei swath ei hun o gof ar y simnai, 419 00:23:02,000 --> 00:23:04,000 ei ffrâm ei hun ar y simnai, fel petai. 420 00:23:04,000 --> 00:23:08,000 Mae hefyd yn dyrannu 32 catiau ar gyfer y ints. 421 00:23:08,000 --> 00:23:11,000 Mae'n digwydd eu galw a a b, ond mae hynny'n hollol fympwyol. 422 00:23:11,000 --> 00:23:13,000 Gallai fod wedi galw nhw beth bynnag y mae am, ond beth sy'n digwydd pan fydd y prif 423 00:23:13,000 --> 00:23:19,000 galwadau cyfnewid yn y mae'n ei gymryd hyn 1, yn rhoi copi yno, yn rhoi copi yno. 424 00:23:19,000 --> 00:23:23,000 >> Mae yna 1 newidyn arall mewn cyfnewid lleol, fodd bynnag, galw yr hyn? >> Tmp. 425 00:23:23,000 --> 00:23:27,000 Tmp, felly gadewch i mi roi fy hun 32 o ddarnau yma, 426 00:23:27,000 --> 00:23:29,000 a beth wnes i ei wneud yn y swyddogaeth hon? 427 00:23:29,000 --> 00:23:34,000 Dywedais tmp int yn cael, felly mae wedi 1, felly yr wyf yn gwneud hyn pan fyddwn yn chwarae ddiwethaf â'r enghraifft hon. 428 00:23:34,000 --> 00:23:39,000 Yna yn cael b, felly b yw 2, felly, yn awr mae hyn yn 2, 429 00:23:39,000 --> 00:23:42,000 ac yn awr yn cael b dros dro, felly dros dro yw 1, 430 00:23:42,000 --> 00:23:44,000 felly, yn awr yn dod b hyn. 431 00:23:44,000 --> 00:23:46,000 Mae hynny'n wych. Mae'n gweithio. 432 00:23:46,000 --> 00:23:49,000 Ond wedyn cyn gynted ag y ffurflenni swyddogaeth 433 00:23:49,000 --> 00:23:52,000 cof cyfnewid yn effeithiol yn diflannu fel y gellir ei ailddefnyddio 434 00:23:52,000 --> 00:23:58,000 gan ryw swyddogaeth arall yn y dyfodol, a phrif yn amlwg yn hollol yr un fath. 435 00:23:58,000 --> 00:24:00,000 Mae angen ffordd o sylfaenol ddatrys y broblem, 436 00:24:00,000 --> 00:24:03,000 a heddiw byddwn o'r diwedd ffordd o wneud hyn lle 437 00:24:03,000 --> 00:24:06,000 gallwn gyflwyno rhywbeth a elwir yn pwyntydd. 438 00:24:06,000 --> 00:24:09,000 Mae'n troi allan y gallwn ddatrys y broblem 439 00:24:09,000 --> 00:24:12,000 nid trwy basio mewn copïau o x a y 440 00:24:12,000 --> 00:24:18,000 ond yn hytrach drwy basio yn yr hyn, yn eich barn chi, i'r swyddogaeth cyfnewid? 441 00:24:18,000 --> 00:24:20,000 Yeah, beth am y cyfeiriad? 442 00:24:20,000 --> 00:24:22,000 Nid ydym wedi siarad iawn am gyfeiriadau yn fanwl iawn, 443 00:24:22,000 --> 00:24:25,000 ond os yw hyn yn cynrychioli cof bwrdd du fy cyfrifiadur 444 00:24:25,000 --> 00:24:28,000 gallem ddechrau rhifo'r bytes yn fy RAM 445 00:24:28,000 --> 00:24:31,000 ac yn dweud hyn yn beit # 1, mae hyn yn beit # 2, beit # 3, 446 00:24:31,000 --> 00:24:35,000 beit # 4, beit # ... 2 biliwn os gen i 2 gigabeit o RAM, 447 00:24:35,000 --> 00:24:38,000 er mwyn i ni yn sicr yn dod i fyny gyda rhai chynllun rhifo mympwyol 448 00:24:38,000 --> 00:24:41,000 ar gyfer yr holl bytes unigol er cof am fy cyfrifiadur. 449 00:24:41,000 --> 00:24:43,000 >> Beth os hytrach pan fyddaf yn galw cyfnewid 450 00:24:43,000 --> 00:24:47,000 yn hytrach na pasio mewn copïau o x a y 451 00:24:47,000 --> 00:24:51,000 pam nad ydw i'n hytrach pasio yn y cyfeiriad x yma, 452 00:24:51,000 --> 00:24:55,000 y cyfeiriad y yma, yn ei hanfod y cyfeiriad post 453 00:24:55,000 --> 00:24:59,000 x ac y gan fod yna cyfnewid, os yw ef ei hysbysu 454 00:24:59,000 --> 00:25:01,000 o gyfeiriad er cof am x ac y, 455 00:25:01,000 --> 00:25:04,000 Yna, cyfnewid, os byddwn yn hyfforddi iddo ychydig bach, 456 00:25:04,000 --> 00:25:07,000 gallai o bosibl gyrru i'r cyfeiriad hwnnw, fel petai, 457 00:25:07,000 --> 00:25:11,000 x, a newid y rhif yno, yna gyrru i gyfeiriad y, 458 00:25:11,000 --> 00:25:16,000 newid y rhif yno, hyd yn oed er nad mewn gwirionedd yn cael copïau o'r gwerthoedd hynny ei hun, 459 00:25:16,000 --> 00:25:19,000 felly hyd yn oed er ein bod yn siarad am hyn fel prif cof 460 00:25:19,000 --> 00:25:23,000 a chof y cyfnewid fel yn y pwerus a'r rhan peryglus o C 461 00:25:23,000 --> 00:25:28,000 yw y gall unrhyw swyddogaeth gyffwrdd cof unrhyw le yn y cyfrifiadur, 462 00:25:28,000 --> 00:25:32,000 ac mae hyn yn pwerus yn y gallwch wneud pethau ffansi iawn gyda rhaglenni cyfrifiadurol yn C. 463 00:25:32,000 --> 00:25:36,000 Mae hyn yn beryglus oherwydd gallwch hefyd sgriw i fyny yn hawdd iawn. 464 00:25:36,000 --> 00:25:39,000 Yn wir, un o'r ffyrdd mwyaf cyffredin ar gyfer rhaglenni y dyddiau hyn i gael eu defnyddio'n 465 00:25:39,000 --> 00:25:42,000 dal i fod nid ar gyfer rhaglennydd i wireddu 466 00:25:42,000 --> 00:25:45,000 ei fod ef neu hi yn caniatáu i ddata 467 00:25:45,000 --> 00:25:49,000 i gael ei ysgrifennu mewn lleoliad yn y cof nad oedd yn fwriad. 468 00:25:49,000 --> 00:25:51,000 >> Er enghraifft, mae ef neu hi yn datgan amrywiaeth o maint 10 469 00:25:51,000 --> 00:25:56,000 ond yna ddamweiniol ceisio rhoi 11 bytes i mewn i'r amrywiaeth o gof, 470 00:25:56,000 --> 00:25:59,000 a byddwch yn dechrau cyffwrdd rhannau o gof nad ydynt bellach yn ddilys. 471 00:25:59,000 --> 00:26:02,000 Dim ond er mwyn cyd-destunol hyn, efallai y bydd rhai ohonoch yn gwybod y 472 00:26:02,000 --> 00:26:06,000 meddalwedd yn aml yn annog i chi am rifau cyfresol neu allweddi cofrestru, 473 00:26:06,000 --> 00:26:08,000 Photoshop a Word a rhaglenni fel hyn. 474 00:26:08,000 --> 00:26:12,000 Mae craciau yn bodoli, gan fod rhai ohonoch yn gwybod, ar-lein lle gallwch chi redeg rhaglen bach, 475 00:26:12,000 --> 00:26:14,000 a voila, nid oes cais yn fwy am rif cyfresol. 476 00:26:14,000 --> 00:26:16,000 Sut y mae hynny'n gweithio? 477 00:26:16,000 --> 00:26:21,000 Mewn llawer o achosion y pethau hyn yn syml dod o hyd yn y cyfrifiaduron 478 00:26:21,000 --> 00:26:24,000 segmentau testun yn sero y cyfrifiadur gwirioneddol a rhai 479 00:26:24,000 --> 00:26:28,000 ble mae'r swyddogaeth honno lle mae'r rhif cyfresol gwneir cais amdano, 480 00:26:28,000 --> 00:26:31,000 ac rydych yn trosysgrifo y lle hwnnw, neu tra bod y rhaglen yn rhedeg 481 00:26:31,000 --> 00:26:33,000 gallwch chyfrif i maes ble mae'r allwedd yn cael ei storio mewn gwirionedd 482 00:26:33,000 --> 00:26:37,000 defnyddio rhywbeth a elwir yn debugger, a gallwch crac meddalwedd y ffordd honno. 483 00:26:37,000 --> 00:26:40,000 Nid yw hyn yn dweud bod hyn yn ein hamcan ar gyfer yr ychydig ddyddiau nesaf, 484 00:26:40,000 --> 00:26:42,000 ond mae ganddo iawn y byd go iawn oblygiadau. 485 00:26:42,000 --> 00:26:45,000 Bod un yn digwydd i olygu lladrad meddalwedd, 486 00:26:45,000 --> 00:26:47,000 ond mae hefyd yn cyfaddawdu o beiriannau cyfan. 487 00:26:47,000 --> 00:26:50,000 >> Yn wir, pan wefannau y dyddiau hyn yn cael eu hecsbloetio 488 00:26:50,000 --> 00:26:53,000 ac wedi gwanhau a data yn cael ei gollwng a chyfrineiriau yn cael eu dwyn 489 00:26:53,000 --> 00:26:58,000 hyn yn aml iawn yn ymwneud â rheolaeth wael o un cof, 490 00:26:58,000 --> 00:27:01,000 neu, yn achos cronfeydd data, methiant i ragweld 491 00:27:01,000 --> 00:27:03,000 mewnbwn gwrthwynebus, fel mwy am hynny yn ystod yr wythnosau i ddod, 492 00:27:03,000 --> 00:27:07,000 ond ar hyn o bryd dim ond cipolwg o'r math o ddifrod y gallwch ei wneud 493 00:27:07,000 --> 00:27:11,000 ychydig llai na deall sut mae pethau'n gweithio o dan y cwfl. 494 00:27:11,000 --> 00:27:14,000 Gadewch i ni fynd ati i ddeall pam fod hyn yn torri 495 00:27:14,000 --> 00:27:17,000 gyda offeryn a fydd yn dod yn fwy ac yn fwy defnyddiol 496 00:27:17,000 --> 00:27:19,000 fel ein rhaglenni yn cael mwy cymhleth. 497 00:27:19,000 --> 00:27:21,000 Hyd yn hyn pan fyddwch wedi cael nam yn eich rhaglen 498 00:27:21,000 --> 00:27:23,000 sut yr ydych wedi mynd ati i debugging hyn? 499 00:27:23,000 --> 00:27:25,000 Beth yw eich technegau wedi bod hyd yn hyn, p'un a ddysgir gan eich TF 500 00:27:25,000 --> 00:27:27,000 neu dim ond hunan-ddysgu? 501 00:27:27,000 --> 00:27:29,000 [Myfyrwyr] printf. 502 00:27:29,000 --> 00:27:31,000 Printf, felly printf wedi bod yn debyg eich ffrind yn, os ydych am weld 503 00:27:31,000 --> 00:27:33,000 beth sy'n digwydd y tu fewn eich rhaglen 504 00:27:33,000 --> 00:27:36,000 'ch jyst yn rhoi printf yma, printf yma, printf yma. 505 00:27:36,000 --> 00:27:38,000 Yna byddwch yn rhedeg, a byddwch yn cael criw cyfan o stwff ar y sgrîn 506 00:27:38,000 --> 00:27:43,000 y gallwch eu defnyddio i ddiddwytho yna beth yn union sy'n mynd o'i le yn eich rhaglen. 507 00:27:43,000 --> 00:27:45,000 >> Printf yn tueddu i fod yn beth pwerus iawn, 508 00:27:45,000 --> 00:27:47,000 ond mae'n broses iawn llaw. 509 00:27:47,000 --> 00:27:49,000 Mae'n rhaid i chi roi printf yma, a printf yma, 510 00:27:49,000 --> 00:27:51,000 ac os ydych yn ei roi tu mewn i ddolen y gallech ei gael 100 o linellau 511 00:27:51,000 --> 00:27:53,000 o allbwn y byddwch wedyn yn gorfod didoli drwy. 512 00:27:53,000 --> 00:27:58,000 Nid yw'n fecanwaith iawn hawdd ei ddefnyddio neu rhyngweithiol ar gyfer rhaglenni debugging, 513 00:27:58,000 --> 00:28:00,000 ond diolch byth mae yn bodoli dewisiadau eraill. 514 00:28:00,000 --> 00:28:03,000 Mae yna raglen, er enghraifft, a elwir yn GDB, y Bar GNU, 515 00:28:03,000 --> 00:28:06,000 sydd yn ddirgel ychydig yn y ffordd rydych yn ei ddefnyddio. 516 00:28:06,000 --> 00:28:08,000 Mae'n braidd yn gymhleth, ond dweud y gwir, 517 00:28:08,000 --> 00:28:11,000 mae hwn yn un o'r pethau hynny lle os byddwch yn rhoi yn yr wythnos hon a'r nesaf 518 00:28:11,000 --> 00:28:14,000 yr awr ychwanegol i ddeall rhywbeth fel GDB 519 00:28:14,000 --> 00:28:18,000 bydd yn arbed mae'n debyg y byddwch degau o oriau yn y tymor hir, 520 00:28:18,000 --> 00:28:21,000 felly gyda hynny, gadewch i mi roi teaser o sut mae hyn yn peth yn gweithio. 521 00:28:21,000 --> 00:28:23,000 >> Rwyf yn fy ffenestr terfynell. 522 00:28:23,000 --> 00:28:26,000 Gadewch i mi fynd yn ei flaen ac yn llunio rhaglen hon, buggy3. 523 00:28:26,000 --> 00:28:28,000 Mae eisoes yn gyfoes. 524 00:28:28,000 --> 00:28:31,000 Gadewch i mi redeg yn union fel y gwnaethom cefn tra, ac yn wir, mae'n torri. 525 00:28:31,000 --> 00:28:34,000 Ond pam yw hyn? Efallai fy sgriwio i fyny 'r swyddogaeth cyfnewid. 526 00:28:34,000 --> 00:28:37,000 Efallai ei fod yn a b. Dydw i ddim yn hollol eu symud o gwmpas yn gywir. 527 00:28:37,000 --> 00:28:39,000 Gadewch i mi fynd yn ei flaen ac yn gwneud hyn. 528 00:28:39,000 --> 00:28:43,000 Yn hytrach na jyst hidla buggy3 gadewch i mi yn hytrach na rhedeg y GDB rhaglen, 529 00:28:43,000 --> 00:28:48,000 ac rydw i'n mynd i ddweud ei fod i redeg buggy3, 530 00:28:48,000 --> 00:28:52,000 ac rydw i'n mynd i gynnwys gorchymyn,-tui ymresymiad llinell, 531 00:28:52,000 --> 00:28:55,000 a byddwn yn rhoi hyn mewn problemau yn y dyfodol yn spec i atgoffa. 532 00:28:55,000 --> 00:28:57,000 Ac yn awr y rhyngwyneb du a gwyn popped i fyny hynny, unwaith eto, 533 00:28:57,000 --> 00:28:59,000 ychydig yn llethol ar y dechrau oherwydd mae hyn i gyd 534 00:28:59,000 --> 00:29:02,000 gwybodaeth warant i lawr yma, ond o leiaf mae yna rywbeth cyfarwydd. 535 00:29:02,000 --> 00:29:04,000 Yn frig y ffenestr yn fy cod gwirioneddol, 536 00:29:04,000 --> 00:29:08,000 ac os byddaf yn sgrolio i fyny yma gadewch i mi sgrolio i frig fy ffeil, 537 00:29:08,000 --> 00:29:11,000 ac yn wir, mae buggy3.c, a rhybudd ar waelod y ffenestr hon 538 00:29:11,000 --> 00:29:13,000 Yr wyf wedi hyn brydlon GDB. 539 00:29:13,000 --> 00:29:16,000 >> Nid yw hyn yr un fath â fy normal John Harvard brydlon. 540 00:29:16,000 --> 00:29:19,000 Mae hwn yn brydlon sy'n mynd i fy ngalluogi i reoli GDB. 541 00:29:19,000 --> 00:29:21,000 GDB yn debugger. 542 00:29:21,000 --> 00:29:24,000 Mae debugger yn rhaglen sy'n gadael i chi gerdded drwy 543 00:29:24,000 --> 00:29:27,000 gyflawni eich llinell rhaglen drwy linell wrth linell, 544 00:29:27,000 --> 00:29:30,000 ar hyd y ffordd yn gwneud unrhyw beth yr hoffech i'r rhaglen, 545 00:29:30,000 --> 00:29:33,000 hyd yn oed yn galw swyddogaethau, neu edrych, yn bwysicach, 546 00:29:33,000 --> 00:29:35,000 ar werthoedd newidyn amrywiol yn. 547 00:29:35,000 --> 00:29:37,000 Gadewch i ni fynd ymlaen a gwneud hyn. 548 00:29:37,000 --> 00:29:40,000 Rydw i'n mynd i fynd yn ei flaen ac yn deipio i mewn rhedeg yn GDB yn brydlon, 549 00:29:40,000 --> 00:29:43,000 felly sylwi ar waelod chwith y sgrin Rydw i wedi teipio rhedeg, 550 00:29:43,000 --> 00:29:45,000 ac rydw i wedi daro chofnoda, a beth oedd y ei wneud? 551 00:29:45,000 --> 00:29:50,000 Mae'n llythrennol yn rhedeg fy rhaglen, ond doeddwn i ddim mewn gwirionedd yn gweld llawer yn mynd ymlaen yma 552 00:29:50,000 --> 00:29:55,000 oherwydd nid wyf wedi dweud wrth y gwirionedd debugger 553 00:29:55,000 --> 00:29:57,000 i oedi ar adeg benodol mewn amser. 554 00:29:57,000 --> 00:29:59,000 Dim ond teipio rhedeg yn rhedeg y rhaglen. 555 00:29:59,000 --> 00:30:01,000 Nid wyf yn gweld unrhyw beth. Nid wyf yn gallu camddefnyddio'r dewis hwnnw. 556 00:30:01,000 --> 00:30:03,000 >> Yn lle hynny gadewch i mi wneud hyn. 557 00:30:03,000 --> 00:30:08,000 Ar hyn o prydlon GDB gadewch i mi yn hytrach na deipio egwyl, mynd i mewn. 558 00:30:08,000 --> 00:30:10,000 Nid yw hynny'n beth oeddwn yn ei olygu i deipio. 559 00:30:10,000 --> 00:30:13,000 Gadewch i ni yn hytrach na teipio egwyl mhrif. 560 00:30:13,000 --> 00:30:15,000 Mewn geiriau eraill, yr wyf am osod rhywbeth a elwir yn torbwynt, 561 00:30:15,000 --> 00:30:18,000 sy'n cael ei enw addas, gan y bydd yn torri neu oedi 562 00:30:18,000 --> 00:30:21,000 gweithredu ar eich rhaglen yn y lle hwnnw penodol. 563 00:30:21,000 --> 00:30:23,000 Main yw enw fy swyddogaeth. 564 00:30:23,000 --> 00:30:25,000 Sylwch fod GDB yn eithaf smart. 565 00:30:25,000 --> 00:30:28,000 Mae'n cyfrifedig allan y prif digwydd i ddechrau fwy neu lai yn llinell 18 566 00:30:28,000 --> 00:30:32,000 o buggy3.c, ac yna sylwi yma ar y chwith uchaf 567 00:30:32,000 --> 00:30:34,000 b + yn iawn nesaf i linell 18. 568 00:30:34,000 --> 00:30:38,000 Dyna fy atgoffa fy mod wedi gosod torbwynt yn llinell 18. 569 00:30:38,000 --> 00:30:42,000 Y tro hwn pan fyddaf yn teipio rhedeg, yr wyf i'n mynd i redeg fy rhaglen 570 00:30:42,000 --> 00:30:45,000 hyd nes iddo daro'r y torbwynt, 571 00:30:45,000 --> 00:30:48,000 felly mae'r rhaglen yn oedi i mi yn llinell 18. 572 00:30:48,000 --> 00:30:50,000 Yma rydym yn mynd, rhedeg. 573 00:30:50,000 --> 00:30:53,000 Nid oes dim yn ymddangos i fod wedi digwydd, ond bod rhybudd yn y gwaelod ar y chwith 574 00:30:53,000 --> 00:30:58,000 rhaglen yn dechrau, buggy3, torbwynt 1 mewn prif buggy3.c llinell 18. 575 00:30:58,000 --> 00:31:00,000 Beth allaf ei wneud nawr? 576 00:31:00,000 --> 00:31:03,000 >> Hysbysiad gallaf ddechrau teipio pethau fel print, 577 00:31:03,000 --> 00:31:08,000 Nid printf, x print, ac yn awr mae hynny'n rhyfedd. 578 00:31:08,000 --> 00:31:11,000 Y $ 1 yn unig yw chwilfrydedd, gan y byddwn yn gweld 579 00:31:11,000 --> 00:31:14,000 bob tro y byddwch yn argraffu rhywbeth yr ydych yn cael gwerth $ newydd. 580 00:31:14,000 --> 00:31:18,000 Dyna fel y gallwch gyfeirio yn ôl at werthoedd blaenorol rhag ofn, 581 00:31:18,000 --> 00:31:21,000 ond am nawr beth print yn ei ddweud wrthyf yw bod gwerth x yn y fan hon yn y stori 582 00:31:21,000 --> 00:31:26,000 yn ôl pob golwg 134,514,032. 583 00:31:26,000 --> 00:31:29,000 Beth? Ble oedd yn dod hyd yn oed o? 584 00:31:29,000 --> 00:31:31,000 [Anghlywadwy-myfyrwyr] 585 00:31:31,000 --> 00:31:34,000 Yn wir, dyma beth byddwn yn galw gwerth garbage, ac nid ydym wedi siarad am hyn eto, 586 00:31:34,000 --> 00:31:37,000 ond y rheswm eich bod yn ymgychwyn newidynnau 587 00:31:37,000 --> 00:31:40,000 Yn amlwg, fel eu bod yn cael rhywfaint o werth eich bod am iddynt gael. 588 00:31:40,000 --> 00:31:44,000 Ond mae'r dal yn cofio y gallwch ddatgan newidynnau 589 00:31:44,000 --> 00:31:46,000 fel y gwnes i funud yn ôl yn fy enghraifft sigma 590 00:31:46,000 --> 00:31:48,000 heb holi i roi iddynt werth. 591 00:31:48,000 --> 00:31:50,000 Dwyn i gof yr hyn a wnes dros yma yn sigma. 592 00:31:50,000 --> 00:31:52,000 I ddatgan n, ond pa werth wnes i ei roi? 593 00:31:52,000 --> 00:31:56,000 Dim, oherwydd fy mod yn gwybod bod yn y llinellau nesaf 594 00:31:56,000 --> 00:31:59,000 Byddai GetInt yn gofalu am y broblem o roi gwerth y tu mewn o n. 595 00:31:59,000 --> 00:32:02,000 >> Ond ar y pwynt hwn yn hanes llinell 11 596 00:32:02,000 --> 00:32:05,000 12 llinell a llinell a 13 a llinell 14 597 00:32:05,000 --> 00:32:08,000 drwy gydol y sawl llinell beth yw gwerth n? 598 00:32:08,000 --> 00:32:10,000 Yn C dim ond nad ydych yn gwybod. 599 00:32:10,000 --> 00:32:14,000 Yn gyffredinol mae rhai, gwerth garbage ryw nifer hollol ar hap 600 00:32:14,000 --> 00:32:17,000 sydd ar ôl dros y bôn o'r rhyw swyddogaeth flaenorol 601 00:32:17,000 --> 00:32:21,000 wedi cael ei rhedeg, felly fel eich rhaglen yn rhedeg 602 00:32:21,000 --> 00:32:24,000 dwyn i gof swyddogaeth honno yn cael swyddogaeth, swyddogaeth, swyddogaeth. 603 00:32:24,000 --> 00:32:27,000 Mae pob un o'r fframiau yn cael eu rhoi ar y cof, ac yna dychwelyd y rhai swyddogaethau, 604 00:32:27,000 --> 00:32:31,000 ac yn union fel yr awgrymais gyda rhwbiwr eu cof yn cael ei ailddefnyddio yn y pen draw. 605 00:32:31,000 --> 00:32:37,000 Wel, dim ond fel y digwydd bod y newidyn x yn y rhaglen hon 606 00:32:37,000 --> 00:32:41,000 ymddangos i wedi cynnwys rhywfaint o werth garbage fel 134514032 607 00:32:41,000 --> 00:32:44,000 o rai swyddogaeth flaenorol, nid un yr wyf yn ysgrifennu. 608 00:32:44,000 --> 00:32:47,000 Gallai fod yn rhywbeth sy'n dod yn effeithiol gyda'r system weithredu, 609 00:32:47,000 --> 00:32:49,000 rhyw swyddogaeth o dan y cwfl. 610 00:32:49,000 --> 00:32:52,000 >> Iawn, mae hynny'n iawn, ond gadewch i ni nawr symud ymlaen i'r llinell nesaf. 611 00:32:52,000 --> 00:32:55,000 Os byddaf yn deipio "nesaf" ar GDB fy brydlon ac yr wyf daro chofnoda, 612 00:32:55,000 --> 00:32:58,000 sylwi bod y amlygu yn symud i lawr i llinell 19, 613 00:32:58,000 --> 00:33:01,000 ond yr ymhlygiad rhesymegol yw y llinell 18 614 00:33:01,000 --> 00:33:06,000 bellach wedi gorffen gweithredu, felly os wyf eto deipio "print x" 615 00:33:06,000 --> 00:33:10,000 Dylai wyf yn awr gweler 1, ac yn wir, yr wyf yn ei wneud. 616 00:33:10,000 --> 00:33:14,000 Unwaith eto, y pethau $ yn ffordd o GDB eich atgoffa 617 00:33:14,000 --> 00:33:17,000 hyn y mae'r hanes o brintiau yn eich bod wedi gwneud. 618 00:33:17,000 --> 00:33:21,000 Nawr, gadewch i mi fynd yn ei flaen ac argraffu y, ac yn wir, y mae rhywfaint o werth crazy yn ogystal, 619 00:33:21,000 --> 00:33:24,000 ond nid oes llawer mawr oherwydd yn llinell 19 rydym chi ar fin i aseinio ei 620 00:33:24,000 --> 00:33:27,000 y gwerth 2, felly gadewch i mi deipio "nesaf" eto. 621 00:33:27,000 --> 00:33:29,000 Ac yn awr ein bod ar y llinell printf. 622 00:33:29,000 --> 00:33:31,000 Gadewch i mi wneud x print. 623 00:33:31,000 --> 00:33:34,000 Gadewch i mi wneud y print. A dweud y gwir, Im 'yn cael ychydig yn flinedig o argraffu hyn. 624 00:33:34,000 --> 00:33:38,000 Gadewch i mi yn hytrach na deipio "x arddangos" a "arddangos y," 625 00:33:38,000 --> 00:33:41,000 ac yn awr bob tro rwy'n deipio gorchymyn yn y dyfodol 626 00:33:41,000 --> 00:33:45,000 Byddaf yn cael eu hatgoffa o'r hyn sydd x ac y, beth x ac y, beth x ac y. 627 00:33:45,000 --> 00:33:48,000 >> Gallaf hefyd, wrth fynd heibio, deipio i mewn "bobl leol wybodaeth." 628 00:33:48,000 --> 00:33:50,000 Gwybodaeth yn gorchymyn arbennig. 629 00:33:50,000 --> 00:33:52,000 Pobl leol yn golygu ei fod yn dangos i mi y newidynnau lleol. 630 00:33:52,000 --> 00:33:55,000 Dim ond rhag ofn i mi anghofio, neu hyn yn crazy, swyddogaeth cymhleth 631 00:33:55,000 --> 00:33:57,000 fy mod i neu rywun arall ysgrifennodd y bydd pobl leol yn dweud wrthych info 632 00:33:57,000 --> 00:34:00,000 beth yw'r holl newidynnau lleol tu mewn i'r swyddogaeth lleol 633 00:34:00,000 --> 00:34:03,000 y gallai ydych yn gofalu am os ydych am i brocio o gwmpas. 634 00:34:03,000 --> 00:34:07,000 Yn awr, printf ar fin gweithredu, felly gadewch i mi fynd yn ei flaen ac yn jyst deipio "nesaf." 635 00:34:07,000 --> 00:34:10,000 Oherwydd ein bod yn yr amgylchedd hwn nid ydym yn mewn gwirionedd yn gweld ei 636 00:34:10,000 --> 00:34:14,000 gweithredu i lawr yma, ond sylwi ei fod yn cael ychydig yn mangled yma. 637 00:34:14,000 --> 00:34:17,000 Ond sylwi ei fod yn bwysicach y sgrin yno, 638 00:34:17,000 --> 00:34:21,000 felly nid yw'n rhaglen berffaith yma, ond mae hynny'n iawn oherwydd gallaf bob amser yn chwilota o amgylch 639 00:34:21,000 --> 00:34:23,000 defnyddio print os ydw i eisiau. 640 00:34:23,000 --> 00:34:26,000 >> Gadewch i mi deipio nesaf eto, ac yn awr dyma y rhan ddiddorol. 641 00:34:26,000 --> 00:34:29,000 Ar y pwynt hwn yn y stori y yw 2, ac x yw 1, 642 00:34:29,000 --> 00:34:32,000 fel yr awgrymir yma, ac eto, 643 00:34:32,000 --> 00:34:35,000 y rheswm hwn yn awtomatig arddangos yn awr yw oherwydd fy mod yn defnyddio'r gorchymyn 644 00:34:35,000 --> 00:34:40,000 arddangos x ac arddangos y, felly mae'r hyn o bryd rwy'n deipio nesaf 645 00:34:40,000 --> 00:34:43,000 Dylid mewn egwyddor, x ac y yn cyfnewid. 646 00:34:43,000 --> 00:34:45,000 Nawr, rydym eisoes yn gwybod nad yw mynd i fod yn wir, 647 00:34:45,000 --> 00:34:49,000 ond byddwn yn gweld yn y man sut y gallwn plymio ddyfnach i chyfrif i maes pam mae hynny'n wir. 648 00:34:49,000 --> 00:34:54,000 Nesaf, ac yn anffodus, yn dal y 2 ac x yn dal i 1, a gallaf gadarnhau cymaint. 649 00:34:54,000 --> 00:34:56,000 Print x, print y. 650 00:34:56,000 --> 00:34:59,000 Yn wir, nid oes unrhyw cyfnewid wedi digwydd mewn gwirionedd, felly gadewch i ni ddechrau hyn drosodd. 651 00:34:59,000 --> 00:35:01,000 Yn amlwg cyfnewid yn cael ei dorri. 652 00:35:01,000 --> 00:35:04,000 Gadewch i ni yn hytrach na deipio "rhedeg" eto. 653 00:35:04,000 --> 00:35:07,000 Gadewch i mi ddweud ie, yr wyf am ei ailgychwyn o'r dechrau, rhowch. 654 00:35:07,000 --> 00:35:09,000 >> Nawr rwy'n yn ôl i fyny ar llinell 18. 655 00:35:09,000 --> 00:35:11,000 Nawr sylwi x ac y yn werthoedd garbage eto. 656 00:35:11,000 --> 00:35:15,000 Nesaf, nesaf, nesaf, nesaf. 657 00:35:15,000 --> 00:35:17,000 Os byddaf yn cael diflasu Gallaf hefyd jyst deipio n gyfer y flwyddyn nesaf. 658 00:35:17,000 --> 00:35:21,000 Gallwch crynhowch i'r dilyniant byrraf posibl o gymeriadau. 659 00:35:21,000 --> 00:35:23,000 Swap yn cael ei dorri yn awr. 660 00:35:23,000 --> 00:35:25,000 Gadewch i ni plymio i mewn, felly yn hytrach na teipio nesaf, 661 00:35:25,000 --> 00:35:30,000 yn awr yr wyf i'n mynd i deipio gam fel fy mod yn camu tu mewn swyddogaeth hon 662 00:35:30,000 --> 00:35:33,000 er mwyn i mi gerdded drwyddo, felly rwy'n taro cam ac yna mynd i mewn. 663 00:35:33,000 --> 00:35:37,000 Sylwch fod y neidiau yn tynnu sylw at i lawr yn is yn fy rhaglen i linell 36. 664 00:35:37,000 --> 00:35:39,000 Nawr beth yw'r newidynnau lleol? 665 00:35:39,000 --> 00:35:41,000 Pobl leol Info. 666 00:35:41,000 --> 00:35:43,000 Dim byd ond eto oherwydd nad ydym wedi gotten at y llinell, 667 00:35:43,000 --> 00:35:47,000 felly gadewch i ni fynd yn ei flaen a dweud "nesaf." 668 00:35:47,000 --> 00:35:50,000 Nawr rydym yn ymddangos i gael tmp tmp print,. 669 00:35:50,000 --> 00:35:52,000 Gwerth Garbage, dde? Rwy'n credu hynny. 670 00:35:52,000 --> 00:35:55,000 Beth am argraffu, print b, 1 a 2? 671 00:35:55,000 --> 00:35:58,000 Mewn eiliad, cyn gynted ag yr wyf deipio nesaf eto 672 00:35:58,000 --> 00:36:02,000 tmp yn mynd i gymryd ar werth o 1, gobeithio, 673 00:36:02,000 --> 00:36:05,000 oherwydd tmp yn mynd i gael ei neilltuo i'r gwerth a. 674 00:36:05,000 --> 00:36:08,000 >> Nawr gadewch i ni yn argraffu'r a, b print, 675 00:36:08,000 --> 00:36:11,000 ond erbyn hyn argraffu tmp, ac mae'n wir 1. 676 00:36:11,000 --> 00:36:14,000 Gadewch i mi ei wneud nesaf. Gadewch i mi ei wneud nesaf. 677 00:36:14,000 --> 00:36:16,000 Rydw i wedi gorffen y swyddogaeth cyfnewid. 678 00:36:16,000 --> 00:36:19,000 Rwy'n dal y tu mewn ohono yn llinell 40, felly gadewch i mi argraffu, 679 00:36:19,000 --> 00:36:22,000 Nid yw print b, ac yr wyf yn poeni beth yw tmp. 680 00:36:22,000 --> 00:36:27,000 Mae'n edrych fel cyfnewid yn gywir pan ddaw i gyfnewid a b a. 681 00:36:27,000 --> 00:36:31,000 Ond os wyf yn awr yn teipio nesaf, yr wyf yn neidio yn ôl i linell 25, 682 00:36:31,000 --> 00:36:34,000 ac wrth gwrs, os wyf yn fath yn x ac y print 683 00:36:34,000 --> 00:36:38,000 eu bod yn dal yr un fath, felly nid ydym wedi gosod y broblem. 684 00:36:38,000 --> 00:36:41,000 Ond ddiagnostig bellach efallai gyda'r rhaglen hon GDB 685 00:36:41,000 --> 00:36:44,000 rydym wedi gotten o leiaf un cam yn nes at ddealltwriaeth 686 00:36:44,000 --> 00:36:47,000 beth sy'n mynd o'i le heb orfod sbwriel ein cod drwy roi printf yma, 687 00:36:47,000 --> 00:36:50,000 printf yma, printf yma ac yna yn rhedeg eto ac eto 688 00:36:50,000 --> 00:36:52,000 yn ceisio at chyfrif i maes beth sy'n mynd o'i le. 689 00:36:52,000 --> 00:36:55,000 >> Rydw i'n mynd i fynd yn ei flaen a rhoi'r gorau iddi allan o hyn yn gyfan gwbl â rhoi'r gorau iddi. 690 00:36:55,000 --> 00:36:57,000 Mae'n mynd i ddweud wedyn, "Gadael beth bynnag?" Ydw. 691 00:36:57,000 --> 00:37:00,000 Nawr rwy'n yn ôl ar fy brydlon arferol, ac rwy'n ei wneud gan ddefnyddio GDB. 692 00:37:00,000 --> 00:37:03,000 Fel o'r neilltu, nid oes angen i chi ddefnyddio hwn-tui faner. 693 00:37:03,000 --> 00:37:07,000 Yn wir, os byddwch yn hepgor ei byddwch yn cael hanfod yr hanner gwaelod y sgrîn. 694 00:37:07,000 --> 00:37:11,000 Os byddaf yna teipiwch egwyl mhrif ac yna rhedeg 695 00:37:11,000 --> 00:37:15,000 Rwy'n dal i redeg fy rhaglen, ond beth fydd yn ei wneud yn fwy nhestun 696 00:37:15,000 --> 00:37:18,000 dim ond dangos i mi yr un llinell presennol ar y tro. 697 00:37:18,000 --> 00:37:21,000 Mae'r tui-, rhyngwyneb defnyddiwr testunol, 698 00:37:21,000 --> 00:37:25,000 yn unig yn dangos i chi fwy o'r rhaglen ar unwaith, ac mae'n debyg mai ychydig gysyniadol yn haws. 699 00:37:25,000 --> 00:37:27,000 Ond yn wir, a gaf fi ei wneud nesaf, nesaf, nesaf, 700 00:37:27,000 --> 00:37:30,000 ac rydw i'n mynd i weld un llinell ar y tro, ac os Rwy'n awyddus iawn i weld beth sy'n mynd ymlaen 701 00:37:30,000 --> 00:37:35,000 Gallaf deipio rhestr a gweld criw cyfan o linellau cyfagos. 702 00:37:35,000 --> 00:37:39,000 >> Mae yna fideo ein bod ni wedi gofyn i chi wylio am broblem yn gosod 3 703 00:37:39,000 --> 00:37:43,000 lle mae Nate ymdrin â rhai o'r cymhlethdodau o GDB, 704 00:37:43,000 --> 00:37:46,000 a dyma un o'r pethau hynny, yn onest, lle mae rhai ganran heb fod yn ddibwys i chi 705 00:37:46,000 --> 00:37:49,000 byth yn cyffwrdd GDB, a bydd hynny fod yn beth drwg 706 00:37:49,000 --> 00:37:53,000 oherwydd llythrennol byddwch yn gorffen treulio mwy o amser yn ddiweddarach yn y semester 707 00:37:53,000 --> 00:37:56,000 mynd ar drywydd lawr bugs yna byddai chi os ydych yn rhoi yn yr awr honno hanner awr / 708 00:37:56,000 --> 00:38:00,000 yr wythnos hon a dysgu nesaf i gael gyfforddus gyda GDB. 709 00:38:00,000 --> 00:38:02,000 Printf oedd eich ffrind. 710 00:38:02,000 --> 00:38:05,000 Dylai GDB yn awr yn eich ffrind. 711 00:38:05,000 --> 00:38:08,000 >> Unrhyw gwestiynau ar GDB? 712 00:38:08,000 --> 00:38:12,000 A dyma restr gyflym o rai o'r gorchmynion mwyaf pwerus a defnyddiol. 713 00:38:12,000 --> 00:38:15,000 Yeah Allwch. >> Byddwch yn argraffu, llinyn? 714 00:38:15,000 --> 00:38:17,000 Allwch chi argraffu llinyn? Yn hollol. 715 00:38:17,000 --> 00:38:19,000 Nid oes rhaid i ddim ond fod yn gyfanrifau. 716 00:38:19,000 --> 00:38:22,000 Os yw s amrywiol yn llinyn jyst deipio i mewn s print. 717 00:38:22,000 --> 00:38:24,000 Bydd yn dangos i chi beth y newidyn llinyn yn. 718 00:38:24,000 --> 00:38:26,000 [Anghlywadwy-myfyrwyr] 719 00:38:26,000 --> 00:38:28,000 Bydd yn rhoi i chi y cyfeiriad a llinyn ei hun. 720 00:38:28,000 --> 00:38:32,000 Bydd yn dangos i chi ddau. 721 00:38:32,000 --> 00:38:34,000 Ac un peth olaf, dim ond oherwydd bod y rhain yn dda i wybod hefyd. 722 00:38:34,000 --> 00:38:37,000 Olrheiniad a ffrâm, gadewch i mi plymio i mewn i'r un adeg y llynedd, 723 00:38:37,000 --> 00:38:39,000 un rhaglen union gyda GDB. 724 00:38:39,000 --> 00:38:44,000 Gadewch i mi fynd yn ei flaen ac yn rhedeg y fersiwn rhyngwyneb defnyddiwr testunol, 725 00:38:44,000 --> 00:38:46,000 torri prif. 726 00:38:46,000 --> 00:38:49,000 Gadewch i mi fynd yn ei flaen ac yn rhedeg unwaith eto. Dyma fi. 727 00:38:49,000 --> 00:38:55,000 Nawr, gadewch i mi fynd nesaf, nesaf, nesaf, nesaf, nesaf, cam, rhowch. 728 00:38:55,000 --> 00:39:00,000 >> Ac yn awr mae'n debyg rwyf bellach yn cyfnewid yn fwriadol, ond rwy'n hoffi "Damn, beth oedd y gwerth x?" 729 00:39:00,000 --> 00:39:02,000 Ni allaf wneud x anymore. 730 00:39:02,000 --> 00:39:05,000 Ni allaf wneud y oherwydd nad ydynt yn eu cwmpas. 731 00:39:05,000 --> 00:39:07,000 Dydyn nhw ddim yn cyd-destun, ond dim problem. 732 00:39:07,000 --> 00:39:09,000 Gallaf deipio olrheiniad. 733 00:39:09,000 --> 00:39:13,000 Mae hynny'n dangos i mi yr holl swyddogaethau sydd wedi cyflawni hyd at y pwynt hwn mewn amser. 734 00:39:13,000 --> 00:39:16,000 Sylwch fod yr un ar y gwaelod, prif, llinellau i fyny gyda phrif 735 00:39:16,000 --> 00:39:18,000 bod ar waelod ein llun yma. 736 00:39:18,000 --> 00:39:22,000 Mae'r ffaith bod cyfnewid yn uwch ei ben i fyny gyda llinellau cyfnewid yn uwch mewn cof yma, 737 00:39:22,000 --> 00:39:26,000 ac os wyf eisiau mynd yn ôl i'r brif dros dro y gallaf ei ddweud "ffrâm." 738 00:39:26,000 --> 00:39:30,000 Pa rif? Main yn ffrâm # 1. 739 00:39:30,000 --> 00:39:32,000 Rydw i'n mynd i fynd yn ei flaen a dweud "ffrâm 1." 740 00:39:32,000 --> 00:39:36,000 >> Nawr rwy'n yn ôl yn y brif, a gallaf argraffu x, a gallaf argraffu y, 741 00:39:36,000 --> 00:39:40,000 ond ni allaf argraffu b neu. 742 00:39:40,000 --> 00:39:43,000 Ond gallaf os ydw i'n dweud, "Iawn, arhoswch funud. Ble roedd y cyfnewid?" 743 00:39:43,000 --> 00:39:46,000 Gadewch i mi fynd yn ei flaen ac yn dweud "ffrâm 0." 744 00:39:46,000 --> 00:39:48,000 Nawr rwy'n yn ôl i ble yr hoffwn fod, ac fel o'r neilltu, 745 00:39:48,000 --> 00:39:52,000 mae gorchmynion eraill hefyd, fel os ydych yn wir yn mynd teipio diflasu nesaf, nesaf, nesaf, nesaf, 746 00:39:52,000 --> 00:39:56,000 yn gyffredinol, gallwch ddweud pethau fel "10 nesaf," a fydd yn camu drwy'r y 10 nesaf llinellau. 747 00:39:56,000 --> 00:39:59,000 Gallwch hefyd ysgrifennu "parhau" pan fyddwch mewn gwirionedd yn cael llond bol gyda chamu drwyddo. 748 00:39:59,000 --> 00:40:05,000 Bydd Parhau i redeg eich rhaglen heb ymyrraeth nes ei fod yn taro arall torbwynt, 749 00:40:05,000 --> 00:40:07,000 boed mewn dolen neu yn is i lawr yn eich rhaglen. 750 00:40:07,000 --> 00:40:11,000 >> Yn yr achos hwn rydym yn parhau hyd y diwedd, a'r rhaglen exited fel arfer. 751 00:40:11,000 --> 00:40:13,000 Mae hon yn ffordd ffansi, proses israddol. 752 00:40:13,000 --> 00:40:16,000 Dim ond eich rhaglen exited fel arfer. 753 00:40:16,000 --> 00:40:24,000 Mwy o wybodaeth am hynny yn y fideo ac â dadfygio sesiynau sydd i ddod. 754 00:40:24,000 --> 00:40:26,000 Dyna oedd llawer. 755 00:40:26,000 --> 00:40:35,000 Gadewch i ni gymryd ein 5-munud egwyl yma, a byddwn yn dychwelyd gyda structs a ffeiliau. 756 00:40:35,000 --> 00:40:38,000 >> Os ydych wedi syrthio i mewn i pset yr wythnos hon eisoes yn 757 00:40:38,000 --> 00:40:41,000 byddwch yn gwybod ein bod yn defnyddio yn y cod dosbarthu, 758 00:40:41,000 --> 00:40:45,000 y cod ffynhonnell yr ydym yn ei ddarparu i chi fel man cychwyn, mae rhai technegau newydd. 759 00:40:45,000 --> 00:40:50,000 Yn benodol, rydym yn cyflwyno y gair allweddol newydd o'r enw strwythur, ar gyfer strwythur, 760 00:40:50,000 --> 00:40:53,000 fel y gallwn greu newidynnau customized o ryw fath. 761 00:40:53,000 --> 00:40:57,000 Rydym hefyd yn cyflwyno y syniad o fewnbwn ffeil file I / O, ac allbwn, 762 00:40:57,000 --> 00:41:00,000 ac mae hyn yn fel y gallwn achub y wladwriaeth 763 00:41:00,000 --> 00:41:03,000 eich bwrdd Scramble i ffeil ar ddisg 764 00:41:03,000 --> 00:41:06,000 fel y gall y cymrodyr addysgu ac yr wyf yn deall 765 00:41:06,000 --> 00:41:09,000 beth sy'n mynd ymlaen tu mewn i'ch rhaglen heb orfod manually chwarae 766 00:41:09,000 --> 00:41:11,000 dwsinau o gemau o Scramble. 767 00:41:11,000 --> 00:41:13,000 Gallwn wneud hyn yn fwy automatedly. 768 00:41:13,000 --> 00:41:18,000 >> Mae'r syniad o strwythur datrys problem eithaf cryf. 769 00:41:18,000 --> 00:41:21,000 Tybiwch ein bod yn dymuno gweithredu rhai rhaglen 770 00:41:21,000 --> 00:41:25,000 hynny rywsut yn cadw golwg ar wybodaeth ar fyfyrwyr, 771 00:41:25,000 --> 00:41:28,000 ac efallai y bydd myfyrwyr, er enghraifft, ID, enw 772 00:41:28,000 --> 00:41:31,000 a thy mewn lle fel Harvard, felly mae'r rhain yn 3 darn o wybodaeth 773 00:41:31,000 --> 00:41:34,000 rydym am eu cadw o gwmpas, felly gadewch i mi fynd yn ei flaen ac yn dechrau ysgrifennu rhaglen bach yma, 774 00:41:34,000 --> 00:41:38,000 cynnwys stdio.h. 775 00:41:38,000 --> 00:41:42,000 Gadewch i mi yn cynnwys cs50.h. 776 00:41:42,000 --> 00:41:44,000 Ac yna dechrau fy prif swyddogaeth. 777 00:41:44,000 --> 00:41:46,000 Ni fyddaf yn trafferthu gyda unrhyw ddadleuon llinell orchymyn, 778 00:41:46,000 --> 00:41:49,000 ac yma rwyf am gael myfyrwyr, felly dw i'n mynd i ddweud 779 00:41:49,000 --> 00:41:54,000 gan fyfyriwr enw, felly dwi'n mynd i ddweud "enw llinyn." 780 00:41:54,000 --> 00:41:59,000 Wedyn dw i'n mynd i ddweud myfyriwr hefyd yn cael ID, id felly int, 781 00:41:59,000 --> 00:42:03,000 a myfyriwr tŷ, felly rwyf hefyd yn mynd i ddweud "ty llinyn." 782 00:42:03,000 --> 00:42:06,000 Yna byddaf yn archebu'r rhain ychydig yn fwy lân fel hyn. 783 00:42:06,000 --> 00:42:11,000 Iawn, yn awr yr wyf wedi 3 newidynnau i'w defnyddio i gynrychioli myfyrwyr, felly "myfyriwr." 784 00:42:11,000 --> 00:42:15,000 >> Ac yn awr yr wyf yn awyddus i boblogi y gwerthoedd hyn, felly gadewch i mi fynd yn ei flaen ac yn dweud rhywbeth fel 785 00:42:15,000 --> 00:42:18,000 "Id = 123." 786 00:42:18,000 --> 00:42:21,000 Enw yn mynd i gael David. 787 00:42:21,000 --> 00:42:24,000 Lets 'ddeud tŷ yn mynd i gael Mather, 788 00:42:24,000 --> 00:42:31,000 ac yna dw i'n mynd i wneud rhywbeth fympwyol fel printf ("% s, 789 00:42:31,000 --> 00:42:37,000 y mae eu ID yn d%, yn byw yn% s. 790 00:42:37,000 --> 00:42:41,000 Ac yn awr, beth ddylwn i ei awyddus i gau'r yma, un ar ôl y llall? 791 00:42:41,000 --> 00:42:47,000 Enw, id, tŷ; dychwelyd 0. 792 00:42:47,000 --> 00:42:50,000 Iawn, oni bai fy mod sgriwio i fyny yma yn rhywle 793 00:42:50,000 --> 00:42:54,000 Rwy'n credu bod gennym raglen 'n bert da sy'n storio un myfyriwr. 794 00:42:54,000 --> 00:42:57,000 Wrth gwrs, nid yw hyn yw'r cyfan sydd ddiddorol. Beth os ydw i eisiau cael 2 myfyrwyr? 795 00:42:57,000 --> 00:42:59,000 Dyna dim llawer mawr. Allaf gefnogi'r 2 o bobl. 796 00:42:59,000 --> 00:43:03,000 Gadewch i mi fynd yn ei flaen ac yn tynnu sylw at hyn ac yn mynd i lawr yma, 797 00:43:03,000 --> 00:43:09,000 a gallaf ddweud "id = 456" i rywun fel Rob sy'n byw yn Kirkland. 798 00:43:09,000 --> 00:43:12,000 >> Iawn, aros, ond ni allaf yn galw'r rhain yr un peth, 799 00:43:12,000 --> 00:43:15,000 ac mae'n edrych fel fy mod i'n mynd i gael i gopïo hyn, 800 00:43:15,000 --> 00:43:19,000 felly gadewch i mi ddweud y bydd y rhain yn Dewi Sant newidynnau, 801 00:43:19,000 --> 00:43:23,000 a gadewch i mi gael rhai copïau o'r rhain ar gyfer Rob. 802 00:43:23,000 --> 00:43:27,000 Byddwn yn galw'r rhain yn y Rob, ond nid yw hyn yn mynd i weithio nawr 803 00:43:27,000 --> 00:43:33,000 gan fy mod wedi aros-, gadewch i ni newid i mi ID1, name1 a house1. 804 00:43:33,000 --> 00:43:35,000 Bydd Rob yn 2, 2. 805 00:43:35,000 --> 00:43:42,000 Mae gen i newid hyn yma, yma, yma, yma, yma, yma. 806 00:43:42,000 --> 00:43:45,000 Arhoswch, beth am Tommy? Gadewch i ni wneud hyn eto. 807 00:43:45,000 --> 00:43:49,000 Yn amlwg, os ydych yn dal i feddwl bod hyn yn ffordd dda o wneud hyn, nid yw'n, 808 00:43:49,000 --> 00:43:52,000 felly copïo / gludo drwg. 809 00:43:52,000 --> 00:43:55,000 Ond rydym yn datrys y wythnos yn ôl. 810 00:43:55,000 --> 00:43:59,000 >> Beth oedd ein ateb pan oeddem am gael achosion lluosog o'r fath un data? 811 00:43:59,000 --> 00:44:01,000 [Mae myfyrwyr yn] Mae amrywiaeth. 812 00:44:01,000 --> 00:44:03,000 Mae amrywiaeth, felly gadewch i mi geisio i lanhau hyn i fyny. 813 00:44:03,000 --> 00:44:07,000 Gadewch i mi wneud rhywfaint o le i mi fy hun ar y brig, a gadewch i mi yn hytrach na gwneud hynny yma. 814 00:44:07,000 --> 00:44:12,000 Byddwn yn galw'r bobl hyn, ac yn lle dw i'n mynd i ddweud "bidiau int," 815 00:44:12,000 --> 00:44:14,000 ac rydw i'n mynd i gefnogi 3 ohonom ar hyn o bryd. 816 00:44:14,000 --> 00:44:18,000 Rydw i'n mynd i ddweud "enwau llinyn," a byddaf yn cefnogi 3 ohonom, 817 00:44:18,000 --> 00:44:22,000 ac yna dw i'n mynd i ddweud "tai llinyn," a dw i'n mynd i gefnogi 3 ohonom. 818 00:44:22,000 --> 00:44:26,000 Nawr yma yn hytrach na chael ei David newidynnau lleol eu hunain 819 00:44:26,000 --> 00:44:28,000 gallwn gael gwared o'r rheiny. 820 00:44:28,000 --> 00:44:30,000 Sy'n teimlo'n dda ein bod yn glanhau hyn i fyny. 821 00:44:30,000 --> 00:44:35,000 Yna gallaf ddweud David yn mynd i fod [0] ac enwau [0] 822 00:44:35,000 --> 00:44:38,000 a thai [0]. 823 00:44:38,000 --> 00:44:41,000 Ac yna Rob gallwn arbed yr un modd ar hyn. 824 00:44:41,000 --> 00:44:46,000 Gadewch i ni roi hyn i lawr yma, felly mae'n mynd i fod yn fympwyol bidiau [1]. 825 00:44:46,000 --> 00:44:50,000 Mae'n mynd i fod yn enwau [1], 826 00:44:50,000 --> 00:44:53,000 ac yna yn olaf, tai [1]. 827 00:44:53,000 --> 00:44:57,000 >> Dal i fod ychydig yn ddiflas, ac yn awr yr wyf wedi at chyfrif hyn, 828 00:44:57,000 --> 00:45:03,000 felly gadewch i ni ddweud "enwau [0], id [0], tai [0], 829 00:45:03,000 --> 00:45:06,000 a gadewch i ni pluralize hyn. 830 00:45:06,000 --> 00:45:09,000 ID, IDS, IDS. 831 00:45:09,000 --> 00:45:12,000 Ac eto, yr wyf i'n ei wneud, felly unwaith eto, rwyf eisoes yn troi i gopïo / gludo eto, 832 00:45:12,000 --> 00:45:14,000 felly groes yn mae ateb arall yma. 833 00:45:14,000 --> 00:45:18,000 Mae'n debyg y gallaf lanhau hyn i fyny ymhellach gyda dolen neu rywbeth fel 'na, 834 00:45:18,000 --> 00:45:21,000 hynny yn fyr, mae'n ychydig yn well ond yn dal yn teimlo fel 835 00:45:21,000 --> 00:45:24,000 Rwy'n troi at gopïo / gludo, ond hyd yn oed hyn i hawlio iawndal, 836 00:45:24,000 --> 00:45:27,000 Nid yw wir yn y bôn yr ateb cywir oherwydd 837 00:45:27,000 --> 00:45:29,000 beth os rywbryd byddwn yn penderfynu eich bod yn gwybod beth? 838 00:45:29,000 --> 00:45:32,000 Rydym yn dylai gwirionedd wedi bod yn storio cyfeiriadau e-bost i David a Rob 839 00:45:32,000 --> 00:45:34,000 a phawb arall yn y rhaglen hon. 840 00:45:34,000 --> 00:45:36,000 Dylem hefyd yn storio rhifau ffôn. 841 00:45:36,000 --> 00:45:39,000 Dylem hefyd yn storio rhifau cyswllt mewn argyfwng. 842 00:45:39,000 --> 00:45:41,000 Mae gennym yr holl ddarnau hyn o ddata yr ydym am i storio, 843 00:45:41,000 --> 00:45:43,000 felly sut ydych chi'n mynd ati i wneud hynny? 844 00:45:43,000 --> 00:45:46,000 >> Rydych yn datgan arall amrywiaeth ar y brig, ac yna llaw yn ychwanegu 845 00:45:46,000 --> 00:45:49,000 cyfeiriad e-bost [0], cyfeiriad e-bost [1] 846 00:45:49,000 --> 00:45:51,000 am David a Rob ac yn y blaen. 847 00:45:51,000 --> 00:45:56,000 Ond mae mewn gwirionedd dim ond rhagdybiaeth sy'n sail i'r cynllun 848 00:45:56,000 --> 00:45:59,000 fy mod yn defnyddio'r system anrhydedd i wybod bod 849 00:45:59,000 --> 00:46:03,000 [I] ym mhob un o'r nifer o araeau 850 00:46:03,000 --> 00:46:06,000 ond fel y digwydd i gyfeirio at y person un, 851 00:46:06,000 --> 00:46:10,000 felly [0] yn ids yw rhif 123, 852 00:46:10,000 --> 00:46:13,000 ac rydw i'n mynd i gymryd yn ganiataol bod enwau [0] 853 00:46:13,000 --> 00:46:16,000 yw enw'r un person a thai [0] 854 00:46:16,000 --> 00:46:21,000 yn dŷ yr un person ac yn y blaen ar gyfer yr holl arae amrywiol y creu. 855 00:46:21,000 --> 00:46:24,000 Ond sylwch nad oes unrhyw gysylltiad sylfaenol 856 00:46:24,000 --> 00:46:27,000 ymysg y rhai 3 darn o id gwybodaeth,, enw a thy, 857 00:46:27,000 --> 00:46:32,000 er nad yw'r endid ydym yn ceisio model yn y rhaglen hon yn araeau. 858 00:46:32,000 --> 00:46:35,000 Araeau yn unig y ffordd hon rhaglennol o wneud hyn. 859 00:46:35,000 --> 00:46:38,000 Yr hyn yr ydym wir eisiau i fodelu yn ein rhaglen yn berson 860 00:46:38,000 --> 00:46:41,000 fel David, mae person fel Rob tu mewn iddo 861 00:46:41,000 --> 00:46:46,000 neu amgáu yn enw ac Adnabod a thy. 862 00:46:46,000 --> 00:46:49,000 >> Allwn ni rywsut yn mynegi syniad hwn o amgįu 863 00:46:49,000 --> 00:46:52,000 lle mae person yn cael ID, enw a thŷ 864 00:46:52,000 --> 00:46:55,000 ac nid troi at 'n sylweddol hon darnia lle rydym yn unig 865 00:46:55,000 --> 00:46:58,000 ymddiried bod rhywbeth braced 866 00:46:58,000 --> 00:47:02,000 yn cyfeirio at yr endid ddynol un ym mhob un o'r araeau gwahanol? 867 00:47:02,000 --> 00:47:04,000 Gallwn ei wneud mewn gwirionedd hyn. 868 00:47:04,000 --> 00:47:08,000 Gadewch i mi fynd yn uwch na'r prif ar hyn o bryd, a gadewch i mi greu fy math data ei hun 869 00:47:08,000 --> 00:47:10,000 am wir y tro cyntaf. 870 00:47:10,000 --> 00:47:14,000 Rydym yn defnyddio y dechneg hon Scramble, 871 00:47:14,000 --> 00:47:17,000 ond yma yr wyf i'n mynd i fynd yn ei flaen a chreu math data, 872 00:47:17,000 --> 00:47:19,000 a ydych yn gwybod beth, yr wyf i'n mynd i alw yn fyfyriwr neu berson, 873 00:47:19,000 --> 00:47:23,000 ac yr wyf i'n mynd i ddefnyddio typedef gyfer diffinio fath. 874 00:47:23,000 --> 00:47:25,000 Rydw i'n mynd i ddweud bod hwn yn strwythur, 875 00:47:25,000 --> 00:47:29,000 ac yna y strwythur hwn yn mynd i fod o fyfyrwyr fath, byddwn yn dweud, 876 00:47:29,000 --> 00:47:31,000 hyd yn oed er 'i' ychydig yn bellach wedi dyddio i mi. 877 00:47:31,000 --> 00:47:33,000 Byddwn yn dweud "int id." 878 00:47:33,000 --> 00:47:35,000 Byddwn yn dweud "enw llinyn." 879 00:47:35,000 --> 00:47:37,000 Yna byddwn yn dweud "llinyn tŷ," 880 00:47:37,000 --> 00:47:40,000 felly, yn awr erbyn diwedd y llinellau hyn ychydig o god 881 00:47:40,000 --> 00:47:45,000 Rwyf wedi dysgu dim ond clang bod yn bodoli 882 00:47:45,000 --> 00:47:49,000 math data ar wahân ints, ar wahân llinynnau, ar wahân dyblau, ar wahân fflotiau. 883 00:47:49,000 --> 00:47:54,000 >> O hyn o bryd mewn 11 llinell amser, mae yna bellach math data newydd o'r enw myfyrwyr, 884 00:47:54,000 --> 00:47:58,000 ac yn awr y gallaf ddatgan newidyn myfyrwyr yn unrhyw le rwyf eisiau, 885 00:47:58,000 --> 00:48:01,000 felly gadewch i mi sgroliwch i lawr yma i bobl. 886 00:48:01,000 --> 00:48:05,000 Nawr gallaf gael gwared o hyn, a gallaf fynd yn ôl i lawr i David yma, 887 00:48:05,000 --> 00:48:10,000 ac ar gyfer David gallaf ddweud mewn gwirionedd bod David, 888 00:48:10,000 --> 00:48:13,000 gallwn enwi llythrennol y newidyn ar ôl fy hun, 889 00:48:13,000 --> 00:48:16,000 yn mynd i fod o fyfyrwyr fath. 890 00:48:16,000 --> 00:48:18,000 Gallai hyn yn edrych ychydig yn od, ond nid hyn yw'r cwbl y gwahanol 891 00:48:18,000 --> 00:48:22,000 rhag datgan rhywbeth fel int neu linyn neu arnofio. 892 00:48:22,000 --> 00:48:24,000 Fel mae'n digwydd cael ei alw myfyrwyr yn awr, 893 00:48:24,000 --> 00:48:28,000 ac os wyf i am roi rhywbeth tu mewn i'r strwythur hwn 894 00:48:28,000 --> 00:48:31,000 Erbyn hyn mae gen i ddefnyddio darn newydd o gystrawen, ond mae'n eithaf syml, 895 00:48:31,000 --> 00:48:39,000 david.id = 123, david.name = "David" mewn cyfalaf D, 896 00:48:39,000 --> 00:48:42,000 a david.house = "Mather," 897 00:48:42,000 --> 00:48:46,000 ac yn awr y gallaf gael gwared ar y pethau yma. 898 00:48:46,000 --> 00:48:51,000 Rhybudd rydym wedi ail-ddylunio yn awr ein rhaglen mewn gwirionedd yn ffordd llawer gwell 899 00:48:51,000 --> 00:48:54,000 yn yr awr ein rhaglen yn adlewyrchu'r byd go iawn. 900 00:48:54,000 --> 00:48:57,000 >> Mae yna syniad y byd go iawn o berson neu fyfyriwr. 901 00:48:57,000 --> 00:49:02,000 Yma, mae gennym bellach yn fersiwn C o berson neu yn fwy penodol yn fyfyriwr. 902 00:49:02,000 --> 00:49:05,000 Y tu mewn y person a yw'r rhain yn nodweddion perthnasol, 903 00:49:05,000 --> 00:49:10,000 ID, enw a thŷ, felly Rob yn ei hanfod yn dod yr un peth i lawr yma, 904 00:49:10,000 --> 00:49:14,000 felly myfyrwyr rob, ac erbyn hyn rob.id = 456, 905 00:49:14,000 --> 00:49:17,000 rob.name = "Rob." 906 00:49:17,000 --> 00:49:20,000 Mae'r ffaith bod y newidyn cael ei alw'n Rob yn fath o ddiystyr. 907 00:49:20,000 --> 00:49:22,000 Gallem fod wedi ei alw x neu y neu z. 908 00:49:22,000 --> 00:49:25,000 Rydym yn unig a enwir fod Rob i fod yn semantig yn gyson, 909 00:49:25,000 --> 00:49:28,000 ond mewn gwirionedd yr enw yn y tu mewn yn y maes hwnnw ei hun, 910 00:49:28,000 --> 00:49:30,000 felly rwyf bellach wedi hyn. 911 00:49:30,000 --> 00:49:33,000 Mae hyn nid yn rhy yn teimlo fel y dyluniad gorau yn fy mod i wedi codio galed David. 912 00:49:33,000 --> 00:49:35,000 Rydw i wedi codio galed Rob. 913 00:49:35,000 --> 00:49:39,000 Ac yr wyf yn dal i orfod troi at rai copi a phastio bob tro rwyf am newidynnau newydd. 914 00:49:39,000 --> 00:49:43,000 At hynny, rhaid i mi roi i bob golwg o'r newidynnau hyn, enw, 915 00:49:43,000 --> 00:49:46,000 hyd yn oed er y byddwn i'n llawer gwell disgrifiwch y newidynnau 916 00:49:46,000 --> 00:49:48,000  mwy o fyfyrwyr generig fel. 917 00:49:48,000 --> 00:49:52,000 >> Nawr gallwn gyfuno'r syniadau sydd wedi bod yn gweithio'n dda i ni 918 00:49:52,000 --> 00:49:56,000 ac yn hytrach yn dweud, "Rydych yn gwybod beth, yn rhoi i mi fyfyrwyr amrywiol o'r enw, 919 00:49:56,000 --> 00:50:01,000 a gadewch i ni wedi iddo fod o faint 3, "felly nawr gallaf fireinio hyn ymhellach, 920 00:50:01,000 --> 00:50:04,000 cael gwared ar y David datgan llaw, 921 00:50:04,000 --> 00:50:08,000 a gallaf yn hytrach na dweud rhywbeth fel myfyrwyr [0] yma. 922 00:50:08,000 --> 00:50:11,000 Yna gallaf ddweud myfyrwyr [0] yma, 923 00:50:11,000 --> 00:50:14,000 Gall myfyrwyr [0] yma, ac yn y blaen, ac yr wyf yn mynd o amgylch 924 00:50:14,000 --> 00:50:16,000 a glanhau fod ar gyfer Rob. 925 00:50:16,000 --> 00:50:19,000 Gallwn hefyd fynd am nawr efallai ychwanegu dolen 926 00:50:19,000 --> 00:50:23,000 a defnyddio GetString a GetInt i mewn gwirionedd yn cael y gwerthoedd hyn gan y defnyddiwr. 927 00:50:23,000 --> 00:50:27,000 Gallwn fynd ati i ychwanegu cyson oherwydd mae hyn yn arfer gwael yn gyffredinol 928 00:50:27,000 --> 00:50:29,000 i cod caled ryw nifer mympwyol fel 3 dde yma 929 00:50:29,000 --> 00:50:33,000 ac yna dim ond cofiwch y dylech roi dim mwy na 3 myfyriwr yn yr ystafell. 930 00:50:33,000 --> 00:50:36,000 Mae'n debyg y byddai'n well defnyddio # ddiffinio ar frig fy ffeil 931 00:50:36,000 --> 00:50:40,000 a ffactor hwnnw allan, felly yn wir, gadewch i mi fynd yn ei flaen a chyffredinoli hyn. 932 00:50:40,000 --> 00:50:43,000 >> Gadewch i mi agor yn enghraifft sy'n ymysg heddiw 933 00:50:43,000 --> 00:50:46,000 enghreifftiau o flaen llaw, structs1. 934 00:50:46,000 --> 00:50:49,000 Mae hon yn rhaglen fwy cyflawn sy'n defnyddio # ddiffinio hyd yma 935 00:50:49,000 --> 00:50:51,000 ac yn dweud ein bod yn mynd i gael 3 myfyrwyr yn ddiofyn. 936 00:50:51,000 --> 00:50:54,000 Yma Rwy'n datgan gwerth dosbarth o fyfyrwyr, 937 00:50:54,000 --> 00:50:57,000 felly ystafell ddosbarth o fyfyrwyr, ac erbyn hyn rwy'n defnyddio dolen 938 00:50:57,000 --> 00:51:00,000 dim ond er mwyn gwneud y cod ychydig yn fwy cain, poblogi'r y dosbarth 939 00:51:00,000 --> 00:51:05,000 gyda mewnbwn y defnyddiwr, felly ailadrodd o i = 0 ar hyd i fyfyrwyr, sy'n 3. 940 00:51:05,000 --> 00:51:07,000 Ac yna yr wyf yn annog y defnyddiwr yn y fersiwn hwn 941 00:51:07,000 --> 00:51:10,000  beth ID y myfyriwr, ac yr wyf yn ei gael gyda GetInt. 942 00:51:10,000 --> 00:51:13,000 Beth yw enw'r myfyriwr, ac yna yr wyf yn ei gael gyda GetString. 943 00:51:13,000 --> 00:51:15,000 Beth yw tŷ y myfyriwr? Wyf yn ei gael gyda GetString. 944 00:51:15,000 --> 00:51:19,000 Ac yna ar y gwaelod yma rwyf wedi penderfynu gwneud dim newid 945 00:51:19,000 --> 00:51:22,000 sut yr wyf i'n argraffu hyn allan ac i mewn gwirionedd yn defnyddio dolen, 946 00:51:22,000 --> 00:51:24,000 ac sy'n ydw i'n argraffu? 947 00:51:24,000 --> 00:51:27,000 Yn ôl at y sylw rwy'n argraffu unrhyw un yn Mather, 948 00:51:27,000 --> 00:51:30,000 a dyna ni felly Rob a Tommy ac yn y blaen-mewn gwirionedd Tommy yn Mather. 949 00:51:30,000 --> 00:51:34,000 Byddai Tommy a David yn cael ei argraffu yn yr achos hwn, ond sut mae hyn yn gweithio? 950 00:51:34,000 --> 00:51:40,000 Nid ydym wedi gweld y swyddogaeth hon o'r blaen, ond gan gymryd dyfalu ynghylch beth mae hyn yn ei wneud. 951 00:51:40,000 --> 00:51:42,000 Cymharu llinynnau. 952 00:51:42,000 --> 00:51:45,000 >> Mae'n ychydig nad ydynt yn amlwg sut mae'n cymharu llinynnau gan ei fod yn troi allan 953 00:51:45,000 --> 00:51:49,000 os yw'n dychwelyd 0 sy'n golygu bod y llinynnau yn gyfartal. 954 00:51:49,000 --> 00:51:53,000 Os yw'n dychwelyd -1 hynny'n golygu un yn dod yn nhrefn yr wyddor cyn y llall, 955 00:51:53,000 --> 00:51:57,000 ac os bydd yn dychwelyd 1 sy'n golygu y gair arall yn dod yn nhrefn yr wyddor 956 00:51:57,000 --> 00:52:00,000 cyn y llall, a gallwch edrych ar-lein neu ar y dudalen dyn 957 00:52:00,000 --> 00:52:04,000 i weld yn union pa ffordd yw pa un, ond mae hyn i gyd ei wneud yn awr yw ei fod yn dweud 958 00:52:04,000 --> 00:52:09,000 os yw'r [i]. tŷ yn hafal i "Mather" 959 00:52:09,000 --> 00:52:13,000 yna mynd yn ei flaen ac argraffu felly ac felly yn Mather. 960 00:52:13,000 --> 00:52:16,000 Ond dyma rywbeth nad ydym wedi gweld o'r blaen, a byddwn yn dod yn ôl i hyn. 961 00:52:16,000 --> 00:52:21,000 Nid wyf yn cofio erioed gael i wneud hyn yn unrhyw un o fy rhaglenni. 962 00:52:21,000 --> 00:52:24,000 Rhad ac am ddim yn ymddangos yn cyfeirio at cof, gan ryddhau cof, 963 00:52:24,000 --> 00:52:31,000 ond yr hyn y cof ydw i'n debyg rhyddhau yn y ddolen ar waelod y rhaglen hon? 964 00:52:31,000 --> 00:52:34,000 Mae'n edrych fel fy mod yn rhyddhau enw'r person 965 00:52:34,000 --> 00:52:37,000 a thŷ person, ond pam hynny? 966 00:52:37,000 --> 00:52:41,000 >> Mae'n troi allan yr holl wythnosau yr ydych wedi bod yn defnyddio GetString 967 00:52:41,000 --> 00:52:45,000 rydym wedi bod yn fath o gyflwyno a bug i mewn i bob un o'ch rhaglenni. 968 00:52:45,000 --> 00:52:51,000 GetString ar gof dylunio yn dyrannu fel y gall ddychwelyd i chi llinyn, 969 00:52:51,000 --> 00:52:55,000 Gall fel David, neu Rob, ac yna yn ei wneud beth bynnag yr ydych ei eisiau 970 00:52:55,000 --> 00:52:59,000 gyda'r llinyn yn eich rhaglen oherwydd ein bod wedi cadw'r cof i chi. 971 00:52:59,000 --> 00:53:02,000 Y broblem yw yr holl amser hwn bob tro y byddwch yn ffonio GetString 972 00:53:02,000 --> 00:53:05,000 ydym ni, yr awduron o GetString, wedi bod yn gofyn y system weithredu 973 00:53:05,000 --> 00:53:07,000 i roi ychydig o RAM ar gyfer y llinyn. 974 00:53:07,000 --> 00:53:09,000 Dyro i ni ychydig o RAM ar gyfer y llinyn nesaf. 975 00:53:09,000 --> 00:53:11,000 Dyro i ni RAM rhai yn fwy ar gyfer y llinyn nesaf. 976 00:53:11,000 --> 00:53:13,000 Beth allwch chi, y rhaglennydd, erioed wedi bod yn ei wneud 977 00:53:13,000 --> 00:53:15,000 yn rhoi i ni hynny yn ôl y cof, 978 00:53:15,000 --> 00:53:17,000 felly ar gyfer y nifer o wythnosau yr holl raglenni rydych wedi ysgrifennu 979 00:53:17,000 --> 00:53:20,000 wedi hyn a elwir yn naid cof lle maent yn parhau i ddefnyddio'r 980 00:53:20,000 --> 00:53:24,000 cof mwy a mwy bob tro y byddwch yn ffonio GetString, ac mae hynny'n iawn. 981 00:53:24,000 --> 00:53:27,000 Rydym yn fwriadol yn gwneud hynny yn ystod yr wythnosau cyntaf oherwydd nid yw bod yn ddiddorol 982 00:53:27,000 --> 00:53:29,000 i rhaid i chi boeni am ble y llinyn yn dod. 983 00:53:29,000 --> 00:53:34,000 Y cyfan sydd eisiau yw y gair Rob i ddod yn ôl pan fydd y defnyddiwr mathau ei ynddo 984 00:53:34,000 --> 00:53:38,000 >> Ond symud ymlaen gennym yn awr i ddechrau mynd yn fwy soffistigedig am hyn. 985 00:53:38,000 --> 00:53:42,000 Unrhyw amser yr ydym yn dyrannu cof yn well yn y pen draw roi yn ôl. 986 00:53:42,000 --> 00:53:45,000 Fel arall yn y byd go iawn ar eich Mac neu PC a allai fod gennych o bryd i'w gilydd profiadol 987 00:53:45,000 --> 00:53:50,000 symptomau lle mae eich cyfrifiadur wedi ei falu i ben yn y pen draw 988 00:53:50,000 --> 00:53:54,000 neu y bêl traeth nyddu dwp yn unig yw meddiannu'r cyfrifiadurol 989 00:53:54,000 --> 00:53:56,000 Ni all sylw cyfan ac rydych yn gwneud pethau. 990 00:53:56,000 --> 00:54:00,000 Gall hynny gael ei esbonio gan unrhyw nifer o chwilod, ond ymhlith y rhai bygiau posibl 991 00:54:00,000 --> 00:54:03,000 yn cael eu pethau o'r enw gollwng cof lle mae rhywun a ysgrifennodd y darn hwnnw o feddalwedd 992 00:54:03,000 --> 00:54:07,000 ydych yn ei ddefnyddio yn methu cofio i gof rhad ac am ddim 993 00:54:07,000 --> 00:54:10,000 ei fod ef neu hi ofyn i'r system gweithredu ar gyfer, 994 00:54:10,000 --> 00:54:14,000 peidio â defnyddio GetString, oherwydd dyna beth CS50, ond gan ddefnyddio swyddogaethau tebyg 995 00:54:14,000 --> 00:54:16,000 sy'n gofyn y system weithredu ar gyfer cof. 996 00:54:16,000 --> 00:54:19,000 Os ydych chi neu nhw sgriw i fyny ac i byth yn dychwelyd y cof 997 00:54:19,000 --> 00:54:24,000 yn symptom o all fod yn bod rhaglen yn arafu ac yn arafu ac yn arafu i lawr 998 00:54:24,000 --> 00:54:26,000 oni bai eich bod yn cofio ffonio am ddim. 999 00:54:26,000 --> 00:54:28,000 >> Byddwn yn dod yn ôl pryd a pham y byddech chi'n ffonio am ddim, 1000 00:54:28,000 --> 00:54:32,000 ond gadewch i ni fynd yn ei flaen yn unig ar gyfer mesur da ac yn ceisio rhedeg y rhaglen benodol hon. 1001 00:54:32,000 --> 00:54:35,000 Cafodd hyn ei enw structs1, rhowch. 1002 00:54:35,000 --> 00:54:40,000 Gadewch i mi fynd yn ei flaen ac yn rhedeg structs1, 123, David Mather, 1003 00:54:40,000 --> 00:54:47,000 456, Rob Kirkland, 789, 1004 00:54:47,000 --> 00:54:50,000 Tommy Mather, a gwelwn David yn Mather, Tommy yn Mather. 1005 00:54:50,000 --> 00:54:53,000 Mae hyn yn unig yw gwiriad pwyll fawr fod y rhaglen yn gweithio. 1006 00:54:53,000 --> 00:54:56,000 Yn awr, yn anffodus, mae'r rhaglen hon ychydig yn rhwystredig yn y 1007 00:54:56,000 --> 00:55:00,000 I ddim yn y gwaith hwnnw, yr wyf deipio mewn 9 llinynnau gwahanol, daro chofnoda, 1008 00:55:00,000 --> 00:55:04,000 Dywedwyd wrthyf a oedd yn Mather, ond yn amlwg yr wyf yn gwybod a oedd yn Mather eisoes oherwydd fy mod yn ei deipio. 1009 00:55:04,000 --> 00:55:07,000 Byddai'n braf o leiaf os yw'r rhaglen hon yn fwy fel cronfa ddata 1010 00:55:07,000 --> 00:55:10,000 ac mewn gwirionedd yn cofio hyn yr wyf wedi teipio mewn 1011 00:55:10,000 --> 00:55:12,000 erioed felly yr wyf unwaith eto rhaid i fewnbwn y cofnodion myfyrwyr. 1012 00:55:12,000 --> 00:55:15,000 Efallai ei fod yn debyg i system registrarial. 1013 00:55:15,000 --> 00:55:21,000 >> Gallwn wneud hyn drwy ddefnyddio y dechneg hon a elwir fel mewnbwn ffeil file I / O, ac allbwn, 1014 00:55:21,000 --> 00:55:24,000 ffordd gyffredinol iawn o ddweud unrhyw tro y byddwch eisiau darllen ffeiliau neu ysgrifennu ffeiliau 1015 00:55:24,000 --> 00:55:26,000 gallwch wneud hyn gyda set benodol o swyddogaethau. 1016 00:55:26,000 --> 00:55:29,000 Gadewch i mi fynd yn ei flaen ac yn agor y structs2.c enghraifft, 1017 00:55:29,000 --> 00:55:33,000 sydd bron yn union yr un fath, ond gadewch i ni weld hyn y mae'n ei wneud. 1018 00:55:33,000 --> 00:55:36,000 Ar ben y ffeil Yr wyf yn datgan dosbarth o fyfyrwyr. 1019 00:55:36,000 --> 00:55:38,000 Yna boblogi y dosbarth gyda mewnbwn y defnyddiwr, 1020 00:55:38,000 --> 00:55:41,000 felly mae'r llinellau o god yn union fel o'r blaen. 1021 00:55:41,000 --> 00:55:45,000 Yna, os wyf am symud i lawr yma i'n argraffu pawb sydd yn Mather fympwyol fel o'r blaen, 1022 00:55:45,000 --> 00:55:47,000 ond mae hyn yn nodwedd newydd diddorol. 1023 00:55:47,000 --> 00:55:51,000 Mae'r llinellau o god yn newydd, ac maent yn cyflwyno rhywbeth yma, 1024 00:55:51,000 --> 00:55:55,000 FFEIL, yr holl gapiau, ac mae wedi * i mewn yma hefyd. 1025 00:55:55,000 --> 00:55:58,000 Gadewch imi fwrw hyn dros yma, mae * dros yma yn ogystal. 1026 00:55:58,000 --> 00:56:00,000 >> Mae'r swyddogaeth nid ydym wedi gweld o'r blaen, fopen, 1027 00:56:00,000 --> 00:56:03,000 ond mae'n golygu ffeil agored, felly gadewch i ni sgimio trwy'r rhain, 1028 00:56:03,000 --> 00:56:05,000 ac mae hyn yn rhywbeth y byddwn yn dod yn ôl atynt yn psets yn y dyfodol, 1029 00:56:05,000 --> 00:56:10,000 ond mae hyn lein yma yn ei hanfod yn agor ffeil o'r enw cronfa ddata, 1030 00:56:10,000 --> 00:56:13,000 ac yn benodol yn agor yn y fath fodd fel y gellir gwneud yr hyn iddo? 1031 00:56:13,000 --> 00:56:15,000 [Anghlywadwy-myfyrwyr] 1032 00:56:15,000 --> 00:56:19,000 Iawn, felly "w" dim ond yn golygu ei fod yn dweud wrth y system weithredu 1033 00:56:19,000 --> 00:56:21,000 agor y ffeil yn y fath fodd y gallaf ysgrifennu ato. 1034 00:56:21,000 --> 00:56:23,000 Nid wyf am ei ddarllen. Nid wyf am i edrych ar y mater. 1035 00:56:23,000 --> 00:56:26,000 Rydw i eisiau newid ac ychwanegu pethau a allai fod iddo, 1036 00:56:26,000 --> 00:56:28,000 ac y ffeil yn mynd i gael ei alw gronfa ddata. 1037 00:56:28,000 --> 00:56:30,000 Gallai hyn gael ei alw yn ddim. 1038 00:56:30,000 --> 00:56:32,000 Gallai hyn fod yn database.txt. Gallai hyn fod. Db. 1039 00:56:32,000 --> 00:56:37,000 Gallai hyn fod yn air fel foo, ond yr wyf fympwyol dewis i enwi'r ffeil gronfa ddata. 1040 00:56:37,000 --> 00:56:42,000 Mae hwn yn wiriad bwyll bach y byddwn yn dod yn ôl ato yn fanwl iawn dros gyfnod o amser, 1041 00:56:42,000 --> 00:56:47,000 os fp, ar gyfer pwyntydd ffeil, nid yw'n NULL cyfartal sy'n golygu popeth yn iawn. 1042 00:56:47,000 --> 00:56:51,000 >> Stori hir yn fyr, swyddogaethau fel fopen weithiau yn methu. 1043 00:56:51,000 --> 00:56:53,000 Efallai nad yw'r ffeil yn bodoli. Efallai eich bod allan o le disg. 1044 00:56:53,000 --> 00:56:55,000 Efallai nad oes gennych ganiatâd i fod folder, 1045 00:56:55,000 --> 00:56:58,000 felly os fopen yn dychwelyd rhywbeth null ddigwyddodd drwg. 1046 00:56:58,000 --> 00:57:02,000 I'r gwrthwyneb, os nad fopen yn dychwelyd null popeth yn iawn 1047 00:57:02,000 --> 00:57:04,000 a gallaf ddechrau ysgrifennu at y ffeil hon. 1048 00:57:04,000 --> 00:57:06,000 Dyma dric newydd. 1049 00:57:06,000 --> 00:57:08,000 Mae hwn yn ddolen ar gyfer sydd wedi ailadrodd dros bob un o fy myfyrwyr, 1050 00:57:08,000 --> 00:57:10,000 ac mae hyn yn edrych mor debyg i'r hyn yr ydym wedi'i wneud o'r blaen, 1051 00:57:10,000 --> 00:57:15,000 ond mae swyddogaeth hon yn gefnder o'r hyn a elwir printf fprintf gyfer ffeil printf, 1052 00:57:15,000 --> 00:57:18,000 ac yn sylwi ei fod yn wahanol mewn dim ond 2 ffordd. 1053 00:57:18,000 --> 00:57:20,000 Un, mae'n dechrau gyda f hytrach na p, 1054 00:57:20,000 --> 00:57:23,000 ond yna ei ddadl gyntaf yn ymddangos yn beth? 1055 00:57:23,000 --> 00:57:25,000 [Mae myfyrwyr yn] Ffeil. >> Mae'n ffeil. 1056 00:57:25,000 --> 00:57:30,000 Mae hyn yn beth a elwir yn fp, y byddwn yn y pen draw canfod ar wahân yr hyn y pwyntydd ffeil yw, 1057 00:57:30,000 --> 00:57:35,000 ond am nawr fp yn syml yn cynrychioli'r ffeil fy mod wedi agor, 1058 00:57:35,000 --> 00:57:41,000 felly dyma fprintf yn ei ddweud argraffu ID y defnyddiwr at y ffeil, ac nid i'r sgrin. 1059 00:57:41,000 --> 00:57:44,000 Printiwch enw'r defnyddiwr at y ffeil, nid at y sgrîn, 1060 00:57:44,000 --> 00:57:47,000 y tŷ at y ffeil, nid at y sgrin, ac yna i lawr yma, yn amlwg, 1061 00:57:47,000 --> 00:57:50,000 cau'r ffeil, ac yna i lawr yma heb y cof. 1062 00:57:50,000 --> 00:57:53,000 >> Yr unig wahaniaeth rhwng y fersiwn 2 a fersiwn 1 1063 00:57:53,000 --> 00:57:58,000 yw cyflwyno fopen ac mae hyn yn FFEIL gyda * 1064 00:57:58,000 --> 00:58:01,000 ac mae hyn yn syniad o fprintf, felly gadewch i ni weld beth oedd y canlyniad terfynol yn. 1065 00:58:01,000 --> 00:58:03,000 Gadewch i mi fynd i mewn i fy ffenestr terfynell. 1066 00:58:03,000 --> 00:58:06,000 Gadewch i mi redeg structs2, rhowch. 1067 00:58:06,000 --> 00:58:09,000 Edrych fel popeth yn iawn. Gadewch i ailgynnal structs2. 1068 00:58:09,000 --> 00:58:15,000 123, David Mather, 456, Rob Kirkland, 1069 00:58:15,000 --> 00:58:19,000 789, Tommy Mather, rhowch. 1070 00:58:19,000 --> 00:58:23,000 Edrych fel ei fod yn ymddwyn yr un fath, ond os wyf yn awr yn gwneud ls 1071 00:58:23,000 --> 00:58:28,000 sylwi ar yr hyn ffeil mewn yma ymysg fy holl cod, cronfa ddata, 1072 00:58:28,000 --> 00:58:32,000 felly gadewch i ni agor y, gedit o gronfa ddata, ac yn edrych ar hynny. 1073 00:58:32,000 --> 00:58:34,000 Nid yw'r sexiest o fformatau ffeil. 1074 00:58:34,000 --> 00:58:38,000 Mae wir yn un darn o linell data fesul llinell fesul llinell, 1075 00:58:38,000 --> 00:58:42,000 ond y rhai ohonoch sy'n defnyddio ffeiliau Excel neu CSV, coma gwahanu gwerthoedd, 1076 00:58:42,000 --> 00:58:47,000 Gallwn yn sicr wedi defnyddio fprintf i yn lle hynny efallai yn gwneud rhywbeth fel hyn 1077 00:58:47,000 --> 00:58:50,000 er mwyn i mi mewn gwirionedd yn creu yr hyn sy'n cyfateb o ffeil Excel 1078 00:58:50,000 --> 00:58:53,000 trwy wahanu pethau gyda nid coma, dim ond llinellau newydd. 1079 00:58:53,000 --> 00:58:56,000 >> Yn yr achos hwn os ydw i wedi eu defnyddio yn lle coma yn hytrach na llinellau newydd 1080 00:58:56,000 --> 00:59:01,000 Gallai wyf yn llythrennol agor y ffeil gronfa ddata yn Excel os byddaf yn hytrach yn ei gwneud yn edrych fel hyn. 1081 00:59:01,000 --> 00:59:03,000 Yn fyr, gan fod gennym y pŵer i ysgrifennu at ffeiliau 1082 00:59:03,000 --> 00:59:07,000 gallwn yn awr ddechrau data parhaus, gan ei gadw o gwmpas ar y ddisg 1083 00:59:07,000 --> 00:59:10,000 fel y gallwn gadw gwybodaeth o gwmpas eto ac eto. 1084 00:59:10,000 --> 00:59:14,000 Hysbysiad un neu ddau o bethau eraill sydd bellach ychydig yn fwy cyfarwydd. 1085 00:59:14,000 --> 00:59:16,000 Ar frig y ffeil C gennym typedef 1086 00:59:16,000 --> 00:59:21,000 oherwydd ein bod yn awyddus i greu math data sy'n cynrychioli gair, 1087 00:59:21,000 --> 00:59:25,000 felly y math hwn yw'r enw ar air, ac y tu mewn y strwythur hwn 1088 00:59:25,000 --> 00:59:27,000 mae ychydig yn fwy ffansi yn awr. 1089 00:59:27,000 --> 00:59:30,000 Pam mae gair cynnwys pob golwg arae? 1090 00:59:30,000 --> 00:59:33,000 Beth yw gair yn unig reddfol? 1091 00:59:33,000 --> 00:59:35,000 >> Mae'n amrywiaeth o gymeriadau. 1092 00:59:35,000 --> 00:59:37,000 Mae'n cyfres o gymeriadau cefn wrth gefn wrth gefn. 1093 00:59:37,000 --> 00:59:41,000 LLYTHRENNAU ym mhob gapiau yn digwydd i fod yn fympwyol rydym yn dweud uchafswm hyd 1094 00:59:41,000 --> 00:59:44,000 o unrhyw air yn y geiriadur ein bod yn ei ddefnyddio ar gyfer Scramble. 1095 00:59:44,000 --> 00:59:46,000 Pam ydw i'n cael 1? 1096 00:59:46,000 --> 00:59:48,000 Mae cymeriad nwl. 1097 00:59:48,000 --> 00:59:51,000 Dwyn i gof pan wnaethom yr enghraifft Bananagrams rydym angen werth arbennig 1098 00:59:51,000 --> 00:59:55,000 ar ddiwedd y gair er mwyn cadw golwg ar 1099 00:59:55,000 --> 00:59:59,000 o ble geiriau a ddaeth i ben mewn gwirionedd, ac fel y broblem manyleb set yn dweud 1100 00:59:59,000 --> 01:00:03,000 yma rydym ni'n cysylltu â gair rhoi gwerth boolean, 1101 01:00:03,000 --> 01:00:05,000 baner, fel petai, yn wir neu'n anwir. 1102 01:00:05,000 --> 01:00:09,000 Ydych chi wedi dod o hyd y gair hwn yn barod, oherwydd rydym yn sylweddoli 1103 01:00:09,000 --> 01:00:13,000 mae gwir angen ffordd o gofio nid yn unig beth yw gair yn Scramble 1104 01:00:13,000 --> 01:00:15,000 ond pa un a fyddwch chi, y dynol, wedi ei chael yn 1105 01:00:15,000 --> 01:00:20,000 felly os ydych yn dod o hyd i'r gair "y" nad ydych yn gallu jyst deipio y, fynd i mewn, y, rhowch, y, rhowch 1106 01:00:20,000 --> 01:00:23,000 ac yn cael 3 pwynt, 3 pwynt, 3 pwynt, 3 phwynt. 1107 01:00:23,000 --> 01:00:26,000 Rydym am fod yn gallu rhestr ddu y gair hwnnw drwy osod bool 1108 01:00:26,000 --> 01:00:29,000 yn wir os ydych chi wedi dod o hyd eisoes, ac felly dyna pam ein bod 1109 01:00:29,000 --> 01:00:31,000 crynhoi yn y strwythur hwn. 1110 01:00:31,000 --> 01:00:35,000 >> Yn awr, i lawr yma yn Scramble mae hwn yn strwythur eraill o'r enw geiriadur. 1111 01:00:35,000 --> 01:00:39,000 Absennol yma yw'r gair typedef oherwydd yn yr achos hwn 1112 01:00:39,000 --> 01:00:43,000 angen i ni grynhoi y syniad o eiriadur, 1113 01:00:43,000 --> 01:00:46,000 a geiriadur yn cynnwys criw cyfan o eiriau, 1114 01:00:46,000 --> 01:00:49,000 awgrymir gan y array, a faint o'r geiriau hynny sydd ar gael? 1115 01:00:49,000 --> 01:00:51,000 Wel, beth bynnag maint hwn a elwir yn amrywiol yn ei ddweud. 1116 01:00:51,000 --> 01:00:53,000 Ond rydym yn unig angen un geiriadur. 1117 01:00:53,000 --> 01:00:55,000 Nid oes angen math ddata o'r enw geiriadur. 1118 01:00:55,000 --> 01:00:58,000 Rydym yn unig angen un ohonynt, felly mae'n troi allan yn C 1119 01:00:58,000 --> 01:01:03,000 os nad ydych yn ei ddweud typedef, 'ch jyst yn dweud strwythur, yna y tu mewn i'r braces cyrliog 1120 01:01:03,000 --> 01:01:05,000 byddwch yn rhoi eich newidynnau, yna rydych yn rhoi'r enw. 1121 01:01:05,000 --> 01:01:09,000 Mae hyn yn datgan 1 geiriadur a elwir yn amrywiol 1122 01:01:09,000 --> 01:01:11,000 sy'n edrych fel hyn. 1123 01:01:11,000 --> 01:01:16,000 Ar y llaw arall, y llinellau hyn yn creu strwythur data y gellir eu hailddefnyddio a elwir yn air 1124 01:01:16,000 --> 01:01:19,000 y gallwch greu copïau lluosog o, yn union fel rydym yn creu 1125 01:01:19,000 --> 01:01:22,000 copïau lluosog o fyfyrwyr. 1126 01:01:22,000 --> 01:01:24,000 >> Beth mae hyn yn y pen draw yn caniatáu i ni ei wneud? 1127 01:01:24,000 --> 01:01:30,000 Gadewch i mi fynd yn ôl i mewn i, gadewch i ni ddweud, yn enghraifft symlach o amseroedd symlach, 1128 01:01:30,000 --> 01:01:34,000 a gadewch i mi agor i fyny, gadewch i ni ddweud, compare1.c. 1129 01:01:34,000 --> 01:01:38,000 Y broblem yma wrth law yw mewn gwirionedd croen yn ôl 1130 01:01:38,000 --> 01:01:41,000 yr haen o linyn a dechrau cymryd oddi ar y olwynion hyfforddiant 1131 01:01:41,000 --> 01:01:44,000 oherwydd ei fod yn troi allan y llinyn yr holl amser hwn 1132 01:01:44,000 --> 01:01:47,000 yn ôl ein haddewid yn wythnos 1 gwirionedd dim ond llysenw, 1133 01:01:47,000 --> 01:01:51,000 gyfystyr o'r llyfrgell CS50 am rywbeth sy'n edrych ychydig yn fwy cryptig, 1134 01:01:51,000 --> 01:01:53,000 * torgoch, ac rydym wedi gweld y seren o'r blaen. 1135 01:01:53,000 --> 01:01:55,000 Rydym yn ei weld yng nghyd-destun ffeiliau. 1136 01:01:55,000 --> 01:01:59,000 >> Gadewch i ni yn awr yn gweld pam yr ydym wedi bod yn cuddio manylion hyn ers peth amser bellach. 1137 01:01:59,000 --> 01:02:02,000 Dyma ffeil o'r enw compare1.c, 1138 01:02:02,000 --> 01:02:07,000 ac mae'n debyg yn gofyn i'r defnyddiwr ar gyfer 2 llinynnau, sa t, 1139 01:02:07,000 --> 01:02:11,000 ac yna mae'n ceisio cymharu rhai llinynnau ar gyfer cydraddoldeb yn llinell 26, 1140 01:02:11,000 --> 01:02:14,000 ac os ydynt yn gyfartal mae'n ei ddweud, "Rydych deipio yr un peth," 1141 01:02:14,000 --> 01:02:17,000 ac os nad ydynt yn gyfartal ei fod yn dweud, "Rydych deipio pethau gwahanol." 1142 01:02:17,000 --> 01:02:19,000 Gadewch i mi fynd yn ei flaen ac yn rhedeg y rhaglen hon. 1143 01:02:19,000 --> 01:02:23,000 Gadewch i mi fynd i mewn i fy cyfeiriadur ffynhonnell, yn gwneud compare1. Mae'n llunio iawn. 1144 01:02:23,000 --> 01:02:25,000 Gadewch i mi redeg compare1. 1145 01:02:25,000 --> 01:02:27,000 'N annhymerus' chwyddo i mewn, mynd i mewn. 1146 01:02:27,000 --> 01:02:29,000 Dweud rhywbeth. HELO. 1147 01:02:29,000 --> 01:02:32,000 Byddaf yn dweud rhywbeth eto. HELO. 1148 01:02:32,000 --> 01:02:34,000 Nid wyf yn sicr ddim yn teipio pethau gwahanol. 1149 01:02:34,000 --> 01:02:37,000 >> Gadewch i mi roi cynnig ar hyn eto. IS-DDEDDFAU. 1150 01:02:37,000 --> 01:02:40,000 Yn bendant nid wahanol, felly beth sy'n mynd ymlaen yma? 1151 01:02:40,000 --> 01:02:44,000 Wel, hyn sydd mewn gwirionedd yn cael ei gymharu yn llinell 26? 1152 01:02:44,000 --> 01:02:46,000 [Anghlywadwy-myfyrwyr] 1153 01:02:46,000 --> 01:02:49,000 Ie, felly mae'n troi allan y llinyn, data math, yn fath o gelwydd gwyn. 1154 01:02:49,000 --> 01:02:53,000 Mae llinyn yw * torgoch, ond beth yw * torgoch? 1155 01:02:53,000 --> 01:02:56,000 A * torgoch, fel maen nhw'n dweud, yn pwyntydd, 1156 01:02:56,000 --> 01:03:00,000 ac mae pwyntydd yn effeithiol gyfeiriad, 1157 01:03:00,000 --> 01:03:05,000 lleoliad swm yn y cof, ac os ydych yn digwydd i fod wedi ei deipio mewn gair fel HELO, 1158 01:03:05,000 --> 01:03:08,000 cofio o drafodaethau yn y gorffennol o dannau 1159 01:03:08,000 --> 01:03:16,000 mae hyn yn debyg i'r gair HELO. 1160 01:03:16,000 --> 01:03:19,000 Cofiwch y gall gair fel HELO yn cael eu cynrychioli 1161 01:03:19,000 --> 01:03:22,000 fel amrywiaeth o gymeriadau fel hyn 1162 01:03:22,000 --> 01:03:25,000 ac yna gyda chymeriad arbennig ar ddiwedd enw cymeriad null, 1163 01:03:25,000 --> 01:03:27,000 fel y dynodi \. 1164 01:03:27,000 --> 01:03:29,000 Beth yw mewn gwirionedd yn llinyn? 1165 01:03:29,000 --> 01:03:32,000 Sylwch fod hyn yn darnau lluosog o gof, 1166 01:03:32,000 --> 01:03:36,000 ac yn wir, y diwedd ei bod yn hysbys yn unig ar ôl i chi edrych drwy'r llinyn cyfan 1167 01:03:36,000 --> 01:03:38,000 chwilio am y cymeriad null arbennig. 1168 01:03:38,000 --> 01:03:41,000 Ond os yw hyn yn dalp o gof ar y cof fy cyfrifiadur, 1169 01:03:41,000 --> 01:03:44,000 gadewch i ni fympwyol dweud bod y llinyn yn unig got 'n ffodus, 1170 01:03:44,000 --> 01:03:47,000 ac iddo gael ei osod ar y dechrau o RAM fy cyfrifiadur. 1171 01:03:47,000 --> 01:03:54,000 Mae hyn yn beit 0, 1, 2, 3, 4, 5, 6 ... 1172 01:03:54,000 --> 01:04:02,000 >> Pan fyddaf yn dweud rhywbeth fel GetString ac yr wyf yn ei wneud llinyn s = GetString 1173 01:04:02,000 --> 01:04:04,000 hyn mewn gwirionedd yn cael eu dychwelyd? 1174 01:04:04,000 --> 01:04:08,000 Am yr wythnosau diwethaf, yr hyn mewn gwirionedd yn cael ei storio mewn s 1175 01:04:08,000 --> 01:04:13,000 yw nad yw hyn llinyn per se, ond yn yr achos hwn yr hyn sy'n cael ei storio yn 1176 01:04:13,000 --> 01:04:18,000 rhwng 0 a nifer oherwydd bod yr hyn GetString yn ei wneud 1177 01:04:18,000 --> 01:04:20,000 yn nad yw'n gorfforol dychwelyd llinyn. 1178 01:04:20,000 --> 01:04:22,000 Nid yw hynny'n hyd yn oed yn gwneud synnwyr mewn gwirionedd cysyniadol. 1179 01:04:22,000 --> 01:04:24,000 Beth mae'n ei wneud elw yn rhif. 1180 01:04:24,000 --> 01:04:28,000 Mae'r nifer yn y cyfeiriad HELO er cof, 1181 01:04:28,000 --> 01:04:32,000 a llinyn s yna, os ydym croen hwn yn ôl haen, nid llinyn yn bodoli mewn gwirionedd. 1182 01:04:32,000 --> 01:04:35,000 Dim ond yn symleiddio yn y llyfrgell CS50. 1183 01:04:35,000 --> 01:04:38,000 >> Hyn yn wir yn rhywbeth o'r enw * torgoch. 1184 01:04:38,000 --> 01:04:41,000 Char yn gwneud synnwyr oherwydd beth gair, fel HELO? 1185 01:04:41,000 --> 01:04:44,000 Wel, mae'n gyfres o chars, cyfres o gymeriadau. 1186 01:04:44,000 --> 01:04:47,000 * Char yw'r cyfeiriad o gymeriad, 1187 01:04:47,000 --> 01:04:50,000 felly beth mae'n ei olygu i ddychwelyd llinyn? 1188 01:04:50,000 --> 01:04:53,000 Mae 'n glws, ffordd syml o ddychwelyd llinyn 1189 01:04:53,000 --> 01:04:57,000 yn hytrach na cheisio at chyfrif i maes sut yr wyf yn dychwelyd i 5 neu 6 bytes gwahanol 1190 01:04:57,000 --> 01:05:01,000 gadewch i mi ddychwelyd i'r cyfeiriad y mae beit? 1191 01:05:01,000 --> 01:05:03,000 Mae'r un cyntaf. 1192 01:05:03,000 --> 01:05:06,000 Mewn geiriau eraill, gadewch i mi roi cyfeiriad cymeriad mewn cof. 1193 01:05:06,000 --> 01:05:10,000 Dyna beth * torgoch yn cynrychioli, y cyfeiriad o un cymeriad unigol mewn cof. 1194 01:05:10,000 --> 01:05:12,000 Ffoniwch y s amrywiol. 1195 01:05:12,000 --> 01:05:15,000 Storiwch mewn s yn y cyfeiriad hwnnw, yr wyf yn fympwyol ddweud yw 0, 1196 01:05:15,000 --> 01:05:19,000 dim ond er mwyn cadw pethau'n syml, ond mewn gwirionedd mae'n gyffredinol mae nifer mwy. 1197 01:05:19,000 --> 01:05:21,000 >> Arhoswch funud. 1198 01:05:21,000 --> 01:05:23,000 Os ydych yn unig yn rhoi i mi y cyfeiriad y nod cyntaf, sut ydw i'n gwybod beth yw'r cyfeiriad yw 1199 01:05:23,000 --> 01:05:25,000 o gymeriad ail, y trydydd, y pedwerydd a'r pumed? 1200 01:05:25,000 --> 01:05:27,000 [Anghlywadwy-myfyrwyr] 1201 01:05:27,000 --> 01:05:31,000 Dim ond yn gwybod lle mae'r ddiwedd y llinyn yw drwy wneud y gamp 'n hylaw, 1202 01:05:31,000 --> 01:05:35,000 felly pan fyddwch yn defnyddio rhywbeth fel printf, beth printf llythrennol yn cymryd fel ei ddadl, 1203 01:05:35,000 --> 01:05:39,000 cofio ein bod yn defnyddio dalfan y% s, ac yna byddwch yn mynd heibio yn 1204 01:05:39,000 --> 01:05:41,000 y newidyn sydd ei storio llinyn. 1205 01:05:41,000 --> 01:05:47,000 Beth ydych chi'n wirioneddol basio yw cyfeiriad y nod cyntaf y llinyn. 1206 01:05:47,000 --> 01:05:50,000 Printf wedyn yn defnyddio dolen i neu ddolen tra ar dderbyn y cyfeiriad, 1207 01:05:50,000 --> 01:05:53,000 er enghraifft, 0, felly gadewch i mi wneud hyn yn awr, 1208 01:05:53,000 --> 01:06:02,000 printf ("% s \ n," s); 1209 01:06:02,000 --> 01:06:07,000 Pan fyddaf yn galw printf ("% s \ n," s); hyn yr wyf i'n rhoi printf gyda 1210 01:06:07,000 --> 01:06:13,000 yw cyfeiriad y cymeriad cyntaf yn s, sef yn yr achos mympwyol yw H. 1211 01:06:13,000 --> 01:06:16,000 >> Sut mae printf yn gwybod beth yn union i'w arddangos ar y sgrin? 1212 01:06:16,000 --> 01:06:19,000 Y person sy'n gweithredu ar waith printf dolen gyfnod, neu a ar gyfer dolen 1213 01:06:19,000 --> 01:06:23,000 sy'n dweud y mae hyn yn cyfateb i'r cymeriad cymeriad null arbennig? 1214 01:06:23,000 --> 01:06:25,000 Os nad yw, ei hargraffu. Beth am yr un yma? 1215 01:06:25,000 --> 01:06:28,000 Os nad yw ei hargraffu, ei hargraffu, ei hargraffu, ei hargraffu. 1216 01:06:28,000 --> 01:06:32,000 O, mae hyn mae un yn arbennig. Stop argraffu a dychwelyd i'r defnyddiwr. 1217 01:06:32,000 --> 01:06:35,000 A dyna llythrennol cyfan sydd wedi bod yn digwydd o dan y cwfl, 1218 01:06:35,000 --> 01:06:38,000 ac mae hynny'n llawer i'w dreulio yn y diwrnod cyntaf o ddosbarth, 1219 01:06:38,000 --> 01:06:43,000 ond am nawr mae'n wir y bloc adeiladu popeth dealltwriaeth 1220 01:06:43,000 --> 01:06:46,000 sydd wedi bod yn digwydd y tu mewn o gof ein cyfrifiadur, 1221 01:06:46,000 --> 01:06:49,000 ac yn y diwedd byddwn yn ymhelaethu ar wahân gydag ychydig o help 1222 01:06:49,000 --> 01:06:51,000 gan un o'n ffrindiau yn Stanford. 1223 01:06:51,000 --> 01:06:56,000 >> Yr Athro Nick Parlante yn Stanford wedi gwneud hyn dilyniant fideo gwych 1224 01:06:56,000 --> 01:06:58,000 o bob math o ieithoedd gwahanol sydd wedi cyflwyno 1225 01:06:58,000 --> 01:07:00,000 y Binky animeiddio clai cymeriad bach. 1226 01:07:00,000 --> 01:07:03,000 Mae llais ydych chi ar fin i glywed mewn dim ond cipolwg ail ychydig 1227 01:07:03,000 --> 01:07:05,000 yw bod yn athro Stanford, a ydych yn cael 1228 01:07:05,000 --> 01:07:07,000 dim ond 5 neu 6 eiliad yr hawl hon yn awr, 1229 01:07:07,000 --> 01:07:09,000 ond mae hyn yn y nodyn ar y byddwn yn dod i'r casgliad heddiw 1230 01:07:09,000 --> 01:07:11,000 a dechrau ddydd Mercher. 1231 01:07:11,000 --> 01:07:15,000 Yr wyf yn rhoi i chi Hwyl Pointer gyda Binky, y rhagolwg. 1232 01:07:15,000 --> 01:07:18,000 [♪ Cerddoriaeth ♪] [Athro Parlante] Hey, Binky. 1233 01:07:18,000 --> 01:07:21,000 Wake i fyny. Mae'n amser ar gyfer hwyl pwyntydd. 1234 01:07:21,000 --> 01:07:24,000 [Binky] Beth sy'n bod? Dysgu am awgrymiadau? 1235 01:07:24,000 --> 01:07:26,000 O, anrhegion! 1236 01:07:26,000 --> 01:07:29,000 >> Byddwn yn eich gweld ar ddydd Mercher. 1237 01:07:29,000 --> 01:07:32,000 [CS50.TV]