1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> LUIDSPREKER 1: Oke. 3 00:00:13,650 --> 00:00:14,390 Welkom terug. 4 00:00:14,390 --> 00:00:19,260 Dit is Week Twee van CS50, en we hebben tot nu toe gebruik gemaakt van functies, maar 5 00:00:19,260 --> 00:00:20,830 grotendeels overgenomen ze voor lief. 6 00:00:20,830 --> 00:00:23,430 We hebben printf gebruikt, die de heeft bijwerking druktechnieken 7 00:00:23,430 --> 00:00:24,110 dingen op het scherm. 8 00:00:24,110 --> 00:00:25,790 We hebben gebruikt krijgen-int, krijg zweven. 9 00:00:25,790 --> 00:00:29,230 >> Maar wat als u daadwerkelijk wilt maken uw eigen functies, zoals sommige van 10 00:00:29,230 --> 00:00:31,740 u misschien al begonnen te doen voor Probleemverzameling One, hoewel 11 00:00:31,740 --> 00:00:33,140 niet strikt noodzakelijk is? 12 00:00:33,140 --> 00:00:37,150 Nou, laten we verder gaan en opnieuw dat probleem van alleen de gebruiker vragen 13 00:00:37,150 --> 00:00:40,660 hun naam en afdrukken iets op de scherm, maar probeer factor enkele 14 00:00:40,660 --> 00:00:44,000 van de gemeenschappelijkheid die we hebben gezien in onze code tot nu toe. 15 00:00:44,000 --> 00:00:45,120 Dus door dat bedoel ik het volgende. 16 00:00:45,120 --> 00:00:47,315 >> Ik ga om te gaan en te creëren een nieuw programma, gewoon bellen 17 00:00:47,315 --> 00:00:49,320 het hello.c zoals gewoonlijk. 18 00:00:49,320 --> 00:00:53,730 Ik ga om verder te gaan en geef mezelf zijn standaard io.H bovenaan. 19 00:00:53,730 --> 00:00:57,040 Ik ga ook geef mezelf preemptively de CS50 bibliotheek, zodat 20 00:00:57,040 --> 00:00:59,080 Ik denk niet krijgen schreeuwde door de compiler. 21 00:00:59,080 --> 00:01:02,400 En nu ga ik om verder te gaan en verklaren int, belangrijkste, leegte. 22 00:01:02,400 --> 00:01:09,020 >> En dan hier, dit is waar ik wil beginnen te besteden aan functionaliteit 23 00:01:09,020 --> 00:01:12,090 een andere functie die ik zelf ben ga schrijven, maar dat niet doet 24 00:01:12,090 --> 00:01:13,820 momenteel bestaan. 25 00:01:13,820 --> 00:01:19,210 Bijvoorbeeld, veronderstel dat ik wilde schrijf een functie die me in staat stelt om 26 00:01:19,210 --> 00:01:23,830 uitprinten hello, komma, en dan is de naam van een aantal gebruikers. 27 00:01:23,830 --> 00:01:29,010 In plaats van te blijven printf doen hello,% s, zou het niet mooi zijn als 28 00:01:29,010 --> 00:01:33,380 Er waren slechts een functie genaamd niet printf maar naamdruk? 29 00:01:33,380 --> 00:01:36,600 >> Dus met andere woorden, ik wil in staat zijn om Schrijf een programma dat een beetje doet 30 00:01:36,600 --> 00:01:37,710 zoiets als dit. 31 00:01:37,710 --> 00:01:42,070 Ten eerste, ik ga printf zeggen dat uw naam, waardoor de gebruiker wordt gevraagd om 32 00:01:42,070 --> 00:01:46,150 geef mij zijn of haar naam, en dan ben ik gaan naar de vertrouwde tekenreeks s gebruiken om 33 00:01:46,150 --> 00:01:47,290 verklaren een string. 34 00:01:47,290 --> 00:01:50,420 Geef me een variabele van het type tekenreeks, noemen het s, en op te slaan in dat de 35 00:01:50,420 --> 00:01:52,120 gevolg van het bellen te krijgen string. 36 00:01:52,120 --> 00:01:56,060 Maar nu in de weken voorbij, zou ik enigszins moeizaam gedaan hello,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> En in andere woorden, we hebben dit gezien bijvoorbeeld een paar keer, en het is een 39 00:02:02,570 --> 00:02:05,280 triviaal voorbeeld, want er is maar een regel code, dus het is niet echt een 40 00:02:05,280 --> 00:02:06,860 big deal te blijven typen weer in. 41 00:02:06,860 --> 00:02:09,990 Maar stel dat deze lijn van code eigenlijk waren steeds een last, en 42 00:02:09,990 --> 00:02:12,900 het is niet een regel code, maar het is 10 regels code een paar weken vanaf nu, 43 00:02:12,900 --> 00:02:15,190 en je bent gewoon moe van kopiëren en plakken of 44 00:02:15,190 --> 00:02:17,180 overtypen dat dezelfde code. 45 00:02:17,180 --> 00:02:22,100 Zou het niet mooi zijn in plaats van het doen van printf hello,% s, enzovoort, 46 00:02:22,100 --> 00:02:26,500 zou het niet mooi zijn als er gewoon een functie genaamd afdruk naam die 47 00:02:26,500 --> 00:02:27,560 neemt een argument - 48 00:02:27,560 --> 00:02:29,120 in andere woorden, het duurt ingang - 49 00:02:29,120 --> 00:02:30,620 en dan puntkomma. 50 00:02:30,620 --> 00:02:33,240 Zodat de functie, zou het niet worden leuk als dat bestond? 51 00:02:33,240 --> 00:02:36,690 Dan zou ik geen zorgen te maken over wat printf is, wat% s en alle 52 00:02:36,690 --> 00:02:39,400 deze complexiteit die zijn niet zo interessant. 53 00:02:39,400 --> 00:02:40,570 Ze zijn nuttig. 54 00:02:40,570 --> 00:02:44,700 >> Dus print naam, helaas, was niet uitgevonden ongeveer 40 plus jaren geleden. 55 00:02:44,700 --> 00:02:45,980 Niemand dacht om het te schrijven. 56 00:02:45,980 --> 00:02:48,300 Maar dat is de schoonheid van het hebben van een programmeertaal, net als in 57 00:02:48,300 --> 00:02:52,930 Scratch kunt u aangepaste blokken definiëren, zodat in C en de meeste elke taal, kunt u 58 00:02:52,930 --> 00:02:57,260 definieer uw eigen functionaliteit, kan u uw eigen functies definiëren. 59 00:02:57,260 --> 00:03:01,710 Dus ook al krijgen we de belangrijkste door automatisch gratis, kunnen we verklaren 60 00:03:01,710 --> 00:03:02,730 onze eigen functies. 61 00:03:02,730 --> 00:03:05,670 >> Dus ik ga wat ruimte omhoog hier te maken tot boven, en ik ga verklaren mijn 62 00:03:05,670 --> 00:03:08,210 eigen functie dat gaat een kijken beetje vreemd op het eerste, maar we komen 63 00:03:08,210 --> 00:03:09,400 terug naar dit duurde niet lang. 64 00:03:09,400 --> 00:03:12,310 Ik ga leegte zeggen, waardoor met vermelding van deze functie doet 65 00:03:12,310 --> 00:03:16,040 iets, een neveneffect, maar niet iets terug naar mij in de 66 00:03:16,040 --> 00:03:18,810 dezelfde manier dat int krijgen of krijg string zelf doet. 67 00:03:18,810 --> 00:03:22,450 En ik ga deze functie te geven noemen van de naam van print, en ik ga 68 00:03:22,450 --> 00:03:26,470 aangeven dat deze man gaat nemen een string, en ik ga roepen dat 69 00:03:26,470 --> 00:03:27,600 tekenreeksnaam. 70 00:03:27,600 --> 00:03:32,100 Ik kon het noemen wat ik wil, maar ik wil mijn code om als zelfstandige te documenteren. 71 00:03:32,100 --> 00:03:34,770 Met andere woorden, als een van jullie waren om Open dit bestand en lees het, je kon 72 00:03:34,770 --> 00:03:39,020 soort afleiden uit de naam van die ingang welke rol het zou moeten spelen. 73 00:03:39,020 --> 00:03:42,270 >> En nu onder dat, ga ik om te openen accolade en gesloten accolade, 74 00:03:42,270 --> 00:03:47,140 en zo merk ik heb het zelfde gevolgd patroon op lijnen vier tot zeven als 75 00:03:47,140 --> 00:03:51,622 Ik volg een goede week plus nu tussen, zeg, lijnen negen en 76 00:03:51,622 --> 00:03:53,400 14 waarvan de belangrijkste samen te stellen. 77 00:03:53,400 --> 00:03:56,160 Met andere woorden, afdrukken naam is een andere functie. 78 00:03:56,160 --> 00:03:58,990 Nu, is de compiler niet van plan om te weten om dit ding automatisch bellen 79 00:03:58,990 --> 00:04:02,670 omdat ik letterlijk net uitgevonden, maar het zal nog weten te main bellen 80 00:04:02,670 --> 00:04:08,710 automatisch, en dan natuurlijk in lijn 13, roep ik mijn eigen functie. 81 00:04:08,710 --> 00:04:12,805 En omdat ik heb verklaard dat de functie up op lijn vier vóór main, 82 00:04:12,805 --> 00:04:16,579 dit gaat om de compiler te leren wat citaat, unquote, "print naam" 83 00:04:16,579 --> 00:04:18,140 betekent en wat het moet doen. 84 00:04:18,140 --> 00:04:22,700 Dus ik ben soort van het geven van een nieuwe aangepaste blokkeren in het kader van, zeg, Scratch. 85 00:04:22,700 --> 00:04:27,240 >> Dus hier, kan ik dat heel gewoon of terugkerend patroon van de code die ik houden 86 00:04:27,240 --> 00:04:32,300 schrijven in de klas, printf % S hello,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 wat moet ik hier wil zetten? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Dus ik wil naam in deze context te plaatsen. 91 00:04:41,420 --> 00:04:43,440 Dus merken een beetje een tweedeling hier. 92 00:04:43,440 --> 00:04:47,680 Want ik ben te verklaren mijn eigen functie en ik heb enigszins arbitrair genoemd 93 00:04:47,680 --> 00:04:50,880 het afdrukken naam, en omdat ik heb in haakjes dat 94 00:04:50,880 --> 00:04:55,035 functie neemt een argument, het type dat is een string - dus het is een woord 95 00:04:55,035 --> 00:05:00,010 of zin of iets dergelijks - en Ik bel dat argument naam, dat 96 00:05:00,010 --> 00:05:04,770 de enige variabele die in scope, om zo te zeggen, is de naam. 97 00:05:04,770 --> 00:05:07,780 >> S bestaat alleen tussen wat twee accolades, natuurlijk? 98 00:05:07,780 --> 00:05:12,990 Nou echt, net als lijn 10 via 14, dus net als op maandag niet kan gebruiken 99 00:05:12,990 --> 00:05:17,650 S, maar wat ik kan doen is voorbij S in de naam print. 100 00:05:17,650 --> 00:05:21,030 Print naam gewoon zo gebeurt om het te geven een alias, een synoniem, een bijnaam, 101 00:05:21,030 --> 00:05:24,400 roepen zijn naam, en nu het gebruik ervan in deze lijn. 102 00:05:24,400 --> 00:05:26,840 Dus nu laat ik deze opslaan, uitzoomen. 103 00:05:26,840 --> 00:05:31,250 >> Laat me ga je gang en maak hallo. 104 00:05:31,250 --> 00:05:32,400 Ziet er goed uit. 105 00:05:32,400 --> 00:05:36,110 Niet uitspugen eventuele fouten. . / Hello Enter. 106 00:05:36,110 --> 00:05:37,020 Wat is mijn naam? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 En hallo David. 109 00:05:39,270 --> 00:05:41,820 Dus niet zo spannend, maar denk nu. 110 00:05:41,820 --> 00:05:44,310 Je hebt nu dat dezelfde stof zoals we deden in Scratch te 111 00:05:44,310 --> 00:05:45,420 maken onze eigen functies. 112 00:05:45,420 --> 00:05:46,770 >> Maar er is een beetje een gotcha. 113 00:05:46,770 --> 00:05:50,620 Stel dat ik niet echt had gedacht dit door en ik eigenlijk zonder 114 00:05:50,620 --> 00:05:54,250 echt denken over het schreef die functie hier beneden. 115 00:05:54,250 --> 00:05:55,420 Voelt heel redelijk. 116 00:05:55,420 --> 00:05:58,440 In Scratch is er geen notie de locatie in je scripts. 117 00:05:58,440 --> 00:06:00,670 Je kon men hier hier zetten, een omhoog, een omhoog hier, en het zou kunnen beginnen 118 00:06:00,670 --> 00:06:03,310 om er een beetje rommelig als je niet leg het netjes, maar het doet niet 119 00:06:03,310 --> 00:06:05,910 uit waar fysiek de scripts waren op het scherm. 120 00:06:05,910 --> 00:06:09,660 Helaas is het in C - en dit is in tegenstelling tot talen als Java en Python 121 00:06:09,660 --> 00:06:13,600 en anderen die je kent misschien wel met - helaas in C, volgorde doet 122 00:06:13,600 --> 00:06:15,830 uit want horloge wat is nu gaat gebeuren. 123 00:06:15,830 --> 00:06:19,010 >> De standaard functie die gaat te voeren is, natuurlijk main. 124 00:06:19,010 --> 00:06:22,290 Belangrijkste gaat naamdruk roepen lijn acht, maar helaas, de 125 00:06:22,290 --> 00:06:26,660 compiler zal niet eens weten dat afdruk naam bestaat totdat het wordt op lijn 11, 126 00:06:26,660 --> 00:06:28,520 die helaas gaat te laat zijn. 127 00:06:28,520 --> 00:06:30,660 Dus laten we doen maken hello. 128 00:06:30,660 --> 00:06:32,950 En nu verdomme, twee fouten gegenereerd. 129 00:06:32,950 --> 00:06:36,050 Dus nu laat ik scrollen tot de zeer eerste, zoals we altijd doen, en 130 00:06:36,050 --> 00:06:39,560 opmerken dat het tegen me te schreeuwen, "Impliciete declaratie van functie 131 00:06:39,560 --> 00:06:40,540 afdrukken naam. " 132 00:06:40,540 --> 00:06:43,860 >> Dus we hebben dit bericht eerder gezien, impliciete verklaring van de functie. 133 00:06:43,860 --> 00:06:48,080 Toen hebben we dat soort fout gezien? 134 00:06:48,080 --> 00:06:49,180 Toen ik niet onder andere een bibliotheek. 135 00:06:49,180 --> 00:06:53,470 Als ik vergat cs50.h en zou ik krijg uitgescholden voor krijg tekenreeks of krijgen int. 136 00:06:53,470 --> 00:06:56,880 Maar in dit geval is deze functie druk naam is niet in een bibliotheek, toch? 137 00:06:56,880 --> 00:07:00,230 Het is letterlijk in dit bestand, zodat wat is eigenlijk het probleem? 138 00:07:00,230 --> 00:07:04,660 >> Nou helaas in C, het neemt je mee zo ongelooflijk letterlijk dat als je 139 00:07:04,660 --> 00:07:08,640 wil een functie genaamd afdruk naam aan bestaan, moet u ofwel te implementeren 140 00:07:08,640 --> 00:07:11,940 die functie aan de top van uw code, zodat deze toegankelijk is voor lagere 141 00:07:11,940 --> 00:07:15,070 functies, maar eerlijk gezegd, dat wordt slordig zeer snel. 142 00:07:15,070 --> 00:07:18,160 Persoonlijk vind ik het zetten belangrijke eerste want dan is het heel duidelijk wat dit 143 00:07:18,160 --> 00:07:19,890 programma doet op het eerste gezicht. 144 00:07:19,890 --> 00:07:23,290 En plus, je kunt krijgen in rare hoek gevallen waar als x wil bellen 145 00:07:23,290 --> 00:07:27,530 y maar y misschien x gewoon bellen, je fysiek kan eigenlijk niet zet een 146 00:07:27,530 --> 00:07:28,540 boven elkaar. 147 00:07:28,540 --> 00:07:31,230 >> Maar het blijkt in C, we lossen dit heel eenvoudig. 148 00:07:31,230 --> 00:07:34,010 Ik ga een beetje ruimte gezet hier, en ik ga gewoon 149 00:07:34,010 --> 00:07:38,170 preventief, zij het iets redundant, gaat het leren 150 00:07:38,170 --> 00:07:42,320 compiler dat er een functie riep naam print, het duurt een string, 151 00:07:42,320 --> 00:07:46,330 en ik ga bellen noem maar puntkomma. 152 00:07:46,330 --> 00:07:50,220 >> Zodat deze nu in lijn vier, die we nog niet eerder hebt gezien, is een verklaring 153 00:07:50,220 --> 00:07:53,940 van een functie afdruk naam, maar het is slechts een belofte die deze functie zal 154 00:07:53,940 --> 00:07:56,620 uiteindelijk worden gedefinieerd, eventueel worden uitgevoerd. 155 00:07:56,620 --> 00:08:00,180 Dit nu kan ik alleen laten omdat nu is dit de definitie, de 156 00:08:00,180 --> 00:08:04,090 implementatie, soort van de laatste mijl van de uitvoering van deze 157 00:08:04,090 --> 00:08:05,130 bijzondere functie. 158 00:08:05,130 --> 00:08:08,450 Dus eerlijk gezegd het is dom, het is vervelend, maar dit is de manier waarop C is, en het is 159 00:08:08,450 --> 00:08:12,050 want het kost je heel letterlijk en, als een computer eerlijk moet, 160 00:08:12,050 --> 00:08:16,020 alleen doet precies wat je hem vertelt wat te doen, en zodat bestellen is belangrijk. 161 00:08:16,020 --> 00:08:18,940 >> Dus hou dat in gedachten en weer, beginnen te let op de herhaling van patronen. 162 00:08:18,940 --> 00:08:21,850 Kans groot dat u, als u nog niet al, beginnen om berichten tegenkomen 163 00:08:21,850 --> 00:08:24,700 als deze die op het eerste gezicht lijken volledig cryptisch, maar als je begint 164 00:08:24,700 --> 00:08:29,000 op zoek naar deze belangrijke woorden als "Impliciete verklaring," melding van een 165 00:08:29,000 --> 00:08:32,380 functie in dit geval - en eerlijk gezegd, je soms zelfs een beetje groen 166 00:08:32,380 --> 00:08:35,010 wortel symbool dat u vertelt waar het probleem waarschijnlijk is - 167 00:08:35,010 --> 00:08:40,980 kunt u beginnen om uw weg te werken door middel van nog ongezien foutmeldingen. 168 00:08:40,980 --> 00:08:45,860 Voor vragen over het schrijven van uw eigen functie op deze manier? 169 00:08:45,860 --> 00:08:47,540 >> Laten we iets dat een doen weinig meer dwingend. 170 00:08:47,540 --> 00:08:51,760 In plaats van gewoon iets dat heeft doen een neveneffect van afdrukken, laat me gaan 171 00:08:51,760 --> 00:08:55,340 vooruit en opslaan van een nieuw bestand, en we zullen noemen dit positive.c, ook al is het 172 00:08:55,340 --> 00:08:57,600 gaat een beetje anders versus vorige keer. 173 00:08:57,600 --> 00:09:01,910 En deze keer, wil ik opnieuw te implementeren positive.C bijvoorbeeld vorige keer, dat 174 00:09:01,910 --> 00:09:04,430 wordt dwingen de gebrui- me een positief geheel getal. 175 00:09:04,430 --> 00:09:07,280 Maar ik moest gebruiken krijgen int vorige keer. 176 00:09:07,280 --> 00:09:10,780 Zou het niet mooi zijn als er een functie genaamd krijgen positieve int 177 00:09:10,780 --> 00:09:13,610 dat ik kon gewoon uitbesteden stukje functionaliteit aan? 178 00:09:13,610 --> 00:09:16,480 Dus het verschil is hier zullen we implementeren krijgen positieve int, maar in tegenstelling tot 179 00:09:16,480 --> 00:09:20,330 afdruk naam die een neveneffect gehad - het niet iets terug voor mij als 180 00:09:20,330 --> 00:09:21,710 een getal of een string - 181 00:09:21,710 --> 00:09:25,510 krijgen positieve int is, uiteraard, gaat terugkeren, hopelijk, een positieve int. 182 00:09:25,510 --> 00:09:26,170 >> Dus laten we dit doen. 183 00:09:26,170 --> 00:09:30,840 Omvatten cs50.h, Include standaard io.h. 184 00:09:30,840 --> 00:09:33,520 Int main leegte. 185 00:09:33,520 --> 00:09:42,160 En nu hier, ik ga om verder te gaan en laten we zeggen int, noem het n, gelijk 186 00:09:42,160 --> 00:09:44,270 krijgen positieve int. 187 00:09:44,270 --> 00:09:49,080 En net zoals krijgen int al bestaat omdat het personeel het schreef, ik ga 188 00:09:49,080 --> 00:09:53,950 aan te nemen voor het moment dat krijgen positieve int bestaat, en nu ga ik 189 00:09:53,950 --> 00:09:57,730 om verder te gaan en te zeggen printf, bedankt voor de% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Dus nu als ik dit programma samen te stellen, wat er gaat gebeuren in mijn terminal 192 00:10:07,770 --> 00:10:09,075 venster onderaan het scherm? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Ik ga waarschijnlijk dat zelfde fout als voorheen. 195 00:10:13,900 --> 00:10:14,570 Dus laten we dit proberen. 196 00:10:14,570 --> 00:10:16,450 Maak positief. 197 00:10:16,450 --> 00:10:19,900 En nogmaals, de impliciete verklaring van de functie, krijgt positieve int. 198 00:10:19,900 --> 00:10:21,970 Dus we kunnen dit oplossen in een paar manieren. 199 00:10:21,970 --> 00:10:27,310 Ik ga het simpel en gewoon blijven zet mijn verklaring hier en krijg 200 00:10:27,310 --> 00:10:28,120 positieve int. 201 00:10:28,120 --> 00:10:29,720 Ik moet de zogenaamde handtekening. 202 00:10:29,720 --> 00:10:32,410 De handtekening verwijst gewoon aan de esthetiek van de 203 00:10:32,410 --> 00:10:34,090 eerste regel van het programma. 204 00:10:34,090 --> 00:10:37,420 Dus wat moet positief te krijgen int terugkeer? 205 00:10:37,420 --> 00:10:37,970 >> Dus een int. 206 00:10:37,970 --> 00:10:41,540 Ik bedoel idealiter, zou het terug iets als positief int, maar dat 207 00:10:41,540 --> 00:10:42,160 bestaat niet. 208 00:10:42,160 --> 00:10:45,280 We hebben niet gezien dat er onder onze data types, dus we hebben te maken met de 209 00:10:45,280 --> 00:10:47,170 feit dat we heel weinig datatypes te werken. 210 00:10:47,170 --> 00:10:50,360 Maar we kunnen een int en gewoon terug vertrouwen dat het positief zal zijn. 211 00:10:50,360 --> 00:10:52,690 Het gaat heten krijgen positieve int. 212 00:10:52,690 --> 00:10:55,122 >> En nu hoe over zijn argumenten? 213 00:10:55,122 --> 00:10:56,440 Maakt het enig inbreng te nemen? 214 00:10:56,440 --> 00:10:58,280 Maakt het enig inbreng nodig? 215 00:10:58,280 --> 00:11:00,900 Zodat het niet te weten op voorhand niets. 216 00:11:00,900 --> 00:11:03,220 Krijg string niet, krijg int niet. 217 00:11:03,220 --> 00:11:06,430 Printf doet - het moet sommige hebben inbreng overgegaan in het - en naamdruk 218 00:11:06,430 --> 00:11:09,020 nodig wat input, maar krijgen positieve int niet. 219 00:11:09,020 --> 00:11:11,530 Dus ik ga expliciet vertelt de compiler leegte. 220 00:11:11,530 --> 00:11:13,470 Leegte is de afwezigheid van iets anders. 221 00:11:13,470 --> 00:11:17,990 Dus leegte betekent niets gaat binnen van deze haakjes puntkomma. 222 00:11:17,990 --> 00:11:20,840 >> En nu op de bodem van mijn dossier - en nogmaals, ik ben gewoon soort van anale 223 00:11:20,840 --> 00:11:23,640 hier voornaamste zetten aan de top, die is een goede gewoonte, want op deze manier, 224 00:11:23,640 --> 00:11:26,220 wanneer u of iemand anders opent het bestand, de 225 00:11:26,220 --> 00:11:27,400 functionaliteit is daar. 226 00:11:27,400 --> 00:11:29,660 U kunt duiken in van af. 227 00:11:29,660 --> 00:11:34,190 Dus nu ga ik deze te dupliceren, krijg positieve int leegte, maar ik ben niet 228 00:11:34,190 --> 00:11:35,430 ga een puntkomma nu geraakt. 229 00:11:35,430 --> 00:11:38,280 Ik ga accolades openen, en nu moet ik lenen 230 00:11:38,280 --> 00:11:39,700 een aantal ideeën van maandag. 231 00:11:39,700 --> 00:11:44,450 >> Dus als u zich herinneren, dat we iets deden graag het volgende doen terwijl 232 00:11:44,450 --> 00:11:45,830 iets waar was. 233 00:11:45,830 --> 00:11:46,630 En wat heb ik gedaan? 234 00:11:46,630 --> 00:11:51,540 Ik zoiets geven deed me een positief geheel getal, 235 00:11:51,540 --> 00:11:52,430 beetje een prompt. 236 00:11:52,430 --> 00:11:53,540 Ik kon geen woorden die ik wil gebruiken. 237 00:11:53,540 --> 00:11:54,960 En dan gebruikte ik wat? 238 00:11:54,960 --> 00:11:59,530 Int n gelijk krijgen int, geen argumenten aan. 239 00:11:59,530 --> 00:12:00,550 >> En merk het verschil. 240 00:12:00,550 --> 00:12:04,680 Wanneer u een functie aanroept, wanneer u een functie, hoeft u niet in leegte. 241 00:12:04,680 --> 00:12:08,570 Dat doe je alleen bij het declareren van een functie, het onderwijzen van de compiler wat 242 00:12:08,570 --> 00:12:09,780 het zou verwachten. 243 00:12:09,780 --> 00:12:11,650 Zodat u niet hoeft te zetten vervallen er jezelf. 244 00:12:11,650 --> 00:12:12,940 >> En nu, wat was mijn conditie? 245 00:12:12,940 --> 00:12:19,670 Wel, n niet gelijk is aan positieve, maar dat is gewoon pseudo-code. 246 00:12:19,670 --> 00:12:22,530 Dus hoe kan ik dit schoner te uiten? 247 00:12:22,530 --> 00:12:24,090 Dus minder dan of gelijk aan nul. 248 00:12:24,090 --> 00:12:26,250 Dus nogmaals, merk je kunt doen minder dan of gelijk aan. 249 00:12:26,250 --> 00:12:28,100 Ook al is het twee aparte symbolen, kunt u dit doen op 250 00:12:28,100 --> 00:12:29,350 uw toetsenbord als zodanig. 251 00:12:29,350 --> 00:12:33,950 >> Maar er is nog een bug die Ik heb het verknald vorige keer ook. 252 00:12:33,950 --> 00:12:36,950 Ik heb te verklaren - 253 00:12:36,950 --> 00:12:37,460 precies. 254 00:12:37,460 --> 00:12:39,640 Ik moet n verklaren buiten van de lus. 255 00:12:39,640 --> 00:12:44,180 Dus ik moet zetten n hier, en ik doe niet opnieuw wilt verklaren het hier 256 00:12:44,180 --> 00:12:46,480 opdat ik een nieuwe variabele. 257 00:12:46,480 --> 00:12:48,860 Ik wil gewoon een waarde toekennen in hier. 258 00:12:48,860 --> 00:12:54,320 >> En nu ben ik nog niet helemaal klaar hier. 259 00:12:54,320 --> 00:12:57,290 Laat me voor mezelf en doen alsof ik klaar ben. 260 00:12:57,290 --> 00:13:01,220 Maak positief, en nu er is een nieuwe fout. 261 00:13:01,220 --> 00:13:04,550 CONTROL bereikt eind niet-leegte functie. 262 00:13:04,550 --> 00:13:07,760 Dus nieuwe foutmelding, maar als je soort van plagen elkaar elk van de woorden, het 263 00:13:07,760 --> 00:13:09,620 Waarschijnlijk zinspeelt op wat er mis is. 264 00:13:09,620 --> 00:13:11,240 >> Beheersen. 265 00:13:11,240 --> 00:13:14,250 Controle betekent gewoon tot de orde van de activiteiten in een programma. 266 00:13:14,250 --> 00:13:16,510 De computer is in de controle en ging er iets mis. 267 00:13:16,510 --> 00:13:18,510 Dus het eind bereikt een niet-leegte functie. 268 00:13:18,510 --> 00:13:21,760 Welke functie is het blijkbaar verwijzen naar? 269 00:13:21,760 --> 00:13:24,790 Welke functie is niet-leegte? 270 00:13:24,790 --> 00:13:27,400 Dus maak je positieve int, en een beetje verwarrend in die goed, 271 00:13:27,400 --> 00:13:29,010 het is een soort van leegte. 272 00:13:29,010 --> 00:13:33,070 Het heeft een specificatie van leegte voor zijn argumenten, maar zijn uitgang gaat 273 00:13:33,070 --> 00:13:34,540 van het type n. 274 00:13:34,540 --> 00:13:37,260 Dus het woord aan de linkerkant is de zogenaamde return type. 275 00:13:37,260 --> 00:13:40,320 Het woord aan de binnenzijde hier de nul of meer argumenten 276 00:13:40,320 --> 00:13:41,970 die een functie neemt. 277 00:13:41,970 --> 00:13:44,060 >> Dus wat moet ik doen? 278 00:13:44,060 --> 00:13:47,650 Op dit punt in mijn code, lijn 21 waar de knipperende prompt is nu, ik 279 00:13:47,650 --> 00:13:51,430 hebben een positieve int binnen van de variabele genaamd n. 280 00:13:51,430 --> 00:13:55,200 Hoe geef ik het terug naar de belangrijkste? 281 00:13:55,200 --> 00:13:55,960 Letterlijk. 282 00:13:55,960 --> 00:13:59,320 Terug n puntkomma. 283 00:13:59,320 --> 00:14:04,090 >> Dus net als Colton terug een stuk papier met een antwoord aan mij door te laten vallen 284 00:14:04,090 --> 00:14:07,020 dat stukje papier in het kleine zwarte doos op de tafel, om dat te doen in 285 00:14:07,020 --> 00:14:10,100 code, je letterlijk gewoon schrijven, terug n, en het is alsof Colton waren 286 00:14:10,100 --> 00:14:12,140 gaf me iets fysieks terug. 287 00:14:12,140 --> 00:14:15,870 In dit geval, wat er gebeurt is krijg positieve int gaat terug te geven 288 00:14:15,870 --> 00:14:19,220 wat is vermoedelijk een positief integer aan wie? 289 00:14:19,220 --> 00:14:21,380 Waar komt die waarde belanden? 290 00:14:21,380 --> 00:14:29,080 Dat komt in deze variabele n, en Vervolgens gaan we verder met lijn negen. 291 00:14:29,080 --> 00:14:31,920 >> Dus met andere woorden, in volgorde van operaties, dit programma start 292 00:14:31,920 --> 00:14:34,430 uitvoeren, en de compiler realiseert, oh, je wilt de bibliotheek? 293 00:14:34,430 --> 00:14:36,310 Laat me gaan grab wat er in zit dat. 294 00:14:36,310 --> 00:14:37,750 Oh, je wilt de standaard IO bibliotheek? 295 00:14:37,750 --> 00:14:39,660 Laat me gaan grab wat er in zit dat. 296 00:14:39,660 --> 00:14:44,510 Wat doet de compiler te zeggen tegen zichzelf als het hits lijn vier? 297 00:14:44,510 --> 00:14:47,980 Oh, je hebt het beloofd aan de uitvoering functie genaamd krijgen positief, maar 298 00:14:47,980 --> 00:14:50,820 we komen later terug naar dat, iets in die richting. 299 00:14:50,820 --> 00:14:53,450 >> Int main leegte betekent alleen hier is de ingewanden van mijn programma. 300 00:14:53,450 --> 00:14:54,990 Lijn zeven is slechts een accolade. 301 00:14:54,990 --> 00:14:59,540 Lijn acht zegt aan de linkerkant, geven me 32 bits voor een geheel getal, noem het n. 302 00:14:59,540 --> 00:15:02,160 Aan de rechterkant, het is zeggen krijgen positieve int. 303 00:15:02,160 --> 00:15:07,120 Nu laten we pauze dat verhaal want nu Ik wil niet blijven bewegen mijn cursor naar beneden. 304 00:15:07,120 --> 00:15:11,720 Mijn cursor gaat nu naar hier omdat nu krijgen positieve int uitvoert. 305 00:15:11,720 --> 00:15:13,100 Int n wordt verklaard. 306 00:15:13,100 --> 00:15:14,040 Doet u het volgende. 307 00:15:14,040 --> 00:15:16,090 Printf geeft me een positief geheel getal. 308 00:15:16,090 --> 00:15:19,740 >> Krijg een int van de gebruiker, opslaan in n, en dit misschien doen opnieuw en opnieuw. 309 00:15:19,740 --> 00:15:23,010 Deze lus betekent dat deze code zou voeren op en neer als dit weer 310 00:15:23,010 --> 00:15:25,810 opnieuw, maar wanneer de gebruiker uiteindelijk werkt samen en geeft me een positieve 311 00:15:25,810 --> 00:15:31,750 int, ik raakte lijn 21, op welk punt de nummer wordt teruggegeven, en welke 312 00:15:31,750 --> 00:15:34,280 moet ik nu benadrukken? 313 00:15:34,280 --> 00:15:35,070 Negen. 314 00:15:35,070 --> 00:15:39,010 Controle, om zo te zeggen, keert naar lijn negen. 315 00:15:39,010 --> 00:15:40,650 Dat is de lijn die nu de leiding. 316 00:15:40,650 --> 00:15:43,250 >> Dus dat is wat er gebeurd is alle dit keer onder de motorkap, maar 317 00:15:43,250 --> 00:15:46,480 toen wij functies hebben gebruikt zoals printf of zelfs string die iemand anders 318 00:15:46,480 --> 00:15:50,600 u geschreven heeft, is controle worden overhandigd off om andermans code lijn 319 00:15:50,600 --> 00:15:51,290 per lijn per lijn. 320 00:15:51,290 --> 00:15:53,770 Het is gewoon dat we konden het niet zien en we kon niet echt beschrijven in dit 321 00:15:53,770 --> 00:15:57,620 programma omdat het in een andere bestand op de harde schijf 322 00:15:57,620 --> 00:16:00,000 ons medeweten om. 323 00:16:00,000 --> 00:16:02,100 Dus laten we daadwerkelijk samen te stellen en voer dit nu. 324 00:16:02,100 --> 00:16:03,890 >> Maak positief. 325 00:16:03,890 --> 00:16:05,260 Compileren, dat is vooruitgang. 326 00:16:05,260 --> 00:16:06,650 . / Positief. 327 00:16:06,650 --> 00:16:08,020 Geef me een positief geheel getal. 328 00:16:08,020 --> 00:16:08,800 Laten we moeilijk. 329 00:16:08,800 --> 00:16:10,430 Negatief 1. 330 00:16:10,430 --> 00:16:11,360 Nul. 331 00:16:11,360 --> 00:16:13,370 Laten we het 50. 332 00:16:13,370 --> 00:16:18,100 Bedankt voor de 50, en dus controle is nu teruggekeerd. 333 00:16:18,100 --> 00:16:21,750 Heeft u vragen, dan, op dat? 334 00:16:21,750 --> 00:16:23,180 Yeah? 335 00:16:23,180 --> 00:16:25,630 >> [Onverstaanbaar]. 336 00:16:25,630 --> 00:16:26,130 >> Zeg dat nog eens. 337 00:16:26,130 --> 00:16:27,860 Oh, goede vraag. 338 00:16:27,860 --> 00:16:31,100 Dus zou je hier een parallel merken dat Ik ben een soort van snijden een hoek op. 339 00:16:31,100 --> 00:16:35,420 In lijn 12, ik zeg, krijg positieve int retourneert een int, maar door diezelfde 340 00:16:35,420 --> 00:16:39,660 logica, het staat nu in de rede dat in lijn zes, ik zeg dat de belangrijkste rendement 341 00:16:39,660 --> 00:16:44,040 een int, maar wat hebben we nooit had in een van onze programma's? 342 00:16:44,040 --> 00:16:46,470 We hebben nooit melding gemaakt van gehad Dit sleutelwoord return. 343 00:16:46,470 --> 00:16:49,970 >> Zo blijkt dat in C, ten minste de versie ervan die we gebruiken 344 00:16:49,970 --> 00:16:55,750 gemaakt in 1999, technisch gezien, is dit gebeurt automatisch voor u. 345 00:16:55,750 --> 00:16:59,300 Wanneer u een programma en u implementeren implementeren van een functie genaamd de belangrijkste, 346 00:16:59,300 --> 00:17:04,230 die functie nul zal terugkeren door standaard als je niet anders zeggen, 347 00:17:04,230 --> 00:17:05,849 en nul is slechts een conventie. 348 00:17:05,849 --> 00:17:09,430 De wereld keert nul daardoor wat aangeeft dat alles goed is, 349 00:17:09,430 --> 00:17:13,040 effectief en laat ons met 4000000000 mogelijke dingen die kunnen gaan 350 00:17:13,040 --> 00:17:17,530 verkeerd dus dat als we iemand terug, dat misschien een code betekenen dat betekent dat deze 351 00:17:17,530 --> 00:17:18,310 ding ging het mis. 352 00:17:18,310 --> 00:17:20,589 We konden twee terugkeren, wat betekent Deze andere zaak ging het mis. 353 00:17:20,589 --> 00:17:23,440 We konden 4000000000 terugkeren, die betekent dit nog iets mis ging. 354 00:17:23,440 --> 00:17:27,170 >> En als je nu denkt over je eigen PC of Mac, zou u zich herinneren dat 355 00:17:27,170 --> 00:17:29,610 soms cryptische foutmeldingen krijg je van software die je bent 356 00:17:29,610 --> 00:17:32,650 gebruikt en soms een menselijke vriendelijke omschrijving, maar er is 357 00:17:32,650 --> 00:17:35,265 vaak een code of een aantal op het scherm? 358 00:17:35,265 --> 00:17:37,800 Als dit niet voor de geest komen, gewoon houd een oog voor. 359 00:17:37,800 --> 00:17:40,790 Dat is typisch wat deze codes verwijzen naar. 360 00:17:40,790 --> 00:17:44,200 Ze zijn opgenomen in Microsoft Word en andere programma's, zodat als je een bestand 361 00:17:44,200 --> 00:17:48,850 bug report met het bedrijf, kunt u ze vertellen, oh, heb ik fout nummer 45. 362 00:17:48,850 --> 00:17:51,750 En sommige programmeur terug bij het bedrijf kan dat opzoeken in zijn of haar 363 00:17:51,750 --> 00:17:54,940 code en zeggen: oh, dat is omdat ik maakte deze bug en dat is de reden waarom de gebruiker 364 00:17:54,940 --> 00:17:56,240 kreeg deze boodschap. 365 00:17:56,240 --> 00:17:59,490 >> Maar eerlijk gezegd, het is gewoon een beetje afleidende en een beetje vervelend te 366 00:17:59,490 --> 00:18:02,130 concluderen dat, althans op onze eerste paar programma's, dus we hebben 367 00:18:02,130 --> 00:18:02,970 is het weglaten. 368 00:18:02,970 --> 00:18:07,450 Maar al die tijd elk van je functies belangrijkste is het geheim had dit 369 00:18:07,450 --> 00:18:11,600 lijn automatisch toegevoegd voor u door de compiler, alleen volgens afspraak 370 00:18:11,600 --> 00:18:13,172 u wat tijd besparen. 371 00:18:13,172 --> 00:18:14,620 >> [Onverstaanbaar]. 372 00:18:14,620 --> 00:18:16,250 >> U hoeft niet op te nemen in de belangrijkste. 373 00:18:16,250 --> 00:18:16,700 Dat is prima. 374 00:18:16,700 --> 00:18:20,260 U hoeft op te nemen als je uitvoering van een functie als deze. 375 00:18:20,260 --> 00:18:22,850 Anders wordt de functie flat out zou niet werken. 376 00:18:22,850 --> 00:18:24,480 Maar in de belangrijkste, het is niet nodig. 377 00:18:24,480 --> 00:18:28,450 In een week of twee, zullen we beginnen met het krijgen in die gewoonte zodra we willen beginnen 378 00:18:28,450 --> 00:18:29,690 betekenende fouten. 379 00:18:29,690 --> 00:18:32,550 Echt goede vraag. 380 00:18:32,550 --> 00:18:36,880 >> Dus snelle verbale pauze te vermelden dat deze vrijdag, zullen we niet lunchen 381 00:18:36,880 --> 00:18:39,980 per se, maar we zullen eten met een aantal van de studenten en medewerkers. 382 00:18:39,980 --> 00:18:42,940 Als je wilt om mee te doen, voelen vrij om te gaan naar cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 06:00 deze vrijdag. 384 00:18:45,030 --> 00:18:47,990 Ruimte is, zoals altijd, beperkt, maar we zullen blijven doen deze op een bijna 385 00:18:47,990 --> 00:18:51,420 wekelijkse basis als de ruimte loopt deze week. 386 00:18:51,420 --> 00:18:56,160 >> Zodat de cliffhanger dat we waren gebleven op Maandag was dat snaren daadwerkelijk kan 387 00:18:56,160 --> 00:19:00,520 geïndexeerd worden in, die net betekent dat je kunt krijgen bij het eerste teken, de 388 00:19:00,520 --> 00:19:03,770 tweede teken, het derde teken enzovoort, want je kunt 389 00:19:03,770 --> 00:19:07,860 effectief denken aan een touwtje, zoals hallo, als zijnde in dit geval vijf 390 00:19:07,860 --> 00:19:09,670 brieven binnenkant van dozen. 391 00:19:09,670 --> 00:19:13,370 En je kunt krijgen bij elk van deze dozen met wat syntax deden we 392 00:19:13,370 --> 00:19:15,230 introduceren op maandag? 393 00:19:15,230 --> 00:19:16,760 Die vierkante haken op uw toetsenbord. 394 00:19:16,760 --> 00:19:18,980 Dat alleen bedoeld naar locatie nul. 395 00:19:18,980 --> 00:19:22,840 >> We beginnen te tellen bij nul, dus beugel nul betekent h, beugel een 396 00:19:22,840 --> 00:19:25,170 betekent e, enzovoort. 397 00:19:25,170 --> 00:19:28,490 En dus de hele tijd als we geweest zijn met behulp van strijkers en typen in "hello" 398 00:19:28,490 --> 00:19:31,250 en "wereld" en andere dingen op het scherm, het is al opgeslagen 399 00:19:31,250 --> 00:19:32,820 in dozen zoals deze. 400 00:19:32,820 --> 00:19:33,370 En neem een ​​gok. 401 00:19:33,370 --> 00:19:37,470 Wat doet elk vak vertegenwoordigt fysiek binnenkant van uw computer? 402 00:19:37,470 --> 00:19:38,250 >> [Onverstaanbaar]. 403 00:19:38,250 --> 00:19:39,150 >> Sorry? 404 00:19:39,150 --> 00:19:39,580 >> Tekens. 405 00:19:39,580 --> 00:19:44,760 >> Dus een teken, zeker bij van strijkers, en een karakter is gewoon 406 00:19:44,760 --> 00:19:46,800 acht bits of een byte. 407 00:19:46,800 --> 00:19:49,550 Zodat u waarschijnlijk op zijn minst vaag bekend met het feit dat uw 408 00:19:49,550 --> 00:19:50,500 computer heeft een geheugen. 409 00:19:50,500 --> 00:19:52,110 Het heeft twee soorten geheugen minimaal. 410 00:19:52,110 --> 00:19:54,810 Een daarvan is de harde schijf waar u bespaart spullen permanent, en dat is 411 00:19:54,810 --> 00:19:57,400 meestal groot zodat u films kunt hebben en muziek enzovoort. 412 00:19:57,400 --> 00:20:04,010 >> Dan heb je een ander type geheugen genoemd RAM, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Geheugen, en dit is het type geheugen dat wordt gebruikt wanneer de computer is 414 00:20:07,510 --> 00:20:11,520 lopen maar als de stroom uitvalt of uw batterij sterft, alles dat is opgeslagen 415 00:20:11,520 --> 00:20:15,300 in RAM verdwijnt als de stroom uitvalt helemaal omdat het niet 416 00:20:15,300 --> 00:20:16,060 persistent. 417 00:20:16,060 --> 00:20:19,120 Meestal hebt u, deze dagen, een optreden van het, twee optredens, misschien meer. 418 00:20:19,120 --> 00:20:23,490 En de kop van het RAM-geheugen is dat het veel veel, veel sneller dan harde schijven 419 00:20:23,490 --> 00:20:27,390 of zelfs solid state drives van deze dag, maar het is meestal duurder dus 420 00:20:27,390 --> 00:20:28,480 je hebt er minder van. 421 00:20:28,480 --> 00:20:32,400 >> Dus vandaag het gesprek echt verwijst naar RAM, dat geheugen voor 422 00:20:32,400 --> 00:20:35,270 bestaat alleen terwijl er stroom worden ingevoerd in de computer. 423 00:20:35,270 --> 00:20:40,530 Dus wanneer u typt in H-E-L-L-O, Enter op toetsenbord, H gaat in een 424 00:20:40,530 --> 00:20:44,550 byte RAM-geheugen, is de E gaat in een byte RAM, zoals 425 00:20:44,550 --> 00:20:45,800 de rest van het woord. 426 00:20:45,800 --> 00:20:49,010 Dus herinneren wat we konden om laatste keer te doen was dit. 427 00:20:49,010 --> 00:20:53,940 Laat me ga je gang en open het bestand dat wij geroepen string.c, en herinneren 428 00:20:53,940 --> 00:20:56,860 dat het een beetje leek zoiets als dit. 429 00:20:56,860 --> 00:20:59,860 Laat me eigenlijk terugdraaien en wijzigen het precies hoe het eruit zag, 430 00:20:59,860 --> 00:21:02,654 snaarlengte van s. 431 00:21:02,654 --> 00:21:04,560 >> Dus kijk naar het programma hier. 432 00:21:04,560 --> 00:21:08,530 Wij zijn de CS50 bibliotheek zo die we kunnen gebruiken krijgen string. 433 00:21:08,530 --> 00:21:11,400 Wij zijn onder andere standaard io.H dus kunnen we printf gebruiken. 434 00:21:11,400 --> 00:21:13,580 Waarom hebben we onder andere string.h? 435 00:21:13,580 --> 00:21:16,980 Dit was nieuw op maandag. 436 00:21:16,980 --> 00:21:18,230 Dus we wilden snaarlengte. 437 00:21:18,230 --> 00:21:19,090 Str Leng. 438 00:21:19,090 --> 00:21:21,470 Mensen besloten jaren geleden, laten we gewoon zijn beknopt. 439 00:21:21,470 --> 00:21:24,290 In plaats van noemde het "string lengte," laten we noemen het "str Leng" en laat de 440 00:21:24,290 --> 00:21:28,540 wereld cijfer dat uit, en dat is dus wat we krijgen toegang tot met string.h. 441 00:21:28,540 --> 00:21:29,390 >> Dit is bekend. 442 00:21:29,390 --> 00:21:30,320 Dit is bekend. 443 00:21:30,320 --> 00:21:31,450 Dit is bekend. 444 00:21:31,450 --> 00:21:32,370 Dit is een beetje nieuw. 445 00:21:32,370 --> 00:21:35,420 In lijn 22 - en we zullen terugkomen om deze, maar voor nu weet - 446 00:21:35,420 --> 00:21:37,880 en je zou alleen maar weten dit uit het hebben lees de documentatie of indien 447 00:21:37,880 --> 00:21:39,010 je wist C al - 448 00:21:39,010 --> 00:21:41,510 krijg string kan soms verpesten. 449 00:21:41,510 --> 00:21:45,130 Als de gebruiker echt hoor en wederhoor of coöperatief en hij of zij gewoon 450 00:21:45,130 --> 00:21:49,450 iets typt niet op het toetsenbord of soorten zo veel op het toetsenbord dat 451 00:21:49,450 --> 00:21:53,760 Het overweldigt geheugen van de computer, in theorie, krijg touwtje kon terugkeren 452 00:21:53,760 --> 00:21:56,270 iets anders dan een tekenreeks. 453 00:21:56,270 --> 00:22:01,930 Het zou een bijzondere waarde genaamd terug NULL in hoofdletters, N-U-L-L, en dit is 454 00:22:01,930 --> 00:22:03,390 slechts een zogenaamde sentinel waarde. 455 00:22:03,390 --> 00:22:08,010 Het is een speciale waarde, dat betekent er iets ergs gebeurd in dit geval. 456 00:22:08,010 --> 00:22:10,520 Het is het ontbreken van een tekenreeks. 457 00:22:10,520 --> 00:22:16,190 >> Dus null Ik controleer om gewoon zo dat, lang verhaal kort, str Leng en 458 00:22:16,190 --> 00:22:20,230 andere functies die komen met C, indien ze verwachten een string, maar je ze voorbij 459 00:22:20,230 --> 00:22:23,630 de afwezigheid van een string, als je langs hen NULL, de computer of het programma 460 00:22:23,630 --> 00:22:25,000 zal gewoon crashen regelrechte. 461 00:22:25,000 --> 00:22:25,610 Het zal hangen. 462 00:22:25,610 --> 00:22:27,250 Het zal overgeven een foutmelding. 463 00:22:27,250 --> 00:22:28,690 Slechte dingen zullen gebeuren. 464 00:22:28,690 --> 00:22:31,130 Dus ook al is dit nog steeds niet goed gedefinieerd - 465 00:22:31,130 --> 00:22:33,730 Dit zal meer zin in een week of twee - in lijn 22, dit is slechts een 466 00:22:33,730 --> 00:22:38,790 voorbeeld van zelf defensieve foutcontrole voor het geval dat een time-out van 467 00:22:38,790 --> 00:22:42,040 een miljoen iets misgaat, bij tenminste mijn programma niet zal crashen. 468 00:22:42,040 --> 00:22:45,960 >> Dus als s niet gelijk iets slechts, Ik heb dit voor de lus, en dit was 469 00:22:45,960 --> 00:22:47,710 waar we hadden dat andere nieuw stuk van de syntaxis. 470 00:22:47,710 --> 00:22:51,580 Ik heb een lus iteratie uit nul tot de lengte van s. 471 00:22:51,580 --> 00:22:56,140 En dan hier, was ik een drukkerij uit s bracket ik, maar waarom heb ik gebruik% c al 472 00:22:56,140 --> 00:23:00,770 ineens in plaats van% s zelfs hoewel s is een string? 473 00:23:00,770 --> 00:23:02,110 Het is een teken, toch? 474 00:23:02,110 --> 00:23:06,560 S is een string, maar s beugel iets, s beugel i waarin i nul is 475 00:23:06,560 --> 00:23:10,380 of een of twee, die een individu teken in de tekenreeks, en dus voor 476 00:23:10,380 --> 00:23:14,970 dat, moet printf te worden geïnformeerd dat het is inderdaad een personage te verwachten. 477 00:23:14,970 --> 00:23:18,096 >> En dan herinneren, wat dit deed programma eigenlijk doen? 478 00:23:18,096 --> 00:23:19,848 >> Gedrukt het uit in de kolommen. 479 00:23:19,848 --> 00:23:21,120 >> Ja, precies. 480 00:23:21,120 --> 00:23:24,990 Het is gewoon het woord dat ik typ in gedrukte een kolom, een teken per regel. 481 00:23:24,990 --> 00:23:26,190 Dus laten we zien dit weer. 482 00:23:26,190 --> 00:23:27,810 Dus zorg string. 483 00:23:27,810 --> 00:23:30,200 OK samengesteld. . / String. 484 00:23:30,200 --> 00:23:35,560 Laat me typen H-E-L-L-O, Enter, en inderdaad ik snap het, een per regel. 485 00:23:35,560 --> 00:23:37,280 >> Dus laat ik doe een optimalisatie hier. 486 00:23:37,280 --> 00:23:40,240 Als je erover nadenkt, vooral als u hebt geprogrammeerd voor, er is 487 00:23:40,240 --> 00:23:43,340 misschien wel een inefficiëntie in lijn 24. 488 00:23:43,340 --> 00:23:46,160 Met andere woorden, het is niet per se het beste ontwerp. 489 00:23:46,160 --> 00:23:50,200 Eenvoudig, tenminste als je eenmaal herinneren wat str Leng is, maar het is 490 00:23:50,200 --> 00:23:52,640 iets doms doet potentieel. 491 00:23:52,640 --> 00:23:54,863 Wat zou dat zijn? 492 00:23:54,863 --> 00:23:56,280 >> [Onverstaanbaar]. 493 00:23:56,280 --> 00:23:56,800 >> Precies. 494 00:23:56,800 --> 00:24:00,340 Het controleren van de lengte van s elke keer, ook al 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O zal altijd zijn vijf karakters. 496 00:24:02,980 --> 00:24:05,490 Elke keer via deze lus, de vijf niet verandert. 497 00:24:05,490 --> 00:24:08,750 Ik zou kunnen verhogen i, maar wat is de lengte van elke s 498 00:24:08,750 --> 00:24:09,690 iteratie van deze lus? 499 00:24:09,690 --> 00:24:15,810 Het is vijf, het is vijf, het is vijf, en toch ben ik toch deze vraag 500 00:24:15,810 --> 00:24:18,320 vraag opnieuw en opnieuw en opnieuw. 501 00:24:18,320 --> 00:24:20,750 Nu eerlijk gezegd, de computer is zo verdomd snel, niemand zal een mededeling 502 00:24:20,750 --> 00:24:23,780 verschil in dit geval, maar dergelijke van slecht ontwerp beslissingen kunnen 503 00:24:23,780 --> 00:24:28,330 beginnen te kloppen als de compiler zelf niet proberen om dit op te lossen voor je, die 504 00:24:28,330 --> 00:24:30,630 het typisch zou niet, bij althans in het apparaat. 505 00:24:30,630 --> 00:24:31,540 >> Dus ik ga dit doen. 506 00:24:31,540 --> 00:24:34,580 Ik ga een komma na het voegen mijn eerste variabele, i. 507 00:24:34,580 --> 00:24:37,310 Ik ga mezelf een ander te geven variabele, noemde het n, gewoon door 508 00:24:37,310 --> 00:24:41,330 conventie voor nummers, en dan ben ik gaat toekennen n de waarde van de string 509 00:24:41,330 --> 00:24:42,530 lengte van s. 510 00:24:42,530 --> 00:24:46,060 En dan ga ik veranderen mijn conditie te zijn wat? 511 00:24:46,060 --> 00:24:51,960 Ik ga mijn conditie te veranderen aan terwijl ik minder dan n. 512 00:24:51,960 --> 00:24:55,700 >> Dus nu, hoe vaak ben ik controleren van de lengte van s? 513 00:24:55,700 --> 00:25:00,110 Eens, maar het is OK om i te controleren tegen n opnieuw en opnieuw, want nu die 514 00:25:00,110 --> 00:25:03,170 waarden zijn eigenlijk niet veranderen. 515 00:25:03,170 --> 00:25:06,020 Nu voor nu, weet alleen dat wanneer je bel een functie, er is een beetje van 516 00:25:06,020 --> 00:25:09,930 overhead, niet genoeg om u te ontmoedigen echt van ooit het gebruik van functies, maar 517 00:25:09,930 --> 00:25:12,750 zeker als er een regel code als dat - en de lijnen zullen krijgen 518 00:25:12,750 --> 00:25:15,490 interessanter het duurde niet lang - waar er is een mogelijkheid om na te denken, als ik 519 00:25:15,490 --> 00:25:18,320 Typ deze code, hoeveel keer zal het uit te voeren? 520 00:25:18,320 --> 00:25:20,950 Je zult beginnen te zien in de tijd van de prestaties van uw programma's kan 521 00:25:20,950 --> 00:25:21,660 inderdaad veranderen. 522 00:25:21,660 --> 00:25:24,110 >> In feite, een van het probleem sets die we hebben gedaan in de afgelopen jaren gaat 523 00:25:24,110 --> 00:25:27,600 uitvoering, zoals u zich wellicht herinnert uit week nul, een spellingscontrole, maar een 524 00:25:27,600 --> 00:25:31,380 spellingcontrole die is ontworpen om te ondersteunen een woordenboek van 150.000 plus 525 00:25:31,380 --> 00:25:32,860 woorden die we geven jullie. 526 00:25:32,860 --> 00:25:37,100 U zou hebben om code te schrijven die wordt geladen die woorden in het RAM, zodat in 527 00:25:37,100 --> 00:25:40,700 dozen zoals we zagen op het scherm een ​​moment geleden, en vervolgens zo snel als je 528 00:25:40,700 --> 00:25:43,740 kan, moet je in staat zijn om een ​​antwoord kwestie van de vorm, is dit woord 529 00:25:43,740 --> 00:25:44,280 verkeerd gespeld? 530 00:25:44,280 --> 00:25:45,420 Wordt dit woord verkeerd gespeld? 531 00:25:45,420 --> 00:25:46,770 Wordt dit woord verkeerd gespeld? 532 00:25:46,770 --> 00:25:49,525 >> En in iets als dat wat we hebben gedaan in de afgelopen jaren is veranderd in, 533 00:25:49,525 --> 00:25:53,500 zij het op een opt-in facultatieve basis, een concurrentie van soorten, waarbij de 534 00:25:53,500 --> 00:25:59,470 studenten die gebruik maken van de minder RAM en minder tijd, minder CPU-cycli, uiteindelijk 535 00:25:59,470 --> 00:26:02,640 borrelen naar de top van een kleine leader board of ranking die we op 536 00:26:02,640 --> 00:26:04,770 de cursus homepage zoals we hebben gedaan in de afgelopen jaren. 537 00:26:04,770 --> 00:26:08,100 Dus nogmaals, volledig optioneel, maar dit spreekt tot de ontwerpmogelijkheden 538 00:26:08,100 --> 00:26:11,250 die voor ons zijn als we eenmaal beginnen bouwen bovenop een aantal van deze 539 00:26:11,250 --> 00:26:14,010 fundamentele bouwstenen. 540 00:26:14,010 --> 00:26:16,780 >> Dus laat me terug naar dit diagram voor slechts een moment en onthullen een beetje 541 00:26:16,780 --> 00:26:17,610 iets meer. 542 00:26:17,610 --> 00:26:21,400 Dit is inderdaad een string, en we hebben genomen voordeel van enkele bibliotheken, 543 00:26:21,400 --> 00:26:25,150 standaard io.H die heeft - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, onder andere dingen. 546 00:26:27,860 --> 00:26:31,540 cs50.h, die int is te krijgen en touwtje enzovoort, string.h die 547 00:26:31,540 --> 00:26:32,570 had str Leng. 548 00:26:32,570 --> 00:26:34,800 Maar het blijkt dat er nog een andere. 549 00:26:34,800 --> 00:26:38,540 Eerlijk gezegd, er is veel en veel header bestanden die functies te verklaren 550 00:26:38,540 --> 00:26:43,320 voor bibliotheken, maar dit ctype.h is daadwerkelijk gaat wat te zijn 551 00:26:43,320 --> 00:26:46,900 voordelig, want ik ga om verder te gaan en uit te voeren een 552 00:26:46,900 --> 00:26:48,120 andere programma hier. 553 00:26:48,120 --> 00:26:52,420 >> Laat me ga je gang en open iets Ik schreef op voorhand genaamd 554 00:26:52,420 --> 00:26:55,750 capitalize.c, en laten we eens kijken hoe dit werkt. 555 00:26:55,750 --> 00:27:00,340 Merk op dat ik gebruik, in deze versie ervan, drie bekende bestanden. 556 00:27:00,340 --> 00:27:04,110 Merk op dat in de lijn 18, ben ik het krijgen van een tekstregel. 557 00:27:04,110 --> 00:27:07,660 Kennisgeving in lijn 21, ben ik te beweren dat de volgende code gaat 558 00:27:07,660 --> 00:27:12,170 kapitaliseren s, ongeacht de gebruiker ingetypt in, en hoe moet ik dat doen? 559 00:27:12,170 --> 00:27:13,300 Nou, ik neem - 560 00:27:13,300 --> 00:27:14,750 les geleerd van de vorige keer - 561 00:27:14,750 --> 00:27:18,370 Ik verklaar i en n en iteratie over de karakters in de string. 562 00:27:18,370 --> 00:27:22,720 En wat is dan dit blok code in lijn 24 via 27 563 00:27:22,720 --> 00:27:24,550 doet in lekentaal? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Kleine letter terug. 566 00:27:29,730 --> 00:27:30,430 >> Precies. 567 00:27:30,430 --> 00:27:35,920 Als s bracket i - dus als het i-de s karakter, dat een specifieke 568 00:27:35,920 --> 00:27:40,220 char in het koord, groter is dan of gelijk aan een kleine letters en - 569 00:27:40,220 --> 00:27:42,670 herinneren dat dubbele ampersand betekenen en - 570 00:27:42,670 --> 00:27:46,810 en hetzelfde karakter, s beugel i, is minder dan of gelijk aan z kleine letters 571 00:27:46,810 --> 00:27:50,600 dat betekent dat het een a of een b of een c of puntje, puntje, puntje, of een z, wat betekent 572 00:27:50,600 --> 00:27:51,340 het is kleine letters. 573 00:27:51,340 --> 00:27:52,900 Wat wil ik doen in dat geval? 574 00:27:52,900 --> 00:27:55,010 Nou, ik kan deze enigszins doen cryptisch, maar 575 00:27:55,010 --> 00:27:56,160 laten we plagen dit apart. 576 00:27:56,160 --> 00:28:00,210 >> Ik ga printf bellen, drukt% c want ik wil deze herdruk 577 00:28:00,210 --> 00:28:01,580 karakter op het scherm. 578 00:28:01,580 --> 00:28:06,650 Ik ben dan ga s beugel i, de te nemen i-de personage in s, en waarom 579 00:28:06,650 --> 00:28:12,330 doe ik dit trucje hier, kleine letter a minus hoofdletter A? 580 00:28:12,330 --> 00:28:16,352 Wat is dat gaat geven me, in het algemeen? 581 00:28:16,352 --> 00:28:18,600 >> [Onverstaanbaar]. 582 00:28:18,600 --> 00:28:19,390 >> Precies. 583 00:28:19,390 --> 00:28:20,860 Ik heb niet echt herinneren - 584 00:28:20,860 --> 00:28:24,390 het was 65 voor het kapitaal A. ik niet echt herinneren wat kleine letter a is, 585 00:28:24,390 --> 00:28:25,540 maar maakt niet uit. 586 00:28:25,540 --> 00:28:26,580 De computer weet. 587 00:28:26,580 --> 00:28:30,380 Dus door te zeggen, kleine letter a minus hoofdletter A, het is raar om te 588 00:28:30,380 --> 00:28:33,530 af te trekken van een ander char, maar wat zijn chars onder de motorkap? 589 00:28:33,530 --> 00:28:34,520 Ze zijn gewoon nummers. 590 00:28:34,520 --> 00:28:36,980 Dus wat die cijfers zijn, laat de computer onthouden 591 00:28:36,980 --> 00:28:38,240 in plaats van mij de mens. 592 00:28:38,240 --> 00:28:41,710 >> Dus kleine letter a minus hoofdletter A is gaat me een verschil geven. 593 00:28:41,710 --> 00:28:45,370 Het gebeurt te zijn 32, en dat zou het geval voor kleine letters b en kapitaal B 594 00:28:45,370 --> 00:28:45,930 enzovoort. 595 00:28:45,930 --> 00:28:47,710 Het blijft consistent, gelukkig. 596 00:28:47,710 --> 00:28:51,930 Dus ik ben wezen zeggen, neem de kleine letter, aftrekken van dat 597 00:28:51,930 --> 00:28:55,340 standaard verschil, en dat effectief veranderingen s beugel i van 598 00:28:55,340 --> 00:28:59,400 kleine letters aan, natuurlijk, hoofdletters, zonder dat ik echt na te hoeven denken 599 00:28:59,400 --> 00:29:03,040 over of vergeet niet, wat waren die nummers hebben we gesproken over wanneer de acht 600 00:29:03,040 --> 00:29:04,800 vrijwilligers kwam op het podium? 601 00:29:04,800 --> 00:29:08,800 Nu ondertussen, in het anders, als het niet een kleine letter zoals bepaald 602 00:29:08,800 --> 00:29:10,400 door lijn 24, maar print het uit. 603 00:29:10,400 --> 00:29:12,590 Ik wil alleen het aanraken tekens waren 604 00:29:12,590 --> 00:29:14,410 eigenlijk oorspronkelijk kleine letters. 605 00:29:14,410 --> 00:29:15,150 >> Dus laten we dit zien. 606 00:29:15,150 --> 00:29:17,400 Maken kapitaliseren. 607 00:29:17,400 --> 00:29:18,470 Gecompileerd, OK. 608 00:29:18,470 --> 00:29:19,730 . / Kapitaliseren. 609 00:29:19,730 --> 00:29:23,530 En laat me typen in H-E-L-L-O in kleine letters, Enter. 610 00:29:23,530 --> 00:29:26,370 En merkt dat het wordt omgezet in hoofdletters. 611 00:29:26,370 --> 00:29:27,940 Laat me dit opnieuw doen met een ander woord. 612 00:29:27,940 --> 00:29:32,720 Hoe zit het met D-A-V-I-D met de eerste D gekapitaliseerd als een naam is typisch? 613 00:29:32,720 --> 00:29:33,560 Enter. 614 00:29:33,560 --> 00:29:34,870 Merken dat het nog steeds correct. 615 00:29:34,870 --> 00:29:40,250 Het is gewoon uitgestuurd die eerste D ongewijzigd via die else. 616 00:29:40,250 --> 00:29:42,170 >> Dus hou in het achterhoofd, dan, een paar dingen hier. 617 00:29:42,170 --> 00:29:45,060 Een, als je ooit wilt twee controleren omstandigheden in een keer, je kan en ze 618 00:29:45,060 --> 00:29:46,500 samen als we voorspelden. 619 00:29:46,500 --> 00:29:49,900 U kunt tekens vergelijken op deze manier en effectief behandelen tekens 620 00:29:49,900 --> 00:29:53,050 aantallen, maar eerlijk gezegd, dit is zo verdomd cryptisch Ik ga nooit onthouden 621 00:29:53,050 --> 00:29:56,510 hoe om te komen met dit van de grond af zonder motivering door het voor heel 622 00:29:56,510 --> 00:29:57,140 een beetje tijd. 623 00:29:57,140 --> 00:30:00,590 >> Zou het niet aardig zijn als iemand die schreef er een functie genaamd is 624 00:30:00,590 --> 00:30:05,390 verlagen die kon antwoorden voor mij waar of vals, dit karakter is kleine letters? 625 00:30:05,390 --> 00:30:09,350 Nou gelukkig, wie schreef ctype.h deed precies dat. 626 00:30:09,350 --> 00:30:15,540 Laat me gaan hier omhoog en voeg ctype voor c types, en nu laat ik hier naar beneden en 627 00:30:15,540 --> 00:30:18,820 herschrijven deze lijn als volgt. 628 00:30:18,820 --> 00:30:27,510 >> Dus als het heet is lager, ik beweer, s bracket ik, dan ga ik om te verwijderen 629 00:30:27,510 --> 00:30:29,400 deze twee lijnen geheel. 630 00:30:29,400 --> 00:30:32,570 Dus nu iemand anders, ik hoop, schreef een functie genaamd is lager, en het 631 00:30:32,570 --> 00:30:36,250 Blijkt dat ze deden en ze verklaard het binnen van ctype.h. 632 00:30:36,250 --> 00:30:39,480 En nu ga ik naar lijn 27 vertrekken alleen, ik ga naar lijn 31 vertrekken 633 00:30:39,480 --> 00:30:41,890 alleen, maar merken hoeveel ik heb aangescherpt mijn code. 634 00:30:41,890 --> 00:30:42,690 Het is nu schoner. 635 00:30:42,690 --> 00:30:47,250 Het is minder moeilijk om door te kijken want nu de functie, bovendien is 636 00:30:47,250 --> 00:30:50,080 zo heerlijk noemde het net doet wat het zegt. 637 00:30:50,080 --> 00:30:51,520 >> Dus nu ga ik dit redden. 638 00:30:51,520 --> 00:30:52,930 Ik ga uit te zoomen. 639 00:30:52,930 --> 00:30:56,650 En net als bij Scratch je zou kunnen hebben Booleans, Booleaanse waarden true of 640 00:30:56,650 --> 00:31:01,530 vals, dat is precies wat is lager effectief rendement. 641 00:31:01,530 --> 00:31:02,960 Laat me opnieuw compileren. 642 00:31:02,960 --> 00:31:04,500 Laat me re-run. 643 00:31:04,500 --> 00:31:07,350 En nu laten we het nog eens proberen, H-E-L-L-O, Enter. 644 00:31:07,350 --> 00:31:07,970 Dat is vrij goed. 645 00:31:07,970 --> 00:31:10,150 En probeer het opnieuw, zorg ervoor dat ik is er iets niet verpesten. 646 00:31:10,150 --> 00:31:11,670 Dat wordt geactiveerd als goed. 647 00:31:11,670 --> 00:31:14,190 >> Maar dit is niet goed genoeg, want de andere ding dat ik ga nooit 648 00:31:14,190 --> 00:31:19,090 herinner me tenzij ik werk door het echt voorzichtig op, zeg, papier 649 00:31:19,090 --> 00:31:19,920 dit verdomde lijn. 650 00:31:19,920 --> 00:31:23,450 Zou het niet mooi zijn als er een functie genaamd naar boven? 651 00:31:23,450 --> 00:31:26,930 Nou, het blijkt dat er is in ctype.h ook. 652 00:31:26,930 --> 00:31:30,150 Ik ga om te gaan en typ - 653 00:31:30,150 --> 00:31:31,340 laat me brengen die lijn terug. 654 00:31:31,340 --> 00:31:36,430 In plaats van deze hier, laat mij ga je gang en zeggen, de plaats van het% c de 655 00:31:36,430 --> 00:31:42,110 resultaat van deze functie bellen naar boven de i-de karakter s. 656 00:31:42,110 --> 00:31:45,430 En let nu op het wordt steeds een beetje evenwicht. 657 00:31:45,430 --> 00:31:48,870 Ik moet bijhouden hoeveel houden haakjes ik heb geopend en gesloten. 658 00:31:48,870 --> 00:31:50,050 >> Dus nu is het nog schoner. 659 00:31:50,050 --> 00:31:53,460 Nu dit programma wordt steeds beter en beter aantoonbaar ontworpen omdat het 660 00:31:53,460 --> 00:31:56,450 veel, veel beter leesbaar, maar het is geen laten corrigeren. 661 00:31:56,450 --> 00:31:57,600 Maken kapitaliseren. 662 00:31:57,600 --> 00:31:58,930 . / Kapitaliseren. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Laten we lopen het weer, D-A-V-I-D. OK, dus we zijn nog steeds in 664 00:32:03,220 --> 00:32:04,250 vrij goede vorm. 665 00:32:04,250 --> 00:32:06,030 >> Maar nu naar boven. 666 00:32:06,030 --> 00:32:09,720 Ik stel voor dat er een meer verfijning we konden maken dat zou zijn 667 00:32:09,720 --> 00:32:12,820 echt leuk, dat kon echt vast up deze code en echt geven ons vijf 668 00:32:12,820 --> 00:32:15,150 van de vijf voor het ontwerp, bijvoorbeeld. 669 00:32:15,150 --> 00:32:16,510 Wat zou leuk zijn om zich te ontdoen van? 670 00:32:16,510 --> 00:32:20,770 Nou, kijk eens hoe verdomd lang dit blok code is gewoon om iets simpels te doen. 671 00:32:20,770 --> 00:32:23,850 >> Nu als een terzijde, zoals je zou kunnen hebben gezien in super sectie afgelopen 672 00:32:23,850 --> 00:32:27,570 weekend, hoeft u niet strikt nodig de accolades wanneer je alleen maar een 673 00:32:27,570 --> 00:32:32,180 regel van de code, ook al hebben we voorgesteld het houden van hen, zodat het veel 674 00:32:32,180 --> 00:32:36,190 meer duidelijk, zoals in Scratch's U-vormige blokken, wat er in de branche. 675 00:32:36,190 --> 00:32:40,170 Maar zou het niet mooi zijn als de bovenste, wanneer gegeven zijn inbreng, draaide het in 676 00:32:40,170 --> 00:32:44,730 hoofdletter als het niet, en wat zou prachtig zijn in het omgekeerde geval, indien 677 00:32:44,730 --> 00:32:47,210 het is al hoofdletters? 678 00:32:47,210 --> 00:32:49,620 Geef het gewoon door en laat het met rust. 679 00:32:49,620 --> 00:32:50,660 >> Dus misschien is het dat doet. 680 00:32:50,660 --> 00:32:52,990 Ik zou kunnen proberen en maar hopen dat het doet, maar laat me 681 00:32:52,990 --> 00:32:54,450 introduceren een ander ding. 682 00:32:54,450 --> 00:32:57,440 In plaats van deze ingebouwde terminal venster hier beneden, te herinneren dat 683 00:32:57,440 --> 00:33:01,130 dit plein zwarte pictogram geeft u een grotere terminal venster dat ik kan vol 684 00:33:01,130 --> 00:33:02,260 scherm als ik wil? 685 00:33:02,260 --> 00:33:05,820 Dus het blijkt dat ze soort van vreemd genoemd, maar er is deze dingen genoemd 686 00:33:05,820 --> 00:33:10,970 man pagina's, handleidingen, man voor de korte, en ik kan deze door toegang 687 00:33:10,970 --> 00:33:14,515 typen man - 688 00:33:14,515 --> 00:33:15,570 wat wil ik met het type? 689 00:33:15,570 --> 00:33:17,830 Man naar boven. 690 00:33:17,830 --> 00:33:21,090 >> En nu merken als er een werken in de computer, in 691 00:33:21,090 --> 00:33:23,970 dit geval het apparaat, dat is gewoon het besturingssysteem Linux, het gaat 692 00:33:23,970 --> 00:33:27,920 voor mij een wat cryptische reeks geven uitgang, maar u zult na verloop van tijd merken dat 693 00:33:27,920 --> 00:33:31,720 het is altijd vrij veel het geformatteerd hetzelfde dus je begint te wennen. 694 00:33:31,720 --> 00:33:35,130 Merkt aan de top te boven, en blijkbaar is dezelfde documentatie 695 00:33:35,130 --> 00:33:35,680 voor te verlagen. 696 00:33:35,680 --> 00:33:38,740 Wie schreef het was te snijden hoeken en zet het allemaal op een pagina. 697 00:33:38,740 --> 00:33:40,720 Doel deze dingen 'in het leven is om een ​​bekeerling 698 00:33:40,720 --> 00:33:42,780 brief naar hoofdletters of kleine letters. 699 00:33:42,780 --> 00:33:46,290 >> Merk op dat onder Synopsis, de man pagina leert me wat file Ik heb 700 00:33:46,290 --> 00:33:48,130 te nemen om dit ding te gebruiken. 701 00:33:48,130 --> 00:33:51,320 Het geeft me de handtekeningen van deze functies, beiden, zelfs 702 00:33:51,320 --> 00:33:53,510 hoewel we op dit moment alleen zorg over een. 703 00:33:53,510 --> 00:33:54,730 Hier is nu een beschrijving. 704 00:33:54,730 --> 00:33:58,800 Naar boven zet de letter c naar hoofdletters indien mogelijk. 705 00:33:58,800 --> 00:34:02,280 >> Nog steeds niet dat leerzaam, maar laat me Nu kijk onder return waarde, het ding 706 00:34:02,280 --> 00:34:03,520 die terug is overhandigd. 707 00:34:03,520 --> 00:34:08,600 Dus de waarde die wordt geretourneerd is dat van de geconverteerd letter of c, indien de 708 00:34:08,600 --> 00:34:09,870 conversie niet mogelijk. 709 00:34:09,870 --> 00:34:11,202 Wat is c? 710 00:34:11,202 --> 00:34:12,560 >> Het oorspronkelijke karakter. 711 00:34:12,560 --> 00:34:15,370 >> Het oorspronkelijke karakter en we weten dat door, opnieuw, omhoog gaat naar de 712 00:34:15,370 --> 00:34:19,179 synopsis, en wie dit schreef functie net besloten dat de input 713 00:34:19,179 --> 00:34:22,909 tot aan de bovenste en onderste is gewoon willekeurig gaan heten c. 714 00:34:22,909 --> 00:34:24,909 Ze kon het bijna alles hebben genoemd ze willen, maar ze hield het 715 00:34:24,909 --> 00:34:26,270 eenvoudig c. 716 00:34:26,270 --> 00:34:27,880 Dus ik heb geraadpleegd de man pagina. 717 00:34:27,880 --> 00:34:31,870 Deze zin stelt me ​​gerust dat als het is niet een kleine letter, het is 718 00:34:31,870 --> 00:34:34,969 gaat geef me terug c, dat is perfect, wat betekent dat ik kan ontdoen van 719 00:34:34,969 --> 00:34:36,199 mijn anders staat. 720 00:34:36,199 --> 00:34:39,679 >> Dus laat me teruggaan naar gedit, en Nu laat ik dit gewoon doen. 721 00:34:39,679 --> 00:34:41,960 Ik ga mijn printf statement kopiëren. 722 00:34:41,960 --> 00:34:45,969 Ik ga vooruit en recht binnen te gaan de lus afdruk die uit, en krijgen 723 00:34:45,969 --> 00:34:48,760 ontdoen van nu dit hele indien construct. 724 00:34:48,760 --> 00:34:51,860 Was geen slecht idee, en het was erg veel correct en in overeenstemming met 725 00:34:51,860 --> 00:34:54,100 alles wat we hebben gepredikt, maar niet nodig. 726 00:34:54,100 --> 00:34:57,070 Zodra u een aantal bibliotheken realiseren functie bestaat dat iemand anders 727 00:34:57,070 --> 00:35:01,340 schreef, of misschien heb je elders in geschreven het bestand, kunt u deze gebruiken en echt 728 00:35:01,340 --> 00:35:02,690 beginnen aan te scherpen van de code. 729 00:35:02,690 --> 00:35:06,080 >> En als ik zeg dingen als goede stijl, het feit dat deze persoon wel de 730 00:35:06,080 --> 00:35:11,490 functie om de bovenste, of eerder is lager is heerlijk handig omdat 731 00:35:11,490 --> 00:35:12,900 ze zijn erg beschrijvend. 732 00:35:12,900 --> 00:35:16,120 Je zou het niet wilt dat uw functies op te roepen x en y en z, die moeten 733 00:35:16,120 --> 00:35:19,620 veel, veel minder betekenis. 734 00:35:19,620 --> 00:35:25,160 Voor vragen over die serie verbeteringen? 735 00:35:25,160 --> 00:35:28,010 >> Zo volstaat het om een ​​van de zeggen afhaalrestaurants is zelfs als uw eigen probleem 736 00:35:28,010 --> 00:35:30,960 set - misschien probleem set een, maar zeker P set twee en verder, zelfs 737 00:35:30,960 --> 00:35:34,380 als ze correct zijn niet noodzakelijkerwijs dat ze perfect zijn gewoon 738 00:35:34,380 --> 00:35:36,155 nog niet of bijzonder goed ontworpen. 739 00:35:36,155 --> 00:35:38,420 Dat is de andere as gaan nadenken over. 740 00:35:38,420 --> 00:35:41,730 Dus dit was een string binnenkant van je geheugen van de computer, maar als je een 741 00:35:41,730 --> 00:35:46,180 heleboel personages zoals H-E-L-L-O binnenkant van RAM, en veronderstellen 742 00:35:46,180 --> 00:35:51,330 dat u in uw programma te bellen krijgen touwtje meerdere malen zodat u 743 00:35:51,330 --> 00:35:54,200 bellen zodra je snaar, dan heb je bel krijg tekenreeks weer. 744 00:35:54,200 --> 00:35:55,880 Nou ja, wat gaat gebeuren na verloop van tijd? 745 00:35:55,880 --> 00:35:59,170 >> Met andere woorden, als je een lijn van code, zij het uit hun context, zoals 746 00:35:59,170 --> 00:36:02,120 tekenreeks s krijgt - 747 00:36:02,120 --> 00:36:02,960 laten we dit doen. 748 00:36:02,960 --> 00:36:05,270 String naam gelijk krijgen string. 749 00:36:05,270 --> 00:36:08,590 Dus stel dat de regel van de code is bedoeld aan de gebruiker voor zijn of haar naam te vragen. 750 00:36:08,590 --> 00:36:14,580 Deze volgende regel code is bedoeld om te vragen de gebruiker voor zijn of haar school, en 751 00:36:14,580 --> 00:36:15,920 dit volgende regel, enzovoort. 752 00:36:15,920 --> 00:36:18,150 Stel dat we blijven vragen de gebruiker voor andere en 753 00:36:18,150 --> 00:36:19,750 andere en andere string. 754 00:36:19,750 --> 00:36:22,390 Ze gaan om te verblijven in het geheugen tegelijkertijd. 755 00:36:22,390 --> 00:36:24,280 Men is niet van plan om de andere afranselen. 756 00:36:24,280 --> 00:36:26,420 School is niet overschrijven de andere. 757 00:36:26,420 --> 00:36:28,520 Maar waar komen ze allemaal belanden in het geheugen? 758 00:36:28,520 --> 00:36:32,030 >> Nou, als we beginnen te tekenen op het scherm, waar we dit ding kunnen gebruiken 759 00:36:32,030 --> 00:36:35,800 hier als een schoolbord, als dit zwart rechthoek stelt mijn computer 760 00:36:35,800 --> 00:36:39,800 geheugen, ik ga willekeurig starten verdelen in kleine vierkantjes, 761 00:36:39,800 --> 00:36:42,120 die elk een byte van het geheugen. 762 00:36:42,120 --> 00:36:46,560 Eerlijk gezegd, als je een gigabyte aan RAM deze dagen, je hebt een miljard bytes 763 00:36:46,560 --> 00:36:49,540 van het geheugen in de computer, zodat een miljard van deze vierkanten. 764 00:36:49,540 --> 00:36:52,110 Dus het volstaat te zeggen, dit is niet echt op schaal. 765 00:36:52,110 --> 00:36:58,250 >> Maar we konden blijven trekken al deze duidelijk niet naar pleinen schaal, en dit 766 00:36:58,250 --> 00:37:01,260 collectief vertegenwoordigt geheugen van mijn computer. 767 00:37:01,260 --> 00:37:03,136 Nu gaan we gewoon doen puntje, puntje, puntje. 768 00:37:03,136 --> 00:37:06,260 Dus met andere woorden, als ik u nu vragen de gebruiker met get touwtje om mij een te geven 769 00:37:06,260 --> 00:37:07,350 snaar, wat gebeurt er? 770 00:37:07,350 --> 00:37:14,270 Als types de gebruiker in "hello", die eindigt in H-E-L-L-O. Maar stel dat de 771 00:37:14,270 --> 00:37:15,720 gebruiker vervolgens typen in - 772 00:37:15,720 --> 00:37:17,250 eigenlijk, zou ik niet heb gedaan hallo omdat we vragen 773 00:37:17,250 --> 00:37:18,330 hen voor hun namen. 774 00:37:18,330 --> 00:37:20,580 Dus laten we terug gaan als ik dit kan doen. 775 00:37:20,580 --> 00:37:26,130 >> Dus als ik typ in D-A-V-I-D voor mijn naam, maar herinneren dat de tweede regel van 776 00:37:26,130 --> 00:37:29,220 code werd weer krijg touwtje en hun school krijgen. 777 00:37:29,220 --> 00:37:32,090 Waar is dat woord dat de gebruiker soorten in het gaan naar de volgende te gaan? 778 00:37:32,090 --> 00:37:38,290 Nou ja, misschien is het in te gaan op H-A-R-V-A-R-D. Dus ook al heb ik 779 00:37:38,290 --> 00:37:41,560 getekend als twee rijen, dit is gewoon een hele hoop van bytes in uw 780 00:37:41,560 --> 00:37:42,710 RAM van de computer. 781 00:37:42,710 --> 00:37:46,560 Er is een probleem nu, want als ik nu ben RAM gebruik in deze zeer redelijke 782 00:37:46,560 --> 00:37:49,910 maar soort van naïeve manier, kan wat je blijkbaar niet onderscheiden? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Waar men begint en waar een eindigt, toch? 785 00:37:54,680 --> 00:37:55,860 Ze zijn soort samen vervagen. 786 00:37:55,860 --> 00:37:57,920 >> Zo blijkt de computer doet dit niet. 787 00:37:57,920 --> 00:38:04,720 Laat me eigenlijk scrollen terug in de tijd een paar personages, en in plaats van Harvard 788 00:38:04,720 --> 00:38:09,570 onmiddellijk gaan na de naam van de gebruiker, de gebruiker daadwerkelijk krijgt, achter 789 00:38:09,570 --> 00:38:12,000 de schermen, een speciaal teken ingevoegd bij de 790 00:38:12,000 --> 00:38:13,885 computer voor hem of haar. 791 00:38:13,885 --> 00:38:19,470 / 0, ook wel bekend als het nul karakter hinderlijk genaamd N-U-L, niet 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, maar schrijf je het als / 0. 793 00:38:22,190 --> 00:38:27,130 Het is gewoon allemaal nulbits is een marker in tussen het eerste woord dat de gebruiker 794 00:38:27,130 --> 00:38:28,290 getypt en de tweede. 795 00:38:28,290 --> 00:38:33,020 >> Dus Harvard eigenlijk nu belandt als deze tekenreeks 796 00:38:33,020 --> 00:38:36,110 en een meer / 0. 797 00:38:36,110 --> 00:38:41,690 Dus met andere woorden, doordat deze sentinel waarden, acht aaneengesloten nul 798 00:38:41,690 --> 00:38:45,220 beetjes, kunt u nu beginnen te onderscheiden een teken van een ander. 799 00:38:45,220 --> 00:38:49,720 Dus al die tijd wat "hello" is eigenlijk "hello" met een / 0, en 800 00:38:49,720 --> 00:38:53,580 Ondertussen zou er heel goed zijn heel wat meer RAM 801 00:38:53,580 --> 00:38:56,400 in de computer. 802 00:38:56,400 --> 00:38:57,810 >> Laat mij een ding nu. 803 00:38:57,810 --> 00:39:01,800 Het blijkt dat al deze pleinen we hebben al getekend, zijn zij, ja, 804 00:39:01,800 --> 00:39:06,140 koorden, maar meer in het algemeen, deze dingen zijn arrays. 805 00:39:06,140 --> 00:39:10,590 Een array is gewoon een brok van het geheugen dat is rug aan rug aan rug aan rug, 806 00:39:10,590 --> 00:39:15,130 en u doorgaans een array bij wijze van dit plein haakjesnotering. 807 00:39:15,130 --> 00:39:18,210 Dus we gaan deze nogal wat te zien na verloop van tijd, maar laat me gaan en 808 00:39:18,210 --> 00:39:21,160 openstellen, laten we noemen het veroudert. 809 00:39:21,160 --> 00:39:23,920 En let op wat we kunnen doen met deze zelfde trucs, een beetje 810 00:39:23,920 --> 00:39:25,750 beetje meer syntax hier. 811 00:39:25,750 --> 00:39:29,270 >> Dus in de lijn 17 van dit programma - eigenlijk, laat ik het programma voor het eerst uitgevoerd 812 00:39:29,270 --> 00:39:30,770 zodat we kunnen zien wat dit ding doet. 813 00:39:30,770 --> 00:39:33,530 Ik bel maken leeftijden aan compileren dit programma. 814 00:39:33,530 --> 00:39:34,950 . / Leeftijden. 815 00:39:34,950 --> 00:39:36,480 Hoeveel mensen zijn in de ruimte? 816 00:39:36,480 --> 00:39:38,020 Noem het drietal. 817 00:39:38,020 --> 00:39:39,575 Leeftijd van de eerste persoon? 818 00:39:39,575 --> 00:39:42,710 18, 19 en 20. 819 00:39:42,710 --> 00:39:46,770 En nu enigszins belachelijk, ik heb net hebben een programma dat leeftijden die gemaakt 820 00:39:46,770 --> 00:39:47,740 drie mensen. 821 00:39:47,740 --> 00:39:50,390 >> Dus er is duidelijk een kans voor wat plezier rekenkundige hier. 822 00:39:50,390 --> 00:39:51,560 Gelukkig, de wiskunde is correct. 823 00:39:51,560 --> 00:39:54,720 18 naar 19, 19 ging tot 20 enzovoort. 824 00:39:54,720 --> 00:39:58,510 Maar wat er echt bedoeld om te worden illustratief is hier hoe we het opslaan 825 00:39:58,510 --> 00:40:00,190 van die drie mensen leeftijden. 826 00:40:00,190 --> 00:40:02,370 Laat me in te zoomen op wat er hier aan de hand. 827 00:40:02,370 --> 00:40:06,240 >> Dus eerst, deze eerste paar regels moeten worden al behoorlijk vertrouwd. 828 00:40:06,240 --> 00:40:08,770 Ik ben gewoon de gebruiker vraagt ​​om de aantal mensen in de zaal. 829 00:40:08,770 --> 00:40:11,490 Dan gebruik ik krijg int en doen terwijl aan Dit doen opnieuw en opnieuw en opnieuw. 830 00:40:11,490 --> 00:40:15,780 We hebben dat patroon eerder gezien, maar lijn 27 is nieuw en eigenlijk heel 831 00:40:15,780 --> 00:40:18,160 nuttig, en wordt steeds bruikbaar. 832 00:40:18,160 --> 00:40:21,620 Merk op dat wat is er anders in de lijn 27 is dat ik lijken te verklaren een 833 00:40:21,620 --> 00:40:23,960 int genaamd leeftijden, maar wacht. 834 00:40:23,960 --> 00:40:27,140 Het is niet alleen int leeftijden. 835 00:40:27,140 --> 00:40:30,130 Er is deze vierkante haken, binnenste gedeelte is n. 836 00:40:30,130 --> 00:40:35,150 >> Zodat de beugel n in dit verband niet binnenkant van een printf statement hier maar 837 00:40:35,150 --> 00:40:44,370 in deze enige lijn 27, deze lijn is zeggen, geef me n gehele getallen, die elk 838 00:40:44,370 --> 00:40:46,080 is van het type int. 839 00:40:46,080 --> 00:40:49,870 Dus dit is een emmer, om zo te zeggen, van, in dit geval, drie getallen naar 840 00:40:49,870 --> 00:40:52,770 rug aan rug, zodat ik effectief drie variabelen. 841 00:40:52,770 --> 00:40:54,890 Het alternatief, om duidelijk, zou dit. 842 00:40:54,890 --> 00:40:57,400 >> Als ik wilde de eerste student leeftijd, ik zou dit doen. 843 00:40:57,400 --> 00:40:59,520 Als ik wilde de tweede student leeftijd zou ik dit doen. 844 00:40:59,520 --> 00:41:01,860 Als ik wilde het derde student leeftijd, ik zou dit doen. 845 00:41:01,860 --> 00:41:04,320 En God verhoede dat we nodig hebben ieders leeftijd in deze kamer - 846 00:41:04,320 --> 00:41:07,670 Ik bedoel, dit is een deurklink van een heleboel van de kopie, plak opnieuw en opnieuw en opnieuw. 847 00:41:07,670 --> 00:41:10,870 En plus zodra ik dit programma te compileren, als een andere student loopt in meer dan uit 848 00:41:10,870 --> 00:41:14,200 van die deur, nu mijn nummer van variabelen is ingevuld. 849 00:41:14,200 --> 00:41:17,450 >> Dus wat er leuk is aan een array is zo Zodra je begint te voelen jezelf 850 00:41:17,450 --> 00:41:20,190 kopiëren en plakken, zijn de kansen dat is niet de beste aanpak. 851 00:41:20,190 --> 00:41:22,240 Een array is dynamisch potentieel. 852 00:41:22,240 --> 00:41:24,610 Ik weet niet van tevoren hoeveel mensen zullen worden in de kamer, 853 00:41:24,610 --> 00:41:28,670 maar ik weet dat ik moet n van hen, en ik zal achterhalen n wanneer de tijd komt. 854 00:41:28,670 --> 00:41:35,500 Deze regel code betekent nu, geef me een stuk van het geheugen dat er zo uitziet 855 00:41:35,500 --> 00:41:40,380 waar het aantal vakjes op het scherm is volledig afhankelijk van n dat 856 00:41:40,380 --> 00:41:42,010 de gebruiker intikt: 857 00:41:42,010 --> 00:41:44,850 >> Dus nu de rest van dit programma is eigenlijk vrij vergelijkbaar met wat we 858 00:41:44,850 --> 00:41:46,860 net deed met de personages. 859 00:41:46,860 --> 00:41:49,970 Let op, ik heb een lus te beginnen in lijn 30. 860 00:41:49,970 --> 00:41:54,920 Dus direct nadat ik de array, ik itereren van y gelijk aan nul op maximaal n. 861 00:41:54,920 --> 00:41:58,890 Ik heb alleen deze leerzame printf bericht alleen maar zeggen, geef me de leeftijd 862 00:41:58,890 --> 00:42:03,690 van de persoon #% i, dus nummer een, nummer twee, nummer drie. 863 00:42:03,690 --> 00:42:04,730 En waarom heb ik dit doen? 864 00:42:04,730 --> 00:42:08,870 Eerlijk gezegd, mensen liever te tellen van de ene Op up terwijl informatici, 865 00:42:08,870 --> 00:42:09,620 nul op maximaal. 866 00:42:09,620 --> 00:42:11,700 informatici zijn niet van plan om Gebruik dit soort programma's, dus we zijn 867 00:42:11,700 --> 00:42:13,990 ga gewoon beginnen met tellen op een als normale mensen. 868 00:42:13,990 --> 00:42:17,630 >> En nu in lijn 33, ziet de lichtjes ander stuk syntax. 869 00:42:17,630 --> 00:42:23,710 De i-de leeftijd die variabele type matrix gaat een int te krijgen. 870 00:42:23,710 --> 00:42:25,770 En nu tot slot, dit is gewoon rekenkunde hier beneden. 871 00:42:25,770 --> 00:42:29,200 Ik besloot in een aparte lus te krijgen enige tijd verstrijkt, en nu in deze 872 00:42:29,200 --> 00:42:31,400 aparte lus, deze lijnen uit te voeren. 873 00:42:31,400 --> 00:42:35,810 >> Een jaar vanaf nu, persoon ik zal i jaar oud, maar merken dit is niet de 874 00:42:35,810 --> 00:42:36,500 variabele i. 875 00:42:36,500 --> 00:42:38,390 Dit is nu% i voor int. 876 00:42:38,390 --> 00:42:43,210 En merk als de eerste tijdelijke aanduiding, I plug in i plus 1, dus tellen we als een 877 00:42:43,210 --> 00:42:44,250 normaal persoon. 878 00:42:44,250 --> 00:42:49,190 En dan voor de waarde van hun leeftijd, voor i jaar oud, ik neem leeftijden beugel 879 00:42:49,190 --> 00:42:52,980 i - en waarom doe ik plus een hier? 880 00:42:52,980 --> 00:42:53,760 Ze gewoon de leeftijd. 881 00:42:53,760 --> 00:42:55,030 Het is mijn stomme keuze van de programma's. 882 00:42:55,030 --> 00:42:56,810 Ze hebben net een jaar oud. 883 00:42:56,810 --> 00:42:59,770 Ik kon typen in elk nummer dat Ik wil daar eigenlijk. 884 00:42:59,770 --> 00:43:02,430 >> Dus wat is eigenlijk allemaal de relevantie hier? 885 00:43:02,430 --> 00:43:07,610 Nou, laat me eigenlijk terugbladeren hier en een beeld te schetsen 886 00:43:07,610 --> 00:43:10,830 van wat ons te wachten. 887 00:43:10,830 --> 00:43:15,720 Wat zullen we doen met onze volgende Probleemverzameling Twee is ploeteren in de 888 00:43:15,720 --> 00:43:17,070 wereld van cryptografie. 889 00:43:17,070 --> 00:43:22,500 Dus dit is een reeks tekens, dus een opeenvolging van meerdere tekens, en welke 890 00:43:22,500 --> 00:43:23,750 zegt dit? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Het is niet in de online versie van de glijbanen. 893 00:43:30,600 --> 00:43:35,880 >> Dus ik beweren dat dit gelijk is aan deze, een stomme reclame van vele jaren 894 00:43:35,880 --> 00:43:39,950 geleden dat eigenlijk zou kunnen herinneren een van zijn oorsprong. 895 00:43:39,950 --> 00:43:42,740 Dit is dus een voorbeeld van encryptie of cryptografie. 896 00:43:42,740 --> 00:43:46,150 Het blijkt dat als je wilt eigenlijk informatie of delen stuur 897 00:43:46,150 --> 00:43:49,310 informatie met iemand veilig, als een bericht als dit, kunt u 898 00:43:49,310 --> 00:43:50,500 versleutelen van de letters. 899 00:43:50,500 --> 00:43:53,170 Maar meestal zijn de woorden niet willekeurig roerei. 900 00:43:53,170 --> 00:43:56,365 Ze gepermuteerd op enigerlei wijze veranderd op een bepaalde manier, zodat - oeps. 901 00:43:56,365 --> 00:43:59,040 Dat is een leuke spoiler voor de volgende keer. 902 00:43:59,040 --> 00:44:04,390 >> Dus je kunt in kaart wat is blijkbaar O naar B. Merk op dat lijnen 903 00:44:04,390 --> 00:44:05,420 kapitalisatie-wise. 904 00:44:05,420 --> 00:44:07,960 Blijkbaar r wordt e. 905 00:44:07,960 --> 00:44:14,000 Blijkbaar F-H-E-R wordt S-U-R-E. Dus het blijkt dat er een mapping, en in 906 00:44:14,000 --> 00:44:18,720 dit geval is er een behoorlijk stom het in kaart brengen als iemand heeft bedacht? 907 00:44:18,720 --> 00:44:21,440 Dit is iets genaamd Rot 13, Roteren 13. 908 00:44:21,440 --> 00:44:24,760 Het is de stupidest van encryptie mechanismen omdat het letterlijk net 909 00:44:24,760 --> 00:44:29,160 voegt 13 om elk een van de brieven, dom in de zin dat als je gewoon 910 00:44:29,160 --> 00:44:31,890 heb een beetje vrije tijd op uw handen en een potlood, of je denkt dat het gewoon 911 00:44:31,890 --> 00:44:35,260 door in je hoofd, zou je kunnen proberen alle mogelijke toevoegingen - een, twee, 912 00:44:35,260 --> 00:44:38,470 drie, punt, punt, punt, 25 tot slechts Draai het hele alfabet, en 913 00:44:38,470 --> 00:44:40,860 Uiteindelijk, zult u erachter te komen wat deze boodschap is. 914 00:44:40,860 --> 00:44:43,700 Dus als je iets als dit in deed lagere school doorgeven van berichten aan uw 915 00:44:43,700 --> 00:44:46,830 beste vriend, als je de lagere school leraar gewoon lezen via de 916 00:44:46,830 --> 00:44:50,320 boodschap en brute dwong de oplossing, je zou hebben gekregen 917 00:44:50,320 --> 00:44:52,550 een antwoord op die. 918 00:44:52,550 --> 00:44:54,970 >> Nu natuurlijk, in de echte wereld, cryptografie is meer verfijnd. 919 00:44:54,970 --> 00:45:00,120 Dit is een tekstfragment uit een computersysteem dat gebruikersnamen en heeft 920 00:45:00,120 --> 00:45:03,630 wachtwoorden, zoals bijna alle van ons doen en dit is wat vergeten zou 921 00:45:03,630 --> 00:45:07,260 kijk graag indien opgeslagen op uw harde rijden maar in gecodeerde vorm. 922 00:45:07,260 --> 00:45:11,050 Dit is niet alleen een rotatie van brieven, A is B en B is C. Dit is 923 00:45:11,050 --> 00:45:15,620 veel verfijnder, maar het gebruikt wat algemeen bekend staat als geheime sleutel 924 00:45:15,620 --> 00:45:16,690 cryptografie. 925 00:45:16,690 --> 00:45:20,210 Deze foto vertelt het volgende verhaal met een aantal iconen. 926 00:45:20,210 --> 00:45:22,250 >> Aan de linkerkant, we hebben wat we zullen platte tekst noemen. 927 00:45:22,250 --> 00:45:25,420 In de wereld van cryptografie, plain tekst is gewoon het originele bericht 928 00:45:25,420 --> 00:45:29,050 geschreven in het Engels of het Frans of welke taal dan ook. 929 00:45:29,050 --> 00:45:32,405 Als je het wilt coderen, zullen we doorgeven het picturaal door een hangslot, zodat 930 00:45:32,405 --> 00:45:35,580 enkele soort algoritme, een functie of een programma dat iemand schreef 931 00:45:35,580 --> 00:45:39,880 dat krabbelt de letters hopelijk meer complicatedly dan alleen het toevoegen van 13 932 00:45:39,880 --> 00:45:40,980 elk van hen. 933 00:45:40,980 --> 00:45:43,780 >> Wat je uit van dat proces in de midden is er heet cyphertext. 934 00:45:43,780 --> 00:45:44,850 Dus een soort van een sexy woord. 935 00:45:44,850 --> 00:45:47,630 Het betekent alleen dat het de versleutelde versie van de platte tekst. 936 00:45:47,630 --> 00:45:52,570 En alleen als je dat dezelfde geheime, 13 of min 13, bent u in staat om 937 00:45:52,570 --> 00:45:54,970 decoderen van een bericht als dat. 938 00:45:54,970 --> 00:45:57,770 >> Dus in Probleem Set Two, een van de dingen je als je doen in de Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, moet u code schrijven om kraken deze wachtwoorden, uitzoeken 940 00:46:01,860 --> 00:46:05,170 wat ze waren en hoe ze waren gecodeerd, hoewel we geven je een beetje 941 00:46:05,170 --> 00:46:06,460 van begeleiding langs de weg. 942 00:46:06,460 --> 00:46:09,320 In de Standard Edition, introduceren we een paar cijfers, encryptie 943 00:46:09,320 --> 00:46:12,400 mechanismen, een Caesar, een zogenaamde riep Vigenere, die nog 944 00:46:12,400 --> 00:46:16,100 rotatie cijfers waarbij A wordt iets, B wordt iets, maar 945 00:46:16,100 --> 00:46:18,820 je moet het programmatisch doen omdat er inderdaad een geheim zal zijn 946 00:46:18,820 --> 00:46:22,840 belangrijkste betrokkenen die typisch is een aantal of een trefwoord dat alleen de 947 00:46:22,840 --> 00:46:26,420 verzender en de ontvanger van deze berichten moeten begrijpen. 948 00:46:26,420 --> 00:46:28,660 >> Nu, dit heeft eigenlijk incarnaties in de echte wereld. 949 00:46:28,660 --> 00:46:32,910 Dit is bijvoorbeeld kleine wees Annie's geheime decoder ring, en u 950 00:46:32,910 --> 00:46:35,180 daadwerkelijk kan implementeren deze rotatie cijfers - 951 00:46:35,180 --> 00:46:37,930 Een wordt iets, B wordt iets - met een paar wielen, 952 00:46:37,930 --> 00:46:40,840 een aan de buitenkant, een aan de binnenkant zodanig dat als je het wiel draaien of 953 00:46:40,840 --> 00:46:44,170 de ring, kun je eigenlijk line-up van de brieven met verschillende brieven, 954 00:46:44,170 --> 00:46:45,430 het krijgen van een geheime code. 955 00:46:45,430 --> 00:46:48,110 En zo als de cliffhanger voor vandaag, wat ik dacht dat ik zou doen is een beetje 956 00:46:48,110 --> 00:46:52,170 throwback dat als je de TV aanzet op 24 december, kunt u kijken naar de 957 00:46:52,170 --> 00:46:55,390 film vervelens toe voor 24 uur in een rij. 958 00:46:55,390 --> 00:47:06,030 Maar voor vandaag, ik zal het hier openstellen en geven ons slechts twee minuten van een 959 00:47:06,030 --> 00:47:13,493 pedagogisch verantwoorde Kerstverhaal met een kereltje genaamd Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [VIDEO AFSPELEN] 961 00:47:14,400 --> 00:47:17,420 >> -Laat het bekend om alles en iedereen die Ralph Parker wordt benoemd tot 962 00:47:17,420 --> 00:47:20,650 lid van de Little Orphan Annie geheim cirkel en is gerechtigd alle 963 00:47:20,650 --> 00:47:23,460 de eer en de voordelen voorkomende daarop. 964 00:47:23,460 --> 00:47:25,990 >> -Signed, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Medeondertekend, Pierre Andre in inkt. 966 00:47:30,100 --> 00:47:34,270 Eert en uitkeringen reeds op de leeftijd van negen. 967 00:47:34,270 --> 00:47:39,440 >> [SCHREEUWEN OP RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Kom op, laten we aan de slag gaan. 969 00:47:40,770 --> 00:47:44,965 Ik wil niet al die jazz over behoefte smokkelaars en piraten. 970 00:47:44,965 --> 00:47:48,270 >> -Luister morgenavond voor de sluiten avontuur van de zwarte 971 00:47:48,270 --> 00:47:49,650 piratenschip. 972 00:47:49,650 --> 00:47:53,320 Nu, is het tijd voor Annie's Secret Boodschap voor je leden 973 00:47:53,320 --> 00:47:55,720 van de geheime cirkel. 974 00:47:55,720 --> 00:47:56,580 Vergeet niet, kinderen. 975 00:47:56,580 --> 00:48:01,720 Alleen leden van Annie's Secret Circle kan geheime boodschap Annie's te decoderen. 976 00:48:01,720 --> 00:48:05,872 Vergeet niet, Annie is afhankelijk van je. 977 00:48:05,872 --> 00:48:08,670 Stel je pinnen naar B2. 978 00:48:08,670 --> 00:48:11,000 Hier is de boodschap. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Ik ben in mijn eerste geheime vergadering. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre was in grote stem vanavond. 983 00:48:21,650 --> 00:48:24,830 Ik kon het bericht dat vanavond vertellen was echt belangrijk. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 Dat is een boodschap van Annie zichzelf. 986 00:48:28,540 --> 00:48:30,086 Vergeet niet, niemand niet vertellen. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Seconden later, ik ben in de enige kamer in het huis waar een jongen van negen 989 00:48:38,710 --> 00:48:42,668 kon zitten in privacy en decoderen. 990 00:48:42,668 --> 00:48:47,628 Aha, B. ging ik naar de volgende. 991 00:48:47,628 --> 00:48:53,060 E. Het eerste woord is "te zijn." S. Het werd makkelijker komen nu. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Dat is R. 994 00:48:55,940 --> 00:48:56,900 >> -Kom op, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Ik moet gaan. 996 00:48:57,860 --> 00:48:59,780 >> -Ik ben zo beneden, Ma. 997 00:48:59,780 --> 00:49:01,030 Jeetje. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Zorg dat. 1000 00:49:08,220 --> 00:49:09,500 Zorg ervoor dat u wat? 1001 00:49:09,500 --> 00:49:11,660 Wat was Little Orphan Annie probeert te zeggen? 1002 00:49:11,660 --> 00:49:12,844 Zorg ervoor dat u wat? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, heeft Randy moet gaan. 1004 00:49:14,732 --> 00:49:16,148 Wil je alsjeblieft naar buiten komen? 1005 00:49:16,148 --> 00:49:17,092 >> -Oke, Ma. 1006 00:49:17,092 --> 00:49:18,510 Ik kom er zo aan. 1007 00:49:18,510 --> 00:49:20,270 >> -Ik was dichter bij nu. 1008 00:49:20,270 --> 00:49:21,823 De spanning was verschrikkelijk. 1009 00:49:21,823 --> 00:49:23,045 Wat was het? 1010 00:49:23,045 --> 00:49:26,510 Het lot van de planeet kan hangen in de balans. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, Randy's gotta go. 1012 00:49:28,985 --> 00:49:32,680 >> Rechts uit-Ik voor luid schreeuwen. 1013 00:49:32,680 --> 00:49:33,956 >> -We zijn er bijna. 1014 00:49:33,956 --> 00:49:35,140 Mijn vingers vlogen. 1015 00:49:35,140 --> 00:49:36,880 Mijn geest was een stalen val. 1016 00:49:36,880 --> 00:49:38,010 Elke porie getrild. 1017 00:49:38,010 --> 00:49:39,878 Het was bijna duidelijk. 1018 00:49:39,878 --> 00:49:43,210 Ja, ja, ja, ja, ja. 1019 00:49:43,210 --> 00:49:49,030 >> -Zorg ervoor dat u uw Ovaltine drinken. 1020 00:49:49,030 --> 00:49:50,280 Ovaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 Een mollig commercieel? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Klootzak. 1025 00:50:00,694 --> 00:50:01,900 >> [END VIDEO AFSPELEN] 1026 00:50:01,900 --> 00:50:04,260 >> LUIDSPREKER 1: Dit is CS50, en dat zal Probleemverzameling Twee zijn. 1027 00:50:04,260 --> 00:50:06,305 Zie je volgende week. 1028 00:50:06,305 --> 00:50:08,800 >> SPEAKER 2: Bij de volgende CS50, dit gebeurt. 1029 00:50:08,800 --> 00:50:11,060 >> LUIDSPREKER 1: Dus een onderwerp hebben we niet bekeken dusver is 1030 00:50:11,060 --> 00:50:12,220 die van functie pointers. 1031 00:50:12,220 --> 00:50:14,540 Nu, een functie pointer is gewoon het adres van een openbaar 1032 00:50:14,540 --> 00:50:17,000 functie, maar net als - 1033 00:50:17,000 --> 00:50:18,250 zoon van een - 1034 00:50:18,250 --> 00:50:19,670