1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Hoofdstuk 4] [minder comfortabel] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Dit is CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Oke, welkom terug te vinden in hoofdstuk. 5 00:00:10,000 --> 00:00:13,000 In paragraaf van deze week gaan we een paar dingen te doen. 6 00:00:13,000 --> 00:00:17,000 We gaan eerst recap Probleem Set 2, 7 00:00:17,000 --> 00:00:20,000 dat is de Caesar en Vigenère probleem set. 8 00:00:20,000 --> 00:00:23,000 En dan gaan we duiken in Quiz 0 beoordeling 9 00:00:23,000 --> 00:00:26,000 en breng een beetje tijd recapping wat we hebben gesproken over 10 00:00:26,000 --> 00:00:30,000 in elk van de lezingen tot nu toe, en we doen ook een paar problemen 11 00:00:30,000 --> 00:00:32,000 van vorig jaar quizzen. 12 00:00:32,000 --> 00:00:36,000 Op die manier jullie een goede manier voor te bereiden voor. 13 00:00:36,000 --> 00:00:40,000 >> Om te beginnen, ik heb opgestart een paar goede oplossingen 14 00:00:40,000 --> 00:00:45,000 voor het vorige probleem set, Probleem Set 2, in deze ruimte. 15 00:00:45,000 --> 00:00:48,000 Als jullie allemaal raken deze link, 16 00:00:48,000 --> 00:00:53,000 en als je op mijn naam en klik op mijn eerste herziening 17 00:00:53,000 --> 00:00:56,000 je zult zien caesar.c, dat is precies wat ik ben op zoek naar. 18 00:00:56,000 --> 00:01:00,000 Laten we praten over dit heel snel. 19 00:01:00,000 --> 00:01:02,000 Dit is slechts een monsteroplossing. 20 00:01:02,000 --> 00:01:05,000 Dit is niet noodzakelijkerwijs de perfecte oplossing. 21 00:01:05,000 --> 00:01:08,000 Er zijn verschillende manieren om dit te schrijven, 22 00:01:08,000 --> 00:01:10,000 maar er zijn een paar dingen die ik wilde benadrukken 23 00:01:10,000 --> 00:01:13,000 die ik zag toen ik de indeling, veel voorkomende fouten die ik denk 24 00:01:13,000 --> 00:01:18,000 deze oplossing heeft een zeer goed werk van handling. 25 00:01:18,000 --> 00:01:22,000 >> De eerste is, dat iets header geplaatst op de top. 26 00:01:22,000 --> 00:01:25,000 Op de lijnen 1 tot en met 7 ziet u de details, 27 00:01:25,000 --> 00:01:28,000 wat precies dit programma aan het doen is. 28 00:01:28,000 --> 00:01:32,000 Een goede standaard praktijk wanneer je C-code schrijven 29 00:01:32,000 --> 00:01:35,000 ongeacht of uw programma is opgenomen in een bestand of 30 00:01:35,000 --> 00:01:38,000 of het nu verdeeld over meerdere bestanden is om een ​​soort van 31 00:01:38,000 --> 00:01:40,000 oriënteren geplaatst op de top. 32 00:01:40,000 --> 00:01:43,000 Dit is ook voor mensen die naar buiten gaan en code schrijven in de echte wereld. 33 00:01:43,000 --> 00:01:47,000 Dit is waar ze zetten copyright informatie. 34 00:01:47,000 --> 00:01:50,000 Hieronder staan ​​de # omvat. 35 00:01:50,000 --> 00:01:55,000 Op lijn 16 is er dit # define, die we zullen terugkomen om in slechts een beetje. 36 00:01:55,000 --> 00:01:59,000 En dan als de functie begint, zodra de belangrijkste start, 37 00:01:59,000 --> 00:02:03,000 omdat dit programma is allemaal in een enkele functie 38 00:02:03,000 --> 00:02:09,000 het eerste wat er gebeurt en dit is zeer idiomatisch en typisch voor een C-programma 39 00:02:09,000 --> 00:02:14,000 dat duurt in de command line argumenten-is dat het onmiddellijk controleert 40 00:02:14,000 --> 00:02:18,000 >> voor het argument tellen, argc. 41 00:02:18,000 --> 00:02:24,000 Hier zien we dat dit programma is 2 argumenten precies verwacht. 42 00:02:24,000 --> 00:02:27,000 Vergeet niet er is dat eerste argument is dat de special one 43 00:02:27,000 --> 00:02:29,000 dat is altijd de naam van het programma dat wordt uitgevoerd, 44 00:02:29,000 --> 00:02:31,000 de naam van het uitvoerbare bestand. 45 00:02:31,000 --> 00:02:36,000 En dus wat dit doet is het voorkomt dat de gebruiker van het uitvoeren van het programma 46 00:02:36,000 --> 00:02:42,000 met meer of minder argumenten. 47 00:02:42,000 --> 00:02:44,000 De reden dat we willen om weg te controleren op dit recht is omdat 48 00:02:44,000 --> 00:02:52,000 we kunnen niet echt toegang tot deze argv serie hier betrouwbaar 49 00:02:52,000 --> 00:02:55,000 totdat we gecontroleerd om te zien hoe groot het is. 50 00:02:55,000 --> 00:02:58,000 >> Een van de gemeenschappelijke fouten die ik zag was mensen zouden meteen gaan in 51 00:02:58,000 --> 00:03:01,000 en grijper argv [1]. 52 00:03:01,000 --> 00:03:06,000 Ze zouden grijpen de sleutel argument uit de array en doe de een tot en met i controleren op het, 53 00:03:06,000 --> 00:03:11,000 en ze doen testen van argc en de volgende test 54 00:03:11,000 --> 00:03:16,000 of het eerste argument inderdaad een geheel getal tegelijkertijd, 55 00:03:16,000 --> 00:03:20,000 en dat is niet omdat werken in het geval dat er geen leveringen van argumenten 56 00:03:20,000 --> 00:03:26,000 je zult grijpen een argument dat er niet is of een poging om een ​​die er niet is te grijpen. 57 00:03:26,000 --> 00:03:29,000 >> De andere grote ding dat je zou moeten opvallen is dat 58 00:03:29,000 --> 00:03:32,000 u altijd wilt afdrukken een soort van nuttige foutmelding 59 00:03:32,000 --> 00:03:34,000 De gebruiker moet oriënteren. 60 00:03:34,000 --> 00:03:37,000 Ik weet zeker dat je hebt alle programma's uitvoeren waarin alle van een plotselinge het crasht, 61 00:03:37,000 --> 00:03:41,000 en je krijgt deze belachelijke kleine dialoogvenster dat verschijnt en zegt 62 00:03:41,000 --> 00:03:44,000 iets vreselijk cryptische en misschien geeft u een foutcode of iets dergelijks 63 00:03:44,000 --> 00:03:47,000 dat heeft geen zin. 64 00:03:47,000 --> 00:03:50,000 Dit is waar je echt iets wilt behulpzaam te bieden 65 00:03:50,000 --> 00:03:54,000 en gericht op de gebruiker, zodat wanneer ze het uit te voeren gaan ze "Oh," gezicht palm. 66 00:03:54,000 --> 00:03:58,000 "Ik weet precies wat te doen. Ik weet hoe dit op te lossen." 67 00:03:58,000 --> 00:04:01,000 >> Als u niet wilt afdrukken een bericht, dan moet je eigenlijk omhoog beëindigen 68 00:04:01,000 --> 00:04:04,000 het verlaten van de gebruiker om te gaan onderzoeken uw broncode 69 00:04:04,000 --> 00:04:07,000 om erachter te komen wat er mis ging. 70 00:04:07,000 --> 00:04:11,000 Er zijn ook een aantal keer dat u gebruik maken van verschillende foutcodes. 71 00:04:11,000 --> 00:04:14,000 Hier zijn we net gebruikt een te zeggen dat er is een fout opgetreden, 72 00:04:14,000 --> 00:04:16,000 Er is een fout opgetreden, er is een fout opgetreden. 73 00:04:16,000 --> 00:04:20,000 Grotere programma's, vaak programma's die worden aangeroepen door andere programma's, 74 00:04:20,000 --> 00:04:25,000 zal terugkeren een soort van speciale foutcodes in verschillende scenario's 75 00:04:25,000 --> 00:04:28,000 programmatisch communiceren wat je anders zou 76 00:04:28,000 --> 00:04:32,000 gewoon gebruik maken van een mooi Engels boodschap voor. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Omdat we werken naar beneden, kun je zien dat we trek de sleutel uit. 79 00:04:37,000 --> 00:04:40,000 Wij testen om te zien of de sleutel past. 80 00:04:40,000 --> 00:04:42,000 We krijgen een bericht van de gebruiker. 81 00:04:42,000 --> 00:04:46,000 De reden dat we het doen in dit te doen terwijl loop-en dit is iets dat wij doen 82 00:04:46,000 --> 00:04:50,000 in een klein beetje, maar het blijkt dat als je typt controle D 83 00:04:50,000 --> 00:04:54,000 als je dat GetString prompt op de terminal 84 00:04:54,000 --> 00:04:59,000 wat dat eigenlijk doet is het stuurt een speciaal teken 85 00:04:59,000 --> 00:05:01,000 het programma. 86 00:05:01,000 --> 00:05:05,000 Het heet de ELF of het einde van het bestand karakter. 87 00:05:05,000 --> 00:05:08,000 En in dat geval, zal onze boodschap string zijn null, 88 00:05:08,000 --> 00:05:14,000 dus dit was niet iets wat we voor ingecheckt het probleem zich. 89 00:05:14,000 --> 00:05:17,000 >> Maar als we verder gaan, nu we begonnen te praten over pointers 90 00:05:17,000 --> 00:05:21,000 en dynamische geheugentoewijzing op de heap, 91 00:05:21,000 --> 00:05:25,000 controleren op null wanneer u een functie die misschien 92 00:05:25,000 --> 00:05:30,000 terug null als een waarde is iets dat je wilt krijgen in de gewoonte van het doen. 93 00:05:30,000 --> 00:05:33,000 Dit is hier voornamelijk ter illustratie. 94 00:05:33,000 --> 00:05:36,000 Maar als je dat doet zie GetString in de toekomst, 95 00:05:36,000 --> 00:05:41,000 dus vanaf Probleem Set 4 op, wil je dit in gedachten te houden. 96 00:05:41,000 --> 00:05:44,000 Nogmaals, dit is geen probleem voor Probleem Set 3 ofwel omdat we hadden niet onder het nog niet. 97 00:05:44,000 --> 00:05:53,000 Tot slot komen we bij dit deel, waar we naar de belangrijkste encryptie lus, 98 00:05:53,000 --> 00:05:57,000 en er zijn een paar dingen aan de hand. 99 00:05:57,000 --> 00:06:02,000 Ten eerste, we itereren over het hele bericht string zelf. 100 00:06:02,000 --> 00:06:07,000 Hier hebben we hielden de strlen oproep in de staat, 101 00:06:07,000 --> 00:06:12,000 die een aantal van u hebben erop gewezen is niet een geweldige manier om te gaan. 102 00:06:12,000 --> 00:06:15,000 Het blijkt in dit geval is het niet ook geweldig, 103 00:06:15,000 --> 00:06:20,000 deels omdat we het wijzigen van de inhoud van het bericht zelf 104 00:06:20,000 --> 00:06:27,000 in de for-lus, dus als we een bericht dat is 10 tekens lang zijn, 105 00:06:27,000 --> 00:06:32,000 de eerste keer dat we beginnen met dat voor lus strlen wat zal terugkeren? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Maar als we dan bericht te wijzigen, zeggen dat we te wijzigen zijn 5de karakter, 108 00:06:40,000 --> 00:06:46,000 en we gooien in een \ 0 personage in de 5e positie, 109 00:06:46,000 --> 00:06:49,000 op een volgende iteratie strlen (bericht) keert niet terug wat het deed 110 00:06:49,000 --> 00:06:52,000 de allereerste keer dat we herhaald, 111 00:06:52,000 --> 00:06:56,000 maar het zal in plaats daarvan terug 5 omdat we gooide in dat null-terminator, 112 00:06:56,000 --> 00:06:59,000 en de snaar lengte wordt weergegeven 113 00:06:59,000 --> 00:07:03,000 door de positie van die \ 0. 114 00:07:03,000 --> 00:07:09,000 In dit geval, is dit een geweldige manier om te gaan omdat we wijzigen het op zijn plaats. 115 00:07:09,000 --> 00:07:13,000 Maar je merkt dat dit eigenlijk verrassend eenvoudig te coderen 116 00:07:13,000 --> 00:07:16,000 als je kunt krijgen de wiskunde correct. 117 00:07:16,000 --> 00:07:19,000 Het enige dat nodig is, is het al dan niet de letter controleren of u op zoek bent naar 118 00:07:19,000 --> 00:07:21,000 is hoofdletters of kleine letters. 119 00:07:21,000 --> 00:07:24,000 >> De reden dat we alleen maar te controleren op dat, en we hoeven niet te controleren op 120 00:07:24,000 --> 00:07:27,000 het is alfa geval omdat 121 00:07:27,000 --> 00:07:30,000 als een teken een hoofdletter of als het kleine letters 122 00:07:30,000 --> 00:07:33,000 dan is het zeker een alfabetisch teken, 123 00:07:33,000 --> 00:07:38,000 omdat we niet over hoofd-en kleine cijfers. 124 00:07:38,000 --> 00:07:41,000 Het andere wat we doen-en dat is een beetje lastig- 125 00:07:41,000 --> 00:07:45,000 is die we hebben aangepast de standaard Caesar cipher formule 126 00:07:45,000 --> 00:07:49,000 die wij in het probleem set specificatie. 127 00:07:49,000 --> 00:07:52,000 Wat is hier anders is dat we afgetrokken 128 00:07:52,000 --> 00:07:58,000 in het geval hoofdletters hoofdletter A, en dan hebben we toegevoegd hoofdletter A 129 00:07:58,000 --> 00:08:02,000 terug in eind. 130 00:08:02,000 --> 00:08:05,000 >> Ik ken een paar van jullie hebben dit gedaan in de code. 131 00:08:05,000 --> 00:08:09,000 Heeft een van jullie dit doen in uw inzendingen? 132 00:08:09,000 --> 00:08:13,000 Jij hebt dit gedaan. Kunt u uitleggen wat dit doet, Sahb? 133 00:08:13,000 --> 00:08:18,000 Door het aftrekken van het uit, want je hebt een mod direct na het, 134 00:08:18,000 --> 00:08:21,000 je moet het nemen, zodat op die manier krijg je [hoesten] positie. 135 00:08:21,000 --> 00:08:25,000 En vervolgens door het toe te voegen later terug kunt verschuiven over degene die je wilde. 136 00:08:25,000 --> 00:08:27,000 Ja, precies. 137 00:08:27,000 --> 00:08:32,000 Wat Sahb zei was dat als we willen toevoegen 138 00:08:32,000 --> 00:08:36,000 onze boodschap en onze toets samen 139 00:08:36,000 --> 00:08:42,000 en dan mod dat mod dat door NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 als we onze boodschap niet eerst te schalen naar de juiste 0 tot 25 range, 141 00:08:50,000 --> 00:08:54,000 dan kunnen we misschien uiteindelijk het krijgen van een echt raar nummer 142 00:08:54,000 --> 00:08:59,000 omdat de waarden die we kijken naar als we kijken naar bericht [i], 143 00:08:59,000 --> 00:09:03,000 als we kijken naar de i-karakter van onze plain-text-bericht, 144 00:09:03,000 --> 00:09:08,000 is een waarde ergens in deze 65-122 serie 145 00:09:08,000 --> 00:09:13,000 gebaseerd op de ASCII waarden voor hoofdletters A t kleine z. 146 00:09:13,000 --> 00:09:18,000 En dus toen we mod door 26 of door NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 want dat was onze # define in de rechterbovenhoek hier, 148 00:09:23,000 --> 00:09:28,000 dat gaat ons een waarde die in de 0-25 serie, 149 00:09:28,000 --> 00:09:30,000 en we moeten een manier vinden om vervolgens opgeschaald dat een back-up 150 00:09:30,000 --> 00:09:32,000 en krijg het in de juiste ASCII-bereik. 151 00:09:32,000 --> 00:09:36,000 De eenvoudigste manier om dat te doen is om gewoon alles op schaal 152 00:09:36,000 --> 00:09:39,000 in het bereik 0 tot 25 om te beginnen 153 00:09:39,000 --> 00:09:43,000 en weer verschuiven alles aan het eind. 154 00:09:43,000 --> 00:09:46,000 >> Een andere veel voorkomende fout die ik zag mensen tegenkomen is dat 155 00:09:46,000 --> 00:09:50,000 als u niet daadwerkelijk te doen scaling meteen 156 00:09:50,000 --> 00:09:53,000 en u bij elkaar optelt en toets en je ze toevoegt, zeg, 157 00:09:53,000 --> 00:09:58,000 in een char variabele, het probleem met die 158 00:09:58,000 --> 00:10:01,000 is sinds bericht [i] is een relatief groot aantal te beginnen- 159 00:10:01,000 --> 00:10:05,000 herinner me het is ten minste 65 als het een hoofdletter- 160 00:10:05,000 --> 00:10:09,000 als u een grote sleutel, zeg, zoiets als 100, 161 00:10:09,000 --> 00:10:13,000 en u bij elkaar optelt die 2 in een signed char je gaat een overloop te krijgen. 162 00:10:13,000 --> 00:10:17,000 Je gaat naar een waarde die groter is dan 127 te krijgen, 163 00:10:17,000 --> 00:10:22,000 dat is de grootste waarde die een char variabele kan opslaan. 164 00:10:22,000 --> 00:10:26,000 Nogmaals, dat is waarom je dat zou willen dat soort dingen om mee te beginnen doen. 165 00:10:26,000 --> 00:10:29,000 Sommige mensen werd dat geval door het doen van een of ander en het testen van 166 00:10:29,000 --> 00:10:33,000 om te zien of het zou overstromen voor u dit doet, 167 00:10:33,000 --> 00:10:36,000 maar op deze manier krijgt rond dat. 168 00:10:36,000 --> 00:10:40,000 En dan in deze oplossing hebben we uitgeprint de hele reeks aan het einde. 169 00:10:40,000 --> 00:10:45,000 Andere mensen uitgeprint een teken tegelijk. Beide zijn geweldig. 170 00:10:45,000 --> 00:10:51,000 Op dit punt, hebben jullie nog vragen, opmerkingen over dit? 171 00:10:51,000 --> 00:10:56,000 Dingen die je wilt, dingen die je niet vinden? 172 00:10:56,000 --> 00:10:58,000 >> Ik had een vraag. 173 00:10:58,000 --> 00:11:01,000 Misschien heb ik het gemist tijdens uw uitleg, maar hoe werkt dit programma 174 00:11:01,000 --> 00:11:07,000 overslaan ruimtes voor het aansluiten van de sleutel van de lengte van de tekst? 175 00:11:07,000 --> 00:11:10,000 Dit is gewoon Caesar cipher. >> Oh, sorry, ja. 176 00:11:10,000 --> 00:11:13,000 Ja, we zien. 177 00:11:13,000 --> 00:11:16,000 In de Caesar cipher kregen we rond die, omdat 178 00:11:16,000 --> 00:11:18,000 we alleen omgedraaid karakters. 179 00:11:18,000 --> 00:11:27,000 We hebben alleen gedraaid als ze waren hoofdletters of kleine letters. 180 00:11:27,000 --> 00:11:32,000 Jullie een goed gevoel over dit? 181 00:11:32,000 --> 00:11:34,000 Voel je vrij om dit huis te kopiëren, neem het, 182 00:11:34,000 --> 00:11:37,000 Vergelijk het met wat jullie geschreven. 183 00:11:37,000 --> 00:11:42,000 Zeker te voelen vrij om te sturen vragen over. 184 00:11:42,000 --> 00:11:46,000 En nogmaals, beseffen dat het doel hier met uw probleem stelt 185 00:11:46,000 --> 00:11:50,000 is niet om jullie een perfecte code voor uw probleem sets te schrijven. 186 00:11:50,000 --> 00:11:57,000 Het is een leerzame ervaring. Ja. 187 00:11:57,000 --> 00:12:01,000 >> Terug naar de do while lus, als het gelijk is aan nul, 188 00:12:01,000 --> 00:12:06,000 dus null gewoon niets betekent, maar ze druk op enter? 189 00:12:06,000 --> 00:12:12,000 Null is een speciale pointer-waarde, 190 00:12:12,000 --> 00:12:17,000 en we gebruiken null wanneer we willen zeggen 191 00:12:17,000 --> 00:12:23,000 we een pointer variabele die wijst niets. 192 00:12:23,000 --> 00:12:28,000 En zo typisch dat betekent dat deze variabele, dit bericht variabele 193 00:12:28,000 --> 00:12:35,000 is leeg, en hier, omdat we met behulp van de CS50 speciale string type, 194 00:12:35,000 --> 00:12:37,000 wat is de CS50 string type? 195 00:12:37,000 --> 00:12:42,000 Heb je gezien wat het is als David trok het kap in college? 196 00:12:42,000 --> 00:12:44,000 Het is een funky, het is een pointer, toch? 197 00:12:44,000 --> 00:12:48,000 Oke, ja. >> Het is een char *. 198 00:12:48,000 --> 00:12:52,000 En dus we echt kunnen vervangen deze 199 00:12:52,000 --> 00:12:56,000 hier bij char * bericht, 200 00:12:56,000 --> 00:13:04,000 en dus de GetString functie, als het niet met goed gevolg een string te krijgen van de gebruiker, 201 00:13:04,000 --> 00:13:08,000 kan niet ontleden een string, en een geval waarin het niet kunnen ontleden een string 202 00:13:08,000 --> 00:13:11,000 is als de gebruiker typt het einde van het bestand karakter, de controle D, 203 00:13:11,000 --> 00:13:17,000 dat is niet iets wat je normaal gesproken doen, maar als dat gebeurt 204 00:13:17,000 --> 00:13:20,000 dan is de functie zal terugkeren dit null-waarde als een manier om te zeggen 205 00:13:20,000 --> 00:13:23,000 "He, heb ik niet een string." 206 00:13:23,000 --> 00:13:27,000 Wat zou er gebeuren als we niet plaatsen message = null, 207 00:13:27,000 --> 00:13:30,000 dat is iets dat we nog niet aan het doen? 208 00:13:30,000 --> 00:13:32,000 Waarom zou dat hier een probleem? 209 00:13:32,000 --> 00:13:38,000 Omdat ik weet dat we een beetje gepraat in lezing over het geheugen lekken. 210 00:13:38,000 --> 00:13:42,000 Ja, laten we dat doen, en laten we zien wat er gebeurt. 211 00:13:42,000 --> 00:13:44,000 >> Basil's vraag was wat er gebeurt als we niet echt 212 00:13:44,000 --> 00:13:48,000 Deze message = null test? 213 00:13:48,000 --> 00:13:51,000 Laten we naar boven naar de top. 214 00:13:51,000 --> 00:13:53,000 Jullie kunnen dit uitgecommentarieerd. 215 00:13:53,000 --> 00:13:55,000 Eigenlijk, ik sla het op in een herziening. 216 00:13:55,000 --> 00:13:58,000 Dit Wijziging 3 zijn. 217 00:13:58,000 --> 00:14:02,000 Wat je moet doen om dit programma uit te voeren is dat je zult moeten dit vistuig pictogram hier, 218 00:14:02,000 --> 00:14:04,000 en je moet een argument aan toe te voegen. 219 00:14:04,000 --> 00:14:10,000 Je moet geven de sleutel argument omdat we langs wilt op een opdrachtregel argument. 220 00:14:10,000 --> 00:14:13,000 Hier ga ik geef het de nummer 3. Ik hou van 3. 221 00:14:13,000 --> 00:14:19,000 Nu zoomen weer uit, het uitvoeren van het programma. 222 00:14:19,000 --> 00:14:24,000 Het draait, samenstellen, bouwen. 223 00:14:24,000 --> 00:14:27,000 Daar gaan we. Het is klaar om te worden gevraagd. 224 00:14:27,000 --> 00:14:33,000 Als ik in iets typ als hello-waar ging die verder gaan? 225 00:14:33,000 --> 00:14:38,000 Oh, mijn programma duurde te lang om te draaien. Ik was jawing te lang. 226 00:14:38,000 --> 00:14:40,000 Hier gaat. 227 00:14:40,000 --> 00:14:43,000 Nu typ ik in hello. 228 00:14:43,000 --> 00:14:46,000 We zien dat het een goed versleutelt. 229 00:14:46,000 --> 00:14:52,000 Wat gebeurt er nu als we prompt GetString aan null terug te keren? 230 00:14:52,000 --> 00:14:57,000 Vergeet niet, ik zei dat we dat deden door het indrukken van controle D op hetzelfde moment. 231 00:14:57,000 --> 00:14:59,000 Ik zal hier omhoog. We zullen weer draaien. 232 00:14:59,000 --> 00:15:01,000 Building. Daar gaat hij. 233 00:15:01,000 --> 00:15:04,000 Nu als ik controle D geraakt 234 00:15:04,000 --> 00:15:12,000 Ik heb deze lijn die zegt opt/sandbox50/bin/run.sh, Segmentation fault. 235 00:15:12,000 --> 00:15:15,000 Hebben jullie dat eerder gezien? 236 00:15:15,000 --> 00:15:17,000 >> [Student] Waarom is er geen >> Sorry? 237 00:15:17,000 --> 00:15:20,000 [Student] Waarom is er geen core dump in dit geval? 238 00:15:20,000 --> 00:15:26,000 De kern dump is-de vraag is waarom is er geen core dump hier? 239 00:15:26,000 --> 00:15:29,000 De vraag is dat er ook mag zijn, maar de core dump is een bestand 240 00:15:29,000 --> 00:15:31,000 dat wordt opgeslagen op de harde schijf. 241 00:15:31,000 --> 00:15:34,000 In dit geval hebben we uitgeschakeld core dumps 242 00:15:34,000 --> 00:15:37,000 op de vlucht server, zodat we niet mensen hebben seg vastgelopen 243 00:15:37,000 --> 00:15:40,000 en het opbouwen van ton van core dumps. 244 00:15:40,000 --> 00:15:46,000 Maar u kunt krijgen een. 245 00:15:46,000 --> 00:15:48,000 Core dumps zijn het soort dingen die je kunt vaak uit te schakelen, 246 00:15:48,000 --> 00:15:52,000 en soms moet je doen. 247 00:15:52,000 --> 00:15:55,000 De segmentatie fout, om je vraag te beantwoorden, Basil, 248 00:15:55,000 --> 00:16:00,000 zegt dat we geprobeerd om een ​​pointer te openen 249 00:16:00,000 --> 00:16:05,000 dat niet is ingesteld om te wijzen op wat dan ook. 250 00:16:05,000 --> 00:16:09,000 Vergeet niet Binky in de video waarop Binky probeert te 251 00:16:09,000 --> 00:16:12,000 ga toegang tot een pointer die niet is te wijzen op iets? 252 00:16:12,000 --> 00:16:16,000 In dit geval denk ik technisch de wijzer wijst naar iets. 253 00:16:16,000 --> 00:16:20,000 Het is te wijzen op null, dat is technisch gezien 0, 254 00:16:20,000 --> 00:16:25,000 maar wordt gedefinieerd als een segment dat niet toegankelijk 255 00:16:25,000 --> 00:16:28,000 door uw programma, zodat je een segmentation fault 256 00:16:28,000 --> 00:16:31,000 omdat je niet de toegang tot het geheugen dat is in een geldige segment 257 00:16:31,000 --> 00:16:38,000 zoals de heap-segment of de stapel segment of de gegevens segment. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Nog vragen over Caesar? 260 00:16:48,000 --> 00:16:51,000 >> Laten we verder gaan. Laten we eens kijken naar Revisie 2 echt snel. 261 00:16:51,000 --> 00:17:00,000 Dat is Vigenère. 262 00:17:00,000 --> 00:17:04,000 Hier in Vigenère 263 00:17:04,000 --> 00:17:06,000 lopen we via deze vrij snel, want, nogmaals, 264 00:17:06,000 --> 00:17:10,000 Vigenère en Caesar lijken veel op elkaar. 265 00:17:10,000 --> 00:17:12,000 Header opmerking is voor, 266 00:17:12,000 --> 00:17:17,000 Definiëren # is voordat om te voorkomen dat het gebruik van deze magische getallen. 267 00:17:17,000 --> 00:17:21,000 Het leuke is dat we wilden gaan naar 268 00:17:21,000 --> 00:17:23,000 een ander alfabet of iets dergelijks. 269 00:17:23,000 --> 00:17:26,000 In plaats van met de hand gaan alle 26's in de code te wijzigen 270 00:17:26,000 --> 00:17:30,000 We kunnen dit wijzigen naar 27 of vallen naar beneden 271 00:17:30,000 --> 00:17:34,000 als we met behulp van verschillende alfabetten, verschillende talen. 272 00:17:34,000 --> 00:17:38,000 Nogmaals, we hebben deze controle van het argument tellen, 273 00:17:38,000 --> 00:17:42,000 en echt je kunt bijna zien dit als een sjabloon. 274 00:17:42,000 --> 00:17:46,000 Vrijwel elk programma dat u schrijft moet- 275 00:17:46,000 --> 00:17:50,000 als het duurt opdrachtregelargumenten-enkele opeenvolging van lijnen 276 00:17:50,000 --> 00:17:55,000 dat luidt als volgt aan het begin. 277 00:17:55,000 --> 00:17:59,000 Dat is een van de eerste geestelijke gezondheid tests die u wilt doen. 278 00:17:59,000 --> 00:18:03,000 >> Hier is wat we deden was dat we er voor gezorgd dat 279 00:18:03,000 --> 00:18:06,000 het sleutelwoord geldig was, en dat was de tweede controle die we deden. 280 00:18:06,000 --> 00:18:11,000 Let nog eens op dat we deze gescheiden van argc en 2. 281 00:18:11,000 --> 00:18:14,000 Merk op dat in dit geval een ding dat we moesten doen in plaats daarvan was 282 00:18:14,000 --> 00:18:18,000 van het gebruik van een tot en met i wilden we de hele reeks te valideren, 283 00:18:18,000 --> 00:18:21,000 en om te doen dat je eigenlijk moet gewenste teken te gaan voor teken 284 00:18:21,000 --> 00:18:23,000 de string. 285 00:18:23,000 --> 00:18:29,000 Er is geen goede manier om iets te doen op het 286 00:18:29,000 --> 00:18:31,000 want ook bijvoorbeeld een te i terug 0 287 00:18:31,000 --> 00:18:37,000 als het niet kan een geheel getal ontleden, zodat zelfs niet werkt. 288 00:18:37,000 --> 00:18:42,000 Nogmaals, leuke bericht dat de gebruiker precies wat er gebeurde. 289 00:18:42,000 --> 00:18:45,000 Dan hier, nogmaals, we ook instaan ​​voor het geval dat 290 00:18:45,000 --> 00:18:50,000 de gebruiker een controle D willekeurig karakter. 291 00:18:50,000 --> 00:18:54,000 >> En dan Charlotte had een vraag eerder over hoe wij erin slagen om ruimtes overslaan 292 00:18:54,000 --> 00:18:57,000 in onze string hier. 293 00:18:57,000 --> 00:19:00,000 Dit was een soort van vergelijkbaar met wat we hebben gedaan met de Myspace-programma 294 00:19:00,000 --> 00:19:04,000 dat we in sectie, en de manier waarop deze werkte 295 00:19:04,000 --> 00:19:08,000 is dat we het aantal brieven dat we hadden gezien bijgehouden. 296 00:19:08,000 --> 00:19:13,000 Als we liepen over het bericht string, en we wandelden we meer dan teken voor teken, 297 00:19:13,000 --> 00:19:16,000 We volgden de index als onderdeel van onze for-lus, en dan kunnen we ook bijgehouden 298 00:19:16,000 --> 00:19:21,000 het aantal letters, dus niet-speciale tekens, niet-cijfers, niet-blanco 299 00:19:21,000 --> 00:19:27,000 die we hadden gezien in de afzonderlijke variabele beschouwd. 300 00:19:27,000 --> 00:19:33,000 En deze oplossing wijzigt de toets 301 00:19:33,000 --> 00:19:41,000 tot een werkelijke sleutel integer te krijgen, en het doet dat op de vlieg, 302 00:19:41,000 --> 00:19:47,000 net voor het coderen gaat dan naar het eigenlijke bericht karakter. 303 00:19:47,000 --> 00:19:50,000 Er zijn een aantal oplossingen die waren perfect ook geweldig 304 00:19:50,000 --> 00:19:58,000 dat zou wijzigen omhoog bij het testen voor de geldigheid van de sleutel. 305 00:19:58,000 --> 00:20:01,000 In aanvulling op ervoor te zorgen dat het karakter en het zoekwoord 306 00:20:01,000 --> 00:20:05,000 werd een alfabetisch teken bleek ook dat in een integer 307 00:20:05,000 --> 00:20:13,000 in de 0-25 bereik om dan slaan met dat later doen in deze for-lus. 308 00:20:13,000 --> 00:20:18,000 Nogmaals, zie je hier dit is echt precies dezelfde code 309 00:20:18,000 --> 00:20:22,000 die we in Caesar op dit punt. 310 00:20:22,000 --> 00:20:25,000 Je precies hetzelfde te doen, zodat de echte truc is het uitzoeken 311 00:20:25,000 --> 00:20:30,000 hoe het zoekwoord te zetten in een geheel getal. 312 00:20:30,000 --> 00:20:35,000 >> Een ding dat we hier hebben, dat is een beetje dicht 313 00:20:35,000 --> 00:20:39,000 is dat we deze uitdrukking herhaald, ik denk dat je zou kunnen noemen, 314 00:20:39,000 --> 00:20:45,000 3 separate keer op lijnen 58, 59 en 61. 315 00:20:45,000 --> 00:20:52,000 Kan iemand uitleggen wat er precies deze zin doet? 316 00:20:52,000 --> 00:20:55,000 Het is de toegang tot een karakter, zoals je zei. 317 00:20:55,000 --> 00:20:59,000 Ja, het is [onverstaanbaar] een karakter in het zoekwoord, 318 00:20:59,000 --> 00:21:04,000 en dus is het aantal waargenomen letters omdat je alleen beweegt langs 319 00:21:04,000 --> 00:21:06,000 het trefwoord als je eenmaal hebt de brief gezien, 320 00:21:06,000 --> 00:21:10,000 zodat dat gaat om effectief te slaan ruimten en dat soort dingen. 321 00:21:10,000 --> 00:21:12,000 Ja, precies. 322 00:21:12,000 --> 00:21:16,000 En dan als je eenmaal hebt gezien het trefwoord leeg je gewoon mod zodat u zich weer rond. 323 00:21:16,000 --> 00:21:18,000 Precies. Dat is een perfecte uitleg. 324 00:21:18,000 --> 00:21:23,000 Wat Kevin zei is dat we willen index in het zoekwoord. 325 00:21:23,000 --> 00:21:28,000 We willen de num_letters_seen teken te krijgen, als je wil, 326 00:21:28,000 --> 00:21:32,000 maar als num_letters_seen dan de lengte van het zoekwoord, 327 00:21:32,000 --> 00:21:37,000 de manier waarop we terug in het juiste bereik is gebruiken we de mod operator 328 00:21:37,000 --> 00:21:40,000 effectief in wikkelen. 329 00:21:40,000 --> 00:21:43,000 Bijvoorbeeld, zoals in de korte, onze sleutelwoord is spek, 330 00:21:43,000 --> 00:21:46,000 en het is 5 letters lang. 331 00:21:46,000 --> 00:21:50,000 Maar we hebben gezien 6 letters in onze gewone tekst op dit punt 332 00:21:50,000 --> 00:21:52,000 en gecodeerde 6. 333 00:21:52,000 --> 00:21:57,000 We zullen uiteindelijk de toegang tot de num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 die 6, mod de lengte van het zoekwoord, 5, 335 00:22:00,000 --> 00:22:04,000 en dus krijgen we 1, en dus wat we doen is zullen we 336 00:22:04,000 --> 00:22:14,000 toegang tot het eerste teken binnenkant van onze zoekwoorden op dat punt. 337 00:22:14,000 --> 00:22:21,000 >> Oke, vragen over Vigenère 338 00:22:21,000 --> 00:22:26,000 voordat we verder gaan? 339 00:22:26,000 --> 00:22:31,000 Jullie een goed gevoel over dit? 340 00:22:31,000 --> 00:22:35,000 Cool, geweldig. 341 00:22:35,000 --> 00:22:38,000 Ik wil ervoor zorgen dat jullie de kans krijgen om de code te zien krijgt 342 00:22:38,000 --> 00:22:48,000 waarvan we denken dat ziet er goed uit en hebben de kans om te leren van. 343 00:22:48,000 --> 00:22:53,000 Dit zal de laatste we-ruimtes gebruiken voor het moment, 344 00:22:53,000 --> 00:22:59,000 en we gaan om de overgang nu, en ik ga naar cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 dus we kunnen doen een beetje quiz beoordeling. 346 00:23:06,000 --> 00:23:10,000 De beste manier denk ik dat gaan doen quiz beoordeling 347 00:23:10,000 --> 00:23:15,000 is om te komen tot deze Lezingen pagina, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 en onder elk van de week rubrieken, dus als ik kijk hier in week 0, 349 00:23:20,000 --> 00:23:27,000 Ik zie dat we een lijst met onderwerpen die we behandeld in week 0. 350 00:23:27,000 --> 00:23:31,000 >> Als een van deze onderwerpen lijken onbekend voor je zijn 351 00:23:31,000 --> 00:23:34,000 u zult zeker willen terug te gaan en schuren de dictaten en eventueel 352 00:23:34,000 --> 00:23:39,000 zelfs sneller door de lezingen, nogmaals te bekijken hen als u wilt 353 00:23:39,000 --> 00:23:44,000 om een ​​gevoel voor wat er gebeurt met elk van deze onderwerpen te krijgen. 354 00:23:44,000 --> 00:23:49,000 Ik zal bovendien zeggen dat dit jaar een van de koele middelen die we hebben 355 00:23:49,000 --> 00:23:55,000 is deze shorts die we hebben gecreëerd, en als je kijkt naar week 0, 356 00:23:55,000 --> 00:24:00,000 we hebben niet alle onderwerpen aan bod, maar we hebben een flink aantal van hen, 357 00:24:00,000 --> 00:24:03,000 een aantal van de lastige degenen, dus kijken naar deze korte broek weer 358 00:24:03,000 --> 00:24:08,000 is een goede manier om je op snelheid te komen. 359 00:24:08,000 --> 00:24:15,000 In het bijzonder, ik ga in een plug zetten voor de 3 op de bodem, want ik heb die. 360 00:24:15,000 --> 00:24:20,000 Maar als je moeite hebt met binaire, bits, hex, dat soort dingen, 361 00:24:20,000 --> 00:24:22,000 binaire is een geweldige plek om te beginnen. 362 00:24:22,000 --> 00:24:25,000 ASCII is een ander dat is goed om te bekijken. 363 00:24:25,000 --> 00:24:31,000 U kunt zelfs naar me kijken bij 1,5-voudige snelheid als ik ga te langzaam voor je. 364 00:24:31,000 --> 00:24:35,000 Sinds de beoordeling, voel je vrij om dat te doen. 365 00:24:35,000 --> 00:24:40,000 >> Gewoon om heel snel te beginnen, we gaan om te gaan door een paar van deze quiz problemen 366 00:24:40,000 --> 00:24:44,000 alleen maar om snel churn door deze. 367 00:24:44,000 --> 00:24:50,000 Bijvoorbeeld, laten we eens kijken naar problemen 16 die ik heb recht omhoog hier kwam op het bord. 368 00:24:50,000 --> 00:24:54,000 We hebben dit volgende berekening in binaire, 369 00:24:54,000 --> 00:24:56,000 en we willen alle werk te laten zien. 370 00:24:56,000 --> 00:24:59,000 Oke, ik ga geven deze een schot. 371 00:24:59,000 --> 00:25:01,000 Jullie moeten volgen samen met papier, 372 00:25:01,000 --> 00:25:04,000 en we doen dit echt snel. 373 00:25:04,000 --> 00:25:06,000 We willen de volgende berekening in binaire uit te voeren. 374 00:25:06,000 --> 00:25:16,000 Ik heb 00110010. 375 00:25:16,000 --> 00:25:27,000 En ik ga aan toe te voegen 00110010. 376 00:25:27,000 --> 00:25:30,000 Voor de wiskunde genieën volgende mee thuis, 377 00:25:30,000 --> 00:25:35,000 hiermee eigenlijk vermenigvuldigen met 2. 378 00:25:35,000 --> 00:25:37,000 Laten we beginnen. 379 00:25:37,000 --> 00:25:39,000 We gaan naar dezelfde toevoeging algoritme dat we doen volgen 380 00:25:39,000 --> 00:25:43,000 als we decimale getallen bij elkaar optellen. 381 00:25:43,000 --> 00:25:46,000 Echt het enige verschil hier is dat we lus terug rond 382 00:25:46,000 --> 00:25:51,000 als we eenmaal hebben 1 + 1 in plaats van als we eenmaal tot 10. 383 00:25:51,000 --> 00:25:53,000 >> Als we uitgaan van het recht, heel snel, wat is het eerste cijfer? 384 00:25:53,000 --> 00:25:55,000 [Student] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Geweldig, het tweede cijfer? 386 00:25:58,000 --> 00:26:00,000 [Student] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Is het een 1? 1 + 1? 388 00:26:02,000 --> 00:26:04,000 [Student] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Precies, dus wat is het cijfer dat ik gelijk schrijven onder de 2 die bij elkaar opgeteld? 390 00:26:08,000 --> 00:26:11,000 [Student] 1, 0, of 0 en voer vervolgens de 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 en 1, precies dragen. 392 00:26:15,000 --> 00:26:18,000 Volgende up, Basil, je bent wakker. 393 00:26:18,000 --> 00:26:20,000 Wat is de derde? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, perfect. Kevin? 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0. >> [Nate H.] 0, Charlotte? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0. >> [Nate H.] Ja, en wat moet ik doen? 397 00:26:30,000 --> 00:26:32,000 [Student] De 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] En wat moet ik doen? En dan heb ik voorzien van het 1. 399 00:26:34,000 --> 00:26:36,000 Perfect, Sahb? >> [Sahb] Nu heb je 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] En doe ik hier iets? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Dan voor de volgende heb je 1 omdat je overgedragen 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Geweldig, dus hier kunnen we afmaken it up. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Student] Heeft 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, zoals je zei, is 10, of 1, 0, in plaats van. 407 00:27:01,000 --> 00:27:07,000 10 is een verkeerde benaming, want voor mij 10 betekent het getal 10, 408 00:27:07,000 --> 00:27:12,000 en het is de gril van hoe we die het als we het schrijven ervan. 409 00:27:12,000 --> 00:27:20,000 We geven het aantal 2 bij 1, 0, en het getal 10 is iets anders. 410 00:27:20,000 --> 00:27:23,000 >> Wat is wel leuk over binair is dat er eigenlijk niet zo veel 411 00:27:23,000 --> 00:27:25,000 gevallen moet je leren. 412 00:27:25,000 --> 00:27:30,000 Er is 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 is 0, en dragen een 1, 414 00:27:34,000 --> 00:27:37,000 en dan kun je hier op de derde kolom van rechts 415 00:27:37,000 --> 00:27:40,000 hadden we 1, 1 en 1. 416 00:27:40,000 --> 00:27:43,000 En 1 + 1 + 1 a 1, 417 00:27:43,000 --> 00:27:45,000 en je draagt ​​een andere 1. 418 00:27:45,000 --> 00:27:48,000 Als je binaire Daarnaast doet, vrij eenvoudig. 419 00:27:48,000 --> 00:27:51,000 Ik zou doen een paar meer van deze geestelijk gezond te controleren jezelf 420 00:27:51,000 --> 00:27:54,000 voordat je naar binnen, want dit is 421 00:27:54,000 --> 00:28:00,000 waarschijnlijk iets dat we zien op de quiz. 422 00:28:00,000 --> 00:28:03,000 Nu laten we dit doen volgende ook. 423 00:28:03,000 --> 00:28:06,000 Laten we probleem 17. 424 00:28:06,000 --> 00:28:12,000 We gaan het volgende binaire getal te converteren naar decimaal. 425 00:28:12,000 --> 00:28:28,000 Ik heb 10100111001. 426 00:28:28,000 --> 00:28:33,000 Vergeet niet in het binaire video die ik heb 427 00:28:33,000 --> 00:28:36,000 Ik liep door een paar voorbeelden, en ik liet zien hoe 428 00:28:36,000 --> 00:28:41,000 alles werkt als je het doet in decimalen. 429 00:28:41,000 --> 00:28:45,000 Als u werkt in decimale representatie Ik denk dat we 430 00:28:45,000 --> 00:28:48,000 op dit punt in ons leven zo vloeiend in het dat 431 00:28:48,000 --> 00:28:53,000 het is erg makkelijk te verdoezelen de mechanica van hoe het eigenlijk werkt. 432 00:28:53,000 --> 00:28:59,000 >> Maar om een ​​korte samenvatting te doen, als ik het nummer 137 433 00:28:59,000 --> 00:29:06,000 dit betekent-en echt nogmaals, dit is de decimale weergave van- 434 00:29:06,000 --> 00:29:19,000 het nummer 137 in decimale betekent dat I 1 x 100 + 3 x 10 + 7 x 1 hebben. 435 00:29:19,000 --> 00:29:22,000 Dit is allemaal verblijf op het scherm. 436 00:29:22,000 --> 00:29:29,000 En dan als je kijkt naar deze nummers hier, 437 00:29:29,000 --> 00:29:34,000 100, 10 en 1, dan zie je dat ze eigenlijk zijn alle machten van 10. 438 00:29:34,000 --> 00:29:43,000 Ik heb 10 ², 10 ¹, en 10 van de nul. 439 00:29:43,000 --> 00:29:48,000 We hebben een gelijkaardige soort dingen in binaire, 440 00:29:48,000 --> 00:29:55,000 behalve dat onze basis, zoals wij het noemen, is 2 in plaats van 10. 441 00:29:55,000 --> 00:29:58,000 Deze 10s die ik hier opgeschreven op de bodem, 442 00:29:58,000 --> 00:30:02,000 deze 10 ², 10 ¹, 10 tot de nul, 10 is onze basis, 443 00:30:02,000 --> 00:30:08,000 en de exponent, 0, 1, of 2, 444 00:30:08,000 --> 00:30:14,000 wordt geïmpliceerd door de positie van het cijfer in het nummer dat we schrijven. 445 00:30:14,000 --> 00:30:21,000 1, als we kijken naar het, dit 1 is in de 2e positie. 446 00:30:21,000 --> 00:30:27,000 De 3 in de 1e positie en 7 in de 0e positie. 447 00:30:27,000 --> 00:30:35,000 Dat is hoe we de verschillende exponenten hieronder voor onze bases te krijgen. 448 00:30:35,000 --> 00:30:40,000 >> Naar aanleiding van dit alles we zullen-eigenlijk, weet je wat? 449 00:30:40,000 --> 00:30:43,000 We doen-waar heb ik ongedaan maken-knop gebleven? 450 00:30:43,000 --> 00:30:45,000 Daar gaat hij. 451 00:30:45,000 --> 00:30:47,000 Ik hou van deze ongedaan te maken ding. 452 00:30:47,000 --> 00:30:51,000 Naar aanleiding van deze Ik denk dat voor mij in ieder geval 453 00:30:51,000 --> 00:30:54,000 de makkelijkste manier om te beginnen het omzetten van een binair getal 454 00:30:54,000 --> 00:30:57,000 of een hexadecimaal getal waar de basis is 16 455 00:30:57,000 --> 00:31:02,000 en niet 10 of 2 is om verder te gaan en uit te schrijven 456 00:31:02,000 --> 00:31:09,000 de bases en exponenten voor alle getallen in mijn binaire getal aan de top. 457 00:31:09,000 --> 00:31:14,000 Als we uitgaan van links naar rechts weer, 458 00:31:14,000 --> 00:31:17,000 dat is een beetje contra-intuïtief, 459 00:31:17,000 --> 00:31:23,000 Ik zal hier terug te veranderen naar zwart, hebben we de 2 naar de 0e positie, 460 00:31:23,000 --> 00:31:27,000 en dan hebben we 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 en 2 van de 3, 2 van de 4, 2 de 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9 en 10. 463 00:31:39,000 --> 00:31:41,000 Deze nummers heb ik geschreven zijn alle exponenten. 464 00:31:41,000 --> 00:31:48,000 Ik schreef de bases hier in de eerste 3 alleen voor de ruimte. 465 00:31:48,000 --> 00:31:50,000 >> Op dit punt ga ik verder te gaan en ik ben eigenlijk aan de hand om te wissen 466 00:31:50,000 --> 00:31:53,000 de dingen die we deden in decimale, als dat goed is. 467 00:31:53,000 --> 00:31:57,000 Je hebt allemaal dat. 468 00:31:57,000 --> 00:32:05,000 Degenen van jullie kijken naar online Ik ben er zeker in staat zal zijn om me terug te spoelen als je wilt. 469 00:32:05,000 --> 00:32:07,000 Terugschakelen naar de pen. 470 00:32:07,000 --> 00:32:12,000 Nu, wat we kunnen doen, als jullie zijn niet helemaal op snelheid op uw machten van 2, 471 00:32:12,000 --> 00:32:15,000 dat is helemaal cool. 472 00:32:15,000 --> 00:32:18,000 Het gebeurt. Ik begrijp het. 473 00:32:18,000 --> 00:32:23,000 Ik had eens een sollicitatiegesprek waar ik kreeg te horen dat ik alle machten van 2 weten 474 00:32:23,000 --> 00:32:26,000 omhoog door 2 tot 30. 475 00:32:26,000 --> 00:32:29,000 Het was niet een baan die ik kreeg. 476 00:32:29,000 --> 00:32:32,000 Hoe dan ook, jullie kunnen gaan en hier do the math, 477 00:32:32,000 --> 00:32:35,000 maar met binaire het niet echt zinvol, 478 00:32:35,000 --> 00:32:38,000 en evenmin heeft het zin ook te maken met decimaal of hexadecimaal, 479 00:32:38,000 --> 00:32:43,000 om de wiskunde te doen waar u nullen. 480 00:32:43,000 --> 00:32:49,000 U kunt zien heb ik hier 0, een 0 hier, 0 hier, 0 hier, 0 hier, 0 hier. 481 00:32:49,000 --> 00:32:52,000 Waarom zou het geen zin om de werkelijke wiskunde te doen 482 00:32:52,000 --> 00:32:56,000 naar de juiste macht van 2 te berekenen voor die positie? 483 00:32:56,000 --> 00:32:59,000 Precies zoals Charlotte gezegd, zal het 0. 484 00:32:59,000 --> 00:33:05,000 Kan net zo goed bespaar jezelf de tijd als het berekenen van machten van 2 is niet uw sterkste punt. 485 00:33:05,000 --> 00:33:10,000 In dit geval hoeven we alleen maar om het te berekenen voor 2 tot de 0, die-? 486 00:33:10,000 --> 00:33:12,000 [Student] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 van de 3 die-? 488 00:33:14,000 --> 00:33:16,000 [Student] 8. >> [Nate H.] 8. 489 00:33:16,000 --> 00:33:18,000 2 van de 4? 490 00:33:18,000 --> 00:33:21,000 [Student] 2. Het spijt me, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 om de 4 is 16, precies. 492 00:33:26,000 --> 00:33:28,000 2 van de 5, Kevin? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 om de 8? 494 00:33:32,000 --> 00:33:38,000 [Student] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Perfect. 496 00:33:41,000 --> 00:33:43,000 En 2 van de 10? 497 00:33:43,000 --> 00:33:45,000 [Student] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Ja, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Zodra we hebben deze cijfers kunnen we samenvatten ze allemaal. 500 00:33:57,000 --> 00:34:01,000 En dit is waar het is echt belangrijk om te doen een paar dingen. 501 00:34:01,000 --> 00:34:07,000 Een daarvan is gaan vertragen en controleer je werk. 502 00:34:07,000 --> 00:34:10,000 U dat er een 1 tip aan het eind van dit aantal, 503 00:34:10,000 --> 00:34:15,000 dus ik moet een oneven aantal zeker krijgen als mijn resultaat, 504 00:34:15,000 --> 00:34:18,000 omdat alle anderen zullen zelfs nummers 505 00:34:18,000 --> 00:34:21,000 gezien het feit dat het een binair getal. 506 00:34:21,000 --> 00:34:24,000 Het andere ding om te doen is als je op dit punt op de test 507 00:34:24,000 --> 00:34:27,000 en je hebt geschreven het uit zo ver 508 00:34:27,000 --> 00:34:30,000 en je bent niet veel tijd meer 509 00:34:30,000 --> 00:34:33,000 kijken naar het aantal punten dat dit probleem de moeite waard is. 510 00:34:33,000 --> 00:34:40,000 Dit probleem, zoals je kunt zien, als ik terug bladeren om mijn laptop echt snel- 511 00:34:40,000 --> 00:34:44,000 dit probleem is 2 punten waard, dus dit is niet het soort toevoeging 512 00:34:44,000 --> 00:34:47,000 je moet gaan door als je echt weinig tijd. 513 00:34:47,000 --> 00:34:52,000 Maar we zullen terug te schakelen naar de iPad, en we gaan door het echt snel. 514 00:34:52,000 --> 00:34:54,000 >> Ik hou van het doen van de kleine nummers eerst 515 00:34:54,000 --> 00:34:56,000 omdat ik vind dat makkelijker. 516 00:34:56,000 --> 00:35:00,000 Ik hou van 32 en 8, omdat ze samen gaan vrij gemakkelijk, en we krijgen 50. 517 00:35:00,000 --> 00:35:03,000 16 en 1 krijgt 17. 518 00:35:03,000 --> 00:35:05,000 Daar krijgen we 57, 519 00:35:05,000 --> 00:35:14,000 en dan kunnen we de rest van deze, zodat we kunnen doen 57, 156. 520 00:35:14,000 --> 00:35:16,000 Kom op. 521 00:35:16,000 --> 00:35:19,000 Man, goed, laten we eens kijken. 522 00:35:19,000 --> 00:35:27,000 We hadden 57, 256, en 1024. 523 00:35:27,000 --> 00:35:31,000 Op dit punt, zou ik liever gewoon doorlopen. 524 00:35:31,000 --> 00:35:35,000 Ik heb geen idee. Ik heb duidelijk nodig hebben om te lezen over dit. 525 00:35:35,000 --> 00:35:40,000 7, 6, en 4, krijg je 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Dan krijgen we 3 en dan krijgen we 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Paasei, iemand? 530 00:35:55,000 --> 00:35:59,000 Iedereen herkent dit nummer? 531 00:35:59,000 --> 00:36:02,000 Chris het nummer herkent. Wat betekent het, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, dus als je kijkt naar dit, het lijkt erop dat leet. 534 00:36:11,000 --> 00:36:15,000 Hacker spul. Kijk uit voor dat soort dingen op de tussentijdse of de quiz, in plaats van. 535 00:36:15,000 --> 00:36:19,000 Als je ziet dat soort dingen en je je afvraagt ​​"Huh," 536 00:36:19,000 --> 00:36:22,000 die daadwerkelijk zou kunnen betekenen iets. 537 00:36:22,000 --> 00:36:24,000 Ik weet het niet. David houdt waardoor het erin 538 00:36:24,000 --> 00:36:26,000 Het is een goede manier om gezond verstand controleren. 539 00:36:26,000 --> 00:36:30,000 Net als oke, kan ik zien wat er gaande is. 540 00:36:30,000 --> 00:36:34,000 >> Dat is Week 0/Week 1 spul. 541 00:36:34,000 --> 00:36:39,000 Als we terug te schakelen naar onze laptop nu, 542 00:36:39,000 --> 00:36:46,000 uitzoomen, en een paar andere dingen. 543 00:36:46,000 --> 00:36:50,000 Er is ASCII, die we al heel wat te doen met het probleem sets. 544 00:36:50,000 --> 00:36:55,000 Dit begrip van het kapitaal A. Wat is dat eigenlijk? 545 00:36:55,000 --> 00:36:57,000 Weten is het decimale gehele getal. 546 00:36:57,000 --> 00:37:00,000 65 is wat het is toegewezen aan in de ASCII-tabel, 547 00:37:00,000 --> 00:37:03,000 en dat is dan ook de manier waarop de computer het schrijft, 548 00:37:03,000 --> 00:37:06,000 en dat is hoe we zijn ermee weg daadwerkelijk schrijven 549 00:37:06,000 --> 00:37:09,000 het karakter hoofdletter A en het karakter kleine letter a 550 00:37:09,000 --> 00:37:14,000 in sommige van deze oplossingen en probleem sets die je hebt gedaan. 551 00:37:14,000 --> 00:37:16,000 Een paar andere dingen. 552 00:37:16,000 --> 00:37:25,000 We hebben verklaringen, boolean expressies, condities, lussen, variabelen en draden. 553 00:37:25,000 --> 00:37:29,000 >> Die lijken allemaal zinvol voor het grootste deel? 554 00:37:29,000 --> 00:37:35,000 Een deel van deze terminologie is een beetje funky op keer. 555 00:37:35,000 --> 00:37:46,000 Ik wil graag van een verklaring denken als voor het grootste deel iets dat eindigt met een puntkomma. 556 00:37:46,000 --> 00:37:51,000 Instructies zoals x = 7, die een variabele wordt, 557 00:37:51,000 --> 00:37:54,000 waarschijnlijk wel x = 7. 558 00:37:54,000 --> 00:38:01,000 Vermoedelijk x is een type dat het getal 7 kan opslaan, 559 00:38:01,000 --> 00:38:05,000 dus het is een int of eventueel een vlotter of een korte of een char, 560 00:38:05,000 --> 00:38:07,000 zoiets. 561 00:38:07,000 --> 00:38:12,000 Een boolean expressie wordt met behulp van deze dubbel is 562 00:38:12,000 --> 00:38:17,000 en de knal gelijk is aan of het niet gelijk is aan, kleiner dan, groter dan, 563 00:38:17,000 --> 00:38:22,000 minder dan of gelijk aan, al dat soort dingen. 564 00:38:22,000 --> 00:38:28,000 Voorwaarden zijn dan als else statements. 565 00:38:28,000 --> 00:38:32,000 Ik zou denken dat je niet een anders hebben zonder een overeenkomstige indien. 566 00:38:32,000 --> 00:38:37,000 Ook kan je niet een ander als dat zonder een overeenkomstige indien. 567 00:38:37,000 --> 00:38:40,000 Loops, herinneren aan de 3 soorten lussen we al hameren in je 568 00:38:40,000 --> 00:38:43,000 voor de laatste paar secties en probleem sets. 569 00:38:43,000 --> 00:38:46,000 Met behulp van niet terwijl als je het krijgen van input van de gebruiker, 570 00:38:46,000 --> 00:38:51,000 met behulp van while loops totdat een bepaalde voorwaarde waar is, 571 00:38:51,000 --> 00:38:56,000 en vervolgens met behulp van die voor loops als u 572 00:38:56,000 --> 00:39:01,000 weten welke iteratie van de lus die u momenteel op is hoe ik erover denk. 573 00:39:01,000 --> 00:39:07,000 Of als je doet een voor elk karakter in een string Ik wil iets doen, 574 00:39:07,000 --> 00:39:15,000 voor elk element in een array wil ik iets doen om dat element. 575 00:39:15,000 --> 00:39:18,000 >> Draad en evenementen. 576 00:39:18,000 --> 00:39:21,000 Deze hebben we niet zo expliciet aan bod in C, 577 00:39:21,000 --> 00:39:23,000 maar vergeet niet dat dit vanaf het begin. 578 00:39:23,000 --> 00:39:26,000 Dit is het idee van het hebben van verschillende scripts. 579 00:39:26,000 --> 00:39:32,000 Dit is ook dit idee in het uitzenden van een evenement. 580 00:39:32,000 --> 00:39:37,000 Sommige mensen niet uitzenden in eerste instantie te gebruiken in hun projecten, 581 00:39:37,000 --> 00:39:40,000 dat is helemaal cool, 582 00:39:40,000 --> 00:39:46,000 maar deze zijn 2 verschillende manieren om met deze grotere kwestie heet concurrency, 583 00:39:46,000 --> 00:39:49,000 dat is hoe krijg je programma's uit te voeren 584 00:39:49,000 --> 00:39:54,000 of schijnbaar uit te voeren op hetzelfde moment? 585 00:39:54,000 --> 00:39:59,000 Verschillende taken uitgevoerd terwijl u andere taken worden ook uitgevoerd. 586 00:39:59,000 --> 00:40:01,000 Dit is hoe uw besturingssysteem lijkt te werken. 587 00:40:01,000 --> 00:40:04,000 Daarom, hoewel bijvoorbeeld 588 00:40:04,000 --> 00:40:10,000 Ik heb mijn browser draaien, kan ik ook inschakelen Spotify en speel een nummer. 589 00:40:10,000 --> 00:40:14,000 Dat is meer van een conceptueel ding om te begrijpen. 590 00:40:14,000 --> 00:40:17,000 Ik zou een kijkje nemen op de draden korte 591 00:40:17,000 --> 00:40:21,000 als je wilt om meer te leren over. 592 00:40:21,000 --> 00:40:26,000 >> Laten we eens kijken, ik geloof dat er misschien wel 593 00:40:26,000 --> 00:40:31,000 een probleem dat in een van deze. 594 00:40:31,000 --> 00:40:35,000 Nogmaals, ik denk dat discussies en gebeurtenissen zijn niet iets dat wij doen dat in C 595 00:40:35,000 --> 00:40:41,000 alleen omdat het aanzienlijk moeilijker dan in Scratch. 596 00:40:41,000 --> 00:40:44,000 Je moet er niet zorgen over te maken, maar zeker inzicht in de concepten, 597 00:40:44,000 --> 00:40:47,000 begrijpen wat er gaande is. 598 00:40:47,000 --> 00:40:52,000 Voordat we verder gaan, vragen in week 0 materiaal? 599 00:40:52,000 --> 00:40:55,000 Iedereen een goed gevoel? 600 00:40:55,000 --> 00:41:03,000 Inzicht in variabelen en wat een variabele is? 601 00:41:03,000 --> 00:41:08,000 >> Verder. Week 1. 602 00:41:08,000 --> 00:41:12,000 Een paar dingen hier dat niet bijzonder waren bedekt 603 00:41:12,000 --> 00:41:21,000 in de quiz herziening noodzakelijk en ook meer conceptuele dingen te denken. 604 00:41:21,000 --> 00:41:30,000 De eerste is deze notie van wat broncode, compilers en objectcode zijn. 605 00:41:30,000 --> 00:41:32,000 Iemand? Basil. 606 00:41:32,000 --> 00:41:37,000 Is objectcode-ik bedoel broncode is wat je in kletteren, 607 00:41:37,000 --> 00:41:42,000 en object code is wat clang zet zo uit dat je computer kan lezen het programma. 608 00:41:42,000 --> 00:41:44,000 Precies. 609 00:41:44,000 --> 00:41:47,000 De broncode is de C-code die je eigenlijk uittypen. 610 00:41:47,000 --> 00:41:50,000 Object code is wat je krijgt uit clang. 611 00:41:50,000 --> 00:41:54,000 Het is de 0s en 1s in die binair formaat. 612 00:41:54,000 --> 00:41:59,000 Wat gebeurt er dan is als je een bos van object bestanden, 613 00:41:59,000 --> 00:42:04,000 zeggen dat je een project of een programma dat meerdere broncode bestanden gebruikt samenstellen, 614 00:42:04,000 --> 00:42:09,000 die volgens afspraak gegeven. c bestandsextensie. 615 00:42:09,000 --> 00:42:13,000 Dat is waarom we hebben caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Als je het schrijven van Java-programma's je ze de extensie. Java. 617 00:42:18,000 --> 00:42:24,000 Python-programma's hebben de extensie. Py vaak. 618 00:42:24,000 --> 00:42:26,000 >> Zodra je meerdere. C-bestanden hebt, kunt compileren. 619 00:42:26,000 --> 00:42:29,000 Clang spuugt al deze binaire rommel. 620 00:42:29,000 --> 00:42:33,000 Dan, omdat u alleen 1 programma 621 00:42:33,000 --> 00:42:37,000 heb je de linker band al deze object-bestanden samen 622 00:42:37,000 --> 00:42:40,000 in 1 uitvoerbaar bestand. 623 00:42:40,000 --> 00:42:45,000 Dit is ook wat er gebeurt als u de CS50 bibliotheek, bijvoorbeeld. 624 00:42:45,000 --> 00:42:50,000 De CS50 bibliotheek is zowel dat. H header-bestand 625 00:42:50,000 --> 00:42:53,000 dat je leest, dat # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 En dan is het ook een speciale binaire bibliotheekbestand 627 00:42:58,000 --> 00:43:02,000 die is samengesteld dat is 0s en 1s, 628 00:43:02,000 --> 00:43:08,000 en dat-l vlag, dus als we terug gaan naar onze ruimtes en we kijken echt snel 629 00:43:08,000 --> 00:43:11,000 naar wat er hier aan de hand als we kijken naar onze clang commando, 630 00:43:11,000 --> 00:43:15,000 wat we hebben is dit onze broncode bestand hier. 631 00:43:15,000 --> 00:43:18,000 Dit zijn een stelletje compiler vlaggen. 632 00:43:18,000 --> 00:43:22,000 En dan helemaal aan het eind, deze-l vlaggen link in 633 00:43:22,000 --> 00:43:30,000 de feitelijke binaire bestanden voor deze 2 bibliotheken, de CS50 bibliotheek en vervolgens de math library. 634 00:43:30,000 --> 00:43:35,000 >> Inzicht in elk type van bestanden 'doel 635 00:43:35,000 --> 00:43:38,000 in de compilatie proces is iets wat je wilt in staat zijn om 636 00:43:38,000 --> 00:43:43,000 geven in ieder geval een hoog niveau overzicht van. 637 00:43:43,000 --> 00:43:46,000 Broncode komt binnen Objectcode komt. 638 00:43:46,000 --> 00:43:53,000 Objectcode bestanden met elkaar te verbinden, en je krijgt een mooie, uitvoerbaar bestand. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Dit is ook waar je kunt fouten krijgen op meerdere punten 641 00:43:58,000 --> 00:44:00,000 in de compilatie proces. 642 00:44:00,000 --> 00:44:04,000 Dit is waar, bijvoorbeeld, als je hier wat linken vlag, 643 00:44:04,000 --> 00:44:10,000 de CS50 vlag, en je het weg laten in Spaces of wanneer u gebruik maakt van uw code, 644 00:44:10,000 --> 00:44:13,000 dit is waar krijg je een fout in de koppeling fase, 645 00:44:13,000 --> 00:44:18,000 en de linker zal zeggen: "He, je belt een functie GetString 646 00:44:18,000 --> 00:44:20,000 dat is in de CS50 bibliotheek. " 647 00:44:20,000 --> 00:44:25,000 "Je vertelde me dat het in de CS50 bibliotheek, en ik kan de code niet voor te vinden." 648 00:44:25,000 --> 00:44:28,000 Dat is waar je het moet koppelen, en dat is een aparte 649 00:44:28,000 --> 00:44:33,000 van een compiler fout omdat de compiler is op zoek naar syntaxis en dat soort dingen. 650 00:44:33,000 --> 00:44:38,000 Het is goed om te weten wat er gaande is wanneer. 651 00:44:38,000 --> 00:44:42,000 >> Andere dingen om te weten over. 652 00:44:42,000 --> 00:44:49,000 Ik zou zeggen dat je zeker wilt een kijkje nemen op de korte op typecasting gedaan door Jordan 653 00:44:49,000 --> 00:44:55,000 om te begrijpen wat ints zijn onder de motorkap, 654 00:44:55,000 --> 00:44:58,000 wat chars zijn onder de motorkap. 655 00:44:58,000 --> 00:45:02,000 Wanneer we praten over ASCII en we kregen eigenlijk kijken naar de ASCII-tabel, 656 00:45:02,000 --> 00:45:07,000 wat dat doet is het geven van ons een onder de motorkap kijken 657 00:45:07,000 --> 00:45:13,000 op de manier waarop de computer in feite vertegenwoordigt het kapitaal A en het cijfer 7 658 00:45:13,000 --> 00:45:17,000 en een komma en een vraagteken. 659 00:45:17,000 --> 00:45:20,000 De computer heeft ook speciale manieren te vertegenwoordigen 660 00:45:20,000 --> 00:45:23,000 het getal 7 als een geheel getal. 661 00:45:23,000 --> 00:45:27,000 Het heeft een speciale manier om het getal 7 voor te stellen als een getal met drijvende komma, 662 00:45:27,000 --> 00:45:29,000 en die zijn zeer verschillend. 663 00:45:29,000 --> 00:45:32,000 Typecasting is hoe vertel je de computer "He, ik wil dat je om te zetten 664 00:45:32,000 --> 00:45:37,000 ene naar de andere representatie weergave. " 665 00:45:37,000 --> 00:45:40,000 Waarom gaan we niet een kijkje nemen op die. 666 00:45:40,000 --> 00:45:44,000 >> Ik zou ook een kijkje nemen op de korte op bibliotheken en de korte over compilers. 667 00:45:44,000 --> 00:45:47,000 Die praten over het proces van het opstellen, 668 00:45:47,000 --> 00:45:53,000 wat een bibliotheek is, en gaan over een aantal van deze vragen die u zou kunnen krijgen vroeg. 669 00:45:53,000 --> 00:45:55,000 Vragen over Week 1-materiaal? 670 00:45:55,000 --> 00:46:03,000 Zijn er onderwerpen in hier die lijken ontmoedigend u wilt dekken? 671 00:46:03,000 --> 00:46:07,000 Ik probeer op te blazen door middel van de meeste van deze eerdere onderwerpen, zodat we kunnen krijgen om 672 00:46:07,000 --> 00:46:13,000 pointers en doe een beetje van recursie. 673 00:46:13,000 --> 00:46:15,000 Gedachten? 674 00:46:15,000 --> 00:46:19,000 Iets te dekken? 675 00:46:19,000 --> 00:46:21,000 Tijd voor wat chocolade misschien? 676 00:46:21,000 --> 00:46:23,000 Jullie werken doorheen. 677 00:46:23,000 --> 00:46:26,000 Ik ga houden het genot van mijn koffie. 678 00:46:26,000 --> 00:46:31,000 Week 2. 679 00:46:31,000 --> 00:46:34,000 Goede oproep, goed gesprek. 680 00:46:34,000 --> 00:46:38,000 In week 2 hadden we het een beetje meer over de functies. 681 00:46:38,000 --> 00:46:43,000 >> In de eerste paar probleem sets we niet echt schrijven alle functies op alle 682 00:46:43,000 --> 00:46:45,000 anders dan welke functie? 683 00:46:45,000 --> 00:46:47,000 [Student] Main. >> Main, precies. 684 00:46:47,000 --> 00:46:51,000 En dus hebben we gezien dat de verschillende kostuums die de belangrijkste draagt. 685 00:46:51,000 --> 00:46:54,000 Er is die waarin het duurt geen argumenten, 686 00:46:54,000 --> 00:46:58,000 en we gewoon zeggen leegte tussen de haakjes, 687 00:46:58,000 --> 00:47:01,000 en dan is er de andere, waar we willen om commando regel argumenten te nemen, 688 00:47:01,000 --> 00:47:08,000 en zoals we zagen, dat is waar je int argc en string argv array- 689 00:47:08,000 --> 00:47:13,000 of nu we eigenlijk blootgesteld string naar de char * dat het zijn 690 00:47:13,000 --> 00:47:20,000 we gaan beginnen met het schrijven als char * argv en daarna tussen haakjes. 691 00:47:20,000 --> 00:47:22,000 In Probleem Set 3, jullie zagen een heleboel functies, 692 00:47:22,000 --> 00:47:27,000 en u een aantal functies uitgevoerd, tekenen, kijk omhoog, scramble. 693 00:47:27,000 --> 00:47:31,000 De prototypes werden er allemaal voor u geschreven. 694 00:47:31,000 --> 00:47:33,000 >> Wat ik wilde hier over praten met functies heel snel 695 00:47:33,000 --> 00:47:38,000 is dat er 3 delen aan hen wanneer u een functie schrijven. 696 00:47:38,000 --> 00:47:43,000 Je moet de return type van de functie op te geven. 697 00:47:43,000 --> 00:47:46,000 Je moet een naam voor de functie op te geven en dan moet je opgeven 698 00:47:46,000 --> 00:47:51,000 de lijst met argumenten of de parameterlijst. 699 00:47:51,000 --> 00:47:57,000 Bijvoorbeeld, als ik een functie te schrijven te vatten een bos van gehele getallen 700 00:47:57,000 --> 00:48:03,000 en dan terug naar mij de som wat zou mijn terugkeer type zijn 701 00:48:03,000 --> 00:48:06,000 als ik wilde gehele getallen optellen en dan de som terug te keren? 702 00:48:06,000 --> 00:48:12,000 Vervolgens de naam van de functie. 703 00:48:12,000 --> 00:48:27,000 Als ik ga je gang en schrijf in het groen, dit deel is de return type. 704 00:48:27,000 --> 00:48:34,000 Dit deel is de naam. 705 00:48:34,000 --> 00:48:40,000 En in tussen haakjes 706 00:48:40,000 --> 00:48:46,000 is waar ik de argumenten, 707 00:48:46,000 --> 00:48:56,000 vaak afgekort als args, ook wel params voor parameters. 708 00:48:56,000 --> 00:49:00,000 En als je er een hebt, je gewoon geef de een. 709 00:49:00,000 --> 00:49:06,000 Als u meerdere scheidt u elk met een komma. 710 00:49:06,000 --> 00:49:13,000 En voor elk argument geef je het 2 dingen die-Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Je moet het type en vervolgens de naam te geven. 712 00:49:18,000 --> 00:49:21,000 En dan de naam, en de naam is de naam die je gaat gebruiken 713 00:49:21,000 --> 00:49:25,000 om op dit argument verwijzen binnen de som-functie, 714 00:49:25,000 --> 00:49:27,000 binnen de functie die u op dat moment aan het schrijven bent. 715 00:49:27,000 --> 00:49:32,000 >> Je hoeft niet te, bijvoorbeeld als ik ga om samen te vatten, 716 00:49:32,000 --> 00:49:41,000 zeggen, een array van integers-we zullen doen int array, 717 00:49:41,000 --> 00:49:46,000 en ik geef mezelf een aantal accolades er- 718 00:49:46,000 --> 00:49:51,000 toen ik een array met de som-functie 719 00:49:51,000 --> 00:49:55,000 Ik geef het in de eerste positie van de lijst met argumenten. 720 00:49:55,000 --> 00:49:59,000 De array I passeren hoeft niet de naam arr hebben. 721 00:49:59,000 --> 00:50:07,000 Arr gaat worden hoe ik verwijzen naar dat argument in het lichaam van de functie. 722 00:50:07,000 --> 00:50:10,000 Het andere ding dat we nodig hebben om rekening te houden, 723 00:50:10,000 --> 00:50:14,000 en dit is iets anders dan functies, maar ik denk dat het een belangrijk punt, 724 00:50:14,000 --> 00:50:20,000 is dat in C als ik een functie als deze schriftelijk 725 00:50:20,000 --> 00:50:29,000 hoe weet ik hoeveel elementen zijn in deze array? 726 00:50:29,000 --> 00:50:31,000 Dit is iets van een strikvraag. 727 00:50:31,000 --> 00:50:35,000 We spraken over dit een beetje in rubriek van vorige week. 728 00:50:35,000 --> 00:50:40,000 Hoe weet ik of het aantal elementen in een array in C? 729 00:50:40,000 --> 00:50:44,000 Is er een manier? 730 00:50:44,000 --> 00:50:49,000 >> Het blijkt dat er geen manier om te weten. 731 00:50:49,000 --> 00:50:52,000 Je moet het geschiedde in afzonderlijk. 732 00:50:52,000 --> 00:50:55,000 Er is een truc die je kunt doen 733 00:50:55,000 --> 00:51:00,000 als je in dezelfde functie waarin de array is verklaard, 734 00:51:00,000 --> 00:51:04,000 en je werkt met een stapel array. 735 00:51:04,000 --> 00:51:06,000 Maar dat werkt alleen als je in dezelfde functie. 736 00:51:06,000 --> 00:51:09,000 Zodra u een array naar een andere functie of als je hebt aangegeven een array 737 00:51:09,000 --> 00:51:12,000 en je zet die array op de heap, je hebt gebruikt malloc 738 00:51:12,000 --> 00:51:15,000  en dat soort dingen, dan zijn alle weddenschappen zijn uitgeschakeld. 739 00:51:15,000 --> 00:51:18,000 Dan moet je eigenlijk om rond te gaan 740 00:51:18,000 --> 00:51:21,000 een speciale argument of andere parameter 741 00:51:21,000 --> 00:51:23,000 vertellen hoe groot de array is. 742 00:51:23,000 --> 00:51:28,000 In dit geval, zou ik willen een komma Het spijt me te gebruiken, het gaat van het scherm hier- 743 00:51:28,000 --> 00:51:32,000 en ik zou pas in een ander argument 744 00:51:32,000 --> 00:51:40,000  en noem het int len ​​voor de lengte. 745 00:51:40,000 --> 00:51:44,000 >> Een ding dat zou kunnen komen op de quiz 746 00:51:44,000 --> 00:51:49,000 vraagt ​​je te schrijven of de tenuitvoerlegging van een functie genaamd iets. 747 00:51:49,000 --> 00:51:54,000 Als we niet geven u de prototype, dus dit hele ding hier, 748 00:51:54,000 --> 00:51:58,000 deze hele puinhoop wordt de functie declaratie of de functie prototype, 749 00:51:58,000 --> 00:52:01,000 Dit is een van de eerste dingen die je zult willen vastspijkeren als het niet gegeven 750 00:52:01,000 --> 00:52:03,000 u meteen op de quiz. 751 00:52:03,000 --> 00:52:06,000 De andere truc die ik heb geleerd is dat 752 00:52:06,000 --> 00:52:11,000 zeggen dat we geven je een prototype voor een functie, en we zeggen: "He, je hebt om het te schrijven." 753 00:52:11,000 --> 00:52:16,000 Binnen de accolades die je hebt op de quiz 754 00:52:16,000 --> 00:52:20,000 als u merkt dat er een return type en je merkt dat de return type 755 00:52:20,000 --> 00:52:25,000 is iets anders dan void, waardoor de functie niet terugkeert niets, 756 00:52:25,000 --> 00:52:28,000 dan een ding dat je zeker wilt doen is schrijven 757 00:52:28,000 --> 00:52:33,000 een soort van return-statement aan het einde van de functie. 758 00:52:33,000 --> 00:52:40,000 Return, en in dit geval zetten we een blanco want we willen het invullen van de blanco. 759 00:52:40,000 --> 00:52:44,000 Maar dit wordt de periode van op de juiste manier over hoe ga ik dit probleem aan te pakken? 760 00:52:44,000 --> 00:52:49,000 En het herinnert je dat je gaat te hebben om een ​​waarde te retourneren 761 00:52:49,000 --> 00:52:51,000 met de beller van de functie. 762 00:52:51,000 --> 00:52:54,000 >> Ja. >> [Student] Heeft stijl toe te passen als we het schrijven van code op de quiz? 763 00:52:54,000 --> 00:52:58,000 Zoals inspringen en dat soort dingen? >> [Student] Ja. 764 00:52:58,000 --> 00:53:00,000 Nee, niet zo veel. 765 00:53:00,000 --> 00:53:09,000 Ik denk dat veel van-dit is iets wat we op de quiz te verduidelijken op de dag van, 766 00:53:09,000 --> 00:53:15,000 maar meestal zorgen te maken over onder # en dat soort dingen, het is een soort van buiten. 767 00:53:15,000 --> 00:53:17,000 [Student] Moet u uw handgeschreven code commentaar geven? 768 00:53:17,000 --> 00:53:19,000 Moet u uw handgeschreven code commentaar geven? 769 00:53:19,000 --> 00:53:24,000 Commentaar is altijd goed als je je zorgen maakt over een gedeeltelijke credit 770 00:53:24,000 --> 00:53:29,000 of u wilt uw intentie aan de grader. 771 00:53:29,000 --> 00:53:33,000 Maar ik, nogmaals, zal duidelijkheid te verschaffen over de quiz zelf en op de quiz dag, 772 00:53:33,000 --> 00:53:39,000 maar ik geloof niet dat u verplicht om een ​​reactie te schrijven, nee. 773 00:53:39,000 --> 00:53:42,000 Meestal niet, maar het is zeker de soort dingen waar 774 00:53:42,000 --> 00:53:45,000 je kunt communiceren je intentie, zoals "He, dit is waar ik heen ga mee." 775 00:53:45,000 --> 00:53:49,000 En soms die kunnen helpen met gedeeltelijke krediet. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Basil. 778 00:53:53,000 --> 00:53:56,000 [Basil] Wat is het verschil tussen verklaren, laten we zeggen, int lang 779 00:53:56,000 --> 00:54:03,000 in de argumenten of parameters ten opzichte van declaratie van een variabele binnen de functie? 780 00:54:03,000 --> 00:54:05,000 Wow, koffie ging de luchtpijp. 781 00:54:05,000 --> 00:54:07,000 [Basil] Net als die dingen die we willen zetten in argumenten. 782 00:54:07,000 --> 00:54:09,000 Ja, dat is een grote vraag. 783 00:54:09,000 --> 00:54:11,000 Hoe kies je wat dingen die je wilt zetten in de argumenten 784 00:54:11,000 --> 00:54:17,000 ten opzichte van wat dingen die je moet doen in de functie? 785 00:54:17,000 --> 00:54:24,000 In dit geval waren zowel deze als argumenten 786 00:54:24,000 --> 00:54:29,000 omdat ze iets dat wie gaat de som functie te gebruiken 787 00:54:29,000 --> 00:54:32,000 moet aangeven die dingen. 788 00:54:32,000 --> 00:54:35,000 >> De som functie, zoals we het over gehad, heeft geen manier om te weten 789 00:54:35,000 --> 00:54:40,000 hoe groot de array is het krijgt van de beller of wie dan ook is het gebruik van de som-functie. 790 00:54:40,000 --> 00:54:44,000 Het heeft geen manier om te weten hoe groot die array is. 791 00:54:44,000 --> 00:54:48,000 De reden dat we pas in deze lengte hier als argument 792 00:54:48,000 --> 00:54:51,000 is, want dat is iets dat we in feite zijn de beller van de functie te vertellen, 793 00:54:51,000 --> 00:54:55,000 wie gaat de som functie te gebruiken, "He, niet alleen moet je ons een array 794 00:54:55,000 --> 00:54:59,000 van ints, heb je ook om ons te vertellen hoe groot de array die u hebt ons is. " 795 00:54:59,000 --> 00:55:03,000 [Basil] Die zullen beide command line argumenten? 796 00:55:03,000 --> 00:55:06,000 Nee, dit zijn feitelijke argumenten die wordt meegegeven aan de functie. 797 00:55:06,000 --> 00:55:10,000 >> Laat mij hier te doen een nieuwe pagina. 798 00:55:10,000 --> 00:55:13,000 [Basil] Net als de naam zou gaan- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Als ik int main (void), 800 00:55:24,000 --> 00:55:27,000 en ik ga in mijn return 0 hier beneden op de bodem, 801 00:55:27,000 --> 00:55:31,000 en zeggen dat ik de som wilt functie aan te roepen. 802 00:55:31,000 --> 00:55:42,000 Ik wil zeggen int x = som (); 803 00:55:42,000 --> 00:55:46,000 Om de som functie te gebruiken moet ik gaan, zowel in de array die ik wil om samen te vatten 804 00:55:46,000 --> 00:55:51,000 en de lengte van de array, dus dit is waar 805 00:55:51,000 --> 00:55:54,000 de veronderstelling dat ik had een array van ints, 806 00:55:54,000 --> 00:56:12,000 zeggen dat ik int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 soort gebruik dat gehackte up syntaxis daar, 808 00:56:16,000 --> 00:56:21,000 dan wat ik zou doen is in som zou ik langs wilt op 809 00:56:21,000 --> 00:56:27,000 zowel numbaz en de nummer 3 810 00:56:27,000 --> 00:56:30,000 aan de som-functie vertellen "Oke, hier is de array Ik wil dat je samenvatten." 811 00:56:30,000 --> 00:56:34,000 "Hier is de omvang ervan." 812 00:56:34,000 --> 00:56:39,000 Is dat logisch? Beantwoordt dit je vraag? 813 00:56:39,000 --> 00:56:42,000 >> In veel opzichten doet parallelle wat we doen met de belangrijkste 814 00:56:42,000 --> 00:56:44,000 wanneer we de opdracht regel argumenten hebben. 815 00:56:44,000 --> 00:56:47,000 Een programma zoals Caesar cipher, bijvoorbeeld dat nodig 816 00:56:47,000 --> 00:56:53,000 opdrachtregelargumenten zou niet in staat om iets te doen. 817 00:56:53,000 --> 00:56:57,000 Het zou niet weten hoe te coderen als je niet vertellen welke toets je moet gebruiken 818 00:56:57,000 --> 00:57:03,000 of als je niet te vertellen wat tekenreeks die u wilde versleutelen. 819 00:57:03,000 --> 00:57:08,000 Gevraagd voor input, dit is waar we hebben 2 verschillende mechanismen 820 00:57:08,000 --> 00:57:14,000 voor het nemen van input van de gebruiker, die informatie van de gebruiker. 821 00:57:14,000 --> 00:57:19,000 Voor Probleem Set 1 zagen we dit GetInt, GetString, GetFloat manier 822 00:57:19,000 --> 00:57:26,000 van vragen om input, en dat heet het gebruik van de standaard input stream. 823 00:57:26,000 --> 00:57:28,000 Het is iets anders. 824 00:57:28,000 --> 00:57:31,000 Het is iets dat je kunt doen in een keer, in tegenstelling tot 825 00:57:31,000 --> 00:57:35,000 Wanneer u het programma, te roepen wanneer u het programma start draait. 826 00:57:35,000 --> 00:57:41,000 De opdrachtregelargumenten alle worden opgegeven wanneer u het programma start running. 827 00:57:41,000 --> 00:57:47,000 We zijn het mengen van de twee van die. 828 00:57:47,000 --> 00:57:52,000 Wanneer we argumenten gebruiken om een ​​functie, het is net als command line argumenten naar de belangrijkste. 829 00:57:52,000 --> 00:57:56,000 Het is wanneer u beroep doen op de functie die u nodig hebt om het te vertellen 830 00:57:56,000 --> 00:58:05,000 wat het precies nodig heeft ter vervulling van zijn taken. 831 00:58:05,000 --> 00:58:08,000 Een ander goed ding om naar te kijken en ik laat je naar te kijken in je vrije tijd, 832 00:58:08,000 --> 00:58:11,000 en het was bedekt met de quiz-was deze notie van scope 833 00:58:11,000 --> 00:58:15,000 en lokale variabelen versus globale variabelen. 834 00:58:15,000 --> 00:58:18,000 Heeft aandacht besteden aan dat. 835 00:58:18,000 --> 00:58:23,000 >> Nu krijgen we op deze andere dingen, 836 00:58:23,000 --> 00:58:27,000 in week 3 we begonnen te praten over zoeken en sorteren. 837 00:58:27,000 --> 00:58:32,000 Zoeken en sorteren, althans in CS50, 838 00:58:32,000 --> 00:58:39,000 is heel erg een introductie tot enkele van de meer theoretische delen van de informatica. 839 00:58:39,000 --> 00:58:42,000 Het probleem van zoeken, het probleem van sorteren 840 00:58:42,000 --> 00:58:46,000 zijn groot, canonieke problemen. 841 00:58:46,000 --> 00:58:52,000 Hoe vind je een bepaald getal in een reeks van miljarden getallen? 842 00:58:52,000 --> 00:58:55,000 Hoe maak je een bepaalde naam te zoeken in een telefoonboek 843 00:58:55,000 --> 00:58:59,000 die is opgeslagen op uw laptop? 844 00:58:59,000 --> 00:59:04,000 En dus introduceren we dit begrip van asymptotische looptijden 845 00:59:04,000 --> 00:59:11,000 om echt te kwantificeren hoe lang, hoe hard deze probleemgebieden zijn, 846 00:59:11,000 --> 00:59:14,000 hoe lang zij nemen om op te lossen. 847 00:59:14,000 --> 00:59:20,000 In, ik geloof, 2011's quiz er een probleem is dat ik denk dat verdient 848 00:59:20,000 --> 00:59:27,000 die heel snel, dat is deze, probleem 12. 849 00:59:27,000 --> 00:59:32,000 O nee, het is Omega. 850 00:59:32,000 --> 00:59:41,000 >> Hier hebben we het over de snelst mogelijke looptijd 851 00:59:41,000 --> 00:59:46,000 voor een bepaald algoritme en de laagst mogelijke uitvoering. 852 00:59:46,000 --> 00:59:52,000 Deze Omega en O zijn eigenlijk gewoon snelkoppelingen. 853 00:59:52,000 --> 00:59:55,000 Ze zijn notatie snelkoppelingen voor het zeggen 854 00:59:55,000 --> 00:59:59,000 hoe snel in het beste geval zal ons algoritme run, 855 00:59:59,000 --> 01:00:06,000 en hoe traag in het ergste geval zal ons algoritme lopen? 856 01:00:06,000 --> 01:00:10,000 Laten we een paar van deze, en deze werden ook behandeld 857 01:00:10,000 --> 01:00:13,000 in het kort op asymptotische notatie, die ik sterk aanbevelen. 858 01:00:13,000 --> 01:00:17,000 Jackson deed echt goed werk. 859 01:00:17,000 --> 01:00:23,000 Met binair zoeken, we praten over binary search als een algoritme, 860 01:00:23,000 --> 01:00:28,000 en we meestal over praten in termen van de grote O. 861 01:00:28,000 --> 01:00:30,000 Wat is het grote O? 862 01:00:30,000 --> 01:00:34,000 Wat is de laagst mogelijke looptijd van binaire zoeken? 863 01:00:34,000 --> 01:00:36,000 [Student] N ²? 864 01:00:36,000 --> 01:00:41,000 Sluiten, ik denk vergelijkbaar met die. 865 01:00:41,000 --> 01:00:43,000 Het is een stuk sneller dan dat. 866 01:00:43,000 --> 01:00:45,000 [Student] Binary? >> Ja, binaire zoekopdracht. 867 01:00:45,000 --> 01:00:47,000 [Student] Het is log n. 868 01:00:47,000 --> 01:00:49,000 Meld u n, dus wat doet inloggen betekenen n? 869 01:00:49,000 --> 01:00:51,000 Halveert het elke iteratie. 870 01:00:51,000 --> 01:00:56,000 Precies, dus in de langzaamste mogelijke geval, 871 01:00:56,000 --> 01:01:00,000 zeggen dat als u een gesorteerde array 872 01:01:00,000 --> 01:01:08,000 van een miljoen integers en het nummer dat u zoekt 873 01:01:08,000 --> 01:01:14,000 ofwel het eerste element in de matrix of het laatste element in de array. 874 01:01:14,000 --> 01:01:18,000 Vergeet niet, het binaire zoekalgoritme werkt door te kijken naar het middelste element, 875 01:01:18,000 --> 01:01:21,000 kijken of dat is de wedstrijd die u zoekt. 876 01:01:21,000 --> 01:01:23,000 Zo ja, dan is dat geweldig, je het gevonden hebt. 877 01:01:23,000 --> 01:01:27,000 >> In het beste geval, hoe snel gaat binaire zoekopdracht run? 878 01:01:27,000 --> 01:01:29,000 [Studenten] 1. 879 01:01:29,000 --> 01:01:32,000 1, het is een constante tijd, big O van 1. Ja. 880 01:01:32,000 --> 01:01:36,000 [Student] Ik heb een vraag. Als je zegt te loggen van n, je bedoelt met betrekking tot basis 2, toch? 881 01:01:36,000 --> 01:01:40,000 Ja, dus dat is het andere ding. 882 01:01:40,000 --> 01:01:44,000 Wij zeggen log n, en ik denk dat toen ik op de middelbare school 883 01:01:44,000 --> 01:01:48,000 Ik heb altijd aangenomen dat log was basis 10. 884 01:01:48,000 --> 01:01:57,000 Ja, dus ja, log basis 2 is typisch wat we gebruiken. 885 01:01:57,000 --> 01:02:02,000 Nogmaals, terug te gaan naar binair zoeken, als je op zoek bent naar een van beide 886 01:02:02,000 --> 01:02:05,000 het element helemaal aan het eind of het element aan het begin, 887 01:02:05,000 --> 01:02:08,000 omdat je begint in het midden en dan gooi 888 01:02:08,000 --> 01:02:13,000 welke half niet voldoet aan de criteria die u zoekt, 889 01:02:13,000 --> 01:02:15,000 en je gaat naar de volgende helft en de volgende halve en de volgende helft. 890 01:02:15,000 --> 01:02:19,000 Als ik ben op zoek naar het grootste element in de miljoen integer-array 891 01:02:19,000 --> 01:02:25,000 Ik ga het halveren ten hoogste log van 1 miljoen keer 892 01:02:25,000 --> 01:02:28,000 voordat ik eindelijk testen en te zien dat het element Ik ben op zoek naar 893 01:02:28,000 --> 01:02:33,000 is de grootste of de hoogste index van de array, 894 01:02:33,000 --> 01:02:38,000 en dat zal log van n, log van 1 miljoen keer. 895 01:02:38,000 --> 01:02:40,000 >> Bubble sort. 896 01:02:40,000 --> 01:02:43,000 Hebben jullie herinneren de bubble sort-algoritme? 897 01:02:43,000 --> 01:02:47,000 Kevin, kunt u mij een korte samenvatting van wat er gebeurd is in de bubble sort-algoritme? 898 01:02:47,000 --> 01:02:50,000 [Kevin] In principe gaat het door alles in de lijst. 899 01:02:50,000 --> 01:02:52,000 Er wordt gekeken naar de eerste twee. 900 01:02:52,000 --> 01:02:55,000 Als de eerste groter is dan de tweede het swaps hen. 901 01:02:55,000 --> 01:02:58,000 Dan vergelijkt tweede en derde, hetzelfde, swaps, 902 01:02:58,000 --> 01:03:00,000 derde en vierde, helemaal naar beneden. 903 01:03:00,000 --> 01:03:03,000 Grotere aantallen zal volgen tot het einde. 904 01:03:03,000 --> 01:03:07,000 En na hoeveel lussen je klaar bent. 905 01:03:07,000 --> 01:03:11,000 Precies, dus wat Kevin zei is dat we kijken naar grotere aantallen 906 01:03:11,000 --> 01:03:15,000 bubble tot het einde van de array. 907 01:03:15,000 --> 01:03:19,000 Bijvoorbeeld, vind je het erg loopt ons door dit voorbeeld als dit ons aanbod? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Je neemt 2 en 3. 909 01:03:21,000 --> 01:03:23,000 3 is groter dan 2, dus je ruilen. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Juist, dus we wisselen deze, en dus krijgen we 2, 3, 6, 4 en 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Dan moet je vergelijken met de 3 en 6. 912 01:03:31,000 --> 01:03:33,000 3 is kleiner dan 6, dus je laat ze, 913 01:03:33,000 --> 01:03:37,000 en 6 en 4, zou je ruilen, want 4 is kleiner dan 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Juist, dus ik krijg 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] En 9 is groter dan 6, dus laat je het. 916 01:03:46,000 --> 01:03:48,000 En dat je terug zou gaan door het weer. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Ben ik gedaan op dit punt? >> [Kevin] Nee. 918 01:03:50,000 --> 01:03:52,000 En waarom ben ik nog niet klaar op dit punt? 919 01:03:52,000 --> 01:03:54,000 Omdat het lijkt erop dat mijn array wordt gesorteerd. Ik ben op zoek naar het. 920 01:03:54,000 --> 01:03:57,000 [Kevin] gaan door het weer en zorg ervoor dat er niet meer swaps 921 01:03:57,000 --> 01:04:00,000 voordat u volledig kunt stoppen. 922 01:04:00,000 --> 01:04:04,000 Precies, dus je moet blijven gaan door en zorg ervoor dat er geen swaps 923 01:04:04,000 --> 01:04:06,000 die u kunt maken op dit punt. 924 01:04:06,000 --> 01:04:08,000 Het was echt gewoon geluk, zoals je zei, dat we uiteindelijk 925 01:04:08,000 --> 01:04:12,000 alleen te hoeven 1 pas te maken door en we zijn gesorteerd. 926 01:04:12,000 --> 01:04:16,000 Maar om dit te doen in het algemene geval zullen we eigenlijk om dit te doen over en weer. 927 01:04:16,000 --> 01:04:20,000 En in feite was dit een voorbeeld van het beste geval, 928 01:04:20,000 --> 01:04:24,000 zoals we zagen in het probleem. 929 01:04:24,000 --> 01:04:28,000 We zagen dat de best mogelijke zaak werd n. 930 01:04:28,000 --> 01:04:32,000 We gingen door de array 1 keer. 931 01:04:32,000 --> 01:04:35,000 Wat is het ergste geval voor dit algoritme? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 En wat betekent dat eruit? Wat zou een array eruit dat zou n ² tijd? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [onverstaanbaar] gesorteerd. 935 01:04:43,000 --> 01:04:51,000 Precies, dus als ik had de array 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 eerst de 9 zou zeepbel helemaal naar boven. 937 01:04:54,000 --> 01:04:59,000 Na 1 iteratie we hebben 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Dan zou de 7 borrelen, 6, 5, 2, 7, 9 enzovoort, enzovoort. 939 01:05:07,000 --> 01:05:13,000 >> We zouden moeten gaan door de hele array n keer, 940 01:05:13,000 --> 01:05:16,000 en je kunt eigenlijk krijgen iets nauwkeuriger zijn dan deze 941 01:05:16,000 --> 01:05:23,000 want zodra we verhuisd de 9 helemaal tot in zijn laatste mogelijke positie 942 01:05:23,000 --> 01:05:26,000 we weten dat we nooit meer te vergelijken met dat element. 943 01:05:26,000 --> 01:05:29,000 Zodra we beginnen borrelen de 7-up 944 01:05:29,000 --> 01:05:35,000 we weten dat we kunnen stoppen wanneer de 7 is vlak voor de 9 945 01:05:35,000 --> 01:05:37,000 omdat we al vergeleken de 9 aan. 946 01:05:37,000 --> 01:05:46,000 Als je dit op een slimme manier is het niet echt, denk ik, dat veel tijd. 947 01:05:46,000 --> 01:05:49,000 Je gaat niet om alle mogelijke [onverstaanbaar] combinaties vergelijken 948 01:05:49,000 --> 01:05:55,000 elke keer je door elke iteratie. 949 01:05:55,000 --> 01:05:59,000 Maar toch, als we het over deze bovengrens we zeggen dat 950 01:05:59,000 --> 01:06:04,000 u op zoek bent naar n ² vergelijkingen helemaal door. 951 01:06:04,000 --> 01:06:12,000 >> Laten we terug gaan, en aangezien we beginnen om een ​​beetje weinig tijd 952 01:06:12,000 --> 01:06:15,000 Ik zou zeggen dat je zeker moet gaan door middel van de rest van deze tabel, 953 01:06:15,000 --> 01:06:17,000 vul het allemaal uit. 954 01:06:17,000 --> 01:06:20,000 Denk aan voorbeelden. Denk aan concrete voorbeelden. 955 01:06:20,000 --> 01:06:22,000 Dat is echt handig en nuttig om te doen. 956 01:06:22,000 --> 01:06:25,000 Trek het uit. 957 01:06:25,000 --> 01:06:28,000 Dit is het soort tabel die als je door in de informatica 958 01:06:28,000 --> 01:06:32,000 moet je echt beginnen met deze uit het hoofd te leren kennen. 959 01:06:32,000 --> 01:06:34,000 Dit zijn de soort vragen krijg je in interviews. 960 01:06:34,000 --> 01:06:36,000 Dit zijn allerlei dingen die goed zijn om te weten, 961 01:06:36,000 --> 01:06:41,000 en na te denken over de rand gevallen, echt uitzoeken hoe te denken over 962 01:06:41,000 --> 01:06:45,000 wetende dat voor bubble het slechtst mogelijke array te sorteren 963 01:06:45,000 --> 01:06:52,000 sorteren daarmee is er een die in omgekeerde volgorde. 964 01:06:52,000 --> 01:06:58,000 >> Pointers. Laten we een beetje praten over pointers. 965 01:06:58,000 --> 01:07:03,000 In de laatste paar minuten hebben we hier 966 01:07:03,000 --> 01:07:11,000 Ik weet dat dit iets is, samen met file I / O, dat is vrij nieuw. 967 01:07:11,000 --> 01:07:19,000 Als we spreken over pointers de reden dat we willen praten over pointers 968 01:07:19,000 --> 01:07:24,000 is omdat men, wanneer we werken in C 969 01:07:24,000 --> 01:07:33,000 we zijn echt op een vrij laag niveau in vergelijking met de meeste moderne programmeertalen. 970 01:07:33,000 --> 01:07:38,000 We zijn eigenlijk in staat om de variabelen in het geheugen te manipuleren, 971 01:07:38,000 --> 01:07:43,000 erachter te komen waar ze eigenlijk gelegen binnen onze RAM. 972 01:07:43,000 --> 01:07:46,000 Als je eenmaal hebt gegaan op besturingssysteem klassen zie je nemen 973 01:07:46,000 --> 01:07:48,000 dat dat, opnieuw, een soort van abstractie. 974 01:07:48,000 --> 01:07:50,000 Dat is niet echt het geval. 975 01:07:50,000 --> 01:07:52,000 We hebben virtueel geheugen, dat die details verbergt van ons. 976 01:07:52,000 --> 01:07:58,000 >> Maar voor nu kun je ervan uitgaan dat als je een programma, 977 01:07:58,000 --> 01:08:02,000 bijvoorbeeld wanneer u begint met het runnen van uw Caesar cipher-programma- 978 01:08:02,000 --> 01:08:06,000 Ik kom terug te schakelen naar mijn iPad echt snel- 979 01:08:06,000 --> 01:08:12,000 dat aan het begin van uw programma, als je, laten we zeggen, 980 01:08:12,000 --> 01:08:15,000 4 GB RAM op uw laptop, 981 01:08:15,000 --> 01:08:21,000 krijg je gereserveerd dit stuk, en we zullen dit RAM bellen. 982 01:08:21,000 --> 01:08:25,000 En het begint op een plaats waar we gaan op 0 te bellen, 983 01:08:25,000 --> 01:08:30,000 en het eindigt op een plaats die we bellen 4 gigabyte. 984 01:08:30,000 --> 01:08:37,000 Ik kan echt niet schrijven. Man, is dat gehackt. 985 01:08:37,000 --> 01:08:40,000 Wanneer uw programma wordt uitgevoerd 986 01:08:40,000 --> 01:08:44,000 het besturingssysteem kerft omhoog RAM, 987 01:08:44,000 --> 01:08:51,000 en specificeert de verschillende segmenten voor verschillende delen van het programma om te wonen 988 01:08:51,000 --> 01:08:58,000 Hier beneden dit gebied is een soort van niemandsland. 989 01:08:58,000 --> 01:09:02,000 Als je naar een beetje verder hier 990 01:09:02,000 --> 01:09:05,000 je hebt eigenlijk kreeg de plaats waar 991 01:09:05,000 --> 01:09:09,000 de code voor uw programma leven. 992 01:09:09,000 --> 01:09:13,000 Dat de werkelijke binaire code, die uitvoerbaar bestand daadwerkelijk wordt in het geheugen geladen 993 01:09:13,000 --> 01:09:17,000 wanneer u een programma, en het leeft in de code-segment. 994 01:09:17,000 --> 01:09:22,000 En als je het programma uitvoert kijkt de processor naar deze code segment 995 01:09:22,000 --> 01:09:24,000 om erachter te komen wat is de volgende instructie? 996 01:09:24,000 --> 01:09:27,000 Wat is de volgende regel code moet ik uitvoeren? 997 01:09:27,000 --> 01:09:31,000 >> Er is ook een data-segment, en dit is waar die string constanten 998 01:09:31,000 --> 01:09:34,000 krijgen opgeslagen die u hebt gebruikt. 999 01:09:34,000 --> 01:09:42,000 En dan verder op er is een plaats genaamd de heap. 1000 01:09:42,000 --> 01:09:46,000 We openen het geheugen daar door het gebruik van malloc, 1001 01:09:46,000 --> 01:09:49,000 en dan richting de top van uw programma 1002 01:09:49,000 --> 01:09:52,000 er is de stapel, 1003 01:09:52,000 --> 01:09:57,000 en dat is waar we al speelt voor het grootste deel van het begin. 1004 01:09:57,000 --> 01:09:59,000 Dit is niet op schaal of iets. 1005 01:09:59,000 --> 01:10:03,000 Een groot deel van deze machine is zeer afhankelijk is, 1006 01:10:03,000 --> 01:10:10,000 besturingssysteem afhankelijk, maar dit is relatief hoe de dingen te krijgen chunked omhoog. 1007 01:10:10,000 --> 01:10:17,000 Wanneer u een programma uitvoert en declareer je een variabele genaamd x- 1008 01:10:17,000 --> 01:10:27,000 Ik ga naar een ander vak te tekenen beneden, en dit gaat worden RAM ook. 1009 01:10:27,000 --> 01:10:29,000 En ik ga kijken. 1010 01:10:29,000 --> 01:10:34,000 We trekken gekartelde lijnen om aan te geven dit is slechts een klein deel van RAM-geheugen 1011 01:10:34,000 --> 01:10:38,000 en niet alles naarmate we bovenaan. 1012 01:10:38,000 --> 01:10:43,000 >> Als ik verklaar een integer variabele genaamd x, 1013 01:10:43,000 --> 01:10:49,000 dan wat ik eigenlijk krijgen is een mapping 1014 01:10:49,000 --> 01:10:54,000 dat is opgeslagen in het symbool tabel van mijn programma 1015 01:10:54,000 --> 01:11:00,000 dat verbindt de naam x om deze regio van het geheugen dat ik heb getekend 1016 01:11:00,000 --> 01:11:03,000 hier tussen de verticale spijlen. 1017 01:11:03,000 --> 01:11:08,000 Als ik een regel code in mijn programma dat zegt x = 7 1018 01:11:08,000 --> 01:11:15,000 de processor weet "Oh, oke, ik weet dat x leeft op deze locatie in het geheugen." 1019 01:11:15,000 --> 01:11:25,000 "Ik ga om verder te gaan en daar schrijf een 7." 1020 01:11:25,000 --> 01:11:28,000 Hoe weet het welke locatie dit is in het geheugen? 1021 01:11:28,000 --> 01:11:30,000 Nou, dat is allemaal gedaan tijdens het compileren. 1022 01:11:30,000 --> 01:11:34,000 De compiler zorgt verdeling waarbij elk van de variabelen ga 1023 01:11:34,000 --> 01:11:40,000 door een speciaal mapping of niet verbinden van de stippen 1024 01:11:40,000 --> 01:11:43,000 tussen een symbool en waar het heen gaat, een variabele naam 1025 01:11:43,000 --> 01:11:46,000 en waar het heen gaat om te leven in het geheugen. 1026 01:11:46,000 --> 01:11:50,000 Maar het blijkt dat we eigenlijk kunnen openen in onze programma's ook. 1027 01:11:50,000 --> 01:11:55,000 Dit wordt belangrijk wanneer we beginnen te praten over een aantal van de data structuren, 1028 01:11:55,000 --> 01:11:58,000 Dit is een concept dat we gaan later in te voeren. 1029 01:11:58,000 --> 01:12:09,000 >> Maar voor nu, wat je kan weten is dat ik kan een pointer naar deze locatie, x. 1030 01:12:09,000 --> 01:12:12,000 Zo kan ik een pointer variabele. 1031 01:12:12,000 --> 01:12:16,000 Wanneer we een pointer variabele te maken gebruiken we de ster notatie. 1032 01:12:16,000 --> 01:12:21,000 In dit geval zegt dat ik ga een pointer te creëren om een ​​int. 1033 01:12:21,000 --> 01:12:24,000 Het is een soort net als elke andere. 1034 01:12:24,000 --> 01:12:27,000 We geven het een variabele als y, 1035 01:12:27,000 --> 01:12:32,000 en dan zetten we het gelijk is aan het adres, naar een adres. 1036 01:12:32,000 --> 01:12:38,000 In dit geval kunnen we wijzen op y x 1037 01:12:38,000 --> 01:12:43,000 door het nemen van het adres van x, dat we met deze ampersand, 1038 01:12:43,000 --> 01:12:55,000 en dan zetten we y te wijzen op het. 1039 01:12:55,000 --> 01:12:59,000 Wat dit betekent in essentie is als we kijken naar onze RAM 1040 01:12:59,000 --> 01:13:02,000 dit leidt tot een afzonderlijke variabele beschouwd. 1041 01:13:02,000 --> 01:13:04,000 Het zal noemen y, 1042 01:13:04,000 --> 01:13:06,000 en wanneer deze lijn van code wordt uitgevoerd 1043 01:13:06,000 --> 01:13:13,000 het is eigenlijk gaat om een ​​kleine pointer die meestal stellen we als een pijl te creëren, 1044 01:13:13,000 --> 01:13:15,000 en bevat y te wijzen x. 1045 01:13:15,000 --> 01:13:17,000 Ja. 1046 01:13:17,000 --> 01:13:19,000 [Student] Als x is al een pointer, zou je gewoon doen 1047 01:13:19,000 --> 01:13:22,000 int * y = x plaats van het teken? 1048 01:13:22,000 --> 01:13:24,000 Ja. 1049 01:13:24,000 --> 01:13:27,000 Als x is al een pointer, dan kunt u 2 pointers aan elkaar gelijk, 1050 01:13:27,000 --> 01:13:30,000 waarbij y niet wijzen x, 1051 01:13:30,000 --> 01:13:34,000 maar het zou wijzen op wat x wijst. 1052 01:13:34,000 --> 01:13:37,000 Helaas, we hebben geen tijd meer. 1053 01:13:37,000 --> 01:13:44,000 >> Wat ik zou zeggen op dit moment, kunnen we over praten niet beschikbaar, 1054 01:13:44,000 --> 01:13:49,000 maar ik zou zeggen aan de slag door dit probleem, # 14. 1055 01:13:49,000 --> 01:13:53,000 Je kunt zien dat er hier al een beetje voor u ingevuld. 1056 01:13:53,000 --> 01:13:57,000 Je kunt zien dat wanneer we verklaren 2 pointers, int * x en * y, 1057 01:13:57,000 --> 01:14:01,000 en merk op dat wijzen de * bij de variabele was iets dat werd gedaan vorig jaar. 1058 01:14:01,000 --> 01:14:05,000 Het blijkt dat dit is vergelijkbaar met wat we doen dit jaar. 1059 01:14:05,000 --> 01:14:11,000 Het maakt niet uit waar je schrijft de * als je verklaren de aanwijzer. 1060 01:14:11,000 --> 01:14:17,000 Maar we hebben geschreven * naast het type 1061 01:14:17,000 --> 01:14:24,000 want dat maakt het heel duidelijk dat je waarbij een pointer variabele. 1062 01:14:24,000 --> 01:14:27,000 Je kunt zien dat waarbij de 2 pointers geeft ons 2 dozen. 1063 01:14:27,000 --> 01:14:31,000 Hier toen we x gelijk aan malloc 1064 01:14:31,000 --> 01:14:34,000 wat dit zegt is vernietiging geheugen in de heap. 1065 01:14:34,000 --> 01:14:41,000 Dit doosje hier, deze cirkel, bevindt zich op de heap. 1066 01:14:41,000 --> 01:14:43,000 X wijst ernaar. 1067 01:14:43,000 --> 01:14:46,000 Merk op dat y nog niet wijst naar iets. 1068 01:14:46,000 --> 01:14:50,000 Om geheugen naar het nummer 42 slaan in x 1069 01:14:50,000 --> 01:14:55,000 we zouden gebruiken wat notatie? 1070 01:14:55,000 --> 01:14:59,000 [Student] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Precies, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Dat betekent volg de pijl en gooi 42 in daar. 1073 01:15:06,000 --> 01:15:09,000 Hier waar we y en x set hebben we y wijst naar x. 1074 01:15:09,000 --> 01:15:13,000 Nogmaals, dit is net als wat Kevin zei waar we y gelijk aan x. 1075 01:15:13,000 --> 01:15:15,000 Y verwijst niet naar x. 1076 01:15:15,000 --> 01:15:19,000 Integendeel, het is wijzen op wat wijst x zo goed. 1077 01:15:19,000 --> 01:15:24,000 >> En dan tot slot in deze laatste box zijn er 2 mogelijke dingen die we konden doen. 1078 01:15:24,000 --> 01:15:28,000 Een daarvan is dat we kunnen zeggen * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Het andere ding is dat we kunnen zeggen-Alex, weet je wat we hier kunnen doen? 1080 01:15:33,000 --> 01:15:37,000 Je zou kunnen zeggen * x = 13 of- 1081 01:15:37,000 --> 01:15:41,000 [Student] Je zou kunnen zeggen int wat dan ook. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Als dit werd aangeduid als een int variabele die we konden doen. 1083 01:15:45,000 --> 01:15:49,000 We kunnen ook zeggen * y = 13, omdat ze beiden wijzen naar dezelfde plek, 1084 01:15:49,000 --> 01:15:51,000 dus we konden gebruik maken van een van beide variabele om er te komen. 1085 01:15:51,000 --> 01:15:56,000 Ja. >> [Student] Hoe zou het eruit als we gewoon zeggen dat int x is 13? 1086 01:15:56,000 --> 01:16:00,000 Dat zou verklaren een nieuwe variabele genaamd x, wat niet zou werken. 1087 01:16:00,000 --> 01:16:04,000 We zouden een botsing, omdat we verklaard x om een ​​pointer hier niet komen. 1088 01:16:04,000 --> 01:16:10,000 [Student] Als we net deze verklaring van zelf hoe zou het eruit zien in termen van de cirkel? 1089 01:16:10,000 --> 01:16:14,000 Als we x = 13 dan zouden we een doos, en in plaats van een pijl 1090 01:16:14,000 --> 01:16:16,000 die uit de doos we trekken het als gewoon een 13. 1091 01:16:16,000 --> 01:16:19,000 [Student] In de doos. Oke. 1092 01:16:19,000 --> 01:16:24,000 >> Bedankt voor het kijken, en veel geluk op Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]