1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [Muziek] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. MALAN: Oke. 5 00:00:12,230 --> 00:00:16,440 Dit is CS50, en dit is eind Week 2. 6 00:00:16,440 --> 00:00:18,480 Dus vandaag gaan we onze blik verder 7 00:00:18,480 --> 00:00:21,150 hoe we de dingen vertegenwoordigen onder de hood-- af te stappen 8 00:00:21,150 --> 00:00:23,520 van nummers zoals integers en floating point waarden 9 00:00:23,520 --> 00:00:26,810 en zich te concentreren op de snaren en uiteindelijk meer interessante programma's. 10 00:00:26,810 --> 00:00:30,140 Maar we zullen ook een kijkje nemen op een te nemen paar domeinspecifieke problems-- 11 00:00:30,140 --> 00:00:33,620 de eerste daarvan zal zijn met betrekking tot cryptografie, 12 00:00:33,620 --> 00:00:36,570 de kunst van het klauteren informatie, in die u hier ziet u hierboven 13 00:00:36,570 --> 00:00:41,480 is een beeld van Radio Orphan Annie's geheime decoder ring van weleer. 14 00:00:41,480 --> 00:00:46,490 >> Dit is eigenlijk heel primitieve vorm en kind-vriendelijke vorm van cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 waarbij deze ring heeft twee disks-- een binnen en een buiten. 16 00:00:50,590 --> 00:00:54,740 En door het draaien van een van deze, kunt u wezen line-up letters zoals A 17 00:00:54,740 --> 00:00:59,520 Z door andere letters als B tot A. Met andere woorden, 18 00:00:59,520 --> 00:01:03,730 kunt u letterlijk het alfabet te draaien, waardoor de proppen komen met een afbeelding van 19 00:01:03,730 --> 00:01:07,820 brieven aan brieven, zodat, als je wilde een geheim bericht 20 00:01:07,820 --> 00:01:11,820 iemand als Annie, kon je schrijft onderaan uw boodschap en draai 21 00:01:11,820 --> 00:01:15,370 de brieven, waarbij, als je bedoelt te zeggen "A", je in plaats daarvan zeggen: "B," 22 00:01:15,370 --> 00:01:17,280 je bedoelt te zeggen "B" je in plaats daarvan zeggen "C" - 23 00:01:17,280 --> 00:01:20,240 of iets een beetje slimmer dan dat-- en dan, uiteindelijk, 24 00:01:20,240 --> 00:01:24,630 zolang Annie heeft deze decoder ring, kan ze de boodschap te ontcijferen. 25 00:01:24,630 --> 00:01:28,540 Nu, jullie mogen herdenken, in feite, dat deze werd gebruikt in een zeer bekende film die 26 00:01:28,540 --> 00:01:31,140 speelt vervelens toe tijdens de kerstperiode. 27 00:01:31,140 --> 00:01:32,650 Laten we eens een kijkje nemen hier. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 RALPHIE PARKER: "Of het nu bekend bij iedereen in samenvatting 30 00:01:37,210 --> 00:01:41,000 dat Ralph Parker wordt benoemd lid van Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Circle en heeft recht op alle eert en voordelen, welke ontstaan. " 32 00:01:44,860 --> 00:01:47,410 >> RALPHIE PARKER (vertellen): Ondertekend Little Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Medeondertekend, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 Met inkt. 35 00:01:51,490 --> 00:01:55,494 Eer en voordelen, al op de leeftijd van negen. 36 00:01:55,494 --> 00:01:57,402 >> [Muziek] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO GERATEL] 38 00:02:00,470 --> 00:02:01,470 RALPHIE PARKER: Kom op. 39 00:02:01,470 --> 00:02:02,344 Laten we aan de slag gaan. 40 00:02:02,344 --> 00:02:06,029 Ik wil niet al die jazz nodig over smokkelaars en piraten. 41 00:02:06,029 --> 00:02:08,820 RADIO Omroeper: Luister morgen nacht voor de afsluitende avontuur 42 00:02:08,820 --> 00:02:11,060 van The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Nu, is het tijd voor Annie's Geheime boodschap voor je leden 44 00:02:14,740 --> 00:02:17,110 van de Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Onthoud kinderen, alleen voor leden van Annie's Secret Circle 46 00:02:20,700 --> 00:02:23,270 kan geheime boodschap Annie's te decoderen. 47 00:02:23,270 --> 00:02:27,270 >> Vergeet niet, Annie is afhankelijk van je. 48 00:02:27,270 --> 00:02:30,060 Stel je pinnen om B-2. 49 00:02:30,060 --> 00:02:34,004 Hier is de Message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 RALPHIE PARKER (vertellen): I ben in mijn eerste geheime vergadering. 51 00:02:36,503 --> 00:02:40,041 RADIO Omroeper: -25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 RALPHIE PARKER (vertellen): Oh, Pierre was in grote stem vanavond. 53 00:02:42,790 --> 00:02:46,110 Ik kon vertellen dat vanavond boodschap was echt belangrijk. 54 00:02:46,110 --> 00:02:47,930 >> RADIO Omroeper: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Dat is een boodschap van Annie zichzelf. 56 00:02:49,940 --> 00:02:52,182 Vergeet niet, niet verder vertellen. 57 00:02:52,182 --> 00:02:55,077 >> [HIJGEN] 58 00:02:55,077 --> 00:02:57,285 RALPHIE PARKER (vertellen): Negentig seconden later, ben ik 59 00:02:57,285 --> 00:03:00,090 in de enige kamer in het huis waar een jongen van negen 60 00:03:00,090 --> 00:03:04,380 in privacy en decoderen kon zitten. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B." 63 00:03:05,680 --> 00:03:06,524 >> [Grinnikt] 64 00:03:06,524 --> 00:03:08,684 >> RALPHIE PARKER (vertellen): Ik ging naar de volgende. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 Het eerste woord is "zijn." 67 00:03:11,641 --> 00:03:12,140 Yes! 68 00:03:12,140 --> 00:03:14,293 Het kwam nu gemakkelijker. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Grinnikt] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Ach, kom op, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Ik moet gaan! 73 00:03:19,606 --> 00:03:21,538 >> RALPHIE PARKER: Ik kom er zo aan, Ma. 74 00:03:21,538 --> 00:03:22,504 Jeetje. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Zorg ervoor dat u aan. "" Zorg ervoor dat "wat? 77 00:03:31,220 --> 00:03:33,981 Wat was Little Orphan Annie probeer te zeggen? "Zorg ervoor dat" wat? 78 00:03:33,981 --> 00:03:35,522 MOEDER: Ralphie, Randy heeft om te gaan. 79 00:03:35,522 --> 00:03:36,735 Wil je alsjeblieft naar buiten komen? 80 00:03:36,735 --> 00:03:38,190 >> RALPHIE PARKER: Oke, mam! 81 00:03:38,190 --> 00:03:39,787 Ik kom eraan! 82 00:03:39,787 --> 00:03:41,995 RALPHIE PARKER (vertellen): Ik was dichter nu krijgt. 83 00:03:41,995 --> 00:03:43,370 De spanning was verschrikkelijk. 84 00:03:43,370 --> 00:03:44,794 Wat was het? 85 00:03:44,794 --> 00:03:47,656 Het lot van de planeet kan hangen in de balans. 86 00:03:47,656 --> 00:03:50,518 >> MOEDER: Ralphie, Randy's got to go! 87 00:03:50,518 --> 00:03:53,635 >> RALPHIE PARKER: Ik zal gelijk hebben out, notabene! 88 00:03:53,635 --> 00:03:55,343 RALPHIE PARKER (Vertellen): We zijn er bijna! 89 00:03:55,343 --> 00:03:56,520 Mijn vingers vlogen! 90 00:03:56,520 --> 00:03:58,500 Mijn geest was een stalen val. 91 00:03:58,500 --> 00:03:59,850 Elke porie getrild. 92 00:03:59,850 --> 00:04:01,806 Het was bijna duidelijk! 93 00:04:01,806 --> 00:04:02,773 Yes! 94 00:04:02,773 --> 00:04:03,273 Yes! 95 00:04:03,273 --> 00:04:03,773 Yes! 96 00:04:03,773 --> 00:04:04,740 Yes! 97 00:04:04,740 --> 00:04:10,250 >> RALPHIE PARKER: "Zorg ervoor dat u om uw Ovaltine drinken. " 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 Een mollig commercieel? 101 00:04:17,539 --> 00:04:19,439 >> [Muziek] 102 00:04:19,439 --> 00:04:21,724 >> RALPHIE PARKER: Klootzak. 103 00:04:21,724 --> 00:04:23,460 >> [Lacht] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Dus dat is dan een blik op wat cryptografie 105 00:04:27,070 --> 00:04:29,880 kan zijn voor een dit-- drinken van weleer. 106 00:04:29,880 --> 00:04:30,900 Dus een snelle aankondiging. 107 00:04:30,900 --> 00:04:33,410 Als je vrij bent deze Vrijdag om 13:15 en zou 108 00:04:33,410 --> 00:04:36,610 graag om met ons mee voor CS50 lunch, ga naar deze URL hier. 109 00:04:36,610 --> 00:04:38,080 Wie het eerst komt, het eerst maalt zoals gewoonlijk. 110 00:04:38,080 --> 00:04:41,840 Maar na verloop van tijd, zullen we ervoor zorgen dat bijna iedereen die het leuk vinden om deel te nemen 111 00:04:41,840 --> 00:04:43,640 kunnen plannen-wise. 112 00:04:43,640 --> 00:04:45,170 >> Dus strings. 113 00:04:45,170 --> 00:04:47,940 We hebben Zamyla-- wie je nu hebt ontmoet waarschijnlijk 114 00:04:47,940 --> 00:04:50,750 in Probleemverzameling 1-- wiens naam wordt zo gespeld. 115 00:04:50,750 --> 00:04:53,570 En stel dat je haar naam getypt in een computerprogramma dat 116 00:04:53,570 --> 00:04:55,710 met behulp van iets als getString. 117 00:04:55,710 --> 00:04:57,890 Om halen die toetsaanslagen, hoe 118 00:04:57,890 --> 00:05:01,620 gaan we over wat neerkomt op een touw, een woord, een paragraaf, 119 00:05:01,620 --> 00:05:03,960 of meerdere letters zoals deze hier? 120 00:05:03,960 --> 00:05:06,790 >> We spraken vorige keer over integers en problemen 121 00:05:06,790 --> 00:05:09,960 die zich voordoen met integer overflow en floating point waarden 122 00:05:09,960 --> 00:05:12,190 en problemen ontstaan ​​binnen de precisie. 123 00:05:12,190 --> 00:05:16,080 Met strijkers, we tenminste een beetje meer flexibiliteit 124 00:05:16,080 --> 00:05:17,970 omdat strings-- net in de echte wereld-- 125 00:05:17,970 --> 00:05:19,790 een vrij willekeurige lengte. 126 00:05:19,790 --> 00:05:21,055 Vrij kort, vrij lang. 127 00:05:21,055 --> 00:05:23,680 Maar zelfs dan, we gaan vinden dat computers soms 128 00:05:23,680 --> 00:05:27,200 opraken van het geheugen en zelfs niet slaan een groot genoeg string. 129 00:05:27,200 --> 00:05:30,840 >> Maar voor nu, laten we beginnen te visualiseren een string als iets in deze vakken 130 00:05:30,840 --> 00:05:31,340 hier. 131 00:05:31,340 --> 00:05:36,410 Dus zes van dergelijke dozen, die elk staat voor een teken of "char." 132 00:05:36,410 --> 00:05:40,646 Zo herinneren dat "char" - c-h-a-r-- is een van de ingebouwde datatypes in C. 133 00:05:40,646 --> 00:05:43,520 En wat leuk is dat je kunt gebruiken dat soort als een bouwsteen, 134 00:05:43,520 --> 00:05:47,880 een puzzel stuk, als je wil, een vorm grotere type gegevens dat we blijven 135 00:05:47,880 --> 00:05:49,410 een "string." call 136 00:05:49,410 --> 00:05:53,650 >> Nu, wat is handig over het denken over zaken als strings op deze manier? 137 00:05:53,650 --> 00:05:57,720 Nou, het blijkt dat we kunnen daadwerkelijk te benutten deze structuur 138 00:05:57,720 --> 00:06:01,420 om daadwerkelijk toegang te krijgen tot de individuele tekens in een vrij eenvoudige manier. 139 00:06:01,420 --> 00:06:04,099 Ik ga om te gaan en te creëren Een bestand "stringzero.c ' 140 00:06:04,099 --> 00:06:05,765 maar u kunt het noemen wat je wilt. 141 00:06:05,765 --> 00:06:08,500 En op de website van de cursus is al dit voorbeeld tevoren, 142 00:06:08,500 --> 00:06:10,430 dus je hoeft niet te typt u alles uit. 143 00:06:10,430 --> 00:06:13,820 >> En ik ga om verder te gaan en eerst doen int main leegte. 144 00:06:13,820 --> 00:06:15,980 En binnen een paar dagen, we beginnen om elkaar te plagen 145 00:06:15,980 --> 00:06:19,070 wat leegte is hier, waarom het int naast de belangrijkste, enzovoort. 146 00:06:19,070 --> 00:06:21,180 Maar voor nu, laten we doorgaan om te kopiëren plakken dat. 147 00:06:21,180 --> 00:06:23,455 >> Ik ga naar een string genaamd s verklaren. 148 00:06:23,455 --> 00:06:26,920 En ik ga terug te keren van GetString wat de gebruiker typt in. 149 00:06:26,920 --> 00:06:29,170 Dit wordt eenvoudig worden programma geen instructies, 150 00:06:29,170 --> 00:06:31,336 Ik ga gewoon blindelings verwachten dat de gebruiker weet 151 00:06:31,336 --> 00:06:32,600 wat te doen om het simpel te houden. 152 00:06:32,600 --> 00:06:34,220 >> En nu ga ik een hebben voor de lus. 153 00:06:34,220 --> 00:06:37,450 En de binnenkant van mijn for loop ik ben gaat hebben int i krijgt nul. 154 00:06:37,450 --> 00:06:40,660 En i is, nogmaals, slechts een conventie, een index variabele voor het tellen, 155 00:06:40,660 --> 00:06:42,350 maar ik kon dit wat ik wil noemen. 156 00:06:42,350 --> 00:06:46,275 Ik ga doen ik minder than-- goed Naam Zamyla is zes letters lang. 157 00:06:46,275 --> 00:06:48,150 Dus ik ga hard code dat er voor nu. 158 00:06:48,150 --> 00:06:49,730 >> En dan ++ i. 159 00:06:49,730 --> 00:06:53,190 En nu de binnenkant van deze krullend braces Ik ga printf doen, 160 00:06:53,190 --> 00:06:55,460 en ik wil een afdrukken teken tegelijk. 161 00:06:55,460 --> 00:06:58,227 Dus ik ga naar% c te gebruiken voor misschien de eerste keer. 162 00:06:58,227 --> 00:07:00,560 En dan wil ik elke af te drukken karakter op zijn eigen lijn. 163 00:07:00,560 --> 00:07:02,550 Dus ik ga een zetten weinig backslash n daar. 164 00:07:02,550 --> 00:07:03,640 Sluiten offerte. 165 00:07:03,640 --> 00:07:06,250 >> En nu wil ik hier iets aan te doen. 166 00:07:06,250 --> 00:07:10,610 Ik wil uitprinten bepaalde letter in de tekenreeks 167 00:07:10,610 --> 00:07:13,670 s, zoals ik itereren van nul tot zes. 168 00:07:13,670 --> 00:07:17,150 Met andere woorden, ik wil print het i'th karakter van s. 169 00:07:17,150 --> 00:07:18,420 Nu hoe kan ik dit doen? 170 00:07:18,420 --> 00:07:21,550 >> Nou net als de dozen in Deze voorstelling here, 171 00:07:21,550 --> 00:07:25,560 soort, roepen de notie van het boksen letters in, dan kun je op dezelfde manier doen 172 00:07:25,560 --> 00:07:32,630 syntactisch in C door simpelweg te specificeren, Ik wil uitprinten s's i'th karakter. 173 00:07:32,630 --> 00:07:35,640 De haken op het toetsenbord van uw computer 174 00:07:35,640 --> 00:07:38,910 van een Amerikaans toetsenbord zijn algemeen boven uw terugkeer sleutel. 175 00:07:38,910 --> 00:07:42,630 >> Dus dit is niet helemaal goed nog, zoals je misschien al opgevallen. 176 00:07:42,630 --> 00:07:44,780 Maar ik ga soort hier blindelings streven naar vooruitgang. 177 00:07:44,780 --> 00:07:47,020 En ik ga doen snaren is 0. 178 00:07:47,020 --> 00:07:50,860 Maar voordat ik dit doen, laten we eens kijken of we niet kan anticiperen op een aantal veel voorkomende fouten. 179 00:07:50,860 --> 00:07:52,844 Gaat dit te compileren? 180 00:07:52,844 --> 00:07:54,510 Nee, ik mis een hele hoop dingen. 181 00:07:54,510 --> 00:07:55,280 Bibliotheken ik hoorde. 182 00:07:55,280 --> 00:07:58,480 >> Dus welke bestanden header zou ik hier willen toevoegen? 183 00:07:58,480 --> 00:07:59,205 Yeah. 184 00:07:59,205 --> 00:08:01,580 >> PUBLIEK: Je moet standaard I / O [onverstaanbaar] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. MALAN: Excellent. 186 00:08:02,663 --> 00:08:06,060 Dus ik moet standaard I / O. Voor wat doel wil ik standaard I / O? 187 00:08:06,060 --> 00:08:06,670 Voor printf. 188 00:08:06,670 --> 00:08:09,220 Dus omvatten stdio.h. 189 00:08:09,220 --> 00:08:13,490 En je ook voorstellen dat ik onder de CS50 bibliotheek voor welke reden? 190 00:08:13,490 --> 00:08:14,650 Om strings te hebben. 191 00:08:14,650 --> 00:08:17,780 Dus we zullen zien wat Bibliotheek CS50's doet 192 00:08:17,780 --> 00:08:19,260 dit begrip string te maken. 193 00:08:19,260 --> 00:08:21,930 Maar voor nu, kun je gewoon denken het als een feitelijke gegevenstype. 194 00:08:21,930 --> 00:08:23,596 >> Dus dat lijkt een beetje opgeruimd. 195 00:08:23,596 --> 00:08:27,060 En nu ga ik om verder te gaan en inderdaad doen snaren is 0. 196 00:08:27,060 --> 00:08:27,700 Samengesteld. 197 00:08:27,700 --> 00:08:28,370 Dus dat is goed. 198 00:08:28,370 --> 00:08:32,799 Dus ./string0 laat me in te zoomen, zodat we kunnen Bekijk meer nauwgezet wat er gebeurt. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A invoeren. 201 00:08:37,789 --> 00:08:39,440 En we hebben uitgeprint op naam Zamyla's. 202 00:08:39,440 --> 00:08:40,409 >> Dus dat is best goed. 203 00:08:40,409 --> 00:08:43,220 Dus laten we nu verder gaan en opnieuw uitvoeren van dit programma, 204 00:08:43,220 --> 00:08:45,659 en uittypen volledige naam Daven's. 205 00:08:45,659 --> 00:08:46,450 Surprise, surprise. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 We hebben niet afgedrukt Daven's volledige voornaam correct. 209 00:08:51,750 --> 00:08:54,250 Nu dit duidelijk in moeten zijn terugblik door wat, 210 00:08:54,250 --> 00:08:57,010 soort, dom ontwerp beslissing? 211 00:08:57,010 --> 00:08:59,590 >> Ja, ik hard gecodeerd de zes binnenkant van mijn voor-lus. 212 00:08:59,590 --> 00:09:01,610 Nu heb ik dat alleen maar omdat Ik kende de naam Zamyla's 213 00:09:01,610 --> 00:09:02,776 zou gaan om zes letters zijn. 214 00:09:02,776 --> 00:09:04,720 Maar zeker is dit niet Een algemene oplossing. 215 00:09:04,720 --> 00:09:07,720 Dus het blijkt dat we kunnen dynamisch achterhalen van de lengte van een string 216 00:09:07,720 --> 00:09:10,440 door te bellen naar een functie genaamd strlen. 217 00:09:10,440 --> 00:09:12,840 >> Nogmaals, opzettelijk bondig zojuist genoemde 218 00:09:12,840 --> 00:09:14,450 om het gemakkelijker te typen. 219 00:09:14,450 --> 00:09:17,170 Maar dat is synoniem met om de lengte van een tekenreeks. 220 00:09:17,170 --> 00:09:23,190 Ik ga terug naar mijn terminal raam-en re-run van de compiler. 221 00:09:23,190 --> 00:09:24,170 Maar het is schreeuwen tegen me. 222 00:09:24,170 --> 00:09:29,130 Impliciet verklaren bibliotheekfunctie strlen met type unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Ik ben verloren. 224 00:09:29,780 --> 00:09:30,590 Volledig. 225 00:09:30,590 --> 00:09:32,940 >> Dus, in het bijzonder als uw ogen beginnen te glazuur over 226 00:09:32,940 --> 00:09:36,000 met foutmeldingen als deze, focus eerlijk gezegd op de eerste paar woorden. 227 00:09:36,000 --> 00:09:38,590 We kennen het probleem in lijn 8, zoals hier aangegeven. 228 00:09:38,590 --> 00:09:40,500 En het is in string-0.c. 229 00:09:40,500 --> 00:09:43,580 Impliciet verklaren bibliotheekfunctie strlen. 230 00:09:43,580 --> 00:09:47,000 Zodat algemeen gaat zijn een patroon van foutmeldingen. 231 00:09:47,000 --> 00:09:49,190 Impliciet verklaren iets. 232 00:09:49,190 --> 00:09:53,250 >> Dus in het kort, wat heb ik leek te hebben gedaan met betrekking tot lijn 8, hier. 233 00:09:53,250 --> 00:09:56,880 Wat kunnen de oplossing zijn, zelfs als je nog nooit strlen zelf hebt gebruikt? 234 00:09:56,880 --> 00:09:58,907 >> PUBLIEK: Een deel van een andere bibliotheek? 235 00:09:58,907 --> 00:10:00,740 DAVID J. MALAN: Part van een andere bibliotheek. 236 00:10:00,740 --> 00:10:02,400 Dus het wordt verklaard, bij wijze van spreken. 237 00:10:02,400 --> 00:10:07,510 Het wordt vermeld in een bestand andere dan stdio.h en CS50.h. 238 00:10:07,510 --> 00:10:09,179 Nu waar is het gedefinieerd? 239 00:10:09,179 --> 00:10:12,220 Om eerlijk te zijn, ofwel moet je gewoon weet dat dit uit de top van je hoofd, 240 00:10:12,220 --> 00:10:13,640 of u deze Google en uit te vinden. 241 00:10:13,640 --> 00:10:18,150 Of weet dit, ik heb in de CS50 geopend Apparaat Het terminal programma, dat 242 00:10:18,150 --> 00:10:22,200 is alleen de grote, full screen versie van wat zit er in de onderkant van het venster gedit's. 243 00:10:22,200 --> 00:10:24,970 >> En het blijkt dat er een bondig eveneens commando, genaamd 244 00:10:24,970 --> 00:10:29,280 man voor handmatige, waar als je typt de naam van een functie en druk op Enter, 245 00:10:29,280 --> 00:10:32,240 je zult vrij terug arcane documentatie. 246 00:10:32,240 --> 00:10:35,299 Het is gewoon de tekst die in het algemeen ziet er een beetje iets als dit. 247 00:10:35,299 --> 00:10:37,090 Het is een beetje overweldigend op het eerste gezicht. 248 00:10:37,090 --> 00:10:39,048 Maar eerlijk gezegd ik ga laat mijn ogen glazuur over 249 00:10:39,048 --> 00:10:41,930 en alleen gericht op het deel Ik geef om voor het moment. 250 00:10:41,930 --> 00:10:42,780 >> Dat is dit. 251 00:10:42,780 --> 00:10:45,470 Die ziet er structureel als iets waar ik bekend mee zijn. 252 00:10:45,470 --> 00:10:48,080 Inderdaad de man pagina, dus te spreken, zal u vertellen 253 00:10:48,080 --> 00:10:51,590 in welke header-bestand een functie als strlen is gedefinieerd. 254 00:10:51,590 --> 00:10:54,170 Dus ik ga nu terug naar gedit. 255 00:10:54,170 --> 00:10:59,070 En ik ga om verder te gaan en voegen hier #include in 256 00:10:59,070 --> 00:11:00,480 en sla het bestand op. 257 00:11:00,480 --> 00:11:04,300 >> Ik ga naar het scherm te wissen met Control L Als u zich afvraagt. 258 00:11:04,300 --> 00:11:08,210 En ik ga opnieuw uitvoeren make string.0, compileert deze tijd. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Dat leek te werken Laat me gaan vooruit en start het opnieuw op met Davenport. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 En ook dat leek te werken. 263 00:11:17,730 --> 00:11:21,220 >> Dus we kunnen een beetje beter dan dit te doen, hoewel, kunnen we beginnen met het netjes dingen 264 00:11:21,220 --> 00:11:23,257 up maar een klein beetje. 265 00:11:23,257 --> 00:11:25,590 En ik ga eigenlijk introduceren nu een ander ding. 266 00:11:25,590 --> 00:11:28,930 Ik ga om te gaan en bewaar deze in een ander bestand. 267 00:11:28,930 --> 00:11:31,770 En ik ga bellen Dit bestand string1.c gewoon 268 00:11:31,770 --> 00:11:34,620 in overeenstemming met de code te je zult in staat zijn om online te vinden. 269 00:11:34,620 --> 00:11:37,050 >> En laten we focussen op precies dezelfde code. 270 00:11:37,050 --> 00:11:39,000 Het blijkt dat ik heb geweest soort nemen 271 00:11:39,000 --> 00:11:42,600 vanzelfsprekend het feit dat mijn laptop, en op zijn beurt, de CS50 apparaat 272 00:11:42,600 --> 00:11:47,450 heeft veel geheugen, een veel RAM, veel bytes ruimte 273 00:11:47,450 --> 00:11:48,920 waarin ik strings kan opslaan. 274 00:11:48,920 --> 00:11:53,560 >> Maar de realiteit als ik typte lang genoeg en voldoende toetsaanslagen, 275 00:11:53,560 --> 00:11:56,170 Ik kon in het type theorie in meer tekens 276 00:11:56,170 --> 00:11:58,830 dan mijn computer heeft fysiek geheugen voor. 277 00:11:58,830 --> 00:11:59,830 En dat is problematisch. 278 00:11:59,830 --> 00:12:03,050 Net als een int kan alleen tellen zo hoog, in theorie, 279 00:12:03,050 --> 00:12:06,600 je kunt alleen proppen zo veel personages in het RAM van de computer of een willekeurige 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Dus ik had beter verwacht dit probleem zelfs 282 00:12:11,140 --> 00:12:13,660 hoewel het een zeldzaam misschien hoek geval, bij wijze van spreken. 283 00:12:13,660 --> 00:12:15,670 Gebeurt niet zo vaak, zou kunnen gebeuren. 284 00:12:15,670 --> 00:12:18,815 En als het gebeurt en ik niet anticiperen op en het programma voor het, 285 00:12:18,815 --> 00:12:20,300 mijn programma kon doen wie weet wat. 286 00:12:20,300 --> 00:12:22,220 Freeze, hangen, reboot, wat dan ook. 287 00:12:22,220 --> 00:12:24,490 Iets verwacht zou kunnen gebeuren. 288 00:12:24,490 --> 00:12:27,120 >> Dus wat ik ga doen nu voortaan echt, 289 00:12:27,120 --> 00:12:31,630 is voordat ik ooit blindelings Gebruik als een variabele, dat 290 00:12:31,630 --> 00:12:36,790 is toegewezen de return waarde van een andere functie, zoals getString, 291 00:12:36,790 --> 00:12:40,200 Ik ga ervoor zorgen dat dat zijn waarde geldig is. 292 00:12:40,200 --> 00:12:44,280 Dus ik weet alleen van het lezen Documentatie CS50's voor getString, 293 00:12:44,280 --> 00:12:49,020 die uiteindelijk zullen we u wijzen op, dat getString geeft een speciaal symbool 294 00:12:49,020 --> 00:12:53,610 genaamd NULL, N-U-L-L in alle caps, als er iets misgaat. 295 00:12:53,610 --> 00:12:55,650 >> Dus normaal gesproken, het geeft een string. 296 00:12:55,650 --> 00:12:59,700 Maar voor de rest als het weer N-U-L-L-- zullen we uiteindelijk zien wat die echt 297 00:12:59,700 --> 00:13:01,790 means-- dat betekent iets ergs gebeurd. 298 00:13:01,790 --> 00:13:05,560 Nu betekent dit, net als in Scratch, Ik kan een aandoening controleren hier in C, 299 00:13:05,560 --> 00:13:08,830 Als s niet gelijk NULL. 300 00:13:08,830 --> 00:13:11,930 Dus als je dit nog niet eerder hebt gezien, Dit betekent gewoon niet gelijk. 301 00:13:11,930 --> 00:13:15,290 >> Dus het is het tegenovergestelde van gelijke gelijken, die, herinneren, 302 00:13:15,290 --> 00:13:18,940 verschilt van enkele evenaart, die opdracht. 303 00:13:18,940 --> 00:13:23,030 Dus als s niet gelijk NULL, dan pas 304 00:13:23,030 --> 00:13:25,980 Ik wil deze regels code uit te voeren. 305 00:13:25,980 --> 00:13:28,080 Dus met andere woorden, voordat ik duik in blindelings 306 00:13:28,080 --> 00:13:30,919 en start itereren dan s en behandelen 307 00:13:30,919 --> 00:13:33,710 alsof het een reeks personages, ik ga eerst te controleren, 308 00:13:33,710 --> 00:13:37,900 wacht eens even, is het is zeker niet gelijk is aan deze speciale waarde, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Want als dat zo is, kan slechte dingen gebeuren. 310 00:13:40,030 --> 00:13:43,080 En voor nu, neem aan dat slechte dingen gebeurt betekent het programma crasht, 311 00:13:43,080 --> 00:13:45,070 en je kunt niet per se terug te krijgen. 312 00:13:45,070 --> 00:13:46,800 Dus eerlijk gezegd, het ziet er lelijker. 313 00:13:46,800 --> 00:13:48,660 Het is een beetje verwarrend nu een blik te werpen op. 314 00:13:48,660 --> 00:13:50,780 Maar dit zal meer worden vertrouwde het duurde niet lang. 315 00:13:50,780 --> 00:13:52,920 >> Maar ik ga voor te stellen Nu een andere verbetering. 316 00:13:52,920 --> 00:13:54,660 Dat is een verbetering van correctheid. 317 00:13:54,660 --> 00:13:58,800 Mijn programma is nu juist, want in het zeldzame geval dat er niet genoeg geheugen 318 00:13:58,800 --> 00:14:01,180 bestaat, zal ik het wel aan, en ik zal gewoon niets doen. 319 00:14:01,180 --> 00:14:02,680 Ik in ieder geval niet zal crashen. 320 00:14:02,680 --> 00:14:05,000 >> Maar laten we een definitieve versie hier. 321 00:14:05,000 --> 00:14:07,690 En een bestand genaamd string2.c. 322 00:14:07,690 --> 00:14:10,190 Ik ga om te plakken dat dezelfde code voor slechts een moment, 323 00:14:10,190 --> 00:14:14,210 en ik ga dit markeren lijn, 11, hier, voor slechts een moment. 324 00:14:14,210 --> 00:14:18,179 Nu de realiteit is dat slimme compilers zoals Clang dit voor ons zou kunnen oplossen 325 00:14:18,179 --> 00:14:19,970 achter de schermen zonder dat wij ooit te weten. 326 00:14:19,970 --> 00:14:24,670 Maar laten we eens over nadenken fundamenteel als een problematische ontwerp. 327 00:14:24,670 --> 00:14:29,010 >> Deze lijn van code is, natuurlijk zeggen, initialiseren enkele variabele i op 0. 328 00:14:29,010 --> 00:14:30,260 Dat is vrij eenvoudig. 329 00:14:30,260 --> 00:14:34,691 En wat ook dit is verklaring, hier, ik ++, aan het doen? 330 00:14:34,691 --> 00:14:37,066 We hebben het al eerder gezien, maar we niet echt over praten. 331 00:14:37,066 --> 00:14:37,900 >> PUBLIEK: Verhogen i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. MALAN: Verhogen van i. 333 00:14:39,191 --> 00:14:41,890 Dus elke iteratie door deze lus elke cyclus, 334 00:14:41,890 --> 00:14:43,570 je oplopende i voor een. 335 00:14:43,570 --> 00:14:45,740 Dus het wordt groter en groter, en groter totdat de lus beëindigd. 336 00:14:45,740 --> 00:14:46,810 Hoe gaat dat eindigen? 337 00:14:46,810 --> 00:14:49,430 Wel is er dit midden voorwaarde die we eerder hebben gebruikt. 338 00:14:49,430 --> 00:14:52,500 Je hebt gezien en in walkthroughs in de P-set. 339 00:14:52,500 --> 00:14:53,880 >> Maar wat is deze uitspraak? 340 00:14:53,880 --> 00:14:58,352 Doe het volgende lus, zodat Zolang ik minder dan wat? 341 00:14:58,352 --> 00:14:59,810 Publiek: De lengte van de snaar. 342 00:14:59,810 --> 00:15:01,518 DAVID J. MALAN: De lengte van de tekenreeks. 343 00:15:01,518 --> 00:15:04,300 Dus het vertaalt vrij netjes in het Engels in die zin. 344 00:15:04,300 --> 00:15:08,810 Nu is het probleem dat elke keer als ik Doorloop deze lus in theorie, 345 00:15:08,810 --> 00:15:10,000 Ik stel deze vraag. 346 00:15:10,000 --> 00:15:12,250 Is i minder dan de lengte van de string van s? 347 00:15:12,250 --> 00:15:14,500 Is i minder dan de lengte van de string van s? 348 00:15:14,500 --> 00:15:18,380 >> Nu wordt ik veranderen op elke iteratie? 349 00:15:18,380 --> 00:15:18,880 Het is. 350 00:15:18,880 --> 00:15:19,629 Vanwege de ++. 351 00:15:19,629 --> 00:15:21,700 Dus elke iteratie i wordt steeds groter. 352 00:15:21,700 --> 00:15:25,411 Maar is s steeds groter, of kleiner, of het veranderen te allen? 353 00:15:25,411 --> 00:15:25,910 Nee 354 00:15:25,910 --> 00:15:30,240 Dus in termen van design, een van de assen waarlangs we proberen om de code te evalueren 355 00:15:30,240 --> 00:15:32,610 in de klas, dit voelt soort dom. 356 00:15:32,610 --> 00:15:34,690 >> Alsof je letterlijk, elke iteratie 357 00:15:34,690 --> 00:15:37,110 van deze lus het stellen van de Dezelfde verdomd vraag opnieuw, 358 00:15:37,110 --> 00:15:40,770 en opnieuw, en opnieuw, en letterlijk het wordt nooit veranderen. 359 00:15:40,770 --> 00:15:44,220 Tenminste als ik niet aanraken s en probeert de inhoud van s veranderen. 360 00:15:44,220 --> 00:15:46,610 Dus ik kan een beetje beter doen dan dit. 361 00:15:46,610 --> 00:15:49,530 >> En wat ik ga doen is niet verklaren slechts een variabele i, 362 00:15:49,530 --> 00:15:53,330 maar een tweede variabele zal ik willekeurig, maar conventioneel, noem het n. 363 00:15:53,330 --> 00:15:55,940 Toewijzen n gelijk is aan de snaar lengte van s. 364 00:15:55,940 --> 00:15:59,090 En dan hier, ik ga doe een slimme kleine optimalisatie, dus 365 00:15:59,090 --> 00:16:03,460 spreken, dat aan het eind van de dag niet meer correct is of niet minder correct 366 00:16:03,460 --> 00:16:04,260 dan voorheen. 367 00:16:04,260 --> 00:16:05,500 Maar het is een beter ontwerp. 368 00:16:05,500 --> 00:16:09,480 In het feit dat ik gebruik minder tijd, minder CPU, dus 369 00:16:09,480 --> 00:16:14,040 spreken in dezelfde beantwoorden vraag, maar slechts een keer. 370 00:16:14,040 --> 00:16:17,870 >> Eventuele vragen over deze algemene beginsel verbetering, 371 00:16:17,870 --> 00:16:21,294 zeggen efficiency van een programma? 372 00:16:21,294 --> 00:16:21,991 Yeah? 373 00:16:21,991 --> 00:16:23,699 PUBLIEK: Waarom denk je Gebruik de [onverstaanbaar]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. MALAN: Goede vraag. 376 00:16:27,010 --> 00:16:30,690 Dus waarom doen we de ++ op het einde van i in plaats van het begin van de i? 377 00:16:30,690 --> 00:16:33,070 In casu heeft geen functionele gevolgen. 378 00:16:33,070 --> 00:16:36,670 En in het algemeen, heb ik de neiging om gebruik maken van de postfix operator 379 00:16:36,670 --> 00:16:41,750 zodat het een beetje meer duidelijk als wanneer de operatie gebeurt. 380 00:16:41,750 --> 00:16:46,670 >> Voor wie niet vertrouwd, is er een ander uitspraken waarbij je kon ++ doen i. 381 00:16:46,670 --> 00:16:48,747 Dit zijn functioneel equivalent in casu 382 00:16:48,747 --> 00:16:51,080 want er is niets anders rond die incrementering. 383 00:16:51,080 --> 00:16:54,435 Maar je kunt komen met gevallen en regels code 384 00:16:54,435 --> 00:16:55,810 waarin dat maakt een verschil. 385 00:16:55,810 --> 00:16:57,810 Dus over het algemeen, dat doen we niet zelfs praten over deze. 386 00:16:57,810 --> 00:17:00,690 Want eerlijk gezegd, het maakt je code sexier, en soort van gelikter, 387 00:17:00,690 --> 00:17:01,776 en minder tekens. 388 00:17:01,776 --> 00:17:04,859 Maar de realiteit is dat het een stuk moeilijker, Ik denk dat, zelfs voor mij om mijn gedachten te wikkelen 389 00:17:04,859 --> 00:17:07,319 eromheen soms de volgorde van de bewerkingen. 390 00:17:07,319 --> 00:17:09,750 Dus als een terzijde, als je echt niet als dit, 391 00:17:09,750 --> 00:17:14,650 ook al is dit soort sexy op zoek, dan kunt u ook doen i + = 1, 392 00:17:14,650 --> 00:17:18,880 die de uglier versie van de Hetzelfde idee voor postfix incrementatie. 393 00:17:18,880 --> 00:17:22,250 >> Ik dit en je zegt moet leuk van maken, 394 00:17:22,250 --> 00:17:25,140 maar u zal komen om code te zien als iets moois voor lang. 395 00:17:25,140 --> 00:17:27,160 >> [Lachen] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. MALAN: Recht? 397 00:17:28,410 --> 00:17:29,360 Yeah. 398 00:17:29,360 --> 00:17:30,480 Vraag in het midden. 399 00:17:30,480 --> 00:17:32,146 >> PUBLIEK: Moet u int n zeggen? 400 00:17:32,146 --> 00:17:34,020 DAVID J. MALAN: Je doet niet nodig om int n zeggen. 401 00:17:34,020 --> 00:17:37,670 Dus omdat we al hebben gezegd int, je hoeft niet nog eens zeggen. 402 00:17:37,670 --> 00:17:41,820 De vangst is dat n moet zijn het dezelfde soort gegevens als i. 403 00:17:41,820 --> 00:17:43,310 Dus dat is gewoon een gemak hier. 404 00:17:43,310 --> 00:17:44,058 Yeah. 405 00:17:44,058 --> 00:17:47,806 >> PUBLIEK: Kun je over de afdrukken karakter s beugel i weer? 406 00:17:47,806 --> 00:17:48,930 DAVID J. MALAN: Absoluut. 407 00:17:48,930 --> 00:17:52,110 Dus% c, herinneren van vorig tijd, is slechts een tijdelijke aanduiding. 408 00:17:52,110 --> 00:17:53,930 Het betekent dat we hier een char. 409 00:17:53,930 --> 00:17:56,780 backslash n, natuurlijk: middel zet hier een regeleinde. 410 00:17:56,780 --> 00:17:59,540 Zodat alleen verlaat, nu, dit stuk nieuwe syntaxis. 411 00:17:59,540 --> 00:18:03,730 En dit is letterlijk zeggen, grijp de string genaamd s en ga je haar 412 00:18:03,730 --> 00:18:06,050 i'th karakter, zo te zeggen. 413 00:18:06,050 --> 00:18:10,590 >> En ik blijf zeggen i'th karakter want op elke iteratie van deze lus 414 00:18:10,590 --> 00:18:14,540 het is alsof we afdrukt in de eerste s beugel 0, 415 00:18:14,540 --> 00:18:15,780 als programmeur zou kunnen zeggen. 416 00:18:15,780 --> 00:18:18,680 Dan s beugel 1, dan s beugel 2, dan 3 en dan 4. 417 00:18:18,680 --> 00:18:21,610 Maar natuurlijk is het een variabele, dus ik druk het alleen met i. 418 00:18:21,610 --> 00:18:23,900 >> Sleutel, is echter te realiseren, vooral als je hebt niet 419 00:18:23,900 --> 00:18:26,358 is wennen aan deze wereld van de programmering, waar we allemaal 420 00:18:26,358 --> 00:18:28,950 lijken te tellen vanaf nul, moet beginnen te tellen vanaf nul nu. 421 00:18:28,950 --> 00:18:35,130 Omdat de snaren, eerste teken, de z in Zamyla is voor beter of slechter 422 00:18:35,130 --> 00:18:40,490 gaan op locatie nummer nul te leven. 423 00:18:40,490 --> 00:18:48,210 >> Oke, dus laat me brengen ons hier tot Zamyla terug 424 00:18:48,210 --> 00:18:50,746 en zien wat er werkelijk aan de hand op onder de motorkap. 425 00:18:50,746 --> 00:18:52,370 Dus er is deze notie van typecasting. 426 00:18:52,370 --> 00:18:53,800 Je zou eigenlijk gespeeld met dit al, 427 00:18:53,800 --> 00:18:55,970 misschien voor de hacker editie van P set een. 428 00:18:55,970 --> 00:19:00,320 Maar typecasting gewoon verwijst naar de vermogen in C en enkele andere talen 429 00:19:00,320 --> 00:19:03,170 een gegevenstype omrekenen. 430 00:19:03,170 --> 00:19:05,450 >> Maar hoe kunnen we dit zien vrij rechtlijnig? 431 00:19:05,450 --> 00:19:08,530 Dus dit, recall, is het begin van het Engels alfabet. 432 00:19:08,530 --> 00:19:11,265 En de context, herinneren, uit net als een week geleden is ASCII. 433 00:19:11,265 --> 00:19:13,790 De American Standard Code for Information Interchange. 434 00:19:13,790 --> 00:19:17,080 Dat is gewoon een heel lange weg zeggen een mapping van brieven 435 00:19:17,080 --> 00:19:19,370 om nummers, en van cijfers naar letters. 436 00:19:19,370 --> 00:19:22,940 >> Dus A tot en met M hier, dot dot dot, lijn staat met, recall, 437 00:19:22,940 --> 00:19:25,582 het decimale getal 65 op maximaal. 438 00:19:25,582 --> 00:19:27,290 En we niet praten over dit expliciet, 439 00:19:27,290 --> 00:19:29,850 maar zeker is er gelijkaardige nummers voor kleine letters. 440 00:19:29,850 --> 00:19:30,820 En inderdaad, er zijn. 441 00:19:30,820 --> 00:19:33,730 De wereld besloot enkele jaren geleden dat kleine een, kleine letter a, 442 00:19:33,730 --> 00:19:35,020 gaat worden 97. 443 00:19:35,020 --> 00:19:38,010 En kleine b gaat zijn 98, enzovoort. 444 00:19:38,010 --> 00:19:40,200 >> En voor een andere toets op je toetsenbord, er is 445 00:19:40,200 --> 00:19:42,190 naar een vergelijkbaar patroon bits zijn. 446 00:19:42,190 --> 00:19:44,540 Oftewel, een decimaal getal. 447 00:19:44,540 --> 00:19:47,110 Dus de vraag bij de hand, is dus hoe kunnen we 448 00:19:47,110 --> 00:19:49,400 dit daadwerkelijk te zien onder de motorkap? 449 00:19:49,400 --> 00:19:51,539 Dus ik ga weer opnieuw naar gedit. 450 00:19:51,539 --> 00:19:53,330 En in plaats Type deze van de grond af, 451 00:19:53,330 --> 00:19:55,330 Ik ga om te gaan en gewoon openstellen iets 452 00:19:55,330 --> 00:19:58,350 van de huidige code genoemd ASCII nul. 453 00:19:58,350 --> 00:20:01,210 >> En ASCII nul ziet er als volgt uit. 454 00:20:01,210 --> 00:20:02,710 Dus laten wikkelen onze gedachten rond dit. 455 00:20:02,710 --> 00:20:04,969 Dus eerst, heb ik commentaar de code, dat is leuk. 456 00:20:04,969 --> 00:20:07,010 Want het is letterlijk mij vertellen wat te verwachten, 457 00:20:07,010 --> 00:20:08,950 weer een mapping voor hoofdletters. 458 00:20:08,950 --> 00:20:13,690 Nu weet ik niet goed wat ik daarmee bedoel, dus laten we afleiden. 459 00:20:13,690 --> 00:20:16,870 >> In het Engels, misschien enigszins techneut Engels, 460 00:20:16,870 --> 00:20:20,660 wat doet lijn 18 verschijnen te doen voor ons? 461 00:20:20,660 --> 00:20:21,500 Gewoon lijn 18. 462 00:20:21,500 --> 00:20:22,430 Wat is het induceren van? 463 00:20:22,430 --> 00:20:25,192 Wat gaat het hier aftrap? 464 00:20:25,192 --> 00:20:26,100 >> Publiek: Een lus. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. MALAN: Een lus. 466 00:20:26,630 --> 00:20:28,463 En hoe vaak is dat gaat herhalen? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 PUBLIEK: [onderbreekt hem VOICES] zes keer. 469 00:20:33,270 --> 00:20:34,830 DAVID J. MALAN: Niet zes 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, sorry. 473 00:20:37,060 --> 00:20:37,960 26 keer. 474 00:20:37,960 --> 00:20:38,460 Waarom? 475 00:20:38,460 --> 00:20:41,590 Nou, het is een beetje raar, maar Ik ben begonnen met het tellen van 65. 476 00:20:41,590 --> 00:20:43,300 Dat is raar, maar niet verkeerd. 477 00:20:43,300 --> 00:20:44,610 Het is niet slecht per zeggen. 478 00:20:44,610 --> 00:20:46,980 En ik doe dat alleen want voor dit voorbeeld 479 00:20:46,980 --> 00:20:50,455 Ik ben een beetje anticiperen dat hoofdletter A was 65. 480 00:20:50,455 --> 00:20:53,330 Nu is dit niet de meest elegante manier om dit te doen, om een ​​beetje moeilijk code 481 00:20:53,330 --> 00:20:56,130 esoterische waarden die niemand is ooit verwacht te onthouden. 482 00:20:56,130 --> 00:21:00,155 >> Maar voor nu, merk ik dat ik ben dit te doen omhoog door 65 plus 26. 483 00:21:00,155 --> 00:21:03,030 Want blijkbaar Ik wil er niet eens aan het rekenkundig doen in mijn hoofd. 484 00:21:03,030 --> 00:21:04,440 Dus ik laat de compiler doen. 485 00:21:04,440 --> 00:21:08,600 Maar dan op elke lus, elke iteratie van de lus, ik ben het verhogen i. 486 00:21:08,600 --> 00:21:10,196 >> Dus nu dit ziet er een beetje cryptisch. 487 00:21:10,196 --> 00:21:13,320 Maar we moeten de basis-gebouw hebben blokken met om deze te begrijpen. 488 00:21:13,320 --> 00:21:15,510 % C is slechts een tijdelijke aanduiding voor een char. 489 00:21:15,510 --> 00:21:19,010 % I is een tijdelijke aanduiding voor een int. 490 00:21:19,010 --> 00:21:23,310 Het blijkt dat met deze nieuwe syntax, deze haakjes, dus 491 00:21:23,310 --> 00:21:26,100 spreken, zodat een gegevenstype in een haakjes 492 00:21:26,100 --> 00:21:32,270 Ik kan de compiler te dwingen om te behandelen i niet een geheel getal, maar als char. 493 00:21:32,270 --> 00:21:35,520 >> Daarbij toont me het karakter equivalent van dat nummer. 494 00:21:35,520 --> 00:21:37,986 Nu hier beneden, deze code is vrijwel identiek. 495 00:21:37,986 --> 00:21:39,860 Ik wilde alleen maar om ervoor super expliciet het feit 496 00:21:39,860 --> 00:21:42,095 dat ik ben beginnen bij 97, die kleine letter a. 497 00:21:42,095 --> 00:21:44,080 Op omhoog door 26 meer letters. 498 00:21:44,080 --> 00:21:46,970 En ik ben weer doing--, casting ik, bij wijze van spreken. 499 00:21:46,970 --> 00:21:49,160 Of typecasting ik, bij wijze van spreken. 500 00:21:49,160 --> 00:21:51,420 >> Van een int naar een char. 501 00:21:51,420 --> 00:21:55,760 Dus het eindresultaat zal zijn, eerlijk gezegd, informatie die we al kennen. 502 00:21:55,760 --> 00:21:59,411 Ik ga maken ascii-0 dot-- niet dot c. 503 00:21:59,411 --> 00:22:02,160 Let op, u waarschijnlijk gemaakt dat fout als ik deed gewoon per ongeluk. 504 00:22:02,160 --> 00:22:03,820 Maak ascii-0. 505 00:22:03,820 --> 00:22:06,090 Nu ik ga doen ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Ik zal in te zoomen, en helaas het gaat om af te scrollen op het scherm. 507 00:22:09,050 --> 00:22:15,060 Maar we zien een hele grafiek waar een kaarten tot 97, b kaarten tot 98, 508 00:22:15,060 --> 00:22:18,931 en als we schuiven verder omhoog Een natuurlijk kaarten 65. 509 00:22:18,931 --> 00:22:21,180 Dit is alleen dat wat we hebben gepredikt, 510 00:22:21,180 --> 00:22:25,310 er is deze gelijkwaardigheid wordt in feite het geval is in de werkelijkheid. 511 00:22:25,310 --> 00:22:28,000 Dus een snelle wijziging van deze. 512 00:22:28,000 --> 00:22:31,220 Laat me openstellen ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 En merk op deze slimme, sorteren van, verduidelijking van dit. 514 00:22:38,070 --> 00:22:41,770 Dit is ascii-1.c, en merkt dit gekke ding. 515 00:22:41,770 --> 00:22:45,120 >> En dit is echt raakt de kern van wat computers doen. 516 00:22:45,120 --> 00:22:48,150 Hoewel we mensen zouden niet rekenen in termen van letters-- 517 00:22:48,150 --> 00:22:50,380 Ik wil niet gaan denken, oke een dan b, 518 00:22:50,380 --> 00:22:52,590 en gebruiken die om fysieke objecten te tellen. 519 00:22:52,590 --> 00:22:58,680 Je kunt wel zeggen dat ik wil initialiseren van een aantal variabele genaamd c-- 520 00:22:58,680 --> 00:23:03,220 maar ik kon dit anything-- hebben genoemd dus c wordt geïnitialiseerd tot kapitaal A. 521 00:23:03,220 --> 00:23:07,560 >> Omdat aan het eind van de dag, de computer maakt het niet uit wat je het opslaan, 522 00:23:07,560 --> 00:23:10,170 Het geeft alleen maar hoe je wilt om die informatie te presenteren. 523 00:23:10,170 --> 00:23:13,560 Hoe beoordeelt u de computer te willen interpreteren patroon bits? 524 00:23:13,560 --> 00:23:16,320 Dus dit is niet iets wat ik zou adviseren over het algemeen doen. 525 00:23:16,320 --> 00:23:19,500 Het is eigenlijk gewoon een voorbeeld om over te brengen dat je kan absoluut 526 00:23:19,500 --> 00:23:22,049 initialiseren een integer naar een char. 527 00:23:22,049 --> 00:23:24,090 Omdat onder de motorkap van een char, natuurlijk 528 00:23:24,090 --> 00:23:26,170 is maar een getal van 0 tot 255. 529 00:23:26,170 --> 00:23:28,540 >> Dus je kan zeker zet het in een int. 530 00:23:28,540 --> 00:23:30,890 En wat dit ook laat zien, is dat we 531 00:23:30,890 --> 00:23:34,040 kunt converteren van het ene type naar het andere, hier, 532 00:23:34,040 --> 00:23:36,780 uiteindelijk het afdrukken van het zelfde ding. 533 00:23:36,780 --> 00:23:44,760 En in feite, deze zal ik vast online-- bedoeld was om dit te zeggen, nogmaals, hier. 534 00:23:44,760 --> 00:23:48,610 Laat me dit opruimen online, en we zullen zien in een online walkthrough als nodig is, 535 00:23:48,610 --> 00:23:50,280 wat er werd bedoeld. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Dus laatste voorbeeld nu met a's en b's en dan gaan we 538 00:23:53,892 --> 00:23:54,850 nemen de dingen een inkeping. 539 00:23:54,850 --> 00:23:58,330 Dus met een en b's en c's in de kapitalisatie 540 00:23:58,330 --> 00:24:01,560 en de gelijkwaardigheid daarvan, laten we een kijkje nemen op dit voorbeeld hier. 541 00:24:01,560 --> 00:24:02,752 Een andere code voorbeeld. 542 00:24:02,752 --> 00:24:04,460 We zullen een die openen al gemaakt, dus we 543 00:24:04,460 --> 00:24:06,440 niet hoeft te typen allemaal vanaf nul. 544 00:24:06,440 --> 00:24:09,420 >> En bericht in afwachting we gebruik van meerdere header 545 00:24:09,420 --> 00:24:13,240 bestanden, waaronder is onze nieuwe vriend, string.h. 546 00:24:13,240 --> 00:24:15,597 Nu lijkt dit op het eerste blik, een beetje cryptisch. 547 00:24:15,597 --> 00:24:18,180 Maar laten we eens kijken of we niet kunnen beredeneren door wat er aan de hand hier. 548 00:24:18,180 --> 00:24:21,150 Eerst krijg ik een string van de gebruiker, en ik zet die string in een variabele 549 00:24:21,150 --> 00:24:22,286 genaamd s. 550 00:24:22,286 --> 00:24:24,090 Copy paste van voor. 551 00:24:24,090 --> 00:24:27,250 In lijn 22, ik ben blijkbaar doet precies wat 552 00:24:27,250 --> 00:24:30,760 Ik heb daarnet, ik itereren over de personages in s. 553 00:24:30,760 --> 00:24:34,780 >> En de nieuwe trucs hier gebruikt lengte van de string, de minderjarige optimalisatie 554 00:24:34,780 --> 00:24:37,930 opslaan van de string lengte n, eerder dan roeping weer strlen, 555 00:24:37,930 --> 00:24:38,850 en opnieuw, en opnieuw. 556 00:24:38,850 --> 00:24:41,120 En gewoon controleren dat ik minder dan n. 557 00:24:41,120 --> 00:24:43,330 Nu hier, dingen wat interessant. 558 00:24:43,330 --> 00:24:45,980 Maar het is gewoon een toepassing ditzelfde nieuw idee. 559 00:24:45,980 --> 00:24:48,470 Wat in het Engels doet s beugel i vertegenwoordigen? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> PUBLIEK: Tellen elke karakter [onverstaanbaar]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. MALAN: Het tellen van elk personage. 563 00:24:55,926 --> 00:24:58,680 En nog beknopter, s beugel i vertegenwoordigen wat? 564 00:24:58,680 --> 00:25:00,950 Zou je zeggen. 565 00:25:00,950 --> 00:25:04,084 Niet om u op de plek zetten hier. 566 00:25:04,084 --> 00:25:06,375 >> PUBLIEK: goed-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. MALAN: Dus als het woord is-- als de string is Zamyla, die starts-- 568 00:25:09,500 --> 00:25:12,380 PUBLIEK: --u omgaan met de personages separately-- 569 00:25:12,380 --> 00:25:13,690 DAVID J. MALAN: Goed. 570 00:25:13,690 --> 00:25:14,190 Precies. 571 00:25:14,190 --> 00:25:17,940 Het plein haakjesnotering kunt u toegang tot de afzonderlijke karakter, 572 00:25:17,940 --> 00:25:21,120 dus s beugel 0 gaat het worden eerste teken in de reeks. 573 00:25:21,120 --> 00:25:24,110 s beugel 1 gaat worden de tweede, enzovoort. 574 00:25:24,110 --> 00:25:28,050 Dus de vraag die ik ben gevraagd, Hier, in deze toestand is wat? 575 00:25:28,050 --> 00:25:33,984 Is de i'th karakter van s groter dan of gelijk aan een kleine letters? 576 00:25:33,984 --> 00:25:36,400 En wat betekent dit, hier, met de dubbele ampersand? 577 00:25:36,400 --> 00:25:36,800 PUBLIEK (SAMEN): En. 578 00:25:36,800 --> 00:25:37,210 DAVID J. MALAN: En. 579 00:25:37,210 --> 00:25:38,418 Het is gewoon gelijk aan deze. 580 00:25:38,418 --> 00:25:42,310 En is het niet een trefwoord in C, moet je gebruik, hinderlijk, ampersand-teken. 581 00:25:42,310 --> 00:25:47,520 En dat, omgekeerd, zich stelt is s's i'th karakter kleiner dan of gelijk 582 00:25:47,520 --> 00:25:49,030 naar kleine letters z? 583 00:25:49,030 --> 00:25:52,440 En nogmaals, hier is waar begrijpen van de onderliggende 584 00:25:52,440 --> 00:25:54,550 implementatie van een computer zinvol. 585 00:25:54,550 --> 00:25:57,330 Merk op dat, ook al heb ik de dot dot dot daar, 586 00:25:57,330 --> 00:26:04,410 ziet eruit als een tot z in kleine letters worden alle aangrenzende waarden op van 97 naar boven. 587 00:26:04,410 --> 00:26:07,820 >> En hetzelfde voor hoofdletters beginnen bij 65. 588 00:26:07,820 --> 00:26:10,410 Dus het afhaalrestaurant, dan, is dat in het Engels, 589 00:26:10,410 --> 00:26:12,760 hoe zou u welke lijn 24 aan het doen is? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Yeah? 592 00:26:16,728 --> 00:26:21,575 >> PUBLIEK: Op 24 het is het controleren om te zien of elk personage is een kleine letter. 593 00:26:21,575 --> 00:26:24,700 DAVID J. MALAN: Het is het controleren of elk personage is een kleine letter. 594 00:26:24,700 --> 00:26:28,590 Dus zelfs beknopter, is de i'th karakter van s kleine letters? 595 00:26:28,590 --> 00:26:30,690 Dat is alles wat we hier uiten logisch, 596 00:26:30,690 --> 00:26:33,750 een beetje cryptisch, maar uiteindelijk vrij rechttoe rechtaan. 597 00:26:33,750 --> 00:26:36,480 Is s's i'th karakter kleine letters? 598 00:26:36,480 --> 00:26:40,130 >> Als dat zo is, en hier is waar dingen een beetje breinbrekende 599 00:26:40,130 --> 00:26:44,760 voor slechts een moment, als dat zo is, ga vooruit en afdrukken van een personage. 600 00:26:44,760 --> 00:26:47,360 Dus dit is slechts een tijdelijke aanduiding, maar wat karakter? 601 00:26:47,360 --> 00:26:53,710 Waarom doe ik s beugel i minus deze uitdrukking hier? 602 00:26:53,710 --> 00:26:55,110 >> Wel merkt het patroon hier. 603 00:26:55,110 --> 00:26:57,380 De werkelijke aantallen doen er niet toe zo veel. 604 00:26:57,380 --> 00:27:02,700 Maar merk 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 uit 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 grote C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Dus er is 32 hop uit ene letter naar de andere. 612 00:27:14,550 --> 00:27:17,790 Dus eerlijk gezegd, kon vereenvoudigen dit naar dat. 613 00:27:17,790 --> 00:27:20,400 Maar dan ben ik soort van harde codering dit lage inzicht 614 00:27:20,400 --> 00:27:21,740 dat geen enkele lezer ooit gaan begrijpen. 615 00:27:21,740 --> 00:27:25,080 Dus ik ga het generaliseren als ik weet de kleine letters zijn groter. 616 00:27:25,080 --> 00:27:28,400 Ik weet dat de hoofdletters zijn kleinere waarden, ironisch genoeg. 617 00:27:28,400 --> 00:27:33,216 >> Maar dit is feitelijk gelijkwaardig aan zeggen aftrekken 32 uit s beugel i. 618 00:27:33,216 --> 00:27:35,430 Dus in de context van deze brieven, als de brief 619 00:27:35,430 --> 00:27:38,950 gebeurt er met een, kleine letters een, en ik trek 32, 620 00:27:38,950 --> 00:27:43,442 welk effect heeft dat, mathematisch, op kleine letter a? 621 00:27:43,442 --> 00:27:44,400 PUBLIEK: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. MALAN: Maakt van het. 623 00:27:45,691 --> 00:27:48,440 En inderdaad, dit is de reden waarom onze programma heet kapitaliseren nul. 624 00:27:48,440 --> 00:27:51,590 Dit programma ofwel kapitaliseert een brief, 625 00:27:51,590 --> 00:27:54,580 nadat is gecontroleerd of het inderdaad een kleine letter. 626 00:27:54,580 --> 00:27:59,810 Anders, in lijn 30, wat moet ik doen als het is niet een kleine letter, dat ben ik 627 00:27:59,810 --> 00:28:02,852 kijken op een bepaald iteratie in de lus. 628 00:28:02,852 --> 00:28:03,890 Gewoon uitprinten. 629 00:28:03,890 --> 00:28:07,010 >> Dus niet dingen veranderen dat is niet eens kleine letters. 630 00:28:07,010 --> 00:28:10,790 Jezelf beperken tot beetje een door kleine z. 631 00:28:10,790 --> 00:28:12,730 Nu is dit vrij geheimzinnig. 632 00:28:12,730 --> 00:28:15,230 Maar aan het eind van de dag, het is hoe we, Once upon a time, 633 00:28:15,230 --> 00:28:16,460 had om dingen te implementeren. 634 00:28:16,460 --> 00:28:19,780 Als ik in plaats daarvan openen kapitaliseren een, oh god zij dank. 635 00:28:19,780 --> 00:28:22,320 Er is een functie riep bovenste die kunnen 636 00:28:22,320 --> 00:28:25,410 doen alles wat we net gedaan bij vrij laag. 637 00:28:25,410 --> 00:28:28,752 >> Nu tot de bovenste is interessant want het wordt verklaard in een bestand, 638 00:28:28,752 --> 00:28:31,210 en je zou alleen dit weten door het controleren van de documentatie, 639 00:28:31,210 --> 00:28:35,730 of wordt verteld, laten we zeggen, in de klas, waar het bestaat, in een bestand genaamd ctype.h. 640 00:28:35,730 --> 00:28:37,630 Dus dit is weer een nieuwe vriend van ons. 641 00:28:37,630 --> 00:28:40,750 En tot de bovenste precies doet wat de naam doet vermoeden. 642 00:28:40,750 --> 00:28:44,860 >> Je kunt pas in, als een argument, tussen deze haakjes, wat karakter. 643 00:28:44,860 --> 00:28:48,390 Ik ga pas in de i'th karakter van s met behulp van onze mooie nieuwe notatie 644 00:28:48,390 --> 00:28:49,870 waarbij vierkante haken. 645 00:28:49,870 --> 00:28:53,391 En neem een ​​gok, wat is het rendement waarde van de bovenste schijnbaar gaan 646 00:28:53,391 --> 00:28:53,890 te zijn? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Een hoofdletter. 649 00:28:57,770 --> 00:28:58,620 Een hoofdletter. 650 00:28:58,620 --> 00:29:02,330 >> Dus als ik pas in kleine letters a, hopelijk, per definitie van de bovenste, 651 00:29:02,330 --> 00:29:05,600 het gaat om een ​​terug hoofdletter A. Anders 652 00:29:05,600 --> 00:29:08,590 als het niet een kleine letter in de eerste plaats, ik print het gewoon uit. 653 00:29:08,590 --> 00:29:10,800 En inderdaad, let op de tweede vriend hier. 654 00:29:10,800 --> 00:29:13,840 Niet alleen om de bovenste bestaat, maar kleiner, wat 655 00:29:13,840 --> 00:29:16,200 daadwerkelijk beantwoordt die vraag voor mij. 656 00:29:16,200 --> 00:29:19,730 >> Nu wie deze dingen schreef, 10s van jaren geleden, weet je wat? 657 00:29:19,730 --> 00:29:23,840 Geïmplementeerd om de bovenste en is verlagen met behulp van code als deze. 658 00:29:23,840 --> 00:29:27,270 Maar nogmaals, in overeenstemming met Dit idee van abstraheren weg, 659 00:29:27,270 --> 00:29:29,190 soort, lager niveau implementatie details. 660 00:29:29,190 --> 00:29:32,600 En staande op de schouders van de mensen die voor ons kwamen, met behulp van functies 661 00:29:32,600 --> 00:29:36,300 als de bovenste en onderste, welke wonderlijk genoeg zijn mooi 662 00:29:36,300 --> 00:29:40,190 genoemd om te zeggen wat ze doen, is een prachtige paradigma aan te nemen. 663 00:29:40,190 --> 00:29:44,040 >> Nu, het blijkt dat als ik lees de man pagina voor, laten we zeggen, de bovenste, 664 00:29:44,040 --> 00:29:45,010 Ik leer iets anders. 665 00:29:45,010 --> 00:29:46,890 Dus man toUpper. 666 00:29:46,890 --> 00:29:48,050 Het is een beetje overweldigend. 667 00:29:48,050 --> 00:29:51,110 Maar let op, hier is dat de vermelding van het header-bestand dat ik moet gebruiken. 668 00:29:51,110 --> 00:29:54,460 Even terzijde, want dit misleidend, de functie 669 00:29:54,460 --> 00:29:59,070 gebruikt ints plaats van chars om redenen van foutcontrole. 670 00:29:59,070 --> 00:30:01,260 Maar we zullen misschien komen naar die in de toekomst. 671 00:30:01,260 --> 00:30:05,910 >> Maar let op, hier, om de bovenste bekeerlingen de letter c in hoofdletters indien mogelijk. 672 00:30:05,910 --> 00:30:07,674 Dus dat is vrij eenvoudig. 673 00:30:07,674 --> 00:30:09,340 En laten we nu een beetje meer specifiek. 674 00:30:09,340 --> 00:30:12,750 Laten we eens kijken naar het deel van de man pagina onder return waarde. 675 00:30:12,750 --> 00:30:15,420 De geretourneerde waarde is dat van de geconverteerde brief. 676 00:30:15,420 --> 00:30:18,690 Of c, indien de conversie niet mogelijk was, 677 00:30:18,690 --> 00:30:20,250 waarbij c de oorspronkelijke ingang. 678 00:30:20,250 --> 00:30:24,140 Waarvan ik weet van hier, van het argument om naar de bovenste. 679 00:30:24,140 --> 00:30:25,780 >> Dus wat is de afhaal van deze? 680 00:30:25,780 --> 00:30:28,060 De geretourneerde waarde is dat van de geconverteerde brief, 681 00:30:28,060 --> 00:30:32,110 of c de oorspronkelijke brief, indien de conversie niet mogelijk. 682 00:30:32,110 --> 00:30:36,460 Wat verbetering kan ik dan ook leveren aan het ontwerp van mijn code's? 683 00:30:36,460 --> 00:30:37,146 Yeah? 684 00:30:37,146 --> 00:30:38,810 >> PUBLIEK: U kunt het anders verwijderen. 685 00:30:38,810 --> 00:30:40,810 DAVID J. MALAN: ik kan verwijder de else 686 00:30:40,810 --> 00:30:42,510 en niet alleen de instructie else. 687 00:30:42,510 --> 00:30:44,150 >> PUBLIEK: U kunt verwijderen [onverstaanbaar]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. MALAN: ik kan verwijder de hele vork 689 00:30:46,310 --> 00:30:48,209 in de weg, het zo heel anders. 690 00:30:48,209 --> 00:30:50,250 Dus inderdaad, laat me openen de definitieve versie van dit, 691 00:30:50,250 --> 00:30:55,540 kapitaliseren-2 en merk op hoe, wanneer je zult, sexy, de code krijgt nu, 692 00:30:55,540 --> 00:31:00,040 in die ik heb teruggebracht van enkele zeven of zo lijnen slechts vier, 693 00:31:00,040 --> 00:31:03,850 de functionaliteit die ik van plan was door gewoon te bellen naar de bovenste, 694 00:31:03,850 --> 00:31:09,410 passeren in s beugel i, en printen uit, met de tijdelijke aanduiding% c, 695 00:31:09,410 --> 00:31:11,090 dat specifieke karakter. 696 00:31:11,090 --> 00:31:14,560 >> Nu misschien wel, er is een bug, of ten minste het risico van een bug, 697 00:31:14,560 --> 00:31:15,350 in dit programma. 698 00:31:15,350 --> 00:31:18,200 Dus gewoon om terug te komen naar een eerdere, eten 699 00:31:18,200 --> 00:31:21,820 wat moet ik waarschijnlijk ook doen in dit programma om het robuuster te maken, 700 00:31:21,820 --> 00:31:24,974 zodat er geen manier het kan crashen, zelfs in uitzonderlijke gevallen? 701 00:31:24,974 --> 00:31:26,390 PUBLIEK: Zorg ervoor dat het niet NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. MALAN: Zorg ervoor dat het niet NULL. 703 00:31:28,056 --> 00:31:31,030 Dus echt, om deze super maken juist, ik zou zoiets doen, 704 00:31:31,030 --> 00:31:35,300 als s niet NULL is, dan ga je gang en uit te voeren 705 00:31:35,300 --> 00:31:38,470 de volgende regels code, die Ik kan dan streepje als dat, 706 00:31:38,470 --> 00:31:39,870 en vervolgens in mijn nauwe brace. 707 00:31:39,870 --> 00:31:41,550 Zo goed aan elkaar knopen van de twee ideeën. 708 00:31:41,550 --> 00:31:42,429 Yeah? 709 00:31:42,429 --> 00:31:44,470 Publiek: Kunt u gebruik maken van een doen terwijl lus, in plaats daarvan? 710 00:31:44,470 --> 00:31:47,270 DAVID J. MALAN: Kon Ik doe een do while lus? 711 00:31:47,270 --> 00:31:50,020 PUBLIEK: --u willen ervoor zorgen dat je eigenlijk [onverstaanbaar]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. MALAN: Kon u een doe gebruiken terwijl? 713 00:31:51,728 --> 00:31:52,450 Korte antwoord nee. 714 00:31:52,450 --> 00:31:54,700 Want je staat op het punt introduceren andere hoek case. 715 00:31:54,700 --> 00:31:56,660 Als de string is van lengte nul. 716 00:31:56,660 --> 00:31:59,600 Als ik bijvoorbeeld gewoon op Voeren, zonder ooit te typen Zamyla. 717 00:31:59,600 --> 00:32:02,490 Ik ga u terug te geven een echte snaar, als we uiteindelijk zullen zien, 718 00:32:02,490 --> 00:32:03,780 dat nul karakters. 719 00:32:03,780 --> 00:32:05,630 Het is nog steeds een string, het is gewoon super kort. 720 00:32:05,630 --> 00:32:07,960 Maar als je een doe gebruiken terwijl, je gaat blindelings 721 00:32:07,960 --> 00:32:10,050 proberen om iets te doen met respect voor die string, 722 00:32:10,050 --> 00:32:12,537 en niets gaat om daar te zijn. 723 00:32:12,537 --> 00:32:18,607 >> PUBLIEK: Nou, als je dat deed doen [onverstaanbaar], terwijl S-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. MALAN: Oh ik zie, houden om een ​​koord van de gebruiker. 725 00:32:21,190 --> 00:32:23,525 Dus kort antwoord, je kon, en blijf pesten 726 00:32:23,525 --> 00:32:26,150 hen om u een string dat is geven kort genoeg om te passen in het geheugen. 727 00:32:26,150 --> 00:32:26,700 Absoluut. 728 00:32:26,700 --> 00:32:27,630 Ik koos gewoon niet aan. 729 00:32:27,630 --> 00:32:30,505 Als ze niet geef me de string I wil, ga ik stoppen, ben ik het opgeven. 730 00:32:30,505 --> 00:32:33,260 Maar absoluut, voor dat doel, kon je absoluut doen. 731 00:32:33,260 --> 00:32:37,500 >> Dus header bestanden van de bibliotheek die we zijn nu bekend bent met deze, hier. 732 00:32:37,500 --> 00:32:41,550 Standaard I / O, CS50.h, string.h, ctype.h, en er zijn inderdaad anderen. 733 00:32:41,550 --> 00:32:44,460 Sommigen van jullie hebben ontdekt de wiskunde bibliotheek in math.h. 734 00:32:44,460 --> 00:32:48,200 Maar laat me je voorstellen, nu, naar deze bron die CS50 personeel, Davin, 735 00:32:48,200 --> 00:32:50,630 en Rob, en Gabe bijzonder hebben samengesteld. 736 00:32:50,630 --> 00:32:52,630 Dat zal binnenkort te koppelen aan de website van de cursus. 737 00:32:52,630 --> 00:32:54,870 Het heet CS50 referentie. 738 00:32:54,870 --> 00:32:58,230 >> Die alleen maar om u een snelle geven smaak te pakken, werkt als volgt. 739 00:32:58,230 --> 00:33:00,740 Laat me gaan naar reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Je ziet aan de linkerkant kant een overweldigende lijst 741 00:33:02,990 --> 00:33:04,595 van functies die komen met c. 742 00:33:04,595 --> 00:33:07,790 Maar als ik de zorg, voor het moment, over iets als strlen, 743 00:33:07,790 --> 00:33:08,746 Ik kan het daar te typen. 744 00:33:08,746 --> 00:33:10,870 Het filtert de lijst om gewoon wat ik zorg over. 745 00:33:10,870 --> 00:33:11,940 Ik ga het klikt. 746 00:33:11,940 --> 00:33:14,740 En nu aan de linkerzijde, je zult zien wat we hopen 747 00:33:14,740 --> 00:33:18,290 is een eenvoudiger, menselijke vriendelijke uitleg van hoe 748 00:33:18,290 --> 00:33:19,170 deze functie werkt. 749 00:33:19,170 --> 00:33:20,600 >> Geeft de lengte van een string. 750 00:33:20,600 --> 00:33:24,060 Hier is een overzicht, hier is hoe je gebruiken in termen van het header bestand, 751 00:33:24,060 --> 00:33:27,430 en in termen van wat de functie lijkt in termen van zijn argumenten. 752 00:33:27,430 --> 00:33:30,250 En dan hier terug de lengte van een tekenreeks. 753 00:33:30,250 --> 00:33:34,280 Maar voor degenen onder u meer comfort, je kunt eigenlijk op meer comfortabele, 754 00:33:34,280 --> 00:33:37,070 en de inhoud van deze pagina, nu, zal veranderen 755 00:33:37,070 --> 00:33:41,660 de standaardwaarden welke zijn je krijgt door het gebruik van de man-pagina. 756 00:33:41,660 --> 00:33:44,100 >> Met andere woorden, CS50 verwijzing is een vereenvoudiging 757 00:33:44,100 --> 00:33:46,220 van de man-pagina's van het personeel, voor de studenten. 758 00:33:46,220 --> 00:33:49,320 In het bijzonder, die minder comfortabel en in tussen, zodat je 759 00:33:49,320 --> 00:33:51,660 hoeven niet te proberen te wikkelen je geest rond, eerlijk gezegd, 760 00:33:51,660 --> 00:33:55,030 aantal vrij cryptische syntaxis en documentatie ergens. 761 00:33:55,030 --> 00:33:57,650 >> Dus hou dat in gedachten in de komende dagen. 762 00:33:57,650 --> 00:33:59,560 Dus hier, nogmaals, is een Zamyla. 763 00:33:59,560 --> 00:34:03,255 Laten we nu een vraag stellen dat is iets meer menselijke toegankelijk. 764 00:34:03,255 --> 00:34:05,380 Dankzij Chang, die al afdrukken meer olifanten 765 00:34:05,380 --> 00:34:07,090 non-stop voor de laatste paar dagen. 766 00:34:07,090 --> 00:34:09,730 We hebben een kans om te geven ten minste een van hen weg. 767 00:34:09,730 --> 00:34:13,239 Als we slechts een vrijwilliger kon krijgen om op te komen tot op het scherm tekenen. 768 00:34:13,239 --> 00:34:14,530 Hoe zit het hier? 769 00:34:14,530 --> 00:34:15,340 >> Kom maar naar boven. 770 00:34:15,340 --> 00:34:16,720 Wat is je 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 Oke. 774 00:34:18,259 --> 00:34:19,388 Alex, kom op. 775 00:34:19,388 --> 00:34:21,679 We staan ​​op het punt om te zien uw handschrift op het scherm hier. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Oke, leuk je te ontmoeten. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Leuk je je te ontmoeten. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. MALAN: Oke. 780 00:34:27,512 --> 00:34:28,969 Dus, super eenvoudige oefening. 781 00:34:28,969 --> 00:34:31,440 Bar is niet hoog te krijgen een olifant vandaag. 782 00:34:31,440 --> 00:34:33,439 Je speelt de rol van getString. 783 00:34:33,439 --> 00:34:35,980 En ik ga gewoon vertellen de string die je hebt gekregen. 784 00:34:35,980 --> 00:34:38,080 En stel dat je, getString, zijn geroepen. 785 00:34:38,080 --> 00:34:42,480 En de mens, net als ik, heeft ingetypt Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Gewoon doorgaan en schrijf Zamyla op de scherm alsof je hebt het gekregen 787 00:34:45,650 --> 00:34:47,250 en bewaard het ergens in het geheugen. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Ruimte wordt gelaten voor wat meerdere zullen zijn andere words-- dat is OK, ga door. 790 00:34:55,570 --> 00:34:59,620 >> [Lachen] 791 00:34:59,620 --> 00:35:00,800 >> Dus Zamyla, Excellent. 792 00:35:00,800 --> 00:35:04,880 Dus nu veronderstellen dat u, getString, worden opnieuw opgeroepen. 793 00:35:04,880 --> 00:35:09,350 En daarom geef ik u, bij het toetsenbord, met een andere naam, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Oke. 796 00:35:18,060 --> 00:35:22,380 En nu de volgende keer getString is genaamd, typ ik in iets als Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Je bent echt van de grond tot hart random access memory. 798 00:35:27,560 --> 00:35:29,631 Die trekt alles volledig willekeurig. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Lachen] 801 00:35:31,104 --> 00:35:32,520 ALEX: Sorry mijn handschrift is slecht. 802 00:35:32,520 --> 00:35:33,770 DAVID J. MALAN: Nee, dat is OK. 803 00:35:33,770 --> 00:35:40,480 En wat te denken van Rob, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Goed. 805 00:35:41,020 --> 00:35:43,853 Dus ik heb je niet verwachten zou soort dingen uit te leggen op deze manier. 806 00:35:43,853 --> 00:35:45,020 Maar we kunnen dit werk te maken. 807 00:35:45,020 --> 00:35:48,810 Dus hoe ga je over het leggen van deze tekens in het geheugen? 808 00:35:48,810 --> 00:35:51,310 Met andere woorden, als we denken Dit rechthoekige zwart scherm 809 00:35:51,310 --> 00:35:53,550 als vertegenwoordiger van een De RAM van de computer of het geheugen. 810 00:35:53,550 --> 00:35:55,850 >> En herinneren dat RAM is gewoon een hele hoop van bytes, 811 00:35:55,850 --> 00:35:57,480 en bytes zijn een hele hoop bits. 812 00:35:57,480 --> 00:35:59,350 En bits zijn een of andere manier uitgevoerd, meestal 813 00:35:59,350 --> 00:36:01,119 met een vorm van elektriciteit in hardware. 814 00:36:01,119 --> 00:36:03,160 Dus dat is een soort van de gelaagdheid we hebben gesproken over 815 00:36:03,160 --> 00:36:04,510 en kan nu voor lief nemen. 816 00:36:04,510 --> 00:36:07,020 Hoe heb je over beslissen waar te schrijven 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: Ik deed het gewoon in de bestellen dat je me vertelde. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: En dat is waar. 820 00:36:15,650 --> 00:36:20,100 Maar wat beheerst waar je Naam Belinda's en de naam van Gabe's? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Niets? 822 00:36:20,764 --> 00:36:22,930 DAVID J. MALAN: [Lacht] Dus dat werkt, dat is prima. 823 00:36:22,930 --> 00:36:25,290 Dus computers little ordelijker dan dat. 824 00:36:25,290 --> 00:36:29,000 En dus toen implement-- we daar blijven voor slechts een moment-- toen we eigenlijk 825 00:36:29,000 --> 00:36:31,470 zoiets te implementeren getString in een computer, 826 00:36:31,470 --> 00:36:34,480 Zamyla kan vrij veel worden aangelegd zoals je deed op het scherm, is er. 827 00:36:34,480 --> 00:36:36,660 >> En wat is belangrijk op te merken hier, wat Alex deed, 828 00:36:36,660 --> 00:36:40,260 is er een soort van een afbakening onder elk van deze woorden, toch? 829 00:36:40,260 --> 00:36:46,580 Je schreef niet Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 Met andere woorden, er is een soort scheidingslijn die lijkt te zijn, 831 00:36:49,740 --> 00:36:52,370 soort, willekeurige afstand tussen deze verschillende woorden. 832 00:36:52,370 --> 00:36:54,120 Maar dat is goed, want wij mensen kunnen nu 833 00:36:54,120 --> 00:36:56,470 visualiseren dat deze vier snaren. 834 00:36:56,470 --> 00:36:59,540 Het is niet alleen een opeenvolging van veel tekens. 835 00:36:59,540 --> 00:37:04,190 Dus een computer, dan, ondertussen, misschien een string te nemen zoals Zamyla, 836 00:37:04,190 --> 00:37:07,220 zet elk van deze brieven binnenkant van een byte geheugen. 837 00:37:07,220 --> 00:37:10,400 Maar dat aantal is veel groter, natuurlijk dan zes tekens. 838 00:37:10,400 --> 00:37:11,690 >> Er is een hele hoop RAM. 839 00:37:11,690 --> 00:37:15,330 En dus voortaan, deze raster van dozen gaat 840 00:37:15,330 --> 00:37:17,560 wat Alex gewoon vertegenwoordigen heeft hier op het scherm. 841 00:37:17,560 --> 00:37:20,937 En nu, Alex, kunnen wij u een aanbieden blauwe of een oranje olifant van Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Ik zal een blauwe olifant nemen. 843 00:37:22,270 --> 00:37:23,120 DAVID J. MALAN: Een blauwe olifant. 844 00:37:23,120 --> 00:37:25,580 Dus een groot applaus, als we konden, voor Alex hier. 845 00:37:25,580 --> 00:37:26,100 >> [Applaus] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Dank je wel. 847 00:37:26,766 --> 00:37:28,820 DAVID J. MALAN: Dank je wel. 848 00:37:28,820 --> 00:37:36,230 Dus de afhaalmaaltijd dat, hoewel de patroon soort veranderd in de tijd, hier 849 00:37:36,230 --> 00:37:40,430 op het bord, was er dit afbakening tussen de verschillende snaren 850 00:37:40,430 --> 00:37:42,610 dat Alex voor ons kregen. 851 00:37:42,610 --> 00:37:45,230 Nu computers, eerlijk gezegd, zou hetzelfde doen. 852 00:37:45,230 --> 00:37:48,210 Ze konden soort plop strings overal in RAM. 853 00:37:48,210 --> 00:37:50,710 Hier, hier, hier beneden, hier beneden. 854 00:37:50,710 --> 00:37:52,020 >> Ze konden precies dat te doen. 855 00:37:52,020 --> 00:37:54,280 Maar natuurlijk, dat waarschijnlijk niet de beste planning. 856 00:37:54,280 --> 00:37:54,780 Rechts? 857 00:37:54,780 --> 00:37:57,340 Als ik bleef maar vragen naar Alex krijgen namen, waarschijnlijk had hij 858 00:37:57,340 --> 00:38:01,370 zet wat meer down hier, misschien tot hier, hier, hier, uiteindelijk 859 00:38:01,370 --> 00:38:02,211 hier. 860 00:38:02,211 --> 00:38:05,460 Maar met een beetje meer planning, zeker, we konden dingen schoner lay-out. 861 00:38:05,460 --> 00:38:07,350 En inderdaad, dat is wat een computer doet. 862 00:38:07,350 --> 00:38:10,720 >> Maar de vangst is dat als de volgende snaar krijg ik 863 00:38:10,720 --> 00:38:14,050 na Zamyla is iets zoals de Belinda, 864 00:38:14,050 --> 00:38:17,929 stellen waar we zouden kunnen schrijven de letter b ten opzichte van dit raster? 865 00:38:17,929 --> 00:38:18,720 Waar zou je gaan? 866 00:38:18,720 --> 00:38:21,480 Rechts van de a, onder de z, onder de a? 867 00:38:21,480 --> 00:38:23,204 Wat zou uw eerste instincten zijn? 868 00:38:23,204 --> 00:38:24,120 PUBLIEK: Onder de z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. MALAN: Dus onder de z. 870 00:38:25,100 --> 00:38:26,530 En dat is vrij eenvoudig, toch? 871 00:38:26,530 --> 00:38:29,321 Het is een soort van nette, het is wat we doen op een toetsenbord als we druk op Enter, 872 00:38:29,321 --> 00:38:31,770 of een e-mail bij het maken van een opsommingstekens lijst van dingen. 873 00:38:31,770 --> 00:38:34,310 Maar de realiteit is dat computers proberen om efficiënter te werken, 874 00:38:34,310 --> 00:38:37,170 en proppen zeker zo veel gegevens in het RAM mogelijk, 875 00:38:37,170 --> 00:38:38,890 zodat u geen bytes verspillen. 876 00:38:38,890 --> 00:38:41,545 Zodat u geen afval elk scherm onroerend goed. 877 00:38:41,545 --> 00:38:44,170 Het probleem is echter dat als we letterlijk de brief 878 00:38:44,170 --> 00:38:49,940 b na een, hoe gaan we om weten waar de naam Zamyla eindigt 879 00:38:49,940 --> 00:38:51,840 en de naam van de Belinda begint? 880 00:38:51,840 --> 00:38:55,270 Dus je mensen gewoon voorgesteld, goed, druk op de Enter-toets, in wezen. 881 00:38:55,270 --> 00:38:56,410 Zet het hieronder neer. 882 00:38:56,410 --> 00:38:59,750 Of zelfs als Alex deed, gewoon beginnen met schrijven de volgende naam onder de vorige, 883 00:38:59,750 --> 00:39:01,583 en daaronder, en dan onder die ene. 884 00:39:01,583 --> 00:39:02,510 Dat is een visuele cue. 885 00:39:02,510 --> 00:39:05,960 >> Computers hebben een andere visuele cue, maar het is een beetje meer beknopt. 886 00:39:05,960 --> 00:39:07,840 Het is deze funky karakter. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, dat is misschien wel doet denken aan backslash n, 888 00:39:11,890 --> 00:39:12,640 enzovoort, nu. 889 00:39:12,640 --> 00:39:14,120 De speciale escape sequences. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 is de weg van waarbij acht nul bits in een rij. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> De manier waarop je dat uit te drukken is niet te raakte het getal nul op je toetsenbord, 893 00:39:26,130 --> 00:39:28,140 want in feite, dat is een ASCII-tekens. 894 00:39:28,140 --> 00:39:30,990 Het ziet eruit als een nummer, maar is eigenlijk een decimaal getal 895 00:39:30,990 --> 00:39:35,910 dat is de circulaire glyph, de cirkelvormige lettertype. 896 00:39:35,910 --> 00:39:38,410 Ondertussen, backslash nul betekent, letterlijk 897 00:39:38,410 --> 00:39:40,700 zet acht nul bytes hier voor mij. 898 00:39:40,700 --> 00:39:42,136 >> Dit is enigszins arbitrair. 899 00:39:42,136 --> 00:39:44,260 We konden hebben gebruikt elke patroon bits, maar de wereld 900 00:39:44,260 --> 00:39:46,610 besloten enkele jaren geleden, dat te vertegenwoordigen 901 00:39:46,610 --> 00:39:49,710 het einde van een string in het geheugen, gewoon een hele hoop nullen. 902 00:39:49,710 --> 00:39:51,000 Want we kunnen detecteren dat. 903 00:39:51,000 --> 00:39:54,790 Nu dat betekent dat er geen brief van de alfabet kan worden weergegeven met nullen. 904 00:39:54,790 --> 00:39:58,480 >> Maar dat is OK, we hebben al gezien dat we met behulp van 65 op in 97 op maximaal. 905 00:39:58,480 --> 00:40:00,290 We hebben niet overal sluiten om alle nullen. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Dus Belinda in het geheugen van een computer er werkelijk gaande is om hier te gaan. 908 00:40:06,540 --> 00:40:09,764 Ik heb het gemaakt in het geel net om onze aandacht op te vestigen. 909 00:40:09,764 --> 00:40:11,680 En let ook deze is arbitrair. 910 00:40:11,680 --> 00:40:12,680 Ik heb het getekend als een raster. 911 00:40:12,680 --> 00:40:14,460 Zoals, RAM-geheugen is slechts enkele fysieke object. 912 00:40:14,460 --> 00:40:17,300 Het hoeft niet noodzakelijk rijen en kolommen, per se. 913 00:40:17,300 --> 00:40:20,490 Het is net een heel bos van bytes geïmplementeerd in hardware of andere manier. 914 00:40:20,490 --> 00:40:22,817 Maar als na Belinda I getypt in naam van Gabe's, 915 00:40:22,817 --> 00:40:25,650 hij gaat hier uiteindelijk op in het geheugen, en als ik getypt in naam Daven's, 916 00:40:25,650 --> 00:40:27,316 Zo, hij gaat hier eindigen. 917 00:40:27,316 --> 00:40:29,310 En ik kan blijven schrijf nog meer namen. 918 00:40:29,310 --> 00:40:32,100 >> Helaas, als ik probeer te schrijf een super lange naam, 919 00:40:32,100 --> 00:40:33,730 Ik zou uiteindelijk opraken van het geheugen. 920 00:40:33,730 --> 00:40:37,810 In welk geval, getString is gaat NULL terug, zoals we al zeiden. 921 00:40:37,810 --> 00:40:41,720 Maar gelukkig, in ieder geval in deze visuele Hier hadden we niet helemaal zo ver te krijgen. 922 00:40:41,720 --> 00:40:45,860 >> Nu, wat is leuk, is dat deze algemeen idee van de behandeling van zaken 923 00:40:45,860 --> 00:40:49,720 als zijnde in dozen is vertegenwoordiger van een kenmerk van C 924 00:40:49,720 --> 00:40:52,690 en een groot aantal andere talen, bekend als een array. 925 00:40:52,690 --> 00:40:55,490 Een array is een ander type data. 926 00:40:55,490 --> 00:40:57,380 Het is een datastructuur, als je wil. 927 00:40:57,380 --> 00:41:01,160 Structuur in de zin van het echt, soort, op zoek als een doos, op zijn minst 928 00:41:01,160 --> 00:41:02,320 in het oog van je geest. 929 00:41:02,320 --> 00:41:09,680 Een array is een aaneengesloten opeenvolging van identieke types data, 930 00:41:09,680 --> 00:41:11,330 rug aan rug aan rug aan rug. 931 00:41:11,330 --> 00:41:14,720 >> Dus een koord, in andere woorden, is een array van chars. 932 00:41:14,720 --> 00:41:16,120 Een array van karakters. 933 00:41:16,120 --> 00:41:19,070 Maar het blijkt dat je kunt hebben arrays van trossen van de dingen. 934 00:41:19,070 --> 00:41:21,870 In feite kunnen we zelfs zetten getallen in een array. 935 00:41:21,870 --> 00:41:23,920 Dus de vorm waarin we gaan beginnen 936 00:41:23,920 --> 00:41:26,590 verklaren deze gegevens structuur bekend als een array 937 00:41:26,590 --> 00:41:28,250 gaat ook vierkante haken te gebruiken. 938 00:41:28,250 --> 00:41:31,500 Maar deze vierkante haken gaan verschillende betekenis in deze context. 939 00:41:31,500 --> 00:41:33,450 >> En laten we zien het als volgt. 940 00:41:33,450 --> 00:41:36,780 Stel dat ik geopend een nieuw bestand hier. 941 00:41:36,780 --> 00:41:38,535 En ik sla dit als ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 En ik zal dit in mijn map hier besparen. 944 00:41:43,470 --> 00:41:46,130 En nu ga ik om verder te gaan en iets gaan typen 945 00:41:46,130 --> 00:41:53,940 zoals onder CS50.h bevatten stdio.h, int main leegte. 946 00:41:53,940 --> 00:41:57,370 En dan de binnenkant van hier, ik wil om eerst een int genaamd leeftijd. 947 00:41:57,370 --> 00:42:01,371 >> En ik ga dat gebruiken om een ​​te krijgen int van de gebruiker voor zijn of haar leeftijd. 948 00:42:01,371 --> 00:42:04,620 Maar dit programma moet worden door meerdere mensen, om wat voor context. 949 00:42:04,620 --> 00:42:05,490 Ik heb een lijn van mensen gekregen. 950 00:42:05,490 --> 00:42:08,281 Allemaal hebben ze te typen in hun leeftijd voor misschien wat, ik weet het niet, 951 00:42:08,281 --> 00:42:10,530 wedstrijd of evenement dat ze aangekomen voor. 952 00:42:10,530 --> 00:42:13,030 Dus de volgende persoon, I nodig een andere variabele. 953 00:42:13,030 --> 00:42:15,790 >> Want als ik het gewoon doen leeftijd krijgt getInt, dat is 954 00:42:15,790 --> 00:42:18,500 gaan afranselen, of overschrijven leeftijd van de vorige persoon. 955 00:42:18,500 --> 00:42:19,760 Dus dat is niet goed. 956 00:42:19,760 --> 00:42:21,790 Dus mijn eerste instinct zou kunnen zijn, oh, oke, 957 00:42:21,790 --> 00:42:26,260 als ik wil meerdere mensen te krijgen ages-- laten we noemen dit AGE1, 958 00:42:26,260 --> 00:42:31,280 int age2 krijgt int, int leeftijd 3 krijgt getInt. 959 00:42:31,280 --> 00:42:35,340 En nu ga ik gebruiken sommige pseudo-code hier. 960 00:42:35,340 --> 00:42:37,679 >> Doe iets met die getallen. 961 00:42:37,679 --> 00:42:40,470 We vertrekken voor een andere dag wat we daar aan het doen, omdat we alleen 962 00:42:40,470 --> 00:42:44,200 zorg voor het moment over AGE1, age2, leeftijd 3. 963 00:42:44,200 --> 00:42:46,450 Helaas, zodra ik dit programma te compileren 964 00:42:46,450 --> 00:42:51,140 en zet het in de voorkant van echte gebruikers, wat is het fundamenteel slecht ontwerp 965 00:42:51,140 --> 00:42:53,890 beslissing die ik lijken te hebben gemaakt? 966 00:42:53,890 --> 00:42:54,624 Yeah? 967 00:42:54,624 --> 00:42:55,499 PUBLIEK: [onverstaanbaar] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. MALAN: Ja, Ik heb niet eens geprobeerd 970 00:42:59,820 --> 00:43:02,028 om erachter te komen hoeveel leeftijden heb ik eigenlijk schelen? 971 00:43:02,028 --> 00:43:05,380 Als ik minder dan drie mensen hier, en dus minder dan drie eeuwen, 972 00:43:05,380 --> 00:43:07,260 Ik ben nog steeds blindelings verwacht drie. 973 00:43:07,260 --> 00:43:08,720 God verhoede vier mensen opdagen. 974 00:43:08,720 --> 00:43:10,990 Mijn programma gewoon niet hen zelfs steunen. 975 00:43:10,990 --> 00:43:13,280 >> En dus dit, lang verhaal Kortom, is het niet een goede gewoonte. 976 00:43:13,280 --> 00:43:13,780 Rechts? 977 00:43:13,780 --> 00:43:16,530 Ik was in wezen het kopiëren en code plakken en gewoon tweaken 978 00:43:16,530 --> 00:43:17,430 de namen van variabelen. 979 00:43:17,430 --> 00:43:22,410 En, mijn god, als je had, niet drie leeftijden, maar 10 of 100 of zelfs 6.500 980 00:43:22,410 --> 00:43:23,820 studenten, bijvoorbeeld. 981 00:43:23,820 --> 00:43:26,950 Dit is niet van plan om in het bijzonder te zijn elegante code, of duurzaam. 982 00:43:26,950 --> 00:43:29,200 Je gaat te hebben om herschrijven het programma elke keer 983 00:43:29,200 --> 00:43:30,760 uw aantal mensen verandert. 984 00:43:30,760 --> 00:43:35,090 >> Zo gelukkig, in onze huidige ages.c bestand voor vandaag, 985 00:43:35,090 --> 00:43:36,970 we hebben een meer slimme oplossing. 986 00:43:36,970 --> 00:43:39,800 Eerst ga ik naar het lenen construeren we hebben een paar keer gebruikt, 987 00:43:39,800 --> 00:43:43,744 dit doen terwijl lus, om te krijgen het aantal mensen in de kamer. 988 00:43:43,744 --> 00:43:46,910 Ik ga gewoon voor de gebruiker lastig te vallen, weer en weer, totdat hij of zij geeft me 989 00:43:46,910 --> 00:43:49,260 een waarde van n is dat een positief geheel getal. 990 00:43:49,260 --> 00:43:51,590 >> Ik had kunnen gebruiken, laatste tijd te krijgen positieve int. 991 00:43:51,590 --> 00:43:53,720 Maar we hebben niet dat voor echt, dus ik ging vooruit 992 00:43:53,720 --> 00:43:55,660 en opnieuw geïmplementeerd dit idee. 993 00:43:55,660 --> 00:43:58,410 Nu hier beneden, dit is de nieuwe truc. 994 00:43:58,410 --> 00:44:02,260 In regel 27, als de opmerkingen in lijn 26 aangeeft, 995 00:44:02,260 --> 00:44:05,180 verklaren een array waarin tot ieders leeftijd slaan. 996 00:44:05,180 --> 00:44:09,320 >> Dus als je wilt krijgen, niet een int, niet twee ints, maar een hele hoop ints. 997 00:44:09,320 --> 00:44:13,800 Specifiek n integers, waren n zou drie, misschien 100, misschien 1000. 998 00:44:13,800 --> 00:44:17,570 De syntax, heel eenvoudig, is om zeg, welke gegevens het type wil je? 999 00:44:17,570 --> 00:44:19,620 Wat wil je bellen dat deel van het geheugen? 1000 00:44:19,620 --> 00:44:23,530 Wat wil je aan het net te bellen dat ziet er zo uit picturaal? 1001 00:44:23,530 --> 00:44:27,700 >> En tussen haakjes hier, zeg je hoe groot je wilt dat de array te zijn. 1002 00:44:27,700 --> 00:44:30,450 En dus eerder, toen ik zei dat de syntax is hier een beetje anders, 1003 00:44:30,450 --> 00:44:33,614 we zijn nog steeds met behulp van vierkante haken, maar als ik verklaren een array, 1004 00:44:33,614 --> 00:44:35,530 Het nummer in van de vierkante haken middelen 1005 00:44:35,530 --> 00:44:37,610 hoe groot wil je de array zijn. 1006 00:44:37,610 --> 00:44:42,490 >> Daarentegen, toen we met behulp van s bracket ik een moment geleden, s, een string, 1007 00:44:42,490 --> 00:44:46,820 inderdaad een reeks tekens, maar als je niet declareren van een variabele, 1008 00:44:46,820 --> 00:44:49,760 zoals met dit zoekwoord hier, je bent gewoon krijgen 1009 00:44:49,760 --> 00:44:54,280 een specifieke index, een specifieke element van de matrix. 1010 00:44:54,280 --> 00:44:57,090 Zodra we dat weten, de rest deze is eenvoudig. 1011 00:44:57,090 --> 00:45:00,765 Als nieuwe ik eerst ga om uit te printen wat is de leeftijd van de persoon getal i. 1012 00:45:00,765 --> 00:45:03,890 Waar zeg ik gewoon persoon nummer een, persoon nummer twee, persoon nummer drie. 1013 00:45:03,890 --> 00:45:06,306 >> En ik doe gewoon rekenen, zodat als normale mensen, 1014 00:45:06,306 --> 00:45:09,030 we optellen ve voor deze programma en niet van nul. 1015 00:45:09,030 --> 00:45:13,620 Dan roep ik getint, maar ik bewaar het antwoord in tijden beugel i. 1016 00:45:13,620 --> 00:45:16,610 Wat is de i'th leeftijd in de array. 1017 00:45:16,610 --> 00:45:21,640 Dus dat de laatste keer dat we behandelden deze vakken als tekens voor de naam Zamyla's, 1018 00:45:21,640 --> 00:45:22,490 en anderen. 1019 00:45:22,490 --> 00:45:26,530 Nu, deze dozen vertegenwoordigen 32 bits, of vier bytes 1020 00:45:26,530 --> 00:45:29,510 waar we kunnen opslaan een int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Dit alles, weer, hetzelfde gegevenstype. 1022 00:45:31,890 --> 00:45:33,890 >> Nu doe ik iets geks, als de tijd verstrijkt, net 1023 00:45:33,890 --> 00:45:35,510 te rechtvaardigen het schrijven van dit programma. 1024 00:45:35,510 --> 00:45:40,050 En dan naar beneden hier, ik nogmaals herhalen meer dan de array zeggen een jaar vanaf nu, 1025 00:45:40,050 --> 00:45:43,090 persoonsnummer zal men zijn iets jaar oud. 1026 00:45:43,090 --> 00:45:45,010 En om erachter te komen dat math-- Ik bedoel, dit 1027 00:45:45,010 --> 00:45:49,260 is niet erg ingewikkeld arithmetic-- Ik voeg slechts een aan hun leeftijd. 1028 00:45:49,260 --> 00:45:51,240 Gewoon om aan te tonen, nogmaals, dit. 1029 00:45:51,240 --> 00:45:57,910 >> Net zoals ik kan indexeren in een string, s, dus kan ik index in een array van leeftijden, 1030 00:45:57,910 --> 00:45:59,950 als dat. 1031 00:45:59,950 --> 00:46:03,340 Dus waar gaat dit worden ons naartoe? 1032 00:46:03,340 --> 00:46:07,070 Dus we zullen zien, uiteindelijk, een paar dingen in de dagen die komen. 1033 00:46:07,070 --> 00:46:09,510 Een al die tijd, wanneer het schrijven van uw eigen programma's, 1034 00:46:09,510 --> 00:46:11,239 als Mario, hebzuchtig, krediet. 1035 00:46:11,239 --> 00:46:13,780 Je hebt het typen van de naam van het programma en slaan op Enter. 1036 00:46:13,780 --> 00:46:15,610 En dan is er invoer van de gebruiker. 1037 00:46:15,610 --> 00:46:18,137 >> Met getString, getInt, getLongLong of dergelijke. 1038 00:46:18,137 --> 00:46:20,720 Maar het blijkt dat C ondersteunt iets genaamd opdrachtregel 1039 00:46:20,720 --> 00:46:25,740 argumenten, dat gaat ons te laten daadwerkelijk te krijgen op woorden die u typt, 1040 00:46:25,740 --> 00:46:28,570 het knipperen prompt achter de naam van uw programma. 1041 00:46:28,570 --> 00:46:31,430 >> Dus in de komende dagen, je komt misschien iets als Caesar te typen, 1042 00:46:31,430 --> 00:46:34,950 of ./caesar nummer 13, daarna. 1043 00:46:34,950 --> 00:46:36,070 We zullen zien hoe dat werkt. 1044 00:46:36,070 --> 00:46:37,550 Want inderdaad, in probleem set twee, we zijn 1045 00:46:37,550 --> 00:46:39,383 ga u te introduceren een beetje iets 1046 00:46:39,383 --> 00:46:42,360 doet denken aan Ralphie's eerder van de cartografie uitdagen. 1047 00:46:42,360 --> 00:46:43,970 De kunst van het klauteren informatie. 1048 00:46:43,970 --> 00:46:46,660 Dit, in feite, is zeer doet denken aan wat Ralphie deed. 1049 00:46:46,660 --> 00:46:51,380 >> Dit is een voorbeeld van een codering algoritme rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Wat simpelweg betekent draai de letters in het alfabet 13 plaatsen. 1051 00:46:54,910 --> 00:46:58,309 En als je dat doet, zul je nu zien wat misschien een bekende uitdrukking. 1052 00:46:58,309 --> 00:47:01,100 Maar de manier waarop we gaan gebruiken dit uiteindelijk algemener. 1053 00:47:01,100 --> 00:47:04,390 >> In P set twee, in de standaard editie, vindt u een paar cijfers te implementeren, 1054 00:47:04,390 --> 00:47:06,720 een genaamd Caesar, een zogenaamde Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Beiden zijn rotatie cijfers, omdat een of andere manier je 1056 00:47:10,090 --> 00:47:11,826 Draai een letter in een andere letter. 1057 00:47:11,826 --> 00:47:12,950 En Caesar is super eenvoudig. 1058 00:47:12,950 --> 00:47:16,220 U voegt een, u 13 toevoegen, of een aantal tot 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere doet dat op een per brief basis. 1060 00:47:19,570 --> 00:47:22,140 Dus Vigenere, zoals u zult zien in de spec, is veiliger. 1061 00:47:22,140 --> 00:47:24,973 >> Maar aan het eind van de dag wat je zult het implementeren en P set twee, 1062 00:47:24,973 --> 00:47:29,050 is dat belangrijk dat je zowel gebruiken voor encryptie en decryptie. 1063 00:47:29,050 --> 00:47:32,160 Onder verwijzing naar het proces van het omzetten platte tekst, een aantal originele bericht, 1064 00:47:32,160 --> 00:47:34,490 in cypher tekst, die iets versleuteld. 1065 00:47:34,490 --> 00:47:36,220 En dan weer decoderen. 1066 00:47:36,220 --> 00:47:38,119 >> In de hacker editie, ondertussen, dan heb je de 1067 00:47:38,119 --> 00:47:40,660 belast met iets dergelijks in de geest, waar wij geven u 1068 00:47:40,660 --> 00:47:44,610 Een bestand van een typische Linux of Mac of Unix-computer genaamd Etsy 1069 00:47:44,610 --> 00:47:47,800 wachtwoord dat geheel bevat bos van gebruikersnamen en wachtwoorden. 1070 00:47:47,800 --> 00:47:50,932 En die wachtwoorden hebben allemaal gecodeerd of hashed, 1071 00:47:50,932 --> 00:47:53,140 bij wijze van spreken, meer naar behoren zoals u zult zien in de spec. 1072 00:47:53,140 --> 00:47:57,090 >> En de hacker editie zal uitdagen u met het nemen van een ingang als deze, 1073 00:47:57,090 --> 00:47:58,800 en kraken van het wachtwoord. 1074 00:47:58,800 --> 00:48:02,590 Dat wil zeggen, het uitzoeken wat de wachtwoord mens eigenlijk was. 1075 00:48:02,590 --> 00:48:05,570 Want inderdaad wachtwoorden algemeen niet als tekst opgeslagen, 1076 00:48:05,570 --> 00:48:08,260 en over het algemeen wachtwoorden moet moeilijk te raden zijn. 1077 00:48:08,260 --> 00:48:09,610 Dat is niet vaak het geval. 1078 00:48:09,610 --> 00:48:12,110 >> En wat ik dacht dat we zouden doen, is af te sluiten met een paar minuten 1079 00:48:12,110 --> 00:48:15,160 blik op een bijzonder slechte keuze wachtwoorden 1080 00:48:15,160 --> 00:48:17,260 van een film die je zou kunnen liefdevol herinneren. 1081 00:48:17,260 --> 00:48:18,915 En zo niet, dan moet je huren. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEO AFSPELEN] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Je Fiend, wat is er aan de hand? 1084 00:48:22,320 --> 00:48:24,240 Wat doe je met mijn dochter? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Mij om het te introduceren briljante jonge plastisch chirurg, 1086 00:48:28,010 --> 00:48:30,010 Dokter Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Het grootste neuscorrectie man in de hele universum en Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -Uw Hoogheid. 1089 00:48:36,140 --> 00:48:36,820 >> -Nose Baan? 1090 00:48:36,820 --> 00:48:37,700 Ik begrijp het niet. 1091 00:48:37,700 --> 00:48:39,070 Ze had al een neuscorrectie. 1092 00:48:39,070 --> 00:48:40,800 Het was haar lieve 16 aanwezig. 1093 00:48:40,800 --> 00:48:42,590 >> Nee, het is niet wat je denkt. 1094 00:48:42,590 --> 00:48:44,490 Het is veel, veel erger. 1095 00:48:44,490 --> 00:48:48,160 Als je me niet geven de combinatie met de luchtschild, 1096 00:48:48,160 --> 00:48:52,748 arts Schlotkin zal geven uw dochter terug haar oude neus. 1097 00:48:52,748 --> 00:48:53,748 - [Hapt] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Waar heb je die vandaan? 1100 00:48:59,652 --> 00:49:00,640 >> -Alle Rechts. 1101 00:49:00,640 --> 00:49:02,506 Ik zal zeggen, zal ik vertellen. 1102 00:49:02,506 --> 00:49:03,498 >> Nee, papa, nee. 1103 00:49:03,498 --> 00:49:04,490 Je moet niet. 1104 00:49:04,490 --> 00:49:06,090 >> Je hebt gelijk mijn beste. 1105 00:49:06,090 --> 00:49:07,390 Ik mis je nieuwe neus. 1106 00:49:07,390 --> 00:49:10,990 Maar ik zal ze het niet vertellen combinatie maakt niet uit wat. 1107 00:49:10,990 --> 00:49:12,450 >> -Zeer goed. 1108 00:49:12,450 --> 00:49:14,830 Dokter Schlotkin, doe je ergste. 1109 00:49:14,830 --> 00:49:15,744 >> M'n plezier. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -Geen! 1112 00:49:20,800 --> 00:49:22,780 Wacht, wacht. 1113 00:49:22,780 --> 00:49:24,000 Ik zal vertellen. 1114 00:49:24,000 --> 00:49:25,830 Ik zal vertellen. 1115 00:49:25,830 --> 00:49:28,270 >> Ik wist dat het zou werken. 1116 00:49:28,270 --> 00:49:31,390 Oke, geef het aan mij. 1117 00:49:31,390 --> 00:49:36,220 >> -De Combinatie behoort. 1118 00:49:36,220 --> 00:49:36,740 >> -One. 1119 00:49:36,740 --> 00:49:37,473 >> -One. 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 -Vier. 1127 00:49:42,300 --> 00:49:42,800 -Vier. 1128 00:49:42,800 --> 00:49:44,707 -Vier. 1129 00:49:44,707 --> 00:49:45,521 -Vijf. 1130 00:49:45,521 --> 00:49:46,430 -Vijf. 1131 00:49:46,430 --> 00:49:47,930 -Vijf. 1132 00:49:47,930 --> 00:49:53,480 Dus de combinatie behoort, twee, drie, vier, vijf. 1133 00:49:53,480 --> 00:49:56,140 Dat is het stomste combinatie Ik ooit gehoord in mijn leven. 1134 00:49:56,140 --> 00:49:58,640 Dat is het soort ding een idioot zou hebben op zijn bagage. 1135 00:49:58,640 --> 00:50:00,000 >> Dank u, uw hoogheid. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> Wat heb je gedaan? 1138 00:50:02,450 --> 00:50:03,800 >> Ik zette de muur. 1139 00:50:03,800 --> 00:50:05,010 >> Nee, dat deed je niet, je zette de hele film. 1140 00:50:05,010 --> 00:50:06,220 >> Ik was vast drukte op de verkeerde knop. 1141 00:50:06,220 --> 00:50:07,064 >> Nou, zet het terug op! 1142 00:50:07,064 --> 00:50:07,910 Zet de film weer op! 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 Laten we gaan, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Kom, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Natuurlijk weet je dat ik hebben om u te factureren voor dit. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Nou? 1150 00:50:17,220 --> 00:50:17,802 Werkte het? 1151 00:50:17,802 --> 00:50:18,510 Waar is de koning? 1152 00:50:18,510 --> 00:50:20,218 >> -Het werkte, meneer, we hebben de combinatie. 1153 00:50:20,218 --> 00:50:20,740 Geweldig. 1154 00:50:20,740 --> 00:50:24,810 Nu kunnen we elke laatste adem van frisse lucht van planeet Druidia. 1155 00:50:24,810 --> 00:50:25,890 Wat is de combinatie? 1156 00:50:25,890 --> 00:50:28,155 >> -Een, Twee, drie, vier, vijf. 1157 00:50:28,155 --> 00:50:29,890 >> -Een, Twee, drie, vier, vijf? 1158 00:50:29,890 --> 00:50:30,390 Jawel. 1159 00:50:30,390 --> 00:50:31,110 Dat is geweldig. 1160 00:50:31,110 --> 00:50:34,550 Ik heb het zelfde kreeg combinatie op mijn bagage. 1161 00:50:34,550 --> 00:50:37,160 Bereid Spaceball 1 voor onmiddellijke vertrek. 1162 00:50:37,160 --> 00:50:38,160 >> Ja, meneer. 1163 00:50:38,160 --> 00:50:40,745 >> -En Veranderen de combinatie op mijn bagage. 1164 00:50:40,745 --> 00:50:41,578 [DEUR DICHT SOUND] 1165 00:50:41,578 --> 00:50:42,064 [CLINK VAN DEUREN RAKEN HELM] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END VIDEO AFSPELEN] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. MALAN: Dat is het voor CS50, we zien je volgende week. 1169 00:50:46,700 --> 00:50:49,883 Verteller: En nu, Deep Gedachten, door Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: Codering in C is zo veel moeilijker dan Scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch was een leugen. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [LAUGHTER SOUNDBITE] 1175 00:51:01,430 --> 00:51:02,486