1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] DAVID J. MALAN: Oke, dit is CS50, en dit is de 2 00:00:11,630 --> 00:00:14,790 begin van week twee. 3 00:00:14,790 --> 00:00:16,300 Dank u. 4 00:00:16,300 --> 00:00:19,000 Laten we hier beginnen met een telefoontje. 5 00:00:19,000 --> 00:00:30,005 Ik sta op het 617-BUG-CS50 kiezen. 6 00:00:30,005 --> 00:00:31,230 CS50: Dit is CS50. 7 00:00:31,230 --> 00:00:33,930 Voor Shuttle Boy, drukt u op 1. 8 00:00:33,930 --> 00:00:36,660 Om opnieuw te beginnen, drukt u op 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. MALAN: Dus hij zei voor Shuttle Boy, drukt u op 1. 10 00:00:38,180 --> 00:00:41,560 Dus we gaan op 1 te drukken. 11 00:00:41,560 --> 00:00:43,230 CS50: Wat is je afkomst? 12 00:00:43,230 --> 00:00:45,340 Voor quad, drukt u op 1. 13 00:00:45,340 --> 00:00:47,080 Mather, drukt u op 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, drukt u op 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, drukt u op 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, drukt u op 5. 17 00:00:53,210 --> 00:00:55,660 Om opnieuw te beginnen, drukt u op 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. MALAN: We zullen op 1 te drukken voor quad. 19 00:00:59,590 --> 00:01:03,610 CS50: Volgende shuttle gaat dit zeer minuten om 1:10 PM, en 20 00:01:03,610 --> 00:01:09,820 dan op 13:20, 1:30 PM, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 Dit is CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. MALAN: Dus dit is CS50's stem. 23 00:01:15,570 --> 00:01:18,030 En het is een voorbeeld van het soort afstudeerprojecten, voor 24 00:01:18,030 --> 00:01:19,500 Zo kunt u uit de richting van bijten 25 00:01:19,500 --> 00:01:20,600 het einde van het semester. 26 00:01:20,600 --> 00:01:23,840 Bijvoorbeeld dat shuttleboy.cs50.net bestaat - 27 00:01:23,840 --> 00:01:28,200 eigenlijk een project dat ik voor het eerst schreef na het nemen van CS51 28 00:01:28,200 --> 00:01:29,740 terug toen ik nog een undergraduate. 29 00:01:29,740 --> 00:01:32,250 En de inspiratie was hier toen, alles wat ze hadden was 30 00:01:32,250 --> 00:01:34,320 de gedrukte shuttle bus schema's, en er was geen 31 00:01:34,320 --> 00:01:35,970 begrip op te zoeken online. 32 00:01:35,970 --> 00:01:38,730 En dus heb ik soort van duif in een weekend, gegoten door de 33 00:01:38,730 --> 00:01:41,460 gedrukte schema, en omgezet naar een computerprogramma. 34 00:01:41,460 --> 00:01:43,790 Op het moment, het computerprogramma geschreven toevallig 35 00:01:43,790 --> 00:01:47,110 in C. En je eigenlijk liep het door het intikken van en naar het vliegveld Jongen op een 36 00:01:47,110 --> 00:01:48,600 knipperende prompt zoals we al tot nu toe doen. 37 00:01:48,600 --> 00:01:50,450 Maar in de loop van de jaren, is het uitgegroeid tot een instant 38 00:01:50,450 --> 00:01:51,390 messaging bot. 39 00:01:51,390 --> 00:01:53,970 Het is meer recent ontwikkelde zich tot deze website, in een 40 00:01:53,970 --> 00:01:57,720 SMS-tool, en in deze voice-tool. 41 00:01:57,720 --> 00:02:00,170 En dit is te wijzen op het soort dingen die je kunt 42 00:02:00,170 --> 00:02:02,380 doen voor jezelf eind semester. 43 00:02:02,380 --> 00:02:05,490 >> Zo is er, de SMS-versie van en naar het vliegveld Boy gebeurt 44 00:02:05,490 --> 00:02:06,510 om als volgt. 45 00:02:06,510 --> 00:02:10,880 Als op uw mobiele telefoon, kunt u een SMS-bericht naar 41411 en 46 00:02:10,880 --> 00:02:14,300 stuur dan het speciale symbool sboy, voor Shuttle Boy, 47 00:02:14,300 --> 00:02:18,350 gevolgd door A en B, waarbij A een oorsprong en B is een 48 00:02:18,350 --> 00:02:19,070 bestemming - 49 00:02:19,070 --> 00:02:21,030 bijvoorbeeld Boylston Space Quad - 50 00:02:21,030 --> 00:02:23,330 wat je moet terug binnen een paar seconden is een tekst 51 00:02:23,330 --> 00:02:25,820 bericht van en naar het vliegveld Boy vertelt u precies wanneer de 52 00:02:25,820 --> 00:02:28,990 komende shuttles zijn, vanaf dat punt A naar die 53 00:02:28,990 --> 00:02:29,640 punt B. 54 00:02:29,640 --> 00:02:32,510 En dit is een meer algemeen voorbeeld van wat bekend staat als 55 00:02:32,510 --> 00:02:33,920 met een API. 56 00:02:33,920 --> 00:02:36,930 >> Dus bijvoorbeeld, deze is vaak precies shuttleboy.cs50.net, de 57 00:02:36,930 --> 00:02:39,300 werkelijke web-based incarnatie van deze. 58 00:02:39,300 --> 00:02:42,480 Maar de gegevens die deze en andere apps onderstreept dat CS50 59 00:02:42,480 --> 00:02:45,560 heeft alle blootgesteld aan iedereen in de vorm 60 00:02:45,560 --> 00:02:49,340 van API's, application programming interfaces. 61 00:02:49,340 --> 00:02:52,220 En dat is gewoon een mooie manier om te zeggen dat we mensen willen op 62 00:02:52,220 --> 00:02:56,010 het internet en anderen hebben enige tijd het creëren van 63 00:02:56,010 --> 00:02:59,970 software die u kunt gebruiken om gegevens te grijpen van ons en 64 00:02:59,970 --> 00:03:02,510 dan bouw je eigen applicaties op de top 65 00:03:02,510 --> 00:03:03,840 van deze gegevensset. 66 00:03:03,840 --> 00:03:06,610 Dus bijvoorbeeld, dit naar het vliegveld Boy API pagina hier, die 67 00:03:06,610 --> 00:03:09,390 toevallig in de handleiding CS50 wezen documenten 68 00:03:09,390 --> 00:03:13,080 hoe u kunt gaan over het vragen CS50-servers voor gegevens. 69 00:03:13,080 --> 00:03:16,240 Bijvoorbeeld, als u bekend bent met CSV-bestanden, komma 70 00:03:16,240 --> 00:03:18,940 gescheiden waarden, dit zijn gewoon soort van quick and dirty 71 00:03:18,940 --> 00:03:20,310 Excel-achtige bestanden. 72 00:03:20,310 --> 00:03:23,110 Zo kunt u vragen naar het vliegveld Boy voor alle gegevens op alle van de 73 00:03:23,110 --> 00:03:25,090 huizen en hun GPS-coördinaten, en je krijgt 74 00:03:25,090 --> 00:03:27,300 terug, in wezen, een spreadsheet zoals dat 75 00:03:27,300 --> 00:03:30,820 kunt u dan lezen in een programma van uw eigen en dan 76 00:03:30,820 --> 00:03:33,250 het genereren van resultaten, zoals naar het vliegveld Boy zelf 77 00:03:33,250 --> 00:03:34,160 gebeurt moeten doen. 78 00:03:34,160 --> 00:03:37,030 Voor degenen die meer vertrouwd, meer moderne gegevens representaties 79 00:03:37,030 --> 00:03:39,420 onder meer JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Iets zal terugkomen om u te in de richting van 81 00:03:40,620 --> 00:03:41,720 het einde van het semester. 82 00:03:41,720 --> 00:03:45,440 >> Maar nogmaals, dit is slechts een van de vele van de eigen API's CS50's. 83 00:03:45,440 --> 00:03:48,320 En het spannende is nu, deze dagen, Facebook en 84 00:03:48,320 --> 00:03:51,110 Twitter en Google en vrijwel elke populaire website uit 85 00:03:51,110 --> 00:03:54,130 er moet een soort van API, wat betekent dat als je de 86 00:03:54,130 --> 00:03:56,620 documentatie op hun website, u zich aanmeldt voor een 87 00:03:56,620 --> 00:03:59,980 account, kunt u dan beginnen met het schrijven software op de top van 88 00:03:59,980 --> 00:04:03,680 welke hulpmiddelen of gegevens die onderneming daar biedt. 89 00:04:03,680 --> 00:04:06,210 En dus een van onze eigen onderwijs medemensen een paar jaar terug 90 00:04:06,210 --> 00:04:07,620 schreef een Mac-versie van deze. 91 00:04:07,620 --> 00:04:10,990 Dus op de link Mac hier linksboven, kunt u eigenlijk 92 00:04:10,990 --> 00:04:13,940 downloaden van een Mac OS-widget die op je eigen Mac aan de doen 93 00:04:13,940 --> 00:04:15,040 Dezelfde soort dingen. 94 00:04:15,040 --> 00:04:17,970 Dus het is allemaal over het bouwen op de top van datasets als deze. 95 00:04:17,970 --> 00:04:21,839 Maar meer op dat tegen het einde van het semester. 96 00:04:21,839 --> 00:04:25,780 >> Dus laten we duiken in heel snel een bug, alleen maar om soort van te krijgen 97 00:04:25,780 --> 00:04:27,990 dingen opgewarmd vandaag, en denk terug op een aantal van de 98 00:04:27,990 --> 00:04:29,660 dingen die we keken naar vorige week. 99 00:04:29,660 --> 00:04:32,840 In het bijzonder, laat me ga je gang en trek je, laten we zeggen, 100 00:04:32,840 --> 00:04:34,080 Dit voorbeeld. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, deze is beschikbaar op de website van de cursus als je wilt 102 00:04:37,500 --> 00:04:40,250 wilt downloaden en om je heen steken. 103 00:04:40,250 --> 00:04:43,520 Maar laten we inzoomen hier op dit vrij kort programma, en net 104 00:04:43,520 --> 00:04:46,550 een supersnelle samenvatting van enkele van de fundamentele bouwstenen die 105 00:04:46,550 --> 00:04:48,880 we echt gaan gewoon beginnen als vanzelfsprekend. 106 00:04:48,880 --> 00:04:51,860 >> Dus de blauwe spul, in de regels 1 tot en met 9, zijn slechts 107 00:04:51,860 --> 00:04:53,670 softbal vragen. 108 00:04:53,670 --> 00:04:54,590 Dus dit zijn alleen maar de commentaren. 109 00:04:54,590 --> 00:04:56,230 Ze hebben geen functionele betekenis. 110 00:04:56,230 --> 00:04:58,460 Maar ze zijn opmerkingen in de zin dat ze merkt op dat 111 00:04:58,460 --> 00:05:02,010 Ik, de mens, maakte mezelf zodat in lezing en na 112 00:05:02,010 --> 00:05:04,340 lezing, kan ik eigenlijk herinneren wat dit programma 113 00:05:04,340 --> 00:05:07,120 doet zonder dat er doorheen lijn gelezen door lijn en 114 00:05:07,120 --> 00:05:08,990 recreëren geschiedenis in mijn gedachten. 115 00:05:08,990 --> 00:05:11,000 Bovendien, als ik de hand van dit programma aan iemand anders, zoals 116 00:05:11,000 --> 00:05:14,420 u, het is veel duidelijker voor u, als gevolg van opmerkingen als deze, 117 00:05:14,420 --> 00:05:16,680 wat het programma eigenlijk aan het doen is, of op zijn minst wat de 118 00:05:16,680 --> 00:05:18,210 programma's moeten doen. 119 00:05:18,210 --> 00:05:20,760 Of het klopt is een andere zaak. 120 00:05:20,760 --> 00:05:25,040 Nu, in C, met multi-line opmerkingen herinneren dat on line 121 00:05:25,040 --> 00:05:27,880 een is hier het magische symbool, / *. 122 00:05:27,880 --> 00:05:30,380 Het betekent hier komt de start van een reactie. 123 00:05:30,380 --> 00:05:34,560 En Nothing Else Matters totdat je het einde bereikt terminator, 124 00:05:34,560 --> 00:05:36,700 die * / het tegenovergestelde. 125 00:05:36,700 --> 00:05:39,120 Dus het feit dat ik 80-paar vreemde sterren hebben hier van 126 00:05:39,120 --> 00:05:41,550 van links naar rechts is eigenlijk gewoon een esthetische detail. 127 00:05:41,550 --> 00:05:43,370 Heeft geen functionele betekenis. 128 00:05:43,370 --> 00:05:44,490 >> Nu hoe over lijn 11? 129 00:05:44,490 --> 00:05:46,940 Wat betekent dit in lekentaal? 130 00:05:51,560 --> 00:05:52,540 Wat is dat? 131 00:05:52,540 --> 00:05:54,280 PUBLIEK: Inclusief de standaard. 132 00:05:54,280 --> 00:05:54,740 DAVID J. MALAN: OK, goed. 133 00:05:54,740 --> 00:05:57,500 Omvat dus de stdio.h bibliotheek. 134 00:05:57,500 --> 00:05:58,230 Dus wat betekent dat? 135 00:05:58,230 --> 00:06:01,570 Nou, in dat bestand, stdio.h, zijn een hele hoop 136 00:06:01,570 --> 00:06:03,320 functie verklaringen - 137 00:06:03,320 --> 00:06:05,290 dat wil zeggen, code dat iemand anders heeft geschreven. 138 00:06:05,290 --> 00:06:08,160 En een perfect voorbeeld van een functie die is opgegeven in 139 00:06:08,160 --> 00:06:10,250 stdio.h is - 140 00:06:10,250 --> 00:06:11,980 die favoriet nu? 141 00:06:11,980 --> 00:06:14,300 Dus printf, tot een van de meest voorkomende zeker gebruiken, 142 00:06:14,300 --> 00:06:15,840 vroeg op, uit die bibliotheek is er. 143 00:06:15,840 --> 00:06:19,290 Als ik uitsluiten dat regel van de code, wordt Clang gaat schreeuwen 144 00:06:19,290 --> 00:06:22,550 bij mij iets over het gebruik van een niet-verklaarde symbool. 145 00:06:22,550 --> 00:06:24,930 Zwartwerk iets is waarschijnlijk het sleutelwoord, want 146 00:06:24,930 --> 00:06:27,770 We hebben niet aan de compiler wat printf eruit ziet 147 00:06:27,770 --> 00:06:29,230 graag tenzij we onder die lijn. 148 00:06:29,230 --> 00:06:31,830 En meer naar de aarde, echt, wat die lijn zegt is 149 00:06:31,830 --> 00:06:34,890 open dat bestand, stdio.h, waar het ook is op de server 150 00:06:34,890 --> 00:06:38,200 harde schijf, of het apparaat de harde schijf, en copy-paste het 151 00:06:38,200 --> 00:06:40,240 daar in mijn dossier, zonder dat ik 152 00:06:40,240 --> 00:06:41,730 dat u dat handmatig doen. 153 00:06:41,730 --> 00:06:44,420 >> Nu, als we hier naar beneden naar de belangrijkste, het duurde niet lang we beginnen 154 00:06:44,420 --> 00:06:46,900 plagen elkaar wat int en wat leegte is. 155 00:06:46,900 --> 00:06:48,430 Maar voor nu, laten we eens kijken naar de drie lijnen 156 00:06:48,430 --> 00:06:50,350 binnen 15 tot 17. 157 00:06:50,350 --> 00:06:52,250 Dit hier heb ik claimen als buggy. 158 00:06:52,250 --> 00:06:54,900 Lijn 7 in mijn comments zegt: "Moet afdrukken 10 159 00:06:54,900 --> 00:06:59,410 sterretjes maar niet. "Waarom is dit niet af te drukken, in feite, 160 00:06:59,410 --> 00:07:01,097 10 van zulke sterren? 161 00:07:01,097 --> 00:07:02,347 PUBLIEK: [onverstaanbaar]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. MALAN: Precies. 163 00:07:05,800 --> 00:07:08,720 Dus merken dat we beginnen te tellen vanaf 0. 164 00:07:08,720 --> 00:07:10,780 En dit is eigenlijk een conventie in de programmering en 165 00:07:10,780 --> 00:07:13,230 informatica meer in het algemeen, om te beginnen te tellen 166 00:07:13,230 --> 00:07:14,610 van 0 in plaats van 1. 167 00:07:14,610 --> 00:07:16,690 En dit eigenlijk alleen voort uit het feit dat voor 168 00:07:16,690 --> 00:07:18,940 Bijvoorbeeld, wanneer we acht mensen hadden op het podium, bij het 169 00:07:18,940 --> 00:07:20,680 niemand hun hand te verhogen, waren ze 170 00:07:20,680 --> 00:07:22,340 Alle effectief nullen. 171 00:07:22,340 --> 00:07:24,260 En dus het is gewoon een soort van een computer conventie zo, 172 00:07:24,260 --> 00:07:26,030 daarom beginnen te tellen vanaf 0. 173 00:07:26,030 --> 00:07:29,130 Als dat het laagste nummer kunt u vertegenwoordigen in binaire. 174 00:07:29,130 --> 00:07:32,270 >> Dus hier zijn we begonnen met het initialiseren van i op 0. 175 00:07:32,270 --> 00:07:34,230 We hebben ingesteld i gelijk is aan 0. 176 00:07:34,230 --> 00:07:37,780 Maar toen maakte ik deze fout hier, zeggende: i kleiner is dan of 177 00:07:37,780 --> 00:07:38,820 gelijk aan 10. 178 00:07:38,820 --> 00:07:41,700 Maar als je denkt dat door middel van, als ik beginnen bij 0 en dan ga ik 179 00:07:41,700 --> 00:07:46,410 tot 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ik echt gaat 180 00:07:46,410 --> 00:07:49,980 afdrukken 11 sterren om het scherm, want ik heb gestegen 181 00:07:49,980 --> 00:07:52,410 tot en gelijk aan 10. 182 00:07:52,410 --> 00:07:55,090 Dus de makkelijke oplossing hier is wat dan? 183 00:07:55,090 --> 00:07:56,070 PUBLIEK: [onverstaanbaar]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. MALAN: Gewoon te veranderen in minder dan. 185 00:07:57,350 --> 00:07:59,700 Als je echt wilt, kun je dit doen. 186 00:07:59,700 --> 00:08:01,370 Maar in het algemeen, dat is afgekeurd. 187 00:08:01,370 --> 00:08:04,020 En zo begint te tellen vanaf 0 is gewoon iets wat je moet 188 00:08:04,020 --> 00:08:05,510 meestal wennen. 189 00:08:05,510 --> 00:08:07,810 Nu, hoe zit het met deze hele constructie in en van zichzelf? 190 00:08:07,810 --> 00:08:10,640 Deze lijn 15 demarks een for-lus. 191 00:08:10,640 --> 00:08:12,510 Dus is geen functie. 192 00:08:12,510 --> 00:08:13,640 Het is gewoon een statement. 193 00:08:13,640 --> 00:08:16,180 Het is een looping construct, zoals we zagen in Scratch. 194 00:08:16,180 --> 00:08:17,600 En het bestaat uit drie delen. 195 00:08:17,600 --> 00:08:19,740 Merk op dat er het eerste deel te 196 00:08:19,740 --> 00:08:21,350 links van de puntkomma. 197 00:08:21,350 --> 00:08:24,200 Er is het middendeel tussen de twee puntkomma. 198 00:08:24,200 --> 00:08:26,250 En dan is er de rechterhand naar rechts 199 00:08:26,250 --> 00:08:27,640 van de tweede puntkomma. 200 00:08:27,640 --> 00:08:31,822 Nu, de eerste van deze doet wat? 201 00:08:31,822 --> 00:08:33,679 PUBLIEK: [onverstaanbaar]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. MALAN: Terug daar? 203 00:08:34,270 --> 00:08:34,816 Ja? 204 00:08:34,816 --> 00:08:35,980 PUBLIEK: Initialisatie. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. MALAN: Initialisatie. 206 00:08:36,850 --> 00:08:37,840 Dus wat betekent dit? 207 00:08:37,840 --> 00:08:40,690 Wij hebben verklaard een variabele genaamd i. 208 00:08:40,690 --> 00:08:43,840 Het is van het type int, want ik heb aangegeven int i. 209 00:08:43,840 --> 00:08:46,470 En ik ben het initialiseren van i naar de waarde 0. 210 00:08:46,470 --> 00:08:47,730 Dus wat is dit eigenlijk zeggen? 211 00:08:47,730 --> 00:08:50,680 Het is effectief, zeggende tot de computer he, genoeg geef me 212 00:08:50,680 --> 00:08:53,660 geheugen, genoeg RAM-geheugen, een aantal passen, en zet dan de 213 00:08:53,660 --> 00:08:56,130 nummer 0 in een portie RAM geheugen. 214 00:08:56,130 --> 00:08:59,100 En even terzijde, hoe groot is een int meestal, in ieder geval binnen 215 00:08:59,100 --> 00:09:00,280 van het apparaat? 216 00:09:00,280 --> 00:09:01,000 PUBLIEK: 32 bit. 217 00:09:01,000 --> 00:09:01,670 DAVID J. MALAN: 32 bits. 218 00:09:01,670 --> 00:09:04,890 Dus dat betekent geef me 32 bits, ook wel bekend als 4 bytes, 219 00:09:04,890 --> 00:09:07,250 en dat de waarde 0 in, dat is vrij eenvoudig, omdat 220 00:09:07,250 --> 00:09:09,110 het betekent gewoon stellen alle bits op 0. 221 00:09:09,110 --> 00:09:11,690 >> Nu het tweede deel hier is de aandoening. 222 00:09:11,690 --> 00:09:14,590 En de toestand, zoals de naam al doet vermoeden, is wat wordt gecontroleerd 223 00:09:14,590 --> 00:09:18,100 opnieuw en opnieuw en opnieuw over de vraag of het waar is of onwaar. 224 00:09:18,100 --> 00:09:21,410 Dus dit is alleen maar te zeggen doet u het volgende regels code - 225 00:09:21,410 --> 00:09:23,950 namelijk lijn 16, want dat is de ingesprongen enige 226 00:09:23,950 --> 00:09:24,820 onder - 227 00:09:24,820 --> 00:09:26,980 zolang i kleiner is dan 10. 228 00:09:26,980 --> 00:09:30,520 En na elke iteratie door deze lus, doet u het 229 00:09:30,520 --> 00:09:33,840 incrementering, in dit geval i + +. 230 00:09:33,840 --> 00:09:35,580 Nu is het niet te zijn i + +. 231 00:09:35,580 --> 00:09:37,610 Het kan i -. 232 00:09:37,610 --> 00:09:39,860 Maar als ik dit deed, wat is het gedrag te gaan 233 00:09:39,860 --> 00:09:41,370 om van dit programma? 234 00:09:41,370 --> 00:09:42,290 PUBLIEK: Het gaat om een ​​oneindige lus. 235 00:09:42,290 --> 00:09:44,060 DAVID J. MALAN: Het gaat om een ​​soort van oneindige lus, 236 00:09:44,060 --> 00:09:47,720 tenzij we geluk na negatieve 2 miljard of zo. 237 00:09:47,720 --> 00:09:51,320 Misschien dingen zullen rond wikkelen, maar door de aard van de eindige 238 00:09:51,320 --> 00:09:53,930 aantal bits dat we hebben toegewezen aan een int. 239 00:09:53,930 --> 00:09:56,270 Maar het is zeker gaat om veel meer dan 10 herhalen en 240 00:09:56,270 --> 00:09:58,630 zeker meer dan 11 keer hier. 241 00:09:58,630 --> 00:10:02,240 >> En nu, net als een terzijde, beseffen dat i + + en i - 242 00:10:02,240 --> 00:10:04,420 zijn eigenlijk alleen maar syntactische suiker. 243 00:10:04,420 --> 00:10:07,210 Het is gewoon verkorte schrijfwijze voor wat een beetje meer 244 00:10:07,210 --> 00:10:08,720 expliciet geschreven als volgt: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Die gelijk is aan i + +. 247 00:10:13,460 --> 00:10:15,860 Het gewoon een soort van ziet er mooier zeggen i + +. 248 00:10:15,860 --> 00:10:17,490 Het is meer beknopt, beter leesbaar. 249 00:10:17,490 --> 00:10:19,030 En dus de meeste mensen doen dat in plaats. 250 00:10:19,030 --> 00:10:21,840 Maar dit is identiek functioneel aan 251 00:10:21,840 --> 00:10:22,900 wat we net zagen. 252 00:10:22,900 --> 00:10:27,770 Dus in het kort, de quick fix hier is gewoon om te zeggen dat ik herhalen 253 00:10:27,770 --> 00:10:30,690 van 0 helemaal tot minder dan 10. 254 00:10:30,690 --> 00:10:32,700 En dan zullen we inderdaad krijgen 10 sterren. 255 00:10:32,700 --> 00:10:33,430 >> Dus laten we dit proberen. 256 00:10:33,430 --> 00:10:35,310 Laat me het openstellen van de terminal aan de onderkant. 257 00:10:35,310 --> 00:10:37,420 Laat me gaan naar de map dat dit binnen 258 00:10:37,420 --> 00:10:40,030 En ik ga het handmatig compileren met Clang voor nu. 259 00:10:40,030 --> 00:10:44,880 En ik ga voor een compilatie als buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 En nu buggy1, waarom is er geen bestand of map 261 00:10:50,280 --> 00:10:52,026 genoemd buggy1? 262 00:10:52,026 --> 00:10:53,850 PUBLIEK: [onverstaanbaar]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. MALAN: Ja. 264 00:10:54,240 --> 00:10:55,420 Dus het is eigenlijk genoemd a.out. 265 00:10:55,420 --> 00:10:57,480 Dus roepen als je gewoon loopt Clang, waar Clang is het 266 00:10:57,480 --> 00:11:00,420 compiler, en je hoeft niet de naam die u wilt 267 00:11:00,420 --> 00:11:03,550 geven aan uw programma, gaat het om standaard op a.out. 268 00:11:03,550 --> 00:11:05,030 Dus inderdaad als ik dat doe ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 En ik didn't - de zwart-wit kwestie een aantal van 271 00:11:07,680 --> 00:11:08,840 u geconfronteerd is opgelost. 272 00:11:08,840 --> 00:11:10,670 Maar laat me dit doen. 273 00:11:10,670 --> 00:11:14,570 Daar hebben we a.out aan de linkerkant daar. 274 00:11:14,570 --> 00:11:17,360 Dus moeten we a.out lopen in plaats van buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Dus laat me ga je gang en doen. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Enter. 277 00:11:22,840 --> 00:11:26,160 En ik blijkbaar niet deed wat? 278 00:11:26,160 --> 00:11:26,620 PUBLIEK: Opslaan. 279 00:11:26,620 --> 00:11:27,390 DAVID J. MALAN: Bewaar mijn bestand. 280 00:11:27,390 --> 00:11:31,520 Dus dat is eenvoudig op te lossen door het raken van Control S, of ga naar 281 00:11:31,520 --> 00:11:33,450 Bestand,, Save zoals in de meeste programma's. 282 00:11:33,450 --> 00:11:36,360 Laat me hier naar beneden gaan, schakelt u het scherm opnieuw uit te voeren is. 283 00:11:36,360 --> 00:11:37,960 En er is nog een bug. 284 00:11:37,960 --> 00:11:41,618 Dus wat er gaande is - 285 00:11:41,618 --> 00:11:42,980 PUBLIEK: Je hebt niet compileren. 286 00:11:42,980 --> 00:11:44,040 DAVID J. MALAN: Ah, goed. 287 00:11:44,040 --> 00:11:45,010 Ik heb niet compileren. 288 00:11:45,010 --> 00:11:47,250 Als een idioot, ik ben op zoek naar de code om te zien wat er mis is. 289 00:11:47,250 --> 00:11:51,275 Dus clang buggy1.c, nu a.out. 290 00:11:51,275 --> 00:11:52,640 En oef, gered. 291 00:11:52,640 --> 00:11:55,090 >> Dus het ziet er een beetje lelijk omdat er geen nieuwe lijn 292 00:11:55,090 --> 00:11:55,970 overal in het programma. 293 00:11:55,970 --> 00:11:57,390 Maar nogmaals, dat is gewoon een esthetische detail. 294 00:11:57,390 --> 00:11:59,430 En tenminste als we tellen die uit, moeten we 295 00:11:59,430 --> 00:12:01,160 nu zie 10 zulke sterren. 296 00:12:01,160 --> 00:12:03,260 Nou, hoe zit het met deze tweede warming-up voorbeeld? 297 00:12:03,260 --> 00:12:07,750 Dus in buggy2, ik beweer dat deze versie ook, afgedrukt 298 00:12:07,750 --> 00:12:10,110 10 sterren, een per regel. 299 00:12:10,110 --> 00:12:12,340 Dus deze keer, ik heb een nieuwe regel karakter, alleen maar om 300 00:12:12,340 --> 00:12:13,520 dingen een beetje mooier. 301 00:12:13,520 --> 00:12:15,410 Maar in plaats daarvan wat ik krijg is het volgende. 302 00:12:15,410 --> 00:12:19,590 Dus laat me doen kletteren buggy2.c, Enter. 303 00:12:19,590 --> 00:12:21,790 Nu is het weer heet a.out. 304 00:12:21,790 --> 00:12:23,130 Enter. 305 00:12:23,130 --> 00:12:26,900 Ik zie slechts een nieuwe lijn, alleen het allerlaatste nieuwe lijn die 306 00:12:26,900 --> 00:12:29,370 beweegt mijn prompt naar de volgende regel. 307 00:12:29,370 --> 00:12:32,660 En toch duidelijk ik heb afdrukken *, dan is een nieuwe lijn, 308 00:12:32,660 --> 00:12:33,990 *, Dan is een nieuwe regel. 309 00:12:33,990 --> 00:12:35,490 Maar wat is de bug hier? 310 00:12:35,490 --> 00:12:35,974 Ja? 311 00:12:35,974 --> 00:12:37,224 PUBLIEK: [onverstaanbaar]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. MALAN: Precies. 313 00:12:40,470 --> 00:12:44,110 Dus in tegenstelling tot sommige talen, zoals Python, waar inspringen 314 00:12:44,110 --> 00:12:46,030 eigenlijk heeft functionele betekenis, in een 315 00:12:46,030 --> 00:12:47,150 taal als C - 316 00:12:47,150 --> 00:12:49,140 zoals we zullen zien, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 de inspringing is eigenlijk gewoon voor de mens 'voordeel. 318 00:12:51,940 --> 00:12:55,690 Dus het feit dat ik heb lijn 16 en 17 ingesprongen ziet er geweldig uit, 319 00:12:55,690 --> 00:12:57,530 maar heeft geen functionele betekenis. 320 00:12:57,530 --> 00:13:00,700 Als ik wil beide lijnen uit te voeren als onderdeel van de voor de 321 00:13:00,700 --> 00:13:05,140 lus, dan moet ik bijvoegen ze in accolades door dit te doen. 322 00:13:05,140 --> 00:13:08,540 U kunt alleen knippen die hoek en laat de accolades als 323 00:13:08,540 --> 00:13:10,036 wat is het geval? 324 00:13:10,036 --> 00:13:10,410 PUBLIEK: Slechts een lijn. 325 00:13:10,410 --> 00:13:11,130 DAVID J. MALAN: Slechts een regel. 326 00:13:11,130 --> 00:13:15,280 Dus dat is gewoon soort van een mooie soort syntax detail, zodat 327 00:13:15,280 --> 00:13:17,900 U verspilt geen tijd aan het schrijven drie lijnen, waarvan er twee 328 00:13:17,900 --> 00:13:20,040 accolades, om er maar een regel code te schrijven. 329 00:13:20,040 --> 00:13:21,650 Maar als u twee of meer lijnen, we 330 00:13:21,650 --> 00:13:22,860 inderdaad behoefte om dit te doen. 331 00:13:22,860 --> 00:13:24,210 >> Dus nu laat ik sla dit. 332 00:13:24,210 --> 00:13:27,140 Laat me gaan en opnieuw uitvoeren Clang. 333 00:13:27,140 --> 00:13:31,375 Laat me dan opnieuw uit te voeren a.out, en nu ik ze een per regel. 334 00:13:31,375 --> 00:13:33,670 Nu a.out weer soort stomme naam voor een programma. 335 00:13:33,670 --> 00:13:37,500 Hoe kan ik zien Clang om daadwerkelijk mij een bestandsnaam 336 00:13:37,500 --> 00:13:39,820 dat is meer gebruikersvriendelijk, zoals buggy2 zelf? 337 00:13:43,200 --> 00:13:44,466 Een beetje duidelijker? 338 00:13:44,466 --> 00:13:45,220 PUBLIEK: [onverstaanbaar]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. MALAN: OK, dus ik kan eigenlijk nemen de zeer 340 00:13:47,810 --> 00:13:51,000 gebruiksvriendelijke snelkoppeling en gewoon schrijven te maken buggy2. 341 00:13:51,000 --> 00:13:53,840 Ik weet niet op te geven. C in dit geval, en druk op Enter. 342 00:13:53,840 --> 00:13:58,530 En wat maakt doet is het compileert buggy2.c voor mij door 343 00:13:58,530 --> 00:14:00,260 vraagt ​​Clang om het te doen. 344 00:14:00,260 --> 00:14:05,100 In het bijzonder, het Clang noemt, loopt Clang met veel meer 345 00:14:05,100 --> 00:14:08,540 command-line argumenten of schakelaars dan ik eigenlijk nodig hebben. 346 00:14:08,540 --> 00:14:11,270 Na verloop van tijd zullen we terug te komen op wat al deze verschillende 347 00:14:11,270 --> 00:14:13,810 cryptische gekoppelde expressies betekent. 348 00:14:13,810 --> 00:14:16,910 Maar voor nu, dat is gewoon opslaan van mij de moeite van het 349 00:14:16,910 --> 00:14:19,600 hoeft te onthouden en die te typen al deze 350 00:14:19,600 --> 00:14:21,150 verschillende gekoppelde uitdrukkingen. 351 00:14:21,150 --> 00:14:23,240 En de bovenkant van het is uiteindelijk 352 00:14:23,240 --> 00:14:25,900 dat ik nu heb buggy2. 353 00:14:25,900 --> 00:14:27,480 Als ik dit wil doen handmatig, hoewel, ik 354 00:14:27,480 --> 00:14:28,775 kan in plaats daarvan dit doen - 355 00:14:28,775 --> 00:14:34,110 clang-o buggy2 en dan buggy2.c. 356 00:14:34,110 --> 00:14:37,980 En dat zal eveneens me een bestand met de naam buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Dus in het kort, Clang is de compiler. 358 00:14:39,710 --> 00:14:43,080 Maak bevindt zich op slechts een gebruiksvriendelijk hulpmiddel dat we meer gebruik maken van 359 00:14:43,080 --> 00:14:44,420 en omdat het begint gewoon 360 00:14:44,420 --> 00:14:47,330 vereenvoudigen dingen voor ons. 361 00:14:47,330 --> 00:14:49,430 En we terug 0, ten slotte. 362 00:14:49,430 --> 00:14:51,890 Voor nu, alleen maar omdat, maar we beginnen plagen dat deel 363 00:14:51,890 --> 00:14:52,930 vandaag en op woensdag. 364 00:14:52,930 --> 00:14:55,560 Hebt u vragen over een van deze? 365 00:14:55,560 --> 00:14:56,450 Ja? 366 00:14:56,450 --> 00:14:58,234 PUBLIEK: [onverstaanbaar] 367 00:14:58,234 --> 00:15:00,020 ls tussen aanhalingstekens daar? 368 00:15:00,020 --> 00:15:01,710 DAVID J. MALAN: OK. 369 00:15:01,710 --> 00:15:05,880 Toen ik typte ls tussen aanhalingstekens, dat was me het doen van wat magie 370 00:15:05,880 --> 00:15:07,160 achter de schermen om een ​​bug op te lossen. 371 00:15:07,160 --> 00:15:09,370 Ik vergat, zoals we al te vertellen velen van jullie op de 372 00:15:09,370 --> 00:15:11,600 discussieborden te doen - 373 00:15:11,600 --> 00:15:17,220 We doen dit nu - sudo yum-y-update appliance50. 374 00:15:17,220 --> 00:15:19,790 Oeps, dat dat juist is gespeld. 375 00:15:19,790 --> 00:15:23,240 Zodat het apparaat als een besturingssysteem. 376 00:15:23,240 --> 00:15:25,650 Het uitvoeren van dit besturingssysteem met de naam Fedora. 377 00:15:25,650 --> 00:15:27,450 En nu door mijn trage internetverbinding, ik heb 378 00:15:27,450 --> 00:15:28,260 echt afgespoten het. 379 00:15:28,260 --> 00:15:31,620 Dus lopen sudo yum update, zoals we u vertellen om te doen in de 380 00:15:31,620 --> 00:15:34,080 probleem set, in wezen zoals het uitvoeren van automatische updates 381 00:15:34,080 --> 00:15:35,420 in Mac OS of Windows. 382 00:15:35,420 --> 00:15:37,280 De reden voor het uitvoeren van deze aan het begin van de 383 00:15:37,280 --> 00:15:39,640 probleem set is, want als we het apparaat gemaakt, ik 384 00:15:39,640 --> 00:15:42,480 messed up, en ik per ongeluk gemaakt van al uw programma's kijken 385 00:15:42,480 --> 00:15:45,210 zwart op een zwart scherm, dat is waarom je niet ze te zien 386 00:15:45,210 --> 00:15:45,860 standaard. 387 00:15:45,860 --> 00:15:48,020 Maar de nieuwste versie van het apparaat lost dit. 388 00:15:48,020 --> 00:15:50,500 En ik zal vast dat tijdens de pauze een keer Ik gebruik Internet 389 00:15:50,500 --> 00:15:51,280 connectiviteit. 390 00:15:51,280 --> 00:15:54,630 >> Dus de citaten gewoon verbergt mijn fout, zeer discreet, 391 00:15:54,630 --> 00:15:55,730 blijkbaar. 392 00:15:55,730 --> 00:15:56,980 Andere vragen? 393 00:15:59,750 --> 00:16:00,668 Ja? 394 00:16:00,668 --> 00:16:02,012 PUBLIEK: Waar maakt vandaan? 395 00:16:02,012 --> 00:16:03,810 [Onverstaanbaar] 396 00:16:03,810 --> 00:16:04,280 DAVID J. MALAN: Goede vraag. 397 00:16:04,280 --> 00:16:05,460 Waar maakt vandaan? 398 00:16:05,460 --> 00:16:09,390 Het is een Linux programma dat bestaat al vele jaren, lang 399 00:16:09,390 --> 00:16:10,570 voor CS50. 400 00:16:10,570 --> 00:16:12,930 En het komt met een besturingssysteem, zoals Fedora. 401 00:16:12,930 --> 00:16:14,830 Het komt niet uit de CS50 bibliotheek. 402 00:16:14,830 --> 00:16:17,560 In feite is de enige dingen die komen van de CS50 bibliotheek 403 00:16:17,560 --> 00:16:20,470 tot nu toe, die we hebben gezien, zijn GetString, GetInt, alle 404 00:16:20,470 --> 00:16:25,550 die Get functies, en het woord snaar, en tot op zekere 405 00:16:25,550 --> 00:16:26,575 mate, het woord bool. 406 00:16:26,575 --> 00:16:29,180 Maar we zullen dat naast plagen als we een duik in de CS50 407 00:16:29,180 --> 00:16:30,580 apparaat zelf. 408 00:16:30,580 --> 00:16:32,820 >> Dus ja, nog een vraag hier. 409 00:16:32,820 --> 00:16:36,636 PUBLIEK: Toen je zei te maken en vervolgens buggy, hoe werkt het 410 00:16:36,636 --> 00:16:39,980 computer beter leren kennen [onverstaanbaar]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. MALAN: Goede vraag. 412 00:16:40,520 --> 00:16:43,830 Dus als je alleen nog maar te maken buggy1 of maak buggy2, hoe 413 00:16:43,830 --> 00:16:45,220 maakt weten? 414 00:16:45,220 --> 00:16:49,900 Dus standaard, als type je make buggy1, maken looks voor een 415 00:16:49,900 --> 00:16:52,330 bestand met de naam buggy1.c. 416 00:16:52,330 --> 00:16:55,570 En dan voert de juiste Clang commando's, 417 00:16:55,570 --> 00:17:00,380 waardoor overschrijven van de standaard output bestand genaamd a.out. 418 00:17:00,380 --> 00:17:03,670 In feite, als we kijken naar wat te maken, wat - 419 00:17:03,670 --> 00:17:04,839 Laten we stoppen met dit. 420 00:17:04,839 --> 00:17:09,530 Als we kijken naar wat maken was eigenlijk aan het doen, maken buggy2, 421 00:17:09,530 --> 00:17:10,470 het is al up-to-date. 422 00:17:10,470 --> 00:17:13,020 Dus laat me verwijder het rm commando, de 423 00:17:13,020 --> 00:17:14,319 programma ik al eerder schreef. 424 00:17:14,319 --> 00:17:17,319 Het typen van Y-E-S om te bevestigen dat ik wil om het te verwijderen. 425 00:17:17,319 --> 00:17:20,480 Als ik nu doen maken, merken dat in deze zeer lange lijn, 426 00:17:20,480 --> 00:17:22,980 er is een laatste ding hier,-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Alle merk doet is het passeren van dat argument, zo te zeggen, om te 428 00:17:26,959 --> 00:17:29,665 Clang, zodat ik niet hoeft te typen het zelf. 429 00:17:29,665 --> 00:17:32,660 >> Oke, dus een snelle paar administratieve 430 00:17:32,660 --> 00:17:33,470 aankondigingen. 431 00:17:33,470 --> 00:17:36,940 Dus voor secties, die begon officieel het komende 432 00:17:36,940 --> 00:17:38,970 Zondag, zult u altijd wilt brengen, indien 433 00:17:38,970 --> 00:17:40,120 je er een hebt, een laptop. 434 00:17:40,120 --> 00:17:42,570 Als u niet beschikt over een laptop, buiten hoeft te reiken naar mij door 435 00:17:42,570 --> 00:17:43,580 laten vallen me een email. 436 00:17:43,580 --> 00:17:44,810 En we bedenken een workflow. 437 00:17:44,810 --> 00:17:47,100 Wat over het algemeen vindt u in sectie is dat ze deel uitmaken 438 00:17:47,100 --> 00:17:48,770 conceptuele, deel hands-on. 439 00:17:48,770 --> 00:17:52,190 We zullen met name gebruik maken van de sectie van vragen, een deel van 440 00:17:52,190 --> 00:17:54,110 de week het probleem set, te lopen door een deel van de 441 00:17:54,110 --> 00:17:55,820 conceptuele materiaal van lezing. 442 00:17:55,820 --> 00:17:57,480 En dat is alles wat in de huidige probleem set. 443 00:17:57,480 --> 00:18:00,010 En we zullen ook een duik nemen in een aantal hands-on activiteiten, soms 444 00:18:00,010 --> 00:18:02,190 waarvan zal moeten worden ingediend, soms van 445 00:18:02,190 --> 00:18:02,830 welke niet. 446 00:18:02,830 --> 00:18:04,630 Bijvoorbeeld, de eerste week, zijn ze bedoeld net als een 447 00:18:04,630 --> 00:18:05,780 warming-up oefening. 448 00:18:05,780 --> 00:18:07,800 En je zult zien dat die problemen echt zijn dat ook. 449 00:18:07,800 --> 00:18:10,220 Ze zijn bedoeld om te worden vrij klein, maar niet noodzakelijk 450 00:18:10,220 --> 00:18:13,100 triviale programma's te schrijven, die niet noodzakelijkerwijs 451 00:18:13,100 --> 00:18:16,230 spannend in en van zichzelf, maar zijn goede mogelijkheden om 452 00:18:16,230 --> 00:18:19,620 oefenen met syntax, met nieuwe functies, in het comfort van een 453 00:18:19,620 --> 00:18:21,900 waar je een paar van je klasgenoten te presenteren als 454 00:18:21,900 --> 00:18:22,870 evenals uw TF. 455 00:18:22,870 --> 00:18:26,210 >> En wat we doen na verloop van tijd is het gebruik van een tool genaamd CS50 Spaces, 456 00:18:26,210 --> 00:18:28,940 waarbij in plaats van alleen met behulp van de CS50 Appliance, zult u 457 00:18:28,940 --> 00:18:32,450 in plaats daarvan naar een webpagina in een browser, waar u zult in staat zijn 458 00:18:32,450 --> 00:18:35,610 om code in een browservenster schrijven tijdens sectie. 459 00:18:35,610 --> 00:18:38,240 En dan, als je hiervoor kiest, kan uw onderwijs mede dan laten 460 00:18:38,240 --> 00:18:40,980 wat het ook is dat je het typen op het scherm in uw browser 461 00:18:40,980 --> 00:18:43,930 Venster aan de voorzijde van de klas, of anoniem 462 00:18:43,930 --> 00:18:47,250 publiekelijk, zodat hij of zij kan lopen dan door met 463 00:18:47,250 --> 00:18:50,080 je klasgenoten wat je goed deed jij, wat deed het niet goed. 464 00:18:50,080 --> 00:18:52,750 En nogmaals, wees gerust dit alles kan mooi worden geanonimiseerd. 465 00:18:52,750 --> 00:18:54,410 Maar het zal een mooie gelegenheid zijn voor veel meer 466 00:18:54,410 --> 00:18:56,810 interactiviteit dan iets als lezing toelaat. 467 00:18:56,810 --> 00:18:58,910 >> In de tussentijd zullen we deze dingen super heet 468 00:18:58,910 --> 00:19:01,610 secties, die zijn optioneel, maar staan ​​open voor iedereen in 469 00:19:01,610 --> 00:19:04,030 de klas, zodat u dit kunt doen meer samen voor 470 00:19:04,030 --> 00:19:05,190 probleem te stellen een. 471 00:19:05,190 --> 00:19:06,010 Hier is het schema. 472 00:19:06,010 --> 00:19:08,870 Dit wordt ook geplaatst op de homepage op cs50.net. 473 00:19:08,870 --> 00:19:10,850 Merk op dat er wel een hacker-specifiek te zijn 474 00:19:10,850 --> 00:19:12,430 een morgenmiddag. 475 00:19:12,430 --> 00:19:15,460 En we zullen filmen een vandaag en een morgen en plaatsen die 476 00:19:15,460 --> 00:19:16,720 online binnen 24 uur. 477 00:19:16,720 --> 00:19:19,370 Dus als je niet kunt maken van een van deze tijden, geen zorgen te maken. 478 00:19:19,370 --> 00:19:22,720 En nogmaals, het schema is nu online op cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> In termen van het snijden zelf, moet u hebben gekregen een 480 00:19:25,350 --> 00:19:28,520 e-mail waarin u wordt gevraagd naar de homepage van de cursus te vinden 481 00:19:28,520 --> 00:19:29,610 van uw sectie. 482 00:19:29,610 --> 00:19:32,890 Als het leven is veranderd en u nodig hebt om uw sectie te veranderen, 483 00:19:32,890 --> 00:19:33,560 geen probleem. 484 00:19:33,560 --> 00:19:37,900 Ga terug naar dezelfde URL, cs50.net/section, enkelvoud, 485 00:19:37,900 --> 00:19:40,090 en u zult vul het soortgelijke vorm, zodat u kunt 486 00:19:40,090 --> 00:19:41,260 geef ons uw voorkeuren. 487 00:19:41,260 --> 00:19:43,360 En we zullen follow-up door einde van de week over wat we kunnen 488 00:19:43,360 --> 00:19:44,240 tegemoet. 489 00:19:44,240 --> 00:19:49,530 Vorige week herinneren dat we voorgesteld het gebruik CS50 Discuss, 490 00:19:49,530 --> 00:19:51,370 de cursus discussie tool, in college. 491 00:19:51,370 --> 00:19:53,680 Dus we hadden 40 vragen die werden gesteld en 492 00:19:53,680 --> 00:19:54,720 beantwoord tijdens college. 493 00:19:54,720 --> 00:19:56,280 Dus het leek goed te werken, dus we zullen blijven 494 00:19:56,280 --> 00:19:57,180 proberen om dit te doen. 495 00:19:57,180 --> 00:19:59,600 Als tijdens de lezing, heb je niet alleen comfortabel voelt verhoging 496 00:19:59,600 --> 00:20:00,780 je hand, geen probleem. 497 00:20:00,780 --> 00:20:04,640 Ga naar cs50.net/discuss, daar plaatsen, en een van ons onderwijs 498 00:20:04,640 --> 00:20:07,270 bursalen, hetzij elektronisch beantwoorden of verhogen hun 499 00:20:07,270 --> 00:20:10,620 hand op uw naam anoniem te vragen, afhankelijk van 500 00:20:10,620 --> 00:20:12,470 de aard van de vraag. 501 00:20:12,470 --> 00:20:15,000 En in termen van feedback, zal in het algemeen psets worden 502 00:20:15,000 --> 00:20:16,760 terug binnen een week. 503 00:20:16,760 --> 00:20:19,080 Omdat het duurt een tijdje voor de secties te bereiken 504 00:20:19,080 --> 00:20:22,430 evenwicht wordt de eerste PSET, 0 en 1, een beetje 505 00:20:22,430 --> 00:20:24,130 vertraagd als dingen settelen. 506 00:20:24,130 --> 00:20:27,130 Maar stay tuned voor dat in de komende weken. 507 00:20:27,130 --> 00:20:29,750 >> Oke, dus laat me op mijn ernstige 508 00:20:29,750 --> 00:20:31,040 stem voor slechts een moment. 509 00:20:31,040 --> 00:20:32,690 Dus dit is eigenlijk een interessant klimaat te 510 00:20:32,690 --> 00:20:35,210 met deze discussie, met al de andere 511 00:20:35,210 --> 00:20:37,310 er aan de hand op de campus over deze aangelegenheid. 512 00:20:37,310 --> 00:20:40,220 Maar CS50 heeft zeker zijn geschiedenis van dit bijzondere 513 00:20:40,220 --> 00:20:43,360 onderwerp, voor zover ieder jaar, deze cursus, voor vele 514 00:20:43,360 --> 00:20:46,910 jaar, Ad-Boards ongeveer 3% van de klas. 515 00:20:46,910 --> 00:20:51,620 Dit laatste jaar, 2011, CS50 Ad-Ingescheept 35 studenten. 516 00:20:51,620 --> 00:20:54,120 Dit is niet, denk ik, door een gebrek aan duidelijkheid. 517 00:20:54,120 --> 00:20:56,760 Realiseer je dat in de syllabus van de cursus is er een pagina met 518 00:20:56,760 --> 00:20:59,020 verklaring uit te leggen waar de lijnen. 519 00:20:59,020 --> 00:21:01,350 Diezelfde verklaring wordt herhaald op elk van de 520 00:21:01,350 --> 00:21:03,070 probleem stelt op pagina een. 521 00:21:03,070 --> 00:21:05,760 >> Dus ik zeg dit nu echt alleen maar om ervoor te zorgen 522 00:21:05,760 --> 00:21:07,030 mensen bewust van dit. 523 00:21:07,030 --> 00:21:08,080 En we hebben geprobeerd verschillende dingen. 524 00:21:08,080 --> 00:21:10,630 En wat ik dacht dat we zouden doen vandaag de dag is een moment gewoon te 525 00:21:10,630 --> 00:21:13,830 eigenlijk kijken naar een aantal van vroegere gevallen die zijn gekomen. 526 00:21:13,830 --> 00:21:16,160 In plaats van te houden deze als smerige geheimen, eigenlijk 527 00:21:16,160 --> 00:21:19,170 wijzen op wat studenten hebben gedaan en hoe we hebben vastgesteld 528 00:21:19,170 --> 00:21:21,630 het en echt wat de overkoepelende motivatie is voor 529 00:21:21,630 --> 00:21:23,950 zelfs met dit gesprek. 530 00:21:23,950 --> 00:21:27,060 Dus met dat gezegd, de lijn is dit in essentie - 531 00:21:27,060 --> 00:21:29,200 per de syllabus, je welkom, je wordt aangemoedigd om 532 00:21:29,200 --> 00:21:30,210 praten met klasgenoten. 533 00:21:30,210 --> 00:21:31,910 Dat is het hele doel van het hebben van deze samenwerking 534 00:21:31,910 --> 00:21:34,470 kantooruren in Annenberg en het stimuleren van mensen voor de 535 00:21:34,470 --> 00:21:35,755 afstudeerproject om samen te werken. 536 00:21:35,755 --> 00:21:38,590 Maar de lijn wordt getrokken wanneer het tijd is om daadwerkelijk schrijven 537 00:21:38,590 --> 00:21:39,790 je uiteindelijke oplossing. 538 00:21:39,790 --> 00:21:42,590 Spreken in het Engels, helemaal goed, het spreken in pseudo-code, 539 00:21:42,590 --> 00:21:43,400 helemaal goed. 540 00:21:43,400 --> 00:21:46,340 E-mailen van een klasgenoot je PSET, hen te laten kijken over 541 00:21:46,340 --> 00:21:48,610 het scherm als de handen doorgaan met het typen, 542 00:21:48,610 --> 00:21:50,110 over de lijn ook. 543 00:21:50,110 --> 00:21:52,250 Bekijk ook eens aan de syllabus voor de betreffende lijnen. 544 00:21:52,250 --> 00:21:55,850 >> Maar alleen maar om een ​​beeld te krijgen van hoe dit is helaas een te schilderen 545 00:21:55,850 --> 00:21:58,370 werkelijkheid, beseffen dat er websites zijn die 546 00:21:58,370 --> 00:22:01,490 hebben oplossingen van deze klasse en vele andere klassen. 547 00:22:01,490 --> 00:22:04,940 Het feit dat u of ongeveer 3% van jullie weten dat dit bestaat 548 00:22:04,940 --> 00:22:07,240 betekent dat we weten dat dit bestaat. 549 00:22:07,240 --> 00:22:09,340 Het feit dat er websites als deze, waar u 550 00:22:09,340 --> 00:22:11,540 kan iemand betalen om daadwerkelijk doen uw probleem sets - dit was 551 00:22:11,540 --> 00:22:13,450 een concreet geval dat kwam in het laatste jaar. 552 00:22:13,450 --> 00:22:15,790 Dit is een website genaamd odesk.com. 553 00:22:15,790 --> 00:22:20,090 En Tim was de naam van de persoon hier die werd plaatsing op 554 00:22:20,090 --> 00:22:24,580 deze website en vroeg iemand om zijn PSET 7 doen in 555 00:22:24,580 --> 00:22:25,570 dit geval. 556 00:22:25,570 --> 00:22:28,350 Nou, odesk.com is zeer Google-baar, en ook wij zijn 557 00:22:28,350 --> 00:22:30,310 erg goed in googelen. 558 00:22:30,310 --> 00:22:32,360 Ook hier zijn er sites - en deze is nogal 559 00:22:32,360 --> 00:22:34,234 afschuwelijk, eerlijk gezegd. 560 00:22:34,234 --> 00:22:38,050 [Gelach] 561 00:22:38,050 --> 00:22:39,610 DAVID J. MALAN: Het grappige ding over deze site is als 562 00:22:39,610 --> 00:22:41,970 lees je de Over pagina, ze praten over hun corporate 563 00:22:41,970 --> 00:22:44,390 cultuur en hoe de klantenservice is hun nummer een 564 00:22:44,390 --> 00:22:46,190 prioriteit, om ervoor te zorgen dat uw opdrachten te krijgen 565 00:22:46,190 --> 00:22:47,890 ingeschakeld op tijd. 566 00:22:47,890 --> 00:22:50,580 >> Maar in alle ernst weer dat deze sites 567 00:22:50,580 --> 00:22:52,910 bestaan, ook wij beseffen,, zijn op de hoogte van de 568 00:22:52,910 --> 00:22:53,730 dit soort sites. 569 00:22:53,730 --> 00:22:55,890 En om u een idee van wat vormt dit over het algemeen 570 00:22:55,890 --> 00:22:58,570 neemt, we doorgaans geen grote schandalen waar mensen 571 00:22:58,570 --> 00:23:01,080 werken samen aan enige vorm van grote schaal, maar 572 00:23:01,080 --> 00:23:04,540 het is deze late-night momenten van zwakte, waar je zo 573 00:23:04,540 --> 00:23:07,550 veel te doen, het is 4:00 AM, je bent uitgeput, en u 574 00:23:07,550 --> 00:23:09,770 denk je bij jezelf, nou ja, laat me even een kijkje op mijn nemen 575 00:23:09,770 --> 00:23:11,770 huisgenoot of mijn vriend code of iets dergelijks. 576 00:23:11,770 --> 00:23:14,800 En de manifestaties van deze helaas te betrekken Student 577 00:23:14,800 --> 00:23:17,640 Een indienen van zoiets als dit en Student B overlegging 578 00:23:17,640 --> 00:23:20,370 zoiets als dit, wat zeker in een computer 579 00:23:20,370 --> 00:23:23,830 wetenschap klasse, is opmerkelijk gemakkelijk voor informatici 580 00:23:23,830 --> 00:23:25,690 te detecteren met software. 581 00:23:25,690 --> 00:23:28,410 Dit is een andere veel voorkomende paradigma, waar je hebt soort van 582 00:23:28,410 --> 00:23:31,010 gewerkt naast iemand, misschien praten in 583 00:23:31,010 --> 00:23:32,360 Engels, prima, pseudocode. 584 00:23:32,360 --> 00:23:35,080 Maar dan komt de tijd om daadwerkelijk in te dienen, en de psets 585 00:23:35,080 --> 00:23:37,910 krijgt gewoon uitgewisseld via e-mail of Dropbox of iets dergelijks. 586 00:23:37,910 --> 00:23:41,120 Maar in een poging om het minder duidelijk zijn dat dit 587 00:23:41,120 --> 00:23:44,830 wat er gebeurd is, dan is dit wat er ingediend. 588 00:23:44,830 --> 00:23:47,880 Ook dit is niet struikelen goed geschreven stukken 589 00:23:47,880 --> 00:23:50,360 software zoals we eigenlijk te detecteren 590 00:23:50,360 --> 00:23:51,280 dit soort dingen. 591 00:23:51,280 --> 00:23:53,760 En inderdaad, wat we doen is run software die vergelijkt alle van 592 00:23:53,760 --> 00:23:55,540 van dit jaar inzendingen tegen alle van het verleden jaar 593 00:23:55,540 --> 00:23:57,380 inzendingen, tegen alles wat we vinden op de 594 00:23:57,380 --> 00:24:00,060 Internet, tegen elke vacature website die er zijn. 595 00:24:00,060 --> 00:24:01,710 Het is allemaal erg geautomatiseerd. 596 00:24:01,710 --> 00:24:05,665 En dus doen we dit echt in grote eerlijkheid van de 97% die 597 00:24:05,665 --> 00:24:07,760 echt werken hun ezels af in deze en in andere 598 00:24:07,760 --> 00:24:11,530 klassen en de invoering van al die inspanning, zodat het werk 599 00:24:11,530 --> 00:24:13,030 ze uiteindelijk in te dienen is hun eigen. 600 00:24:13,030 --> 00:24:14,220 En ik kan gaan voor jong en oud. 601 00:24:14,220 --> 00:24:16,030 >> Dit zijn slechts een handvol van de gevallen vorig jaar. 602 00:24:16,030 --> 00:24:19,350 Een paar studenten voorgelegd deze bestanden identiek voor PSET 2, 603 00:24:19,350 --> 00:24:22,460 PSET 3, PSET 4, PSET 5, PSET 6, PSET 9. 604 00:24:22,460 --> 00:24:26,360 In dit geval was quiz 0 en in de laatste jaren, waarbij twee 605 00:24:26,360 --> 00:24:29,570 studenten voorgelegd identiek deze zin onder vele 606 00:24:29,570 --> 00:24:32,210 anderen, "Het verzoek van het type -" puntje, puntje, puntje. 607 00:24:32,210 --> 00:24:34,530 Dus zelfs in een klasse van 600 hebben we dit waarnemen 608 00:24:34,530 --> 00:24:36,310 op de ingediende quizzen. 609 00:24:36,310 --> 00:24:39,080 Dus in het kort, dit - eerlijk gezegd, ik haat het hebben van dit soort 610 00:24:39,080 --> 00:24:41,300 gesprek - maar dit is echt een bewuste inspanning 611 00:24:41,300 --> 00:24:43,540 dit jaar om te proberen te rijden van dat nummer. 612 00:24:43,540 --> 00:24:45,650 Want ook al zeggen we dit soort dingen elke 613 00:24:45,650 --> 00:24:48,100 jaar, ik denk dat de realiteit van het hebben stilgestaan ​​bij het voor een paar 614 00:24:48,100 --> 00:24:50,800 nog seconden dan normaal en eigenlijk alleen maar te wijzen op 615 00:24:50,800 --> 00:24:53,600 dat wat lijkt misschien, eh, niet zo'n big deal, althans 616 00:24:53,600 --> 00:24:56,390 denk terug aan dit bijzondere moment, zowel in alle eerlijkheid 617 00:24:56,390 --> 00:25:00,100 jezelf en je klasgenoten hier. 618 00:25:00,100 --> 00:25:02,480 Dus als je ooit vragen hebt over waar de lijn 619 00:25:02,480 --> 00:25:04,290 is, kunt u gewoon persoonlijk te bereiken voor mij. 620 00:25:04,290 --> 00:25:07,190 Maar het antwoord is altijd, geheel benadrukt tijdens de 621 00:25:07,190 --> 00:25:09,090 last minute, contant geld in een late dag. 622 00:25:09,090 --> 00:25:11,080 Of als het een kwestie van niet met een late dag, 623 00:25:11,080 --> 00:25:12,900 eerlijk, persoonlijk e-mail me. 624 00:25:12,900 --> 00:25:14,110 We verzinnen wel iets. 625 00:25:14,110 --> 00:25:17,480 Gelieve niet hier zet je tijd aan Harvard in gevaar. 626 00:25:17,480 --> 00:25:18,570 >> Nu, ik dacht dat we de stemming te verlichten, dus ik 627 00:25:18,570 --> 00:25:20,264 opgenomen dat als de volgende dia. 628 00:25:20,264 --> 00:25:22,770 [Gelach] 629 00:25:22,770 --> 00:25:23,630 DAVID J. MALAN: Deze website was geweldig. 630 00:25:23,630 --> 00:25:24,820 Ik werd eigenlijk een beetje afgeleid. 631 00:25:24,820 --> 00:25:26,330 Er is deze. 632 00:25:26,330 --> 00:25:29,590 En toen deze was geweldig. 633 00:25:29,590 --> 00:25:35,190 Oke, zo laat denken dat kitten 's nachts bij het maken van 634 00:25:35,190 --> 00:25:36,040 deze beslissingen. 635 00:25:36,040 --> 00:25:40,110 Oke, dus terug naar meer plezier en minder ernstige dingen, zoals 636 00:25:40,110 --> 00:25:40,780 voorwaarden. 637 00:25:40,780 --> 00:25:43,900 >> Oke, dus we spraken kort over deze. 638 00:25:43,900 --> 00:25:46,080 Dit is iets dat waarschijnlijk heel vertrouwd uit 639 00:25:46,080 --> 00:25:47,260 de wereld van de Scratch. 640 00:25:47,260 --> 00:25:49,860 En in de wereld van Scratch, hebben we deze behoefte soms 641 00:25:49,860 --> 00:25:51,110 gaan maken vorken in de weg. 642 00:25:51,110 --> 00:25:54,840 Ofwel doe dit of dat of dat andere ding hier. 643 00:25:54,840 --> 00:25:58,990 En als we dit willen doen, kunnen we, in C nu, dit als 644 00:25:58,990 --> 00:26:00,860 anders te construeren. 645 00:26:00,860 --> 00:26:06,420 En dan hier hebben we Booleaanse uitdrukkingen. 646 00:26:06,420 --> 00:26:09,260 Bijvoorbeeld, Booleaanse uitdrukkingen hier, kunnen we OF 647 00:26:09,260 --> 00:26:12,260 ze samen, in de zin dat we deze aandoening hebben OF 648 00:26:12,260 --> 00:26:13,200 die voorwaarde. 649 00:26:13,200 --> 00:26:15,100 Wij kunnen en ze samen, in de zin dat we willen 650 00:26:15,100 --> 00:26:17,710 check deze voorwaarde en die voorwaarde. 651 00:26:17,710 --> 00:26:22,440 En hier hebben we een switch-statement nu, dat is dus niet 652 00:26:22,440 --> 00:26:26,040 vergelijkbaar syntactisch met dat soort omstandigheden, maar het 653 00:26:26,040 --> 00:26:30,160 stelt ons in staat te doen het equivalent van if, else if, else if, else 654 00:26:30,160 --> 00:26:34,990 indien en dergelijke door simpelweg te sommen per geval 655 00:26:34,990 --> 00:26:36,670 door van geval tot geval. 656 00:26:36,670 --> 00:26:38,370 Zo zagen we de vorige keer. 657 00:26:38,370 --> 00:26:40,430 En toen begonnen we raken aan zaken als lussen. 658 00:26:40,430 --> 00:26:42,070 We zagen een van deze zojuist. 659 00:26:42,070 --> 00:26:44,180 Maar er zijn deze andere lusconstructies. 660 00:26:44,180 --> 00:26:46,370 >> Bijvoorbeeld, deze hier. 661 00:26:46,370 --> 00:26:50,140 Dus terwijl (voorwaarde), deze zaak doen opnieuw en opnieuw. 662 00:26:50,140 --> 00:26:53,070 Dus fundamenteel, wat lijkt anders te zijn tussen deze 663 00:26:53,070 --> 00:26:55,760 for-lus en deze while-lus hier? 664 00:27:00,810 --> 00:27:05,045 Deze for-lus en deze while-lus. 665 00:27:05,045 --> 00:27:07,840 Ja? 666 00:27:07,840 --> 00:27:08,800 Wat is dat? 667 00:27:08,800 --> 00:27:10,050 PUBLIEK: [onverstaanbaar]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. MALAN: Goed. 669 00:27:15,120 --> 00:27:17,130 Dus terwijl in de for-lus staat, er is duidelijk 670 00:27:17,130 --> 00:27:17,940 meer syntaxis. 671 00:27:17,940 --> 00:27:20,560 Er is een initialisatie, er is deze update. 672 00:27:20,560 --> 00:27:23,820 In een lus while, er is gewoon deze aandoening. 673 00:27:23,820 --> 00:27:26,630 Dus het lijkt erop dat het een beetje teruggebracht ten opzichte van de voor de 674 00:27:26,630 --> 00:27:28,770 lus, wat betekent dat als we willen variabelen hebben en we willen 675 00:27:28,770 --> 00:27:30,800 tot ophoging hebben we eigenlijk moeten 676 00:27:30,800 --> 00:27:32,500 doe dit ding zelf. 677 00:27:32,500 --> 00:27:34,420 >> Dus laat me gaan en open te stellen gedit. 678 00:27:34,420 --> 00:27:36,320 Laat mij over te schakelen naar het apparaat. 679 00:27:36,320 --> 00:27:38,110 En laten we gewoon doen een snelle kleine voorbeeld dat 680 00:27:38,110 --> 00:27:40,550 een van deze onderscheidt van de andere. 681 00:27:40,550 --> 00:27:42,490 En in de achterkant van mijn hoofd hier, moet ik een ding zeggen. 682 00:27:42,490 --> 00:27:44,120 Ik specifiek vermeld de naam Tim. 683 00:27:44,120 --> 00:27:47,740 Tim was eigenlijk iemand die een student probeerde te vinden om te doen 684 00:27:47,740 --> 00:27:48,680 hun huiswerk voor hen. 685 00:27:48,680 --> 00:27:51,280 We hadden geen Tim in de betreffende sectie. 686 00:27:51,280 --> 00:27:53,690 Dus realiseren, opdat ik niet bekendgemaakt een student, het was geen student. 687 00:27:53,690 --> 00:27:55,720 Het was een willekeurig persoon op het internet om dingen te doen 688 00:27:55,720 --> 00:27:57,180 bij volmacht vorig jaar. 689 00:27:57,180 --> 00:27:58,670 Dus we vinden dat ook. 690 00:27:58,670 --> 00:28:00,630 Dus in dit geval hier, laat me ga je gang en 691 00:28:00,630 --> 00:28:02,810 het openen van een nieuw bestand. 692 00:28:02,810 --> 00:28:04,800 Bestand, Nieuw. 693 00:28:04,800 --> 00:28:06,050 Dit geeft me een tab hier. 694 00:28:06,050 --> 00:28:09,940 Laat me ga je gang en sla het op als loop.c. 695 00:28:09,940 --> 00:28:11,810 Laat me gaan en klik op Opslaan. 696 00:28:11,810 --> 00:28:15,340 En dan hier beneden, laten we verder gaan en beginnen met het schrijven 697 00:28:15,340 --> 00:28:16,605 # Include . 698 00:28:19,116 --> 00:28:20,520 Laat me zoomen 699 00:28:20,520 --> 00:28:23,410 Nu doen we int main (void). 700 00:28:23,410 --> 00:28:30,020 Nu ik ga je gang en laat het for (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10; i + +). 702 00:28:33,480 --> 00:28:36,620 En nu ga ik om verder te gaan en de ster niet af te drukken dat ik 703 00:28:36,620 --> 00:28:37,890 eerder deed. 704 00:28:37,890 --> 00:28:39,390 En dan aan het eind van dit programma, we gewoon gaan 705 00:28:39,390 --> 00:28:41,130 afdrukken van een nieuwe lijn, gewoon zo dat mijn prompt 706 00:28:41,130 --> 00:28:42,470 ziet er niet al rommelig. 707 00:28:42,470 --> 00:28:45,170 0 terug. 708 00:28:45,170 --> 00:28:47,610 Lijken syntactisch correct? 709 00:28:47,610 --> 00:28:48,040 Dusver. 710 00:28:48,040 --> 00:28:48,560 Dus laten we eens kijken. 711 00:28:48,560 --> 00:28:51,290 >> Dus laat me uit te zoomen, ga in mijn terminal venster. 712 00:28:51,290 --> 00:28:54,570 En laat me gaan en lopen loop, want ik noemde dit 713 00:28:54,570 --> 00:28:55,690 ding loop.c. 714 00:28:55,690 --> 00:28:56,780 Zorg er dus voor lus. 715 00:28:56,780 --> 00:28:57,840 Lijkt OK compileren. 716 00:28:57,840 --> 00:29:00,210 Laat me lopen lus, en nu op Enter. 717 00:29:00,210 --> 00:29:01,820 En het lijkt te zijn afgedrukt 10 sterren. 718 00:29:01,820 --> 00:29:03,780 Dus laten we gewoon dit om te zetten in een while lus en zien wat 719 00:29:03,780 --> 00:29:05,220 soorten problemen die we struikelen. 720 00:29:05,220 --> 00:29:11,290 Dus in plaats van deze, laat me hier gaan en zeggen, terwijl i 721 00:29:11,290 --> 00:29:12,760 minder dan 10 - 722 00:29:12,760 --> 00:29:14,910 laat me te ontdoen van de for-lus. 723 00:29:14,910 --> 00:29:17,170 OK, dus we hebben een paar problemen reeds. 724 00:29:17,170 --> 00:29:21,110 Dus de conditie is hetzelfde, maar ik ben uiteraard ontbreekt de 725 00:29:21,110 --> 00:29:21,680 initialisatie. 726 00:29:21,680 --> 00:29:23,840 Ik mis de ophoging. 727 00:29:23,840 --> 00:29:28,020 Dus wat moet de compiler zal me vertellen wanneer ik probeer te 728 00:29:28,020 --> 00:29:29,170 compileren dit programma? 729 00:29:29,170 --> 00:29:29,666 Ja? 730 00:29:29,666 --> 00:29:31,154 PUBLIEK: [onverstaanbaar]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. MALAN: Goed. 732 00:29:31,650 --> 00:29:34,180 Dus het gaat om iets als zwartwerk zeggen - in dit 733 00:29:34,180 --> 00:29:35,280 geval, variabele i. 734 00:29:35,280 --> 00:29:37,980 En inderdaad, het gebruik van niet-aangegeven identifier i. 735 00:29:37,980 --> 00:29:40,960 En dus is dit in tegenstelling tot talen zoals PHP en 736 00:29:40,960 --> 00:29:43,120 Python en Ruby, waarmee sommige van jullie misschien bekend, 737 00:29:43,120 --> 00:29:44,820 waar u kunt gewoon een soort van start met behulp van variabelen 738 00:29:44,820 --> 00:29:47,420 tegen wil en dank en niet zorgen te maken over ze te declareren 739 00:29:47,420 --> 00:29:48,560 expliciet altijd. 740 00:29:48,560 --> 00:29:51,770 In C en in talen zoals Java en C + +, moet je 741 00:29:51,770 --> 00:29:53,020 super expliciet. 742 00:29:53,020 --> 00:29:55,760 En als je een variabele met de naam i, je moet me vertellen 743 00:29:55,760 --> 00:29:57,360 welke variabele is. 744 00:29:57,360 --> 00:29:59,360 Dus we zullen moeten oplossen als volgt. 745 00:29:59,360 --> 00:30:05,510 Ik ga te hebben om hier te gaan en int i typen, daarom, 746 00:30:05,510 --> 00:30:07,860 Ik heb verklaard een variabele genaamd i. 747 00:30:07,860 --> 00:30:09,180 Nu, ik heb een stap overgeslagen. 748 00:30:09,180 --> 00:30:11,340 Ik heb natuurlijk niet geïnitialiseerd, maar laten we eens kijken of dat bij 749 00:30:11,340 --> 00:30:13,650 minste merken Clang stop klagen. 750 00:30:13,650 --> 00:30:15,770 Dus laat me remake dit programma. 751 00:30:15,770 --> 00:30:16,770 >> Oke, nu is het gewoon klagen 752 00:30:16,770 --> 00:30:17,870 om een ​​andere reden. 753 00:30:17,870 --> 00:30:21,130 "Variabele 'i' wordt niet-geïnitialiseerd wanneer hier gebruikt." Oke, dus 754 00:30:21,130 --> 00:30:22,340 dat is vrij expliciet. 755 00:30:22,340 --> 00:30:25,510 Geïnitialiseerd betekent gewoon de oprichting ervan gelijk zijn aan een bepaalde waarde. 756 00:30:25,510 --> 00:30:30,820 En we hebben dat niet gedaan, dus laat mij eens proberen gelijk is aan 0. 757 00:30:30,820 --> 00:30:35,030 Laten we nu nog eens proberen en opnieuw uitvoeren Clang. 758 00:30:35,030 --> 00:30:36,140 Gecompileerde deze tijd. 759 00:30:36,140 --> 00:30:37,210 En ik sta op het punt om het te draaien. 760 00:30:37,210 --> 00:30:43,120 Maar grote oude oneindige lus, want ik heb gedaan de 761 00:30:43,120 --> 00:30:45,530 initialisatie, ik heb gedaan de aandoening, maar ik heb het nog nooit gedaan 762 00:30:45,530 --> 00:30:47,030 elke vorm van ophoging. 763 00:30:47,030 --> 00:30:48,780 Dus hoe kan ik de ophoging? 764 00:30:48,780 --> 00:30:51,170 Nou, in een while-lus, het voelt alsof ik ga hebben 765 00:30:51,170 --> 00:30:54,180 het doen binnenzijde van de lus, doordat net als de eerste 766 00:30:54,180 --> 00:30:56,570 week voorbeelden van het doen van lusconstructies, zoals bij 767 00:30:56,570 --> 00:30:59,040 de sokken en met de zelf-tellen, wat we moesten doen 768 00:30:59,040 --> 00:31:01,550 iets helemaal aan het einde, graag terug te gaan naar de volgende regel. 769 00:31:01,550 --> 00:31:05,040 Wat als ik ga je gang en doe dit i + + hier? 770 00:31:05,040 --> 00:31:06,030 Laten we ook niet deze samen te stellen. 771 00:31:06,030 --> 00:31:06,890 Al pak me. 772 00:31:06,890 --> 00:31:09,704 Wat is er mis hier? 773 00:31:09,704 --> 00:31:10,690 PUBLIEK: [onverstaanbaar]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. MALAN: Dus het is zeker niet int. 775 00:31:11,770 --> 00:31:13,080 Het is i. 776 00:31:13,080 --> 00:31:15,110 En de accolades, zoals vroeger, 777 00:31:15,110 --> 00:31:16,800 inspringen is niet genoeg. 778 00:31:16,800 --> 00:31:18,410 Dus nu heb ik dit construct. 779 00:31:18,410 --> 00:31:21,780 Dus terwijl ik minder dan 10, drukt u een ster, 780 00:31:21,780 --> 00:31:23,220 dan verhogen i. 781 00:31:23,220 --> 00:31:25,680 En de manier waarop een while-lus werken is dat zodra je de 782 00:31:25,680 --> 00:31:29,630 einde van de lus, die in dit geval lijkt leiding 10, 783 00:31:29,630 --> 00:31:32,880 het gaat om terug te gaan naar lijn 6, op welk punt de 784 00:31:32,880 --> 00:31:34,400 voorwaarde zal opnieuw worden gecontroleerd. 785 00:31:34,400 --> 00:31:37,500 En als ik nog steeds minder dan 10, dan doen we lijnen 8 en 786 00:31:37,500 --> 00:31:41,250 dan 9, dan zullen we raken 10, en ga terug naar 6, opnieuw en 787 00:31:41,250 --> 00:31:45,580 telkens weer, zolang i kleiner is dan 10. 788 00:31:45,580 --> 00:31:47,860 Dus laten we opnieuw uit te voeren hier te maken. 789 00:31:47,860 --> 00:31:48,940 >> Oke, we hebben goed samengesteld. 790 00:31:48,940 --> 00:31:50,300 Laat me re-run lus. 791 00:31:50,300 --> 00:31:52,620 En nu lijkt het echt te werken. 792 00:31:52,620 --> 00:31:55,100 Dus plussen en minnen hier? 793 00:31:55,100 --> 00:31:58,910 Nou, tot nu toe is er eigenlijk niet een geheel van PLO - 794 00:31:58,910 --> 00:31:59,420 zo schattig. 795 00:31:59,420 --> 00:32:01,870 Oke, dat was een - ah, dat was een ongeluk. 796 00:32:01,870 --> 00:32:05,200 Oke, dus laten we terug gaan naar de for-lus. 797 00:32:05,200 --> 00:32:07,530 Dus voor loops zijn leuk omdat ze super expliciet. 798 00:32:07,530 --> 00:32:09,720 En ook al zijn ze een beetje onhandig om te schrijven, het is 799 00:32:09,720 --> 00:32:11,500 zeer krachtig en het laat u doen om 800 00:32:11,500 --> 00:32:12,980 meerdere dingen tegelijk. 801 00:32:12,980 --> 00:32:16,240 Terwijl loops lijken niet om een ​​enorme hoeveelheid waarde hebben net 802 00:32:16,240 --> 00:32:18,500 toch, omdat het voelt alsof we alleen maar meer werk te doen. 803 00:32:18,500 --> 00:32:20,670 We moeten de initialisatie zetten hier, de 804 00:32:20,670 --> 00:32:23,480 hier werken naar beneden, en we moeten niet vergeten dat allemaal doen. 805 00:32:23,480 --> 00:32:26,260 Dus we zullen zien in de tijd dat, terwijl loops eigenlijk lenen 806 00:32:26,260 --> 00:32:29,380 zich tot slechts verschillende contexten, verschillende data 807 00:32:29,380 --> 00:32:33,900 structuren zoals lijsten en hash tabellen, dingen die we zullen krijgen om 808 00:32:33,900 --> 00:32:34,970 mid-semester. 809 00:32:34,970 --> 00:32:37,900 Maar voor nu, weten dat er dit derde type bekend als een doe- 810 00:32:37,900 --> 00:32:38,480 while lus. 811 00:32:38,480 --> 00:32:39,540 En we hebben gezien dit kort. 812 00:32:39,540 --> 00:32:41,830 En dit zou kunnen zijn super behulpzaam met PSET 1. 813 00:32:41,830 --> 00:32:45,570 Elke keer dat je iets wilt doen en dan controleren of 814 00:32:45,570 --> 00:32:48,940 de gebruiker meewerkte, en als ze dat niet deden, het opnieuw doen, een doe- 815 00:32:48,940 --> 00:32:51,460 while lus leent zich voor dat soort logica. 816 00:32:51,460 --> 00:32:55,640 Want als het bestellen van boven naar beneden hier al doet vermoeden, 817 00:32:55,640 --> 00:32:57,750 doen betekent letterlijk doen. 818 00:32:57,750 --> 00:32:59,830 En doe dit opnieuw en opnieuw, wat zou dat zijn? 819 00:32:59,830 --> 00:33:03,000 Misschien is het een beroep worden GetInt of GetString en vervolgens 820 00:33:03,000 --> 00:33:05,830 het controleren van de waarde van de GetInt of GetString en dan schreeuwen 821 00:33:05,830 --> 00:33:08,260 bij de gebruiker als ze niet meegewerkt door hen te vragen 822 00:33:08,260 --> 00:33:10,100 opnieuw en opnieuw en opnieuw. 823 00:33:10,100 --> 00:33:11,730 Waar wil je een keer iets doen, 824 00:33:11,730 --> 00:33:13,210 controleer dan of andere voorwaarde. 825 00:33:13,210 --> 00:33:14,110 >> Dus laten we dit proberen. 826 00:33:14,110 --> 00:33:17,130 Laat ik eigenlijk dit nu veranderen in een do-while-lus. 827 00:33:17,130 --> 00:33:18,830 En ik ga om verder te gaan en het volgende te doen. 828 00:33:18,830 --> 00:33:21,830 Dus doe het volgende. 829 00:33:21,830 --> 00:33:26,870 Laten we het doen int i = GetInt (), maar laten we eerst de gebruiker te vertellen 830 00:33:26,870 --> 00:33:27,410 wat te doen. 831 00:33:27,410 --> 00:33:29,050 Dus een beetje anders deze keer. 832 00:33:29,050 --> 00:33:31,270 "Geef me een int". 833 00:33:31,270 --> 00:33:32,910 Dus ik zal printf gebruiken voor. 834 00:33:32,910 --> 00:33:35,740 En nu ga ik hier naar beneden gaan, en ik ga om dit te doen 835 00:33:35,740 --> 00:33:41,520 terwijl ik is, laten we zeggen, groter dan - 836 00:33:41,520 --> 00:33:47,540 laten we eens kijken, ik wil zeggen, laten we zeggen, minder dan 0, of i 837 00:33:47,540 --> 00:33:48,730 groter dan 10. 838 00:33:48,730 --> 00:33:51,810 Met andere woorden, wil een getal van 1 tot 9, maar 839 00:33:51,810 --> 00:33:52,720 willekeurig. 840 00:33:52,720 --> 00:33:55,290 Dus ik ben met behulp van een gecombineerde Booleaanse expressie hier om 841 00:33:55,290 --> 00:33:59,930 zorgen dat i kleiner is dan 0 of groter dan 10, waarin 842 00:33:59,930 --> 00:34:02,530 geval zal ik deze lus weer hier te doen. 843 00:34:02,530 --> 00:34:04,400 Dus nogmaals, dit doen - 844 00:34:04,400 --> 00:34:08,480 terwijl i kleiner is dan 0 of i groter is dan 10. 845 00:34:08,480 --> 00:34:11,440 >> Dus laten we nu verder gaan en dit doen als we dat gedaan hebt. 846 00:34:11,440 --> 00:34:13,270 Laten we doen een snelle sanity check. 847 00:34:13,270 --> 00:34:18,929 printf ("Bedankt, i is% d", i). 848 00:34:18,929 --> 00:34:21,350 Dus dit eenvoudige programma vraagt ​​de gebruiker om een ​​int, 849 00:34:21,350 --> 00:34:24,000 zorgt ervoor dat het binnen een paar bereik 1 tot en met 9, 850 00:34:24,000 --> 00:34:26,280 en dan, dankzij de gebruiker door hen eraan te herinneren wat ze net 851 00:34:26,280 --> 00:34:27,940 ingetypt, net als een klein sanity check. 852 00:34:27,940 --> 00:34:30,659 Maar laten we eens kijken of dit werkt zoals bedoeld. 853 00:34:30,659 --> 00:34:34,533 Laat me go head hier naar beneden en opnieuw uit te voeren maken lus. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "Gebruik van niet-aangegeven identifier 'i'". Dat is vreemd. 856 00:34:38,600 --> 00:34:41,509 Ik dacht dat we besloten dat. 857 00:34:45,489 --> 00:34:47,560 Zelfde symptoom maar andere code. 858 00:34:47,560 --> 00:34:47,899 Ja? 859 00:34:47,899 --> 00:34:50,191 PUBLIEK: [onverstaanbaar] in de twee, we moeten 860 00:34:50,191 --> 00:34:52,639 [Onverstaanbaar]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. MALAN: Precies. 862 00:34:53,260 --> 00:34:55,989 Dus dit leidt ons eigenlijk op een onderwerp bekend als scope. 863 00:34:55,989 --> 00:34:59,350 Het blijkt dat C weer,, Ben jij het echt duurt letterlijk. 864 00:34:59,350 --> 00:35:02,970 En als je iets als dit waar verklaart u een int 865 00:35:02,970 --> 00:35:06,120 en toekennen bepaalde waarde, maar je dat de binnenkant van een 866 00:35:06,120 --> 00:35:09,840 paar accolades, wat C doet is het ervan uitgegaan dat u 867 00:35:09,840 --> 00:35:14,800 alleen willen dat die 32 bits bekend als i te bestaan ​​binnen de 868 00:35:14,800 --> 00:35:18,200 kader van die accolades, in het kader van de lijnen 869 00:35:18,200 --> 00:35:22,420 6 tot 9. Dus ik wordt verklaard, en het krijgt een 870 00:35:22,420 --> 00:35:26,530 waarde in lijn 8, maar zodra je buiten 871 00:35:26,530 --> 00:35:30,270 lijn 9 onder de accolade, i is niet langer in 872 00:35:30,270 --> 00:35:31,910 ruimte, om zo te zeggen. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Het is niet meer in de juiste context. 874 00:35:35,030 --> 00:35:37,940 Dus nu is er geen ik, dus het is alsof we hadden niet eens 875 00:35:37,940 --> 00:35:38,770 verklaarde het helemaal. 876 00:35:38,770 --> 00:35:41,520 >> Dus wat is een oplossing dan voor iets als dit, als de 877 00:35:41,520 --> 00:35:44,300 reden hiervoor is dat ik wordt verklaard binnen de accolades, die 878 00:35:44,300 --> 00:35:45,120 is blijkbaar slecht? 879 00:35:45,120 --> 00:35:45,410 Hier? 880 00:35:45,410 --> 00:35:46,820 PUBLIEK: [onverstaanbaar]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. MALAN: Ja. 882 00:35:47,150 --> 00:35:48,710 Dus we kunnen initialiseren buiten. 883 00:35:48,710 --> 00:35:53,530 Dus laat me gaan en verwijder de verklaring onderdelen waarbij 884 00:35:53,530 --> 00:35:55,820 Ik geef de soort, en laat mij dat doen hier op. 885 00:35:55,820 --> 00:36:00,220 Dus in lijn 5, het zegt nu "Geef me een int." Noem het i. 886 00:36:00,220 --> 00:36:03,400 Merk op dat in lijn 9, ik wil niet om dit te doen, omdat ik 887 00:36:03,400 --> 00:36:04,830 al de 32 bits. 888 00:36:04,830 --> 00:36:06,140 Ik wil niet op de computer voor een vraag 889 00:36:06,140 --> 00:36:07,630 verschillende 32 bits. 890 00:36:07,630 --> 00:36:09,850 Ik wil diezelfde 32 bits te gebruiken. 891 00:36:09,850 --> 00:36:13,190 En nu, omdat ik wordt verklaard in lijn 5, het is nog steeds legaal 892 00:36:13,190 --> 00:36:16,550 om het te gebruiken in de lijn 11 en lijn 12. 893 00:36:16,550 --> 00:36:19,310 >> Dus laat me proberen dit hercompileren en te zien 894 00:36:19,310 --> 00:36:20,490 Als Clang stopt schreeuwen. 895 00:36:20,490 --> 00:36:22,380 maken lus. 896 00:36:22,380 --> 00:36:25,470 Dus nu is het "impliciete declaratie van functie 897 00:36:25,470 --> 00:36:29,880 'GetInt' is ongeldig in C99. "Wat is dat? 898 00:36:29,880 --> 00:36:30,400 Ja? 899 00:36:30,400 --> 00:36:32,330 PUBLIEK: [onverstaanbaar]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. MALAN: Ja. 901 00:36:32,690 --> 00:36:35,520 Dus nu dat ik eigenlijk ben GetInt gebruikt, dit is niet iets 902 00:36:35,520 --> 00:36:38,190 dat komt alleen met C. Dit komt door CS50. 903 00:36:38,190 --> 00:36:39,890 Dus moeten we dit hier. 904 00:36:39,890 --> 00:36:41,450 En laat me terug te gaan naar de prompt naar beneden 905 00:36:41,450 --> 00:36:43,500 hier en opnieuw uitvoeren te maken. 906 00:36:43,500 --> 00:36:44,160 Oke, eindelijk. 907 00:36:44,160 --> 00:36:46,270 Nu hebben we besloten dat en de andere fout. 908 00:36:46,270 --> 00:36:48,930 Laat me nu lus lopen en zien wat er gebeurt. 909 00:36:48,930 --> 00:36:51,740 "Geef me een int." Ik geef het 11. 910 00:36:51,740 --> 00:36:53,100 Ik geef het -1. 911 00:36:53,100 --> 00:36:54,470 Ik geef het foo. 912 00:36:54,470 --> 00:36:56,080 Ik geef het 5. 913 00:36:56,080 --> 00:36:57,450 En nu werkt het inderdaad. 914 00:36:57,450 --> 00:36:59,410 Maar de vraag veranderd voor een reden hier. 915 00:36:59,410 --> 00:37:02,800 Waarom heeft het te zeggen retry een van deze tijden, maar geef me een 916 00:37:02,800 --> 00:37:03,920 int de andere drie keer? 917 00:37:03,920 --> 00:37:05,500 Waarom is dat gedrag anders? 918 00:37:05,500 --> 00:37:06,980 PUBLIEK: Gaf het een string. 919 00:37:06,980 --> 00:37:07,830 DAVID J. MALAN: Sorry? 920 00:37:07,830 --> 00:37:08,570 PUBLIEK: Je gaf het een string. 921 00:37:08,570 --> 00:37:08,990 DAVID J. MALAN: Ja. 922 00:37:08,990 --> 00:37:11,450 Dus we probeerden het een string in deze derde poging, 923 00:37:11,450 --> 00:37:12,490 toen ik foo getypt. 924 00:37:12,490 --> 00:37:13,200 Foo is een string. 925 00:37:13,200 --> 00:37:14,340 Het is duidelijk niet een int. 926 00:37:14,340 --> 00:37:17,500 En de manier waarop CS50 heeft GetInt geïmplementeerd, is dat we 927 00:37:17,500 --> 00:37:20,330 niet controleren of er iets is kleiner dan 0 of groter dan 10 928 00:37:20,330 --> 00:37:22,260 voor u, want hoe weten we van tevoren wat voor soort 929 00:37:22,260 --> 00:37:23,130 int je wilt? 930 00:37:23,130 --> 00:37:25,880 Maar we kunnen minimaal voor u controleren, heeft de gebruiker in ieder geval 931 00:37:25,880 --> 00:37:26,730 Typ een geheel getal? 932 00:37:26,730 --> 00:37:30,500 En als ze dat niet deden, we schreeuwen tegen de gebruiker door het intikken van "retry" op 933 00:37:30,500 --> 00:37:31,440 het scherm. 934 00:37:31,440 --> 00:37:34,210 >> Dus nu hebben we een programma dat looping. Oke. 935 00:37:34,210 --> 00:37:37,070 Nu, welke van deze soort beter construct? 936 00:37:37,070 --> 00:37:39,060 Dus dit is waar dingen beginnen om een ​​beetje rommelig te krijgen, de 937 00:37:39,060 --> 00:37:42,360 feit dat je aan te denken om een ​​variabele hier declareren up 938 00:37:42,360 --> 00:37:44,630 als je wilt om het te gebruiken binnenkant van sommige 939 00:37:44,630 --> 00:37:46,460 accolades en buiten. 940 00:37:46,460 --> 00:37:48,490 Maar zelfs als dit ziet er een beetje cryptisch op het eerste 941 00:37:48,490 --> 00:37:50,750 blik, gewoon opnieuw, denk aan de eenvoudige logica. 942 00:37:50,750 --> 00:37:54,630 Om iets te gebruiken in C, of ​​het een functie of 943 00:37:54,630 --> 00:37:57,680 het is een variabele, moet u op te nemen als het een functie 944 00:37:57,680 --> 00:37:59,770 in sommige bibliotheek, of je nodig hebt om het te verklaren. 945 00:37:59,770 --> 00:38:02,405 Maar nu moet je extra bewust van het feit dat 946 00:38:02,405 --> 00:38:04,940 je bent te verklaren op de juiste omvang. 947 00:38:04,940 --> 00:38:08,150 U bent niet zetten het te strak binnenkant van haakjes. 948 00:38:08,150 --> 00:38:09,410 >> Dus laat me eigenlijk terug te rollen. 949 00:38:09,410 --> 00:38:12,660 Als we terug gaan naar onze bijvoorbeeld van eerder, en ik ga 950 00:38:12,660 --> 00:38:19,245 terug naar voor int, int i = 0; i <10; i + +, en ik 951 00:38:19,245 --> 00:38:26,370 doen printf sterren, zoals deze, en sluit haakje, en nu 952 00:38:26,370 --> 00:38:30,410 printf i is nu - 953 00:38:30,410 --> 00:38:33,500 volgens dezelfde logica, wat zal er gebeuren als ik probeer te 954 00:38:33,500 --> 00:38:35,500 compileren dit programma? 955 00:38:35,500 --> 00:38:36,790 PUBLIEK: Ongeldige id. 956 00:38:36,790 --> 00:38:38,560 DAVID J. MALAN: Dus het is een andere ongeldige identificatie, 957 00:38:38,560 --> 00:38:39,470 zwart identifier. 958 00:38:39,470 --> 00:38:41,810 Nu, de reden is een beetje anders. 959 00:38:41,810 --> 00:38:44,370 Er is uiteraard geen accolades hier, maar dezelfde 960 00:38:44,370 --> 00:38:46,790 idee, hetzelfde verhaal van de werkingssfeer is van toepassing. 961 00:38:46,790 --> 00:38:50,340 Als u hebben verklaard een variabele als ik de binnenkant van een 962 00:38:50,340 --> 00:38:53,960 for-lus, zelfs als u niet expliciet geschreven krullend 963 00:38:53,960 --> 00:38:56,980 bretels, mentaal denken aan hen als nog daar te zijn, waarbij 964 00:38:56,980 --> 00:39:00,310 geval i is alleen geldig binnen de for-lus. 965 00:39:00,310 --> 00:39:03,080 Het is niet geldig als je eenmaal naar de volgende regel, die in 966 00:39:03,080 --> 00:39:05,090 dit geval is nu 10. 967 00:39:05,090 --> 00:39:09,060 Dus gewoon een paar problemen van omvang en dergelijke. 968 00:39:09,060 --> 00:39:12,620 Oke, nog vragen? 969 00:39:12,620 --> 00:39:15,310 >> Oke, dus dit is een soort van een triviale klein programma, 970 00:39:15,310 --> 00:39:17,450 afdrukken gewoon kleine sterren. 971 00:39:17,450 --> 00:39:20,400 Maar laten we eens kijken of je nog dit nummer hier. 972 00:39:20,400 --> 00:39:22,530 Dit is een ongelooflijk irritant lied de kinderen zouden zingen op 973 00:39:22,530 --> 00:39:23,550 de schoolbus en dergelijke. 974 00:39:23,550 --> 00:39:25,990 Maar wat is er leuk over het is dat het deze cycliciteit heeft, 975 00:39:25,990 --> 00:39:27,910 waarbij het is "99 flessen bier op de muur, 976 00:39:27,910 --> 00:39:28,520 99 flessen bier. 977 00:39:28,520 --> 00:39:31,030 Neem een ​​naar beneden, voorbij het rond, 98 flessen bier op de 978 00:39:31,030 --> 00:39:34,330 muur. "En dan het lied herhaalt de 97, dan 96, dan 979 00:39:34,330 --> 00:39:38,040 95, dan 94, helemaal naar beneden op 0 als u daadwerkelijk kreeg dat 980 00:39:38,040 --> 00:39:38,920 ver op de bus. 981 00:39:38,920 --> 00:39:41,960 Dus dit is een leuk programma om te sorteren van werktuig, omdat mijn 982 00:39:41,960 --> 00:39:43,650 God, als je kon gewoon de uitvoering van dit met een paar 983 00:39:43,650 --> 00:39:46,660 regels code, kunt u spugen de hele tekst van deze 984 00:39:46,660 --> 00:39:48,240 lied vrij snel. 985 00:39:48,240 --> 00:39:50,420 Maar langs de weg, kunnen we beginnen met het nu plagen elkaar een aantal 986 00:39:50,420 --> 00:39:52,460 van deze fundamentele lusconstructies en nu ook 987 00:39:52,460 --> 00:39:55,830 introduceren functies die we zelf schrijven, waarden retourneren 988 00:39:55,830 --> 00:39:57,020 dat we pas rond. 989 00:39:57,020 --> 00:39:58,910 Maar eerst, waarom we niet verder te gaan en nemen onze vijf minuten 990 00:39:58,910 --> 00:39:59,320 breken hier? 991 00:39:59,320 --> 00:40:01,480 En als we terug zijn, zullen we dit lied zingen. 992 00:40:05,680 --> 00:40:08,760 >> Oke, dus we zijn weer terug. 993 00:40:08,760 --> 00:40:11,850 En als ik zeg dat we nu dit lied zingen, ik bedoel 994 00:40:11,850 --> 00:40:13,250 programmatisch, niet verbaal. 995 00:40:13,250 --> 00:40:19,370 Hier hebben we dus beer1.c, een uitvoering van deze 996 00:40:19,370 --> 00:40:20,580 bepaald liedje. 997 00:40:20,580 --> 00:40:23,110 En net om duidelijk te zijn, voor degenen die niet bekend zijn met wat 998 00:40:23,110 --> 00:40:24,460 dit ding eruit ziet, laat me gaan 999 00:40:24,460 --> 00:40:27,070 en maak beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Laat me lopen beer1, en wat we zullen zien - hoeveel flessen 1001 00:40:30,400 --> 00:40:31,140 van bier zullen er zijn? 1002 00:40:31,140 --> 00:40:33,240 Ik typ in 99, zoals het lied zegt. 1003 00:40:33,240 --> 00:40:34,040 Enter. 1004 00:40:34,040 --> 00:40:35,650 En nu, als we bladeren door - 1005 00:40:35,650 --> 00:40:38,280 oops - als we bladeren door dit alles, zullen we zien dat 1006 00:40:38,280 --> 00:40:41,350 dit inderdaad zingen de hele song. 1007 00:40:44,050 --> 00:40:44,540 Wacht eens even. 1008 00:40:44,540 --> 00:40:46,240 Mijn schuifbalk is een beetje messed up. 1009 00:40:46,240 --> 00:40:47,940 Laten we gebruik maken van de groter venster. 1010 00:40:47,940 --> 00:40:53,500 Dus beer1, 99, daar gaan we. 1011 00:40:53,500 --> 00:40:56,420 Hier hebben we dus de hele song, veel sneller gezongen door de 1012 00:40:56,420 --> 00:40:58,450 computer dan het had kunnen zijn door ons. 1013 00:40:58,450 --> 00:41:00,340 Dus hoewel opmerken,, de cyclische natuur hier. 1014 00:41:00,340 --> 00:41:03,380 Het zegt 99, dan 99 dan, "neem een ​​naar beneden, geef het 1015 00:41:03,380 --> 00:41:04,740 rond, "dan 98. 1016 00:41:04,740 --> 00:41:06,640 En nu herhaalt opnieuw en opnieuw. 1017 00:41:06,640 --> 00:41:08,840 >> Dus dit is eigenlijk een perfecte gelegenheid voor een soort van 1018 00:41:08,840 --> 00:41:10,400 looping construeren. 1019 00:41:10,400 --> 00:41:12,950 Merk op dat ik ben een beetje van het snijden van een hoek hier. 1020 00:41:12,950 --> 00:41:15,960 Merk op dat ik zeg "98 flessen bier op de muur, 1021 00:41:15,960 --> 00:41:19,010 97 flessen bier op de muur, "en dat was gewoon zo 1022 00:41:19,010 --> 00:41:21,640 dat als we naar een flessen bier, heb ik niet 1023 00:41:21,640 --> 00:41:23,300 te maken over de Engels grammatica. 1024 00:41:23,300 --> 00:41:25,790 Maar we kunnen ook dit oplossen met een beetje van een if- 1025 00:41:25,790 --> 00:41:26,910 conditie, misschien. 1026 00:41:26,910 --> 00:41:30,110 Als dit nummer is enkelvoud, ga je gang en zeg "fles", 1027 00:41:30,110 --> 00:41:31,840 anders als het meervoud, zeggen "flessen". 1028 00:41:31,840 --> 00:41:34,150 Maar voor nu, ik ben helemaal te snijden die hoek. 1029 00:41:34,150 --> 00:41:35,520 Dus laten we eens kijken wat we hier hebben. 1030 00:41:35,520 --> 00:41:37,150 Dus we hebben een aantal opmerkingen aan de top. 1031 00:41:37,150 --> 00:41:39,450 Ik ben met inbegrip van deze twee bibliotheken, zoals 1032 00:41:39,450 --> 00:41:41,140 we hebben vaak geweest. 1033 00:41:41,140 --> 00:41:43,610 En nu laat ik scroll naar beneden naar de eerste 1034 00:41:43,610 --> 00:41:44,990 werkelijke regels code. 1035 00:41:44,990 --> 00:41:47,020 Lijn 17 gaat van start belangrijkste. 1036 00:41:47,020 --> 00:41:50,610 Lijn 21 en 20 heeft hoeveel flessen bier zal er zijn? 1037 00:41:50,610 --> 00:41:52,060 En dan noem ik GetInt. 1038 00:41:52,060 --> 00:41:53,800 En nu heb ik een beetje een sanity check. 1039 00:41:53,800 --> 00:41:57,030 >> Dus dit is een conventie dat we nu beginnen de aanneming tot 1040 00:41:57,030 --> 00:41:59,620 strenger controleren invoer van de gebruiker. 1041 00:41:59,620 --> 00:42:01,710 Soms heb je gewoon niet willen opnieuw vragen ze 1042 00:42:01,710 --> 00:42:02,630 en opnieuw en opnieuw. 1043 00:42:02,630 --> 00:42:05,620 Als de gebruiker schroeven en werkt niet mee, prima. 1044 00:42:05,620 --> 00:42:07,430 Stoppen en gewoon niet omgaan met hen. 1045 00:42:07,430 --> 00:42:08,990 En dus dat is wat ik hier doe. 1046 00:42:08,990 --> 00:42:12,520 Als n kleiner is dan 1, ik ben gewoon ga schreeuwen tegen de gebruiker, 1047 00:42:12,520 --> 00:42:14,330 'Het spijt me, dat heeft geen zin. " En dan ga ik naar 1048 00:42:14,330 --> 00:42:16,650 willekeurig terug 1. 1049 00:42:16,650 --> 00:42:18,550 Dus nogmaals, dit is slechts een conventie om te wennen aan. 1050 00:42:18,550 --> 00:42:19,850 Voor nu, neem het op geloof. 1051 00:42:19,850 --> 00:42:22,700 Maar tot nu toe hebben we altijd terug 0, omdat 1052 00:42:22,700 --> 00:42:25,204 we hebben gezegd terug te keren 0 betekent wat? 1053 00:42:25,204 --> 00:42:26,000 PUBLIEK: Succes. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. MALAN: Succes, dat is alles. 1055 00:42:27,320 --> 00:42:29,740 Dus nu we eindelijk gaan beginnen na te denken over 1056 00:42:29,740 --> 00:42:31,330 niet-successen - 1057 00:42:31,330 --> 00:42:33,760 Met andere woorden, hoek gevallen fouttoestanden - 1058 00:42:33,760 --> 00:42:37,520 nu heb ik een oneindig aanbod, of op zijn minst vier miljard 1059 00:42:37,520 --> 00:42:39,790 mogelijke dingen die kunnen misgaan in mijn programma's. 1060 00:42:39,790 --> 00:42:42,300 En ik kan beginnen met het toewijzen van hen een individueel nummer. 1061 00:42:42,300 --> 00:42:44,340 Nu, in het algemeen volstaat het om gewoon terug te keren 1062 00:42:44,340 --> 00:42:45,730 iets anders dan 0. 1063 00:42:45,730 --> 00:42:48,040 Dus we gaan gewoon een terug te keren voor nu. 1064 00:42:48,040 --> 00:42:51,440 Maar de reden voor de terugkeer 1 is dat zodra u terugkeert 1065 00:42:51,440 --> 00:42:55,110 1, raden wat er gebeurt met de rest van het programma? 1066 00:42:55,110 --> 00:42:55,720 Het stopt. 1067 00:42:55,720 --> 00:42:56,560 Dat is het. 1068 00:42:56,560 --> 00:42:59,150 Dus het feit dat ik een terugkeer is effectief 1069 00:42:59,150 --> 00:43:02,950 kortsluiting van dit programma executie, zodat 1070 00:43:02,950 --> 00:43:06,780 niets onder lijn 27 zal blijven uitvoeren. 1071 00:43:06,780 --> 00:43:09,210 Zodra belangrijkste rendement, dat is het. 1072 00:43:09,210 --> 00:43:13,160 >> Oke, dus als de gebruiker doet samenwerken en bereiken we lijn 30 1073 00:43:13,160 --> 00:43:15,680 omdat ze getypt in een legitieme getal, hier is mijn 1074 00:43:15,680 --> 00:43:16,990 uitvoering van dit nummer. 1075 00:43:16,990 --> 00:43:19,050 Dus ik eerst af te drukken van een nieuwe regel karakter, alleen voor 1076 00:43:19,050 --> 00:43:19,880 esthetiek. 1077 00:43:19,880 --> 00:43:21,500 Ik heb nu een for-lus. 1078 00:43:21,500 --> 00:43:22,930 En let op ik doe dingen in een beetje 1079 00:43:22,930 --> 00:43:23,880 van een andere richting. 1080 00:43:23,880 --> 00:43:26,210 Ik heb geen tot minder dan doen, ik heb geen tot + + doen. 1081 00:43:26,210 --> 00:43:30,660 Ik kan in plaats daarvan zeggen initialiseren van een variabele i, stel deze gelijk aan 1082 00:43:30,660 --> 00:43:35,080 n is het aantal de gebruiker heeft ingevoerd in, doe dan het volgende, zodat 1083 00:43:35,080 --> 00:43:39,590 Zolang ik groter is dan 0, dan is i - 1084 00:43:39,590 --> 00:43:42,070 als je eenmaal klaar bent met een iteratie van deze lus. 1085 00:43:42,070 --> 00:43:44,310 Dus we kunnen aftellen met behulp van een for-lus ook. 1086 00:43:44,310 --> 00:43:47,520 Nu, dit is vrij veel week een spul nu, met printf. 1087 00:43:47,520 --> 00:43:51,770 Dus print "% d flessen bier op de muur." Print "% d 1088 00:43:51,770 --> 00:43:54,990 flessen bier. "" Neem een ​​naar beneden, het rond gaan. "Print 1089 00:43:54,990 --> 00:43:58,880 "% D flessen bier op de muur." Dus het is nog steeds% d, maar 1090 00:43:58,880 --> 00:44:02,770 merken dat het argument printf aan het veranderen is. 1091 00:44:02,770 --> 00:44:05,840 Na de komma, ik heb ik, want ik wil 99 zeggen. 1092 00:44:05,840 --> 00:44:08,590 Na deze komma, ik heb ik, want ik wil 99 zeggen. 1093 00:44:08,590 --> 00:44:14,030 Na deze komma, ik heb i - 1, want ik wil tot 98 zeggen in 1094 00:44:14,030 --> 00:44:16,260 deze eerste iteratie, enzovoort. 1095 00:44:16,260 --> 00:44:18,520 En nu hier beneden, ik heb alleen een paar stomme opmerking. 1096 00:44:18,520 --> 00:44:22,270 En dan lijn 42, I 0 terug volgens afspraak, wat betekent dat 1097 00:44:22,270 --> 00:44:23,650 alles in orde is. 1098 00:44:23,650 --> 00:44:24,490 >> Dus wat als ik goofed? 1099 00:44:24,490 --> 00:44:26,350 Wat zou een veel voorkomende fout hier te zijn? 1100 00:44:26,350 --> 00:44:29,200 Nou, wat als ik per ongeluk zei nou, ik wil tellen 1101 00:44:29,200 --> 00:44:31,640 tot 0, ik wil 0 flessen bier op de muur? 1102 00:44:31,640 --> 00:44:34,620 Dus bijv. i groter dan of gelijk aan 0. 1103 00:44:34,620 --> 00:44:38,920 Wat gaat er het symptoom dat ik nu kijken of ik opnieuw te compileren zijn 1104 00:44:38,920 --> 00:44:41,173 beer1 en voer het uit? 1105 00:44:41,173 --> 00:44:42,120 PUBLIEK: Negatief. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. MALAN: Ja, het is ga negatief. 1107 00:44:43,590 --> 00:44:45,950 Dit is een off-door-een fout, een ongelooflijk 1108 00:44:45,950 --> 00:44:47,270 veel gemaakte fout te maken. 1109 00:44:47,270 --> 00:44:48,960 Laten we in feite terug naar de terminal-venster en doe het 1110 00:44:48,960 --> 00:44:50,620 hier, zodat we kunnen zien meer in een tijd. 1111 00:44:50,620 --> 00:44:53,280 Voer, 99 flessen bier. 1112 00:44:53,280 --> 00:44:56,580 Close, maar we gingen ooit zo iets te ver. 1113 00:44:56,580 --> 00:45:00,500 We zongen het lied te ver naar beneden, zodat we nu de getroffen 1114 00:45:00,500 --> 00:45:01,510 negatief getal. 1115 00:45:01,510 --> 00:45:03,680 Het maakt dus niet helemaal werkt. 1116 00:45:03,680 --> 00:45:06,450 >> Oke, dus we kunnen gemakkelijk vast te stellen dat door terug te gaan naar de 1117 00:45:06,450 --> 00:45:07,650 zoals het ooit was. 1118 00:45:07,650 --> 00:45:10,360 Maar wat zijn een aantal mogelijkheden nu 1119 00:45:10,360 --> 00:45:11,190 verbetering? 1120 00:45:11,190 --> 00:45:17,200 Nou, laat me openen beer2.c en hier scroll naar beneden en neem een 1121 00:45:17,200 --> 00:45:19,310 kijk naar deze versie. 1122 00:45:19,310 --> 00:45:21,370 Wat is het eerste dat eruit springt als verschillende 1123 00:45:21,370 --> 00:45:23,715 in deze versie hier? 1124 00:45:23,715 --> 00:45:24,190 PUBLIEK: [onverstaanbaar]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. MALAN: Ja, dus niet meer ik, want het kwam bij 1126 00:45:26,510 --> 00:45:29,350 me weet je wat, ik de gebruiker voor n te vragen, en dan ben ik 1127 00:45:29,350 --> 00:45:33,580 het instellen van i gelijk is aan n, en dan ga ik veranderen ik, maar ik ben nooit 1128 00:45:33,580 --> 00:45:34,590 aanraken n weer. 1129 00:45:34,590 --> 00:45:37,390 Dus wat is het nou was het punt dat u de toewijzing van nog eens 32 1130 00:45:37,390 --> 00:45:45,210 stukjes genaamd i gewoon zo dat ik kan een andere variabele te hebben? 1131 00:45:45,210 --> 00:45:47,960 Dus in dit geval, ik soort van erkend dat onnodige 1132 00:45:47,960 --> 00:45:49,190 designkenmerk. 1133 00:45:49,190 --> 00:45:52,730 En ik ga nu te zeggen, terwijl n groter is dan 0, gaat u 1134 00:45:52,730 --> 00:45:56,180 vooruit en print de zelfde lied, het passeren van een n aan printf als de 1135 00:45:56,180 --> 00:46:00,210 tweede argument, en n - 1 als het tweede argument hier beneden. 1136 00:46:00,210 --> 00:46:02,930 En dan op elke iteratie van deze lus, ga je gang en net 1137 00:46:02,930 --> 00:46:05,080 verlagen n zelf. 1138 00:46:05,080 --> 00:46:06,960 Nu functioneel dit programma 1139 00:46:06,960 --> 00:46:08,010 zal identiek. 1140 00:46:08,010 --> 00:46:10,730 Als ik typ in 99, n begint bij 99. 1141 00:46:10,730 --> 00:46:12,890 Ik decrement, decrement, verlagen, verlagen. 1142 00:46:12,890 --> 00:46:15,875 Ik ga de hele weg naar beneden naar "Een fles bier op 1143 00:46:15,875 --> 00:46:16,740 de muur, een fles bier. 1144 00:46:16,740 --> 00:46:18,020 Neem een ​​naar beneden, voorbij het rond. 1145 00:46:18,020 --> 00:46:21,480 0 flessen bier op de muur. "Het einde, want ik heb 1146 00:46:21,480 --> 00:46:23,200 krijgen de aandoening correct. 1147 00:46:23,200 --> 00:46:24,280 Het is groter dan 0. 1148 00:46:24,280 --> 00:46:26,220 Ik heb niet maken deze fout. 1149 00:46:26,220 --> 00:46:28,470 >> Dus dat is beter, versie een of versie twee? 1150 00:46:31,380 --> 00:46:33,480 Dus hoorde ik een heleboel murmureringen voor twee. 1151 00:46:33,480 --> 00:46:34,730 Waarom twee? 1152 00:46:37,210 --> 00:46:38,225 Wat is dat? 1153 00:46:38,225 --> 00:46:39,215 PUBLIEK: [onverstaanbaar]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. MALAN: Oh, oke. 1155 00:46:40,070 --> 00:46:42,870 Dus het zal niet gaan onder 0, maar vergeet niet, in versie een, de 1156 00:46:42,870 --> 00:46:45,870 originele juiste versie ging niet onder 0 niet. 1157 00:46:45,870 --> 00:46:48,340 Dus vergeet niet dat dit de juiste versie. 1158 00:46:48,340 --> 00:46:51,630 Dus laten we op zijn minst te vergelijken van de twee juiste versies. 1159 00:46:51,630 --> 00:46:53,300 Wat is een argument ten gunste van versie 1160 00:46:53,300 --> 00:46:55,146 twee zijn, mmm, beter? 1161 00:46:55,146 --> 00:46:55,642 Ja? 1162 00:46:55,642 --> 00:46:57,630 PUBLIEK: Het gebruikt minder ruimte in beslag. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. MALAN: Oke, dus hij gebruikt minder ruimte in beslag, toch? 1164 00:46:59,530 --> 00:47:02,900 Overwegende dat de versie die wordt gebruikt 32 bits voor n, en dan nog 1165 00:47:02,900 --> 00:47:07,680 32 bits voor i. 1166 00:47:07,680 --> 00:47:10,060 Versie twee slechts 32 bits gebruikt voor n, zodat 1167 00:47:10,060 --> 00:47:11,700 lijkt een plus. 1168 00:47:11,700 --> 00:47:12,950 Andere gedachten? 1169 00:47:18,070 --> 00:47:21,520 Wil iemand pleiten voor een? 1170 00:47:21,520 --> 00:47:22,070 Ja? 1171 00:47:22,070 --> 00:47:25,240 PUBLIEK: Je moet je extra regel code te gebruiken voor n -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. MALAN: Oke, zeker. 1173 00:47:26,090 --> 00:47:26,960 Dus dat is eerlijk. 1174 00:47:26,960 --> 00:47:29,040 Dus dit gewoon, althans bij mij - 1175 00:47:29,040 --> 00:47:31,940 Ik bedoel, dit eigenlijk voelt een beetje rommeliger, het feit dat 1176 00:47:31,940 --> 00:47:35,120 Ik kan niet sorteren van kapselen al mijn logica in een 1177 00:47:35,120 --> 00:47:38,030 mooie lijn, de for-lus, als de for-lus kan. 1178 00:47:38,030 --> 00:47:40,240 Hier, ik soort van moet gehecht worden op deze n - 1179 00:47:40,240 --> 00:47:41,120 Aan het einde van de lus, doordat 1180 00:47:41,120 --> 00:47:42,550 Het is logisch noodzakelijk. 1181 00:47:42,550 --> 00:47:45,190 Maar het soort wrijft mij de verkeerde kant op, alleen maar omdat het 1182 00:47:45,190 --> 00:47:48,260 lijkt los van de logica van hier, ook al, 1183 00:47:48,260 --> 00:47:49,430 nogmaals, het is noodzakelijk. 1184 00:47:49,430 --> 00:47:50,990 Andere gedachten? 1185 00:47:50,990 --> 00:47:51,490 Ja? 1186 00:47:51,490 --> 00:47:52,740 PUBLIEK: [onverstaanbaar]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. MALAN: Ja. 1188 00:47:58,350 --> 00:48:00,730 Dus wat als je in plaats daarvan, aan het einde van de song, wilde 1189 00:48:00,730 --> 00:48:02,950 opnieuw af te drukken de naam van het liedje? 1190 00:48:02,950 --> 00:48:05,660 Net als "Bedankt voor het spelen 99 flesjes bier", of iets 1191 00:48:05,660 --> 00:48:06,690 dom als dat? 1192 00:48:06,690 --> 00:48:09,750 Maar het punt is, je wilde de toegang tot de oorspronkelijke waarde. 1193 00:48:09,750 --> 00:48:13,180 Het feit dat u gemuteerd of veranderd n op elke 1194 00:48:13,180 --> 00:48:16,330 iteratie en daarom hebben vernietigd zijn oorspronkelijke waarde 1195 00:48:16,330 --> 00:48:18,650 betekent dat u gewoon niet doen, dat aan het eind. 1196 00:48:18,650 --> 00:48:20,660 Nu, misschien wel, we duidelijk niet willen doen 1197 00:48:20,660 --> 00:48:21,450 dat in dit programma. 1198 00:48:21,450 --> 00:48:22,350 Dus who cares? 1199 00:48:22,350 --> 00:48:23,630 Maar dat is een zeer valide punt. 1200 00:48:23,630 --> 00:48:25,520 En om eerlijk te zijn, er is echt niemand 1201 00:48:25,520 --> 00:48:26,630 hier te beantwoorden. 1202 00:48:26,630 --> 00:48:28,740 Ze zijn allebei in gelijke mate juist. 1203 00:48:28,740 --> 00:48:30,210 Ik kon overtuigd worden in beide richtingen. 1204 00:48:30,210 --> 00:48:33,310 Ik zal zeggen dat, in het algemeen, is het een goed principe als je 1205 00:48:33,310 --> 00:48:36,030 vroeg de gebruiker voor een waarde en u opgeslagen in een variabele 1206 00:48:36,030 --> 00:48:38,730 zoals n, gewoon soort van uit principe, is het waarschijnlijk goed 1207 00:48:38,730 --> 00:48:40,160 die rond te houden. 1208 00:48:40,160 --> 00:48:43,400 En alle gegevens die u wilt opnieuw en opnieuw muteren, net 1209 00:48:43,400 --> 00:48:46,030 geef jezelf een kopie van die variabele, gewoon zo dat je 1210 00:48:46,030 --> 00:48:47,830 toegang tot het origineel. 1211 00:48:47,830 --> 00:48:51,040 U besteden 32 meer bits, maar de realiteit is dit 1212 00:48:51,040 --> 00:48:53,490 computer heeft, zoals, twee gigabyte aan RAM-geheugen van deze dag, 1213 00:48:53,490 --> 00:48:55,310 en we zijn spitsvondigheden meer dan 32 bits? 1214 00:48:55,310 --> 00:48:56,320 Echt niet zo'n big deal. 1215 00:48:56,320 --> 00:48:58,550 En zelfs op dit apparaat hier, met een halve gig of een 1216 00:48:58,550 --> 00:49:01,700 gigabyte aan RAM-geheugen, 32 bits versus 64 bits, 1217 00:49:01,700 --> 00:49:02,920 niet zo'n big deal. 1218 00:49:02,920 --> 00:49:05,890 Zeker vandaag de dag, het gaat om plaats te overweldigd door de grootte zijn 1219 00:49:05,890 --> 00:49:08,400 van het programma zelf, die zal worden honderden 1220 00:49:08,400 --> 00:49:10,890 kilobytes, zo niet een paar megabytes, deze dagen. 1221 00:49:10,890 --> 00:49:13,550 >> Dus redelijk gaat, niet een juist antwoord. 1222 00:49:13,550 --> 00:49:15,490 Maar in ieder geval, dat zijn de gedachten die begint te 1223 00:49:15,490 --> 00:49:16,790 gaan door je hoofd? 1224 00:49:16,790 --> 00:49:19,600 Omdat in PSET 0, ook al hebben we eigenlijk alleen verwacht 1225 00:49:19,600 --> 00:49:22,340 correctheid, of in ieder geval afwijzen verschillende bugs die 1226 00:49:22,340 --> 00:49:25,440 die u misschien tegenkomt, als we vooruit, het ontwerp is 1227 00:49:25,440 --> 00:49:27,910 weer een belangrijk aspect, zowel van het schrijven van code 1228 00:49:27,910 --> 00:49:29,770 en ook onze evaluatie van code. 1229 00:49:29,770 --> 00:49:32,310 En dus op zijn minst te denken over dit soort dingen. 1230 00:49:32,310 --> 00:49:35,590 En alleen maar omdat iets werkt wil niet zeggen dat het goed is, 1231 00:49:35,590 --> 00:49:37,130 betekent niet dat het is goed ontworpen. 1232 00:49:37,130 --> 00:49:38,820 En dat is een van de dingen die het onderwijs jongens en 1233 00:49:38,820 --> 00:49:41,990 probleem sets zal ons helpen plagen deel in de tijd. 1234 00:49:41,990 --> 00:49:45,020 >> Nou, hoe zit het, laten we zeggen, deze versie hier? 1235 00:49:45,020 --> 00:49:49,090 Laat mij iets doen een beetje sexy hier in een moment. 1236 00:49:49,090 --> 00:49:50,740 Laat me eerst te ontdoen van deze. 1237 00:49:50,740 --> 00:49:54,120 En laten we nu dit oplossen grammaticale kwestie. 1238 00:49:54,120 --> 00:49:58,780 Dus in deze versie, wil ik de grammatica vast, zodat, 1239 00:49:58,780 --> 00:50:02,460 in plaats van alleen maar zeggen haakjes s, zoals "fles" 1240 00:50:02,460 --> 00:50:03,360 of "flessen" - 1241 00:50:03,360 --> 00:50:04,900 Ik wil niet naar die hoek snijden - 1242 00:50:04,900 --> 00:50:08,350 Ik wil ook dynamisch afdrukken het woord "flessen" 1243 00:50:08,350 --> 00:50:12,820 of "fles", waardoor het gebruik van deze% s placeholders vandaag. 1244 00:50:12,820 --> 00:50:16,550 Dus ik moet voorwaardelijk controleren wat is de waarde van i. 1245 00:50:16,550 --> 00:50:19,590 En als het een, ik wil "fles" zeggen, en als het even wat 1246 00:50:19,590 --> 00:50:23,115 anders, ik wil "flessen" te zeggen. Dus laten we proberen om dit te doen. 1247 00:50:23,115 --> 00:50:31,340 Dus als i == 1, dan laat me gaan en verklaren - 1248 00:50:31,340 --> 00:50:34,080 Ik heb een string, dus laat mij dat doen snaar s1, want het is de 1249 00:50:34,080 --> 00:50:36,070 eerste string Ik geef om op dit moment. 1250 00:50:36,070 --> 00:50:40,980 Ik ga "fles" te zeggen. En dan, laten we eens kijken, string 1251 00:50:40,980 --> 00:50:43,110 s2 - en ik zal uitleggen waar ik heen ga in een moment - 1252 00:50:43,110 --> 00:50:47,650 "Flessen". Dus herinneren dat, in dit lied, moeten we in staat zijn 1253 00:50:47,650 --> 00:50:50,580 om mogelijk afdrukken meer twee verschillende woorden. 1254 00:50:50,580 --> 00:50:53,590 Dus als we terugkijken hier, merken dat als we in 1255 00:50:53,590 --> 00:50:56,440 dit voorbeeld hier, "twee flessen bier op de muur, 1256 00:50:56,440 --> 00:50:59,490 twee flessen bier, neem een ​​naar beneden, voorbij het rond ", ik wil 1257 00:50:59,490 --> 00:51:02,380 Deze vierde lijn nu te zeggen "een fles bier op de 1258 00:51:02,380 --> 00:51:04,900 muur ". Dus ik moet beslissen, wil ik zeggen:" flessen "of 1259 00:51:04,900 --> 00:51:07,780 "Fles"? Dus ik ga naar willekeur te zeggen, oke, 1260 00:51:07,780 --> 00:51:10,530 Ik ga nu verklaren een variabele genaamd s1, tekenreeks 1261 00:51:10,530 --> 00:51:13,830 een, dat gaat aangesloten hier binnen en ook hier, 1262 00:51:13,830 --> 00:51:16,070 want die woorden zijn altijd identiek, alleen maar omdat van de 1263 00:51:16,070 --> 00:51:17,290 aard van de song. 1264 00:51:17,290 --> 00:51:20,100 En ik ga bellen s2 welk woord ik wil 1265 00:51:20,100 --> 00:51:21,560 uiteindelijk hier ook zien naar beneden. 1266 00:51:21,560 --> 00:51:25,530 Nu, letterlijk, 99 keer van de 100, het gaat om de 1267 00:51:25,530 --> 00:51:28,820 hetzelfde in beide gevallen, want 3 is meervoudig, 2 1268 00:51:28,820 --> 00:51:30,200 meervoud, 4 is meervoud. 1269 00:51:30,200 --> 00:51:34,640 Maar in deze hoek geval, waar we bij 2 en vervolgens op 1, of 1270 00:51:34,640 --> 00:51:37,250 zelfs 1 en daarna 0, ik heb deze logica. 1271 00:51:37,250 --> 00:51:41,020 Dus ik moet wat tijd door te brengen in mijn code om dat recht. 1272 00:51:41,020 --> 00:51:47,530 Dus als ik dit doe, als ik == 1 en stel s1 gelijk aan "fles" 1273 00:51:47,530 --> 00:51:52,010 en S2 gelijk aan "flessen", omdat dit voor een 1274 00:51:52,010 --> 00:51:56,340 fles, en dit zal voor 0 flessen. 1275 00:51:56,340 --> 00:51:58,250 En dit hier, dit is wat voor? 1276 00:51:58,250 --> 00:51:59,780 Voor alle duidelijkheid. 1277 00:51:59,780 --> 00:52:00,620 Dit is slechts een reactie. 1278 00:52:00,620 --> 00:52:03,730 Dus het feit dat je kunt een regel commentaar hebben betekent dat je 1279 00:52:03,730 --> 00:52:06,110 kan comment code zoals deze, maar een andere veel voorkomende 1280 00:52:06,110 --> 00:52:09,050 paradigma is ook dat als je een super-korte zin die 1281 00:52:09,050 --> 00:52:11,410 je wilt jezelf en het is gewoon beter leesbaar te maken aan 1282 00:52:11,410 --> 00:52:13,270 het goed aan het einde van de regel code, kunt u 1283 00:52:13,270 --> 00:52:15,230 absoluut iets doen als dit. 1284 00:52:15,230 --> 00:52:20,150 >> Dus nu wat als ik dit doe? Else if i niet gelijk aan 1. 1285 00:52:20,150 --> 00:52:21,620 Dus bang is gelijk aan - 1286 00:52:21,620 --> 00:52:23,150 uitroepteken staat bekend als "bang". 1287 00:52:23,150 --> 00:52:25,080 Dus bang = 1. 1288 00:52:25,080 --> 00:52:28,530 Dus als ik niet gelijk is aan 1, wat moet ik in plaats daarvan wil doen? 1289 00:52:28,530 --> 00:52:31,700 Nou, het eerste woord dat ik wil zijn wat? 1290 00:52:34,620 --> 00:52:40,030 Dus string 1 zou moeten zijn "flessen" voor meerdere flessen, 1291 00:52:40,030 --> 00:52:42,440 en dan zal dit meervoud "flessen" ook, voor nu. 1292 00:52:42,440 --> 00:52:43,800 En we zullen zien of dit ook daadwerkelijk krijgt ons 1293 00:52:43,800 --> 00:52:44,870 waar we naartoe willen. 1294 00:52:44,870 --> 00:52:47,680 Dus als ik nu naar beneden scrollen hier, merken dat ik het aansluiten van 1295 00:52:47,680 --> 00:52:50,170 niet alleen ik, maar s1. 1296 00:52:50,170 --> 00:52:51,860 Ik ben het inpluggen van i en s1. 1297 00:52:51,860 --> 00:52:54,440 En hier beneden, ik minus 1, wat hetzelfde is als 1298 00:52:54,440 --> 00:52:55,920 voor, maar s2. 1299 00:52:55,920 --> 00:52:58,730 Met andere woorden, ik wil dat het Engels woord te veranderen op basis 1300 00:52:58,730 --> 00:52:59,930 op deze logica. 1301 00:52:59,930 --> 00:53:03,310 Nu, er is al een aantal problemen in deze code. 1302 00:53:03,310 --> 00:53:08,460 Wat is al gebroken uit de poort hier? 1303 00:53:08,460 --> 00:53:10,796 Ja? 1304 00:53:10,796 --> 00:53:13,210 PUBLIEK: [onverstaanbaar]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. MALAN: Precies. 1306 00:53:13,800 --> 00:53:16,030 Dus ik heb al geschonden de les van omvang. 1307 00:53:16,030 --> 00:53:19,610 Dus ik heb verklaard s1 en s2, maar ik heb het gedaan binnenkant van 1308 00:53:19,610 --> 00:53:22,980 accolades, wat betekent ja, deze code zal werken op 1309 00:53:22,980 --> 00:53:27,430 tot lijn 42, maar zodra ik lijn 43 geraakt, wat denk je er geen 1310 00:53:27,430 --> 00:53:28,900 meer bestaat? 1311 00:53:28,900 --> 00:53:32,600 Nou, wat denk je nu niet meer in omvang - niet s1 of s2. 1312 00:53:32,600 --> 00:53:33,780 Dus we moeten dit op te lossen. 1313 00:53:33,780 --> 00:53:36,180 Dus laat me verwijderen van de verklaringen. 1314 00:53:36,180 --> 00:53:39,320 En ik verlaat de variabele namen en verwijder deze hier 1315 00:53:39,320 --> 00:53:40,120 en hier verwijder deze. 1316 00:53:40,120 --> 00:53:43,557 En in welke lijnen zou ik echt verklaar deze dingen? 1317 00:53:43,557 --> 00:53:44,960 PUBLIEK: [onverstaanbaar]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. MALAN: Ja, dus waarschijnlijk 1319 00:53:45,410 --> 00:53:46,850 recht omhoog hier, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Dus snaar s1 en s2 snaar. 1321 00:53:50,670 --> 00:53:51,950 En het blijkt, kan ik dit doen. 1322 00:53:51,950 --> 00:53:54,260 Als je verklaren twee variabelen van hetzelfde type, 1323 00:53:54,260 --> 00:53:57,420 je kunt eigenlijk gewoon gebruik maken van een komma en dat doen in C. Alle 1324 00:53:57,420 --> 00:53:58,970 Oke, dus nu heb ik twee variabelen - 1325 00:53:58,970 --> 00:53:59,860 s1 en s2. 1326 00:53:59,860 --> 00:54:02,000 Ik ben ze toe te kennen waarden in deze 1327 00:54:02,000 --> 00:54:04,210 omstandigheden hier, of hier. 1328 00:54:04,210 --> 00:54:06,690 En dan heb ik het gebruik ervan beneden. 1329 00:54:06,690 --> 00:54:10,960 Hoe goed is dit nu gaat werken? 1330 00:54:10,960 --> 00:54:12,740 >> Nou, het is nog steeds een beetje buggy, maar laten we eens kijken op zijn minst 1331 00:54:12,740 --> 00:54:13,730 hoe ver we zijn gekomen. 1332 00:54:13,730 --> 00:54:16,500 Dus laat me gaan en maak beer3. 1333 00:54:16,500 --> 00:54:17,695 Hierdoor beer3? 1334 00:54:17,695 --> 00:54:19,410 Yep, dit is beer3. 1335 00:54:19,410 --> 00:54:21,510 En nu laat ik verder gaan en lopen beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 We kunnen waarschijnlijk overslaan meeste van hen. 1338 00:54:25,840 --> 00:54:29,100 En hier beneden, kijk eens aan. 1339 00:54:29,100 --> 00:54:31,110 "Een fles bier op de muur, een fles bier, nemen 1340 00:54:31,110 --> 00:54:34,306 een naar beneden, voorbij het rond, 0 flessen bier op de muur. " 1341 00:54:34,306 --> 00:54:37,570 Maar ik uw aandacht slechts de helft van de oplossing. 1342 00:54:37,570 --> 00:54:39,620 Soort verpest hier. 1343 00:54:39,620 --> 00:54:43,030 Dus het lijkt erop dat de hoek gevallen zich voordoen wanneer i gelijk is aan wat 1344 00:54:43,030 --> 00:54:44,030 twee waarden? 1345 00:54:44,030 --> 00:54:45,020 PUBLIEK: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 DAVID J. MALAN: 2 en 1. 1347 00:54:46,190 --> 00:54:48,180 Het is niet 1 en niet 1. 1348 00:54:48,180 --> 00:54:51,890 Het is echt alleen deze laatste twee strofen van dit lied. 1349 00:54:51,890 --> 00:54:53,890 Dus wat moet ik in plaats daarvan wil doen? 1350 00:54:53,890 --> 00:54:58,890 Dus ik lijken te hebben gevangen het geval dat als ik is == tot 1, 1351 00:54:58,890 --> 00:55:02,240 dan is het eerste woord is "fles", maar het tweede woord 1352 00:55:02,240 --> 00:55:07,230 is "flessen". Maar hier, ik wil veranderen dat dit == 2. 1353 00:55:07,230 --> 00:55:08,570 En als dit het geval is, wat wil ik de 1354 00:55:08,570 --> 00:55:09,620 eerste woord te zijn? 1355 00:55:09,620 --> 00:55:10,430 PUBLIEK: "Flessen". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. MALAN: "Flessen", dus voor twee flessen. 1357 00:55:12,890 --> 00:55:14,690 En dan dit woord hier zou moeten zijn - 1358 00:55:14,690 --> 00:55:15,340 PUBLIEK: "Bottle". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. MALAN: "Bottle", enkelvoud. 1360 00:55:20,430 --> 00:55:25,160 >> Oke, laten we uit te zoomen, ga terug naar hier, re-run te maken, 1361 00:55:25,160 --> 00:55:28,590 re-run beer3, type 99 weer. 1362 00:55:28,590 --> 00:55:30,710 Oke, 'Segmentation fault (core dumped). " 1363 00:55:30,710 --> 00:55:32,780 Wat heb ik verkeerd gedaan? 1364 00:55:36,050 --> 00:55:38,722 PUBLIEK: Je hebt geen waarde [onverstaanbaar]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. MALAN: Ah, goed punt. 1366 00:55:40,480 --> 00:55:43,310 Oke, dus wat is er mis hier? 1367 00:55:43,310 --> 00:55:45,450 Dus segmentatie fout, en we eigenlijk gaan zien 1368 00:55:45,450 --> 00:55:49,020 dit wel een paar keer in de toekomst bewust. 1369 00:55:49,020 --> 00:55:51,030 Maar voor nu, dit betekent wat eigenlijk? 1370 00:55:51,030 --> 00:55:53,620 Een segmentation fault bijna altijd betekent dat je moet 1371 00:55:53,620 --> 00:55:56,760 een of andere manier geprobeerd om het geheugen, RAM-geheugen in uw computer, 1372 00:55:56,760 --> 00:56:00,600 dat niet van u is, dat u niet echt vroeg de 1373 00:56:00,600 --> 00:56:02,050 besturingssysteem voor. 1374 00:56:02,050 --> 00:56:04,440 Dus in dit geval, let op wat ik heb gedaan, dat is 1375 00:56:04,440 --> 00:56:05,870 gebrekkig in mijn logica. 1376 00:56:05,870 --> 00:56:09,500 Ik heb toegewezen s1 en s2 een waarde als ik gelijk is aan 1. 1377 00:56:09,500 --> 00:56:11,590 Ik heb ook gedaan als ik gelijk is aan 2. 1378 00:56:11,590 --> 00:56:13,710 Maar ik heb het niet gedaan in de oneindige aantal andere 1379 00:56:13,710 --> 00:56:14,690 mogelijkheden - 1380 00:56:14,690 --> 00:56:17,940 in het bijzonder 3 of 4 of dot dot, dot, 99. 1381 00:56:17,940 --> 00:56:20,100 Dus een oplossing voor dit kon gewoon laten we 1382 00:56:20,100 --> 00:56:22,190 een andere aandoening. 1383 00:56:22,190 --> 00:56:26,780 En laat me gaan hier binnen en zeggen: s1 gelijk aan - 1384 00:56:26,780 --> 00:56:28,180 wat moet het hier zijn? 1385 00:56:28,180 --> 00:56:28,750 PUBLIEK: [onverstaanbaar]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. MALAN: "Flessen", want in het voorkomende geval, 1387 00:56:30,460 --> 00:56:32,020 het is gewoon hetzelfde. 1388 00:56:32,020 --> 00:56:35,580 Dus gelijk citaat, unquote, "flessen". Dus voor meervoud 1389 00:56:35,580 --> 00:56:41,010 flessen, en dan hier, voor meerdere flessen. 1390 00:56:41,010 --> 00:56:44,580 Oke, dus nu laat ik terug naar mijn terminal venster, 1391 00:56:44,580 --> 00:56:47,200 opnieuw compileren, re-run het. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Oef. 1394 00:56:49,150 --> 00:56:50,610 En laten we een snelle sanity check. 1395 00:56:50,610 --> 00:56:52,400 Technisch gezien zouden we willen al deze te lezen om er zeker van 1396 00:56:52,400 --> 00:56:53,370 ze zijn juist, maar laten we eens kijken naar 1397 00:56:53,370 --> 00:56:54,640 minste bekende boosdoeners. 1398 00:56:54,640 --> 00:56:57,370 3 flessen, 2 flessen, 2 flessen, 1 1399 00:56:57,370 --> 00:57:00,380 fles, 1 fles, 0 flessen. 1400 00:57:00,380 --> 00:57:03,080 We lijken op zijn minst hebben vastgesteld het voor nu. 1401 00:57:03,080 --> 00:57:06,010 Maar de vangst is hier dat wat een god verschrikkelijk puinhoop is dit 1402 00:57:06,010 --> 00:57:07,470 gewoon om een ​​domme lossen 1403 00:57:07,470 --> 00:57:09,540 een teken grammaticale details. 1404 00:57:09,540 --> 00:57:11,150 Dus er is een soort van een reden die ik snijd deze hoek 1405 00:57:11,150 --> 00:57:14,090 eerder, omdat het net volledig te vervelend 1406 00:57:14,090 --> 00:57:15,020 schrijf dit veel code. 1407 00:57:15,020 --> 00:57:17,530 Maar het blijkt dat er iets meer elegante manier van 1408 00:57:17,530 --> 00:57:20,110 de uiting van de precies hetzelfde. 1409 00:57:20,110 --> 00:57:22,040 En we kunnen dit als volgt doen. 1410 00:57:22,040 --> 00:57:23,890 >> Laat me dit laat op het scherm voor een moment en 1411 00:57:23,890 --> 00:57:27,320 introduceren iets bekend als een ternaire operator. 1412 00:57:27,320 --> 00:57:29,600 Dit is een soort van een one-liner die net is bedoeld om onze 1413 00:57:29,600 --> 00:57:31,880 leeft een beetje sexier, zoals beloofd. 1414 00:57:31,880 --> 00:57:33,130 En ik ga doen dit als volgt. 1415 00:57:33,130 --> 00:57:35,810 Geef me een string genaamd s1, en laat mij 1416 00:57:35,810 --> 00:57:37,200 toewijzen als volgt. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Fles", anders "flessen". String s2 krijgt (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Fles", anders "flessen". 1420 00:57:52,670 --> 00:57:57,050 Dus wat is dan het verschil hier? 1421 00:57:57,050 --> 00:57:59,370 Deze twee regels code, ik betogen, kan 1422 00:57:59,370 --> 00:58:02,200 vervang deze hele puinhoop. 1423 00:58:02,200 --> 00:58:04,280 Dus ik noem het een puinhoop, alleen maar omdat het soort van mij de wrijft 1424 00:58:04,280 --> 00:58:05,940 verkeerde manier dat het zo veel regels code. 1425 00:58:05,940 --> 00:58:06,650 Niet verkeerd. 1426 00:58:06,650 --> 00:58:07,700 Het is niet slecht ontwerp. 1427 00:58:07,700 --> 00:58:10,140 Zoals, dit is volkomen juist en perfect in orde. 1428 00:58:10,140 --> 00:58:12,970 Maar codering krijgt vervelend als je moet zo uitdrukken 1429 00:58:12,970 --> 00:58:15,530 verdomme specifiek opnieuw en opnieuw en opnieuw met een eenvoudige 1430 00:58:15,530 --> 00:58:16,620 scenario als dit. 1431 00:58:16,620 --> 00:58:19,470 Dus C heeft een aantal sneltoetsen, zoals dit. 1432 00:58:19,470 --> 00:58:24,270 Dus dit zegt in essentie verklaren een string genaamd s1 en 1433 00:58:24,270 --> 00:58:32,610 toewijzen of deze waarde of deze waarde als ik is == - 1434 00:58:32,610 --> 00:58:35,290 sorry, moet ik zeggen dat dit duidelijker. 1435 00:58:35,290 --> 00:58:41,680 Declareer een variabele s1, toewijzen deze waarde als dit waar is. 1436 00:58:41,680 --> 00:58:44,280 Anders toewijzen deze waarde. 1437 00:58:44,280 --> 00:58:47,220 Met andere woorden, dit soort een regel manier 1438 00:58:47,220 --> 00:58:51,490 zeggen als anders dan het doen van een opdracht langs de weg. 1439 00:58:51,490 --> 00:58:55,540 Dus als ik 1 is, dan ga je gang en noemen dit "bottle". En 1440 00:58:55,540 --> 00:58:59,830 dan is dit anders, noem het "flessen". Ondertussen, s2, de 1441 00:58:59,830 --> 00:59:04,060 tweede woord dat we nodig hebben om te definiëren, als ik gelijk is aan 2, zullen we 1442 00:59:04,060 --> 00:59:08,350 ingesteld s2 op "bottle". Anders, zet deze op "flessen". En wat 1443 00:59:08,350 --> 00:59:11,460 Dit betekent dat nu kan ik gaan door dit en verwijder alle 1444 00:59:11,460 --> 00:59:12,860 die regels code. 1445 00:59:12,860 --> 00:59:17,220 En als ik zeg, een beetje belachelijk, dat dit nu 1446 00:59:17,220 --> 00:59:20,060 sexier, het is sexier in het soort stilistische zin. 1447 00:59:20,060 --> 00:59:22,660 Dat functioneel Deze code daadwerkelijk zal 1448 00:59:22,660 --> 00:59:24,610 doen precies hetzelfde. 1449 00:59:24,610 --> 00:59:26,890 En hoewel het ziet er misschien een beetje cryptisch op het eerste 1450 00:59:26,890 --> 00:59:29,250 blik, omdat we niet hebben dit construct gezien, zou ik 1451 00:59:29,250 --> 00:59:31,850 beweren dat het uiteindelijk gaat worden zo veel meer 1452 00:59:31,850 --> 00:59:34,820 leesbaar en zo veel makkelijker voor wij mensen om te sorteren van 1453 00:59:34,820 --> 00:59:36,830 begrijpen, want nu kun je gewoon lezen 1454 00:59:36,830 --> 00:59:38,830 code alles op een regel. 1455 00:59:38,830 --> 00:59:41,550 Het is nog steeds in dezelfde geest aan een of, indien dit het 1456 00:59:41,550 --> 00:59:44,920 conditie en dan is dit wat er in de if en dit 1457 00:59:44,920 --> 00:59:46,480 is wat er in de ander. 1458 00:59:46,480 --> 00:59:49,450 Maar we kunnen dit doen gewoon veel meer elegant. 1459 00:59:49,450 --> 00:59:52,650 >> En als ik nu terug naar mijn terminal, die verwijderd alle 1460 00:59:52,650 --> 00:59:55,530 van die lijnen en vervangen door alleen die twee, 1461 00:59:55,530 --> 01:00:00,150 opnieuw compileren, re-run flessen bier met 99, merk dat mijn 1462 01:00:00,150 --> 01:00:03,350 grammatica is in feite nog klopt. 1463 01:00:03,350 --> 01:00:06,160 Dus nogmaals, wat om te beginnen. 1464 01:00:06,160 --> 01:00:08,840 2 flessen bier, 1 fles bier. 1465 01:00:08,840 --> 01:00:09,370 Ziet er goed uit. 1466 01:00:09,370 --> 01:00:10,100 Ja. 1467 01:00:10,100 --> 01:00:13,900 Dus daar hebben we een veel beknopter oplossing. 1468 01:00:13,900 --> 01:00:16,020 Dus dit ook als je meer comfortabel met C, niet 1469 01:00:16,020 --> 01:00:18,630 noodzakelijkerwijs met de eerste PSET of zelfs tweede, maar 1470 01:00:18,630 --> 01:00:21,170 beseffen dat deze constructen kunnen ons in staat stellen om steeds dingen te doen 1471 01:00:21,170 --> 01:00:22,810 meer elegant. 1472 01:00:22,810 --> 01:00:25,200 Nu gaan we een ander ding hier. 1473 01:00:25,200 --> 01:00:31,460 Laat me gaan en open te stellen return1.c. 1474 01:00:31,460 --> 01:00:34,340 Laten we nu eens beginnen met een ander probleem op een manier die op te lossen 1475 01:00:34,340 --> 01:00:37,140 stelt ons in staat te schrijven meer geavanceerde code. 1476 01:00:37,140 --> 01:00:39,960 >> Dus hier is een eenvoudig klein programma dat tot doel in het leven 1477 01:00:39,960 --> 01:00:41,870 te verhogen waarden. 1478 01:00:41,870 --> 01:00:43,100 En eigenlijk, laten we een stap terug. 1479 01:00:43,100 --> 01:00:44,400 Laat mij handmatig dit. 1480 01:00:44,400 --> 01:00:52,200 Laat mij op te nemen en int main (void). 1481 01:00:52,200 --> 01:00:53,450 En laat me noemen dit increment.c. 1482 01:00:57,150 --> 01:00:58,570 En wat wil ik doen? 1483 01:00:58,570 --> 01:01:02,240 Ik ga om verder te gaan en iets te zeggen - 1484 01:01:02,240 --> 01:01:04,280 zullen we de nummers hetzelfde - 1485 01:01:04,280 --> 01:01:04,980 int x. 1486 01:01:04,980 --> 01:01:13,670 Dus int x krijgt 2; printf x is% d, nieuwe lijn, x. 1487 01:01:13,670 --> 01:01:16,780 Dus ik ben het typen snel, maar soort van vertrouwde dingen nu. 1488 01:01:16,780 --> 01:01:18,830 Dan ga ik naar x + + doen. 1489 01:01:18,830 --> 01:01:21,710 Dan ga ik naar dezelfde zin opnieuw af te drukken. 1490 01:01:21,710 --> 01:01:24,550 En dan ga ik naar 0 terug te keren alleen maar om het programma te verlaten. 1491 01:01:24,550 --> 01:01:25,960 Oke, dus dit is een programma dat 1492 01:01:25,960 --> 01:01:26,960 stappen van een nummer. 1493 01:01:26,960 --> 01:01:29,830 Het is eerst naar iets te initialiseren naar 2, en dan is het 1494 01:01:29,830 --> 01:01:33,470 gaat om het te verhogen en opnieuw afdrukken. 1495 01:01:33,470 --> 01:01:36,930 >> Dus laten we lopen increment, ongelooflijk eenvoudig programma. 1496 01:01:36,930 --> 01:01:40,940 Maar nu dat ik wil kubus van de waarde, dus doe 1497 01:01:40,940 --> 01:01:42,490 iets enigszins arbitrair. 1498 01:01:42,490 --> 01:01:45,140 En ik eigenlijk wil doen x krijgt de kubus van. 1499 01:01:45,140 --> 01:01:47,570 Dus ik zou kunnen gebruiken wat de pow functie genaamd, maar dat doe ik niet 1500 01:01:47,570 --> 01:01:48,650 echt weet waar dat is nog niet. 1501 01:01:48,650 --> 01:01:50,580 Dus ik ga om dit te doen op de ouderwetse manier. 1502 01:01:50,580 --> 01:01:54,550 x keer deze is gelijk aan x maal x keer x. 1503 01:01:54,550 --> 01:01:56,880 Dus ik ben cubing de waarde, te vermenigvuldigen met zichzelf opnieuw 1504 01:01:56,880 --> 01:02:00,440 en opnieuw en opnieuw, zodat we de kracht 1505 01:02:00,440 --> 01:02:02,050 van 3 in dit geval. 1506 01:02:02,050 --> 01:02:06,000 Dus nu de getallen moet afdrukken zou moeten zijn, zoals we zullen zien 1507 01:02:06,000 --> 01:02:08,450 hier - maak increment, dus het is eigenlijk niet echt verhogen 1508 01:02:08,450 --> 01:02:10,260 meer, maar we laten de naam alleen al - 1509 01:02:10,260 --> 01:02:11,590 2 en dan 8. 1510 01:02:11,590 --> 01:02:17,670 Nu hebben we het begin van een kans voor verfijning 1511 01:02:17,670 --> 01:02:21,570 hier, waarbij deze Cubing ding van het vermenigvuldigen van een getal 1512 01:02:21,570 --> 01:02:24,680 zelf op zich zelf voelt dit misschien wel 1513 01:02:24,680 --> 01:02:27,920 nuttig te hebben als een functie, net als iemand die besloten 1514 01:02:27,920 --> 01:02:30,430 jaar geleden - je weet wel, een beetje handig zijn als een van ons gaat zitten 1515 01:02:30,430 --> 01:02:33,120 en schrijft printf zodat de rest van de wereld kan gebruiken, 1516 01:02:33,120 --> 01:02:36,160 waarom gaan we niet zitten en schrijf een functie genaamd kubus 1517 01:02:36,160 --> 01:02:39,250 dat doet dit Cubing voor ons, zodat we niet handmatig hoeft te 1518 01:02:39,250 --> 01:02:41,500 uitvoering van de notie van cubing waarden hier? 1519 01:02:41,500 --> 01:02:44,040 >> Dus een simpel voorbeeld, maar laten we verder gaan en gebruik maken van dit als een 1520 01:02:44,040 --> 01:02:46,280 mogelijkheid om onze eigen functie te schrijven. 1521 01:02:46,280 --> 01:02:49,110 Tot nu toe hebben we alleen de belangrijkste gebruikt, en we hebben andere gebruikte 1522 01:02:49,110 --> 01:02:51,780 mensen functies, maar we hebben niet geschreven onze eigen. 1523 01:02:51,780 --> 01:02:52,650 Dus hier gaan we dan. 1524 01:02:52,650 --> 01:02:56,330 Ik ga om verder te gaan en een functie genaamd kubus te schrijven. 1525 01:02:56,330 --> 01:02:58,490 En ik ga om het te laten nemen van een ingang. 1526 01:02:58,490 --> 01:03:02,070 Dus de ingang gaat een geheel getal zijn. 1527 01:03:02,070 --> 01:03:03,570 En wat gaat het doen? 1528 01:03:03,570 --> 01:03:08,500 Het zal int uitgang verklaren = ingang keer ingang 1529 01:03:08,500 --> 01:03:09,880 Keer input. 1530 01:03:09,880 --> 01:03:12,190 En dan is het gaat om die uitgang terug te keren. 1531 01:03:12,190 --> 01:03:14,500 En dan moet ik nu specifiek te zijn. 1532 01:03:14,500 --> 01:03:16,820 Deze functie gaat naar een int terug te keren. 1533 01:03:16,820 --> 01:03:19,130 Dus hier is dan hoe je zou schrijven uw eigen functies. 1534 01:03:19,130 --> 01:03:20,850 Je moet eerst beslissen wat is de naam van uw 1535 01:03:20,850 --> 01:03:21,720 functie gaat worden. 1536 01:03:21,720 --> 01:03:23,964 En in het algemeen, iets verklarende is goed, dus ik zal 1537 01:03:23,964 --> 01:03:25,060 noem het kubus. 1538 01:03:25,060 --> 01:03:27,180 Dan moet je om aan te geven wat het gaat om terug te keren, wat is 1539 01:03:27,180 --> 01:03:28,240 de uitgang gaat worden. 1540 01:03:28,240 --> 01:03:29,595 En we hebben nog geen dat vele opties. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Voor nu, ik ga aan de stok met een int, want ik wil het 1543 01:03:34,260 --> 01:03:35,880 een integer terug. 1544 01:03:35,880 --> 01:03:38,770 Dan moet je aangeven wat de inputs, indien aanwezig, zijn. 1545 01:03:38,770 --> 01:03:41,570 En als kubus een argument neemt, duurt iets tussen 1546 01:03:41,570 --> 01:03:44,970 haakjes, je moet dat argument een naam te geven, zodat 1547 01:03:44,970 --> 01:03:47,860 je kunt noemen iets als je de uitvoering of het schrijven van 1548 01:03:47,860 --> 01:03:50,550 deze functie en u geven een type, dat in dit 1549 01:03:50,550 --> 01:03:51,810 geval zal zijn int. 1550 01:03:51,810 --> 01:03:54,690 Dus in het kort, kubus is een functie die een integer is 1551 01:03:54,690 --> 01:03:57,560 als input en geeft een geheel als output. 1552 01:03:57,560 --> 01:03:59,240 >> Dus wat doet het met die ingang? 1553 01:03:59,240 --> 01:04:03,710 Nou, in de lijn 14, verklaar ik een variabele genaamd uitgang, en ik 1554 01:04:03,710 --> 01:04:07,410 wijs hieraan de waarde, ingang keer ingang keer ingang. 1555 01:04:07,410 --> 01:04:11,490 En dan heb ik terug output. 1556 01:04:11,490 --> 01:04:14,890 Dus hoe kan ik dan gebruiken? 1557 01:04:14,890 --> 01:04:19,210 Wat moet ik veranderen deze gemarkeerde tekens on-line 1558 01:04:19,210 --> 01:04:21,006 7 op, denk je? 1559 01:04:21,006 --> 01:04:21,800 PUBLIEK: [onverstaanbaar]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. MALAN: Ja, dus kubus van x. 1561 01:04:25,570 --> 01:04:28,290 Dus x is een variabele, waardoor het bezit bepaalde waarde. 1562 01:04:28,290 --> 01:04:30,190 Gelukkig, het is van het type integer. 1563 01:04:30,190 --> 01:04:34,280 En omdat x is een int, dat betekent dat ik kan het in kubus. 1564 01:04:34,280 --> 01:04:39,500 En hoewel ik het overschrijven van de waarde van x met de waarde 1565 01:04:39,500 --> 01:04:42,780 van kubus x, zoals al het geval is tot nu toe, elke keer dat je 1566 01:04:42,780 --> 01:04:46,150 hebben gelijke teken en een regel code, het spul aan de rechterkant 1567 01:04:46,150 --> 01:04:49,090 wordt uitgevoerd en vervolgens wordt toegewezen aan de 1568 01:04:49,090 --> 01:04:50,150 waarde links. 1569 01:04:50,150 --> 01:04:52,950 Dus de volgorde van de bewerkingen is als we hopen zouden. 1570 01:04:52,950 --> 01:04:56,620 Dus werkt dit? 1571 01:04:56,620 --> 01:04:58,410 Nou, laat me hier naar beneden gaan. 1572 01:04:58,410 --> 01:04:59,970 Laat me open mijn terminal venster. 1573 01:04:59,970 --> 01:05:03,610 Laat me niet increment te maken, op Enter. 1574 01:05:03,610 --> 01:05:07,140 "Impliciete verklaring van 'kubus' functie is ongeldig 1575 01:05:07,140 --> 01:05:13,700 C99. "Even terzijde, C99 verwijst naar de taal C zoals het was 1576 01:05:13,700 --> 01:05:16,790 gedefinieerd in 1999, en dat was een update over de versie van 1577 01:05:16,790 --> 01:05:19,360 1989, een update over het origineel. 1578 01:05:19,360 --> 01:05:21,740 Dus dat is alles dat betekent. 1579 01:05:21,740 --> 01:05:24,250 >> Dus wat betekent het dat "impliciete declaratie van 1580 01:05:24,250 --> 01:05:26,790 functie 'cube' is ongeldig? "Het is hier. 1581 01:05:26,790 --> 01:05:28,430 Het is daar in de lijn 12. 1582 01:05:28,430 --> 01:05:30,460 PUBLIEK: [onverstaanbaar]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. MALAN: Wat is dat? 1584 01:05:30,730 --> 01:05:32,470 PUBLIEK: Het is niet eerder. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. MALAN: Het is niet eerder. 1586 01:05:33,540 --> 01:05:34,740 Dus dit is het ding. 1587 01:05:34,740 --> 01:05:38,190 C is een beetje dom, of C-compilers zijn een beetje dom. 1588 01:05:38,190 --> 01:05:41,060 Ze zijn echt alleen maar doen wat je ze vertelt te doen. 1589 01:05:41,060 --> 01:05:44,770 En zij, in het bijzonder, alleen lezen de code boven naar beneden, 1590 01:05:44,770 --> 01:05:45,620 links naar rechts. 1591 01:05:45,620 --> 01:05:49,140 Dus als de compiler, Clang, is het lezen van de code, lijn 1, het 1592 01:05:49,140 --> 01:05:50,120 uit hoe dit te doen. 1593 01:05:50,120 --> 01:05:50,940 Oh, hier komt de belangrijkste. 1594 01:05:50,940 --> 01:05:53,000 Oke, laat me gaan en verklaren een variabele x. 1595 01:05:53,000 --> 01:05:54,160 Laat me iets af te drukken. 1596 01:05:54,160 --> 01:05:55,890 Lijn 7, wat is het nou kubus? 1597 01:05:55,890 --> 01:05:58,230 Het is niet zijn aangegeven in stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Het komt niet met C. Ik heb geen idee wat te doen. 1599 01:06:00,950 --> 01:06:03,960 En zo Clang bails rechtvaardige en stopt met die foutmelding. 1600 01:06:03,960 --> 01:06:05,850 Dus we kunnen dit oplossen in een paar manieren. 1601 01:06:05,850 --> 01:06:10,530 We kunnen leren Clang wat kubus is door gewoon bewegen, waar de 1602 01:06:10,530 --> 01:06:11,820 verklaring is. 1603 01:06:11,820 --> 01:06:14,640 Dus ik geknipt en geplakt het boven op de belangrijkste. 1604 01:06:14,640 --> 01:06:17,770 Nu beseffen dat alleen maar omdat de belangrijkste is niet langer eerste, is het 1605 01:06:17,770 --> 01:06:19,150 nog steeds uitgevoerd door standaard. 1606 01:06:19,150 --> 01:06:20,060 Belangrijkste is de belangrijkste. 1607 01:06:20,060 --> 01:06:21,022 Het is de standaard functienaam. 1608 01:06:21,022 --> 01:06:22,930 Het maakt niet uit waar het in een bestand. 1609 01:06:22,930 --> 01:06:26,910 Maar in ieder geval nu Clang heeft gezien kubus voordat ik het gebruik. 1610 01:06:26,910 --> 01:06:28,500 Dus laten we eens kijken of Clang is gelukkiger nu. 1611 01:06:28,500 --> 01:06:31,410 Maak increment, ging het compileren deze keer. 1612 01:06:31,410 --> 01:06:33,060 >> Laat me lopen increment. 1613 01:06:33,060 --> 01:06:34,810 En inderdaad, het lijkt te werken. 1614 01:06:34,810 --> 01:06:36,810 Nu kun je komen met scenario's uiteindelijk waar 1615 01:06:36,810 --> 01:06:38,650 Het is niet mogelijk te stellen elke functie 1616 01:06:38,650 --> 01:06:39,740 boven elke andere functie. 1617 01:06:39,740 --> 01:06:42,140 Je zult vast komen te zitten in deze oneindige lus in de werkelijkheid, 1618 01:06:42,140 --> 01:06:43,480 waar deze man wil zijn hier, maar dit 1619 01:06:43,480 --> 01:06:44,390 man moet om daar te zijn. 1620 01:06:44,390 --> 01:06:45,830 Dus dat werkt niet altijd. 1621 01:06:45,830 --> 01:06:49,020 Dus gelukkig, C heeft een meer elegante oplossing. 1622 01:06:49,020 --> 01:06:50,790 Ik ga deze terug te zetten waar het was, alleen maar omdat ik 1623 01:06:50,790 --> 01:06:53,390 voorkeur, als een kwestie van principe, dat de voornaamste altijd 1624 01:06:53,390 --> 01:06:55,550 aan de top, want het is gewoon leuk om te zien wat dit programma 1625 01:06:55,550 --> 01:06:56,920 doet standaard. 1626 01:06:56,920 --> 01:06:58,950 En wat ik ga doen hier boven is te verklaren wat heet 1627 01:06:58,950 --> 01:07:00,250 een prototype. 1628 01:07:00,250 --> 01:07:05,730 Ik ga mijn cube functie opnieuw te verklaren door letterlijk 1629 01:07:05,730 --> 01:07:07,180 kopiëren en plakken. 1630 01:07:07,180 --> 01:07:08,290 Eigenlijk is dat niet letterlijk. 1631 01:07:08,290 --> 01:07:13,060 Dus letterlijk kopiëren en plakken lijn 15 1632 01:07:13,060 --> 01:07:15,160 boven lijn 6. 1633 01:07:15,160 --> 01:07:17,010 Het maakt niet uit welke lijn deze eindigt op. 1634 01:07:17,010 --> 01:07:18,380 Het gebeurt te zijn op lijn 4. 1635 01:07:18,380 --> 01:07:19,950 Maar het hoeft te zijn voor de belangrijkste. 1636 01:07:19,950 --> 01:07:21,150 Maar het verschil merken. 1637 01:07:21,150 --> 01:07:24,100 Lijn 4 eindigt met een puntkomma, wat betekent he, 1638 01:07:24,100 --> 01:07:27,510 Clang, neem mijn woord te geloven, dat er sprake is van een functie 1639 01:07:27,510 --> 01:07:31,350 genaamd kubus die een int neemt en geeft een int. 1640 01:07:31,350 --> 01:07:33,020 Maar ik ga je niet vertellen wat het is. 1641 01:07:33,020 --> 01:07:35,180 Gewoon weten dat ik beloof om uiteindelijk vertellen. 1642 01:07:35,180 --> 01:07:38,490 En inderdaad, nu is het goed dat dit onder de naar beneden. 1643 01:07:38,490 --> 01:07:41,275 >> Dit is dus algemeen beter, omdat dan bovenaan 1644 01:07:41,275 --> 01:07:44,240 uw bestand, kunt u gewoon rammelaar uit, snelle-het-vuren, een lijn 1645 01:07:44,240 --> 01:07:46,470 elk, wat de namen van uw functies zijn, wat hun 1646 01:07:46,470 --> 01:07:49,120 ingangen zijn, wat hun uitgangen zijn. 1647 01:07:49,120 --> 01:07:52,210 En om meer duidelijk, ingang betekent over het algemeen argument of 1648 01:07:52,210 --> 01:07:54,110 parameter, synoniem. 1649 01:07:54,110 --> 01:07:56,890 Output betekent return waarde, wat doet het 1650 01:07:56,890 --> 01:07:58,700 hand terug naar mij. 1651 01:07:58,700 --> 01:08:03,420 Dus in dit geval, is kubus aangemeld bij de top, maar 1652 01:08:03,420 --> 01:08:06,940 gedefinieerd, ook wel uitgevoerd, onderaan. 1653 01:08:06,940 --> 01:08:09,620 Dus nu laten we hier terug te gaan en opnieuw uit te voeren dit. 1654 01:08:09,620 --> 01:08:13,430 Dus nu laat me gaan en opnieuw uitvoeren te maken, opnieuw uit te voeren stap. 1655 01:08:13,430 --> 01:08:16,500 En het lijkt nu te werken prima. 1656 01:08:16,500 --> 01:08:19,450 Nu kunnen we verder gaan en factor uit zoiets als de 1657 01:08:19,450 --> 01:08:23,720 bier bijvoorbeeld in deze vierde versie. 1658 01:08:23,720 --> 01:08:25,590 Dus laat me scrollen hier beneden. 1659 01:08:25,590 --> 01:08:28,149 En merk dat ik soort van deze les ter harte genomen juist nu. 1660 01:08:28,149 --> 01:08:31,140 Het feit dat ik dezelfde strofe weer zingen en 1661 01:08:31,140 --> 01:08:34,130 opnieuw en opnieuw, op dezelfde chorus line in het lied, voelde 1662 01:08:34,130 --> 01:08:36,439 graag waarom niet ik factor die uit in een functie? 1663 01:08:36,439 --> 01:08:38,470 En inderdaad, moet dit een van de redenen. 1664 01:08:38,470 --> 01:08:40,960 Naast het feit dat iemand anders in de wereld zou willen 1665 01:08:40,960 --> 01:08:42,390 om een ​​kubus functie te gebruiken - 1666 01:08:42,390 --> 01:08:44,560 dat is een goede reden om iets factor uit en schrijf uw 1667 01:08:44,560 --> 01:08:45,720 eigen aangepaste functie - 1668 01:08:45,720 --> 01:08:48,720 als er een stuk code in uw programma dat maakt 1669 01:08:48,720 --> 01:08:51,370 conceptuele zin, dat je soort van wilt geven het een 1670 01:08:51,370 --> 01:08:53,740 naam - zoals in dit geval, koor - 1671 01:08:53,740 --> 01:08:57,380 dan kunt u net schrijven dat als een aparte functie. 1672 01:08:57,380 --> 01:08:59,560 Je hoeft niet alles te schrijven in de belangrijkste is het maar 1673 01:08:59,560 --> 01:09:02,609 voelt schoner te scheiden en geef het een naam. 1674 01:09:02,609 --> 01:09:05,529 >> Dus in dit geval hier, merken dat ik een reactie op de top van zijn 1675 01:09:05,529 --> 01:09:06,859 deze functie die net zingt over de 1676 01:09:06,859 --> 01:09:08,630 bepaald aantal flessen. 1677 01:09:08,630 --> 01:09:10,609 Let hier op dat ik niet nodig om deze te bellen 1678 01:09:10,609 --> 01:09:12,520 dingen input en output. 1679 01:09:12,520 --> 01:09:16,090 In feite is dit keer dat ik belde net mijn inbreng b voor fles. 1680 01:09:16,090 --> 01:09:19,960 En hier ziet, nietig suggereert wat? 1681 01:09:19,960 --> 01:09:21,309 Dat refrein - 1682 01:09:21,309 --> 01:09:22,660 PUBLIEK: Maakt niet terug. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. MALAN: retourneert geen waarde. 1684 01:09:23,870 --> 01:09:26,800 En inderdaad, er functies niet te waarden terug te keren. 1685 01:09:26,800 --> 01:09:28,060 Ze kunnen gewoon iets doen. 1686 01:09:28,060 --> 01:09:30,270 Ze kunnen wat bijwerkingen genoemd, in dit 1687 01:09:30,270 --> 01:09:33,109 geval is gewoon een hele hoop af te drukken op het scherm. 1688 01:09:33,109 --> 01:09:36,580 Dus op dat deze code hier, letterlijk ik net gewonnen van 1689 01:09:36,580 --> 01:09:37,680 het vorige voorbeeld. 1690 01:09:37,680 --> 01:09:39,930 Het enige verschil is in plaats van i als mijn 1691 01:09:39,930 --> 01:09:42,890 variabele, ik nu met behulp van b als mijn variabele. 1692 01:09:42,890 --> 01:09:45,880 Dus ik b hebben hier beneden, ik b hebben hier beneden, ik heb b 1693 01:09:45,880 --> 01:09:47,109 min 1 hier beneden. 1694 01:09:47,109 --> 01:09:49,279 De code is precies hetzelfde. 1695 01:09:49,279 --> 01:09:52,529 Maar net nu laten zien hoe we deze gebruiken, laat me gaan 1696 01:09:52,529 --> 01:09:56,780 vooruit en eigenlijk veranderen in een voor-lus. 1697 01:09:56,780 --> 01:10:03,850 for (int i = n; i> n; i -). 1698 01:10:03,850 --> 01:10:06,230 >> Dus ik heb gestolen, dat van onze vorige voorbeeld. 1699 01:10:06,230 --> 01:10:08,970 Eerder, het is in lijn 37 dat ik zou zijn begonnen 1700 01:10:08,970 --> 01:10:10,640 zingen dit vervelende lied. 1701 01:10:10,640 --> 01:10:15,810 Maar in plaats daarvan, ik ben gewoon ga nu bellen koor van i. 1702 01:10:15,810 --> 01:10:16,870 Gereed. 1703 01:10:16,870 --> 01:10:20,260 Dus nu in elke iteratie van deze lus, noem ik dit andere 1704 01:10:20,260 --> 01:10:22,220 functie, chorus, die ik toevallig te schrijven. 1705 01:10:22,220 --> 01:10:24,110 Het werd niet geschreven door iemand anders jaren geleden. 1706 01:10:24,110 --> 01:10:27,930 Maar chorus, ondertussen, maakt gebruik van printf afdrukken 1707 01:10:27,930 --> 01:10:29,840 van deze vier lijnen. 1708 01:10:29,840 --> 01:10:32,720 Maar het feit dat ik koor roepen steeds weer in een 1709 01:10:32,720 --> 01:10:35,900 lus betekent dat ik ga, krijgen op het einde, de 1710 01:10:35,900 --> 01:10:39,310 exact hetzelfde liedje als ik tot nu toe. 1711 01:10:39,310 --> 01:10:42,130 Dus in het kort, als ik nu terugkijk op mijn code, ook al 1712 01:10:42,130 --> 01:10:44,240 functioneel dit is gelijk, merken dat het 1713 01:10:44,240 --> 01:10:46,020 beginnen te krijgen nog meer leesbaar. 1714 01:10:46,020 --> 01:10:48,410 Ik weet niet precies hoe GetInt 1715 01:10:48,410 --> 01:10:49,250 wordt uitgevoerd. 1716 01:10:49,250 --> 01:10:52,050 Eerlijk gezegd, ik weet niet hoe koor wordt uitgevoerd. 1717 01:10:52,050 --> 01:10:52,970 Maar het maakt niet uit voor mij. 1718 01:10:52,970 --> 01:10:55,620 Kan me niet schelen, want nu kan ik sorteren van, als mens, lees 1719 01:10:55,620 --> 01:10:57,050 deze van boven naar beneden. 1720 01:10:57,050 --> 01:10:59,950 En omdat de functies genoemd naar wat ze 1721 01:10:59,950 --> 01:11:02,910 doen, mijn code is steeds leesbaar. 1722 01:11:02,910 --> 01:11:05,190 En als onze programma's krijgen veel complexer - 1723 01:11:05,190 --> 01:11:07,220 tegen het einde van het semester is, zult u het schrijven van honderden lijnen 1724 01:11:07,220 --> 01:11:10,970 van de code in talen als PHP en JavaScript en dergelijke - 1725 01:11:10,970 --> 01:11:13,550 je zult zien dat het zo veel makkelijker dan bij te houden 1726 01:11:13,550 --> 01:11:14,080 wat je hebt gedaan. 1727 01:11:14,080 --> 01:11:15,810 En als je begint samen met vrienden of 1728 01:11:15,810 --> 01:11:19,010 partners of collega's, zult u in staat om veel meer te schrijven 1729 01:11:19,010 --> 01:11:22,910 massale programma's door te beginnen aan deze fundamentele oefenen 1730 01:11:22,910 --> 01:11:23,990 bouwstenen. 1731 01:11:23,990 --> 01:11:25,550 >> Dus met dat gezegd, waarom niet noemen we het een dag? 1732 01:11:25,550 --> 01:11:27,190 En we zullen zien op woensdag. 1733 01:11:27,190 --> 01:11:33,611 [Applaus]