1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [Speel van musiek] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 David J. Malan Alle regte. 5 00:00:12,230 --> 00:00:16,440 Dit is CS50, en dit is die einde van die week 2. 6 00:00:16,440 --> 00:00:18,480 So vandag, ons gaan ons kyk om voort te gaan 7 00:00:18,480 --> 00:00:21,150 hoe ons dinge voorstel onder die hood-- weg te beweeg 8 00:00:21,150 --> 00:00:23,520 van getalle soos heelgetalle en swaai punt waardes 9 00:00:23,520 --> 00:00:26,810 en fokus op stringe en uiteindelik meer interessante programme. 10 00:00:26,810 --> 00:00:30,140 Maar ons sal ook 'n blik op 'n paar domein spesifieke problems-- 11 00:00:30,140 --> 00:00:33,620 die eerste van wat sal wees wat kriptografie 12 00:00:33,620 --> 00:00:36,570 die kuns van skommeling inligting in wat jy sien, hier bo 13 00:00:36,570 --> 00:00:41,480 is 'n foto van Radio Orphan Annie se geheime dekodeerder ring van weleer. 14 00:00:41,480 --> 00:00:46,490 >> Dit is eintlik baie primitief vorm en kind-vriendelike vorm van cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 waardeur hierdie ring het twee disks-- een binne en een buite. 16 00:00:50,590 --> 00:00:54,740 En by die draai van een van daardie, jy kan wese line-up briewe soos 'n 17 00:00:54,740 --> 00:00:59,520 deur Z met ander letters soos B deur A. Met ander woorde, 18 00:00:59,520 --> 00:01:03,730 jy kan letterlik draai die alfabet, daardeur te kom met 'n afbeelding van 19 00:01:03,730 --> 00:01:07,820 briewe aan letters so dat, as jy wou 'n geheime boodskap te stuur 20 00:01:07,820 --> 00:01:11,820 iemand soos Annie, jy kan skryf down jou boodskap en dan draai 21 00:01:11,820 --> 00:01:15,370 die letters, waardeur, as jy bedoel om te sê "A," jy plaas sê "B" 22 00:01:15,370 --> 00:01:17,280 jy bedoel om te sê "B" jy plaas sê "C" - 23 00:01:17,280 --> 00:01:20,240 of iets 'n bietjie meer slim as that-- en dan, uiteindelik, 24 00:01:20,240 --> 00:01:24,630 so lank as Annie het hierdie dekodeerder ring, kan sy die boodskap ontsyfer. 25 00:01:24,630 --> 00:01:28,540 Nou, kan jy onthou, in die feit dat hierdie is gebruik in 'n baie bekende film wat 26 00:01:28,540 --> 00:01:31,140 speel ad nauseum gedurende die Kersseisoen. 27 00:01:31,140 --> 00:01:32,650 Kom ons neem 'n blik hier. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 RALPHIE PARKER: "Wees dit aan almal in opsomming bekend 30 00:01:37,210 --> 00:01:41,000 wat Ralph Parker, word benoem 'n lid van die Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Circle en is geregtig op al die honneurs en voordele voorkom daaraan. " 32 00:01:44,860 --> 00:01:47,410 >> RALPHIE PARKER (narrating): Onderteken Little Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Onderteken, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 In ink. 35 00:01:51,490 --> 00:01:55,494 Honneurs en voordele, reeds op die ouderdom van nege. 36 00:01:55,494 --> 00:01:57,402 >> [Speel van musiek] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO BABBELBUS] 38 00:02:00,470 --> 00:02:01,470 RALPHIE PARKER: Kom op. 39 00:02:01,470 --> 00:02:02,344 Kom ons gaan met dit. 40 00:02:02,344 --> 00:02:06,029 Ek alles wat jazz hoef nie oor smokkelaars en Pirates. 41 00:02:06,029 --> 00:02:08,820 Omroeper: Luister môre nag vir die sluiting van avontuur 42 00:02:08,820 --> 00:02:11,060 van The Black seerower skip. 43 00:02:11,060 --> 00:02:14,740 Nou is dit tyd vir Annie se Geheime boodskap vir jou lede 44 00:02:14,740 --> 00:02:17,110 van die Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Onthou kinders, net lede Annie se Secret Circle 46 00:02:20,700 --> 00:02:23,270 Annie se geheime boodskap ontsyfer. 47 00:02:23,270 --> 00:02:27,270 >> Onthou, Annie, afhangende van jou. 48 00:02:27,270 --> 00:02:30,060 Stel jou penne B-2. 49 00:02:30,060 --> 00:02:34,004 Hier is die message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 RALPHIE PARKER (narrating): Ek is in my eerste geheime vergadering. 51 00:02:36,503 --> 00:02:40,041 Omroeper: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 RALPHIE PARKER (narrating): O, Pierre was in 'n groot stem vanaand. 53 00:02:42,790 --> 00:02:46,110 Ek kon vertel dat vanaand se boodskap was werklik belangrik is. 54 00:02:46,110 --> 00:02:47,930 >> Omroeper: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Dit is 'n boodskap van Annie haarself. 56 00:02:49,940 --> 00:02:52,182 Onthou, nie vir enigiemand vertel. 57 00:02:52,182 --> 00:02:55,077 >> [Hyg] 58 00:02:55,077 --> 00:02:57,285 RALPHIE PARKER (narrating): Negentig sekondes later, is ek 59 00:02:57,285 --> 00:03:00,090 in die enigste plek in die huis waar 'n seuntjie van nege 60 00:03:00,090 --> 00:03:04,380 kon sit in privaatheid en dekodeer. 61 00:03:04,380 --> 00:03:04,990 Ag. 62 00:03:04,990 --> 00:03:05,680 "B." 63 00:03:05,680 --> 00:03:06,524 >> [Lag] 64 00:03:06,524 --> 00:03:08,684 >> RALPHIE PARKER (narrating): Ek het na die volgende. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 Die eerste woord is "wees." 67 00:03:11,641 --> 00:03:12,140 Ja! 68 00:03:12,140 --> 00:03:14,293 Dit kom makliker nou. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Lag] 71 00:03:16,225 --> 00:03:18,157 >> Randy PARKER: Ag, kom op, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Ek moet gaan! 73 00:03:19,606 --> 00:03:21,538 >> RALPHIE PARKER: Ek kom gou af wees, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee gefluit. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Maak seker dat jy te. "" Maak seker dat jy "wat? 77 00:03:31,220 --> 00:03:33,981 Wat was Little Orphan Annie probeer om te sê? "Maak seker dat jy" wat? 78 00:03:33,981 --> 00:03:35,522 MOEDER: Ralphie het Randy het om te gaan. 79 00:03:35,522 --> 00:03:36,735 Sal jy asseblief kom uit? 80 00:03:36,735 --> 00:03:38,190 >> RALPHIE PARKER: Alle reg, Ma! 81 00:03:38,190 --> 00:03:39,787 Ek sal reg uit te wees! 82 00:03:39,787 --> 00:03:41,995 RALPHIE PARKER (narrating): Ek is nou nader om. 83 00:03:41,995 --> 00:03:43,370 Die spanning was verskriklik. 84 00:03:43,370 --> 00:03:44,794 Wat was dit? 85 00:03:44,794 --> 00:03:47,656 Die lot van die planeet mag in die weegskaal hang. 86 00:03:47,656 --> 00:03:50,518 >> MOEDER: Ralphie, Randy se het om te gaan! 87 00:03:50,518 --> 00:03:53,635 >> RALPHIE PARKER: Ek sal reg wees , vir huil hardop! 88 00:03:53,635 --> 00:03:55,343 RALPHIE PARKER (Narrating): Amper daar! 89 00:03:55,343 --> 00:03:56,520 My vingers vlieg! 90 00:03:56,520 --> 00:03:58,500 My gedagte was 'n staal trap. 91 00:03:58,500 --> 00:03:59,850 Elke porie vibreer. 92 00:03:59,850 --> 00:04:01,806 Dit was amper duidelik! 93 00:04:01,806 --> 00:04:02,773 Ja! 94 00:04:02,773 --> 00:04:03,273 Ja! 95 00:04:03,273 --> 00:04:03,773 Ja! 96 00:04:03,773 --> 00:04:04,740 Ja! 97 00:04:04,740 --> 00:04:10,250 >> RALPHIE PARKER: "Maak seker dat jy jou Ovaltine te drink. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 'N morsige kommersiële? 101 00:04:17,539 --> 00:04:19,439 >> [Speel van musiek] 102 00:04:19,439 --> 00:04:21,724 >> RALPHIE PARKER: Seun van 'n teef. 103 00:04:21,724 --> 00:04:23,460 >> [ROOIBORSDUIFIE] 104 00:04:23,460 --> 00:04:27,070 >> David J. Malan So wat dan 'n blik op wat kriptografie 105 00:04:27,070 --> 00:04:29,880 kan wees vir 'n this-- drink uit die verlede. 106 00:04:29,880 --> 00:04:30,900 So 'n vinnige aankondiging. 107 00:04:30,900 --> 00:04:33,410 As jy is vry om hierdie Vrydag om 13:15 en sal 108 00:04:33,410 --> 00:04:36,610 wil ons aan te sluit vir CS50 middagete, kop na hierdie URL hier. 109 00:04:36,610 --> 00:04:38,080 Eerste kom, eerste dien as gewoonlik. 110 00:04:38,080 --> 00:04:41,840 Maar met verloop van tyd, sal ons seker maak dat maak meeste enigiemand wat wil deelneem 111 00:04:41,840 --> 00:04:43,640 kan skeduleer-wyse. 112 00:04:43,640 --> 00:04:45,170 >> So snare. 113 00:04:45,170 --> 00:04:47,940 Ons het Zamyla-- wie jy het nou met waarskynlik 114 00:04:47,940 --> 00:04:50,750 in Probleem Stel 1-- wie se naam word dus gespel. 115 00:04:50,750 --> 00:04:53,570 En dink jy haar naam getik in 'n rekenaar program wat 116 00:04:53,570 --> 00:04:55,710 gebruik iets soos getString. 117 00:04:55,710 --> 00:04:57,890 Ten einde te haal diegene toetsaanslagen, hoe 118 00:04:57,890 --> 00:05:01,620 gaan ons oor wat 'n string, 'n woord, 'n lid, 119 00:05:01,620 --> 00:05:03,960 of verskeie briewe soos hierdie hier? 120 00:05:03,960 --> 00:05:06,790 >> Ons het gepraat oor die laaste keer heelgetalle en probleme 121 00:05:06,790 --> 00:05:09,960 wat ontstaan ​​met heelgetal oorloop en swaai punt waardes 122 00:05:09,960 --> 00:05:12,190 en probleme wat ontstaan ​​binne presisie. 123 00:05:12,190 --> 00:05:16,080 Met snare, ons ten minste het 'n bietjie meer buigsaamheid 124 00:05:16,080 --> 00:05:17,970 omdat strings-- net in die werklike world-- 125 00:05:17,970 --> 00:05:19,790 kan 'n mooi arbitrêre lengte wees. 126 00:05:19,790 --> 00:05:21,055 Pretty kort, redelik lank. 127 00:05:21,055 --> 00:05:23,680 Maar selfs dan, gaan ons vind dat rekenaars kan soms 128 00:05:23,680 --> 00:05:27,200 loop uit van die geheue en selfs nie slaan 'n groot genoeg tou. 129 00:05:27,200 --> 00:05:30,840 >> Maar vir nou, laat ons begin om te visualiseer 'n string as iets in hierdie bokse 130 00:05:30,840 --> 00:05:31,340 hier. 131 00:05:31,340 --> 00:05:36,410 So ses sulke bokse, wat elk verteenwoordig 'n karakter of "kar." 132 00:05:36,410 --> 00:05:40,646 So onthou dat "char" - c-h-'n-r-- is een van die ingeboude data tipes in C. 133 00:05:40,646 --> 00:05:43,520 En wat is lekker is dat jy kan gebruik dat die soort van as 'n boublok, 134 00:05:43,520 --> 00:05:47,880 'n legkaart stuk, as jy wil, 'n vorm groter tipe data wat ons sal voortgaan 135 00:05:47,880 --> 00:05:49,410 'n "string." te noem 136 00:05:49,410 --> 00:05:53,650 >> Nou, wat is nuttig oor die denke oor dinge soos snare op hierdie manier? 137 00:05:53,650 --> 00:05:57,720 Wel, dit blyk dat ons kan eintlik gebruik hierdie struktuur 138 00:05:57,720 --> 00:06:01,420 om werklik toegang individuele karakters in 'n mooi eenvoudige manier. 139 00:06:01,420 --> 00:06:04,099 Ek gaan om voort te gaan en die skep 'n lêer met die naam "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 maar jy kan dit noem wat jy wil. 141 00:06:05,765 --> 00:06:08,500 En op die kursus se webblad is reeds hierdie voorbeeld in advance, 142 00:06:08,500 --> 00:06:10,430 sodat jy nie nodig het om te tik alles uit. 143 00:06:10,430 --> 00:06:13,820 >> En ek gaan om voort te gaan en eers int main nietig. 144 00:06:13,820 --> 00:06:15,980 En binne 'n paar dae, ons sal begin om uitmekaar te terg 145 00:06:15,980 --> 00:06:19,070 wat nietig is hier, hoekom dit int langs hoof, en so meer. 146 00:06:19,070 --> 00:06:21,180 Maar vir nou, laat ons voortgaan kopieer plak dit. 147 00:06:21,180 --> 00:06:23,455 >> Ek gaan 'n string genoem is, te verklaar. 148 00:06:23,455 --> 00:06:26,920 En ek gaan om terug te keer uit GetString wat die gebruiker in. 149 00:06:26,920 --> 00:06:29,170 Dit gaan om 'n eenvoudige program, geen instruksies, 150 00:06:29,170 --> 00:06:31,336 Ek gaan net blindelings verwag dat die gebruiker weet 151 00:06:31,336 --> 00:06:32,600 wat om te doen om dit eenvoudig te hou. 152 00:06:32,600 --> 00:06:34,220 >> En nou gaan ek 'n te hê vir lus. 153 00:06:34,220 --> 00:06:37,450 En binnekant van my lus vir Ek is gaan hê int i kry nul. 154 00:06:37,450 --> 00:06:40,660 En ek is weer net 'n konvensie, 'n indeks veranderlike vir tel, 155 00:06:40,660 --> 00:06:42,350 maar ek kon noem dit net wat ek wil. 156 00:06:42,350 --> 00:06:46,275 Ek gaan om te doen wat ek minder goed than-- Zamyla se naam is ses letters. 157 00:06:46,275 --> 00:06:48,150 So ek gaan hard kode wat daar vir nou. 158 00:06:48,150 --> 00:06:49,730 >> En dan het ek ++. 159 00:06:49,730 --> 00:06:53,190 En nou binnekant van hierdie krullerige draadjies Ek gaan printf te doen, 160 00:06:53,190 --> 00:06:55,460 en ek wil om een ​​te druk karakter op 'n tyd. 161 00:06:55,460 --> 00:06:58,227 So ek gaan% c te gebruik vir miskien die eerste keer. 162 00:06:58,227 --> 00:07:00,560 En dan wil ek elke te druk karakter op sy eie lyn. 163 00:07:00,560 --> 00:07:02,550 So ek gaan 'n te sit bietjie agteroorskuinsstreep N daar. 164 00:07:02,550 --> 00:07:03,640 Sluit kwotasie. 165 00:07:03,640 --> 00:07:06,250 >> En nou wil ek hier iets om te doen. 166 00:07:06,250 --> 00:07:10,610 Ek wil uit te druk die spesifieke brief in die tou, 167 00:07:10,610 --> 00:07:13,670 s, as ek iterating van nul op tot ses. 168 00:07:13,670 --> 00:07:17,150 Met ander woorde, ek wil druk die i'th karakter van s. 169 00:07:17,150 --> 00:07:18,420 Nou hoe kan ek dit doen? 170 00:07:18,420 --> 00:07:21,550 >> Wel baie soos die bokse in hierdie voorstelling hier 171 00:07:21,550 --> 00:07:25,560 soort, roep die idee van die boks letters in, kan jy ook so doen 172 00:07:25,560 --> 00:07:32,630 sintakties in C deur eenvoudig spesifiseer, Ek wil uit te druk s se i'th karakter. 173 00:07:32,630 --> 00:07:35,640 Met behulp van die vierkantige hakies op jou rekenaar se sleutelbord 174 00:07:35,640 --> 00:07:38,910 wat op 'n Amerikaanse sleutelbord is algemeen bo jou terugkeer sleutel. 175 00:07:38,910 --> 00:07:42,630 >> So, dit is nie heeltemal reg nog, as jy dalk opgemerk het. 176 00:07:42,630 --> 00:07:44,780 Maar ek gaan soort blindelings voor uitkom hier. 177 00:07:44,780 --> 00:07:47,020 En ek gaan om te doen maak string 0. 178 00:07:47,020 --> 00:07:50,860 Maar voor ek dit doen, laat ons sien of ons kan nie 'n paar algemene foute verwag. 179 00:07:50,860 --> 00:07:52,844 Is dit gaan te stel? 180 00:07:52,844 --> 00:07:54,510 Nee, ek mis 'n hele klomp van die dinge. 181 00:07:54,510 --> 00:07:55,280 Biblioteke ek gehoor het. 182 00:07:55,280 --> 00:07:58,480 >> So wat header lêers kan ek hier wil voeg? 183 00:07:58,480 --> 00:07:59,205 Ja. 184 00:07:59,205 --> 00:08:01,580 >> Publiek: Jy moet standaard I / O [onhoorbaar] 185 00:08:01,580 --> 00:08:02,663 >> David J. Malan Uitstekende. 186 00:08:02,663 --> 00:08:06,060 So ek moet standaard I / O. Want wat doel wil ek standaard I / O? 187 00:08:06,060 --> 00:08:06,670 Vir printf. 188 00:08:06,670 --> 00:08:09,220 So sluit stdio.h. 189 00:08:09,220 --> 00:08:13,490 En jy ook voor dat ek sluit die CS50 biblioteek om watter rede? 190 00:08:13,490 --> 00:08:14,650 Snare te hê. 191 00:08:14,650 --> 00:08:17,780 So ons sal sien wat CS50 se biblioteek doen 192 00:08:17,780 --> 00:08:19,260 hierdie idee van 'n string te skep. 193 00:08:19,260 --> 00:08:21,930 Maar vir nou, kan jy net dink dit as 'n werklike data tipe. 194 00:08:21,930 --> 00:08:23,596 >> So wat blyk te wees 'n bietjie skoongemaak. 195 00:08:23,596 --> 00:08:27,060 En nou is ek gaan om voort te gaan en inderdaad doen maak string 0. 196 00:08:27,060 --> 00:08:27,700 Saamgestel. 197 00:08:27,700 --> 00:08:28,370 So dit is goed. 198 00:08:28,370 --> 00:08:32,799 So ./string0 laat my zoom in sodat ons kan sien nader wat gebeur. 199 00:08:32,799 --> 00:08:33,850 Betree. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A betree. 201 00:08:37,789 --> 00:08:39,440 En ons het gedruk om uit te Zamyla se naam. 202 00:08:39,440 --> 00:08:40,409 >> So dit is redelik goed. 203 00:08:40,409 --> 00:08:43,220 So nou, laat ons gaan voort en hierdie program loop weer 204 00:08:43,220 --> 00:08:45,659 en tik Daven se volle naam. 205 00:08:45,659 --> 00:08:46,450 Verrassing. 206 00:08:46,450 --> 00:08:48,021 Betree. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Ons het nog nie gedruk Daven se volle naam korrek. 209 00:08:51,750 --> 00:08:54,250 Nou moet dit voor die hand liggend in wees terugblik as gevolg van wat, 210 00:08:54,250 --> 00:08:57,010 soort, dom ontwerp besluit? 211 00:08:57,010 --> 00:08:59,590 >> Ja, ek het hard gekodeer die ses binnekant van my lus vir. 212 00:08:59,590 --> 00:09:01,610 Nou ek het dit net omdat Ek het geweet Zamyla se naam 213 00:09:01,610 --> 00:09:02,776 gaan ses letters te wees. 214 00:09:02,776 --> 00:09:04,720 Maar seker dit is nie 'n algemene oplossing. 215 00:09:04,720 --> 00:09:07,720 So dit blyk ons ​​kan dinamiese uit te vind die lengte van 'n string 216 00:09:07,720 --> 00:09:10,440 deur die roeping van 'n funksie genoem strlen. 217 00:09:10,440 --> 00:09:12,840 >> Weereens, doelbewus saaklik net die naam 218 00:09:12,840 --> 00:09:14,450 te maak dit meer gerieflik om te tik. 219 00:09:14,450 --> 00:09:17,170 Maar dit is sinoniem met om die lengte van 'n string. 220 00:09:17,170 --> 00:09:23,190 Ek gaan om terug te gaan na my terminale venster en re-run van die samesteller. 221 00:09:23,190 --> 00:09:24,170 Maar dit is skree op my. 222 00:09:24,170 --> 00:09:29,130 Implisiet verklaar biblioteek funksie strlen met tipe unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Ek is verlore. 224 00:09:29,780 --> 00:09:30,590 Heeltemal. 225 00:09:30,590 --> 00:09:32,940 >> So, veral as jou oë begin glans 226 00:09:32,940 --> 00:09:36,000 met fout boodskappe soos hierdie, fokus eerlik oor die eerste paar woorde. 227 00:09:36,000 --> 00:09:38,590 Ons weet dat die probleem is in lyn 8, soos hier aangedui. 228 00:09:38,590 --> 00:09:40,500 En dit is in string-0.C. 229 00:09:40,500 --> 00:09:43,580 Implisiet verklaar biblioteek funksie strlen. 230 00:09:43,580 --> 00:09:47,000 So wat algemeen gaan 'n patroon van die fout boodskappe. 231 00:09:47,000 --> 00:09:49,190 Implisiet verklaar iets. 232 00:09:49,190 --> 00:09:53,250 >> Dus, in kort, wat het ek gelyk of met betrekking gedoen het om te reël 8, hier. 233 00:09:53,250 --> 00:09:56,880 Wat kan die oplossing selfs As jy nog nooit gebruik strlen jouself? 234 00:09:56,880 --> 00:09:58,907 >> Publiek: 'n Deel van 'n ander biblioteek? 235 00:09:58,907 --> 00:10:00,740 David J. Malan Deel van 'n ander biblioteek. 236 00:10:00,740 --> 00:10:02,400 So is dit verklaar, om so te praat. 237 00:10:02,400 --> 00:10:07,510 Dit is in sommige lêer genoem behalwe stdio.h en CS50.h. 238 00:10:07,510 --> 00:10:09,179 Nou waar is dit gedefinieer? 239 00:10:09,179 --> 00:10:12,220 Om eerlik te wees, jy moet net weet dit uit die top van jou kop, 240 00:10:12,220 --> 00:10:13,640 of u Google dit en vind uit. 241 00:10:13,640 --> 00:10:18,150 Of weet dit, het ek oopgemaak in die CS50 toestel aan om die terminale program, wat 242 00:10:18,150 --> 00:10:22,200 is net die groot, full screen weergawe van Wat is in die onderkant van gedit se venster. 243 00:10:22,200 --> 00:10:24,970 >> En dit blyk dat daar 'n Net so bondige opdrag, genoem 244 00:10:24,970 --> 00:10:29,280 man vir die handleiding, waar as jy tik in die naam van 'n funksie en druk Enter, 245 00:10:29,280 --> 00:10:32,240 jy sal terug te kry redelik arcane dokumentasie. 246 00:10:32,240 --> 00:10:35,299 Dis net die teks wat in die algemeen lyk 'n bietjie iets soos hierdie. 247 00:10:35,299 --> 00:10:37,090 Dit is 'n bietjie oorweldigend met die eerste oogopslag. 248 00:10:37,090 --> 00:10:39,048 Maar eerlik ek gaan Laat my oë glans 249 00:10:39,048 --> 00:10:41,930 en net fokus op die deel Ek omgee vir die oomblik. 250 00:10:41,930 --> 00:10:42,780 >> Wat is hierdie. 251 00:10:42,780 --> 00:10:45,470 Wat lyk soos struktureel iets wat ek ken. 252 00:10:45,470 --> 00:10:48,080 Inderdaad die man bladsy, so om te praat, sal jou vertel 253 00:10:48,080 --> 00:10:51,590 in wat kop liasseer 'n funksie soos strlen gedefinieer word. 254 00:10:51,590 --> 00:10:54,170 So ek gaan om terug te gaan nou aan gedit. 255 00:10:54,170 --> 00:10:59,070 En ek gaan om voort te gaan en voeg hier include 256 00:10:59,070 --> 00:11:00,480 en stoor die lêer. 257 00:11:00,480 --> 00:11:04,300 >> Ek gaan die skerm skoon te maak met Beheer L As jy wonder. 258 00:11:04,300 --> 00:11:08,210 En ek is te re-run make gaan string.0, stel hierdie tyd. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Dit blyk te werk Laat my gaan voor en tik dit met Davenport. 261 00:11:15,020 --> 00:11:15,860 Betree. 262 00:11:15,860 --> 00:11:17,730 En dit is ook blyk te werk. 263 00:11:17,730 --> 00:11:21,220 >> So ons kan doen 'n bietjie beter as dit, al is, kan ons begin om netjies dinge 264 00:11:21,220 --> 00:11:23,257 tot net 'n bietjie. 265 00:11:23,257 --> 00:11:25,590 En ek gaan om werklik stel 'n ander ding nou. 266 00:11:25,590 --> 00:11:28,930 Ek gaan om voort te gaan en red dit in 'n ander lêer. 267 00:11:28,930 --> 00:11:31,770 En ek gaan om te bel hierdie lêer string1.c net 268 00:11:31,770 --> 00:11:34,620 om in ooreenstemming met die kode wees jy sal in staat wees om uit te vind aanlyn. 269 00:11:34,620 --> 00:11:37,050 >> En laat ons fokus op presies dieselfde kode. 270 00:11:37,050 --> 00:11:39,000 Dit blyk dat ek was soort neem 271 00:11:39,000 --> 00:11:42,600 vanselfsprekend dat my laptop, en op sy beurt, die CS50 toestel 272 00:11:42,600 --> 00:11:47,450 het 'n baie van die geheue, 'n baie Geheue, 'n baie grepe van ruimte 273 00:11:47,450 --> 00:11:48,920 waarin ek kan stoor snare. 274 00:11:48,920 --> 00:11:53,560 >> Maar die werklikheid as ek getik lang genoeg is, en genoeg toetsaanslagen, 275 00:11:53,560 --> 00:11:56,170 Ek kon in teorie tipe in meer karakters 276 00:11:56,170 --> 00:11:58,830 as my rekenaar fisies het geheue vir. 277 00:11:58,830 --> 00:11:59,830 En dit is problematies. 278 00:11:59,830 --> 00:12:03,050 Baie soos 'n int kan slegs tel so hoog is, in teorie, 279 00:12:03,050 --> 00:12:06,600 jy kan net gedrang so baie karakters in jou rekenaar se geheue of Random 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> So ek het 'n beter verwag hierdie probleem, selfs 282 00:12:11,140 --> 00:12:13,660 al is dit dalk 'n seldsame hoek geval, om so te praat. 283 00:12:13,660 --> 00:12:15,670 Nie gebeur nie, wat dikwels, kan gebeur. 284 00:12:15,670 --> 00:12:18,815 En as dit gebeur en ek doen nie antisipeer en program vir dit, 285 00:12:18,815 --> 00:12:20,300 my program kan doen wie weet. 286 00:12:20,300 --> 00:12:22,220 Vries, hang, herlaai, wat ook al. 287 00:12:22,220 --> 00:12:24,490 Iets wat verwag kan gebeur. 288 00:12:24,490 --> 00:12:27,120 >> So wat ek gaan doen nou, voortaan regtig, 289 00:12:27,120 --> 00:12:31,630 voor ek ooit blindelings Gebruik 'n veranderlike soos s wat 290 00:12:31,630 --> 00:12:36,790 is aangestel om die terugkeer waarde van 'n ander funksie soos getstring, 291 00:12:36,790 --> 00:12:40,200 Ek gaan om seker te maak dat die waarde geldig is. 292 00:12:40,200 --> 00:12:44,280 So ek weet net van dit gelees CS50 se dokumentasie vir getstring, 293 00:12:44,280 --> 00:12:49,020 wat uiteindelik sal ons wys jou op, dat getstring gee 'n spesiale simbool 294 00:12:49,020 --> 00:12:53,610 genoem NULL, N-U-L-L in alle pette, as iets verkeerd gaan. 295 00:12:53,610 --> 00:12:55,650 >> So normaalweg, dit gee 'n string. 296 00:12:55,650 --> 00:12:59,700 Maar anders as dit terug N-U-L-L-- ons sal uiteindelik sien wat dit werklik 297 00:12:59,700 --> 00:13:01,790 means-- wat net beteken iets sleg gebeur het. 298 00:13:01,790 --> 00:13:05,560 En dit beteken, net soos in Scratch, Ek kan 'n toestand hier so C, 299 00:13:05,560 --> 00:13:08,830 As s nie gelyk NULL. 300 00:13:08,830 --> 00:13:11,930 So as jy dit nie gesien het nie, dit net beteken nie gelyk. 301 00:13:11,930 --> 00:13:15,290 >> So dit is die teenoorgestelde van gelyk gelykes, wat onthou, 302 00:13:15,290 --> 00:13:18,940 verskil van enkele gelyk, wat opdrag. 303 00:13:18,940 --> 00:13:23,030 So as s nie gelyk NULL, slegs dan doen 304 00:13:23,030 --> 00:13:25,980 Ek wil hierdie reëls van die kode uit te voer. 305 00:13:25,980 --> 00:13:28,080 So met ander woorde, voordat ek duik in blindelings 306 00:13:28,080 --> 00:13:30,919 en begin iterating oor S, en die behandeling van dit 307 00:13:30,919 --> 00:13:33,710 asof dit 'n reeks van karakters, ek gaan nie eers te kontroleer, 308 00:13:33,710 --> 00:13:37,900 Wag 'n minuut, is S beslis nie gelyk aan die spesiale waarde, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Want as dit is, kan slegte dinge gebeur. 310 00:13:40,030 --> 00:13:43,080 En nou, aanvaar dat slegte dinge gebeur beteken dat jou program crashes, 311 00:13:43,080 --> 00:13:45,070 en jy kan nie noodwendig herstel. 312 00:13:45,070 --> 00:13:46,800 So gesê, dit lyk leliker. 313 00:13:46,800 --> 00:13:48,660 Dit is soort van verwarrend nou blik op. 314 00:13:48,660 --> 00:13:50,780 Maar dit sal meer geword vertroud voor lank. 315 00:13:50,780 --> 00:13:52,920 >> Maar ek gaan voor te stel nou een ander verbetering. 316 00:13:52,920 --> 00:13:54,660 Dit is 'n verbetering van korrektheid. 317 00:13:54,660 --> 00:13:58,800 My program is nou meer korrek nie, want in die seldsame geval dat daar nie genoeg geheue 318 00:13:58,800 --> 00:14:01,180 bestaan ​​nie, sal ek dit hanteer, en ek sal net niks doen nie. 319 00:14:01,180 --> 00:14:02,680 Ek sal ten minste nie crash. 320 00:14:02,680 --> 00:14:05,000 >> Maar laat ons nie 'n finale weergawe hier. 321 00:14:05,000 --> 00:14:07,690 En 'n lêer genaamd string2.c. 322 00:14:07,690 --> 00:14:10,190 Ek is van plan om dit te plak dieselfde kode vir net 'n oomblik, 323 00:14:10,190 --> 00:14:14,210 en ek gaan dit na vore te bring lyn, 11 hier, want net 'n oomblik. 324 00:14:14,210 --> 00:14:18,179 Nou is die realiteit is dat slim opstellers soos klang dit kan regmaak vir ons 325 00:14:18,179 --> 00:14:19,970 agter die skerms sonder dat ons ooit weet. 326 00:14:19,970 --> 00:14:24,670 Maar laat ons dink oor hierdie fundamenteel as 'n problematiese ontwerp. 327 00:14:24,670 --> 00:14:29,010 >> Hierdie lyn van die kode is, natuurlik, gesê inisialiseer 'n veranderlike i na 0. 328 00:14:29,010 --> 00:14:30,260 Dit is redelik eenvoudig. 329 00:14:30,260 --> 00:14:34,691 En wat is weer hierdie verklaring, hier, i ++ doen? 330 00:14:34,691 --> 00:14:37,066 Ons het dit voorheen gesien het nie, maar ons het nie regtig daaroor praat. 331 00:14:37,066 --> 00:14:37,900 >> Publiek: die verhoog i. 332 00:14:37,900 --> 00:14:39,191 >> David J. Malan die verhoog i. 333 00:14:39,191 --> 00:14:41,890 So op elke iterasie deur hierdie lus, elke siklus, 334 00:14:41,890 --> 00:14:43,570 jy die verhoog i een. 335 00:14:43,570 --> 00:14:45,740 So dit raak groter, en groter, en groter totdat die lus beëindig. 336 00:14:45,740 --> 00:14:46,810 Hoe dit beëindig? 337 00:14:46,810 --> 00:14:49,430 Wel, daar is dié middel toestand wat ons het voorheen gebruik. 338 00:14:49,430 --> 00:14:52,500 Jy het gesien en in ipv in die P stel. 339 00:14:52,500 --> 00:14:53,880 >> Maar wat is hierdie woord? 340 00:14:53,880 --> 00:14:58,352 Doen die volgende lus so Solank as wat ek is minder as wat? 341 00:14:58,352 --> 00:14:59,810 Publiek: Die lengte van die string. 342 00:14:59,810 --> 00:15:01,518 David J. Malan Die lengte van die string. 343 00:15:01,518 --> 00:15:04,300 So dit beteken mooi skoon Engels in daardie sin. 344 00:15:04,300 --> 00:15:08,810 Nou is die probleem is dat elke keer as ek Itereer deur middel van hierdie lus in teorie, 345 00:15:08,810 --> 00:15:10,000 Ek vra hierdie vraag. 346 00:15:10,000 --> 00:15:12,250 Is ek minder as die string lengte van s? 347 00:15:12,250 --> 00:15:14,500 Is ek minder as die string lengte van s? 348 00:15:14,500 --> 00:15:18,380 >> Nou is ek die verandering op elke iterasie? 349 00:15:18,380 --> 00:15:18,880 Dit is. 350 00:15:18,880 --> 00:15:19,629 As gevolg van die ++. 351 00:15:19,629 --> 00:15:21,700 So elke iterasie i is om groter. 352 00:15:21,700 --> 00:15:25,411 Maar is s om groter of kleiner, of verander nie? 353 00:15:25,411 --> 00:15:25,910 Nee 354 00:15:25,910 --> 00:15:30,240 Dus, in terme van die ontwerp, een van die asse waarlangs ons probeer kode te evalueer 355 00:15:30,240 --> 00:15:32,610 in die klas, dit voel soort van dom. 356 00:15:32,610 --> 00:15:34,690 >> Net soos jy is letterlik, op elke iterasie 357 00:15:34,690 --> 00:15:37,110 van hierdie lus vra die dieselfde damn vraag weer, 358 00:15:37,110 --> 00:15:40,770 en weer, en weer, en letterlik Dit is nooit gaan verander. 359 00:15:40,770 --> 00:15:44,220 Ten minste as ek nie raak s en probeer om die inhoud van s te verander. 360 00:15:44,220 --> 00:15:46,610 So ek kan doen 'n bietjie beter as dit. 361 00:15:46,610 --> 00:15:49,530 >> En wat ek gaan doen, is nie verklaar net een veranderlike i, 362 00:15:49,530 --> 00:15:53,330 maar 'n tweede veranderlike Ek sal arbitrêr, maar konvensioneel, noem dit n. 363 00:15:53,330 --> 00:15:55,940 Ken n gelyk aan die string lengte van s. 364 00:15:55,940 --> 00:15:59,090 En dan hier, ek gaan om te doen 'n slim klein optimalisering, so 365 00:15:59,090 --> 00:16:03,460 te praat, wat aan die einde van die dag is nie meer korrek of nie minder nie korrek 366 00:16:03,460 --> 00:16:04,260 as voorheen. 367 00:16:04,260 --> 00:16:05,500 Maar dit is 'n beter ontwerp. 368 00:16:05,500 --> 00:16:09,480 In die feit dat ek die gebruik van minder tyd, minder CPU siklusse, so 369 00:16:09,480 --> 00:16:14,040 te praat, dieselfde te beantwoord vraag, maar net een keer. 370 00:16:14,040 --> 00:16:17,870 >> Enige vrae oor daardie algemene beginsel van die verbetering, 371 00:16:17,870 --> 00:16:21,294 sê, 'n program se doeltreffendheid? 372 00:16:21,294 --> 00:16:21,991 Ja? 373 00:16:21,991 --> 00:16:23,699 Publiek: Hoekom doen jy gebruik om die [onhoorbaar]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 David J. Malan Goeie vraag. 376 00:16:27,010 --> 00:16:30,690 So hoekom doen ons die ++ op die einde van Ek plaas van die begin van die i? 377 00:16:30,690 --> 00:16:33,070 In hierdie geval, dit het geen funksionele impak. 378 00:16:33,070 --> 00:16:36,670 En in die algemeen, ek is geneig om te gebruik die postfix operateur 379 00:16:36,670 --> 00:16:41,750 sodat dit 'n bietjie meer duidelik as wanneer die operasie is om te gebeur. 380 00:16:41,750 --> 00:16:46,670 >> Vir diegene wat nie vertroud is, is daar 'n ander stellings waardeur jy ek kon doen ++. 381 00:16:46,670 --> 00:16:48,747 Dit is funksioneel ekwivalent in hierdie geval 382 00:16:48,747 --> 00:16:51,080 want daar is niks anders rondom die incrementation. 383 00:16:51,080 --> 00:16:54,435 Maar jy kan kom met gevalle en reëls van die kode 384 00:16:54,435 --> 00:16:55,810 waarin dit maak 'n verskil. 385 00:16:55,810 --> 00:16:57,810 So oor die algemeen, het ons dit nie doen nie selfs praat oor hierdie een. 386 00:16:57,810 --> 00:17:00,690 Want eerlik, dit maak jou kode sexier, en soort van bedrieër, 387 00:17:00,690 --> 00:17:01,776 en minder karakters. 388 00:17:01,776 --> 00:17:04,859 Maar die werklikheid is dat dit 'n baie moeiliker, Ek dink, selfs vir my verstand te draai 389 00:17:04,859 --> 00:17:07,319 rondom dit soms die einde van bedrywighede. 390 00:17:07,319 --> 00:17:09,750 So as 'n eenkant, as jy regtig graag hierdie nie, 391 00:17:09,750 --> 00:17:14,650 selfs al is dit soort van sexy soek, kan jy dit ook doen i + = 1, 392 00:17:14,650 --> 00:17:18,880 wat is die leliker weergawe van die dieselfde idee vir postfix incrementation. 393 00:17:18,880 --> 00:17:22,250 >> Ek sê dit en jy moet pret daarvan, 394 00:17:22,250 --> 00:17:25,140 maar jy sal kom kode om te sien as iets mooi voor lank. 395 00:17:25,140 --> 00:17:27,160 >> [Gelag] 396 00:17:27,160 --> 00:17:28,410 >> David J. Malan Right? 397 00:17:28,410 --> 00:17:29,360 Ja. 398 00:17:29,360 --> 00:17:30,480 Vraag in die middel. 399 00:17:30,480 --> 00:17:32,146 >> Publiek: moet jy int n sê? 400 00:17:32,146 --> 00:17:34,020 David J. Malan Jy doen nie nodig int N te sê. 401 00:17:34,020 --> 00:17:37,670 So, want ons het reeds int gesê, jy hoef nie dit weer te sê nie. 402 00:17:37,670 --> 00:17:41,820 Die vangs is dat n moet dieselfde wees data tipe as ek. 403 00:17:41,820 --> 00:17:43,310 So dit is net 'n gerief hier. 404 00:17:43,310 --> 00:17:44,058 Ja. 405 00:17:44,058 --> 00:17:47,806 >> Publiek: Kan jy gaan oor die Druk karakter se bracket i weer? 406 00:17:47,806 --> 00:17:48,930 David J. Malan Beslis. 407 00:17:48,930 --> 00:17:52,110 So% c, onthou van verlede tyd, is net 'n tydelike. 408 00:17:52,110 --> 00:17:53,930 Dit beteken sit 'n kar hier. 409 00:17:53,930 --> 00:17:56,780 agteroorskuinsstreep n, natuurlik, net middel sit 'n lyn breek hier. 410 00:17:56,780 --> 00:17:59,540 Sodat net laat, nou, hierdie stuk van die nuwe sintaksis. 411 00:17:59,540 --> 00:18:03,730 En dit is letterlik sê, gryp die string genoem is en gaan kry om sy 412 00:18:03,730 --> 00:18:06,050 i'th karakter, om so te praat. 413 00:18:06,050 --> 00:18:10,590 >> En ek sê hou i'th karakter want op elke iterasie van hierdie lus 414 00:18:10,590 --> 00:18:14,540 dit is asof ons die druk uit die eerste s bracket 0, 415 00:18:14,540 --> 00:18:15,780 as 'n programmeerder kan sê. 416 00:18:15,780 --> 00:18:18,680 Dan is bracket 1, dan is bracket 2, dan 3, dan 4. 417 00:18:18,680 --> 00:18:21,610 Maar dit is natuurlik 'n veranderlike, sodat ek net druk dit met i. 418 00:18:21,610 --> 00:18:23,900 >> Sleutel, al is, is om te besef, veral as jy het nie 419 00:18:23,900 --> 00:18:26,358 is acclimating aan hierdie wêreld van ontwikkeling, waar ons almal 420 00:18:26,358 --> 00:18:28,950 blyk te tel vanaf nul, gotta begin tel vanaf nul nou. 421 00:18:28,950 --> 00:18:35,130 Omdat snare, eerste karakter, die Z in Zamyla is vir 'n beter of vir slegter 422 00:18:35,130 --> 00:18:40,490 gaan op plek getal nul te leef. 423 00:18:40,490 --> 00:18:48,210 >> Alle reg, so laat my bring ons terug hier om Zamyla 424 00:18:48,210 --> 00:18:50,746 en sien wat werklik aan die gang op onder die kap. 425 00:18:50,746 --> 00:18:52,370 So daar is hierdie idee van die tipe gooi. 426 00:18:52,370 --> 00:18:53,800 Jy kan eintlik gespeel met hierdie reeds 427 00:18:53,800 --> 00:18:55,970 miskien vir die hacker uitgawe van P stel een. 428 00:18:55,970 --> 00:19:00,320 Maar soort beslissende verwys net na die vermoë om in die C en 'n paar ander tale 429 00:19:00,320 --> 00:19:03,170 een data tipe om te skakel na 'n ander. 430 00:19:03,170 --> 00:19:05,450 >> Nou hoe kan ons dit sien mooi reguit? 431 00:19:05,450 --> 00:19:08,530 So hierdie, onthou, is die begin van die Engelse alfabet. 432 00:19:08,530 --> 00:19:11,265 En die konteks, onthou, uit soos 'n week gelede is ASCII. 433 00:19:11,265 --> 00:19:13,790 Die American Standard Code vir Inligting-wisselaar. 434 00:19:13,790 --> 00:19:17,080 Wat net 'n baie lang pad sê 'n afbeelding van letters 435 00:19:17,080 --> 00:19:19,370 om getalle en van getalle met letters. 436 00:19:19,370 --> 00:19:22,940 >> So 'n deur M hier dot dot dot, lyne met, onthou, 437 00:19:22,940 --> 00:19:25,582 die desimale getal 65 op tot. 438 00:19:25,582 --> 00:19:27,290 En ons het nie te praat oor hierdie uitdruklik 439 00:19:27,290 --> 00:19:29,850 maar seker daar is soortgelyke nommers vir klein letters. 440 00:19:29,850 --> 00:19:30,820 En inderdaad, daar is. 441 00:19:30,820 --> 00:19:33,730 Die wêreld het besluit om 'n paar jaar gelede dat daar min a, kleinletter a, 442 00:19:33,730 --> 00:19:35,020 gaan wees 97. 443 00:19:35,020 --> 00:19:38,010 En min b gaan te wees 98, en so meer. 444 00:19:38,010 --> 00:19:40,200 >> En vir enige ander sleutel op u sleutelbord, is daar 445 00:19:40,200 --> 00:19:42,190 gaan 'n soortgelyke patroon van stukkies te wees. 446 00:19:42,190 --> 00:19:44,540 Of anders gestel, 'n desimaal nommer. 447 00:19:44,540 --> 00:19:47,110 So die vraag aan die hand, dan is hoe kan ons 448 00:19:47,110 --> 00:19:49,400 eintlik sien dit onder die enjinkap? 449 00:19:49,400 --> 00:19:51,539 So ek gaan weer oor te gaan na gedit. 450 00:19:51,539 --> 00:19:53,330 En eerder as die tipe hierdie een van nuuts af, 451 00:19:53,330 --> 00:19:55,330 Ek gaan om voort te gaan en net oop om iets 452 00:19:55,330 --> 00:19:58,350 van vandag se kode genoem ASCII nul. 453 00:19:58,350 --> 00:20:01,210 >> En ASCII nul lyk. 454 00:20:01,210 --> 00:20:02,710 So laat draai ons gedagtes rondom hierdie. 455 00:20:02,710 --> 00:20:04,969 So die eerste, het ek opgemerk die kode, wat lekker is. 456 00:20:04,969 --> 00:20:07,010 Want dit is letterlik vertel my wat om te verwag, 457 00:20:07,010 --> 00:20:08,950 vertoon 'n kaart vir hoofletters. 458 00:20:08,950 --> 00:20:13,690 Nou heeltemal weet ek nie wat ek bedoel dat, so laat lei. 459 00:20:13,690 --> 00:20:16,870 >> In Engels, miskien ietwat techie Engels, 460 00:20:16,870 --> 00:20:20,660 Wat word deur lyn 18 verskyn om te doen vir ons? 461 00:20:20,660 --> 00:20:21,500 Net in lyn 18. 462 00:20:21,500 --> 00:20:22,430 Wat is dit beïnvloeding? 463 00:20:22,430 --> 00:20:25,192 Wat gaan dit te skop af hier? 464 00:20:25,192 --> 00:20:26,100 >> Publiek: A lus. 465 00:20:26,100 --> 00:20:26,630 >> David J. Malan 'n lus. 466 00:20:26,630 --> 00:20:28,463 En hoeveel keer is wat gaan om te Itereer? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 Publiek: [INTERPOSING STEMME] ses keer. 469 00:20:33,270 --> 00:20:34,830 David J. Malan Nie ses keer. 470 00:20:34,830 --> 00:20:35,840 Publiek: 26 keer. 471 00:20:35,840 --> 00:20:36,560 David J. Malan 26 keer. 472 00:20:36,560 --> 00:20:37,060 Ja, jammer. 473 00:20:37,060 --> 00:20:37,960 26 keer. 474 00:20:37,960 --> 00:20:38,460 Hoekom? 475 00:20:38,460 --> 00:20:41,590 Wel, dit is 'n bietjie vreemd, maar Ek het begin tel van 65. 476 00:20:41,590 --> 00:20:43,300 Wat is vreemd, maar nie verkeerd nie. 477 00:20:43,300 --> 00:20:44,610 Dit is nie sleg nie per sê. 478 00:20:44,610 --> 00:20:46,980 En ek doen dit net want vir hierdie voorbeeld, 479 00:20:46,980 --> 00:20:50,455 Ek is soort van vooruit dat kapitaal A was 65. 480 00:20:50,455 --> 00:20:53,330 Nou is dit nie die mees elegante manier om dit te doen, om soort van harde-kode 481 00:20:53,330 --> 00:20:56,130 esoteriese waardes wat niemand ooit verwag om te onthou. 482 00:20:56,130 --> 00:21:00,155 >> Maar vir nou, sien dat ek om dit te doen om deur middel van 65 plus 26. 483 00:21:00,155 --> 00:21:03,030 Omdat glo ek wil nie eens die rekenkundige om te doen in my kop. 484 00:21:03,030 --> 00:21:04,440 So ek sal laat die opsteller dit doen. 485 00:21:04,440 --> 00:21:08,600 Maar dan op elke lus, elke iterasie van die lus, ek verhoog van i. 486 00:21:08,600 --> 00:21:10,196 >> So nou is dit lyk 'n bietjie kripties. 487 00:21:10,196 --> 00:21:13,320 Maar ons moet die basiese bou het blokke met wat om dit te verstaan. 488 00:21:13,320 --> 00:21:15,510 % C is net 'n plekhouer vir 'n kar. 489 00:21:15,510 --> 00:21:19,010 % I is 'n plekhouer vir 'n int. 490 00:21:19,010 --> 00:21:23,310 En dit blyk dat deur die gebruik van hierdie nuwe sintaksis, hierdie hakies, sodat 491 00:21:23,310 --> 00:21:26,100 te praat, so 'n data tipe in 'n hakies, 492 00:21:26,100 --> 00:21:32,270 Ek kan die samesteller dwing om te behandel Ek het nie 'n heelgetal is, maar as 'n kar. 493 00:21:32,270 --> 00:21:35,520 >> Daardeur wys my die karakter ekwivalent van daardie getal. 494 00:21:35,520 --> 00:21:37,986 Nou hier, hierdie kode is pretty much identies. 495 00:21:37,986 --> 00:21:39,860 Ek wou net om te super eksplisiete die feit 496 00:21:39,860 --> 00:21:42,095 dat ek begin by 97, wat klein letters is a. 497 00:21:42,095 --> 00:21:44,080 Op up deur 26 meer letters. 498 00:21:44,080 --> 00:21:46,970 En ek is weer doing--, beslissende i, om so te praat. 499 00:21:46,970 --> 00:21:49,160 Of tipe beslissende i, om so te praat. 500 00:21:49,160 --> 00:21:51,420 >> Uit 'n int 'n kar. 501 00:21:51,420 --> 00:21:55,760 So het die eindresultaat gaan wees, eerlik, inligting wat ons reeds weet. 502 00:21:55,760 --> 00:21:59,411 Ek gaan maak ascii-0 dot-- nie dot c. 503 00:21:59,411 --> 00:22:02,160 Kennis, het jy waarskynlik gemaak dat fout as ek het net per ongeluk. 504 00:22:02,160 --> 00:22:03,820 Maak ascii-0. 505 00:22:03,820 --> 00:22:06,090 Nou gaan ek ./ascii-0 te doen. 506 00:22:06,090 --> 00:22:09,050 Ek sal vergroot, en ongelukkig dit gaan om te blaai die skerm af. 507 00:22:09,050 --> 00:22:15,060 Maar ons sien 'n hele grafiek waar 'n kaarte tot 97, b kaarte tot 98, 508 00:22:15,060 --> 00:22:18,931 en as ons te blaai verder A, natuurlik, kaarte tot 65. 509 00:22:18,931 --> 00:22:21,180 So dit is net om te sê dat wat ons verkondig, 510 00:22:21,180 --> 00:22:25,310 daar is hierdie ekwivalensie, is in die feit dat die saak in die werklikheid. 511 00:22:25,310 --> 00:22:28,000 So 'n vinnige verandering van hierdie. 512 00:22:28,000 --> 00:22:31,220 Laat my oop ASCII-1.c. 513 00:22:31,220 --> 00:22:38,070 En dit agterkom slim, soort van, verduideliking van hierdie. 514 00:22:38,070 --> 00:22:41,770 Dit is ascii-1.c, en sien hierdie mal ding. 515 00:22:41,770 --> 00:22:45,120 >> En dit regtig aan die hart van wat rekenaars doen. 516 00:22:45,120 --> 00:22:48,150 Selfs al het ons die mens sou nie in terme van letters-- tel 517 00:22:48,150 --> 00:22:50,380 Ek begin nie dink, alle reg om 'n dan B, 518 00:22:50,380 --> 00:22:52,590 en gebruik die fisiese voorwerpe te tel. 519 00:22:52,590 --> 00:22:58,680 Jy kan seker sê dat ek wil inisialiseer 'n veranderlike genoem c-- 520 00:22:58,680 --> 00:23:03,220 maar ek kan dit anything-- genoem het so c geïnisialiseer om kapitaal A. 521 00:23:03,220 --> 00:23:07,560 >> Want op die einde van die dag, die rekenaar gee nie om wat jy stoor, 522 00:23:07,560 --> 00:23:10,170 dit gee net hoe jy wil dat die inligting aan te bied. 523 00:23:10,170 --> 00:23:13,560 Hoe om die rekenaar te wil jy dat patroon van stukkies interpreteer? 524 00:23:13,560 --> 00:23:16,320 So, dit is nie iets wat ek sou die algemeen beveel om te doen. 525 00:23:16,320 --> 00:23:19,500 Dit is regtig net 'n voorbeeld te dra wat jy kan absoluut 526 00:23:19,500 --> 00:23:22,049 inisialiseer 'n heelgetal tot 'n kar. 527 00:23:22,049 --> 00:23:24,090 Omdat onder die kap van 'n kar, natuurlik, 528 00:23:24,090 --> 00:23:26,170 is net 'n nommer 0-255. 529 00:23:26,170 --> 00:23:28,540 >> So kan jy seker sit dit binne-in 'n int. 530 00:23:28,540 --> 00:23:30,890 En wat is dit dan ook demonstreer, is dat ons 531 00:23:30,890 --> 00:23:34,040 kan omskep van een tik aan 'n ander, hier, 532 00:23:34,040 --> 00:23:36,780 uiteindelik die druk van die dieselfde ding. 533 00:23:36,780 --> 00:23:44,760 En in werklikheid, dit sal ek los online-- was bedoel om dit te sê, weer, hier. 534 00:23:44,760 --> 00:23:48,610 Laat my tot skoon online, en ons sal sien in 'n aanlyn walkthrough as dit nodig is, 535 00:23:48,610 --> 00:23:50,280 wat bedoel was daar. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 So laaste voorbeeld nou met A's en B's en dan sal ons 538 00:23:53,892 --> 00:23:54,850 neem dinge op 'n kerf. 539 00:23:54,850 --> 00:23:58,330 So met 'n en b's en c's in die kapitalisasie 540 00:23:58,330 --> 00:24:01,560 en die ekwivalensie daarvan, laat 'n blik op hierdie voorbeeld hier. 541 00:24:01,560 --> 00:24:02,752 Nog 'n kode voorbeeld. 542 00:24:02,752 --> 00:24:04,460 Ons sal die een wat oopmaak reeds gemaak is, sodat ons 543 00:24:04,460 --> 00:24:06,440 het nie om dit te tik almal uit van nuuts af. 544 00:24:06,440 --> 00:24:09,420 >> En kennis in afwagting ons met behulp van verskeie kop 545 00:24:09,420 --> 00:24:13,240 lêers, waaronder ons nuwe vriend, string.h. 546 00:24:13,240 --> 00:24:15,597 En dit lyk, op die eerste oogopslag, 'n bietjie kripties. 547 00:24:15,597 --> 00:24:18,180 Maar laat ons kyk of ons nie kan redeneer deur wat hier aangaan nie. 548 00:24:18,180 --> 00:24:21,150 Ek het eers 'n string van die gebruiker, en ek sit dit in 'n string veranderlike 549 00:24:21,150 --> 00:24:22,286 genoem is. 550 00:24:22,286 --> 00:24:24,090 Kopieer plak voor. 551 00:24:24,090 --> 00:24:27,250 In lyn 22, ek is blykbaar doen presies wat 552 00:24:27,250 --> 00:24:30,760 Ek het 'n oomblik gelede, ek iterating oor die karakters in s. 553 00:24:30,760 --> 00:24:34,780 >> En die nuwe truuks hier gebruik string lengte, die minderjarige optimalisering 554 00:24:34,780 --> 00:24:37,930 van die stoor van die string lengte in n, eerder as weer bel strlen, 555 00:24:37,930 --> 00:24:38,850 en weer en weer. 556 00:24:38,850 --> 00:24:41,120 En kyk net dat ek minder as n. 557 00:24:41,120 --> 00:24:43,330 Nou hier, dinge 'n bietjie interessant. 558 00:24:43,330 --> 00:24:45,980 Maar dit is net 'n aansoek van hierdie selfde nuwe idee. 559 00:24:45,980 --> 00:24:48,470 Wat in Engels doen s bracket i verteenwoordig? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> Publiek: Tel elke karakter [onhoorbaar]. 562 00:24:54,260 --> 00:24:55,926 >> David J. Malan tel elke karakter. 563 00:24:55,926 --> 00:24:58,680 En selfs meer saaklik, s bracket Ek verteenwoordig wat? 564 00:24:58,680 --> 00:25:00,950 Sou jy sê. 565 00:25:00,950 --> 00:25:04,084 Jy nie op die plek hier te sit. 566 00:25:04,084 --> 00:25:06,375 >> Publiek: Well-- 567 00:25:06,375 --> 00:25:09,500 David J. Malan So as die woord is-- indien die string is Zamyla, wat starts-- 568 00:25:09,500 --> 00:25:12,380 Publiek: --you hanteer die karakters separately-- 569 00:25:12,380 --> 00:25:13,690 David J. MALAN: Goed. 570 00:25:13,690 --> 00:25:14,190 Presies. 571 00:25:14,190 --> 00:25:17,940 Die vierkante hakies notasie kan jy elke karakter afsonderlik bekom, 572 00:25:17,940 --> 00:25:21,120 so se bracket 0 gaan die wees eerste karakter in die string. 573 00:25:21,120 --> 00:25:24,110 s bracket 1 gaan wees die tweede, en so meer. 574 00:25:24,110 --> 00:25:28,050 So die vraag wat ek vra, hier, in hierdie toestand is wat? 575 00:25:28,050 --> 00:25:33,984 Is die i'th karakter se groter as of gelyk om 'n kleinletter? 576 00:25:33,984 --> 00:25:36,400 En wat beteken dit, hier, met die dubbel-karakters? 577 00:25:36,400 --> 00:25:36,800 Gehoor (saam): En. 578 00:25:36,800 --> 00:25:37,210 David J. Malan En. 579 00:25:37,210 --> 00:25:38,418 Dis net gelykstaande aan die. 580 00:25:38,418 --> 00:25:42,310 En is dit nie 'n navraag in C, moet jy gebruik, lastig, ampersand ampersand. 581 00:25:42,310 --> 00:25:47,520 En dit, omgekeerd, vra, is s se i'th karakter minder as of gelyk 582 00:25:47,520 --> 00:25:49,030 in klein letters z? 583 00:25:49,030 --> 00:25:52,440 En weer, hier is waar begrip van die onderliggende 584 00:25:52,440 --> 00:25:54,550 implementering van 'n rekenaar sin maak. 585 00:25:54,550 --> 00:25:57,330 Let daarop dat, selfs al het ek die dot dot dot daar, 586 00:25:57,330 --> 00:26:04,410 lyk soos 'n deur Z in klein is alle aangrensende waardes uit 97 op tot. 587 00:26:04,410 --> 00:26:07,820 >> En dieselfde vir hoofletters begin op 65. 588 00:26:07,820 --> 00:26:10,410 So het die afhaal, dan, is dat in Engels, 589 00:26:10,410 --> 00:26:12,760 hoe sou jy beskryf watter lyn 24 doen? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Ja? 592 00:26:16,728 --> 00:26:21,575 >> Publiek: Op 24 is dit om te kyk of elke karakter is 'n klein. 593 00:26:21,575 --> 00:26:24,700 David J. Malan Dit kontroleer of elke karakter is 'n klein letter. 594 00:26:24,700 --> 00:26:28,590 So selfs meer saaklik, is die i'th karakter se klein? 595 00:26:28,590 --> 00:26:30,690 Dit is al wat ons uitdrukking hier logies, 596 00:26:30,690 --> 00:26:33,750 'n bietjie kripties, maar uiteindelik mooi reguit. 597 00:26:33,750 --> 00:26:36,480 Is s se i'th karakter klein? 598 00:26:36,480 --> 00:26:40,130 >> As dit so is, en hier is waar dinge 'n bietjie verstand buig 599 00:26:40,130 --> 00:26:44,760 vir net 'n oomblik, as dit so is, gaan voor en druk 'n karakter. 600 00:26:44,760 --> 00:26:47,360 So dit is net 'n tydelike, maar wat karakter? 601 00:26:47,360 --> 00:26:53,710 Hoekom doen ek s bracket i minus hierdie uitdrukking hier? 602 00:26:53,710 --> 00:26:55,110 >> Wel sien die patroon hier. 603 00:26:55,110 --> 00:26:57,380 Die werklike getalle maak nie saak nie so veel nie. 604 00:26:57,380 --> 00:27:02,700 Maar let op dat 97 is hoe ver weg van 65? 605 00:27:02,700 --> 00:27:03,560 >> Publiek: 32. 606 00:27:03,560 --> 00:27:04,480 >> David J. Malan 32. 607 00:27:04,480 --> 00:27:06,890 Hoe ver is 98 van die 66? 608 00:27:06,890 --> 00:27:07,740 >> Publiek: 32. 609 00:27:07,740 --> 00:27:09,890 >> David J. Malan Little c van die groot C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 So is daar 32 hoep uit een brief na die ander. 612 00:27:14,550 --> 00:27:17,790 So eerlik ek, kon vereenvoudig dit dat. 613 00:27:17,790 --> 00:27:20,400 Maar dan is ek soort van harde kodering Hierdie lae vlak van begrip 614 00:27:20,400 --> 00:27:21,740 dat geen leser ooit gaan om te verstaan. 615 00:27:21,740 --> 00:27:25,080 So ek gaan om dit te veralgemeen as ek weet wat die klein letters is groter. 616 00:27:25,080 --> 00:27:28,400 Ek weet dat die hoofletters is kleiner waardes, ironies genoeg. 617 00:27:28,400 --> 00:27:33,216 >> Maar dit is effektief gelykstaande aan sê aftrek 32 van s bracket i. 618 00:27:33,216 --> 00:27:35,430 So in die konteks van hierdie briewe, indien die brief 619 00:27:35,430 --> 00:27:38,950 gebeur a, klein om te wees a, en ek trek 32, 620 00:27:38,950 --> 00:27:43,442 watter uitwerking het wat, wiskundig op kleinletter a? 621 00:27:43,442 --> 00:27:44,400 Publiek: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 David J. Malan kapitaliseer nie. 623 00:27:45,691 --> 00:27:48,440 En inderdaad, dit is hoekom ons program word genoem kapitaliseer nul. 624 00:27:48,440 --> 00:27:51,590 Hierdie program óf kapitaliseer 'n brief, 625 00:27:51,590 --> 00:27:54,580 na die monitor indien dit inderdaad 'n klein letter. 626 00:27:54,580 --> 00:27:59,810 Andersins, in lyn 30, wat moet ek doen as dit is nie 'n klein letter dat ek 627 00:27:59,810 --> 00:28:02,852 op soek na 'n spesifieke herhaling in die lus. 628 00:28:02,852 --> 00:28:03,890 Net druk dit uit. 629 00:28:03,890 --> 00:28:07,010 >> So doen dinge nie verander nie dit is nie eens klein. 630 00:28:07,010 --> 00:28:10,790 Beperk om jouself te bietjie 'n bietjie deur z. 631 00:28:10,790 --> 00:28:12,730 Nou is dit redelik heilig. 632 00:28:12,730 --> 00:28:15,230 Maar aan die einde van die dag, van hierdie is hoe ons eens op 'n tyd, 633 00:28:15,230 --> 00:28:16,460 gehad om dinge te implementeer. 634 00:28:16,460 --> 00:28:19,780 As ek in plaas oop te kapitaliseer een, o God te dank. 635 00:28:19,780 --> 00:28:22,320 Daar is 'n funksie genoem na die boonste wat kan 636 00:28:22,320 --> 00:28:25,410 doen alles wat ons nou net gedoen op 'n redelik lae vlak. 637 00:28:25,410 --> 00:28:28,752 >> Nou na die boonste is interessant want dit is in 'n lêer verklaar, 638 00:28:28,752 --> 00:28:31,210 en jy sal net weet dit deur die nagaan van die dokumentasie, 639 00:28:31,210 --> 00:28:35,730 of vertel, sê, in die klas, waar dit bestaan, in 'n lêer genaamd ctype.h. 640 00:28:35,730 --> 00:28:37,630 So, dit is 'n nuwe vriend van ons. 641 00:28:37,630 --> 00:28:40,750 En na die boonste doen presies wat sy naam suggereer. 642 00:28:40,750 --> 00:28:44,860 >> Jy kan slaag, as 'n argument tussen hierdie hakies, 'n paar karakter. 643 00:28:44,860 --> 00:28:48,390 Ek gaan in die i'th karakter te slaag S met behulp van ons fancy nuwe notering 644 00:28:48,390 --> 00:28:49,870 waarby vierkantige hakies. 645 00:28:49,870 --> 00:28:53,391 En neem 'n raaiskoot, wat is die terugkeer waarde van na die boonste blykbaar gaan 646 00:28:53,391 --> 00:28:53,890 te wees? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 'N hoofletter. 649 00:28:57,770 --> 00:28:58,620 'N hoofletter. 650 00:28:58,620 --> 00:29:02,330 >> So as ek slaag in klein a, hopelik, per definisie van na die boonste, 651 00:29:02,330 --> 00:29:05,600 dit gaan 'n terugkeer hoofletters A. Anders 652 00:29:05,600 --> 00:29:08,590 As dit is nie 'n klein letter in die eerste plek, ek het net druk dit uit. 653 00:29:08,590 --> 00:29:10,800 En inderdaad, kennis van die tweede vriend hier. 654 00:29:10,800 --> 00:29:13,840 Nie net na die boonste bestaan, maar is laer, wat 655 00:29:13,840 --> 00:29:16,200 eintlik antwoorde op die vraag vir my. 656 00:29:16,200 --> 00:29:19,730 >> Nou wie hierdie dinge geskryf het, 10s jare gelede, jy weet wat? 657 00:29:19,730 --> 00:29:23,840 Geïmplementeer om die boonste en is verlaag die gebruik van kode soos hierdie. 658 00:29:23,840 --> 00:29:27,270 Maar weereens, in ooreenstemming met hierdie idee van ekserpering weg, 659 00:29:27,270 --> 00:29:29,190 soort, laer vlak implementering besonderhede. 660 00:29:29,190 --> 00:29:32,600 En staan ​​op die skouers van die mense wat gekom het voor ons, met behulp van funksies 661 00:29:32,600 --> 00:29:36,300 soos om die boonste en laer, wat wonderlik genoeg is mooi 662 00:29:36,300 --> 00:29:40,190 genoem om te sê wat hulle doen, is 'n wonderlike paradigma aan te neem. 663 00:29:40,190 --> 00:29:44,040 >> Nou, dit blyk dat as ek lees die man bladsy vir, sê, na die boonste, 664 00:29:44,040 --> 00:29:45,010 Ek leer iets anders. 665 00:29:45,010 --> 00:29:46,890 So man toUpper. 666 00:29:46,890 --> 00:29:48,050 Dit is 'n bietjie oorweldigend. 667 00:29:48,050 --> 00:29:51,110 Maar kennisgewing, hier is wat melding maak van die kop lêer wat ek moet gebruik. 668 00:29:51,110 --> 00:29:54,460 As 'n eenkant, want dit is misleidend, die funksie 669 00:29:54,460 --> 00:29:59,070 gebruik ints plaas van karakters vir redes van die fout nagaan. 670 00:29:59,070 --> 00:30:01,260 Maar ons sal miskien kom terug na wat in die toekoms. 671 00:30:01,260 --> 00:30:05,910 >> Maar let op, hier, na die boonste bekeerlinge die letter C na hoofletters indien moontlik. 672 00:30:05,910 --> 00:30:07,674 So dit is redelik eenvoudig. 673 00:30:07,674 --> 00:30:09,340 En nou, laat ons 'n bietjie meer spesifiek. 674 00:30:09,340 --> 00:30:12,750 Kom ons kyk na die deel van die man bladsy onder terugkeer waarde. 675 00:30:12,750 --> 00:30:15,420 Die waarde is dat van die bekeerde brief. 676 00:30:15,420 --> 00:30:18,690 Of c, asof die omskepping nie moontlik was nie, 677 00:30:18,690 --> 00:30:20,250 waar c die oorspronklike insette. 678 00:30:20,250 --> 00:30:24,140 Wat ek weet van hier, van die argument aan boonste. 679 00:30:24,140 --> 00:30:25,780 >> So, wat is die afhaal van hierdie? 680 00:30:25,780 --> 00:30:28,060 Die waarde is dat van die bekeerde brief, 681 00:30:28,060 --> 00:30:32,110 of c, die oorspronklike brief, indien die omskakeling nie moontlik was nie. 682 00:30:32,110 --> 00:30:36,460 Wat verbetering kan ek dus maak my kode se ontwerp? 683 00:30:36,460 --> 00:30:37,146 Ja? 684 00:30:37,146 --> 00:30:38,810 >> Publiek: Jy kan die ander verwyder. 685 00:30:38,810 --> 00:30:40,810 David J. Malan Ek kan verwyder die ander verklaring, 686 00:30:40,810 --> 00:30:42,510 en nie net die ander verklaring. 687 00:30:42,510 --> 00:30:44,150 >> Publiek: Jy kan verwyder [onhoorbaar]. 688 00:30:44,150 --> 00:30:46,310 >> David J. Malan Ek kan verwyder die hele vurk 689 00:30:46,310 --> 00:30:48,209 in die pad, die as heeltemal anders. 690 00:30:48,209 --> 00:30:50,250 So ja, laat my oop die finale weergawe van hierdie, 691 00:30:50,250 --> 00:30:55,540 kapitaliseer-2 en sien net hoe, indien jy sal sexy, die kode kry nou, 692 00:30:55,540 --> 00:31:00,040 in wat ek verminder van 'n paar sewe of so lyne tot net vier, 693 00:31:00,040 --> 00:31:03,850 die funksies wat ek bedoel deur bloot 'n beroep na die boonste, 694 00:31:03,850 --> 00:31:09,410 verby in s bracket i, en druk uit, met die plekhouer% c, 695 00:31:09,410 --> 00:31:11,090 daardie spesifieke karakter. 696 00:31:11,090 --> 00:31:14,560 >> Nou waarskynlik, daar is 'n fout, of ten minste die risiko van 'n fout, 697 00:31:14,560 --> 00:31:15,350 in hierdie program. 698 00:31:15,350 --> 00:31:18,200 So net om terug te kom na 'n vroeëre afhaal, 699 00:31:18,200 --> 00:31:21,820 wat moet ek seker ook doen hierdie program is dit meer robuuste te maak, 700 00:31:21,820 --> 00:31:24,974 sodat daar is geen manier wat dit kan crash, selfs in sommige gevalle? 701 00:31:24,974 --> 00:31:26,390 Publiek: Maak seker dit is nie NULL. 702 00:31:26,390 --> 00:31:28,056 David J. Malan Maak seker dit is nie NULL. 703 00:31:28,056 --> 00:31:31,030 So regtig, hierdie super te maak behoorlike, moet ek iets soos dit doen, 704 00:31:31,030 --> 00:31:35,300 As s is nie NULL, dan gaan voort en voer 705 00:31:35,300 --> 00:31:38,470 hierdie reëls van die kode, wat Ek kan dan streepje soos daardie, 706 00:31:38,470 --> 00:31:39,870 en dan sit in my naby stut. 707 00:31:39,870 --> 00:31:41,550 So goed vasmaak saam van die twee idees. 708 00:31:41,550 --> 00:31:42,429 Ja? 709 00:31:42,429 --> 00:31:44,470 Publiek: Kan jy gebruik 'n doen terwyl loop, in plaas? 710 00:31:44,470 --> 00:31:47,270 David J. Malan Kan Ek doen 'n doen terwyl loop? 711 00:31:47,270 --> 00:31:50,020 Publiek: --you wil om seker te maak dat jy eintlik [onhoorbaar]. 712 00:31:50,020 --> 00:31:51,728 David J. Malan Kan gebruik jy 'n doen terwyl? 713 00:31:51,728 --> 00:31:52,450 Kort antwoord, nee. 714 00:31:52,450 --> 00:31:54,700 Omdat jy oor om te stel 'n ander hoek geval. 715 00:31:54,700 --> 00:31:56,660 As die string is van nul lengte. 716 00:31:56,660 --> 00:31:59,600 As ek byvoorbeeld net getref Ingaan, sonder om ooit te tik Zamyla. 717 00:31:59,600 --> 00:32:02,490 Ek gaan jou terug te gee 'n werklike string, soos ons sal uiteindelik sien, 718 00:32:02,490 --> 00:32:03,780 wat zero karakters. 719 00:32:03,780 --> 00:32:05,630 Dit is nog 'n string, dit is net super kort. 720 00:32:05,630 --> 00:32:07,960 Maar as jy 'n doen terwyl, jy gaan blindelings 721 00:32:07,960 --> 00:32:10,050 probeer om iets te doen het met betrekking tot daardie string, 722 00:32:10,050 --> 00:32:12,537 en niks gaan om daar te wees. 723 00:32:12,537 --> 00:32:18,607 >> Publiek: Wel, as jy het doen [onhoorbaar] terwyl s-- 724 00:32:18,607 --> 00:32:21,190 David J. Malan O ek sien, hou om 'n string van die gebruiker. 725 00:32:21,190 --> 00:32:23,525 So kort antwoord, jy kon, en hou neul 726 00:32:23,525 --> 00:32:26,150 hulle te gee 'n string wat is kort genoeg om in te pas in die geheue. 727 00:32:26,150 --> 00:32:26,700 Absoluut. 728 00:32:26,700 --> 00:32:27,630 Ek het net verkies om nie te. 729 00:32:27,630 --> 00:32:30,505 As hulle gee nie vir my die string Ek wil ek ophou, ek gee. 730 00:32:30,505 --> 00:32:33,260 Maar absoluut, wat vir die doel, jy kan absoluut doen. 731 00:32:33,260 --> 00:32:37,500 >> So het die biblioteek se kop lêers wat Ons is nou vertroud met dit, hier. 732 00:32:37,500 --> 00:32:41,550 Standard I / O, CS50.h, string.h, ctype.h, en daar is inderdaad ander. 733 00:32:41,550 --> 00:32:44,460 Sommige van julle het ontdek die wiskunde biblioteek in math.h. 734 00:32:44,460 --> 00:32:48,200 Maar laat ek jou, nou, te hierdie hulpbron wat CS50 personeel, Davin, 735 00:32:48,200 --> 00:32:50,630 en Rob en Gabe bepaalde saamgevoeg het. 736 00:32:50,630 --> 00:32:52,630 Dit sal binnekort 'n skakel op die kursus se webblad. 737 00:32:52,630 --> 00:32:54,870 Dit is bekend CS50 verwysing. 738 00:32:54,870 --> 00:32:58,230 >> Watter net om jou 'n vinnige smaak van dit, werk soos volg. 739 00:32:58,230 --> 00:33:00,740 Laat my gaan reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Jy sal sien op die linkerhand kant 'n oorweldigende lys 741 00:33:02,990 --> 00:33:04,595 funksies wat kom met c. 742 00:33:04,595 --> 00:33:07,790 Maar as ek gee, vir die oomblik, oor iets soos strlen, 743 00:33:07,790 --> 00:33:08,746 Ek kan dit tik daar. 744 00:33:08,746 --> 00:33:10,870 Dit filters af in die lys net wat ek omgee. 745 00:33:10,870 --> 00:33:11,940 Ek gaan om dit te klik. 746 00:33:11,940 --> 00:33:14,740 En nou op die weg is, jy sal sien wat ons hoop 747 00:33:14,740 --> 00:33:18,290 is 'n meer eenvoudige, menslike vriendelike verduideliking van hoe 748 00:33:18,290 --> 00:33:19,170 hierdie funksie werk. 749 00:33:19,170 --> 00:33:20,600 >> Gee die lengte van 'n string. 750 00:33:20,600 --> 00:33:24,060 Hier is 'n opsomming, hier is hoe jy gebruik dit in terme van die kop lêer, 751 00:33:24,060 --> 00:33:27,430 en in terme van wat die funksie lyk in terme van sy argumente. 752 00:33:27,430 --> 00:33:30,250 En dan is hier, opgawes die lengte van 'n string. 753 00:33:30,250 --> 00:33:34,280 Maar vir dié van julle meer gemaklik, jy kan eintlik kliek vir meer gemaklik, 754 00:33:34,280 --> 00:33:37,070 en die inhoud van hierdie bladsy, nou, sal verander 755 00:33:37,070 --> 00:33:41,660 die standaard waardes van wat om te wees jy met behulp van die man bladsy. 756 00:33:41,660 --> 00:33:44,100 >> Met ander woorde, CS50 verwysing is 'n vereenvoudiging 757 00:33:44,100 --> 00:33:46,220 van die mens bladsye deur die personeel, vir studente. 758 00:33:46,220 --> 00:33:49,320 Veral diegene wat minder gemaklik en in tussen, sodat jy 759 00:33:49,320 --> 00:33:51,660 hoef nie te probeer om te draai jou gedagtes rond, eerlik, 760 00:33:51,660 --> 00:33:55,030 'n paar redelik kriptiese sintaksis en dokumentasie iewers. 761 00:33:55,030 --> 00:33:57,650 >> So hou dit in gedagte in die dae wat kom. 762 00:33:57,650 --> 00:33:59,560 So hier, weer, is 'n Zamyla. 763 00:33:59,560 --> 00:34:03,255 Kom ons vra nou 'n vraag wat 'n bietjie meer menslike toeganklik. 764 00:34:03,255 --> 00:34:05,380 Danksy Chang, wat al druk meer olifante 765 00:34:05,380 --> 00:34:07,090 ononderbroke vir die afgelope paar dae. 766 00:34:07,090 --> 00:34:09,730 Ons het 'n geleentheid te gee ten minste een van hulle weg. 767 00:34:09,730 --> 00:34:13,239 As ons maar net 'n vrywilliger kry om te kom op tot teken op die skerm. 768 00:34:13,239 --> 00:34:14,530 Hoe gaan hier? 769 00:34:14,530 --> 00:34:15,340 >> Kom op. 770 00:34:15,340 --> 00:34:16,720 Wat is jou naam? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 David J. Malan Alex. 773 00:34:17,760 --> 00:34:18,259 Alle regte. 774 00:34:18,259 --> 00:34:19,388 Alex, kom op. 775 00:34:19,388 --> 00:34:21,679 Ons is oor om te sien jou handskrif op die skerm hier. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Alle reg, lekker om jou te ontmoet. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice om jou ontmoet. 779 00:34:26,429 --> 00:34:27,512 >> David J. Malan Alle regte. 780 00:34:27,512 --> 00:34:28,969 So, super eenvoudige oefening. 781 00:34:28,969 --> 00:34:31,440 Bar is nie hoog te kry 'n olifant vandag. 782 00:34:31,440 --> 00:34:33,439 Jy speel die rol van getstring. 783 00:34:33,439 --> 00:34:35,980 En ek gaan net vir jou die string wat jy gekry het. 784 00:34:35,980 --> 00:34:38,080 En dink dat jy, getstring, is genoem. 785 00:34:38,080 --> 00:34:42,480 En die mens, soos ek, het getik in Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Net gaan voort en skryf Zamyla op die skerm asof jy gekry het om dit 787 00:34:45,650 --> 00:34:47,250 en gestoor dit iewers in die geheue. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Laat ruimte vir wat verskeie sal wees ander words-- dit is OK, gaan hou. 790 00:34:55,570 --> 00:34:59,620 >> [Gelag] 791 00:34:59,620 --> 00:35:00,800 >> So Zamyla, Uitstekende. 792 00:35:00,800 --> 00:35:04,880 So nou dink dat jy, getstring, weer genoem. 793 00:35:04,880 --> 00:35:09,350 En daarom het ek u voorsien, by die klawerbord, met 'n ander naam, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Alle regte. 796 00:35:18,060 --> 00:35:22,380 En nou het die volgende keer getstring is genoem, tik ek in iets soos Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Jy is regtig neem aan die hart ewetoeganklike geheue. 798 00:35:27,560 --> 00:35:29,631 Watter is die tekens van alles heeltemal lukraak. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Gelag] 801 00:35:31,104 --> 00:35:32,520 ALEX: Jammer my handskrif is sleg. 802 00:35:32,520 --> 00:35:33,770 David J. Malan Nee, dis OK. 803 00:35:33,770 --> 00:35:40,480 En hoe oor Rob, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Goed. 805 00:35:41,020 --> 00:35:43,853 So ek het jy nie verwag sou soort lê dinge op hierdie manier. 806 00:35:43,853 --> 00:35:45,020 Maar ons kan dit laat werk. 807 00:35:45,020 --> 00:35:48,810 So hoe het jy te werk gaan lê uit hierdie karakters in die geheue? 808 00:35:48,810 --> 00:35:51,310 Met ander woorde, as ons dink aan hierdie vierkantige swart skerm 809 00:35:51,310 --> 00:35:53,550 as wat 'n rekenaar se geheue, of die geheue. 810 00:35:53,550 --> 00:35:55,850 >> En onthou dat geheue is net 'n hele klomp van grepe, 811 00:35:55,850 --> 00:35:57,480 en grepe is 'n hele klomp van die stukkies. 812 00:35:57,480 --> 00:35:59,350 En stukkies is een of ander manier geïmplementeer word, oor die algemeen 813 00:35:59,350 --> 00:36:01,119 met 'n vorm van elektrisiteit in hardeware. 814 00:36:01,119 --> 00:36:03,160 So dit is soort van die gelaagdheid ons gepraat het oor 815 00:36:03,160 --> 00:36:04,510 en kan nou as vanselfsprekend aanvaar. 816 00:36:04,510 --> 00:36:07,020 Hoe het jy te werk gaan besluit waar om te skryf 817 00:36:07,020 --> 00:36:11,634 Rob versus Gabe versus Belinda versus Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Ek het dit net in die gelas dat jy my vertel het. 819 00:36:14,020 --> 00:36:15,650 >> David J. Malan En dit is waar. 820 00:36:15,650 --> 00:36:20,100 Maar wat gereeld waar jy Belinda se naam en Gabe se naam? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Niks? 822 00:36:20,764 --> 00:36:22,930 David J. Malan [lag] So wat werk, is dit goed. 823 00:36:22,930 --> 00:36:25,290 So rekenaars is min meer ordelike as dit. 824 00:36:25,290 --> 00:36:29,000 En so wanneer ons implement-- daar bly net vir 'n moment-- wanneer ons eintlik 825 00:36:29,000 --> 00:36:31,470 iets soos implementeer getstring in 'n rekenaar, 826 00:36:31,470 --> 00:36:34,480 Zamyla kan gelê word redelik baie soos jy gedoen het op die skerm, is daar. 827 00:36:34,480 --> 00:36:36,660 >> En wat is die sleutel tot kennis hier is, wat Alex het, 828 00:36:36,660 --> 00:36:40,260 is daar 'n soort van 'n afbakening onder elk van hierdie woorde, reg? 829 00:36:40,260 --> 00:36:46,580 Jy het nie skryf Z-A-M-Y-L-A-B-E-L-ek-N-D-A-G-A--b 830 00:36:46,580 --> 00:36:49,740 Met ander woorde, daar is 'n soort van afbakening wat blyk te wees, 831 00:36:49,740 --> 00:36:52,370 soort, ewekansige spasiëring tussen die verskillende woorde. 832 00:36:52,370 --> 00:36:54,120 Maar dit is goed, want ons mense kan nou 833 00:36:54,120 --> 00:36:56,470 visualiseer dat hierdie vier verskillende snare. 834 00:36:56,470 --> 00:36:59,540 Dit is nie net 'n ry van baie van die karakters. 835 00:36:59,540 --> 00:37:04,190 So 'n rekenaar, dan, intussen, dalk 'n string neem soos Zamyla, 836 00:37:04,190 --> 00:37:07,220 sit elk van die letters binnekant van 'n greep van die geheue. 837 00:37:07,220 --> 00:37:10,400 Maar dat die getal is veel groter, natuurlik, as ses karakters. 838 00:37:10,400 --> 00:37:11,690 >> Daar is 'n hele klomp van die geheue. 839 00:37:11,690 --> 00:37:15,330 En so van nou af, is hierdie rooster van bokse gaan 840 00:37:15,330 --> 00:37:17,560 wat Alex net voor te stel het hier op die skerm. 841 00:37:17,560 --> 00:37:20,937 En nou, Alex, ons kan jy 'n bied blou of 'n oranje olifant uit Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Ek sal 'n blou olifant neem. 843 00:37:22,270 --> 00:37:23,120 David J. Malan 'n blou olifant. 844 00:37:23,120 --> 00:37:25,580 So 'n groot applous, As ons kon, vir Alex hier. 845 00:37:25,580 --> 00:37:26,100 >> [Applous] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Dankie. 847 00:37:26,766 --> 00:37:28,820 David J. Malan Dankie. 848 00:37:28,820 --> 00:37:36,230 So het die afhaal is dat selfs al is die patroon soort verander met verloop van tyd, hier 849 00:37:36,230 --> 00:37:40,430 op die raad, was daar hierdie afbakening tussen die verskillende snare 850 00:37:40,430 --> 00:37:42,610 Alex het vir ons. 851 00:37:42,610 --> 00:37:45,230 Nou rekenaars, eerlik, kan dieselfde ding doen. 852 00:37:45,230 --> 00:37:48,210 Hulle kon soort van plop stringe oral in die geheue. 853 00:37:48,210 --> 00:37:50,710 Hier, hier, hier, hier. 854 00:37:50,710 --> 00:37:52,020 >> Hulle kon presies dit te doen. 855 00:37:52,020 --> 00:37:54,280 Maar, natuurlik, dit is waarskynlik nie die beste beplanning. 856 00:37:54,280 --> 00:37:54,780 Reg? 857 00:37:54,780 --> 00:37:57,340 As ek aanhou vra Alex te kry name, waarskynlik hy wil 858 00:37:57,340 --> 00:38:01,370 sit 'n paar meer hier, miskien tot hier, hier, hier, uiteindelik 859 00:38:01,370 --> 00:38:02,211 hier. 860 00:38:02,211 --> 00:38:05,460 Maar met 'n bietjie meer beplanning, beslis, ons kon lê dinge uit meer skoon. 861 00:38:05,460 --> 00:38:07,350 En inderdaad, dit is wat 'n rekenaar nie. 862 00:38:07,350 --> 00:38:10,720 >> Maar die catch is dat As die volgende string wat ek kry 863 00:38:10,720 --> 00:38:14,050 nadat Zamyla is iets soos die Belinda, 864 00:38:14,050 --> 00:38:17,929 stel waar ons kan skryf letter B met betrekking tot hierdie rooster? 865 00:38:17,929 --> 00:38:18,720 Waar sal jy gaan? 866 00:38:18,720 --> 00:38:21,480 Aan die regterkant van die a, onder die Z, onder die n? 867 00:38:21,480 --> 00:38:23,204 Wat sou jou eerste instink wees? 868 00:38:23,204 --> 00:38:24,120 GEHOOR: Onder die z. 869 00:38:24,120 --> 00:38:25,100 David J. Malan So onder die z. 870 00:38:25,100 --> 00:38:26,530 En dit is mooi eenvoudig, reg? 871 00:38:26,530 --> 00:38:29,321 Dit is soort van netjies, dit is wat ons doen op 'n klavier wanneer ons druk Enter 872 00:38:29,321 --> 00:38:31,770 of 'n e-pos wanneer 'n opsomming lys van dinge. 873 00:38:31,770 --> 00:38:34,310 Maar die werklikheid is dat rekenaars probeer om meer doeltreffend te wees, 874 00:38:34,310 --> 00:38:37,170 en gedrang beslis soveel data in geheue as moontlik, 875 00:38:37,170 --> 00:38:38,890 sodat jy nie enige grepe mors nie. 876 00:38:38,890 --> 00:38:41,545 Sodat jy nie mors nie 'n skerm Real Estate. 877 00:38:41,545 --> 00:38:44,170 En die probleem is, is dat as ons letterlik die brief 878 00:38:44,170 --> 00:38:49,940 b na 'n, hoe gaan ons te weet waar Zamyla se naam eindig 879 00:38:49,940 --> 00:38:51,840 en die Belinda se naam begin? 880 00:38:51,840 --> 00:38:55,270 So jy mense net voorgestel, wel, druk die Enter-sleutel, wese. 881 00:38:55,270 --> 00:38:56,410 Sit dit hier neer. 882 00:38:56,410 --> 00:38:59,750 Of selfs as Alex het, net begin skryf die volgende naam onder die vorige een, 883 00:38:59,750 --> 00:39:01,583 en onder daardie een, en dan onder daardie een. 884 00:39:01,583 --> 00:39:02,510 Dit is 'n visuele cue. 885 00:39:02,510 --> 00:39:05,960 >> Rekenaars het nog 'n visuele cue, maar dit is 'n bietjie meer bondige. 886 00:39:05,960 --> 00:39:07,840 Dit is hierdie funky karakter. 887 00:39:07,840 --> 00:39:11,890 Agteroorskuinsstreep 0, wat miskien herinner aan agteroorskuinsstreep n, 888 00:39:11,890 --> 00:39:12,640 en so meer, nou. 889 00:39:12,640 --> 00:39:14,120 Die spesiale ontsnapping rye. 890 00:39:14,120 --> 00:39:19,120 Agteroorskuinsstreep 0 is die weg van die verteenwoordig agt nul stukkies in 'n ry. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Die manier waarop jy spreek wat nie te getref die getal nul op jou sleutelbord, 893 00:39:26,130 --> 00:39:28,140 want in die feit dat 'n ASCII kar. 894 00:39:28,140 --> 00:39:30,990 Dit lyk soos 'n nommer, maar is eintlik 'n desimale getal 895 00:39:30,990 --> 00:39:35,910 wat verteenwoordig die omsendbrief Than, die omsendbrief lettertipe. 896 00:39:35,910 --> 00:39:38,410 Intussen agteroorskuinsstreep nul beteken letterlik 897 00:39:38,410 --> 00:39:40,700 sit agt nul grepe hier vir my. 898 00:39:40,700 --> 00:39:42,136 >> So, dit is ietwat arbitrêr. 899 00:39:42,136 --> 00:39:44,260 Ons kan 'n patroon gebruik het van stukkies, maar om die wêreld 900 00:39:44,260 --> 00:39:46,610 besluit om 'n jaar gelede, dat voor te stel 901 00:39:46,610 --> 00:39:49,710 die einde van 'n string in die geheue, net 'n hele klomp van die nulle. 902 00:39:49,710 --> 00:39:51,000 Omdat ons kan opspoor nie. 903 00:39:51,000 --> 00:39:54,790 Nou dit beteken dat geen letter van die alfabet voorgestel kan word met nulle. 904 00:39:54,790 --> 00:39:58,480 >> Maar dis OK, ons het reeds gesien wat ons gebruik 65 op in 97 op tot. 905 00:39:58,480 --> 00:40:00,290 Ons het nie enige plek kry naby aan al die nulle. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 So Belinda in 'n rekenaar se geheue eintlik gaan om hier te gaan. 908 00:40:06,540 --> 00:40:09,764 Ek het getrek dit in geel net ons aandag te vestig op dit. 909 00:40:09,764 --> 00:40:11,680 En kennis, ook hierdie is heeltemal arbitrêr. 910 00:40:11,680 --> 00:40:12,680 Ek het getrek dit as 'n rooster. 911 00:40:12,680 --> 00:40:14,460 Soos, geheue is net 'n paar fisiese voorwerp. 912 00:40:14,460 --> 00:40:17,300 Dit hoef nie noodwendig rye en kolomme, per se. 913 00:40:17,300 --> 00:40:20,490 Dit is net 'n hele klomp van grepe in hardeware geïmplementeer een of ander manier. 914 00:40:20,490 --> 00:40:22,817 Maar as daar na Belinda ek getik in Gabe se naam, 915 00:40:22,817 --> 00:40:25,650 hy gaan aan die einde hier in die geheue, en as ek getik in Daven se naam, 916 00:40:25,650 --> 00:40:27,316 byvoorbeeld, gaan hy hier beland. 917 00:40:27,316 --> 00:40:29,310 En ek kan voortgaan om te skryf nog meer name. 918 00:40:29,310 --> 00:40:32,100 >> Ongelukkig, as ek probeer om te skryf 'n super lang naam, 919 00:40:32,100 --> 00:40:33,730 Ek kan uiteindelik loop uit van die geheue. 920 00:40:33,730 --> 00:40:37,810 In welke geval, getstring is gaan NULL om terug te keer, soos ons sê. 921 00:40:37,810 --> 00:40:41,720 Maar gelukkig, ten minste in hierdie visuele hier, ons het nie heeltemal so ver. 922 00:40:41,720 --> 00:40:45,860 >> Nou wat is lekker is dat dit algemene idee van die behandeling van dinge 923 00:40:45,860 --> 00:40:49,720 as in bokse is verteenwoordiger van 'n funksie van die C 924 00:40:49,720 --> 00:40:52,690 en 'n baie tale, bekend as 'n skikking. 925 00:40:52,690 --> 00:40:55,490 'N skikking is 'n ander tipe van data. 926 00:40:55,490 --> 00:40:57,380 Dit is 'n data struktuur, as jy wil. 927 00:40:57,380 --> 00:41:01,160 Struktuur in die sin van dit regtig, soort, lyk soos 'n boks, ten minste 928 00:41:01,160 --> 00:41:02,320 in jou geestesoog. 929 00:41:02,320 --> 00:41:09,680 'N skikking is 'n aaneenlopende volgorde van identiese data tipes, 930 00:41:09,680 --> 00:41:11,330 terug na Terug op terug. 931 00:41:11,330 --> 00:41:14,720 >> So 'n string, in ander woorde, is 'n verskeidenheid van karakters. 932 00:41:14,720 --> 00:41:16,120 'N verskeidenheid van die karakters. 933 00:41:16,120 --> 00:41:19,070 Maar dit blyk jy kan skikkings van trosse van die dinge. 934 00:41:19,070 --> 00:41:21,870 In werklikheid, kan ons selfs ' getalle in 'n skikking. 935 00:41:21,870 --> 00:41:23,920 So het die vorm waarin ons gaan om te begin 936 00:41:23,920 --> 00:41:26,590 verklaar hierdie data struktuur bekend as 'n skikking 937 00:41:26,590 --> 00:41:28,250 gaan ook vierkantige hakies te gebruik. 938 00:41:28,250 --> 00:41:31,500 Maar hierdie vierkantige hakies gaan het verskillende betekenis in hierdie konteks. 939 00:41:31,500 --> 00:41:33,450 >> En laat ons sien dit as volg. 940 00:41:33,450 --> 00:41:36,780 Veronderstel dat ek oopgemaak 'n nuwe lêer hier. 941 00:41:36,780 --> 00:41:38,535 En ek slaan dit as ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 En Ek sal hierdie spaar in my gids hier. 944 00:41:43,470 --> 00:41:46,130 En nou is ek gaan om voort te gaan en begin om iets te tik 945 00:41:46,130 --> 00:41:53,940 soos sluit CS50.h, sluit stdio.h, int belangrikste leemte. 946 00:41:53,940 --> 00:41:57,370 En dan binnekant van hier, ek wil eers 'n int genoem ouderdom. 947 00:41:57,370 --> 00:42:01,371 >> En ek gaan om dit te gebruik om 'n te kry int van die gebruiker vir sy of haar ouderdom. 948 00:42:01,371 --> 00:42:04,620 Maar hierdie program is bedoel om gebruik te word deur verskeie mense, ongeag die konteks. 949 00:42:04,620 --> 00:42:05,490 Ek het 'n lyn van mense. 950 00:42:05,490 --> 00:42:08,281 Almal van hulle het om te tik in hul ouderdom vir miskien 'n bietjie, ek weet nie, 951 00:42:08,281 --> 00:42:10,530 kompetisie, of gebeurtenis dat hulle aangekom het vir. 952 00:42:10,530 --> 00:42:13,030 So die volgende persoon, ek moet 'n ander veranderlike. 953 00:42:13,030 --> 00:42:15,790 >> Want as ek net nie ouderdom kry getInt, dis 954 00:42:15,790 --> 00:42:18,500 gaan afranselen, of oorskryf die vorige persoon se ouderdom. 955 00:42:18,500 --> 00:42:19,760 So dit is nie goed nie. 956 00:42:19,760 --> 00:42:21,790 So my eerste instink mag wees, o, al die regte, 957 00:42:21,790 --> 00:42:26,260 as ek wil verskeie mense se te kry ages-- kom ons noem hierdie age1, 958 00:42:26,260 --> 00:42:31,280 int age2 kry int, int age3 kry getInt. 959 00:42:31,280 --> 00:42:35,340 En nou is ek gaan gebruik sommige pseudokode kode hier. 960 00:42:35,340 --> 00:42:37,679 >> Doen iets met dié nommers. 961 00:42:37,679 --> 00:42:40,470 Ons sal laat dit vir 'n ander dag wat ons is daar te doen nie, want ons het net 962 00:42:40,470 --> 00:42:44,200 omgee vir die oomblik oor age1, age2, age3. 963 00:42:44,200 --> 00:42:46,450 Ongelukkig, as ek stel hierdie program 964 00:42:46,450 --> 00:42:51,140 en sit dit in die voorkant van die werklike gebruikers, Wat is die fundamentele swak ontwerp 965 00:42:51,140 --> 00:42:53,890 besluit dit lyk asof ek gemaak het? 966 00:42:53,890 --> 00:42:54,624 Ja? 967 00:42:54,624 --> 00:42:55,499 Publiek: [onhoorbaar] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 David J. Malan Ja, Ek het nie eens probeer 970 00:42:59,820 --> 00:43:02,028 om uit te vind hoeveel eeue Ek het eintlik omgee oor? 971 00:43:02,028 --> 00:43:05,380 As ek het minder as drie mense hier, en dus minder as drie eeue, 972 00:43:05,380 --> 00:43:07,260 Ek is nog steeds blindelings verwag drie. 973 00:43:07,260 --> 00:43:08,720 God verbied vier mense opdaag. 974 00:43:08,720 --> 00:43:10,990 My program sal nie net nog ondersteun. 975 00:43:10,990 --> 00:43:13,280 >> En so gaan dit, 'n lang storie Kortom, is nie 'n goeie gewoonte. 976 00:43:13,280 --> 00:43:13,780 Reg? 977 00:43:13,780 --> 00:43:16,530 Ek was in wese die kopiëring en plak kode en net die opstel van 978 00:43:16,530 --> 00:43:17,430 die veranderlike name. 979 00:43:17,430 --> 00:43:22,410 En, my God, as jy het, nie drie ouderdomme, maar 10, of 100, of selfs 6500 980 00:43:22,410 --> 00:43:23,820 voorgraadse, byvoorbeeld. 981 00:43:23,820 --> 00:43:26,950 Dit is nie van plan om veral in elegante kode, of volhoubaar is. 982 00:43:26,950 --> 00:43:29,200 Jy gaan te hê herskryf die program elke keer 983 00:43:29,200 --> 00:43:30,760 jou aantal mense verander. 984 00:43:30,760 --> 00:43:35,090 >> So gelukkig in ons werklike ages.c lêer vir vandag, 985 00:43:35,090 --> 00:43:36,970 Ons het 'n meer slim oplossing. 986 00:43:36,970 --> 00:43:39,800 Eerstens, ek gaan die leen bou ons 'n paar keer gebruik, 987 00:43:39,800 --> 00:43:43,744 dit doen, terwyl loop, in orde te kry die aantal mense in die kamer. 988 00:43:43,744 --> 00:43:46,910 Ek gaan net om die gebruiker te teister, weer en weer, totdat hy of sy vir my gee 989 00:43:46,910 --> 00:43:49,260 'n waarde van N is dit 'n positiewe heelgetal. 990 00:43:49,260 --> 00:43:51,590 >> Ek kon gebruik het, het verlede tyd ons kry positiewe int. 991 00:43:51,590 --> 00:43:53,720 Maar ons het nie dat vir die regte, so ek het voor 992 00:43:53,720 --> 00:43:55,660 en weer geïmplementeer hierdie idee. 993 00:43:55,660 --> 00:43:58,410 Nou hier, dit is die nuwe truuk. 994 00:43:58,410 --> 00:44:02,260 In reël 27, as die kommentaar in lyn 26 aandui, 995 00:44:02,260 --> 00:44:05,180 Verklaar 'n skikking waarin almal se ouderdom te stoor. 996 00:44:05,180 --> 00:44:09,320 >> So as jy wil te kry, nie een int, nie twee ints, maar 'n hele klomp van die ints. 997 00:44:09,320 --> 00:44:13,800 Spesifiek N heelgetalle, was n krag drie, kan wees 100, kan wees 1000. 998 00:44:13,800 --> 00:44:17,570 Die sintaksis, eenvoudig is om te sê, wat data tipe wil jy hê? 999 00:44:17,570 --> 00:44:19,620 Wat jy wil om te bel wat deel van die geheue? 1000 00:44:19,620 --> 00:44:23,530 Wat wil jy die rooster te noem wat lyk soos hierdie picturaal? 1001 00:44:23,530 --> 00:44:27,700 >> En in hakies hier, sê jy hoe groot jy die skikking te wees. 1002 00:44:27,700 --> 00:44:30,450 En so het vroeër, toe ek gesê het die sintaksis is 'n bietjie anders hier, 1003 00:44:30,450 --> 00:44:33,614 ons is nog steeds met behulp van vierkantige hakies, maar wanneer ek verklaar 'n skikking, 1004 00:44:33,614 --> 00:44:35,530 die aantal binnekant van die vierkantige hakies middel 1005 00:44:35,530 --> 00:44:37,610 hoe groot wil jy die skikking te wees. 1006 00:44:37,610 --> 00:44:42,490 >> In teenstelling hiermee, wanneer ons gebruik is bracket i 'n oomblik gelede, is 'n string, 1007 00:44:42,490 --> 00:44:46,820 is inderdaad 'n verskeidenheid van karakters, maar wanneer jy nie verklaar 'n veranderlike, 1008 00:44:46,820 --> 00:44:49,760 Soos met hierdie navraag hier jy net om 1009 00:44:49,760 --> 00:44:54,280 'n spesifieke indeks, 'n spesifieke element van dié skikking. 1010 00:44:54,280 --> 00:44:57,090 Sodra ons weet dat die res hiervan is eenvoudig. 1011 00:44:57,090 --> 00:45:00,765 As nuwe ek eerste gaan druk Wat is die ouderdom van persoon getal i. 1012 00:45:00,765 --> 00:45:03,890 Waar ek net sê persoon nommer een, persoon se nommer twee, persoon nommer drie. 1013 00:45:03,890 --> 00:45:06,306 >> En ek is net besig met rekenkundige, sodat hulle soos normale mense, 1014 00:45:06,306 --> 00:45:09,030 ons tel van een van hierdie program, en nie van nul. 1015 00:45:09,030 --> 00:45:13,620 Toe bel ek getint, maar ek slaan die antwoord in die eeue-hakies i. 1016 00:45:13,620 --> 00:45:16,610 Wat is die i'th ouderdom in die skikking. 1017 00:45:16,610 --> 00:45:21,640 So, terwyl die laaste keer dat ons is die behandeling hierdie bokse as karakters vir Zamyla se naam, 1018 00:45:21,640 --> 00:45:22,490 en ander. 1019 00:45:22,490 --> 00:45:26,530 Nou, hierdie bokse verteenwoordig 32 stukkies, of vier grepe 1020 00:45:26,530 --> 00:45:29,510 waarin ons kan stoor 'n int, 'n int, 'n int. 1021 00:45:29,510 --> 00:45:31,890 Al wat, weer, is dieselfde data tipe. 1022 00:45:31,890 --> 00:45:33,890 >> Nou moet ek iets dom, soos die tyd verbygaan, net 1023 00:45:33,890 --> 00:45:35,510 te regverdig hierdie program te skryf. 1024 00:45:35,510 --> 00:45:40,050 En dan hier, het ek weer Itereer oor die skikking gesê 'n jaar van nou af, 1025 00:45:40,050 --> 00:45:43,090 persoon nommer een wil iets jaar oud. 1026 00:45:43,090 --> 00:45:45,010 En om uit te vind wat math-- Ek bedoel, dit 1027 00:45:45,010 --> 00:45:49,260 is nie baie ingewikkeld arithmetic-- Ek voeg net een van hul ouderdom. 1028 00:45:49,260 --> 00:45:51,240 Net om te demonstreer, weer, hierdie. 1029 00:45:51,240 --> 00:45:57,910 >> Net soos wat ek kan kruip in 'n string, s, so kan ek indeks in 'n verskeidenheid van ouderdomme, 1030 00:45:57,910 --> 00:45:59,950 soos wat daar is. 1031 00:45:59,950 --> 00:46:03,340 So waar is hierdie gaan wees om ons? 1032 00:46:03,340 --> 00:46:07,070 So sal ons sien, uiteindelik, 'n n paar dinge in die dae wat kom. 1033 00:46:07,070 --> 00:46:09,510 Een, al die tyd, toe jou eie programme te skryf, 1034 00:46:09,510 --> 00:46:11,239 soos Mario, gulsig, krediet. 1035 00:46:11,239 --> 00:46:13,780 Jy is die naam van die tik die program en slaan Enter. 1036 00:46:13,780 --> 00:46:15,610 En dan kry die gebruiker se insette. 1037 00:46:15,610 --> 00:46:18,137 >> Met getString, getInt, getLongLong, of die wil. 1038 00:46:18,137 --> 00:46:20,720 Maar dit blyk dat C ondersteun iets genoem command line 1039 00:46:20,720 --> 00:46:25,740 argumente, wat gaan ons te laat eintlik op die woorde wat jy tik, 1040 00:46:25,740 --> 00:46:28,570 by die flikkerende vinnige, na jou program se naam. 1041 00:46:28,570 --> 00:46:31,430 >> So in die dae, moet jy om te kom dalk iets soos Caesar tik, 1042 00:46:31,430 --> 00:46:34,950 of ./caesar nommer 13, daarna. 1043 00:46:34,950 --> 00:46:36,070 Ons sal sien hoe dit werk. 1044 00:46:36,070 --> 00:46:37,550 Omdat inderdaad in probleem sit twee, ons is 1045 00:46:37,550 --> 00:46:39,383 gaan jou bekend te stel om 'n bietjie iets 1046 00:46:39,383 --> 00:46:42,360 herinner aan Ralphie se daag vroeër van kartografie. 1047 00:46:42,360 --> 00:46:43,970 Die kuns van skommeling inligting. 1048 00:46:43,970 --> 00:46:46,660 Dit, in werklikheid, is baie herinner aan wat Ralphie het. 1049 00:46:46,660 --> 00:46:51,380 >> Dit is 'n voorbeeld van 'n enkripsie algoritme genoem rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Wat beteken eenvoudig draai die letters in die alfabet 13 plekke. 1051 00:46:54,910 --> 00:46:58,309 En as jy dit doen, sal jy nou sien wat, miskien, 'n bekende frase. 1052 00:46:58,309 --> 00:47:01,100 Maar die manier waarop ons gaan gebruik hierdie, uiteindelik, is meer algemeen. 1053 00:47:01,100 --> 00:47:04,390 >> In P sit twee, in die standaard uitgawe, jy sal 'n paar van die getalle te implementeer, 1054 00:47:04,390 --> 00:47:06,720 een genoem Caesar, een wat geroep is Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Beide van hulle is rotasie getalle, in een of ander manier wat jy 1056 00:47:10,090 --> 00:47:11,826 draai een letter in 'n ander brief. 1057 00:47:11,826 --> 00:47:12,950 En Caesar is super eenvoudig. 1058 00:47:12,950 --> 00:47:16,220 Jy voeg een, het jy 13 voeg, of 'n getal tot 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere doen dit op 'n per brief basis. 1060 00:47:19,570 --> 00:47:22,140 So Vigenere, soos jy sal sien in die spec, is meer veilig is. 1061 00:47:22,140 --> 00:47:24,973 >> Maar aan die einde van die dag wat jy sal implementeer en P het twee, 1062 00:47:24,973 --> 00:47:29,050 is dat die sleutel wat jy maak albei gebruik vir enkripsie en dekripsie. 1063 00:47:29,050 --> 00:47:32,160 Met verwysing na die proses van die draai gewone teks, 'n paar oorspronklike boodskap 1064 00:47:32,160 --> 00:47:34,490 in reken teks, wat is iets geïnkripteer. 1065 00:47:34,490 --> 00:47:36,220 En dit dan weer decrypten. 1066 00:47:36,220 --> 00:47:38,119 >> In die hacker uitgawe, intussen, sal jy 1067 00:47:38,119 --> 00:47:40,660 getaak met iets soortgelyks in die gees, waar ons sal gee jou 1068 00:47:40,660 --> 00:47:44,610 'n lêer van 'n tipiese Linux, of Mac, of Unix rekenaar genoem Etsy 1069 00:47:44,610 --> 00:47:47,800 wagwoord, wat 'n hele bevat n klomp van die gebruikers name en wagwoorde. 1070 00:47:47,800 --> 00:47:50,932 En dié wagwoorde het al geïnkripteer of hashed, 1071 00:47:50,932 --> 00:47:53,140 om so te praat, meer behoorlik as jy sien in die spec. 1072 00:47:53,140 --> 00:47:57,090 >> En die hacker uitgawe sal 'n uitdaging jy met die neem van 'n inset soos hierdie, 1073 00:47:57,090 --> 00:47:58,800 en kraak die wagwoord. 1074 00:47:58,800 --> 00:48:02,590 Dit is, uitzoeken wat die Human se wagwoord eintlik was. 1075 00:48:02,590 --> 00:48:05,570 Omdat, ja, wagwoorde oor die algemeen nie in die helder gestoor word, 1076 00:48:05,570 --> 00:48:08,260 en in die algemeen wagwoorde moet moeilik om te raai nie. 1077 00:48:08,260 --> 00:48:09,610 Dit is nie dikwels die geval is. 1078 00:48:09,610 --> 00:48:12,110 >> En wat ek gedink ons ​​wil doen, is om sluit af met 'n paar minute 1079 00:48:12,110 --> 00:48:15,160 blik op 'n besonder swak keuse van wagwoorde 1080 00:48:15,160 --> 00:48:17,260 van 'n film wat jy kan met liefde onthou. 1081 00:48:17,260 --> 00:48:18,915 En indien nie, moet jy huur. 1082 00:48:18,915 --> 00:48:20,070 >> [Video speel] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Jy monster, wat gaan aan? 1084 00:48:22,320 --> 00:48:24,240 Wat doen jy aan my dogter? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit My in te voer briljante jong plastiese chirurg, 1086 00:48:28,010 --> 00:48:30,010 Dokter Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Die grootste neus werk man in die heelal en Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> Your Hoogheid. 1089 00:48:36,140 --> 00:48:36,820 >> -Nose Werk? 1090 00:48:36,820 --> 00:48:37,700 Ek verstaan ​​nie. 1091 00:48:37,700 --> 00:48:39,070 Sy het reeds 'n neus-job. 1092 00:48:39,070 --> 00:48:40,800 Dit was haar soet 16 teenwoordig. 1093 00:48:40,800 --> 00:48:42,590 >> Nee, dis nie wat jy dink. 1094 00:48:42,590 --> 00:48:44,490 Dit is baie, baie erger. 1095 00:48:44,490 --> 00:48:48,160 As jy nie gee my nie die kombinasie van die lug skild, 1096 00:48:48,160 --> 00:48:52,748 dokter Schlotkin sal gee jou dogter terug haar ou neus. 1097 00:48:52,748 --> 00:48:53,748 - [Gasps] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Waar het jy dit? 1100 00:48:59,652 --> 00:49:00,640 >> Alles reg. 1101 00:49:00,640 --> 00:49:02,506 Ek sal jou vertel, ek sal jou vertel. 1102 00:49:02,506 --> 00:49:03,498 >> Nee, Pappa, no. 1103 00:49:03,498 --> 00:49:04,490 Jy moet nie. 1104 00:49:04,490 --> 00:49:06,090 >> -You're Reg om my liewe. 1105 00:49:06,090 --> 00:49:07,390 Ek sal jou nuwe neus mis. 1106 00:49:07,390 --> 00:49:10,990 Maar ek sal nie vir hulle die kombinasie maak nie saak wat. 1107 00:49:10,990 --> 00:49:12,450 >> -Baie Goed. 1108 00:49:12,450 --> 00:49:14,830 Dokter Schlotkin, doen jou ergste. 1109 00:49:14,830 --> 00:49:15,744 >> -My plesier. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> Nee! 1112 00:49:20,800 --> 00:49:22,780 Wag, wag. 1113 00:49:22,780 --> 00:49:24,000 Ek sal jou vertel. 1114 00:49:24,000 --> 00:49:25,830 Ek sal jou vertel. 1115 00:49:25,830 --> 00:49:28,270 >> -Ek Het geweet dit sou werk. 1116 00:49:28,270 --> 00:49:31,390 Alle reg, gee dit aan my. 1117 00:49:31,390 --> 00:49:36,220 >> -Die kombinasie is een. 1118 00:49:36,220 --> 00:49:36,740 >> -Een. 1119 00:49:36,740 --> 00:49:37,473 >> -Een. 1120 00:49:37,473 --> 00:49:37,972 -Twee. 1121 00:49:37,972 --> 00:49:38,471 -Twee. 1122 00:49:38,471 --> 00:49:39,800 -Twee. 1123 00:49:39,800 --> 00:49:40,300 Drie-. 1124 00:49:40,300 --> 00:49:40,800 Drie-. 1125 00:49:40,800 --> 00:49:41,800 Drie-. 1126 00:49:41,800 --> 00:49:42,300 -Four. 1127 00:49:42,300 --> 00:49:42,800 -Four. 1128 00:49:42,800 --> 00:49:44,707 -Four. 1129 00:49:44,707 --> 00:49:45,521 -Five. 1130 00:49:45,521 --> 00:49:46,430 -Five. 1131 00:49:46,430 --> 00:49:47,930 -Five. 1132 00:49:47,930 --> 00:49:53,480 -so Die kombinasie is een, twee, drie, vier, vyf. 1133 00:49:53,480 --> 00:49:56,140 Dit is die domste kombinasie Ek ooit hoor in my lewe. 1134 00:49:56,140 --> 00:49:58,640 Dit is die soort van ding wat 'n idioot sou hê op sy bagasie. 1135 00:49:58,640 --> 00:50:00,000 >> -Thank Jou, jou hoogheid. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE KLIKKEN] 1137 00:50:01,340 --> 00:50:02,450 >> -Wat Het jy gedoen? 1138 00:50:02,450 --> 00:50:03,800 >> -Ek Afgeskakel die muur. 1139 00:50:03,800 --> 00:50:05,010 >> Nee, jy het nie, moet jy afgeskakel die hele film. 1140 00:50:05,010 --> 00:50:06,220 >> -Ek Het seker die verkeerde knoppie gedruk. 1141 00:50:06,220 --> 00:50:07,064 >> -Goed, Sit dit terug op! 1142 00:50:07,064 --> 00:50:07,910 Sit die film terug! 1143 00:50:07,910 --> 00:50:08,300 >> -Ja, Meneer! 1144 00:50:08,300 --> 00:50:08,799 Ja, meneer. 1145 00:50:08,799 --> 00:50:09,660 -Laat Gaan, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Kom, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Natuurlik weet jy ek sal het jy te hef vir hierdie. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 -Goed? 1150 00:50:17,220 --> 00:50:17,802 Het dit werk? 1151 00:50:17,802 --> 00:50:18,510 Waar is die koning nie? 1152 00:50:18,510 --> 00:50:20,218 >> -Dit Gewerk, meneer, ons het die kombinasie. 1153 00:50:20,218 --> 00:50:20,740 Grandes. 1154 00:50:20,740 --> 00:50:24,810 Nou kan ons elke laaste asem vars lug van die planeet Druidia. 1155 00:50:24,810 --> 00:50:25,890 Wat is die kombinasie? 1156 00:50:25,890 --> 00:50:28,155 >> -Een, Twee, drie, vier, vyf. 1157 00:50:28,155 --> 00:50:29,890 >> -Een, Twee, drie, vier, vyf? 1158 00:50:29,890 --> 00:50:30,390 -Ja. 1159 00:50:30,390 --> 00:50:31,110 -Dat is ongelooflik. 1160 00:50:31,110 --> 00:50:34,550 Ek het dieselfde kombinasie op my bagasie. 1161 00:50:34,550 --> 00:50:37,160 Berei Spaceball 1 vir onmiddellike vertrek. 1162 00:50:37,160 --> 00:50:38,160 >> -Ja, Meneer. 1163 00:50:38,160 --> 00:50:40,745 >> -En verander die kombinasie op my bagasie. 1164 00:50:40,745 --> 00:50:41,578 [Opening en sluiting BEELD] 1165 00:50:41,578 --> 00:50:42,064 [Klink deure slaan HELM] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [Einde video speel] 1168 00:50:43,383 --> 00:50:46,700 David J. Malan Dit is dit vir CS50, sal ons sien julle volgende week. 1169 00:50:46,700 --> 00:50:49,883 NARRATOR: En nou, diep Gedagtes, deur Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> DAVEN FARNHAM: Kodering in C is soveel harder as nuuts af. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch is 'n leuen. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Gelag SOUNDBITE] 1175 00:51:01,430 --> 00:51:02,486