1 00:00:00,000 --> 00:00:03,353 >> [Musik spiller] 2 00:00:03,353 --> 00:00:04,842 3 00:00:04,842 --> 00:00:06,050 DAVID MALAN: Hej, alle. 4 00:00:06,050 --> 00:00:07,777 Dette er CS50 s supersection. 5 00:00:07,777 --> 00:00:09,860 Tildelte Sektioner vil ikke starte for en anden uge. 6 00:00:09,860 --> 00:00:11,580 Og så i dag, jeg er her med-- 7 00:00:11,580 --> 00:00:12,122 >> MARIA: Maria. 8 00:00:12,122 --> 00:00:14,163 DAVID MALAN: --to faktisk tage et kig på problemet 9 00:00:14,163 --> 00:00:16,110 sæt en, kursets første uger af materiale, 10 00:00:16,110 --> 00:00:19,780 få dig orienteret med CS50 IDE, lidt Linux, det operativsystem, der er 11 00:00:19,780 --> 00:00:22,290 kører på IDE, samt se på nogle af overgangen 12 00:00:22,290 --> 00:00:25,730 fra Scratch til C førende op til problem angive én. 13 00:00:25,730 --> 00:00:28,340 >> Så uden videre, i problemet angive én, 14 00:00:28,340 --> 00:00:30,520 du kommer til at være introduceret til CS50 IDE, som 15 00:00:30,520 --> 00:00:33,230 er denne web-baseret programmering miljø, som vi bruger med henblik på 16 00:00:33,230 --> 00:00:34,280 at skrive programmer. 17 00:00:34,280 --> 00:00:37,280 Det er blevet designet til at se meget minder om en typisk computer 18 00:00:37,280 --> 00:00:39,430 system, der kører et operativsystem system kaldet Linux. 19 00:00:39,430 --> 00:00:42,440 Men det er i den såkaldte sky, hvilket betyder, at alle i klassen 20 00:00:42,440 --> 00:00:45,100 kan faktisk have hans eller hendes egen regning og bruge det, så godt. 21 00:00:45,100 --> 00:00:48,950 >> Så de fleste af jer nok har aldrig brugt et Linux-miljø før eller måske 22 00:00:48,950 --> 00:00:50,447 selv en kommandolinje miljø. 23 00:00:50,447 --> 00:00:52,280 Og en kommandolinje miljø er anderledes. 24 00:00:52,280 --> 00:00:53,200 Det er alt tekstmæssige. 25 00:00:53,200 --> 00:00:54,730 Det er alle tastatur kommandoer. 26 00:00:54,730 --> 00:00:59,480 Og det er ingen Mousing, ingen ikoner, ingen dialog vinduer, ingen menuer. 27 00:00:59,480 --> 00:01:00,212 Det er rent tekst. 28 00:01:00,212 --> 00:01:01,920 Så i første omgang, den slags af føles som et skridt 29 00:01:01,920 --> 00:01:04,434 tilbageskridt i forhold til raffinement. 30 00:01:04,434 --> 00:01:06,600 Men det ender med at blive en masse mere kraftfuld, helt sikkert, 31 00:01:06,600 --> 00:01:08,510 for en datalog, i sidste ende. 32 00:01:08,510 --> 00:01:09,540 >> Så lad os tage et kig. 33 00:01:09,540 --> 00:01:13,850 Her er jeg på CS50.io, via hvilke du kan logge ind CS50 IDE. 34 00:01:13,850 --> 00:01:17,414 Og meget gerne i Scratch, er der tre primære områder til denne skærm. 35 00:01:17,414 --> 00:01:20,080 Så på den venstre side, har vi hvad der vil være den fil browser. 36 00:01:20,080 --> 00:01:22,413 Og der er denne mappe på top, som er lige nu tomme 37 00:01:22,413 --> 00:01:24,690 siden jeg sluppet af alle mine filer før supersection. 38 00:01:24,690 --> 00:01:27,599 Og det er her, vi får redde C filer, som vi skriver. 39 00:01:27,599 --> 00:01:30,890 Øverst til højre, har vi et sted, hvor alle vores kode kommer til at få skrevet. 40 00:01:30,890 --> 00:01:34,610 Og ja, hvis jeg klikker på denne plus, dette kommer til at lade mig vælge Ny fil. 41 00:01:34,610 --> 00:01:38,310 Og her kan jeg begynde at skrive C-kode, eller, virkelig, en række andre sprog. 42 00:01:38,310 --> 00:01:42,670 >> Og derefter ved bunden, hvor det siger jharvard @ ide50-- og dit vil 43 00:01:42,670 --> 00:01:45,080 sige noget lidt different-- hvad var det hedder? 44 00:01:45,080 --> 00:01:48,644 45 00:01:48,644 --> 00:01:49,310 Terminalvindue. 46 00:01:49,310 --> 00:01:49,570 Ja. 47 00:01:49,570 --> 00:01:51,810 Så terminalvinduet er den såkaldte kommandolinje 48 00:01:51,810 --> 00:01:55,540 grænseflade via hvilken man kan interagere med det underliggende operativsystem. 49 00:01:55,540 --> 00:01:58,220 Og for nu, vi vil gør meget lidt brug af denne-- 50 00:01:58,220 --> 00:02:01,170 bare for at kompilere, at se på fejlmeddelelser, som vi ser, 51 00:02:01,170 --> 00:02:02,347 og til at køre vores programmer. 52 00:02:02,347 --> 00:02:04,680 Men i sidste ende, vil vi at gøre så meget mere, så godt. 53 00:02:04,680 --> 00:02:07,490 Og du kan endda installere software og administrere din arbejdsplads 54 00:02:07,490 --> 00:02:09,066 inden CS50 IDE, så godt. 55 00:02:09,066 --> 00:02:10,440 Men mere om det en anden gang. 56 00:02:10,440 --> 00:02:12,689 >> Så lad os gå videre og skrive et meget simpelt program, bare 57 00:02:12,689 --> 00:02:15,064 at gå gennem en varm-up af hello.c, som måske er 58 00:02:15,064 --> 00:02:16,480 den enkleste program, vi kan skrive. 59 00:02:16,480 --> 00:02:18,330 Jeg har allerede åbnet en ny fane. 60 00:02:18,330 --> 00:02:24,310 Jeg har tænkt mig at gå videre og siger omfatter standard io.h. 61 00:02:24,310 --> 00:02:25,325 Så int main (void). 62 00:02:25,325 --> 00:02:28,930 63 00:02:28,930 --> 00:02:35,200 Og så printf ("Hej, verden" backslash n, tæt tilbud, 64 00:02:35,200 --> 00:02:39,480 nære parenteser og semikolon. 65 00:02:39,480 --> 00:02:39,990 >> Okay. 66 00:02:39,990 --> 00:02:41,700 Så nu mærke til mit vindue er uden titel. 67 00:02:41,700 --> 00:02:44,840 Så jeg meget hurtigt gå at gå op til Fil, Gem. 68 00:02:44,840 --> 00:02:46,910 Og det er vigtigt, at Jeg kalder det ikke "Hej." 69 00:02:46,910 --> 00:02:49,243 Så en meget almindelig fejl, især i problem angive én, 70 00:02:49,243 --> 00:02:52,530 er at uheld bare ringe til din program "vand" eller "grådige" eller "Mario" 71 00:02:52,530 --> 00:02:53,890 eller "kredit" eller lignende. 72 00:02:53,890 --> 00:02:55,970 Men du rent faktisk ønsker at gøre at du har filtypen 73 00:02:55,970 --> 00:02:58,928 fordi det er den eneste måde, compiler og også kodeeditoren 74 00:02:58,928 --> 00:03:00,710 ved, at du er faktisk skriver C-kode. 75 00:03:00,710 --> 00:03:02,280 Så lad mig gå videre og klik på Gem. 76 00:03:02,280 --> 00:03:05,710 >> Og nu også, hvad CS50 IDE har gjort for os er det også 77 00:03:05,710 --> 00:03:07,120 syntaks fremhævet alt. 78 00:03:07,120 --> 00:03:08,822 Så det er gjort alt meget farverig. 79 00:03:08,822 --> 00:03:10,780 Og hele formålet med det er ikke funktionelt. 80 00:03:10,780 --> 00:03:14,290 Det er bare at trække mine øjne for begrebsmæssigt forskellige stykker 81 00:03:14,290 --> 00:03:15,310 af dette program. 82 00:03:15,310 --> 00:03:17,570 Så lad os gå videre og kompilere dette. 83 00:03:17,570 --> 00:03:19,490 Og jeg kan kompilere denne i et par måder. 84 00:03:19,490 --> 00:03:22,010 Og i uge en, old-school måde, vi gjorde 85 00:03:22,010 --> 00:03:26,250 det var bogstaveligt talt på kommando line-- "klang hello.c." 86 00:03:26,250 --> 00:03:27,596 Og så er jeg ramt Enter. 87 00:03:27,596 --> 00:03:29,720 Og intet synes at ske i terminalvinduet. 88 00:03:29,720 --> 00:03:32,654 Men hvad gjorde forandring i IDE? 89 00:03:32,654 --> 00:03:35,320 Hvis igen, IDE betyder blot, Integrated Development Environment. 90 00:03:35,320 --> 00:03:38,360 Det er en fancy måde at sige denne integrerede udvikling 91 00:03:38,360 --> 00:03:40,620 miljø for udvikling af software. 92 00:03:40,620 --> 00:03:42,477 Så hvad gjorde ændre sig i brugergrænsefladen? 93 00:03:42,477 --> 00:03:44,310 Hvad lagde du mærke der er anderledes, Maria? 94 00:03:44,310 --> 00:03:47,100 >> MARIA: Jeg har bemærket noget under IDE50 mappen heroppe. 95 00:03:47,100 --> 00:03:47,850 >> DAVID MALAN: Ja. 96 00:03:47,850 --> 00:03:50,230 Så heroppe, ikke kun har vi "hello.c." 97 00:03:50,230 --> 00:03:53,120 Vi har også "a.out", som er form for en dum navn til et program. 98 00:03:53,120 --> 00:03:56,430 Men ja, det er standard navn for en program, når du bare kompilere din kode 99 00:03:56,430 --> 00:03:59,110 og ikke fortælle compileren hvad fil til output. 100 00:03:59,110 --> 00:04:01,790 Så hvis jeg ønsker at køre dette, jeg nødt til at fortælle compiler-- 101 00:04:01,790 --> 00:04:05,340 eller rettere, jeg har brug for at fortælle arbejdsområdet, som jeg 102 00:04:05,340 --> 00:04:09,780 ønsker at køre programmet hedder "a.out." 103 00:04:09,780 --> 00:04:10,550 Enter. 104 00:04:10,550 --> 00:04:12,474 Og der er "Hej, verden. "nu" ./ ". 105 00:04:12,474 --> 00:04:13,390 er faktisk vigtigt. 106 00:04:13,390 --> 00:04:16,050 Selvom vi kun normalt skrive navnene på kommandoer, 107 00:04:16,050 --> 00:04:19,060 når det er et program, du har skrevet, vil du sige "./" 108 00:04:19,060 --> 00:04:22,460 fordi der eksplicit fortæller Linux at du ønsker at køre et program kaldet 109 00:04:22,460 --> 00:04:26,930 "a.out" det er i denne, hvor dot betyder denne mappe, som jeg er i øjeblikket 110 00:04:26,930 --> 00:04:31,600 i, hvilket sker for at være kaldet arbejdsområde, "a.out. 111 00:04:31,600 --> 00:04:35,410 For hvis jeg bare sagde "a.out," Enter, Jeg har tænkt mig at få "a.out kommandoen ikke 112 00:04:35,410 --> 00:04:38,035 fundet ", fordi computer-- fordi jeg opfandt "a.out;" 113 00:04:38,035 --> 00:04:40,910 det kom ikke med computer-- ikke ved, hvor man skal lede efter det, 114 00:04:40,910 --> 00:04:43,590 selvom det er rigtigt under min næse, så at sige. 115 00:04:43,590 --> 00:04:44,090 OKAY. 116 00:04:44,090 --> 00:04:49,910 Så vi kunne ændre dette til være "klang -o hej hello.c." 117 00:04:49,910 --> 00:04:53,030 Og hvis jeg ramte Enter, hvilket program vil dette output for mig? 118 00:04:53,030 --> 00:04:55,710 Hvad er navnet på den fil? 119 00:04:55,710 --> 00:04:57,500 Ja, i ryggen. 120 00:04:57,500 --> 00:04:58,479 Det er rigtigt. "Hej." 121 00:04:58,479 --> 00:05:00,520 Så "hej" vil være navnet på programmet 122 00:05:00,520 --> 00:05:04,610 fordi vi har brugt en såkaldt kommandolinje argument, som er lige 123 00:05:04,610 --> 00:05:08,120 en måde at ændre adfærd compileren til rent faktisk output 124 00:05:08,120 --> 00:05:09,450 en bestemt filnavn. 125 00:05:09,450 --> 00:05:12,400 Og ja, hvis jeg zoome ud og se op her, 126 00:05:12,400 --> 00:05:17,430 nu har jeg ikke kun "a.out", og "hello.c", men også "Hej", så godt. 127 00:05:17,430 --> 00:05:22,410 Så nu kan jeg gøre "./hello," Enter. 128 00:05:22,410 --> 00:05:23,640 Og der er "Hej, verden." 129 00:05:23,640 --> 00:05:25,640 Men lastly-- og dette vil nu blive konventionen 130 00:05:25,640 --> 00:05:27,590 vi bruger hele semester, typically-- 131 00:05:27,590 --> 00:05:30,070 er du kan også bare sige "make hej." 132 00:05:30,070 --> 00:05:33,370 Og ja, det siger det er op til dato, fordi det findes allerede. 133 00:05:33,370 --> 00:05:37,860 Lad mig gå videre og fjern, med rm-kommandoen, både "a.out" - 134 00:05:37,860 --> 00:05:39,644 og sige "fjerne almindelig fil a.out?" 135 00:05:39,644 --> 00:05:41,810 Det betyder blot, er du sikker på du vil slette den? 136 00:05:41,810 --> 00:05:42,880 Jeg har tænkt mig at sige ja. 137 00:05:42,880 --> 00:05:46,690 Og så jeg har tænkt mig at fjerne "hej", men ikke "hello.c." 138 00:05:46,690 --> 00:05:49,920 Jeg har tænkt mig at sige "ja" eksplicit, men "y" er tilstrækkelig, så godt. 139 00:05:49,920 --> 00:05:52,140 >> Og nu mærke til, hvis jeg skriv ls-- der, husker, 140 00:05:52,140 --> 00:05:55,540 betyder list-- det viser alle af filerne i min mappe. 141 00:05:55,540 --> 00:05:57,850 Og ja, hvis jeg zoome ud og se på øverst til venstre, 142 00:05:57,850 --> 00:05:59,730 Det bekræfter, at hvad der er i denne mappe, selv 143 00:05:59,730 --> 00:06:04,990 selvom det er mærket som IDE50 heroppe og ikke arbejdsområde, det er bare "hello.c." 144 00:06:04,990 --> 00:06:09,152 Så nu hernede, hvis jeg do "make goddag," Enter, 145 00:06:09,152 --> 00:06:12,360 nu kan jeg se en meget længere kommando, men en mere sofistikerede kommando, der foregår 146 00:06:12,360 --> 00:06:13,940 at være nyttige i de kommende uger. 147 00:06:13,940 --> 00:06:16,720 Og nu kan jeg sige "./hello." 148 00:06:16,720 --> 00:06:19,257 >> Så lad os tage en hurtig rundvisning nogle andre Linux-kommandoer. 149 00:06:19,257 --> 00:06:21,840 Så hvorfor vi ikke tage et skridt tilbage og faktisk se på C mere 150 00:06:21,840 --> 00:06:25,020 Generelt overgang fra Scratch til C, og derefter slutte af med et kig 151 00:06:25,020 --> 00:06:27,305 ved første problem angivet i C. All right. 152 00:06:27,305 --> 00:06:30,430 Så jeg har tænkt mig at gå videre og bare ren min arbejdsplads med ctrl-L bare 153 00:06:30,430 --> 00:06:31,429 at holde skærmen neat. 154 00:06:31,429 --> 00:06:33,520 Men der har intet funktionelt påvirke andet. 155 00:06:33,520 --> 00:06:35,820 >> Husk på, at vi har set et par kommandoer nu. 156 00:06:35,820 --> 00:06:39,900 Så vi har set klang, som generelt du ikke behøver at udføre manuelt længere. 157 00:06:39,900 --> 00:06:41,650 Vi vil i stedet bruge make. 158 00:06:41,650 --> 00:06:45,290 Men vi så også ls, som viser en notering af filerne i min mappe. 159 00:06:45,290 --> 00:06:48,750 Og nu, hvorfor er there-- der har to filer nu, "goddag" og "hello.c." 160 00:06:48,750 --> 00:06:52,240 Hvorfor er der en stjerne eller en stjerne efter "hej"? 161 00:06:52,240 --> 00:06:54,900 Hvad gjorde at betyde, baseret på hvad vi så i uge en? 162 00:06:54,900 --> 00:06:58,852 163 00:06:58,852 --> 00:07:00,400 Hvad synes du? 164 00:07:00,400 --> 00:07:02,742 Hvad betyder stjernen betyde? 165 00:07:02,742 --> 00:07:04,614 >> MARIA: for-- programmet "hej"? 166 00:07:04,614 --> 00:07:05,530 DAVID MALAN: "Hej *". 167 00:07:05,530 --> 00:07:06,330 Ja. 168 00:07:06,330 --> 00:07:07,760 Oh, yeah? 169 00:07:07,760 --> 00:07:08,639 Åh, eksekverbar. 170 00:07:08,639 --> 00:07:09,180 Det er rigtigt. 171 00:07:09,180 --> 00:07:10,890 Så det betyder, at "hello" er eksekverbar. 172 00:07:10,890 --> 00:07:13,430 Så ja, det er derfor, Jeg kan gøre "./hello." 173 00:07:13,430 --> 00:07:13,930 Okay. 174 00:07:13,930 --> 00:07:15,179 Så hvad kan jeg gøre her? 175 00:07:15,179 --> 00:07:17,290 Tja, det viser sig, jeg kan også oprette mapper. 176 00:07:17,290 --> 00:07:20,924 Så lad mig gå videre og skabe, for eksempel en "pset1" bibliotek. 177 00:07:20,924 --> 00:07:23,590 Og problemet sæt specifikationer vil have du gør netop dette, 178 00:07:23,590 --> 00:07:25,260 så du ikke behøver at huske i dag. 179 00:07:25,260 --> 00:07:27,340 Men "mkdir pset1" synes at have nogen effekt. 180 00:07:27,340 --> 00:07:30,540 Men igen, ingen fejlmeddelelse er generelt en god ting. 181 00:07:30,540 --> 00:07:34,060 Så hvis jeg skriver "ls" nu-- ah, nu Jeg har en eksekverbar fil kaldet 182 00:07:34,060 --> 00:07:36,570 "Hej", en C-fil kaldet "hello.c." 183 00:07:36,570 --> 00:07:40,860 Og så efterfølgende skråstreg, så at tale, betyder, at dette er et bibliotek. 184 00:07:40,860 --> 00:07:42,510 >> Så ja, nu vil jeg åbne den. 185 00:07:42,510 --> 00:07:45,730 Og jeg tror ikke dobbeltklikke på det ligesom i en GUI, en grafisk miljø. 186 00:07:45,730 --> 00:07:48,550 Jeg stedet sige "cd pset1." 187 00:07:48,550 --> 00:07:49,640 Enter. 188 00:07:49,640 --> 00:07:53,100 Intet interessant synes at have skete undtagen min lille prompt 189 00:07:53,100 --> 00:07:57,300 her-- det er Linux 'måde at minde mig, hvor jeg er, så hvad mappen er åben. 190 00:07:57,300 --> 00:08:00,080 Det er bare fortæller mig udtrykkeligt i modsætning til grafisk. 191 00:08:00,080 --> 00:08:05,100 Og hvis jeg skriver "ls," hvorfor kan jeg se en anden Spørg straks, tror du, 192 00:08:05,100 --> 00:08:07,269 når jeg vise indholdet af pset1? 193 00:08:07,269 --> 00:08:09,310 MARIA: Du behøver sandsynligvis ikke har noget derinde. 194 00:08:09,310 --> 00:08:09,630 DAVID MALAN: Ja. 195 00:08:09,630 --> 00:08:11,510 Så har vi selvfølgelig skabt noget der 196 00:08:11,510 --> 00:08:13,150 fordi jeg lige oprettet mappen. 197 00:08:13,150 --> 00:08:17,690 Nu, hvis jeg ønskede at skabe et file-- for Eksempelvis kunne jeg oprette en ny fil. 198 00:08:17,690 --> 00:08:20,190 Og så kunne jeg gå til Gem og gemme det som, 199 00:08:20,190 --> 00:08:23,090 som, "mario.c", hvis du laver standard udgave af pset én. 200 00:08:23,090 --> 00:08:27,610 Og så, som enhver Mac eller pc, bare vælge mappen "pset1, Gem. 201 00:08:27,610 --> 00:08:28,740 Og nu filen er tom. 202 00:08:28,740 --> 00:08:31,160 Men lad os zoome ind igen for en anden. 203 00:08:31,160 --> 00:08:32,470 Lad os gøre ls her. 204 00:08:32,470 --> 00:08:34,470 Nu ser vi "mario.c". 205 00:08:34,470 --> 00:08:37,850 >> Så der er et par andre kommandoer, er værd at holde sig for øje i løbet time-- 206 00:08:37,850 --> 00:08:41,200 klar, eller holde Ctrl-L er, hvad jeg har været at ramme; mkdir vi har set; 207 00:08:41,200 --> 00:08:45,240 rm vi har set, så godt, hvilket er til at fjerne eller slette en fil. 208 00:08:45,240 --> 00:08:49,310 Pas på, du kan also-- og hvis du ser ved online tutorials, vil du rm -rf 209 00:08:49,310 --> 00:08:52,630 er en meget almindelig måde at sige slette en mappe, der har ting i det. 210 00:08:52,630 --> 00:08:54,280 Bare være super, super forsigtig. 211 00:08:54,280 --> 00:08:58,780 -rf betyder rekursivt slette, hvad det er 212 00:08:58,780 --> 00:09:01,150 du forsøger at slette og med magt slette den. 213 00:09:01,150 --> 00:09:04,630 Så rekursive midler, hvis det er en mappe med en mappe med en mappe med en mappe, 214 00:09:04,630 --> 00:09:05,690 slette dem alle. 215 00:09:05,690 --> 00:09:08,680 Og med magt betyder ikke engang spørger mig ja eller nej, er jeg sikker på? 216 00:09:08,680 --> 00:09:11,960 Så det er en super farlig måde sletning masser af ting hurtigt. 217 00:09:11,960 --> 00:09:17,210 Men beware-- alt for ofte gør en frygtløs studerende uheld sletter, siger, pset 218 00:09:17,210 --> 00:09:18,000 én, f.eks. 219 00:09:18,000 --> 00:09:19,833 >> MARIA: Og hvis de bare gør -r, kommer de 220 00:09:19,833 --> 00:09:21,870 at spørge dem om hver enkelt fil. 221 00:09:21,870 --> 00:09:22,790 >> DAVID MALAN: Hvilket er moderat irriterende. 222 00:09:22,790 --> 00:09:23,480 >> MARIA: Ja. 223 00:09:23,480 --> 00:09:25,813 >> DAVID MALAN: Så det er derfor så mange af os, selv inkluderet, 224 00:09:25,813 --> 00:09:27,070 er i vane med at bruge -rf. 225 00:09:27,070 --> 00:09:27,861 Men det er farligt. 226 00:09:27,861 --> 00:09:29,010 Så køber, pas på. 227 00:09:29,010 --> 00:09:31,050 Og så MV er slags interessant navn. 228 00:09:31,050 --> 00:09:33,600 Så dette er farten kommandoen, som føles lidt underligt 229 00:09:33,600 --> 00:09:37,260 fordi du rent faktisk kan bruge det til flytte filer fra et sted til et andet. 230 00:09:37,260 --> 00:09:39,970 For eksempel antage, at jeg rodet op. 231 00:09:39,970 --> 00:09:43,660 Antag, at jeg har oprettet en ny fil for pset. 232 00:09:43,660 --> 00:09:46,320 Og jeg gemte det som "greedy.c." 233 00:09:46,320 --> 00:09:49,970 Men formoder jeg ved et uheld gemme det i IDE50-- så i min arbejdsplads selv 234 00:09:49,970 --> 00:09:51,580 og ikke i pset1. 235 00:09:51,580 --> 00:09:53,960 >> Du kan se så meget øverst til venstre. 236 00:09:53,960 --> 00:09:55,284 Der er "greedy.c." 237 00:09:55,284 --> 00:09:56,450 Og der er et par løsninger. 238 00:09:56,450 --> 00:09:58,324 Så man kan jeg bruge super brugervenlig måde 239 00:09:58,324 --> 00:09:59,740 for bare at trække og slippe den. 240 00:09:59,740 --> 00:10:01,910 Og det ville faktisk løse dette problem. 241 00:10:01,910 --> 00:10:04,967 Men i dag, vi forsøger at se på de mere mystiske men kraftfulde måder 242 00:10:04,967 --> 00:10:05,550 at gøre dette. 243 00:10:05,550 --> 00:10:07,880 Så lad mig tage "ls" i pset1. 244 00:10:07,880 --> 00:10:09,690 Og jeg kun se "mario.c." 245 00:10:09,690 --> 00:10:13,450 Lad mig gå videre og gøre "cd ..". 246 00:10:13,450 --> 00:10:15,320 Så CD igen er forandring mappe. 247 00:10:15,320 --> 00:10:18,130 ".." Betyder Men hvad? 248 00:10:18,130 --> 00:10:21,100 Sidste gang jeg sagde "CD pset1 "at gå ind pset1. 249 00:10:21,100 --> 00:10:24,360 Så når jeg siger "cd ..", hvad gør jeg? 250 00:10:24,360 --> 00:10:24,910 Tilbage. 251 00:10:24,910 --> 00:10:25,150 Ja. 252 00:10:25,150 --> 00:10:26,750 >> Så det kommer til at den såkaldte forælder. 253 00:10:26,750 --> 00:10:29,730 Gå et niveau op, ligesom spændende ud af en mappe. 254 00:10:29,730 --> 00:10:30,500 Så Enter. 255 00:10:30,500 --> 00:10:31,900 Og ja, se hvad det gjorde. 256 00:10:31,900 --> 00:10:37,070 Det flyttede mig lige ind i arbejdsområde i stedet af i pset1, som er i arbejdsområde. 257 00:10:37,070 --> 00:10:39,710 Og nu, hvis jeg skriver "ls" der er en hel masse ting. 258 00:10:39,710 --> 00:10:41,650 I der er "greedy.c". 259 00:10:41,650 --> 00:10:48,720 Så lad mig bruge mv til bogstaveligt talt flytte "greedy.c" ind pset1. 260 00:10:48,720 --> 00:10:51,120 Og så en masse Linux kommandoer fungerer præcis som denne. 261 00:10:51,120 --> 00:10:54,470 De tager ingen argumenter, eller de tager en argument eller de tager to kommandolinje 262 00:10:54,470 --> 00:10:55,449 argumenter og så videre. 263 00:10:55,449 --> 00:10:57,240 Og i dette tilfælde, er det bogstaveligt gør hvad 264 00:10:57,240 --> 00:11:01,670 det siger, omend succinctly-- flytte greedy.c ind pset1. 265 00:11:01,670 --> 00:11:02,310 Enter. 266 00:11:02,310 --> 00:11:03,310 Intet synes at ske. 267 00:11:03,310 --> 00:11:06,180 Men hvis jeg bruger en ls igen, grådige er væk. 268 00:11:06,180 --> 00:11:12,437 Og hvis jeg gør "cd pset1", Enter, og derefter ls igen, nu er det på det rigtige sted. 269 00:11:12,437 --> 00:11:14,270 Som en sidebemærkning, hvis der for nogle reason-- især 270 00:11:14,270 --> 00:11:16,194 hvis du har intermitterende netværksforbindelse 271 00:11:16,194 --> 00:11:18,360 eller du går rundt campus med din bærbare computer låg 272 00:11:18,360 --> 00:11:20,180 lukket og derefter åbne det op igen og din arbejdsplads 273 00:11:20,180 --> 00:11:21,730 forekommer noget ude af sync, nogen big deal. 274 00:11:21,730 --> 00:11:23,646 Bare genindlæse din browser vinduet, og det skal 275 00:11:23,646 --> 00:11:26,339 resync så den venstre filbrowser ser ud præcis 276 00:11:26,339 --> 00:11:27,380 ligesom terminalvindue. 277 00:11:27,380 --> 00:11:27,921 Ikke at bekymre dig. 278 00:11:27,921 --> 00:11:31,460 Når du er i tvivl, genindlæse siden, så længe du har gemt filerne allerede. 279 00:11:31,460 --> 00:11:31,960 OKAY. 280 00:11:31,960 --> 00:11:34,710 Så mv kan også bruges til at omdøbe filer. 281 00:11:34,710 --> 00:11:36,760 Og lad os tage et kig på denne sidste kommando her. 282 00:11:36,760 --> 00:11:39,950 Så suppose-- og det er super almindeligt, også tidligt. 283 00:11:39,950 --> 00:11:46,400 Nogle elever lejlighedsvis oprette en fil kaldes, lad os say--, hvad der er en anden? 284 00:11:46,400 --> 00:11:47,730 Ligesom "WATER.C." 285 00:11:47,730 --> 00:11:51,080 Så jeg vil bare råbe, for ingen grund til, i alle hætter. 286 00:11:51,080 --> 00:11:53,190 Men dette er ikke korrekte navn for filen 287 00:11:53,190 --> 00:11:56,660 hvis blot fordi vores problem sæt specifikation ikke fortælle dig 288 00:11:56,660 --> 00:11:59,430 at gemme filen som alle hætter "WATER.C." 289 00:11:59,430 --> 00:12:01,320 I stedet forventer vi "water.c" med små bogstaver. 290 00:12:01,320 --> 00:12:03,140 Og i virkeligheden er dette problematisk, fordi check50, 291 00:12:03,140 --> 00:12:04,370 et program, du vil at mødes i problemer 292 00:12:04,370 --> 00:12:07,350 indstille en, der automatisk tester rigtigheden af ​​din kode 293 00:12:07,350 --> 00:12:11,615 kommer til at råbe på dig, hvis det ikke kan find "water.c" i små bogstaver. 294 00:12:11,615 --> 00:12:12,712 >> Så jeg har brug for at løse dette. 295 00:12:12,712 --> 00:12:14,920 Så mange forskellige måder at gøre dette, hvoraf den første 296 00:12:14,920 --> 00:12:18,330 ville være at Ctrl-klik eller højreklik filnavnet og bare ændre Omdøb. 297 00:12:18,330 --> 00:12:19,740 Helt fint at gøre det. 298 00:12:19,740 --> 00:12:21,820 Men igen, i dag, lad os gør det lidt mere avanceret. 299 00:12:21,820 --> 00:12:26,680 Lad os bruge mv til at ændre "WATER.C" til "water.c." 300 00:12:26,680 --> 00:12:30,690 Så kan du også bruge det første argument at omdøbe den til det andet argument 301 00:12:30,690 --> 00:12:34,455 hvis det andet argument er ikke i Faktisk en mappe eller en mappe navn. 302 00:12:34,455 --> 00:12:35,120 >> Okay. 303 00:12:35,120 --> 00:12:39,560 Og endelig, lidt trick-- så jeg er i mit arbejdsområde mappe i øjeblikket. 304 00:12:39,560 --> 00:12:43,660 Hvis jeg ønsker at komme ind pset én, Jeg kan helt sikkert skrive "cd pset1." 305 00:12:43,660 --> 00:12:47,260 Men det er så besværligt at skrive "pset1" eller længere filnavne eller mappenavne 306 00:12:47,260 --> 00:12:47,980 stadig. 307 00:12:47,980 --> 00:12:51,960 Så meget ofte i Linux, hvad du kan gøre, er at begynde at skrive "PSE" 308 00:12:51,960 --> 00:12:56,100 og bare keder sig, ramte Tab, og lad computerens tallet det ud for dig. 309 00:12:56,100 --> 00:12:58,190 Super nyttigt at komme ind i denne vane. 310 00:12:58,190 --> 00:13:01,079 Den eneste fangst er, hvis du har flere filer eller mapper, der starter 311 00:13:01,079 --> 00:13:02,870 med bogstavet "p" eller "ps", du måtte have 312 00:13:02,870 --> 00:13:05,525 at skrive et par mere før Computeren ved, hvad de skal gøre. 313 00:13:05,525 --> 00:13:06,820 >> MARIA: Vi kan godt lide genveje. 314 00:13:06,820 --> 00:13:08,695 >> DAVID MALAN: Dette vil spare dig så meget tid. 315 00:13:08,695 --> 00:13:11,930 Og også, som vi sagde i foredrag, du kan rulle op i historien, op og ned, 316 00:13:11,930 --> 00:13:15,461 at finde nyligt henrettet kommandoer, samt. 317 00:13:15,461 --> 00:13:15,960 Okay. 318 00:13:15,960 --> 00:13:20,904 Så nu, lad os vende vores opmærksomhed tilbage til et simpelt program, hej verden. 319 00:13:20,904 --> 00:13:22,195 Så vi har samlet det nøjagtigt. 320 00:13:22,195 --> 00:13:24,050 Og nu, hvorfor vi ikke tager et kig på datatyper 321 00:13:24,050 --> 00:13:26,776 og derefter overgangen fra nogle svarende Scratch blokke til C. 322 00:13:26,776 --> 00:13:27,400 MARIA: Awesome. 323 00:13:27,400 --> 00:13:30,031 Så nu, at du er begyndt skrive programmer i C, 324 00:13:30,031 --> 00:13:32,530 vi kommer til at begynde at tale om datatyper og variabler. 325 00:13:32,530 --> 00:13:37,570 Så nogle datatyper, som du ønsker at vide starter nu 326 00:13:37,570 --> 00:13:39,400 er dem, der er fremhævet med blåt. 327 00:13:39,400 --> 00:13:42,420 Så vi har int først, som står for heltal. 328 00:13:42,420 --> 00:13:46,075 Og der holder heltal, som du kunne have guessed-- så 1, 2, 3, 329 00:13:46,075 --> 00:13:47,950 og andre heltal at du kan tænke på. 330 00:13:47,950 --> 00:13:48,730 >> DAVID MALAN: Og også negativ. 331 00:13:48,730 --> 00:13:50,220 >> MARIA: Og også negative, jep. 332 00:13:50,220 --> 00:13:51,450 Og 0. 333 00:13:51,450 --> 00:13:54,250 Så har vi flåd, som er flydende tal. 334 00:13:54,250 --> 00:13:58,360 Så det er alle de reelle tal der har decimaler. 335 00:13:58,360 --> 00:14:03,960 Så 5.0, 5.2, og endnu mere cifre efter kommaet, 336 00:14:03,960 --> 00:14:05,620 samt, og også negative. 337 00:14:05,620 --> 00:14:07,530 Så har vi char som er et tegn. 338 00:14:07,530 --> 00:14:10,240 Så jeg tror, ​​vi talte om dette i forelæsning i dag. 339 00:14:10,240 --> 00:14:15,682 Men vi har bogstaver, example-- A, B, C-- der kan gemmes som en char. 340 00:14:15,682 --> 00:14:18,390 Men så har vi en masse flere symboler der kan gemmes som en char. 341 00:14:18,390 --> 00:14:22,380 Og dem gemmes som ASCII. 342 00:14:22,380 --> 00:14:25,280 >> Og så har vi bool, som er Booleans. 343 00:14:25,280 --> 00:14:29,067 Og dem evalueres til Sandt eller Falsk eller 1 og 0, hhv. 344 00:14:29,067 --> 00:14:31,650 DAVID MALAN: Og tilbagekaldelse, der bool kommer fra CS50 biblioteket. 345 00:14:31,650 --> 00:14:33,300 Så det er ikke indbygget i C, men det er super nyttigt 346 00:14:33,300 --> 00:14:34,850 at have begrebet sandt og falsk. 347 00:14:34,850 --> 00:14:36,990 Og selvom du måske tror-- sjovt kendsgerning. 348 00:14:36,990 --> 00:14:43,700 En bool teknisk brug, hvor mange bits, sandhed, at repræsentere Sandt versus Falsk? 349 00:14:43,700 --> 00:14:47,910 Hvor mange bits tror du du behøver, maksimalt? 350 00:14:47,910 --> 00:14:48,790 Ja, kun én. 351 00:14:48,790 --> 00:14:52,077 Så det viser sig, at C kan ikke give dig bare en smule. 352 00:14:52,077 --> 00:14:54,160 Den mindste måleenhed du kan få, er otte. 353 00:14:54,160 --> 00:14:57,090 Så det er lidt ødsel de du er ved hjælp af en hel byte eller otte bits, 354 00:14:57,090 --> 00:14:58,340 at repræsentere Sandt eller falsk. 355 00:14:58,340 --> 00:15:01,807 Men det er bare den måde, det er gennemført i C ved CS50 biblioteket. 356 00:15:01,807 --> 00:15:04,890 MARIA: Og så dem, vi er ikke vil tale om så udførligt 357 00:15:04,890 --> 00:15:08,060 lige nu-- dobbelt, det er til større flåd. 358 00:15:08,060 --> 00:15:09,811 Lange lange og korte er også for heltal. 359 00:15:09,811 --> 00:15:10,643 DAVID MALAN: Ja. 360 00:15:10,643 --> 00:15:13,190 I hacker udgave af pset én, vi rent faktisk bruger lang lang. 361 00:15:13,190 --> 00:15:15,801 Men for standard udgave, det burde ikke være nødvendigt. 362 00:15:15,801 --> 00:15:16,300 MARIA: Cool. 363 00:15:16,300 --> 00:15:17,361 OKAY. 364 00:15:17,361 --> 00:15:20,110 Så operators-- du bør være formentlig bekendt med de fleste af disse. 365 00:15:20,110 --> 00:15:22,620 Addition, +; subtraktion, -. 366 00:15:22,620 --> 00:15:24,070 For multiplikation, har vi den *. 367 00:15:24,070 --> 00:15:25,900 Så ikke X, som vi plejer at bruge. 368 00:15:25,900 --> 00:15:27,840 Division, har vi backslash. 369 00:15:27,840 --> 00:15:31,380 Og modulo er vores sidste operatør, vi kommer til at snakke om lige nu. 370 00:15:31,380 --> 00:15:35,610 Det er en operatør, der giver os mulighed for at tage resten af ​​en division. 371 00:15:35,610 --> 00:15:40,630 Så hvis vi har 4% 2, 4 delt med 2 er 2 med en resterende del af 0. 372 00:15:40,630 --> 00:15:41,740 Så 4% 2 er 0. 373 00:15:41,740 --> 00:15:42,950 4% 3 er 1. 374 00:15:42,950 --> 00:15:44,870 4% 5 er 4, som du kunne have gættet. 375 00:15:44,870 --> 00:15:48,860 Og husk, når du bruger alle disse operatører til at anvende de PEMDAS reglerne. 376 00:15:48,860 --> 00:15:54,060 >> DAVID MALAN: Så for at være klar, hvis du gør 4% 2, hvorfor er, at 0, præcist? 377 00:15:54,060 --> 00:15:57,480 >> MARIA: Fordi 4 divideret med 2 er 2 med en rest på 0. 378 00:15:57,480 --> 00:16:00,752 Så modulo giver os, at resten som i modsætning til resultatet af divisionen. 379 00:16:00,752 --> 00:16:02,960 DAVID MALAN: Og ja, hvad vi vil finde det nyttigt 380 00:16:02,960 --> 00:16:05,640 for er, at i nogle problemer det er ikke nødvendigvis en, 381 00:16:05,640 --> 00:16:08,040 Hvis du vil have den følge at begrænse dig selv 382 00:16:08,040 --> 00:16:10,720 til en nummerserie like 0 gennem noget, 383 00:16:10,720 --> 00:16:13,904 kan du bruge modulo til at ombryde omkring tidligst ligesom 2 mia 384 00:16:13,904 --> 00:16:16,320 eller 4 milliarder værdi, vi har talt om i foredraget. 385 00:16:16,320 --> 00:16:16,870 >> MARIA: Ja. 386 00:16:16,870 --> 00:16:19,429 Og selv i "grådige" vi måske. 387 00:16:19,429 --> 00:16:21,345 DAVID MALAN: Ja, i Problemet angive én, så godt. 388 00:16:21,345 --> 00:16:22,520 MARIA: Ja, dejligt. 389 00:16:22,520 --> 00:16:24,340 DAVID MALAN: God vink. 390 00:16:24,340 --> 00:16:25,750 MARIA: Beklager. 391 00:16:25,750 --> 00:16:28,590 Boolean expressions-- så for booleske operatorer, 392 00:16:28,590 --> 00:16:31,770 vi kommer til at snakke om alt af disse, som du ser her. 393 00:16:31,770 --> 00:16:35,310 Så lige nu har vi to lighedstegn anført for ligemænd. 394 00:16:35,310 --> 00:16:38,650 Så de er til sammenligning. 395 00:16:38,650 --> 00:16:40,830 Indtil videre har vi kun set én lighedstegn. 396 00:16:40,830 --> 00:16:44,870 Det er, når vi tildeler en værdi til en variabel. 397 00:16:44,870 --> 00:16:50,160 Så hvis vi har set int n = 5, så vi har tildelt 5 til variablen n. 398 00:16:50,160 --> 00:16:55,600 Men hvis vi ønsker at bruge == til sammenligning, kan vi kontrollere, om n == 5. 399 00:16:55,600 --> 00:16:58,310 Og hvis n == 5, så er det sandt. 400 00:16:58,310 --> 00:17:01,950 >> Så booleske operatører tillade os, dybest set, 401 00:17:01,950 --> 00:17:04,670 at evaluere Boolean udtryk for Sandt eller falsk. 402 00:17:04,670 --> 00:17:07,819 Så ikke equals-- vi har udråbstegn og ligemænd. 403 00:17:07,819 --> 00:17:14,240 Så kunne vi også kontrollere, om n ikke lig 5-- så n! = 5. 404 00:17:14,240 --> 00:17:17,640 Mindre end, mindre end eller lig med større end, større end eller lig med 405 00:17:17,640 --> 00:17:20,720 og så har vi den logiske AND og den logiske OR. 406 00:17:20,720 --> 00:17:24,060 Og dem giver os mulighed for at vurdere flere booleske udtryk sammen 407 00:17:24,060 --> 00:17:27,930 til stort set komme sammen som en hel boolsk udtryk. 408 00:17:27,930 --> 00:17:34,970 Så hvis vi ønsker at finde en række, siger, der er større end 5, men mindre end 15 409 00:17:34,970 --> 00:17:39,810 på samme tid, ville vi bruge logisk OG operatøren at se hvis n er 410 00:17:39,810 --> 00:17:42,937 større end 5 && n mindre end 15. 411 00:17:42,937 --> 00:17:44,770 DAVID MALAN: Og her, også, det er virkelig nemt 412 00:17:44,770 --> 00:17:47,290 tidligt uheld bruge bare en enkelt-tegn 413 00:17:47,290 --> 00:17:48,572 eller en enkelt lodret streg. 414 00:17:48,572 --> 00:17:51,280 Og forhåbentlig compileren vil råber på dig, fordi de rent faktisk 415 00:17:51,280 --> 00:17:52,530 har en meget forskellig betydning. 416 00:17:52,530 --> 00:17:55,660 For dem nysgerrige, de er anvendes til bitvise operationer, 417 00:17:55,660 --> 00:17:57,197 opererer på enkelte bits. 418 00:17:57,197 --> 00:17:58,780 Men du vil have par af dem her. 419 00:17:58,780 --> 00:18:01,560 Og super vigtigt, er, at første, lighedstegnet, 420 00:18:01,560 --> 00:18:05,270 der er lighed operatør som modsætning til opgaven operatør. 421 00:18:05,270 --> 00:18:08,552 >> MARIA: Og den lodrette bar er placeret mellem Slet og Retur. 422 00:18:08,552 --> 00:18:09,260 DAVID MALAN: Ja. 423 00:18:09,260 --> 00:18:11,420 På en typisk amerikansk tastatur. 424 00:18:11,420 --> 00:18:13,190 >> MARIA: Yep. 425 00:18:13,190 --> 00:18:15,890 Så lad os springe lige ind betingede udsagn. 426 00:18:15,890 --> 00:18:18,300 I Scratch, har du allerede set, sandsynligvis, 427 00:18:18,300 --> 00:18:22,730 hvis udsagn, der giver dig mulighed for at kontrollere, om noget er sandt, så 428 00:18:22,730 --> 00:18:23,660 gøre noget andet. 429 00:18:23,660 --> 00:18:28,410 Så du måske har ønsket at kontrollere, om din sprite er 430 00:18:28,410 --> 00:18:31,410 rører en anden sprite eller grænsen af ​​skærmen. 431 00:18:31,410 --> 00:18:35,520 Og så skal du måske have ønsket at afslutte spillet eller gøre noget andet. 432 00:18:35,520 --> 00:18:40,000 Så syntaksen for at er ", hvis (betingelse)." 433 00:18:40,000 --> 00:18:46,820 Så hvis din sprite rører noget, så skal er inde i de krøllede parenteser. 434 00:18:46,820 --> 00:18:48,980 >> Så har vi if-else udsagn. 435 00:18:48,980 --> 00:18:54,080 Else giver os mulighed for at gøre noget hvis den betingelse, at vi 436 00:18:54,080 --> 00:18:55,870 kontrollere for i starten er ikke sandt. 437 00:18:55,870 --> 00:19:01,530 Så hvis sprite rører grænsen gøre dette, ellers gøre noget andet. 438 00:19:01,530 --> 00:19:04,030 Så ellers gøre noget andet. 439 00:19:04,030 --> 00:19:07,530 Så har vi en kort eksempel på dette. 440 00:19:07,530 --> 00:19:11,551 Så hvis (military_time <12), vi ønsker at printf "God morgen!" 441 00:19:11,551 --> 00:19:13,300 Andet, vi kommer til at printf "God aften!" 442 00:19:13,300 --> 00:19:14,860 Grundlæggende eksempel. 443 00:19:14,860 --> 00:19:15,680 >> DAVID MALAN: God. 444 00:19:15,680 --> 00:19:16,760 >> MARIA: Cool. 445 00:19:16,760 --> 00:19:18,560 Så nu har vi switch udsagn. 446 00:19:18,560 --> 00:19:21,960 Skift udsagn i almindelighed kan tillade os at gøre en masse af det samme 447 00:19:21,960 --> 00:19:25,070 at vi bare snakkede omkring med hvis udsagn. 448 00:19:25,070 --> 00:19:29,440 For eksempel, lige nu har vi den generelle form af switch-statementet 449 00:19:29,440 --> 00:19:33,870 der giver os mulighed for at tage en variabel kaldet n 450 00:19:33,870 --> 00:19:37,670 og sammenligne det med en masse af forskellige værdier, som her vi 451 00:19:37,670 --> 00:19:40,010 har kaldt constant1, konstant2. 452 00:19:40,010 --> 00:19:41,150 Vi kan have en masse mere. 453 00:19:41,150 --> 00:19:42,930 Og dem kaldes sager. 454 00:19:42,930 --> 00:19:46,280 >> Så hvis vi har en switch statement-- og dette værker 455 00:19:46,280 --> 00:19:50,580 kun for integers-- vi har en variabel i dette tilfælde, der er n. 456 00:19:50,580 --> 00:19:53,840 Hvis variablen n er lig med constant1, vi 457 00:19:53,840 --> 00:19:59,720 vil udføre nogle stump kode eller noget, som vi ønsker at gøre. 458 00:19:59,720 --> 00:20:01,280 Og så ville vi bryde. 459 00:20:01,280 --> 00:20:04,820 Så pausen betyder, at switch-statementet 460 00:20:04,820 --> 00:20:08,120 vil stoppe udførelsen hvis n er lig med constant1, 461 00:20:08,120 --> 00:20:09,752 og derefter dit program vil fortsætte. 462 00:20:09,752 --> 00:20:11,835 Det vil afslutte ud af skifte redegørelse og det vil 463 00:20:11,835 --> 00:20:13,520 fortsætte med at gøre noget andet. 464 00:20:13,520 --> 00:20:17,204 >> Men hvis n ikke lig constant1, så tilfældet for konstant2 465 00:20:17,204 --> 00:20:17,870 vil blive kontrolleret. 466 00:20:17,870 --> 00:20:21,750 Så hvis n er lig konstant2, at andre kodestykke vil blive henrettet. 467 00:20:21,750 --> 00:20:23,850 Og så er det vil bryde hvis det er lig med det. 468 00:20:23,850 --> 00:20:27,580 Og så kan vi have also-- ikke nødvendigvis, though-- en standard tilfælde 469 00:20:27,580 --> 00:20:32,290 der vil ske, hvis n ikke er lig nogen af ​​de tilfælde, som du har angivet. 470 00:20:32,290 --> 00:20:35,400 Og i standard tilfældet, har vi også ikke brug for en pause nødvendigvis 471 00:20:35,400 --> 00:20:39,271 fordi switch-statementet vil vide at det skal ende efter standard 472 00:20:39,271 --> 00:20:40,270 tilfældet, hvis det er tilfældet. 473 00:20:40,270 --> 00:20:42,140 >> DAVID MALAN: Men stilistisk, vi altid sætte det i der. 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 Så især når starter ud, især hvis blandt de mindre 477 00:20:44,750 --> 00:20:47,458 komfortable, ville jeg personligt bare anbefaler stick med de hvis'er 478 00:20:47,458 --> 00:20:51,564 og hvis'er-elses og if-else-if-elses og så videre, hvis der kun 479 00:20:51,564 --> 00:20:53,480 fordi de er lidt mere ligetil. 480 00:20:53,480 --> 00:20:56,142 Dette er en dejlig optimering, eller nogle gange endda æstetisk det 481 00:20:56,142 --> 00:20:57,350 gør koden mere læsbar. 482 00:20:57,350 --> 00:20:59,599 Og faktisk formentlig mid-semester vil vi se et problem 483 00:20:59,599 --> 00:21:02,504 sæt, hvor det bare ser bedre og lettere at læse for mennesker 484 00:21:02,504 --> 00:21:03,670 ved hjælp af en switch-statement. 485 00:21:03,670 --> 00:21:05,460 Men du behøver ikke bekymre dig om klamrer sig til denne for tidligt. 486 00:21:05,460 --> 00:21:05,680 >> MARIA: Ja. 487 00:21:05,680 --> 00:21:08,840 Hvis du har en masse, hvis udsagn, det måske bare ikke være meget læsbar. 488 00:21:08,840 --> 00:21:10,965 Det er måske ikke være meget hurtig for dig at gå igennem det. 489 00:21:10,965 --> 00:21:13,230 Så skifter udsagn kan være meget nyttigt, samt. 490 00:21:13,230 --> 00:21:17,900 Og også, ikke remember-- ikke glemmer at sætte pauserne derinde. 491 00:21:17,900 --> 00:21:20,330 >> DAVID MALAN: Må ikke huske dette. 492 00:21:20,330 --> 00:21:24,890 >> MARIA: Fordi så kan du falde igennem fra sag til sag. 493 00:21:24,890 --> 00:21:27,930 Så lad os sige, at sagen constant1 afse en pause erklæring i det. 494 00:21:27,930 --> 00:21:31,920 Så kunne vi falder igennem inde tilfælde konstant2. 495 00:21:31,920 --> 00:21:35,070 Og vi ønsker ikke at gøre det, hvis vi har allerede nået tilfælde constant1 496 00:21:35,070 --> 00:21:37,830 og det er lig med n. 497 00:21:37,830 --> 00:21:45,100 >> Så for eksempel, hvis vi har en variabel n, der indeholder en klasse nummer, 498 00:21:45,100 --> 00:21:48,990 og vi ønsker at se, hvad der klasse is-- hvis n er lig med 50, 499 00:21:48,990 --> 00:21:51,957 vi kommer til at udskrive "CS50 er Introduktion til Datalogi I. " 500 00:21:51,957 --> 00:21:53,040 Så vi kommer til at bryde. 501 00:21:53,040 --> 00:21:53,920 Og det er det. 502 00:21:53,920 --> 00:21:55,950 Men hvis n er lig til 51, vil vi 503 00:21:55,950 --> 00:21:58,494 at udskrive "CS51 er Introduktion til datalogi II. " 504 00:21:58,494 --> 00:21:59,910 Så igen, vi kommer til at bryde. 505 00:21:59,910 --> 00:22:05,080 Hvis så vi sætter dog 124, 61, enhver andet nummer, som du måske tænke på, 506 00:22:05,080 --> 00:22:06,890 eller programmet ikke vil at erkende, at. 507 00:22:06,890 --> 00:22:09,010 Så det kommer til at sige, "Undskyld, jeg er ikke bekendt med denne klasse. " 508 00:22:09,010 --> 00:22:10,009 Og det kommer til at bryde. 509 00:22:10,009 --> 00:22:12,847 DAVID MALAN: Så kan man virkelig se IF, ellers hvis, ellers idé her. 510 00:22:12,847 --> 00:22:15,430 Det er bare anderledes syntaks for udtrykker nøjagtig samme idé. 511 00:22:15,430 --> 00:22:17,690 >> MARIA: Præcis. 512 00:22:17,690 --> 00:22:19,480 Nu har vi vores ternære operatører. 513 00:22:19,480 --> 00:22:24,900 Så ternære operatører har tre parts-- en tilstand, 514 00:22:24,900 --> 00:22:27,220 noget at gøre, hvis denne betingelse er sand, 515 00:22:27,220 --> 00:22:29,730 og derefter noget at gøre hvis denne betingelse er falsk. 516 00:22:29,730 --> 00:22:33,400 Så du ser, dybest set, syntaksen af ​​her. 517 00:22:33,400 --> 00:22:37,792 Vi har spørgsmålstegnet, og så til-- hvad gør vi kalder det? 518 00:22:37,792 --> 00:22:38,750 DAVID MALAN: tyktarmen. 519 00:22:38,750 --> 00:22:39,100 MARIA: Colon. 520 00:22:39,100 --> 00:22:39,599 Tak. 521 00:22:39,599 --> 00:22:41,880 Undskyld. 522 00:22:41,880 --> 00:22:45,800 Så lad os se på vores eksempel til se, om vi kan gøre følelse af denne-- 523 00:22:45,800 --> 00:22:47,840 class_num == 50. 524 00:22:47,840 --> 00:22:52,580 Så her ser vi vores boolesk operator == der sammenligner den variable class_num 525 00:22:52,580 --> 00:22:53,100 til 50. 526 00:22:53,100 --> 00:22:55,150 Så class_num lagrer et heltal. 527 00:22:55,150 --> 00:22:58,180 Og hvis det heltal lig 50, så er vi 528 00:22:58,180 --> 00:23:02,810 kommer til at gemme "David Malan" inde i strengen professor. 529 00:23:02,810 --> 00:23:05,912 Hvis klassen nummer ikke lig 50 ", ikke David Malan" 530 00:23:05,912 --> 00:23:07,120 bliver professoren. 531 00:23:07,120 --> 00:23:08,630 >> DAVID MALAN: Tak. 532 00:23:08,630 --> 00:23:12,110 Og så synes dette svarer til hvad ville du sige, ved første øjekast? 533 00:23:12,110 --> 00:23:17,930 534 00:23:17,930 --> 00:23:19,960 >> MARIA: For mig ser det ud ligesom hvis-andet udsagn. 535 00:23:19,960 --> 00:23:20,709 >> DAVID MALAN: Ja. 536 00:23:20,709 --> 00:23:24,020 Og i virkeligheden er dette slags af en smuk én liner, 537 00:23:24,020 --> 00:23:27,520 så at sige, for at gennemføre nøjagtigt logik if-else 538 00:23:27,520 --> 00:23:29,010 men gør alt i ét trin. 539 00:23:29,010 --> 00:23:29,860 >> MARIA: Præcis. 540 00:23:29,860 --> 00:23:30,360 Ja. 541 00:23:30,360 --> 00:23:33,520 Så hvis-else udsagn måske tage op en masse plads. 542 00:23:33,520 --> 00:23:36,283 De kan være for lang til noget så simpelt som dette. 543 00:23:36,283 --> 00:23:38,350 Så det kan være meget kortfattet og meget flot. 544 00:23:38,350 --> 00:23:40,880 545 00:23:40,880 --> 00:23:46,820 Så nu vil vi ind at se på udføre noget igen og igen, 546 00:23:46,820 --> 00:23:50,060 så kontrol for en tilstand flere gange 547 00:23:50,060 --> 00:23:53,510 og derefter fortsætter med at gøre noget mens denne betingelse er sand. 548 00:23:53,510 --> 00:23:56,740 Så dette bringer os fint ind mens sløjfer. 549 00:23:56,740 --> 00:23:59,270 >> Til venstre har vi vores første while-løkke. 550 00:23:59,270 --> 00:24:03,840 Så mens noget er sandt, gøre noget igen og igen. 551 00:24:03,840 --> 00:24:08,850 Så sørg for at lægge mærke til, at vores tilstand her er valideret på toppen. 552 00:24:08,850 --> 00:24:14,150 Hvorimod med vores anden loop-- vi kalder at en gør-mens loop-- vi gør noget, 553 00:24:14,150 --> 00:24:15,890 derefter kontrollere vi for en tilstand. 554 00:24:15,890 --> 00:24:17,980 Og hvis denne betingelse fortsætter med at være sandt, 555 00:24:17,980 --> 00:24:20,150 vi gå tilbage og gøre de ting igen. 556 00:24:20,150 --> 00:24:23,360 Så den vigtigste forskel er, hvor tilstanden kontrolleres for. 557 00:24:23,360 --> 00:24:29,260 Og koden kan aldrig være udføres, hvis betingelsen ikke er 558 00:24:29,260 --> 00:24:30,430 rigtigt med while-løkken. 559 00:24:30,430 --> 00:24:33,050 Hvorimod med gør-mens loop, vi har koden 560 00:24:33,050 --> 00:24:35,380 der altid udføres mindst én gang. 561 00:24:35,380 --> 00:24:37,470 Og derefter, mens tilstanden fortsætter med at være sandt, 562 00:24:37,470 --> 00:24:39,960 vi kan gå tilbage og gentage igen indeni. 563 00:24:39,960 --> 00:24:43,625 Så hvorfor tror du, vi ville bruge en gør-while-løkke over en while-løkke? 564 00:24:43,625 --> 00:24:48,221 565 00:24:48,221 --> 00:24:48,720 Højre. 566 00:24:48,720 --> 00:24:52,600 Så hvis vi ønsker at bede bruger til en slags input, 567 00:24:52,600 --> 00:24:55,400 hvis vi ønsker at spørge dem at indtaste deres navn, 568 00:24:55,400 --> 00:24:57,342 vi ønsker at mindst spørge dem én gang. 569 00:24:57,342 --> 00:24:59,050 Og hvis de kommer ind det navn, vi er ikke 570 00:24:59,050 --> 00:25:00,740 vil stille dem igen fordi vi allerede kender det. 571 00:25:00,740 --> 00:25:02,656 Men hvis de ikke indtaster deres navn, eller hvis de 572 00:25:02,656 --> 00:25:05,787 indtaste noget, der er naturligvis ikke et navn, 573 00:25:05,787 --> 00:25:08,120 vi stadig ønsker at fortsætte beder dem om til deres navn. 574 00:25:08,120 --> 00:25:10,710 >> DAVID MALAN: Og i foredraget havde vi en ligesom dette med få positive int 575 00:25:10,710 --> 00:25:13,550 eksempel, hvor der er noget at tjek først, fordi du ikke har endda 576 00:25:13,550 --> 00:25:14,190 fået en int. 577 00:25:14,190 --> 00:25:16,680 Så vi ønsker at gøre denne-- få en int fra user-- 578 00:25:16,680 --> 00:25:18,860 derefter kontrollere det, måske, igen og igen og igen. 579 00:25:18,860 --> 00:25:21,030 >> MARIA: Præcis. 580 00:25:21,030 --> 00:25:22,060 For loops-- OK. 581 00:25:22,060 --> 00:25:25,842 For løkker kan tillade os at gøre næsten præcis de samme ting, så godt. 582 00:25:25,842 --> 00:25:27,300 Det er faktisk præcis det samme. 583 00:25:27,300 --> 00:25:30,190 Så der er ikke noget, du kan gøre med for løkker 584 00:25:30,190 --> 00:25:32,840 at du ikke ville være i stand at gøre med, mens sløjfer. 585 00:25:32,840 --> 00:25:36,900 Men efter sløjfer kan synes lidt smule mere kompliceret syntaktisk 586 00:25:36,900 --> 00:25:39,730 fordi de har tre dele inde i hvad 587 00:25:39,730 --> 00:25:42,990 var før blot tilstand med mens sløjfer. 588 00:25:42,990 --> 00:25:48,260 Så den første del, som du havet, venstre-mest, vi har "int dværge = 0." 589 00:25:48,260 --> 00:25:51,490 Så dette er, hvor vi initialisere vores variabel. 590 00:25:51,490 --> 00:25:55,210 >> Så har vi et semikolon og "dværge <7." 591 00:25:55,210 --> 00:25:57,100 Så det er her ude betingelse faktisk er. 592 00:25:57,100 --> 00:26:00,170 Så det er, hvad vi ville have sætte bare i imens loop-- 593 00:26:00,170 --> 00:26:01,880 ", mens dværge <7." 594 00:26:01,880 --> 00:26:05,380 Her der går i midt i vores for-løkken. 595 00:26:05,380 --> 00:26:07,190 Så "dwaves <7." 596 00:26:07,190 --> 00:26:11,350 Og så vores sidste del er "dværge ++," der hvor vi opdaterer vores variabel. 597 00:26:11,350 --> 00:26:15,470 Så det vigtigste til at indse, er, at dette 598 00:26:15,470 --> 00:26:22,010 kommer til at gå igennem denne for-løkke syv gange og udføre syv gange. 599 00:26:22,010 --> 00:26:24,020 Så vi har syv dværge, og de er alle 600 00:26:24,020 --> 00:26:26,020 kommer til at sige, "Jeg er her til at hjælpe dig, Snehvide " 601 00:26:26,020 --> 00:26:28,860 fordi de er klar at hjælpe Snehvide. 602 00:26:28,860 --> 00:26:33,600 >> Med mens løkker, ville vi have gjort initialiseringen og ajourføring 603 00:26:33,600 --> 00:26:37,490 ikke inde i tilstand, igen, men enten før eller inde i while-løkke 604 00:26:37,490 --> 00:26:40,210 at sikre, at we-- fordi vi altid brug for disse dele. 605 00:26:40,210 --> 00:26:42,835 Så for at sikre, at vi har dem, ville vi har stadig tilføjet dem 606 00:26:42,835 --> 00:26:44,580 på, bare ikke i parentes. 607 00:26:44,580 --> 00:26:47,288 >> DAVID MALAN: Og så det ser like-- i foredraget, for eksempel, 608 00:26:47,288 --> 00:26:50,250 Jeg næsten altid bruge, ligesom, i og n og temmelig kedeligt variabler. 609 00:26:50,250 --> 00:26:53,050 Det ser ud som du kan bruge mere dygtigt navngivne variabler, også. 610 00:26:53,050 --> 00:26:56,300 >> MARIA: Ja, det er faktisk meget rart at bruge lidt mere beskrivende variabler 611 00:26:56,300 --> 00:26:59,400 fordi især hvis en anden er læse din code-- måske du er grader 612 00:26:59,400 --> 00:27:00,940 eller hvis du samarbejder med somebody-- 613 00:27:00,940 --> 00:27:03,481 du ønsker at sikre, at de forstå, hvad du laver. 614 00:27:03,481 --> 00:27:05,750 615 00:27:05,750 --> 00:27:06,400 >> OKAY. 616 00:27:06,400 --> 00:27:11,435 Så det er noget meget funky-- for-løkke inde i en for-løkke. 617 00:27:11,435 --> 00:27:13,060 Jeg ved ikke, om vi har set det før. 618 00:27:13,060 --> 00:27:13,830 Sikkert ikke. 619 00:27:13,830 --> 00:27:17,750 Men vi kan faktisk have denne-- så løkker i stedet for løkker. 620 00:27:17,750 --> 00:27:25,130 Så er der nogen ønsker at måske gå mig gennem hvad der foregår her? 621 00:27:25,130 --> 00:27:28,240 622 00:27:28,240 --> 00:27:29,490 DAVID MALAN: Jeg tager et stik. 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 Så spoiler-- vi ønsker at udskrive de ting der er i det nederste højre hjørne 626 00:27:34,690 --> 00:27:35,190 der. 627 00:27:35,190 --> 00:27:35,450 >> MARIA: Right. 628 00:27:35,450 --> 00:27:35,710 Ja, ja. 629 00:27:35,710 --> 00:27:38,043 >> DAVID MALAN: Så vi har bare sætte det prøve output der. 630 00:27:38,043 --> 00:27:42,590 Så jeg kan udlede af den øverste løkke, at du er 631 00:27:42,590 --> 00:27:45,680 iteration løbet rækker de yderste løkke, så at sige. 632 00:27:45,680 --> 00:27:48,107 Og du iteration løbet kolonner med den inderste sløjfe. 633 00:27:48,107 --> 00:27:50,190 Og intuitivt, dette bør forhåbentlig giver mening 634 00:27:50,190 --> 00:27:52,070 på grund af naturen af hvert program vi har set 635 00:27:52,070 --> 00:27:55,570 før, printf, som er funktion vi bruger, i sidste ende, 636 00:27:55,570 --> 00:27:58,190 har mulighed for at udskrive ting i det væsentlige linje for linje. 637 00:27:58,190 --> 00:27:59,960 Ligesom, når du har udlæses en ny linje, der er 638 00:27:59,960 --> 00:28:02,876 nr fordobling tilbage og udskrivning noget højere på skærmen, mindst 639 00:28:02,876 --> 00:28:04,530 ikke bruger printf som denne. 640 00:28:04,530 --> 00:28:07,750 >> Og så i den forbindelse, det gør forstand, at den yderste sløjfe 641 00:28:07,750 --> 00:28:10,930 bør der henvises til rækkerne fordi for hver given række, 642 00:28:10,930 --> 00:28:13,650 du vil ønsker at udskrive XXXXX, og derefter 643 00:28:13,650 --> 00:28:15,520 gå videre til den næste række, XXXXX. 644 00:28:15,520 --> 00:28:17,317 Så rækker komme først. 645 00:28:17,317 --> 00:28:19,150 Og derefter inden for hver række, du udskriver kolonner. 646 00:28:19,150 --> 00:28:21,160 Hvis du har forsøgt at gøre det på den modsatte, ville det nok ikke 647 00:28:21,160 --> 00:28:21,690 komme ud som du ønsker. 648 00:28:21,690 --> 00:28:22,190 >> MARIA: Ja. 649 00:28:22,190 --> 00:28:24,950 Vi kunne bare ikke gå tilbage til forrige række med printf. 650 00:28:24,950 --> 00:28:27,658 >> DAVID MALAN: Og hvad er interessant pr dagens snak om rækkevidde, 651 00:28:27,658 --> 00:28:31,600 faktisk er, at rækken er en int der er erklæret i den øverste løkke. 652 00:28:31,600 --> 00:28:34,030 Men bemærk at det stadig er indersiden af, så at sige, 653 00:28:34,030 --> 00:28:35,982 de krøllede parenteser, som følge umiddelbart, 654 00:28:35,982 --> 00:28:38,440 selvom det er ikke er teknisk inden for disse krøllede parenteser. 655 00:28:38,440 --> 00:28:41,750 Så række er i omfang for hele den kodestykke, 656 00:28:41,750 --> 00:28:44,690 både indersiden af ​​den ydre sløjfe til og inde i det indre for løkken. 657 00:28:44,690 --> 00:28:48,050 Men I tilfælde, hvor er kolonne i omfang? 658 00:28:48,050 --> 00:28:49,810 Den variabelkolonne? 659 00:28:49,810 --> 00:28:51,310 Ja, kun i indvendige løkke. 660 00:28:51,310 --> 00:28:54,280 Og det er OK, fordi vi ikke få adgang til det uden for sine krøllede parenteser. 661 00:28:54,280 --> 00:28:57,280 Alt vi gør, er udskrift af en ny linje i slutningen der. 662 00:28:57,280 --> 00:28:58,670 Således at der i virkeligheden er OK. 663 00:28:58,670 --> 00:29:03,740 >> Så dette har den virkning, det ligner, gøre tre rækker og fire søjler. 664 00:29:03,740 --> 00:29:04,370 >> MARIA: Right. 665 00:29:04,370 --> 00:29:06,270 Så først vi går igennem vores første række. 666 00:29:06,270 --> 00:29:10,520 Og netop i vores første række, gør vi det fire kolonner inde i første række. 667 00:29:10,520 --> 00:29:11,980 Så vi udskrive fire X'er. 668 00:29:11,980 --> 00:29:15,800 Og så kan vi gå ud for-løkken, da vi har allerede udskrives fire X'er. 669 00:29:15,800 --> 00:29:17,100 Og vi udskrive en ny linje. 670 00:29:17,100 --> 00:29:19,920 Og så går vi gennem samme proces for to flere rækker 671 00:29:19,920 --> 00:29:21,170 at gøre alt tre. 672 00:29:21,170 --> 00:29:23,530 >> DAVID MALAN: Og det er værd at bemærke er det bare en artefakt af skrifttype, den kendsgerning 673 00:29:23,530 --> 00:29:25,680 at prøven output synes så meget højere, 674 00:29:25,680 --> 00:29:27,520 som om der er mere rækker end kolonner. 675 00:29:27,520 --> 00:29:29,824 Men det er bare fordi X er højere end den er bred. 676 00:29:29,824 --> 00:29:32,740 Det er alt, hvad der sker der, plus det hvide mellemrum mellem linjerne. 677 00:29:32,740 --> 00:29:33,281 >> MARIA: Right. 678 00:29:33,281 --> 00:29:34,792 Afkøle. 679 00:29:34,792 --> 00:29:35,750 DAVID MALAN: Okay. 680 00:29:35,750 --> 00:29:39,830 Så et hurtigt kig på problemet angive én, tage eventuelle spørgsmål, og derefter udsætte? 681 00:29:39,830 --> 00:29:40,330 Okay. 682 00:29:40,330 --> 00:29:43,164 Så i problemer indstille en, er der tre primære udfordringer, i sidste ende. 683 00:29:43,164 --> 00:29:44,955 Men først, vil du finde at problemet sæt 684 00:29:44,955 --> 00:29:47,900 specifikation, som med mange af psets dette efterår, kommer til at gå dig 685 00:29:47,900 --> 00:29:50,691 gennem et par warm-up øvelser, pege dig ud et par ressourcer 686 00:29:50,691 --> 00:29:52,440 at du måske eller måske ikke allerede har set. 687 00:29:52,440 --> 00:29:54,440 For eksempel, CS50 har en suite af shorts, 688 00:29:54,440 --> 00:29:56,481 som er korte videoer, ikke ulig det, men at 689 00:29:56,481 --> 00:29:58,460 er meget emne specific-- måske fem minutter, 690 00:29:58,460 --> 00:30:02,360 10 minutter i længde på sløjfer eller på eller om algoritmer 691 00:30:02,360 --> 00:30:04,125 eller senere mere avancerede emner, så godt. 692 00:30:04,125 --> 00:30:06,000 Og vi generelt integrere dem ind i problemet 693 00:30:06,000 --> 00:30:07,950 sæt så eleverne har en ressource, som 694 00:30:07,950 --> 00:30:10,840 til anmeldelse materiale, der kan have allerede kommet op i foredrag eller afsnit. 695 00:30:10,840 --> 00:30:13,220 Men på denne måde er det mere fokuseret og mere ved hånden. 696 00:30:13,220 --> 00:30:15,928 >> Vi har også en tendens til at integrere i problemer sætter tingene kaldes walkthroughs. 697 00:30:15,928 --> 00:30:20,790 Så næsten alle de eksempler, jeg gør i foredrag på scenen her, vi også 698 00:30:20,790 --> 00:30:24,565 har skudt på kameraet i fremme en mere langsommere, 699 00:30:24,565 --> 00:30:28,760 en mere intim gennemgang af mig på min laptop af denne kodeks, linje for linje 700 00:30:28,760 --> 00:30:31,427 således at der i klassen, vil vi ofte skimme noget eller nogen 701 00:30:31,427 --> 00:30:33,260 vil indskyde med en svar på et spørgsmål. 702 00:30:33,260 --> 00:30:35,820 Men det betyder ikke nødvendigvis synke i for alle i publikum. 703 00:30:35,820 --> 00:30:38,230 Så finder du koden walkthroughs for de fleste af eksemplerne 704 00:30:38,230 --> 00:30:40,950 at vi gør her i foredrag, så du kan gå igennem det i dit eget tempo 705 00:30:40,950 --> 00:30:43,580 og spole frem eller tilbage eller springe helt, hvis du gerne vil. 706 00:30:43,580 --> 00:30:45,356 >> Der er ofte et par Warm-up spørgsmål, 707 00:30:45,356 --> 00:30:47,105 bede dig om at sortere i styrke dette materiale 708 00:30:47,105 --> 00:30:50,250 og sørg for, at du er comfy før du fortsætte med resten af ​​pset. 709 00:30:50,250 --> 00:30:51,700 Og så, selvfølgelig, der er den pset selv. 710 00:30:51,700 --> 00:30:53,450 Og en af ​​de ting, vi meget bevidst 711 00:30:53,450 --> 00:30:57,202 gøre i CS50 er næsten hver uinteressant eller intellektuelt uinteressant 712 00:30:57,202 --> 00:30:58,910 mekanisk skridt, du måske nødt til at gøre 713 00:30:58,910 --> 00:31:00,519 er næsten altid meget veldokumenteret. 714 00:31:00,519 --> 00:31:03,560 I løbet af udtrykket, vi får begynder at spørge mere retoriske spørgsmål 715 00:31:03,560 --> 00:31:06,187 gerne huske, hvordan man gør dette eller hint? 716 00:31:06,187 --> 00:31:08,520 Men generelt, kan du finde at problemet sæt får du 717 00:31:08,520 --> 00:31:10,269 gennem mekanik af noget, så 718 00:31:10,269 --> 00:31:14,160 de interessante, intellektuelle udfordringer er i sidste ende overladt til dig den studerende. 719 00:31:14,160 --> 00:31:17,390 >> Med det sagt, Zamyla, til hvem vi holdes i dag med henvisning i foredrag, 720 00:31:17,390 --> 00:31:20,190 er en af ​​vores mangeårige medarbejdere medlem, der også har walkthroughs 721 00:31:20,190 --> 00:31:24,520 på specifikke pset problemer som mario og grådige, men ikke vand i år. 722 00:31:24,520 --> 00:31:26,540 Og det er i dem, walkthroughs, at hun ofte 723 00:31:26,540 --> 00:31:29,450 tilbyder nogle tips og tricks til hvordan vi kommer videre, aldrig fortæller dig 724 00:31:29,450 --> 00:31:31,810 præcis hvad du skal gøre, men rather-- som en tilstand, 725 00:31:31,810 --> 00:31:35,200 Hvis du will-- giver dig mindst en par ideer, så det er op til dig, 726 00:31:35,200 --> 00:31:37,830 i sidste ende, at beslutte hvordan man griber dem. 727 00:31:37,830 --> 00:31:41,200 >> MARIA: Lidt ligesom et højt niveau forståelse af logikken i hvilke 728 00:31:41,200 --> 00:31:42,220 vi beder dig om at gøre. 729 00:31:42,220 --> 00:31:42,485 >> DAVID MALAN: Præcis. 730 00:31:42,485 --> 00:31:44,190 Og i virkeligheden, Zamyla s walkthroughs er beregnet 731 00:31:44,190 --> 00:31:46,190 at besvare det ofte stillede spørgsmålet om, hvor 732 00:31:46,190 --> 00:31:48,610 jeg begyndte, især når disse lange specifikationer er 733 00:31:48,610 --> 00:31:51,960 lidt skræmmende givet al tekst og billedsprog, som de har i dem. 734 00:31:51,960 --> 00:31:54,890 >> Så water.c, vil du finde efter du har fuldført den, 735 00:31:54,890 --> 00:31:56,920 er faktisk relativt ligetil. 736 00:31:56,920 --> 00:31:58,882 Absolut er en flok af jer kommer til at bang 737 00:31:58,882 --> 00:32:01,840 jeres hoveder mod muren forsøger at regne ud, hvorfor det ikke kompilere 738 00:32:01,840 --> 00:32:03,450 eller hvorfor det ikke kører korrekt. 739 00:32:03,450 --> 00:32:05,040 Men når du er færdig med det, og når du har 740 00:32:05,040 --> 00:32:07,620 brugt tid brydning med en hvilken som helst af de fejl, du måtte have, 741 00:32:07,620 --> 00:32:09,490 du opdage, at det er en meget kort program. 742 00:32:09,490 --> 00:32:11,770 Det kan gøres på blot et par linjer kode, hvoraf de fleste 743 00:32:11,770 --> 00:32:15,030 vi har set her i foredrag allerede, hvis du samle de rigtige byggesten. 744 00:32:15,030 --> 00:32:16,810 >> Og som vi foreslår her, det vil bede 745 00:32:16,810 --> 00:32:22,250 dig til at angive, hvor mange minutter er nogen, der tager et brusebad på campus. 746 00:32:22,250 --> 00:32:24,779 Vi angiver i problemet indstille hastigheden af ​​strømmen af ​​vand 747 00:32:24,779 --> 00:32:27,320 i, ligesom, en lav-flow bruser hoved, ligesom den Seinfeld klip 748 00:32:27,320 --> 00:32:29,180 vi så i går, eller det modsatte deraf. 749 00:32:29,180 --> 00:32:30,971 Og så er du bare nødt at gøre en smule matematik, 750 00:32:30,971 --> 00:32:34,710 really-- aritmetisk ved hjælp af C for at fortælle os, hvor mange, groft, flasker vand 751 00:32:34,710 --> 00:32:37,720 er, at der svarer til hvis vi er tage en n-minutters brusebad. 752 00:32:37,720 --> 00:32:41,389 >> Nu, i mario.c, det vil at være en smule længere program. 753 00:32:41,389 --> 00:32:42,930 Det er stadig ikke til at være så lang. 754 00:32:42,930 --> 00:32:45,130 Bare et par linjer længere end water.c. 755 00:32:45,130 --> 00:32:48,230 Men det vil være mulighed at genskabe den gamle skole Mario 756 00:32:48,230 --> 00:32:50,670 pyramide fra Super Mario Brødre eller nogle opfølgende. 757 00:32:50,670 --> 00:32:53,510 Det kommer ikke til at se ud som smukkere eller så farverig som, at man der. 758 00:32:53,510 --> 00:32:56,468 Vi er lige kommer til at bruge lidt hashtags ligesom vi har her på skærmen 759 00:32:56,468 --> 00:32:58,120 hjælp ASCII-tekst. 760 00:32:58,120 --> 00:33:00,362 Men det vil tilnærme den samme idé. 761 00:33:00,362 --> 00:33:02,570 Og det vil være en udøve denne ved første øjekast 762 00:33:02,570 --> 00:33:04,720 synes temmelig simple-- bare udskrive en simpel pyramide. 763 00:33:04,720 --> 00:33:07,345 Men der er et par karakteristika her, der er interessante. 764 00:33:07,345 --> 00:33:12,400 Bemærk, at den længst til højre kant pyramiden har faktisk bredde to. 765 00:33:12,400 --> 00:33:14,570 Så der er to ens højde kolonner, som 766 00:33:14,570 --> 00:33:16,804 gør det kræve lidt bit tanke at gøre 767 00:33:16,804 --> 00:33:19,720 at du får at helt rigtigt, som modsætning til blot en perfekt vinklet 768 00:33:19,720 --> 00:33:20,220 linje. 769 00:33:20,220 --> 00:33:23,340 Så det er lidt af et hjørne sag men matcher selve spillet. 770 00:33:23,340 --> 00:33:27,610 >> Og det er også ikke-indlysende ved første blik, hvordan du udskriver hvide rum. 771 00:33:27,610 --> 00:33:29,430 Så når jeg ser på den prøve output her-- 772 00:33:29,430 --> 00:33:32,440 og det er også i spec-- det slags ligner et rektangel, 773 00:33:32,440 --> 00:33:35,120 men en diagonal af rektangel er blevet hugget, 774 00:33:35,120 --> 00:33:37,320 og det er bare hvide rum, så at sige. 775 00:33:37,320 --> 00:33:40,100 Og så en ofte stillede Spørgsmålet her er altid godt, 776 00:33:40,100 --> 00:33:43,302 hvordan kan jeg flytte hashtags over til højre? 777 00:33:43,302 --> 00:33:44,760 Eller hvordan kan jeg udskrive de tomme rum? 778 00:33:44,760 --> 00:33:46,860 Og det er faktisk nemmere end de fleste studerende tror. 779 00:33:46,860 --> 00:33:47,360 Højre? 780 00:33:47,360 --> 00:33:51,620 Du kan tilnærme det visuelt ved blot rammer mellemrumstasten én eller to gange 781 00:33:51,620 --> 00:33:52,700 eller tre gange. 782 00:33:52,700 --> 00:33:56,260 >> Og så selvom med printf vi næsten altid udskrive en streng eller en int 783 00:33:56,260 --> 00:33:59,950 eller et ord som "Hej, verden "eller en række af ord, 784 00:33:59,950 --> 00:34:03,560 du kan også bare udskrive tilbud, plads, citat slut. 785 00:34:03,560 --> 00:34:06,320 Og der vil faktisk give du en hvid plads der. 786 00:34:06,320 --> 00:34:08,330 Så holder det i tankerne, og ikke overthink dette. 787 00:34:08,330 --> 00:34:10,570 Du er virkelig nødt til at beslutte række for række for række, 788 00:34:10,570 --> 00:34:14,280 ikke ulig dit eksempel en øjeblik siden, hvor mange af dem, 789 00:34:14,280 --> 00:34:18,420 kolonner skal være hvide rum og hvor mange af dem bør være hashtags. 790 00:34:18,420 --> 00:34:21,560 Det vil tage lidt tid, men det er i sidste ende en logik puslespil slags. 791 00:34:21,560 --> 00:34:22,060 >> MARIA: Ja. 792 00:34:22,060 --> 00:34:25,060 Men logikken for at gå række efter række kommer til at være meget nyttigt her. 793 00:34:25,060 --> 00:34:25,810 DAVID MALAN: Ja. 794 00:34:25,810 --> 00:34:28,976 Jeg tror, ​​at prøven kode, du gave-- selv selvom det ikke var et komplet program. 795 00:34:28,976 --> 00:34:34,247 Du har stadig brug int og vigtigste og ugyldige og # include stdio.h, 796 00:34:34,247 --> 00:34:35,580 en masse af de ting fra foredraget. 797 00:34:35,580 --> 00:34:37,629 Men byggestenene synes at være der. 798 00:34:37,629 --> 00:34:39,920 Og så endelig er noget lidt mere algoritmisk. 799 00:34:39,920 --> 00:34:43,210 Så det viser sig, at hver gang du gå i CVS eller nærbutik 800 00:34:43,210 --> 00:34:47,810 og nogen hænder du på kasserer regninger eller mønter som forandring, 801 00:34:47,810 --> 00:34:50,620 det viser sig, at de, mennesker, uanset om de ved det eller ej, 802 00:34:50,620 --> 00:34:53,300 sandsynligvis ved hjælp af, hvad der er kaldes en grådig algoritme, 803 00:34:53,300 --> 00:34:58,170 hvorved hvis du er skyldte, siger, $ 21 i ændring, fordi en eller anden grund 804 00:34:58,170 --> 00:35:01,580 du har købt noget meget billig med en meget stor regning på CVS, 805 00:35:01,580 --> 00:35:05,910 det ville være virkelig irriterende, hvis kasserer gav dig 21 singler, eller, værre 806 00:35:05,910 --> 00:35:07,629 endnu, en hel masse mønter. 807 00:35:07,629 --> 00:35:10,670 Snarere, hvad en fornuftig person er sandsynligvis vil gøre, er at de kommer 808 00:35:10,670 --> 00:35:14,224 at få fat i en $ 20- og derefter en $ 1-regningen, og hånd du blot to regninger i denne sag. 809 00:35:14,224 --> 00:35:17,390 MARIA: Så de søger at minimere den ændring, de giver tilbage til dig. 810 00:35:17,390 --> 00:35:17,850 DAVID MALAN: Præcis. 811 00:35:17,850 --> 00:35:19,540 Og samme deal med mønter, så godt. 812 00:35:19,540 --> 00:35:23,040 Hvis du skylder, siger, $ 0,50, forhåbentlig du ikke ønsker 50 øre. 813 00:35:23,040 --> 00:35:25,500 Man i stedet ønsker to kvartaler, for eksempel. 814 00:35:25,500 --> 00:35:27,540 Nu, dette gør antager at kassereren har 815 00:35:27,540 --> 00:35:29,940 nok af enhver pålydende værdi, der han eller hun måske ønsker at give dig. 816 00:35:29,940 --> 00:35:32,148 Men vi giver dig mulighed for at påtage sig lige så meget i problemet. 817 00:35:32,148 --> 00:35:35,590 Og målet i sidste ende, er at gennemføre i C-kode en grådig algoritme. 818 00:35:35,590 --> 00:35:37,344 Så brugeren er tilladt at skrive, hvor meget 819 00:35:37,344 --> 00:35:40,510 ændre han eller hun skylder med dollars og cents, en slags flydende komma 820 00:35:40,510 --> 00:35:41,590 værdi sandsynligvis. 821 00:35:41,590 --> 00:35:45,530 Og så er du nødt til at gøre det math og finde ud af algoritmisk, godt, 822 00:35:45,530 --> 00:35:49,020 hvor mange mønter kan jeg give du minimalt at give dig 823 00:35:49,020 --> 00:35:50,270 præcis det beløb af forandring. 824 00:35:50,270 --> 00:35:53,470 Men der vil være en få tricky dele her, ikke? 825 00:35:53,470 --> 00:35:56,236 Ligesom der er det hele unøjagtighed problem. 826 00:35:56,236 --> 00:35:56,860 MARIA: Præcis. 827 00:35:56,860 --> 00:35:59,114 Så floating point værdier har upræcise. 828 00:35:59,114 --> 00:36:00,780 Har vi taler om dette i forelæsning i dag? 829 00:36:00,780 --> 00:36:02,340 >> DAVID MALAN: Vi gjorde det sidste gang i forelæsning. 830 00:36:02,340 --> 00:36:03,506 Vi talte om unøjagtighed. 831 00:36:03,506 --> 00:36:08,840 Og du ikke ønsker at snyde brugeren hvor meget forandring, han eller hun skylder. 832 00:36:08,840 --> 00:36:11,290 Og så walkthrough, i problemet sæt specifikationer, 833 00:36:11,290 --> 00:36:15,990 give nogle tanker, i sidste ende, at hvordan du kan mindske dem unøjagtighed 834 00:36:15,990 --> 00:36:17,280 fejl, potentielt. 835 00:36:17,280 --> 00:36:21,050 Det kan undgås, i hvert fald, for de input, vi taler om. 836 00:36:21,050 --> 00:36:23,590 Og faktisk pennies-- måske vi udskyde til Zamyla, 837 00:36:23,590 --> 00:36:25,136 Jeg tror, ​​for de tricks der. 838 00:36:25,136 --> 00:36:27,760 Så i sidste ende, vil du finde en progression af problemer i denne uge, 839 00:36:27,760 --> 00:36:30,700 hvoraf den første er temmelig lille, derefter medium, så en lidt større. 840 00:36:30,700 --> 00:36:33,200 Men alle dem bruger bygningen blokke fra denne sidste uge, 841 00:36:33,200 --> 00:36:35,280 fra dette supersection, problem sæt specifikationer 842 00:36:35,280 --> 00:36:36,710 sætter dig på utallige ressourcer. 843 00:36:36,710 --> 00:36:41,000 Men stadig, hvis overhovedet kæmper, især blandt de mindre behagelige 844 00:36:41,000 --> 00:36:42,917 uden forudgående baggrund kommer til kontortid 845 00:36:42,917 --> 00:36:44,958 mandag og tirsdag og Onsdag og torsdag. 846 00:36:44,958 --> 00:36:46,950 Gå til CS50 Diskuter via kursets hjemmeside, 847 00:36:46,950 --> 00:36:49,080 via hvilken du kan chatte med personale og klassekammerater. 848 00:36:49,080 --> 00:36:51,670 >> Men i sidste ende, jeg tror bedste råd er bare starte tidligt. 849 00:36:51,670 --> 00:36:54,711 Det er ikke den slags klassen, som du bør starte psets på onsdag 850 00:36:54,711 --> 00:36:56,640 nat, eller værre torsdag aften. 851 00:36:56,640 --> 00:36:59,067 >> MARIA: Mit bedste råd er at have startet med mandag. 852 00:36:59,067 --> 00:36:59,900 DAVID MALAN: mandag. 853 00:36:59,900 --> 00:37:02,490 Så hvis du ikke har startet already-- nej. 854 00:37:02,490 --> 00:37:04,732 Men selv om det ikke mandag så tirsdag. 855 00:37:04,732 --> 00:37:05,690 Jo tidligere jo bedre. 856 00:37:05,690 --> 00:37:08,605 Og det er grunden til den Kurset har så mange sene dage er 857 00:37:08,605 --> 00:37:10,535 at give dig lidt af en psykisk pres 858 00:37:10,535 --> 00:37:13,684 at starte tidligere, men stadig lade tingene glider, når tingene tager længere tid 859 00:37:13,684 --> 00:37:14,350 end du forventer. 860 00:37:14,350 --> 00:37:17,950 >> MARIA: Og du ønsker at gøre brug af kontortid så meget som du kan, også. 861 00:37:17,950 --> 00:37:20,291 >> DAVID MALAN: Eventuelle spørgsmål? 862 00:37:20,291 --> 00:37:20,790 Okay. 863 00:37:20,790 --> 00:37:22,930 Tja, hvorfor vi ikke udsætte her? 864 00:37:22,930 --> 00:37:23,487