1 00:00:00,000 --> 00:00:03,353 >> [Muziek] 2 00:00:03,353 --> 00:00:04,842 3 00:00:04,842 --> 00:00:06,050 DAVID MALAN: Hallo, iedereen. 4 00:00:06,050 --> 00:00:07,777 Dit is CS50's supersection. 5 00:00:07,777 --> 00:00:09,860 Toegewezen secties niet start voor een week. 6 00:00:09,860 --> 00:00:11,580 En dus vandaag, ik ben hier met-- 7 00:00:11,580 --> 00:00:12,122 >> MARIA: Maria. 8 00:00:12,122 --> 00:00:14,163 DAVID MALAN: --om eigenlijk een kijkje nemen op probleem 9 00:00:14,163 --> 00:00:16,110 set één, de cursus eerste weken materiaal, 10 00:00:16,110 --> 00:00:19,780 krijg je georiënteerd met CS50 IDE, een beetje Linux, het besturingssysteem dat is 11 00:00:19,780 --> 00:00:22,290 die op IDE, alsmede kijken naar enkele van de overgang 12 00:00:22,290 --> 00:00:25,730 from Scratch naar C leidende tot problemen stellen één. 13 00:00:25,730 --> 00:00:28,340 >> Dus zonder verder oponthoud, in set een probleem, 14 00:00:28,340 --> 00:00:30,520 je gaat worden geïntroduceerd CS50 IDE, waarin 15 00:00:30,520 --> 00:00:33,230 is deze web-based programmering omgeving die we gebruiken om 16 00:00:33,230 --> 00:00:34,280 kunnen programmeren. 17 00:00:34,280 --> 00:00:37,280 Het is ontworpen om zeer kijken die doet denken aan een typische computer 18 00:00:37,280 --> 00:00:39,430 systeem met een besturingssysteem systeem genaamd Linux. 19 00:00:39,430 --> 00:00:42,440 Maar het is in de zogenaamde cloud, hetgeen betekent dat iedereen in de klasse 20 00:00:42,440 --> 00:00:45,100 kan daadwerkelijk zijn of haar eigen rekening en gebruik het, als goed. 21 00:00:45,100 --> 00:00:48,950 >> Dus de meeste van jullie waarschijnlijk nooit gebruikt een Linux-omgeving voor of misschien 22 00:00:48,950 --> 00:00:50,447 zelfs een command line omgeving. 23 00:00:50,447 --> 00:00:52,280 En een command line omgeving verschilt. 24 00:00:52,280 --> 00:00:53,200 Het is allemaal tekstuele. 25 00:00:53,200 --> 00:00:54,730 Het is allemaal toetsenbordopdrachten. 26 00:00:54,730 --> 00:00:59,480 En het is geen mousing, geen pictogrammen, geen dialoog ramen, geen menu's. 27 00:00:59,480 --> 00:01:00,212 Het is puur tekst. 28 00:01:00,212 --> 00:01:01,920 Zo op het eerste, het soort van voelt als een stap 29 00:01:01,920 --> 00:01:04,434 achteruit in termen van verfijning. 30 00:01:04,434 --> 00:01:06,600 Maar het eindigt in een veel krachtiger, zeker, 31 00:01:06,600 --> 00:01:08,510 voor een computer wetenschapper, uiteindelijk. 32 00:01:08,510 --> 00:01:09,540 >> Dus laten we eens een kijkje nemen. 33 00:01:09,540 --> 00:01:13,850 Hier ben ik op CS50.io, via welke kunt u inloggen op CS50 IDE. 34 00:01:13,850 --> 00:01:17,414 En net als in Scratch, is er drie primaire gebieden om dit scherm. 35 00:01:17,414 --> 00:01:20,080 Dus op de linker kant, we hebben wat zal het bestand browser. 36 00:01:20,080 --> 00:01:22,413 En er is deze map op top, die nu leeg is 37 00:01:22,413 --> 00:01:24,690 sinds ik verlost van al mijn bestanden voordat supersection. 38 00:01:24,690 --> 00:01:27,599 En dat is waar we zullen opslaan C bestanden die we schrijven. 39 00:01:27,599 --> 00:01:30,890 Bovenaan rechts, hebben we een plek waar al onze code gaat om geschreven te krijgen. 40 00:01:30,890 --> 00:01:34,610 En inderdaad, als ik op deze plus, dit gaat om me te laten kiezen Nieuw bestand. 41 00:01:34,610 --> 00:01:38,310 En hier kan ik beginnen met het schrijven van C-code of, echt, een aantal andere talen. 42 00:01:38,310 --> 00:01:42,670 >> En vervolgens op de bodem waar zegt jharvard @ ide50-- en de jouwe zal 43 00:01:42,670 --> 00:01:45,080 iets te zeggen different-- wat dit heet? 44 00:01:45,080 --> 00:01:48,644 45 00:01:48,644 --> 00:01:49,310 Terminal-venster. 46 00:01:49,310 --> 00:01:49,570 Ja. 47 00:01:49,570 --> 00:01:51,810 Dus de terminal venster de zogenaamde command line 48 00:01:51,810 --> 00:01:55,540 interface via welke u kunt communiceren met het onderliggende besturingssysteem. 49 00:01:55,540 --> 00:01:58,220 En voor nu, we gaan maken zeer weinig gebruik van dit-- 50 00:01:58,220 --> 00:02:01,170 gewoon te compileren, om naar te kijken foutmeldingen die we zien, 51 00:02:01,170 --> 00:02:02,347 en om onze programma's te draaien. 52 00:02:02,347 --> 00:02:04,680 Maar uiteindelijk, we gaan zo veel meer te doen, als goed. 53 00:02:04,680 --> 00:02:07,490 En je kunt zelfs software te installeren en het beheer van uw werkruimte 54 00:02:07,490 --> 00:02:09,066 binnen CS50 IDE, als goed. 55 00:02:09,066 --> 00:02:10,440 Maar daarover een andere keer. 56 00:02:10,440 --> 00:02:12,689 >> Dus laten we verder gaan en schrijven een eenvoudig programma gewoon 57 00:02:12,689 --> 00:02:15,064 om te gaan door een warming-up van hello.c, die misschien 58 00:02:15,064 --> 00:02:16,480 de eenvoudigste programma dat we kunnen schrijven. 59 00:02:16,480 --> 00:02:18,330 Ik heb al opende een nieuw tabblad. 60 00:02:18,330 --> 00:02:24,310 Ik ga om te gaan en zeggen zijn standaard io.h. 61 00:02:24,310 --> 00:02:25,325 Dan int main (void). 62 00:02:25,325 --> 00:02:28,930 63 00:02:28,930 --> 00:02:35,200 En dan printf ("hello, world" backslash n, dicht citaat, 64 00:02:35,200 --> 00:02:39,480 sluit haakjes, en puntkomma. 65 00:02:39,480 --> 00:02:39,990 >> Prima. 66 00:02:39,990 --> 00:02:41,700 Dus nu ziet mijn raam is naamloos. 67 00:02:41,700 --> 00:02:44,840 Dus ik ben zeer snel gaan om omhoog te gaan naar Bestand, Opslaan. 68 00:02:44,840 --> 00:02:46,910 En het is belangrijk dat Ik noem dit niet "hallo." 69 00:02:46,910 --> 00:02:49,243 Dus een veel voorkomende fout, vooral in de set een probleem, 70 00:02:49,243 --> 00:02:52,530 is om per ongeluk gewoon bellen uw programma "water" of "hebzuchtig" of "Mario" 71 00:02:52,530 --> 00:02:53,890 of "krediet" of iets dergelijks. 72 00:02:53,890 --> 00:02:55,970 Maar je eigenlijk wilt maken ervoor dat u de bestandsextensie 73 00:02:55,970 --> 00:02:58,928 want dit is de enige manier waarop de compiler en ook de code-editor 74 00:02:58,928 --> 00:03:00,710 weet dat je eigenlijk het schrijven van C-code. 75 00:03:00,710 --> 00:03:02,280 Dus laat me gaan en klik op Opslaan. 76 00:03:02,280 --> 00:03:05,710 >> En nu ook wat CS50 IDE voor ons heeft gedaan is het ook 77 00:03:05,710 --> 00:03:07,120 syntax gemarkeerd alles. 78 00:03:07,120 --> 00:03:08,822 Dus het maakte alles zeer kleurrijk. 79 00:03:08,822 --> 00:03:10,780 En het hele doel van die niet functioneel. 80 00:03:10,780 --> 00:03:14,290 Het is gewoon mijn ogen vestigen op de conceptueel verschillende stukken 81 00:03:14,290 --> 00:03:15,310 van dit programma. 82 00:03:15,310 --> 00:03:17,570 Dus laten we verder gaan en stellen dit. 83 00:03:17,570 --> 00:03:19,490 En ik kan het compileren in een paar manieren. 84 00:03:19,490 --> 00:03:22,010 En in een week, de old-school manier we deden 85 00:03:22,010 --> 00:03:26,250 het was letterlijk aan het commando line-- "clang hello.c." 86 00:03:26,250 --> 00:03:27,596 En dan druk ik op Enter. 87 00:03:27,596 --> 00:03:29,720 En niets lijkt te gebeuren in het terminal-venster. 88 00:03:29,720 --> 00:03:32,654 Maar wat deed verandering in de IDE? 89 00:03:32,654 --> 00:03:35,320 Waar, wederom, IDE betekent alleen Geïntegreerde ontwikkelomgeving. 90 00:03:35,320 --> 00:03:38,360 Het is een mooie manier om te zeggen Deze geïntegreerde ontwikkeling 91 00:03:38,360 --> 00:03:40,620 omgeving voor het ontwikkelen van software. 92 00:03:40,620 --> 00:03:42,477 Dus wat deed veranderen in de UI? 93 00:03:42,477 --> 00:03:44,310 Wat heb je merken dat is anders, Maria? 94 00:03:44,310 --> 00:03:47,100 >> MARIA: Ik merkte iets onder de IDE50 map hier. 95 00:03:47,100 --> 00:03:47,850 >> DAVID MALAN: Ja. 96 00:03:47,850 --> 00:03:50,230 Dus hier, niet alleen hebben we "hello.c." 97 00:03:50,230 --> 00:03:53,120 We hebben ook 'a.out', dat is soort van een domme naam voor een programma. 98 00:03:53,120 --> 00:03:56,430 Maar inderdaad, het is de standaard naam voor een programma wanneer u alleen uw code te compileren 99 00:03:56,430 --> 00:03:59,110 en niet de compiler vertellen wat bestand naar de uitgang. 100 00:03:59,110 --> 00:04:01,790 Dus als ik wil dit uitvoeren, I moeten de compiler-- vertellen 101 00:04:01,790 --> 00:04:05,340 of liever gezegd, ik moet vertel de werkruimte die ik 102 00:04:05,340 --> 00:04:09,780 wil het programma genaamd run "a.out." 103 00:04:09,780 --> 00:04:10,550 Enter. 104 00:04:10,550 --> 00:04:12,474 En er is "hallo, wereld. "nu" ./ ". 105 00:04:12,474 --> 00:04:13,390 is in feite belangrijk. 106 00:04:13,390 --> 00:04:16,050 Hoewel gewoonlijk alleen we schrijf de namen van opdrachten, 107 00:04:16,050 --> 00:04:19,060 wanneer het is een programma dat u hebt geschreven, wil je "./" zeggen 108 00:04:19,060 --> 00:04:22,460 want dat expliciet vertelt Linux dat u wilt een programma genaamd run 109 00:04:22,460 --> 00:04:26,930 "a.out" dat is in deze, waar de stip betekent deze directory dat ik ben momenteel 110 00:04:26,930 --> 00:04:31,600 in die toevallig genaamd werkruimte, "a.out. 111 00:04:31,600 --> 00:04:35,410 Want als ik zei gewoon "a.out," Enter, Ik ga krijgen "a.out opdracht niet 112 00:04:35,410 --> 00:04:38,035 gevonden ", omdat de computer-- omdat ik uitgevonden "a.out;" 113 00:04:38,035 --> 00:04:40,910 het kwam niet met de computer-- weet niet waar je moet kijken voor het, 114 00:04:40,910 --> 00:04:43,590 ook al is het juiste onder mijn neus, om zo te zeggen. 115 00:04:43,590 --> 00:04:44,090 OK. 116 00:04:44,090 --> 00:04:49,910 Dus we konden dit veranderen worden "clang -o hallo hello.c." 117 00:04:49,910 --> 00:04:53,030 En als ik druk op enter, welk programma gaat dit uitgang voor mij? 118 00:04:53,030 --> 00:04:55,710 Wat is de naam van het bestand? 119 00:04:55,710 --> 00:04:57,500 Ja, in de rug. 120 00:04:57,500 --> 00:04:58,479 Dat is juist. "Hallo." 121 00:04:58,479 --> 00:05:00,520 Dus "hallo" gaat worden de naam van het programma 122 00:05:00,520 --> 00:05:04,610 want we hebben gebruik gemaakt van een zogenaamd command line argument, dat is gewoon 123 00:05:04,610 --> 00:05:08,120 wijze het gedrag veranderen de compiler om daadwerkelijk uitvoer 124 00:05:08,120 --> 00:05:09,450 een specifieke bestandsnaam. 125 00:05:09,450 --> 00:05:12,400 En inderdaad, als ik te zoomen naar buiten en kijk omhoog hier, 126 00:05:12,400 --> 00:05:17,430 nu heb ik niet alleen "a.out" en "hello.c", maar ook "hallo" bevatten, alsmede. 127 00:05:17,430 --> 00:05:22,410 Dus nu ik kan doen "./hello," Enter. 128 00:05:22,410 --> 00:05:23,640 En er is "Hallo, wereld." 129 00:05:23,640 --> 00:05:25,640 Maar lastly-- en dit zal nu de conventie 130 00:05:25,640 --> 00:05:27,590 We gebruiken de gehele semester, typically-- 131 00:05:27,590 --> 00:05:30,070 is dat je kunt ook gewoon zeggen "maken hallo." 132 00:05:30,070 --> 00:05:33,370 En inderdaad, het is te zeggen het is actueel omdat het al bestaat. 133 00:05:33,370 --> 00:05:37,860 Laat me gaan en te verwijderen, met het rm commando, zowel 'a.out "- 134 00:05:37,860 --> 00:05:39,644 en zeg "verwijder normaal bestand a.out?" 135 00:05:39,644 --> 00:05:41,810 Dat betekent, bent u zeker dat u wilt verwijderen? 136 00:05:41,810 --> 00:05:42,880 Ik ga om ja te zeggen. 137 00:05:42,880 --> 00:05:46,690 En dan ga ik te verwijderen "hello" maar niet "hello.c." 138 00:05:46,690 --> 00:05:49,920 Ik ga om te zeggen "ja" expliciet, maar "y" is voldoende, als goed. 139 00:05:49,920 --> 00:05:52,140 >> En nu merken als ik typt ls-- die, herinneren, 140 00:05:52,140 --> 00:05:55,540 betekent list-- maakt een lijst van alle van de bestanden in mijn map. 141 00:05:55,540 --> 00:05:57,850 En inderdaad, als ik te zoomen naar buiten en kijk naar linksboven, 142 00:05:57,850 --> 00:05:59,730 bevestigt dat wat in deze map, zelfs 143 00:05:59,730 --> 00:06:04,990 al is bestempeld als IDE50 hier en niet werkruimte, het is gewoon "hello.c." 144 00:06:04,990 --> 00:06:09,152 Dus nu hier beneden, als ik doen "maken hello," Enter, 145 00:06:09,152 --> 00:06:12,360 nu zie ik een veel langere opdracht, maar een meer geavanceerde commando dat gaat 146 00:06:12,360 --> 00:06:13,940 bruikbaar in de komende weken te zijn. 147 00:06:13,940 --> 00:06:16,720 En nu kan ik zeggen "./hello." 148 00:06:16,720 --> 00:06:19,257 >> Dus laten we eens een korte rondleiding enkele andere Linux-commando's. 149 00:06:19,257 --> 00:06:21,840 Waarom we niet een stap terug en eigenlijk kijken naar C meer 150 00:06:21,840 --> 00:06:25,020 het algemeen, de overgang van Scratch C, en vervolgens af te sluiten met een blik 151 00:06:25,020 --> 00:06:27,305 het eerste probleem in C. Oké. 152 00:06:27,305 --> 00:06:30,430 Dus ik ga je gang en gewoon schoon gaan mijn werkruimte met de Control-L gewoon 153 00:06:30,430 --> 00:06:31,429 om het scherm netjes te houden. 154 00:06:31,429 --> 00:06:33,520 Maar geen functionele anderszins beïnvloeden. 155 00:06:33,520 --> 00:06:35,820 >> Bedenk dat we hebben gezien een paar commando's nu. 156 00:06:35,820 --> 00:06:39,900 Dus we hebben clang gezien, die over het algemeen u zal niet meer handmatig uitvoeren. 157 00:06:39,900 --> 00:06:41,650 We zullen in plaats daarvan gebruik te maken. 158 00:06:41,650 --> 00:06:45,290 Maar we zagen ook ls, dat een laat notering van de bestanden in mijn map. 159 00:06:45,290 --> 00:06:48,750 En nu, wat is er-- Er zijn twee bestanden nu, "hallo" en "hello.c." 160 00:06:48,750 --> 00:06:52,240 Waarom is er een ster of een sterretje na "hallo"? 161 00:06:52,240 --> 00:06:54,900 Wat deed dat betekenen, gebaseerd over wat we zagen in een week? 162 00:06:54,900 --> 00:06:58,852 163 00:06:58,852 --> 00:07:00,400 Wat denk je? 164 00:07:00,400 --> 00:07:02,742 Wat betekent de ster betekenen? 165 00:07:02,742 --> 00:07:04,614 >> MARIA: voor-- het programma "hallo"? 166 00:07:04,614 --> 00:07:05,530 DAVID MALAN: "Hallo *". 167 00:07:05,530 --> 00:07:06,330 Ja. 168 00:07:06,330 --> 00:07:07,760 Zeker weten? 169 00:07:07,760 --> 00:07:08,639 Oh, uitvoerbaar. 170 00:07:08,639 --> 00:07:09,180 Dat is juist. 171 00:07:09,180 --> 00:07:10,890 Dat betekent dus dat "hello" is uitvoerbaar. 172 00:07:10,890 --> 00:07:13,430 Dus inderdaad, dat is de reden waarom Ik kan doen "./hello." 173 00:07:13,430 --> 00:07:13,930 Prima. 174 00:07:13,930 --> 00:07:15,179 Dus wat kan ik hier doen? 175 00:07:15,179 --> 00:07:17,290 Nou, het blijkt dat ik kan Ook maken directories. 176 00:07:17,290 --> 00:07:20,924 Dus laat me gaan en te creëren, bijvoorbeeld een directory "pset1". 177 00:07:20,924 --> 00:07:23,590 En het probleem te stellen specificatie moet je precies doen, 178 00:07:23,590 --> 00:07:25,260 zodat u niet hoeft te onthouden vandaag. 179 00:07:25,260 --> 00:07:27,340 Maar "mkdir pset1" lijkt geen impact hebben. 180 00:07:27,340 --> 00:07:30,540 Maar nogmaals, geen foutmelding is over het algemeen een goede zaak. 181 00:07:30,540 --> 00:07:34,060 Dus als ik het type "ls" now-- ah, nu Ik heb een uitvoerbaar bestand met de naam 182 00:07:34,060 --> 00:07:36,570 "hello", een C bestand genaamd "hello.c." 183 00:07:36,570 --> 00:07:40,860 En dan de slash, om zo te spreken, betekent dat dit een directory. 184 00:07:40,860 --> 00:07:42,510 >> Dus inderdaad, nu wil ik om het te openen. 185 00:07:42,510 --> 00:07:45,730 En ik denk niet dubbelklikken op het als in een GUI, een grafische omgeving. 186 00:07:45,730 --> 00:07:48,550 Ik in plaats daarvan zeggen "cd pset1." 187 00:07:48,550 --> 00:07:49,640 Enter. 188 00:07:49,640 --> 00:07:53,100 Niets interessant lijkt te hebben gebeurd behalve mijn kleine prompt 189 00:07:53,100 --> 00:07:57,300 hier-- dit is Linux's manier van herinneren me waar ik ben, dus wat de map geopend is. 190 00:07:57,300 --> 00:08:00,080 Het is gewoon te vertellen me uitdrukkelijk als grafisch in tegenstelling tot. 191 00:08:00,080 --> 00:08:05,100 En als ik typ "ls," waarom heb ik een ander te zien onmiddellijk vragen, denk je, 192 00:08:05,100 --> 00:08:07,269 toen ik de inhoud van pset1? 193 00:08:07,269 --> 00:08:09,310 MARIA: Je hoeft waarschijnlijk niet iets in. 194 00:08:09,310 --> 00:08:09,630 DAVID MALAN: Ja. 195 00:08:09,630 --> 00:08:11,510 Dus dan hebben we niet duidelijk creëerde iets daar 196 00:08:11,510 --> 00:08:13,150 omdat ik zojuist de directory. 197 00:08:13,150 --> 00:08:17,690 Nu, als ik wilde een file-- te creëren voor Zo kon ik een nieuw bestand te maken. 198 00:08:17,690 --> 00:08:20,190 En dan kon ik ga naar Opslaan en opslaan als, 199 00:08:20,190 --> 00:08:23,090 als, "mario.c" als u aan het doen bent de standaard editie van PSET één. 200 00:08:23,090 --> 00:08:27,610 En dan, net als elke Mac of pc, gewoon kies de map "pset1, opslaan. 201 00:08:27,610 --> 00:08:28,740 En nu is het bestand is leeg. 202 00:08:28,740 --> 00:08:31,160 Maar laten we in te zoomen opnieuw voor een tweede. 203 00:08:31,160 --> 00:08:32,470 Laten we het doen ls hier. 204 00:08:32,470 --> 00:08:34,470 Nu zien we "mario.c". 205 00:08:34,470 --> 00:08:37,850 >> Dus er is een aantal andere commando's die zijn de moeite waard om in het achterhoofd dan tijd-- 206 00:08:37,850 --> 00:08:41,200 duidelijk of de Control-L is wat ik heb geweest raken; mkdir we hebben gezien; 207 00:08:41,200 --> 00:08:45,240 rm we hebben gezien, maar ook, dat is voor het verwijderen of verwijderen van een bestand. 208 00:08:45,240 --> 00:08:49,310 Let u kunt also-- en als je kijkt bij online tutorials, zult u rm -rf 209 00:08:49,310 --> 00:08:52,630 is een veel voorkomende manier om te zeggen een map die dingen in zich heeft te verwijderen. 210 00:08:52,630 --> 00:08:54,280 Gewoon super, super voorzichtig. 211 00:08:54,280 --> 00:08:58,780 -rf betekent recursief schrappen wat het ook is 212 00:08:58,780 --> 00:09:01,150 je probeert te verwijderen en met geweld te verwijderen. 213 00:09:01,150 --> 00:09:04,630 Dus recursieve wijze als het een map met een map met een map met een map, 214 00:09:04,630 --> 00:09:05,690 ze allemaal te verwijderen. 215 00:09:05,690 --> 00:09:08,680 En geweld betekent niet eens Vraag me ja of nee, ben ik zeker? 216 00:09:08,680 --> 00:09:11,960 Dus het is een super gevaarlijke manier van het verwijderen van veel spullen snel. 217 00:09:11,960 --> 00:09:17,210 Maar beware-- te vaak doet een onverschrokken student per ongeluk verwijderen, zeg, PSET 218 00:09:17,210 --> 00:09:18,000 één, bijvoorbeeld. 219 00:09:18,000 --> 00:09:19,833 >> MARIA: En als ze gewoon -r doen, ze gaan 220 00:09:19,833 --> 00:09:21,870 om hen te vragen over elk bestand. 221 00:09:21,870 --> 00:09:22,790 >> DAVID MALAN: Welke is matig vervelend. 222 00:09:22,790 --> 00:09:23,480 >> MARIA: Ja. 223 00:09:23,480 --> 00:09:25,813 >> DAVID MALAN: Dus dat is de reden waarom zo velen van ons, zelf inbegrepen, 224 00:09:25,813 --> 00:09:27,070 ben in de gewoonte van het gebruik rf. 225 00:09:27,070 --> 00:09:27,861 Maar het is gevaarlijk. 226 00:09:27,861 --> 00:09:29,010 Dus koper beware. 227 00:09:29,010 --> 00:09:31,050 En dan is mv soort interessant genoemd. 228 00:09:31,050 --> 00:09:33,600 Dus dit is de move commando, die voelt een beetje raar 229 00:09:33,600 --> 00:09:37,260 omdat je inderdaad kunt het gebruiken om bestanden verplaatsen van de ene plaats naar de andere. 230 00:09:37,260 --> 00:09:39,970 Bijvoorbeeld, veronderstel dat ik verknald. 231 00:09:39,970 --> 00:09:43,660 Stel dat ik heb gemaakt een nieuw bestand voor de PSET. 232 00:09:43,660 --> 00:09:46,320 En ik redde het als "greedy.c." 233 00:09:46,320 --> 00:09:49,970 Maar stel dat ik per ongeluk opslaan in IDE50-- dus in mijn werkruimte zichzelf 234 00:09:49,970 --> 00:09:51,580 en niet in pset1. 235 00:09:51,580 --> 00:09:53,960 >> U kunt zo veel linksboven te zien. 236 00:09:53,960 --> 00:09:55,284 Er is "greedy.c." 237 00:09:55,284 --> 00:09:56,450 En er is een aantal oplossingen. 238 00:09:56,450 --> 00:09:58,324 Zodat men, kan ik gebruik maken van de super gebruiksvriendelijke manier 239 00:09:58,324 --> 00:09:59,740 van gewoon te slepen. 240 00:09:59,740 --> 00:10:01,910 En dat zou eigenlijk Dit probleem oplossen. 241 00:10:01,910 --> 00:10:04,967 Maar vandaag, we proberen om naar te kijken de meer mysterieuze maar krachtige manieren 242 00:10:04,967 --> 00:10:05,550 dit doen. 243 00:10:05,550 --> 00:10:07,880 Dus laat me "ls" in pset1. 244 00:10:07,880 --> 00:10:09,690 En ik zie alleen "mario.c." 245 00:10:09,690 --> 00:10:13,450 Laat me gaan en doen "cd ..". 246 00:10:13,450 --> 00:10:15,320 Dus CD weer is verandering directory. 247 00:10:15,320 --> 00:10:18,130 ".." Wat betekent dat, hoewel? 248 00:10:18,130 --> 00:10:21,100 Laatste keer dat ik zei "cd pset1 "in te gaan op pset1. 249 00:10:21,100 --> 00:10:24,360 Dus als ik zeg "cd ..", wat doe ik? 250 00:10:24,360 --> 00:10:24,910 Achteruit. 251 00:10:24,910 --> 00:10:25,150 Ja. 252 00:10:25,150 --> 00:10:26,750 >> Dus het gaat om de zogenaamde ouder. 253 00:10:26,750 --> 00:10:29,730 Ga een niveau omhoog, net als het verlaten van een map. 254 00:10:29,730 --> 00:10:30,500 Dus Enter. 255 00:10:30,500 --> 00:10:31,900 En inderdaad, kijk wat het deed. 256 00:10:31,900 --> 00:10:37,070 Het ontroerde me gewoon in de werkruimte plaats van in pset1, die in de werkruimte. 257 00:10:37,070 --> 00:10:39,710 En nu als ik typ "ls", er is een hele hoop dingen. 258 00:10:39,710 --> 00:10:41,650 Daar is "greedy.c". 259 00:10:41,650 --> 00:10:48,720 Dus nu laat ik gebruik mv letterlijk bewegen "greedy.c" in pset1. 260 00:10:48,720 --> 00:10:51,120 En zo een groot aantal Linux-commando's werken precies zo. 261 00:10:51,120 --> 00:10:54,470 Ze nemen geen argumenten of zij één te nemen argument of ze nemen twee command line 262 00:10:54,470 --> 00:10:55,449 argumenten enzovoort. 263 00:10:55,449 --> 00:10:57,240 En in dit geval is letterlijk doen wat 264 00:10:57,240 --> 00:11:01,670 het zegt, zij succinctly-- greedy.c verhuizen naar pset1. 265 00:11:01,670 --> 00:11:02,310 Enter. 266 00:11:02,310 --> 00:11:03,310 Niets lijkt te gebeuren. 267 00:11:03,310 --> 00:11:06,180 Maar als ik opnieuw doen een ls, hebzuchtig is verdwenen. 268 00:11:06,180 --> 00:11:12,437 En als ik dat doe "cd pset1", invoeren, en vervolgens ls opnieuw, nu is het op de juiste plaats. 269 00:11:12,437 --> 00:11:14,270 Even terzijde, als voor sommige reason-- vooral 270 00:11:14,270 --> 00:11:16,194 als je intermitterende hebt netwerkconnectiviteit 271 00:11:16,194 --> 00:11:18,360 of je bent rond te lopen campus met je laptop deksel 272 00:11:18,360 --> 00:11:20,180 gesloten en open deze vervolgens opnieuw en uw werkruimte 273 00:11:20,180 --> 00:11:21,730 lijkt enigszins uit sync, geen big deal. 274 00:11:21,730 --> 00:11:23,646 Gewoon herlaad je browser venster, en het moet 275 00:11:23,646 --> 00:11:26,339 resync zodat de linker file browser ziet er precies 276 00:11:26,339 --> 00:11:27,380 zoals de terminal-venster. 277 00:11:27,380 --> 00:11:27,921 Geen zorgen te maken. 278 00:11:27,921 --> 00:11:31,460 Bij twijfel, herlaad de pagina, dus Zolang u de bestanden die al zijn opgeslagen. 279 00:11:31,460 --> 00:11:31,960 OK. 280 00:11:31,960 --> 00:11:34,710 Dus mv kan ook worden gebruikt om bestanden te hernoemen. 281 00:11:34,710 --> 00:11:36,760 En laten we een kijkje nemen op deze laatste opdracht hier. 282 00:11:36,760 --> 00:11:39,950 Dus suppose-- en dit is super gemeenschappelijke Ook vroeg. 283 00:11:39,950 --> 00:11:46,400 Sommige studenten af ​​en toe een bestand te maken genoemd, laten we say-- wat is een ander? 284 00:11:46,400 --> 00:11:47,730 Zoals "WATER.C." 285 00:11:47,730 --> 00:11:51,080 Dus ik zal gewoon schreeuwen, voor geen reden, in alle caps. 286 00:11:51,080 --> 00:11:53,190 Maar dit is niet het correcte naam voor het bestand 287 00:11:53,190 --> 00:11:56,660 alleen al omdat ons probleem stellen specificatie niet vertellen 288 00:11:56,660 --> 00:11:59,430 om het bestand als hoofdletters redden "WATER.C." 289 00:11:59,430 --> 00:12:01,320 In plaats daarvan, we verwachten "water.c" in kleine letters. 290 00:12:01,320 --> 00:12:03,140 En in feite is dit problematisch omdat check50, 291 00:12:03,140 --> 00:12:04,370 een programma dat je gaat om te voldoen aan in problemen 292 00:12:04,370 --> 00:12:07,350 instellen die automatisch testen de juistheid van uw code 293 00:12:07,350 --> 00:12:11,615 gaat schreeuwen tegen u als het niet kan vinden "water.c" in kleine letters. 294 00:12:11,615 --> 00:12:12,712 >> Dus ik moet dit oplossen. 295 00:12:12,712 --> 00:12:14,920 Zo veel verschillende manieren om doen, waarvan de eerste 296 00:12:14,920 --> 00:12:18,330 zou zijn om Control-klikken of klik met de rechtermuisknop de bestandsnaam en verander gewoon Rename. 297 00:12:18,330 --> 00:12:19,740 Helemaal fijn om dat te doen. 298 00:12:19,740 --> 00:12:21,820 Maar nogmaals, vandaag de dag, laten we doe het een beetje liefhebber. 299 00:12:21,820 --> 00:12:26,680 Laten we gebruik mv te veranderen "WATER.C" naar "water.c." 300 00:12:26,680 --> 00:12:30,690 Dus je kunt ook het eerste argument gebruiken om het te hernoemen naar het tweede argument 301 00:12:30,690 --> 00:12:34,455 Als het tweede argument is niet in Sterker nog, een map of een directory naam. 302 00:12:34,455 --> 00:12:35,120 >> Prima. 303 00:12:35,120 --> 00:12:39,560 En tot slot, een beetje trick-- dus ik ben in mijn werkruimte directory op dit moment. 304 00:12:39,560 --> 00:12:43,660 Als ik wil krijgen in PSET één, Ik kan zeker het type "cd pset1." 305 00:12:43,660 --> 00:12:47,260 Maar het is zo vervelend om "pset1" typen of langere bestandsnamen of directory namen 306 00:12:47,260 --> 00:12:47,980 nog. 307 00:12:47,980 --> 00:12:51,960 Zo heel vaak in Linux, wat je kunt doen is beginnen met typen "pse" 308 00:12:51,960 --> 00:12:56,100 en gewoon vervelen, Tab, en laat de computer cijfer het uit voor je. 309 00:12:56,100 --> 00:12:58,190 Super behulpzaam te krijgen in die gewoonte. 310 00:12:58,190 --> 00:13:01,079 De enige vangst is als u meerdere bestanden of mappen te beginnen 311 00:13:01,079 --> 00:13:02,870 met de letter "p" of "PS," je zou kunnen hebben 312 00:13:02,870 --> 00:13:05,525 een paar voor de typen computer weet wat te doen. 313 00:13:05,525 --> 00:13:06,820 >> MARIA: We willen snelkoppelingen. 314 00:13:06,820 --> 00:13:08,695 >> DAVID MALAN: Dit zal bespaart u zo veel tijd. 315 00:13:08,695 --> 00:13:11,930 En ook, zoals we al zeiden in collegezaal, u kan in de geschiedenis te scrollen, omhoog en omlaag, 316 00:13:11,930 --> 00:13:15,461 te vinden recent uitgevoerde opdrachten ook. 317 00:13:15,461 --> 00:13:15,960 Prima. 318 00:13:15,960 --> 00:13:20,904 Dus nu, laten we onze aandacht weer een eenvoudig programma, hello wereld. 319 00:13:20,904 --> 00:13:22,195 Dus we hebben dit precies samengesteld. 320 00:13:22,195 --> 00:13:24,050 En nu waarom we niet nemen een blik op de data types 321 00:13:24,050 --> 00:13:26,776 en dan de overgang van een aantal overeenkomend Scratch blokken C. 322 00:13:26,776 --> 00:13:27,400 MARIA: Awesome. 323 00:13:27,400 --> 00:13:30,031 Dus nu dat je bent begonnen schrijven programma in C, 324 00:13:30,031 --> 00:13:32,530 we gaan beginnen te praten over data types en variabelen. 325 00:13:32,530 --> 00:13:37,570 Dus sommige soorten gegevens die u zou willen weten nu beginnen 326 00:13:37,570 --> 00:13:39,400 zijn degenen die zijn blauw gemarkeerd. 327 00:13:39,400 --> 00:13:42,420 Dus we hebben int eerste, wat staat voor integer. 328 00:13:42,420 --> 00:13:46,075 En dat geldt gehele getallen, zoals u misschien guessed-- zo 1, 2, 3, 329 00:13:46,075 --> 00:13:47,950 en alle andere getallen die je maar kunt bedenken. 330 00:13:47,950 --> 00:13:48,730 >> DAVID MALAN: En ook negatief. 331 00:13:48,730 --> 00:13:50,220 >> MARIA: En ook negatieve, yep. 332 00:13:50,220 --> 00:13:51,450 En 0. 333 00:13:51,450 --> 00:13:54,250 Dan hebben we praalwagens, die zijn floating point getallen. 334 00:13:54,250 --> 00:13:58,360 Dus dat is al de reële getallen die moeten decimalen. 335 00:13:58,360 --> 00:14:03,960 Dus 5,0, 5,2, en zelfs meer cijfers achter de komma, 336 00:14:03,960 --> 00:14:05,620 als goed, maar ook negatieve. 337 00:14:05,620 --> 00:14:07,530 Dan hebben we char die een personage. 338 00:14:07,530 --> 00:14:10,240 Dus ik denk dat we gesproken over dit in het college vandaag. 339 00:14:10,240 --> 00:14:15,682 Maar we hebben brieven, voor example-- A, B, C-- die kan worden opgeslagen als een char. 340 00:14:15,682 --> 00:14:18,390 Maar dan hebben we veel meer symbolen dat kan worden opgeslagen als een char. 341 00:14:18,390 --> 00:14:22,380 En die worden opgeslagen als ASCII. 342 00:14:22,380 --> 00:14:25,280 >> En dan hebben we bool, die Booleans zijn. 343 00:14:25,280 --> 00:14:29,067 En die te evalueren op True of Valse of 1 en 0 respectievelijk. 344 00:14:29,067 --> 00:14:31,650 DAVID MALAN: En herinneren dat bool afkomstig uit de CS50 bibliotheek. 345 00:14:31,650 --> 00:14:33,300 Dus het is niet ingebouwd in C, maar het is super handig 346 00:14:33,300 --> 00:14:34,850 de notie van waar en onwaar zijn. 347 00:14:34,850 --> 00:14:36,990 En hoewel je misschien think-- leuk feitje. 348 00:14:36,990 --> 00:14:43,700 Een bool technisch moet hoeveel bits, echt, te vertegenwoordigen tegenover True False? 349 00:14:43,700 --> 00:14:47,910 Hoeveel bits denk je je nodig zou hebben, maximaal? 350 00:14:47,910 --> 00:14:48,790 Ja, slechts één. 351 00:14:48,790 --> 00:14:52,077 Dus het blijkt dat C kan niet geven je gewoon een beetje. 352 00:14:52,077 --> 00:14:54,160 De kleinste maateenheid je kunt krijgen is acht. 353 00:14:54,160 --> 00:14:57,090 Dus het is een beetje verspilling ze je bent via een volledige byte of acht bits, 354 00:14:57,090 --> 00:14:58,340 te vertegenwoordigen Waar of niet waar. 355 00:14:58,340 --> 00:15:01,807 Maar dat is gewoon de manier waarop het is in C uitgevoerd door de CS50 bibliotheek. 356 00:15:01,807 --> 00:15:04,890 MARIA: En dan degenen die we niet van plan om te praten over zo uitgebreid 357 00:15:04,890 --> 00:15:08,060 rechts now-- dubbel, dat is voor grotere praalwagens. 358 00:15:08,060 --> 00:15:09,811 Lange lange en korte Ook voor integers. 359 00:15:09,811 --> 00:15:10,643 DAVID MALAN: Inderdaad. 360 00:15:10,643 --> 00:15:13,190 In hacker editie van PSET één, we eigenlijk lange lange gebruiken. 361 00:15:13,190 --> 00:15:15,801 Maar voor de standaard editie, het moet niet noodzakelijk zijn. 362 00:15:15,801 --> 00:15:16,300 MARIA: Cool. 363 00:15:16,300 --> 00:15:17,361 OK. 364 00:15:17,361 --> 00:15:20,110 Dus operators-- je moet waarschijnlijk bekend met de meeste van deze. 365 00:15:20,110 --> 00:15:22,620 Daarnaast +; aftrekken, -. 366 00:15:22,620 --> 00:15:24,070 Voor vermenigvuldiging, hebben we de *. 367 00:15:24,070 --> 00:15:25,900 Dus niet de X die we meestal gebruiken. 368 00:15:25,900 --> 00:15:27,840 Divisie, hebben we de backslash. 369 00:15:27,840 --> 00:15:31,380 En modulo is onze laatste operator die we gaan praten over nu. 370 00:15:31,380 --> 00:15:35,610 Het is een operator die ons in staat stelt om Neem de rest van de deling. 371 00:15:35,610 --> 00:15:40,630 Dus als we 4% 2, 4 verdeeld door 2 is 2 met een restant van 0. 372 00:15:40,630 --> 00:15:41,740 Dus 4% 2 0 is. 373 00:15:41,740 --> 00:15:42,950 4% 3 is 1. 374 00:15:42,950 --> 00:15:44,870 4% 5 4 is, zoals je had kunnen vermoeden. 375 00:15:44,870 --> 00:15:48,860 En vergeet niet bij het gebruik van al deze operators de PEMDAS regels. 376 00:15:48,860 --> 00:15:54,060 >> DAVID MALAN: Dus om duidelijk te zijn, als je do 4% 2, waarom is dat 0, precies? 377 00:15:54,060 --> 00:15:57,480 >> MARIA: Omdat 4 gedeeld door 2 is 2 met een restant van 0. 378 00:15:57,480 --> 00:16:00,752 Dus modulo geeft ons dat de rest als in tegenstelling tot het resultaat van de deling. 379 00:16:00,752 --> 00:16:02,960 DAVID MALAN: En inderdaad, wat we dit nuttig vinden 380 00:16:02,960 --> 00:16:05,640 is het dat in sommige problemen Dat is niet per se een, 381 00:16:05,640 --> 00:16:08,040 als je wilt om het hebben effect van het beperken van jezelf 382 00:16:08,040 --> 00:16:10,720 een reeks getallen zoals 0 tot iets, 383 00:16:10,720 --> 00:16:13,904 u kunt modulo gebruiken om rond te wikkelen eerder dan als de 2 miljard 384 00:16:13,904 --> 00:16:16,320 of 4 miljard waarde we hebben gesproken over in collegezaal. 385 00:16:16,320 --> 00:16:16,870 >> MARIA: Ja. 386 00:16:16,870 --> 00:16:19,429 En zelfs in de "hebzuchtige" we kunnen. 387 00:16:19,429 --> 00:16:21,345 DAVID MALAN: Ja, in probleem set één, als goed. 388 00:16:21,345 --> 00:16:22,520 MARIA: Ja, leuk. 389 00:16:22,520 --> 00:16:24,340 DAVID MALAN: Goede hint. 390 00:16:24,340 --> 00:16:25,750 MARIA: Sorry. 391 00:16:25,750 --> 00:16:28,590 Boolean expressions-- zo voor Booleaanse operatoren, 392 00:16:28,590 --> 00:16:31,770 we gaan over alles praten van deze die je hier ziet. 393 00:16:31,770 --> 00:16:35,310 Dus nu hebben we twee gelijke borden vermeld voor gelijken. 394 00:16:35,310 --> 00:16:38,650 Dus dat zijn ter vergelijking. 395 00:16:38,650 --> 00:16:40,830 Tot nu toe hebben we alleen gezien een gelijk teken. 396 00:16:40,830 --> 00:16:44,870 Dat is wanneer we wijzen een waarde aan een variabele. 397 00:16:44,870 --> 00:16:50,160 Dus als we hebben gezien int n = 5, dan we hebben toegewezen 5 aan de variabele n. 398 00:16:50,160 --> 00:16:55,600 Maar als we willen == gebruiken voor vergelijking, kunnen we als n == 5 controleren. 399 00:16:55,600 --> 00:16:58,310 En als n == 5, dan is dat waar. 400 00:16:58,310 --> 00:17:01,950 >> Dus Booleaanse operatoren stellen ons in staat, in principe, 401 00:17:01,950 --> 00:17:04,670 met Boolean evalueren uitdrukkingen Waar of niet waar. 402 00:17:04,670 --> 00:17:07,819 Dus niet equals-- hebben we de uitroepteken en gelijken. 403 00:17:07,819 --> 00:17:14,240 Dus we konden ook controleren of n is niet gelijk 5-- zo n! = 5. 404 00:17:14,240 --> 00:17:17,640 Minder dan, kleiner dan of gelijk aan groter dan, groter dan of gelijk aan, 405 00:17:17,640 --> 00:17:20,720 en dan hebben we het logische En de logische OR. 406 00:17:20,720 --> 00:17:24,060 En die ons in staat stellen om te evalueren meerdere Booleaanse expressies samen 407 00:17:24,060 --> 00:17:27,930 in principe samen als komen één geheel Booleaanse uitdrukking. 408 00:17:27,930 --> 00:17:34,970 Dus als we willen een nummer te vinden, zeggen, die groter is dan 5 en minder dan 15 409 00:17:34,970 --> 00:17:39,810 tegelijkertijd, zouden we de logische operator om te zien of n 410 00:17:39,810 --> 00:17:42,937 groter dan 5 && n minder dan 15. 411 00:17:42,937 --> 00:17:44,770 DAVID MALAN: En hier, ook, het is echt gemakkelijk 412 00:17:44,770 --> 00:17:47,290 vroeg per ongeluk Gebruik slechts een enkele ampersand 413 00:17:47,290 --> 00:17:48,572 of een enkele verticale balk. 414 00:17:48,572 --> 00:17:51,280 En hopelijk zal de compiler schreeuwen tegen je, omdat ze eigenlijk 415 00:17:51,280 --> 00:17:52,530 een andere betekenis. 416 00:17:52,530 --> 00:17:55,660 Voor degenen die nieuwsgierig, ze zijn gebruikt voor bitsgewijze operaties, 417 00:17:55,660 --> 00:17:57,197 die op individuele bits. 418 00:17:57,197 --> 00:17:58,780 Maar je wilt het paar van hen hier. 419 00:17:58,780 --> 00:18:01,560 En super belangrijk is dat eerste, het isgelijkteken, 420 00:18:01,560 --> 00:18:05,270 dat is de exploitant gelijkheid tegen het toewijzen. 421 00:18:05,270 --> 00:18:08,552 >> MARIA: En de verticale balk gelegen tussen de Delete en Return. 422 00:18:08,552 --> 00:18:09,260 DAVID MALAN: Ja. 423 00:18:09,260 --> 00:18:11,420 Op een typische Amerikaanse toetsenbord. 424 00:18:11,420 --> 00:18:13,190 >> MARIA: Yep. 425 00:18:13,190 --> 00:18:15,890 Dus laten we springen recht in voorwaardelijke verklaringen. 426 00:18:15,890 --> 00:18:18,300 In Scratch, je hebt al gezien, waarschijnlijk, 427 00:18:18,300 --> 00:18:22,730 als uitspraken die u in staat te stellen controleren of iets waar is, dan is 428 00:18:22,730 --> 00:18:23,660 iets anders doen. 429 00:18:23,660 --> 00:18:28,410 Dus je zou hebben gewild om te controleren of uw sprite is 430 00:18:28,410 --> 00:18:31,410 aanraken van een andere sprite of de rand van uw scherm. 431 00:18:31,410 --> 00:18:35,520 En dan kun je al wilde beëindigen het spel of iets anders doen. 432 00:18:35,520 --> 00:18:40,000 Dus de syntax daarvoor is "als (conditie)." 433 00:18:40,000 --> 00:18:46,820 Dus als je sprite raakt iets, dan doen is in de accolades. 434 00:18:46,820 --> 00:18:48,980 >> Dan hebben we if-else statements. 435 00:18:48,980 --> 00:18:54,080 Anders laat ons toe om iets te doen als voorwaarde dat wij 436 00:18:54,080 --> 00:18:55,870 controleren in het begin niet waar is. 437 00:18:55,870 --> 00:19:01,530 Dus als de sprite raakt de grens doen, anders iets anders doen. 438 00:19:01,530 --> 00:19:04,030 Dus anders iets anders doen. 439 00:19:04,030 --> 00:19:07,530 Dan hebben we een kort voorbeeld voor. 440 00:19:07,530 --> 00:19:11,551 Dus als (military_time <12), we willen printf "Goedemorgen!" 441 00:19:11,551 --> 00:19:13,300 Anders gaan we printf "Goedenavond!" 442 00:19:13,300 --> 00:19:14,860 Basic voorbeeld. 443 00:19:14,860 --> 00:19:15,680 >> DAVID MALAN: Goed. 444 00:19:15,680 --> 00:19:16,760 >> MARIA: Cool. 445 00:19:16,760 --> 00:19:18,560 Dus nu hebben we switch statements. 446 00:19:18,560 --> 00:19:21,960 Schakelen verklaringen in het algemeen kan kunnen we veel van hetzelfde te doen 447 00:19:21,960 --> 00:19:25,070 dat we net gesproken over met als uitspraken. 448 00:19:25,070 --> 00:19:29,440 Zo, nu hebben we de algemene vorm van de switch-statement 449 00:19:29,440 --> 00:19:33,870 die ons in staat stelt te nemen een variabele genaamd n 450 00:19:33,870 --> 00:19:37,670 en vergelijk het met een heleboel verschillende waarden die wij hier 451 00:19:37,670 --> 00:19:40,010 Constant1, constant2 hebben genoemd. 452 00:19:40,010 --> 00:19:41,150 We kunnen veel meer hebben. 453 00:19:41,150 --> 00:19:42,930 En die zijn gevallen genoemd. 454 00:19:42,930 --> 00:19:46,280 >> Dus als we een schakelaar argument-- en dit werkt 455 00:19:46,280 --> 00:19:50,580 alleen integers-- we een variabele in dit geval is dat n. 456 00:19:50,580 --> 00:19:53,840 Als de variabele n is gelijk constant1, we 457 00:19:53,840 --> 00:19:59,720 zal enige stukje code uit te voeren of iets dat we willen doen. 458 00:19:59,720 --> 00:20:01,280 En dan zouden we breken. 459 00:20:01,280 --> 00:20:04,820 Dus de pauze betekent dat de switch 460 00:20:04,820 --> 00:20:08,120 stopt uitvoeren als n gelijk is aan constant1, 461 00:20:08,120 --> 00:20:09,752 en dan het programma zal worden voortgezet. 462 00:20:09,752 --> 00:20:11,835 Het zal verlaten uit de switch statement en het zal 463 00:20:11,835 --> 00:20:13,520 blijven om iets anders te doen. 464 00:20:13,520 --> 00:20:17,204 >> Indien echter n is niet gelijk Constant1, dan case voor constant2 465 00:20:17,204 --> 00:20:17,870 worden gecontroleerd. 466 00:20:17,870 --> 00:20:21,750 Als n gelijk is constant2, dat andere fragment van de code zal worden uitgevoerd. 467 00:20:21,750 --> 00:20:23,850 En dan zal het breken indien deze gelijk is aan het. 468 00:20:23,850 --> 00:20:27,580 En dan kunnen we also-- niet noodzakelijkerwijs, hoewel-- een standaard geval, 469 00:20:27,580 --> 00:20:32,290 dat zal gebeuren als n niet gelijk een van de zaken die u hebt opgenomen. 470 00:20:32,290 --> 00:20:35,400 En in het standaard geval ook hebben een pauze niet noodzakelijkerwijs 471 00:20:35,400 --> 00:20:39,271 omdat de switch zal weten dat het moet eindigen na de standaard 472 00:20:39,271 --> 00:20:40,270 geval als dat het geval is. 473 00:20:40,270 --> 00:20:42,140 >> DAVID MALAN: Maar stilistisch, we het altijd daar. 474 00:20:42,140 --> 00:20:42,540 >> MARIA: Ja. 475 00:20:42,540 --> 00:20:42,710 >> DAVID MALAN: Ja. 476 00:20:42,710 --> 00:20:44,750 Dus vooral bij het starten, vooral als onder die minder 477 00:20:44,750 --> 00:20:47,458 comfortabele, zou ik persoonlijk gewoon raden stok met de ifs 478 00:20:47,458 --> 00:20:51,564 en IFS-elses en if-else-if-elses enzovoort als slechts 479 00:20:51,564 --> 00:20:53,480 omdat ze een beetje eenvoudiger. 480 00:20:53,480 --> 00:20:56,142 Dit is een mooi optimalisatie, of soms zelfs esthetisch is 481 00:20:56,142 --> 00:20:57,350 maakt de code beter leesbaar. 482 00:20:57,350 --> 00:20:59,599 En inderdaad, vermoedelijk mid-semester zullen we een probleem zien 483 00:20:59,599 --> 00:21:02,504 set waar het ziet er gewoon beter en makkelijker te lezen voor de mens 484 00:21:02,504 --> 00:21:03,670 met behulp van een switch statement. 485 00:21:03,670 --> 00:21:05,460 Maar maak je geen zorgen te maken over klampt zich vast aan dit te vroeg. 486 00:21:05,460 --> 00:21:05,680 >> MARIA: Ja. 487 00:21:05,680 --> 00:21:08,840 Als je een heleboel als statements, het misschien gewoon niet goed leesbaar. 488 00:21:08,840 --> 00:21:10,965 Het zou niet erg snel zijn voor u om te gaan doorheen. 489 00:21:10,965 --> 00:21:13,230 Dus schakelen verklaringen kunnen zeer nuttig ook. 490 00:21:13,230 --> 00:21:17,900 En ook niet remember-- niet vergeet de pauzes in daar te zetten. 491 00:21:17,900 --> 00:21:20,330 >> DAVID MALAN: Doe dit niet onthouden. 492 00:21:20,330 --> 00:21:24,890 >> MARIA: Want dan zou je valt door middel van het ene geval tot geval. 493 00:21:24,890 --> 00:21:27,930 Dus laten we zeggen dat geval Constant1 heeft een break-statement niet in hebben. 494 00:21:27,930 --> 00:21:31,920 Dan zouden we door vallen in geval constant2. 495 00:21:31,920 --> 00:21:35,070 En we willen niet te doen als we hebben al het geval Constant1 bereikt 496 00:21:35,070 --> 00:21:37,830 en het is gelijk aan n. 497 00:21:37,830 --> 00:21:45,100 >> Dus, bijvoorbeeld, als we een variabele n dat een klasse nummer bevat, 498 00:21:45,100 --> 00:21:48,990 en we willen zien wat dat klasse is-- als n gelijk is aan 50, 499 00:21:48,990 --> 00:21:51,957 we gaan om af te drukken "CS50 is Inleiding tot de Informatica I. " 500 00:21:51,957 --> 00:21:53,040 Dan gaan we breken. 501 00:21:53,040 --> 00:21:53,920 En dat is het. 502 00:21:53,920 --> 00:21:55,950 Wanneer echter n gelijk tot 51, we gaan 503 00:21:55,950 --> 00:21:58,494 om af te drukken "CS51 is Introduction Computer Science II. " 504 00:21:58,494 --> 00:21:59,910 Dan weer, we gaan breken. 505 00:21:59,910 --> 00:22:05,080 Indien Daarna worden 124, 61, welke ander nummer dat je zou denken, 506 00:22:05,080 --> 00:22:06,890 of programma is niet van plan te erkennen dat. 507 00:22:06,890 --> 00:22:09,010 Dus het gaat om te zeggen: "Sorry, ik ben niet vertrouwd met die klasse. " 508 00:22:09,010 --> 00:22:10,009 En het gaat te breken. 509 00:22:10,009 --> 00:22:12,847 DAVID MALAN: Dus je kunt echt zien if, anders als, anders idee hier. 510 00:22:12,847 --> 00:22:15,430 Het is gewoon anders syntaxis voor de uiting van de exact hetzelfde idee. 511 00:22:15,430 --> 00:22:17,690 >> MARIA: Precies. 512 00:22:17,690 --> 00:22:19,480 Nu hebben we onze ternair operators. 513 00:22:19,480 --> 00:22:24,900 Dus ternair exploitanten drie parts-- een voorwaarde, 514 00:22:24,900 --> 00:22:27,220 iets te doen als die voorwaarde waar is, 515 00:22:27,220 --> 00:22:29,730 en dan is er iets te doen als die voorwaarde is onwaar. 516 00:22:29,730 --> 00:22:33,400 Zo zie je, in principe, de syntax van die hier. 517 00:22:33,400 --> 00:22:37,792 We hebben het vraagteken, en dan the-- wat doen we dit noemen? 518 00:22:37,792 --> 00:22:38,750 DAVID MALAN: De dubbele punt. 519 00:22:38,750 --> 00:22:39,100 MARIA: Colon. 520 00:22:39,100 --> 00:22:39,599 Dank je. 521 00:22:39,599 --> 00:22:41,880 Sorry. 522 00:22:41,880 --> 00:22:45,800 Dus laten we eens kijken naar ons voorbeeld te kijken of we zin dit-- kan maken 523 00:22:45,800 --> 00:22:47,840 class_num == 50. 524 00:22:47,840 --> 00:22:52,580 Dus hier zien we onze Booleaanse operator == dat vergelijkt de variabele class_num 525 00:22:52,580 --> 00:22:53,100 50. 526 00:22:53,100 --> 00:22:55,150 Dus class_num winkels een integer. 527 00:22:55,150 --> 00:22:58,180 En als dat getal is gelijk aan 50, dan zijn we 528 00:22:58,180 --> 00:23:02,810 gaan slaan "David Malan" binnen de string professor. 529 00:23:02,810 --> 00:23:05,912 Als klasse nummer niet gelijk aan 50 ", niet David Malan" 530 00:23:05,912 --> 00:23:07,120 gaat de professor zijn. 531 00:23:07,120 --> 00:23:08,630 >> DAVID MALAN: Dank je wel. 532 00:23:08,630 --> 00:23:12,110 Dus dit lijkt gelijk aan wat, zou je zeggen, op het eerste gezicht? 533 00:23:12,110 --> 00:23:17,930 534 00:23:17,930 --> 00:23:19,960 >> MARIA: Het lijkt mij zoals if-else statements. 535 00:23:19,960 --> 00:23:20,709 >> DAVID MALAN: Ja. 536 00:23:20,709 --> 00:23:24,020 En in feite is dit soort van een mooie one-liner, 537 00:23:24,020 --> 00:23:27,520 zo te zeggen, voor de uitvoering van precies de logica van if-else 538 00:23:27,520 --> 00:23:29,010 maar het doen van alles in één stap. 539 00:23:29,010 --> 00:23:29,860 >> MARIA: Precies. 540 00:23:29,860 --> 00:23:30,360 Ja. 541 00:23:30,360 --> 00:23:33,520 Dus als-else statements zou nemen veel ruimte. 542 00:23:33,520 --> 00:23:36,283 Zij zullen het ook lang voor zijn iets eenvoudigs als dit. 543 00:23:36,283 --> 00:23:38,350 Dus dit kan zeer beknopt en erg leuk. 544 00:23:38,350 --> 00:23:40,880 545 00:23:40,880 --> 00:23:46,820 Dus nu gaan we naar op zoek naar iets opnieuw en opnieuw uitvoeren, 546 00:23:46,820 --> 00:23:50,060 dus controleren op een conditie meerdere keren 547 00:23:50,060 --> 00:23:53,510 en dan blijft iets te doen terwijl die voorwaarde waar is. 548 00:23:53,510 --> 00:23:56,740 Dus dit brengt ons mooi in terwijl loops. 549 00:23:56,740 --> 00:23:59,270 >> Aan de linkerkant, hebben we onze eerste while lus. 550 00:23:59,270 --> 00:24:03,840 Dus terwijl iets waar is, iets opnieuw en opnieuw doen. 551 00:24:03,840 --> 00:24:08,850 Dus zorg ervoor om op te merken dat onze Voorwaarde hierbij is bevestigd aan de top. 552 00:24:08,850 --> 00:24:14,150 Overwegende dat met onze tweede loop-- we noemen dat een do-while loop-- we iets doen, 553 00:24:14,150 --> 00:24:15,890 dan controleren we voor een voorwaarde. 554 00:24:15,890 --> 00:24:17,980 En als die voorwaarde blijft om waar te zijn, 555 00:24:17,980 --> 00:24:20,150 we terug gaan en doen het ding weer. 556 00:24:20,150 --> 00:24:23,360 Dus het belangrijkste verschil is de plaats waar de voorwaarde wordt gecontroleerd. 557 00:24:23,360 --> 00:24:29,260 En de code kan nooit uitgevoerd als de voorwaarde niet 558 00:24:29,260 --> 00:24:30,430 waar met de while lus. 559 00:24:30,430 --> 00:24:33,050 Overwegende dat met de do-while lus, hebben we de code 560 00:24:33,050 --> 00:24:35,380 dat altijd ten minste een keer uitgevoerd. 561 00:24:35,380 --> 00:24:37,470 En dan, terwijl de conditie blijft om waar te zijn, 562 00:24:37,470 --> 00:24:39,960 we terug kunnen gaan en herhalen weer binnen. 563 00:24:39,960 --> 00:24:43,625 Dus waarom denk je dat we zouden gebruiken een do-while lus over een tijdje lus? 564 00:24:43,625 --> 00:24:48,221 565 00:24:48,221 --> 00:24:48,720 Rechts. 566 00:24:48,720 --> 00:24:52,600 Dus als we willen de prompt gebruiker voor een soort van input, 567 00:24:52,600 --> 00:24:55,400 als we willen hen vragen om hun naam in te voeren, 568 00:24:55,400 --> 00:24:57,342 we willen hen minstens een keer vragen. 569 00:24:57,342 --> 00:24:59,050 En als ze in te voeren die naam, we zijn niet 570 00:24:59,050 --> 00:25:00,740 gaan ze weer vragen omdat we weten het al. 571 00:25:00,740 --> 00:25:02,656 Maar als ze niet in te voeren hun naam, of als ze 572 00:25:02,656 --> 00:25:05,787 voer iets dat natuurlijk geen naam, 573 00:25:05,787 --> 00:25:08,120 we nog steeds willen blijven hen te vragen voor hun naam. 574 00:25:08,120 --> 00:25:10,710 >> DAVID MALAN: En lezing hadden we een als dit met het krijgen positieve int 575 00:25:10,710 --> 00:25:13,550 bijvoorbeeld, waar er niets aan kijk eerst omdat je niet eens 576 00:25:13,550 --> 00:25:14,190 gekregen een int. 577 00:25:14,190 --> 00:25:16,680 Dus we willen dit-- doen krijgen een int van de user-- 578 00:25:16,680 --> 00:25:18,860 check het dan, misschien, opnieuw en opnieuw en opnieuw. 579 00:25:18,860 --> 00:25:21,030 >> MARIA: Precies. 580 00:25:21,030 --> 00:25:22,060 Voor loops-- OK. 581 00:25:22,060 --> 00:25:25,842 Voor loops kunnen ons toelaten om bijna doen precies hetzelfde, als goed. 582 00:25:25,842 --> 00:25:27,300 Het is eigenlijk precies hetzelfde. 583 00:25:27,300 --> 00:25:30,190 Dus er is niets dat je kunt doen met lussen 584 00:25:30,190 --> 00:25:32,840 dat je niet zou kunnen te maken met while loops. 585 00:25:32,840 --> 00:25:36,900 Maar voor lussen kan een beetje lijken beetje meer syntactisch ingewikkeld 586 00:25:36,900 --> 00:25:39,730 omdat ze drie onderdelen wat 587 00:25:39,730 --> 00:25:42,990 was voor alleen de staat met while loops. 588 00:25:42,990 --> 00:25:48,260 Dus het eerste deel dat je op zee, de meest linkse, we hebben "int dwergen = 0." 589 00:25:48,260 --> 00:25:51,490 Dus dit is waar we initialiseren onze variabele. 590 00:25:51,490 --> 00:25:55,210 >> Dan hebben we een puntkomma en "dwergen <7." 591 00:25:55,210 --> 00:25:57,100 Dus dit is waar uit toestand eigenlijk is. 592 00:25:57,100 --> 00:26:00,170 Dus dat is wat we zouden moeten zet alleen in de tijd loop-- 593 00:26:00,170 --> 00:26:01,880 "terwijl dwergen <7." 594 00:26:01,880 --> 00:26:05,380 Hier, dat gaat in de midden van onze lus. 595 00:26:05,380 --> 00:26:07,190 Dus "dwaves <7." 596 00:26:07,190 --> 00:26:11,350 En dan is onze laatste deel is "dwergen ++," dat is waar we onze variabele updaten. 597 00:26:11,350 --> 00:26:15,470 Dus de belangrijkste om te beseffen is dat dit 598 00:26:15,470 --> 00:26:22,010 gaat om te gaan door deze lus zevenmaal en uitvoeren zevenmaal. 599 00:26:22,010 --> 00:26:24,020 Dus we hebben zeven dwergen, en ze zijn allemaal 600 00:26:24,020 --> 00:26:26,020 gaan zeggen, "Ik ben hier om je te helpen, Sneeuwwitje " 601 00:26:26,020 --> 00:26:28,860 want ze zijn klaar te helpen Sneeuwwitje. 602 00:26:28,860 --> 00:26:33,600 >> Met while loops, zouden wij hebben gedaan de initialisatie en het bijwerken 603 00:26:33,600 --> 00:26:37,490 niet in de toestand weer, maar hetzij vóór of in de while lus 604 00:26:37,490 --> 00:26:40,210 om ervoor te zorgen dat we-- omdat we altijd moeten die delen. 605 00:26:40,210 --> 00:26:42,835 Dus om ervoor te zorgen dat we hebben hen, zouden we nog steeds hebben toegevoegd hen 606 00:26:42,835 --> 00:26:44,580 op, maar niet tussen de haakjes. 607 00:26:44,580 --> 00:26:47,288 >> DAVID MALAN: En zo ziet like-- in de collegezaal, bijvoorbeeld, 608 00:26:47,288 --> 00:26:50,250 Ik bijna altijd, als, i en n en saai variabelen. 609 00:26:50,250 --> 00:26:53,050 Het lijkt alsof je meer kunt gebruiken slim genoemd variabelen, ook. 610 00:26:53,050 --> 00:26:56,300 >> MARIA: Ja, het is eigenlijk heel leuk een beetje meer beschrijvende variabelen 611 00:26:56,300 --> 00:26:59,400 want vooral als iemand anders is het lezen van uw code-- misschien bent u grader 612 00:26:59,400 --> 00:27:00,940 of als u samenwerkt met somebody-- 613 00:27:00,940 --> 00:27:03,481 wilt u ervoor zorgen dat ze begrijpen wat je aan het doen bent. 614 00:27:03,481 --> 00:27:05,750 615 00:27:05,750 --> 00:27:06,400 >> OK. 616 00:27:06,400 --> 00:27:11,435 Dus dit is iets heel funky-- lus binnen een lus. 617 00:27:11,435 --> 00:27:13,060 Ik weet niet of we dit eerder gezien. 618 00:27:13,060 --> 00:27:13,830 Waarschijnlijk niet. 619 00:27:13,830 --> 00:27:17,750 Maar we kunnen eigenlijk dit-- dus lussen in plaats van lussen. 620 00:27:17,750 --> 00:27:25,130 Dus doet iedereen wil misschien wandelen me door wat er hier aan de hand? 621 00:27:25,130 --> 00:27:28,240 622 00:27:28,240 --> 00:27:29,490 DAVID MALAN: Ik zal een steek te nemen. 623 00:27:29,490 --> 00:27:29,970 MARIA: Cool. 624 00:27:29,970 --> 00:27:30,636 DAVID MALAN: OK. 625 00:27:30,636 --> 00:27:34,690 Dus, spoiler-- willen we de spullen af ​​te drukken dat is in de rechter bovenhoek 626 00:27:34,690 --> 00:27:35,190 er. 627 00:27:35,190 --> 00:27:35,450 >> MARIA: Recht. 628 00:27:35,450 --> 00:27:35,710 Jaaa Jaaa. 629 00:27:35,710 --> 00:27:38,043 >> DAVID MALAN: Dus we hebben net zet er die voorbeeld van de uitvoer. 630 00:27:38,043 --> 00:27:42,590 Dus ik kan afleiden uit de bovenste lus die je 631 00:27:42,590 --> 00:27:45,680 itereren over rijen van de buitenste lus, om zo te zeggen. 632 00:27:45,680 --> 00:27:48,107 En je bent dan itereren zuilen de binnenste lus. 633 00:27:48,107 --> 00:27:50,190 En intuïtief, deze hopelijk zinvol 634 00:27:50,190 --> 00:27:52,070 omdat door de aard van elk programma dat we hebben gezien 635 00:27:52,070 --> 00:27:55,570 vóór, printf, dat de functie we gebruiken, uiteindelijk, 636 00:27:55,570 --> 00:27:58,190 heeft de mogelijkheid om dingen af ​​te drukken out wezen regel voor regel. 637 00:27:58,190 --> 00:27:59,960 Zoals, als je eenmaal hebt uitgevoerd een nieuwe lijn, er is 638 00:27:59,960 --> 00:28:02,876 geen weg terug verdubbelen en afdrukken iets hoger in het scherm, tenminste 639 00:28:02,876 --> 00:28:04,530 niet met behulp van printf als dit. 640 00:28:04,530 --> 00:28:07,750 >> En zo in dat verband, het maakt zin dat de buitenste lus 641 00:28:07,750 --> 00:28:10,930 worden verwezen naar de rijen omdat voor elke gegeven rij, 642 00:28:10,930 --> 00:28:13,650 je gaat te willen uitprinten XXXXX, en dan 643 00:28:13,650 --> 00:28:15,520 gaan naar de volgende rij, XXXXX. 644 00:28:15,520 --> 00:28:17,317 Dus rijen staan ​​voorop. 645 00:28:17,317 --> 00:28:19,150 En vervolgens binnen elk rij, je kolommen afdrukken. 646 00:28:19,150 --> 00:28:21,160 Als u geprobeerd om het het doen tegendeel, het zou waarschijnlijk niet 647 00:28:21,160 --> 00:28:21,690 komen als u van plan bent. 648 00:28:21,690 --> 00:28:22,190 >> MARIA: Ja. 649 00:28:22,190 --> 00:28:24,950 We konden gewoon niet terug naar de vorige rij met printf. 650 00:28:24,950 --> 00:28:27,658 >> DAVID MALAN: En wat is interessant per vandaag praatje over omvang, 651 00:28:27,658 --> 00:28:31,600 eigenlijk, is die rij is een int dat is gedeclareerd in de bovenste lus. 652 00:28:31,600 --> 00:28:34,030 Maar merken dat het nog steeds Binnenin, zogezegd, 653 00:28:34,030 --> 00:28:35,982 de accolades die onmiddellijk volgen, 654 00:28:35,982 --> 00:28:38,440 ook al is het technisch niet binnen die accolades. 655 00:28:38,440 --> 00:28:41,750 Dus rij is ruimte voor het geheel van het fragment van de code, 656 00:28:41,750 --> 00:28:44,690 zowel in de buitenste lus en de binnenkant van de binnenste lus. 657 00:28:44,690 --> 00:28:48,050 Maar daarentegen, waar de is kolom in scope? 658 00:28:48,050 --> 00:28:49,810 De variabele kolom? 659 00:28:49,810 --> 00:28:51,310 Ja, alleen in het inwendige lus. 660 00:28:51,310 --> 00:28:54,280 En dat is OK, want we hebben geen toegang tot Het buiten de accolades. 661 00:28:54,280 --> 00:28:57,280 Alles wat we doen is het afdrukken van een nieuw lijn aan het einde daar. 662 00:28:57,280 --> 00:28:58,670 Zodat in feite is OK. 663 00:28:58,670 --> 00:29:03,740 >> Dit heeft dus het effect, het lijkt erop dat, doen drie rijen en vier kolommen. 664 00:29:03,740 --> 00:29:04,370 >> MARIA: Recht. 665 00:29:04,370 --> 00:29:06,270 Dus eerst gaan we via onze eerste rij. 666 00:29:06,270 --> 00:29:10,520 En alleen in onze eerste rij, doen we het vier kolommen in de eerste rij. 667 00:29:10,520 --> 00:29:11,980 Dus we uitprinten vier X. 668 00:29:11,980 --> 00:29:15,800 En dan kunnen we verlaat de lus, omdat we hebben al uitgeprint vier X. 669 00:29:15,800 --> 00:29:17,100 En we het afdrukken van een nieuwe lijn. 670 00:29:17,100 --> 00:29:19,920 En dan gaan we door de Hetzelfde proces voor twee rijen 671 00:29:19,920 --> 00:29:21,170 een totaal van drie te maken. 672 00:29:21,170 --> 00:29:23,530 >> DAVID MALAN: En het is vermeldenswaard is het gewoon een artefact van het lettertype, het feit 673 00:29:23,530 --> 00:29:25,680 dat het monster uitgang lijken zo veel groter, 674 00:29:25,680 --> 00:29:27,520 alsof er is meer rijen dan kolommen. 675 00:29:27,520 --> 00:29:29,824 Maar het is gewoon omdat de X is langer dan breed. 676 00:29:29,824 --> 00:29:32,740 Dat is alles wat er gebeurt, plus de witte ruimte tussen de lijnen. 677 00:29:32,740 --> 00:29:33,281 >> MARIA: Recht. 678 00:29:33,281 --> 00:29:34,792 Koel. 679 00:29:34,792 --> 00:29:35,750 DAVID MALAN: Oké. 680 00:29:35,750 --> 00:29:39,830 Dus een snelle blik op een probleem te stellen, nemen alle vragen, en dan verdagen? 681 00:29:39,830 --> 00:29:40,330 Prima. 682 00:29:40,330 --> 00:29:43,164 Dus in het probleem te stellen één, er is drie voornaamste uitdagingen, uiteindelijk. 683 00:29:43,164 --> 00:29:44,955 Maar eerst, vind je het Probleemverzameling 684 00:29:44,955 --> 00:29:47,900 specificatie, zoals bij veel van de psets dit najaar, zal je lopen 685 00:29:47,900 --> 00:29:50,691 door een paar warming-up oefeningen, u wijzen op een weinig middelen 686 00:29:50,691 --> 00:29:52,440 dat je wel of nog niet hebben gezien. 687 00:29:52,440 --> 00:29:54,440 Bijvoorbeeld, CS50 heeft een suite van shorts, 688 00:29:54,440 --> 00:29:56,481 die korte video's zijn, niet anders dan dit, maar 689 00:29:56,481 --> 00:29:58,460 zijn zeer onderwerp specific-- misschien vijf minuten, 690 00:29:58,460 --> 00:30:02,360 10 minuten lang op lussen of op de voorwaarden of op algoritmen 691 00:30:02,360 --> 00:30:04,125 of later op meer geavanceerde onderwerpen, als goed. 692 00:30:04,125 --> 00:30:06,000 En we meestal insluiten die in het probleem 693 00:30:06,000 --> 00:30:07,950 sets zodat studenten een middel waarmee 694 00:30:07,950 --> 00:30:10,840 tot materiaal dat zou kunnen hebben herzien al komen in collegezaal of sectie. 695 00:30:10,840 --> 00:30:13,220 Maar op deze manier is het meer gericht en nog veel meer binnen handbereik. 696 00:30:13,220 --> 00:30:15,928 >> We hebben ook de neiging om te verankeren in probleemwijken zet dingen genoemd walkthroughs. 697 00:30:15,928 --> 00:30:20,790 Dus vrijwel alle voorbeelden ik in collegezaal, op het podium hier, wij ook 698 00:30:20,790 --> 00:30:24,565 hebben geschoten op de camera in vooraf een tragere, 699 00:30:24,565 --> 00:30:28,760 een meer intieme walkthrough door mij op mijn laptop van die code, regel voor regel 700 00:30:28,760 --> 00:30:31,427 zodat in de klas, we vaak doorlopen iets of iemand 701 00:30:31,427 --> 00:30:33,260 zal tussenbeide met een antwoord op een vraag. 702 00:30:33,260 --> 00:30:35,820 Maar het hoeft niet per se zinken voor iedereen in het publiek. 703 00:30:35,820 --> 00:30:38,230 Dus je zult code walkthroughs vinden voor de meeste voorbeelden 704 00:30:38,230 --> 00:30:40,950 dat we hier doen in collegezaal, zodat u kan er doorheen lopen in uw eigen tempo 705 00:30:40,950 --> 00:30:43,580 en terugspoelen of snel vooruit of overslaan helemaal, als je wilt. 706 00:30:43,580 --> 00:30:45,356 >> Er vaak een paar warm-up vragen die 707 00:30:45,356 --> 00:30:47,105 vraag je om te sorteren van Dit materiaal versterken 708 00:30:47,105 --> 00:30:50,250 en zorg ervoor dat je comfortabel bent voor u doorgaat met de rest van de PSET. 709 00:30:50,250 --> 00:30:51,700 En dan, natuurlijk, er is de PSET zelf. 710 00:30:51,700 --> 00:30:53,450 En één van de dingen we heel bewust 711 00:30:53,450 --> 00:30:57,202 doen in CS50 is bijna elke oninteressant of intellectueel oninteressant 712 00:30:57,202 --> 00:30:58,910 mechanische stap die je zou kunnen hebben om te doen 713 00:30:58,910 --> 00:31:00,519 is bijna altijd zeer goed gedocumenteerd. 714 00:31:00,519 --> 00:31:03,560 In de loop van de termijn, zullen we beginnen om meer retorische vragen te stellen 715 00:31:03,560 --> 00:31:06,187 zoals herinneren hoe om dit of dat te doen? 716 00:31:06,187 --> 00:31:08,520 Maar over het algemeen, vindt u dat het probleem sets krijg je 717 00:31:08,520 --> 00:31:10,269 door de monteurs iets zodat 718 00:31:10,269 --> 00:31:14,160 de interessante, intellectuele uitdagingen uiteindelijk overgelaten aan de student. 719 00:31:14,160 --> 00:31:17,390 >> Met dat gezegd, Zamyla, aan wie wij gehouden verwijzend vandaag in collegezaal, 720 00:31:17,390 --> 00:31:20,190 is een van onze oude medewerkers lid die ook houdt walkthroughs 721 00:31:20,190 --> 00:31:24,520 over specifieke PSET problemen zoals mario en hebzuchtig, maar niet het water dit jaar. 722 00:31:24,520 --> 00:31:26,540 En het is in die walkthroughs dat ze vaak 723 00:31:26,540 --> 00:31:29,450 biedt een aantal tips en trucs voor hoe verder te gaan, je nooit vertellen 724 00:31:29,450 --> 00:31:31,810 precies wat te doen, maar rather-- als een voorwaarde, 725 00:31:31,810 --> 00:31:35,200 als je will-- geven u tenminste een paar ideeën, zodat het is aan jou, 726 00:31:35,200 --> 00:31:37,830 zelfs om hoe ze te benaderen. 727 00:31:37,830 --> 00:31:41,200 >> MARIA: als een soort high-level begrip van de logica van wat 728 00:31:41,200 --> 00:31:42,220 Wij vragen u om te doen. 729 00:31:42,220 --> 00:31:42,485 >> DAVID MALAN: Precies. 730 00:31:42,485 --> 00:31:44,190 En inderdaad, Zamyla's walkthroughs zijn bedoeld 731 00:31:44,190 --> 00:31:46,190 op de meest beantwoorden gestelde vraag waar 732 00:31:46,190 --> 00:31:48,610 heb ik begon, in het bijzonder wanneer deze lange specificaties 733 00:31:48,610 --> 00:31:51,960 een beetje ontmoedigend gezien alle tekst en beelden die ze in zich hebben. 734 00:31:51,960 --> 00:31:54,890 >> Dus water.c, vindt u nadat je het hebt voltooid, 735 00:31:54,890 --> 00:31:56,920 in feite betrekkelijk eenvoudig. 736 00:31:56,920 --> 00:31:58,882 Absoluut zijn een stelletje van ga je bang 737 00:31:58,882 --> 00:32:01,840 je hoofd tegen de muur proberen om erachter te komen waarom het niet compileren 738 00:32:01,840 --> 00:32:03,450 of waarom het is niet correct uitgevoerd. 739 00:32:03,450 --> 00:32:05,040 Maar als je eenmaal klaar bent met het en als je eenmaal hebt 740 00:32:05,040 --> 00:32:07,620 verbleef enige tijd worstelen met enige van de bugs die u zou kunnen hebben, 741 00:32:07,620 --> 00:32:09,490 je zult zien dat het een kort programma. 742 00:32:09,490 --> 00:32:11,770 Het kan in enkele regels code, waarvan de meeste 743 00:32:11,770 --> 00:32:15,030 we hebben gezien hier in lezing al, als je monteren van de juiste bouwstenen. 744 00:32:15,030 --> 00:32:16,810 >> En als we suggereren hier, het gaat om te vragen 745 00:32:16,810 --> 00:32:22,250 u aangeven hoeveel minuten iemand die een douche op de campus. 746 00:32:22,250 --> 00:32:24,779 We geven in het probleem Stel de snelheid van de waterstroom 747 00:32:24,779 --> 00:32:27,320 in, zoals een low-flow douche hoofd, net als de Seinfeld clip 748 00:32:27,320 --> 00:32:29,180 we gisteren zagen of het tegengestelde daarvan. 749 00:32:29,180 --> 00:32:30,971 En dan hoef je alleen te doen een beetje van de wiskunde, 750 00:32:30,971 --> 00:32:34,710 really-- rekenen met behulp van C te vertellen ons hoe veel, ongeveer, flessen water 751 00:32:34,710 --> 00:32:37,720 is dat gelijk aan als we het nemen van een n-minuten douche. 752 00:32:37,720 --> 00:32:41,389 >> Nu, in mario.c, dit gaat een iets langere programma. 753 00:32:41,389 --> 00:32:42,930 Het is nog steeds niet van plan om zo lang te zijn. 754 00:32:42,930 --> 00:32:45,130 Slechts een paar regels langer dan water.c. 755 00:32:45,130 --> 00:32:48,230 Maar het gaat om de gelegenheid te zijn aan de oude school Mario recreëren 756 00:32:48,230 --> 00:32:50,670 piramide van Super Mario Broers of een follow-on. 757 00:32:50,670 --> 00:32:53,510 Het gaat niet om naar te kijken als mooier of zo kleurrijk als die daar. 758 00:32:53,510 --> 00:32:56,468 We gaan gewoon te weinig hashtags gebruiken zoals wij hebben hier op het scherm 759 00:32:56,468 --> 00:32:58,120 met behulp van ASCII-tekst. 760 00:32:58,120 --> 00:33:00,362 Maar het zal hetzelfde idee te benaderen. 761 00:33:00,362 --> 00:33:02,570 En het gaat om een ​​te zijn uitoefenen, dat op het eerste gezicht 762 00:33:02,570 --> 00:33:04,720 lijkt vrij simple-- net afdrukken van een eenvoudige piramide. 763 00:33:04,720 --> 00:33:07,345 Maar er zijn een paar kenmerken Hier die interessant zijn. 764 00:33:07,345 --> 00:33:12,400 Merk op dat de meest rechtse rand van de piramide heeft eigenlijk breedte twee. 765 00:33:12,400 --> 00:33:14,570 Dus er is twee gelijke hoogte kolommen, die 766 00:33:14,570 --> 00:33:16,804 maakt het een beetje nodig beetje van het denken te maken 767 00:33:16,804 --> 00:33:19,720 ervoor dat je dat precies goed, als in tegenstelling tot slechts een perfect haakse 768 00:33:19,720 --> 00:33:20,220 lijn. 769 00:33:20,220 --> 00:33:23,340 Dus dat is een beetje een hoek geval maar overeenkomt met het eigenlijke spel. 770 00:33:23,340 --> 00:33:27,610 >> En het is ook niet duidelijk op het eerste oogopslag hoe de witte ruimte te drukken. 771 00:33:27,610 --> 00:33:29,430 Dus als ik kijk naar de voorbeelduitvoer hier-- 772 00:33:29,430 --> 00:33:32,440 en het is ook in de spec-- is soort ziet eruit als een rechthoek, 773 00:33:32,440 --> 00:33:35,120 maar een diagonaal van het rechthoek is afgehakt, 774 00:33:35,120 --> 00:33:37,320 en het is gewoon witte ruimtes, om zo te zeggen. 775 00:33:37,320 --> 00:33:40,100 En zo een veelgestelde vraag is hier altijd goed, 776 00:33:40,100 --> 00:33:43,302 hoe kan ik de hashtags verplaatsen naar rechts? 777 00:33:43,302 --> 00:33:44,760 Of hoe kan ik de lege ruimtes te drukken? 778 00:33:44,760 --> 00:33:46,860 En het is eigenlijk makkelijker dan de meeste studenten denken. 779 00:33:46,860 --> 00:33:47,360 Rechts? 780 00:33:47,360 --> 00:33:51,620 U kunt het visueel benaderen door gewoon of twee keer raken van de spatiebalk 781 00:33:51,620 --> 00:33:52,700 of drie keer. 782 00:33:52,700 --> 00:33:56,260 >> En dus zelfs al met printf we bijna altijd uitprinten een string of een int 783 00:33:56,260 --> 00:33:59,950 of een woord als "hallo, wereld "of reeks van woorden, 784 00:33:59,950 --> 00:34:03,560 u kunt ook gewoon uitprinten citaat, ruimte, einde citaat. 785 00:34:03,560 --> 00:34:06,320 En dat ook daadwerkelijk te geven u een witte ruimte daar. 786 00:34:06,320 --> 00:34:08,330 Dus hou dat in het achterhoofd en dit niet over nadenken. 787 00:34:08,330 --> 00:34:10,570 Je moet echt besluiten per rij voor rij, 788 00:34:10,570 --> 00:34:14,280 niet in tegenstelling tot uw voorbeeld een ogenblik geleden, hoeveel van die 789 00:34:14,280 --> 00:34:18,420 kolommen witte ruimtes en hoeveel van hen zou moeten zijn hashtags. 790 00:34:18,420 --> 00:34:21,560 Het zal een beetje tijd in beslag nemen, maar het is uiteindelijk een logische puzzel van soorten. 791 00:34:21,560 --> 00:34:22,060 >> MARIA: Ja. 792 00:34:22,060 --> 00:34:25,060 Maar de logica van het gaan rij voor rij zal hier zeer nuttig zijn. 793 00:34:25,060 --> 00:34:25,810 DAVID MALAN: Ja. 794 00:34:25,810 --> 00:34:28,976 Ik denk dat de voorbeeldcode je zelfs gave-- hoewel het niet een volledig programma. 795 00:34:28,976 --> 00:34:34,247 Je moet nog int en de belangrijkste en nietig en # include stdio.h, 796 00:34:34,247 --> 00:34:35,580 veel van de spullen van lezing. 797 00:34:35,580 --> 00:34:37,629 Maar de bouwstenen lijkt om daar te zijn. 798 00:34:37,629 --> 00:34:39,920 En dan tot slot is iets een beetje meer algoritmische. 799 00:34:39,920 --> 00:34:43,210 Dus het blijkt dat elke keer dat u gaan in CVS of supermarkt 800 00:34:43,210 --> 00:34:47,810 en iemand die je handen bij de caissière biljetten of munten als verandering, 801 00:34:47,810 --> 00:34:50,620 het blijkt dat ze, mensen, ongeacht of ze het weten of niet, 802 00:34:50,620 --> 00:34:53,300 waarschijnlijk met behulp van wat is riep een hebzuchtige algoritme, 803 00:34:53,300 --> 00:34:58,170 waarbij als u verschuldigd bent, zeg, $ 21 in verandering, omdat een of andere reden 804 00:34:58,170 --> 00:35:01,580 je iets heel goedkoop gekocht met een zeer grote bill bij CVS, 805 00:35:01,580 --> 00:35:05,910 zou het echt vervelend als het zijn caissière gaf je 21 singles of, nog erger 806 00:35:05,910 --> 00:35:07,629 nog, een heleboel munten. 807 00:35:07,629 --> 00:35:10,670 Integendeel, wat een redelijk persoon is waarschijnlijk gaat doen, is ze gaan 808 00:35:10,670 --> 00:35:14,224 een $ 20 en vervolgens een $ 1-bill, en grijp geef je gewoon twee wetsvoorstellen in dat geval. 809 00:35:14,224 --> 00:35:17,390 MARIA: Dus ze op zoek te minimaliseren de verandering die ze terug te geven aan u. 810 00:35:17,390 --> 00:35:17,850 DAVID MALAN: Precies. 811 00:35:17,850 --> 00:35:19,540 En dezelfde deal met munten, als goed. 812 00:35:19,540 --> 00:35:23,040 Als u verschuldigd bent, zeg, $ 0,50, hopelijk u niet wilt dat 50 pence. 813 00:35:23,040 --> 00:35:25,500 U wilt in plaats van twee kwartalen, bijvoorbeeld. 814 00:35:25,500 --> 00:35:27,540 Nu, dit doet veronderstellen dat de caissière heeft 815 00:35:27,540 --> 00:35:29,940 genoeg van elke denominatie die hij of zij zou willen om u te geven. 816 00:35:29,940 --> 00:35:32,148 Maar wij u toestaan ​​om te veronderstellen zowel in het probleem. 817 00:35:32,148 --> 00:35:35,590 En het doel is uiteindelijk aan implementeren in C-code een hebzuchtige algoritme. 818 00:35:35,590 --> 00:35:37,344 Zodat de gebruiker mag te typen in hoeveel 819 00:35:37,344 --> 00:35:40,510 hij veranderen of zij verschuldigd is met dollars en centen, een soort van floating point 820 00:35:40,510 --> 00:35:41,590 waarde waarschijnlijk. 821 00:35:41,590 --> 00:35:45,530 En dan moet je de wiskunde te doen en achterhalen algoritmisch, nou ja, 822 00:35:45,530 --> 00:35:49,020 hoeveel munten kan ik geven u minimaal aan u geven 823 00:35:49,020 --> 00:35:50,270 precies dat bedrag van de verandering. 824 00:35:50,270 --> 00:35:53,470 Maar er zal een te zijn enkele lastige onderdelen hier, toch? 825 00:35:53,470 --> 00:35:56,236 Alsof er de hele onnauwkeurigheid kwestie. 826 00:35:56,236 --> 00:35:56,860 MARIA: Precies. 827 00:35:56,860 --> 00:35:59,114 Dus floating point waarden onnauwkeurigheid. 828 00:35:59,114 --> 00:36:00,780 Hebben we over praten in de lezing van vandaag? 829 00:36:00,780 --> 00:36:02,340 >> DAVID MALAN: We hebben de de laatste keer in collegezaal. 830 00:36:02,340 --> 00:36:03,506 We spraken over onnauwkeurigheid. 831 00:36:03,506 --> 00:36:08,840 En u niet wilt dat de gebruiker te bedriegen hoeveel verandering die hij of zij verschuldigd is. 832 00:36:08,840 --> 00:36:11,290 En dus is de walkthrough, in het Probleemverzameling specificatie 833 00:36:11,290 --> 00:36:15,990 nadenken, uiteindelijk, als bedoeld hoe je kunt verminderen die onnauwkeurigheid 834 00:36:15,990 --> 00:36:17,280 fouten, potentieel. 835 00:36:17,280 --> 00:36:21,050 Het vermeden, zeker voor de ingangen we praten over. 836 00:36:21,050 --> 00:36:23,590 En inderdaad, pennies-- Misschien zullen we uit te stellen tot Zamyla, 837 00:36:23,590 --> 00:36:25,136 Ik denk dat, voor de trucs daar. 838 00:36:25,136 --> 00:36:27,760 Dus uiteindelijk heb je een vondst progressie van de problemen van deze week, 839 00:36:27,760 --> 00:36:30,700 waarvan de eerste is vrij klein, dan medium, dan een beetje groter. 840 00:36:30,700 --> 00:36:33,200 Maar ze gebruiken het gebouw blokken van de afgelopen week, 841 00:36:33,200 --> 00:36:35,280 van deze supersection, probleem set specificatie 842 00:36:35,280 --> 00:36:36,710 plaatst je in talloze bronnen. 843 00:36:36,710 --> 00:36:41,000 Maar toch, als het al moeilijk hebben, vooral onder degenen minder comfortabel 844 00:36:41,000 --> 00:36:42,917 zonder voorafgaande achtergrond, kom naar de kantooruren 845 00:36:42,917 --> 00:36:44,958 op maandag en dinsdag en Woensdag en donderdag. 846 00:36:44,958 --> 00:36:46,950 Ga naar CS50 Bespreek via de website van de cursus, 847 00:36:46,950 --> 00:36:49,080 via welke u kunt chatten met het personeel en klasgenoten. 848 00:36:49,080 --> 00:36:51,670 >> Maar uiteindelijk denk ik dat de beste advies is gewoon beginnen vroeg. 849 00:36:51,670 --> 00:36:54,711 Het is niet het soort van de klasse die u moet beginnen psets op woensdag 850 00:36:54,711 --> 00:36:56,640 's nachts, of erger donderdagavond. 851 00:36:56,640 --> 00:36:59,067 >> MARIA: Mijn beste advies is te zijn begonnen op maandag. 852 00:36:59,067 --> 00:36:59,900 DAVID MALAN: maandag. 853 00:36:59,900 --> 00:37:02,490 Dus als je nog niet begonnen already-- nee. 854 00:37:02,490 --> 00:37:04,732 Maar zelfs als ze niet maandag, dan dinsdag. 855 00:37:04,732 --> 00:37:05,690 Hoe eerder hoe beter. 856 00:37:05,690 --> 00:37:08,605 En dat is de reden dat de Natuurlijk heeft zoveel late dagen 857 00:37:08,605 --> 00:37:10,535 om u een beetje een psychologische druk 858 00:37:10,535 --> 00:37:13,684 eerder beginnen, maar nog steeds laat dingen slip wanneer de dingen langer duren 859 00:37:13,684 --> 00:37:14,350 dan je zou verwachten. 860 00:37:14,350 --> 00:37:17,950 >> MARIA: En u wilt gebruik maken van kantooruren zoveel als je kunt, ook. 861 00:37:17,950 --> 00:37:20,291 >> DAVID MALAN: Heeft u nog vragen? 862 00:37:20,291 --> 00:37:20,790 Prima. 863 00:37:20,790 --> 00:37:22,930 Nou, waarom niet we hier verdagen? 864 00:37:22,930 --> 00:37:23,487