1 00:00:00,000 --> 00:00:03,353 >> [MUSIK SPELA] 2 00:00:03,353 --> 00:00:04,842 3 00:00:04,842 --> 00:00:06,050 DAVID MALAN: Hej, alla. 4 00:00:06,050 --> 00:00:07,777 Detta är CS50: s supersection. 5 00:00:07,777 --> 00:00:09,860 Tilldelade Sektioner kommer inte start för en vecka. 6 00:00:09,860 --> 00:00:11,580 Och så idag, jag är här with-- 7 00:00:11,580 --> 00:00:12,122 >> MARIA: Maria. 8 00:00:12,122 --> 00:00:14,163 DAVID MALAN: --to faktiskt ta en titt på problem 9 00:00:14,163 --> 00:00:16,110 ställa in ett, kursens första veckorna av material, 10 00:00:16,110 --> 00:00:19,780 få dig orienterad med CS50 IDE, lite Linux, det operativsystem som är 11 00:00:19,780 --> 00:00:22,290 körs på IDE, samt titta på några av övergången 12 00:00:22,290 --> 00:00:25,730 från Scratch C ledande upp till problembild en. 13 00:00:25,730 --> 00:00:28,340 >> Så utan vidare, i problembild en, 14 00:00:28,340 --> 00:00:30,520 du kommer att vara presenterad för CS50 IDE, som 15 00:00:30,520 --> 00:00:33,230 Detta webbaserade programmering miljö som vi använder för 16 00:00:33,230 --> 00:00:34,280 att skriva program. 17 00:00:34,280 --> 00:00:37,280 Det har utformats för att se mycket påminner om en typisk dator 18 00:00:37,280 --> 00:00:39,430 system som kör ett operativsystem system som kallas Linux. 19 00:00:39,430 --> 00:00:42,440 Men det är i så kallade molnet, vilket innebär att alla i klassen 20 00:00:42,440 --> 00:00:45,100 kan faktiskt ha hans eller hennes egen räkning och använda det, liksom. 21 00:00:45,100 --> 00:00:48,950 >> Så de flesta av er har förmodligen aldrig använt en Linuxmiljö före eller kanske 22 00:00:48,950 --> 00:00:50,447 även en kommandorad miljö. 23 00:00:50,447 --> 00:00:52,280 Och en kommandorad miljön är annorlunda. 24 00:00:52,280 --> 00:00:53,200 Det är all text. 25 00:00:53,200 --> 00:00:54,730 Det är alla tangentbordskommandon. 26 00:00:54,730 --> 00:00:59,480 Och det är ingen Mousing, inga ikoner, ingen dialog fönster, inga menyer. 27 00:00:59,480 --> 00:01:00,212 Det är rent text. 28 00:01:00,212 --> 00:01:01,920 Så i början, det slags av känns som ett steg 29 00:01:01,920 --> 00:01:04,434 bakåt i fråga om finess. 30 00:01:04,434 --> 00:01:06,600 Men det slutar upp att vara en hel del mer kraftfull, förvisso, 31 00:01:06,600 --> 00:01:08,510 för datavetare, i slutändan. 32 00:01:08,510 --> 00:01:09,540 >> Så låt oss ta en titt. 33 00:01:09,540 --> 00:01:13,850 Här är jag på CS50.io, via vilken du kan logga in på CS50 IDE. 34 00:01:13,850 --> 00:01:17,414 Och ungefär som i Scratch, det finns tre huvudområden till den här skärmen. 35 00:01:17,414 --> 00:01:20,080 Så på vänster sida, vi har vad blir filhanteraren. 36 00:01:20,080 --> 00:01:22,413 Och det finns denna mapp på topp, som är just nu tom 37 00:01:22,413 --> 00:01:24,690 eftersom jag blev av alla mina filer innan supersection. 38 00:01:24,690 --> 00:01:27,599 Och det är där vi ska Spara C-filer som vi skriver. 39 00:01:27,599 --> 00:01:30,890 Längst upp till höger, har vi en plats där all vår kod kommer att bli skriven. 40 00:01:30,890 --> 00:01:34,610 Och faktiskt, om jag klickar på den här plus, detta kommer att låta mig välja Ny fil. 41 00:01:34,610 --> 00:01:38,310 Och här kan jag börja skriva C-kod eller, verkligen, ett antal andra språk. 42 00:01:38,310 --> 00:01:42,670 >> Och sedan i botten där det säger jharvard @ ide50-- och din vilja 43 00:01:42,670 --> 00:01:45,080 säga något lite different-- vad detta kallas? 44 00:01:45,080 --> 00:01:48,644 45 00:01:48,644 --> 00:01:49,310 Terminalfönster. 46 00:01:49,310 --> 00:01:49,570 Ja. 47 00:01:49,570 --> 00:01:51,810 Så terminalfönstret är den så kallade kommandorad 48 00:01:51,810 --> 00:01:55,540 gränssnitt som du kan interagera med det underliggande operativsystemet. 49 00:01:55,540 --> 00:01:58,220 Och nu ska vi till gör mycket liten nytta av this-- 50 00:01:58,220 --> 00:02:01,170 bara för att sammanställa, för att titta på felmeddelanden som vi ser, 51 00:02:01,170 --> 00:02:02,347 och att köra våra program. 52 00:02:02,347 --> 00:02:04,680 Men i slutändan kommer vi att göra så mycket mer, liksom. 53 00:02:04,680 --> 00:02:07,490 Och du kan även installera program och administrera din arbetsyta 54 00:02:07,490 --> 00:02:09,066 inom CS50 IDE, liksom. 55 00:02:09,066 --> 00:02:10,440 Men mer om det en annan gång. 56 00:02:10,440 --> 00:02:12,689 >> Så låt oss gå vidare och skriva ett mycket enkelt program bara 57 00:02:12,689 --> 00:02:15,064 att gå igenom en uppvärmning av hej.c, som kanske är 58 00:02:15,064 --> 00:02:16,480 det enklaste program som vi kan skriva. 59 00:02:16,480 --> 00:02:18,330 Jag har redan öppnat en ny flik. 60 00:02:18,330 --> 00:02:24,310 Jag kommer att gå vidare och säga innehålla standard io.h. 61 00:02:24,310 --> 00:02:25,325 Sedan int main (void). 62 00:02:25,325 --> 00:02:28,930 63 00:02:28,930 --> 00:02:35,200 Och sedan printf ("hello, world" bakstreck n, nära citationstecken, 64 00:02:35,200 --> 00:02:39,480 nära parenteser och semikolon. 65 00:02:39,480 --> 00:02:39,990 >> Okej. 66 00:02:39,990 --> 00:02:41,700 Så nu märker mitt fönster är untitled. 67 00:02:41,700 --> 00:02:44,840 Så jag väldigt snabbt gå att gå upp till Arkiv, Spara. 68 00:02:44,840 --> 00:02:46,910 Och det är viktigt att Jag kallar det inte "Hej." 69 00:02:46,910 --> 00:02:49,243 Så en mycket vanligt misstag, särskilt i problembild en, 70 00:02:49,243 --> 00:02:52,530 är att misstag bara ringa upp din programmet "vatten" eller "giriga" eller "Mario" 71 00:02:52,530 --> 00:02:53,890 eller "kredit" eller liknande. 72 00:02:53,890 --> 00:02:55,970 Men du verkligen vill göra att du har filändelsen 73 00:02:55,970 --> 00:02:58,928 eftersom det är det enda sättet att kompilatorn och även kodeditorn 74 00:02:58,928 --> 00:03:00,710 vet att du är faktiskt skriva C-kod. 75 00:03:00,710 --> 00:03:02,280 Så låt mig gå vidare och klicka på Spara. 76 00:03:02,280 --> 00:03:05,710 >> Och nu också, vad CS50 IDE har gjort för oss är det också 77 00:03:05,710 --> 00:03:07,120 syntax markerat allt. 78 00:03:07,120 --> 00:03:08,822 Så det har gjort allt mycket färgglada. 79 00:03:08,822 --> 00:03:10,780 Och hela syftet med som inte fungerar. 80 00:03:10,780 --> 00:03:14,290 Det är bara att dra mina ögon till konceptuellt olika delar 81 00:03:14,290 --> 00:03:15,310 av detta program. 82 00:03:15,310 --> 00:03:17,570 Så låt oss gå vidare och sammanställa denna. 83 00:03:17,570 --> 00:03:19,490 Och jag kan sammanställa denna i ett par olika sätt. 84 00:03:19,490 --> 00:03:22,010 Och i vecka ett, den old-school sätt som vi gjorde 85 00:03:22,010 --> 00:03:26,250 Det var bokstavligen på kommandot line-- "klang hej.c." 86 00:03:26,250 --> 00:03:27,596 Och då jag trycker på Retur. 87 00:03:27,596 --> 00:03:29,720 Och ingenting verkar hända i terminalfönstret. 88 00:03:29,720 --> 00:03:32,654 Men vad gjorde förändringar i IDE? 89 00:03:32,654 --> 00:03:35,320 Om igen, IDE betyder bara Integrerad utvecklingsmiljö. 90 00:03:35,320 --> 00:03:38,360 Det är ett fint sätt att säga denna integrerade utveckling 91 00:03:38,360 --> 00:03:40,620 miljö för att utveckla programvara. 92 00:03:40,620 --> 00:03:42,477 Så vad gjorde förändringar i användargränssnittet? 93 00:03:42,477 --> 00:03:44,310 Vad gjorde du märker som är annorlunda, Maria? 94 00:03:44,310 --> 00:03:47,100 >> MARIA: Jag märkte något under IDE50 mapp upp här. 95 00:03:47,100 --> 00:03:47,850 >> DAVID MALAN: Ja. 96 00:03:47,850 --> 00:03:50,230 Så här uppe, inte bara vi har "hej.c." 97 00:03:50,230 --> 00:03:53,120 Vi har också "a.out", som är typ av en dum namn för ett program. 98 00:03:53,120 --> 00:03:56,430 Men i själva verket är det standardnamn för en programmet när du bara kompilera din kod 99 00:03:56,430 --> 00:03:59,110 och inte tala om för kompilatorn vilken fil till utgång. 100 00:03:59,110 --> 00:04:01,790 Så om jag vill köra, jag måste tala om compiler-- 101 00:04:01,790 --> 00:04:05,340 eller rättare sagt, jag behöver berätta arbetsytan som jag 102 00:04:05,340 --> 00:04:09,780 vill köra program som kallas "a.out." 103 00:04:09,780 --> 00:04:10,550 Ange. 104 00:04:10,550 --> 00:04:12,474 Och det finns "hej, värld. "nu" ./ ". 105 00:04:12,474 --> 00:04:13,390 är faktiskt viktigt. 106 00:04:13,390 --> 00:04:16,050 Även om normalt bara vi skriva namnen på kommandon, 107 00:04:16,050 --> 00:04:19,060 när det är ett program som du har skriftligt, vill du säga "./" 108 00:04:19,060 --> 00:04:22,460 eftersom det uttryckligen talar om Linux att du vill köra ett program som heter 109 00:04:22,460 --> 00:04:26,930 "a.out" det är i det här, där dot innebär denna katalog att jag är för närvarande 110 00:04:26,930 --> 00:04:31,600 i, vilket råkar vara kallad arbetsyta "a.out. 111 00:04:31,600 --> 00:04:35,410 För om jag sa bara "a.out" Enter, Jag kommer att få "a.out kommandot inte 112 00:04:35,410 --> 00:04:38,035 hittade "eftersom computer-- eftersom jag uppfann "a.out;" 113 00:04:38,035 --> 00:04:40,910 Det kom inte med computer-- inte vet var du ska leta efter det, 114 00:04:40,910 --> 00:04:43,590 även om det är rätt under min näsa, så att säga. 115 00:04:43,590 --> 00:04:44,090 OK. 116 00:04:44,090 --> 00:04:49,910 Så vi kan ändra det till vara "klang -o hej hej.c." 117 00:04:49,910 --> 00:04:53,030 Och om jag slog in, vilket program kommer detta att utgång för mig? 118 00:04:53,030 --> 00:04:55,710 Vad är namnet på filen? 119 00:04:55,710 --> 00:04:57,500 Ja, på baksidan. 120 00:04:57,500 --> 00:04:58,479 Det är rätt. "Hallå." 121 00:04:58,479 --> 00:05:00,520 Så "hello" kommer att vara namnet på programmet 122 00:05:00,520 --> 00:05:04,610 eftersom vi har använt en så kallad kommandoraden argument, som är bara 123 00:05:04,610 --> 00:05:08,120 ett sätt att ändra beteende kompilatorn faktiskt utgång 124 00:05:08,120 --> 00:05:09,450 ett specifikt filnamn. 125 00:05:09,450 --> 00:05:12,400 Och faktiskt, om jag zooma ut och titta upp här, 126 00:05:12,400 --> 00:05:17,430 nu har jag inte bara "a.out" och "hej.c", men även "Hej," liksom. 127 00:05:17,430 --> 00:05:22,410 Så nu kan jag göra "./hello," Enter. 128 00:05:22,410 --> 00:05:23,640 Och det finns "Hello, World." 129 00:05:23,640 --> 00:05:25,640 Men lastly-- och detta kommer nu att konventionen 130 00:05:25,640 --> 00:05:27,590 vi använder hela termin, typically-- 131 00:05:27,590 --> 00:05:30,070 är du kan också bara säga "gör hej." 132 00:05:30,070 --> 00:05:33,370 Och faktiskt, det säger det är upp hittills, eftersom det redan finns. 133 00:05:33,370 --> 00:05:37,860 Låt mig gå vidare och ta bort, med rm kommandot, både "a.out" - 134 00:05:37,860 --> 00:05:39,644 och säga "ta bort vanlig fil a.out?" 135 00:05:39,644 --> 00:05:41,810 Det betyder bara, är du säker på att du vill ta bort det? 136 00:05:41,810 --> 00:05:42,880 Jag kommer att säga ja. 137 00:05:42,880 --> 00:05:46,690 Och sedan kommer jag att ta bort "Hej", men inte "hej.c." 138 00:05:46,690 --> 00:05:49,920 Jag kommer att säga "ja" explicit, men "y" är tillräcklig, liksom. 139 00:05:49,920 --> 00:05:52,140 >> Och nu märker om jag skriver ls-- som minns, 140 00:05:52,140 --> 00:05:55,540 innebär list-- det listar alla av filerna i min mapp. 141 00:05:55,540 --> 00:05:57,850 Och faktiskt, om jag zooma ut och titta på övre vänstra, 142 00:05:57,850 --> 00:05:59,730 Det bekräftar att det är i denna mapp, även 143 00:05:59,730 --> 00:06:04,990 om det är märkt som IDE50 upp här och inte arbetsyta, det är bara "hej.c." 144 00:06:04,990 --> 00:06:09,152 Så nu här nere, om jag gör "make hello," Enter, 145 00:06:09,152 --> 00:06:12,360 nu ser jag en mycket längre kommando men en mer sofistikerade kommando som händer 146 00:06:12,360 --> 00:06:13,940 att vara användbara i de kommande veckorna. 147 00:06:13,940 --> 00:06:16,720 Och nu kan jag säga "./hello." 148 00:06:16,720 --> 00:06:19,257 >> Så låt oss ta en snabb rundtur någon annan Linux-kommandon. 149 00:06:19,257 --> 00:06:21,840 Varför tar vi inte ett steg tillbaka och faktiskt titta på C mer 150 00:06:21,840 --> 00:06:25,020 allmänhet, övergår från Scratch C, och sedan avslutas med en blick 151 00:06:25,020 --> 00:06:27,305 vid det första problemet som i C. Okej. 152 00:06:27,305 --> 00:06:30,430 Så jag kommer att gå vidare och bara ren upp min arbetsyta med kontroll-L bara 153 00:06:30,430 --> 00:06:31,429 att hålla skärmen ren. 154 00:06:31,429 --> 00:06:33,520 Men det har ingen funktionell påverka något annat. 155 00:06:33,520 --> 00:06:35,820 >> Minns att vi har sett några kommandon nu. 156 00:06:35,820 --> 00:06:39,900 Så vi har sett klang, som i allmänhet du kommer inte att köra manuellt längre. 157 00:06:39,900 --> 00:06:41,650 Vi ska istället använda make. 158 00:06:41,650 --> 00:06:45,290 Men vi såg även ls, som visar en lista över filerna i min katalog. 159 00:06:45,290 --> 00:06:48,750 Och nu varför är there-- det är två filer nu, "hej" och "hej.c." 160 00:06:48,750 --> 00:06:52,240 Varför finns det en stjärna eller en asterisk efter "hej"? 161 00:06:52,240 --> 00:06:54,900 Vad gjorde att betyda, baserat på vad vi såg i veckan en? 162 00:06:54,900 --> 00:06:58,852 163 00:06:58,852 --> 00:07:00,400 Vad tror du? 164 00:07:00,400 --> 00:07:02,742 Vad gör stjärnan betyda? 165 00:07:02,742 --> 00:07:04,614 >> MARIA: For-- programmet "hello"? 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, ja? 169 00:07:07,760 --> 00:07:08,639 Åh, körbar. 170 00:07:08,639 --> 00:07:09,180 Det är rätt. 171 00:07:09,180 --> 00:07:10,890 Så det innebär att "hello" är körbar. 172 00:07:10,890 --> 00:07:13,430 Så ja, det är därför Jag kan göra "./hello." 173 00:07:13,430 --> 00:07:13,930 Okej. 174 00:07:13,930 --> 00:07:15,179 Så vad mer kan jag göra här? 175 00:07:15,179 --> 00:07:17,290 Tja, visar det sig att jag kan även skapa kataloger. 176 00:07:17,290 --> 00:07:20,924 Så låt mig gå vidare och skapa, exempelvis en "pset1" katalogen. 177 00:07:20,924 --> 00:07:23,590 Och problemet specifikations kommer att få dig att göra just detta, 178 00:07:23,590 --> 00:07:25,260 så att du inte behöver komma ihåg i dag. 179 00:07:25,260 --> 00:07:27,340 Men "mkdir pset1" verkar ha någon inverkan. 180 00:07:27,340 --> 00:07:30,540 Men återigen, inget felmeddelande är i allmänhet en bra sak. 181 00:07:30,540 --> 00:07:34,060 Så om jag skriver "ls" now-- ah, nu Jag har en körbar fil som heter 182 00:07:34,060 --> 00:07:36,570 "Hej", en C-fil som heter "hej.c." 183 00:07:36,570 --> 00:07:40,860 Och sedan snedstreck, så att tala, innebär att detta är en katalog. 184 00:07:40,860 --> 00:07:42,510 >> Så ja, nu vill jag öppna det. 185 00:07:42,510 --> 00:07:45,730 Och jag tror inte dubbelklicka på det som i ett GUI, en grafisk miljö. 186 00:07:45,730 --> 00:07:48,550 Jag istället säga "cd pset1." 187 00:07:48,550 --> 00:07:49,640 Ange. 188 00:07:49,640 --> 00:07:53,100 Inget intressant verkar ha hände utom min lilla prompten 189 00:07:53,100 --> 00:07:57,300 här-- detta är Linux sätt att påminna mig där jag är, så vad mappen är öppen. 190 00:07:57,300 --> 00:08:00,080 Det är bara talar om för mig uttryckligen i motsats till grafiskt. 191 00:08:00,080 --> 00:08:05,100 Och om jag skriver "ls" varför jag ser en annan uppmana omedelbart, tror du, 192 00:08:05,100 --> 00:08:07,269 när jag visa innehållet i pset1? 193 00:08:07,269 --> 00:08:09,310 MARIA: Du behöver antagligen inte har något där inne. 194 00:08:09,310 --> 00:08:09,630 DAVID MALAN: Ja. 195 00:08:09,630 --> 00:08:11,510 Så då har vi uppenbarligen inte skapade något i det 196 00:08:11,510 --> 00:08:13,150 eftersom jag just skapade katalogen. 197 00:08:13,150 --> 00:08:17,690 Nu, om jag ville skapa en file-- för Exempelvis kunde jag skapa en ny fil. 198 00:08:17,690 --> 00:08:20,190 Och då kunde jag gå till Spara och spara den som, 199 00:08:20,190 --> 00:08:23,090 som "mario.c" om du gör standardversionen av pset en. 200 00:08:23,090 --> 00:08:27,610 Och sedan, precis som alla Mac eller PC, bara Välj mappen "pset1, Spara. 201 00:08:27,610 --> 00:08:28,740 Och nu filen är tom. 202 00:08:28,740 --> 00:08:31,160 Men låt oss zooma in igen för en sekund. 203 00:08:31,160 --> 00:08:32,470 Låt oss göra ls här. 204 00:08:32,470 --> 00:08:34,470 Nu ser vi "mario.c". 205 00:08:34,470 --> 00:08:37,850 >> Så det finns några andra kommandon som är värt att hålla i minnet över time-- 206 00:08:37,850 --> 00:08:41,200 klar, eller Ctrl-L är vad jag har varit slår; mkdir vi har sett; 207 00:08:41,200 --> 00:08:45,240 rm vi har sett, liksom, som är för att ta bort eller radera en fil. 208 00:08:45,240 --> 00:08:49,310 Akta dig kan also-- och om du tittar på online tutorials, kommer du rm -rf 209 00:08:49,310 --> 00:08:52,630 är ett mycket vanligt sätt att säga ta bort en mapp som har saker i den. 210 00:08:52,630 --> 00:08:54,280 Bara vara super, super försiktig. 211 00:08:54,280 --> 00:08:58,780 -rf betyder rekursivt bort vad det är 212 00:08:58,780 --> 00:09:01,150 du försöker ta bort och våld ta bort den. 213 00:09:01,150 --> 00:09:04,630 Så rekursiva medel om det är en mapp med en mapp med en mapp med en mapp, 214 00:09:04,630 --> 00:09:05,690 radera dem alla. 215 00:09:05,690 --> 00:09:08,680 Och våld innebär inte ens frågar mig ja eller nej, jag säker? 216 00:09:08,680 --> 00:09:11,960 Så det är en super farlig sätt radera massor av saker snabbt. 217 00:09:11,960 --> 00:09:17,210 Men beware-- alltför ofta gör en orädd elev av misstag raderar, säg, pset 218 00:09:17,210 --> 00:09:18,000 en, till exempel. 219 00:09:18,000 --> 00:09:19,833 >> MARIA: Och om de bara gör -r, kommer de 220 00:09:19,833 --> 00:09:21,870 att be dem om varje enskild fil. 221 00:09:21,870 --> 00:09:22,790 >> DAVID MALAN: Vilket är måttligt irriterande. 222 00:09:22,790 --> 00:09:23,480 >> MARIA: Ja. 223 00:09:23,480 --> 00:09:25,813 >> DAVID MALAN: Så det är därför så många av oss, ingår själv, 224 00:09:25,813 --> 00:09:27,070 är i vanan att använda -rf. 225 00:09:27,070 --> 00:09:27,861 Men det är farligt. 226 00:09:27,861 --> 00:09:29,010 Så köparen akta. 227 00:09:29,010 --> 00:09:31,050 Och då mv är typ av intressant namngivna. 228 00:09:31,050 --> 00:09:33,600 Så detta är kommandot flytta, vilket känns lite konstigt 229 00:09:33,600 --> 00:09:37,260 eftersom du verkligen kan använda den för att flytta filer från en plats till en annan. 230 00:09:37,260 --> 00:09:39,970 Till exempel, antar att jag trasslat till. 231 00:09:39,970 --> 00:09:43,660 Antag att jag skapade en ny fil för pset. 232 00:09:43,660 --> 00:09:46,320 Och jag sparat den som "greedy.c." 233 00:09:46,320 --> 00:09:49,970 Men antar att jag av misstag spara den i IDE50-- så i min arbetsyta själv 234 00:09:49,970 --> 00:09:51,580 och inte i pset1. 235 00:09:51,580 --> 00:09:53,960 >> Du kan se så mycket uppe till vänster. 236 00:09:53,960 --> 00:09:55,284 Det finns "greedy.c." 237 00:09:55,284 --> 00:09:56,450 Och det finns några lösningar. 238 00:09:56,450 --> 00:09:58,324 Så en, kan jag använda super användarvänligt sätt 239 00:09:58,324 --> 00:09:59,740 för att bara dra och släppa den. 240 00:09:59,740 --> 00:10:01,910 Och det skulle faktiskt åtgärda problemet. 241 00:10:01,910 --> 00:10:04,967 Men i dag, vi försöker titta på de mer svårbegripliga men kraftfulla sätt 242 00:10:04,967 --> 00:10:05,550 att göra detta. 243 00:10:05,550 --> 00:10:07,880 Så låt mig ta "ls" i pset1. 244 00:10:07,880 --> 00:10:09,690 Och jag bara se "mario.c." 245 00:10:09,690 --> 00:10:13,450 Låt mig gå vidare och göra "cd ..". 246 00:10:13,450 --> 00:10:15,320 Så CD igen är förändring katalog. 247 00:10:15,320 --> 00:10:18,130 ".." Betyder vad, men? 248 00:10:18,130 --> 00:10:21,100 Förra gången jag sa "cd pset1 "att gå in pset1. 249 00:10:21,100 --> 00:10:24,360 Så när jag säger "cd ..", vad gör jag? 250 00:10:24,360 --> 00:10:24,910 Bakåt. 251 00:10:24,910 --> 00:10:25,150 Ja. 252 00:10:25,150 --> 00:10:26,750 >> Så det kommer att den så kallade överordnade. 253 00:10:26,750 --> 00:10:29,730 Gå en nivå upp, som spännande ur en mapp. 254 00:10:29,730 --> 00:10:30,500 Så Enter. 255 00:10:30,500 --> 00:10:31,900 Och faktiskt, ser vad det gjorde. 256 00:10:31,900 --> 00:10:37,070 Det berörde mig bara till arbetsytan istället av in pset1, som är i arbetsutrymmet. 257 00:10:37,070 --> 00:10:39,710 Och nu om jag skriver "ls", det finns en hel del saker. 258 00:10:39,710 --> 00:10:41,650 Där finns "greedy.c". 259 00:10:41,650 --> 00:10:48,720 Så nu vill jag använda mv att bokstavligen flytta "greedy.c" i pset1. 260 00:10:48,720 --> 00:10:51,120 Och så en hel del Linux-kommandon fungerar precis så här. 261 00:10:51,120 --> 00:10:54,470 De tar inga argument eller de tar en argument eller de tar två kommandorad 262 00:10:54,470 --> 00:10:55,449 argument och så vidare. 263 00:10:55,449 --> 00:10:57,240 Och i det här fallet, är det bokstavligen göra vad 264 00:10:57,240 --> 00:11:01,670 det står, om än succinctly-- flytta greedy.c in pset1. 265 00:11:01,670 --> 00:11:02,310 Ange. 266 00:11:02,310 --> 00:11:03,310 Ingenting verkar hända. 267 00:11:03,310 --> 00:11:06,180 Men om jag gör en ls igen, giriga är borta. 268 00:11:06,180 --> 00:11:12,437 Och om jag gör "cd pset1", Enter, och sedan Är igen, nu är det på rätt plats. 269 00:11:12,437 --> 00:11:14,270 Som en sidoreplik, om för vissa reason-- speciellt 270 00:11:14,270 --> 00:11:16,194 Om du har återkommande nätverksanslutning 271 00:11:16,194 --> 00:11:18,360 eller du går runt campus med din laptop lock 272 00:11:18,360 --> 00:11:20,180 stängd och sedan öppna upp igen och din arbetsplats 273 00:11:20,180 --> 00:11:21,730 verkar något ur synk, no big deal. 274 00:11:21,730 --> 00:11:23,646 Bara ladda din webbläsare fönster, och det ska 275 00:11:23,646 --> 00:11:26,339 omsynkronisering så att den vänstra filhanterare ser exakt 276 00:11:26,339 --> 00:11:27,380 som terminalfönstret. 277 00:11:27,380 --> 00:11:27,921 Oroa dig inte. 278 00:11:27,921 --> 00:11:31,460 När du är osäker, ladda om sidan, så länge du har sparat redan filerna. 279 00:11:31,460 --> 00:11:31,960 OK. 280 00:11:31,960 --> 00:11:34,710 Så mv kan också användas för att byta namn på filer. 281 00:11:34,710 --> 00:11:36,760 Och låt oss ta en titt på denna sista kommandot här. 282 00:11:36,760 --> 00:11:39,950 Så suppose-- och detta är super vanligt, även på ett tidigt stadium. 283 00:11:39,950 --> 00:11:46,400 Vissa elever ibland skapa en fil kallas, låt oss säga-- vad en annan? 284 00:11:46,400 --> 00:11:47,730 Som "WATER.C." 285 00:11:47,730 --> 00:11:51,080 Så jag ska bara skrika, för utan anledning, med stora bokstäver. 286 00:11:51,080 --> 00:11:53,190 Men detta är inte den korrekta namnet på filen 287 00:11:53,190 --> 00:11:56,660 om bara för att vårt problem set specifikation inte berätta 288 00:11:56,660 --> 00:11:59,430 att spara filen som alla caps "WATER.C." 289 00:11:59,430 --> 00:12:01,320 I stället räknar vi "water.c" med gemener. 290 00:12:01,320 --> 00:12:03,140 Och, i själva verket är detta problematiskt eftersom check50, 291 00:12:03,140 --> 00:12:04,370 ett program du kommer att mötas i problem 292 00:12:04,370 --> 00:12:07,350 ställa ett som automatiskt testar riktigheten av din kod 293 00:12:07,350 --> 00:12:11,615 kommer att skrika på dig om det inte kan hitta "water.c" i gemener. 294 00:12:11,615 --> 00:12:12,712 >> Så jag behöver för att fixa detta. 295 00:12:12,712 --> 00:12:14,920 Så många olika sätt att gör det, varav det första 296 00:12:14,920 --> 00:12:18,330 skulle vara att kontrollklicka eller högerklicka filnamnet och bara ändra Byt namn. 297 00:12:18,330 --> 00:12:19,740 Helt bra att göra det. 298 00:12:19,740 --> 00:12:21,820 Men återigen, i dag, låt oss gör det lite snyggare. 299 00:12:21,820 --> 00:12:26,680 Låt oss använda mv att ändra "WATER.C" till "water.c." 300 00:12:26,680 --> 00:12:30,690 Så kan du också använda det första argumentet att döpa om det till det andra argumentet 301 00:12:30,690 --> 00:12:34,455 Om det andra argumentet är inte i Faktum är att en mapp eller ett katalognamn. 302 00:12:34,455 --> 00:12:35,120 >> Okej. 303 00:12:35,120 --> 00:12:39,560 Och slutligen, lite trick-- så jag är i min arbetsyta katalog för tillfället. 304 00:12:39,560 --> 00:12:43,660 Om jag vill komma in pset en, Jag kan verkligen skriva "cd pset1." 305 00:12:43,660 --> 00:12:47,260 Men det är så jobbigt att skriva "pset1" eller längre filnamn eller katalognamn 306 00:12:47,260 --> 00:12:47,980 fortfarande. 307 00:12:47,980 --> 00:12:51,960 Så mycket ofta i Linux, vad du kan göra är att börja skriva "pse" 308 00:12:51,960 --> 00:12:56,100 och bara få uttråkad, slå Tab, och låt dator lista ut det för dig. 309 00:12:56,100 --> 00:12:58,190 Super bra att komma in i den vana. 310 00:12:58,190 --> 00:13:01,079 Den enda haken är om du har flera filer eller mappar som börjar 311 00:13:01,079 --> 00:13:02,870 med bokstaven "p" eller "ps" du kan ha 312 00:13:02,870 --> 00:13:05,525 att skriva några fler innan Datorn vet vad de ska göra. 313 00:13:05,525 --> 00:13:06,820 >> MARIA: Vi gillar genvägar. 314 00:13:06,820 --> 00:13:08,695 >> DAVID MALAN: Detta kommer spara så mycket tid. 315 00:13:08,695 --> 00:13:11,930 Och även, som vi sade i föreläsning, du kan bläddra i historien, upp och ner, 316 00:13:11,930 --> 00:13:15,461 att hitta nyligen avrättades kommandon, liksom. 317 00:13:15,461 --> 00:13:15,960 Okej. 318 00:13:15,960 --> 00:13:20,904 Så nu, låt oss vända vår uppmärksamhet tillbaka till ett enkelt program, hallå världen. 319 00:13:20,904 --> 00:13:22,195 Så vi har sammanställt denna exakt. 320 00:13:22,195 --> 00:13:24,050 Och nu varför vi inte tar titta på datatyper 321 00:13:24,050 --> 00:13:26,776 och sedan övergå från några motsvarande Scratch block till C. 322 00:13:26,776 --> 00:13:27,400 MARIA: Awesome. 323 00:13:27,400 --> 00:13:30,031 Så nu när du har börjat skriva program i C, 324 00:13:30,031 --> 00:13:32,530 vi kommer att börja prata om datatyper och variabler. 325 00:13:32,530 --> 00:13:37,570 Så vissa datatyper som du skulle vilja veta börjar nu 326 00:13:37,570 --> 00:13:39,400 är de som är markeras i blått. 327 00:13:39,400 --> 00:13:42,420 Så vi har int först, som står för heltal. 328 00:13:42,420 --> 00:13:46,075 Och det håller tal, som ni kan ha guessed-- så 1, 2, 3, 329 00:13:46,075 --> 00:13:47,950 och alla andra heltal att du kan tänka dig. 330 00:13:47,950 --> 00:13:48,730 >> DAVID MALAN: Och också negativ. 331 00:13:48,730 --> 00:13:50,220 >> MARIA: Och även negativa, yep. 332 00:13:50,220 --> 00:13:51,450 Och 0. 333 00:13:51,450 --> 00:13:54,250 Sedan har vi flottar, som är flyttal. 334 00:13:54,250 --> 00:13:58,360 Så det är alla reella tal som har decimaler. 335 00:13:58,360 --> 00:14:03,960 Så 5,0, 5,2, och ännu mer siffror efter decimalkommat, 336 00:14:03,960 --> 00:14:05,620 samt, och även negativa. 337 00:14:05,620 --> 00:14:07,530 Sedan har vi röding som är ett tecken. 338 00:14:07,530 --> 00:14:10,240 Så jag tror att vi pratade om detta i föreläsning idag. 339 00:14:10,240 --> 00:14:15,682 Men vi har bokstäver, till example-- A, B, C- som kan lagras som en röding. 340 00:14:15,682 --> 00:14:18,390 Men sedan har vi en hel del fler symboler som kan lagras som en röding. 341 00:14:18,390 --> 00:14:22,380 Och de lagras som ASCII. 342 00:14:22,380 --> 00:14:25,280 >> Och sedan har vi bool, vilka är Booleans. 343 00:14:25,280 --> 00:14:29,067 Och de utvärderas till Sant eller Falsk eller 1 respektive 0. 344 00:14:29,067 --> 00:14:31,650 DAVID MALAN: Och minns att bool kommer från CS50 biblioteket. 345 00:14:31,650 --> 00:14:33,300 Så det är inte inbyggd i C, men det är super bra 346 00:14:33,300 --> 00:14:34,850 att begreppet sant och falskt. 347 00:14:34,850 --> 00:14:36,990 Och även om du kan think-- kul faktum. 348 00:14:36,990 --> 00:14:43,700 En bool tekniskt behöver hur många bitar, verkligen, för att representera sant kontra falskt? 349 00:14:43,700 --> 00:14:47,910 Hur många bitar tror du du skulle behöva, maximalt? 350 00:14:47,910 --> 00:14:48,790 Ja, bara en. 351 00:14:48,790 --> 00:14:52,077 Så visar det sig att C kan inte ge dig bara en bit. 352 00:14:52,077 --> 00:14:54,160 Den minsta måttenhet du kan få är åtta. 353 00:14:54,160 --> 00:14:57,090 Så det är lite slösaktigt de du med användning av en hel bitgrupp, eller åtta bitar, 354 00:14:57,090 --> 00:14:58,340 att representera Sant eller falskt. 355 00:14:58,340 --> 00:15:01,807 Men det är precis som det är implementeras i C av CS50 biblioteket. 356 00:15:01,807 --> 00:15:04,890 MARIA: och sedan de som vi är inte kommer att tala om i så stor utsträckning 357 00:15:04,890 --> 00:15:08,060 rätt now-- dubbel, det är för större flottar. 358 00:15:08,060 --> 00:15:09,811 Lång lång och kort är också för heltal. 359 00:15:09,811 --> 00:15:10,643 DAVID MALAN: Faktiskt. 360 00:15:10,643 --> 00:15:13,190 I hacker upplagan av pset en, Vi använder faktiskt lång lång. 361 00:15:13,190 --> 00:15:15,801 Men för Standard Edition, det borde inte vara nödvändigt. 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 Så operators-- du bör vara förmodligen bekant med de flesta av dessa. 365 00:15:20,110 --> 00:15:22,620 Dessutom, +; subtraktion, -. 366 00:15:22,620 --> 00:15:24,070 För multiplikation, har vi *. 367 00:15:24,070 --> 00:15:25,900 Så inte X som vi brukar använda. 368 00:15:25,900 --> 00:15:27,840 Division, har vi det omvända snedstrecket. 369 00:15:27,840 --> 00:15:31,380 Och modulo är vår sista operatör som Vi kommer att prata om just nu. 370 00:15:31,380 --> 00:15:35,610 Det är en operatör som tillåter oss att ta resten av en division. 371 00:15:35,610 --> 00:15:40,630 Så om vi har 4% 2, 4 uppdelad med 2 är två med en återstod av 0. 372 00:15:40,630 --> 00:15:41,740 Så 4% 2 är 0. 373 00:15:41,740 --> 00:15:42,950 4% 3 är en. 374 00:15:42,950 --> 00:15:44,870 4% 5 är 4, som du kunde ha gissat. 375 00:15:44,870 --> 00:15:48,860 Och kom ihåg när man använder alla dessa operatörer att använda PEMDAS reglerna. 376 00:15:48,860 --> 00:15:54,060 >> DAVID MALAN: Så för att vara tydlig, om du gör 4% 2, varför är det 0, exakt? 377 00:15:54,060 --> 00:15:57,480 >> MARIA: Eftersom 4 dividerat med 2 är två med en återstod av 0. 378 00:15:57,480 --> 00:16:00,752 Så modulo ger oss om att resten som motsats till resultatet av divisionen. 379 00:16:00,752 --> 00:16:02,960 DAVID MALAN: Och faktiskt, vad vi hittar här till hjälp 380 00:16:02,960 --> 00:16:05,640 efter att i vissa problem det är inte nödvändigtvis en, 381 00:16:05,640 --> 00:16:08,040 Om du vill ha effekt att begränsa dig själv 382 00:16:08,040 --> 00:16:10,720 till en nummerserie som 0 till något, 383 00:16:10,720 --> 00:16:13,904 du kan använda modulo att linda runt tidigare än som 2 miljarder 384 00:16:13,904 --> 00:16:16,320 eller värdet 4 miljarder som Vi har pratat om i föreläsningen. 385 00:16:16,320 --> 00:16:16,870 >> MARIA: Ja. 386 00:16:16,870 --> 00:16:19,429 Och även i "giriga" vi kanske. 387 00:16:19,429 --> 00:16:21,345 DAVID MALAN: Ja, problem ange ett, liksom. 388 00:16:21,345 --> 00:16:22,520 MARIA: Ja, trevligt. 389 00:16:22,520 --> 00:16:24,340 DAVID MALAN: Bra tips. 390 00:16:24,340 --> 00:16:25,750 MARIA: Förlåt. 391 00:16:25,750 --> 00:16:28,590 Boolean expressions-- så för Boolean operatörer, 392 00:16:28,590 --> 00:16:31,770 Vi kommer att tala om alla av dessa som du ser här. 393 00:16:31,770 --> 00:16:35,310 Så just nu har vi två likhetstecken anges för jämlikar. 394 00:16:35,310 --> 00:16:38,650 Så de är för jämförelse. 395 00:16:38,650 --> 00:16:40,830 Hittills har vi bara sett en likhetstecken. 396 00:16:40,830 --> 00:16:44,870 Det är då vi tilldelar ett värde till en variabel. 397 00:16:44,870 --> 00:16:50,160 Så om vi har sett int n = 5, sedan Vi har tilldelat 5 till variabeln n. 398 00:16:50,160 --> 00:16:55,600 Men om vi vill använda == för jämförelse kan vi kontrollera om n == 5. 399 00:16:55,600 --> 00:16:58,310 Och om n == 5, då det är sant. 400 00:16:58,310 --> 00:17:01,950 >> Så Booleska operatorer tillåter oss, i princip, 401 00:17:01,950 --> 00:17:04,670 att utvärdera Boolean uttryck till Sant eller falskt. 402 00:17:04,670 --> 00:17:07,819 Så inte equals-- vi har utropstecken och jämlikar. 403 00:17:07,819 --> 00:17:14,240 Så kunde vi också kontrollera om n inte lika 5-- så n! = 5. 404 00:17:14,240 --> 00:17:17,640 Mindre än, mindre än eller lika med, större än, större än eller lika med, 405 00:17:17,640 --> 00:17:20,720 och sedan har vi den logiska OCH och logiska OR. 406 00:17:20,720 --> 00:17:24,060 Och de ger oss möjlighet att utvärdera flera booleska uttryck tillsammans 407 00:17:24,060 --> 00:17:27,930 att i princip komma tillsammans som en hel booleskt uttryck. 408 00:17:27,930 --> 00:17:34,970 Så om vi vill hitta ett nummer, säger, som är större än 5 men mindre än 15 409 00:17:34,970 --> 00:17:39,810 samtidigt, skulle vi använda den logiskt AND för att se om n är 410 00:17:39,810 --> 00:17:42,937 större än 5 && n mindre än 15. 411 00:17:42,937 --> 00:17:44,770 DAVID MALAN: Och här, också, det är verkligen lätt 412 00:17:44,770 --> 00:17:47,290 tidigt att oavsiktligt Använd bara en enda et-tecken 413 00:17:47,290 --> 00:17:48,572 eller en enda vertikal bar. 414 00:17:48,572 --> 00:17:51,280 Och förhoppningsvis kompilatorn kommer skrika på dig eftersom de faktiskt 415 00:17:51,280 --> 00:17:52,530 har en helt annan innebörd. 416 00:17:52,530 --> 00:17:55,660 För de nyfikna, de är används för bitvisa operationer, 417 00:17:55,660 --> 00:17:57,197 arbetar på enskilda bitar. 418 00:17:57,197 --> 00:17:58,780 Men du vill att par av dem här. 419 00:17:58,780 --> 00:18:01,560 Och super viktigt är att första, likhetstecknet, 420 00:18:01,560 --> 00:18:05,270 som är jämställdhets operatör motsats till uppdraget operatören. 421 00:18:05,270 --> 00:18:08,552 >> MARIA: Och det lodräta strecket är beläget mellan Delete och 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 amerikanskt tangentbord. 424 00:18:11,420 --> 00:18:13,190 >> MARIA: Japp. 425 00:18:13,190 --> 00:18:15,890 Så låt oss hoppa rätt in villkorssatser. 426 00:18:15,890 --> 00:18:18,300 I Scratch, du har redan sett, förmodligen, 427 00:18:18,300 --> 00:18:22,730 om uttalanden som gör att du kan kontrollera om något är sant, då 428 00:18:22,730 --> 00:18:23,660 göra något annat. 429 00:18:23,660 --> 00:18:28,410 Så du kan ha velat för att kontrollera om din sprite är 430 00:18:28,410 --> 00:18:31,410 vidröra någon annan sprite eller gränsen på skärmen. 431 00:18:31,410 --> 00:18:35,520 Och då kanske du har velat avsluta spelet eller göra något annat. 432 00:18:35,520 --> 00:18:40,000 Så syntax för att är "if (villkor)." 433 00:18:40,000 --> 00:18:46,820 Så om din sprite vidrör något, ska du är inne i klammerparentes. 434 00:18:46,820 --> 00:18:48,980 >> Sedan har vi if-else uttalanden. 435 00:18:48,980 --> 00:18:54,080 Else tillåter oss att göra något om villkoret att vi 436 00:18:54,080 --> 00:18:55,870 kontrollera i början är inte sant. 437 00:18:55,870 --> 00:19:01,530 Så om spriten vidrör gräns gör detta, annars göra något annat. 438 00:19:01,530 --> 00:19:04,030 Så annars göra något annat. 439 00:19:04,030 --> 00:19:07,530 Sedan har vi en kort exempel på detta. 440 00:19:07,530 --> 00:19:11,551 Så om (military_time <12), vi vill printf "God morgon!" 441 00:19:11,551 --> 00:19:13,300 Annars ska vi printf "God afton!" 442 00:19:13,300 --> 00:19:14,860 Grundläggande exempel. 443 00:19:14,860 --> 00:19:15,680 >> DAVID MALAN: Good. 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 uttalanden. 446 00:19:18,560 --> 00:19:21,960 Växla uttalanden i allmänhet burk tillåter oss att göra en hel del av samma sak 447 00:19:21,960 --> 00:19:25,070 att vi bara pratade om med if-satser. 448 00:19:25,070 --> 00:19:29,440 Till exempel, just nu har vi allmänna form av switch uttalande 449 00:19:29,440 --> 00:19:33,870 som tillåter oss att ta en variabel som heter n 450 00:19:33,870 --> 00:19:37,670 och jämföra det med en hel del olika värden, som här vi 451 00:19:37,670 --> 00:19:40,010 har kallat constant1, constant2. 452 00:19:40,010 --> 00:19:41,150 Vi kan ha en mycket mer. 453 00:19:41,150 --> 00:19:42,930 Och de kallas fall. 454 00:19:42,930 --> 00:19:46,280 >> Så om vi har en switch statement-- och detta verk 455 00:19:46,280 --> 00:19:50,580 endast för integers-- vi har en variabel i detta fall är n. 456 00:19:50,580 --> 00:19:53,840 Om variabeln n är lika med constant1, vi 457 00:19:53,840 --> 00:19:59,720 kommer att utföra en viss kodsträng eller något som vi vill göra. 458 00:19:59,720 --> 00:20:01,280 Och då skulle vi bryta. 459 00:20:01,280 --> 00:20:04,820 Så pausen innebär att switch-satsen 460 00:20:04,820 --> 00:20:08,120 kommer att sluta utföra om n är lika med constant1, 461 00:20:08,120 --> 00:20:09,752 och sedan ditt program kommer att fortsätta. 462 00:20:09,752 --> 00:20:11,835 Det kommer att lämna ut ur byta uttalande och det kommer 463 00:20:11,835 --> 00:20:13,520 fortsätta att göra något annat. 464 00:20:13,520 --> 00:20:17,204 >> Om emellertid n inte är lika med constant1, då fallet för constant2 465 00:20:17,204 --> 00:20:17,870 kommer att kontrolleras. 466 00:20:17,870 --> 00:20:21,750 Så om n är lika constant2, den andra kodsträng kommer att utföras. 467 00:20:21,750 --> 00:20:23,850 Och då kommer det att bryta om det är lika med den. 468 00:20:23,850 --> 00:20:27,580 Och då kan vi ha also-- inte nödvändigtvis, though-- en standard fall 469 00:20:27,580 --> 00:20:32,290 som kommer att hända om n inte är lika något av de fall som du har listat. 470 00:20:32,290 --> 00:20:35,400 Och i normalfallet, vi också behöver inte en paus nödvändigtvis 471 00:20:35,400 --> 00:20:39,271 eftersom en övergång uttalande vet att det måste upphöra efter standard 472 00:20:39,271 --> 00:20:40,270 fallet om så är fallet. 473 00:20:40,270 --> 00:20:42,140 >> DAVID MALAN: Men stilist, Vi sätter alltid det där. 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å speciellt när du börjar, särskilt om bland de mindre 477 00:20:44,750 --> 00:20:47,458 bekväma, jag skulle personligen bara rekommendera stick med IFS 478 00:20:47,458 --> 00:20:51,564 och ifs-annans och if-else-om-annans och så vidare om bara 479 00:20:51,564 --> 00:20:53,480 eftersom de är lite mer okomplicerat. 480 00:20:53,480 --> 00:20:56,142 Detta är en fin optimering, eller ibland även estetiskt det 481 00:20:56,142 --> 00:20:57,350 gör koden mer lättläst. 482 00:20:57,350 --> 00:20:59,599 Och faktiskt, förmodligen mid-terminen får vi se ett problem 483 00:20:59,599 --> 00:21:02,504 ställa in var det bara ser bättre och lättare att läsa för människorna 484 00:21:02,504 --> 00:21:03,670 med hjälp av en switch uttalande. 485 00:21:03,670 --> 00:21:05,460 Men oroa dig inte om klamrar sig fast vid detta för tidigt. 486 00:21:05,460 --> 00:21:05,680 >> MARIA: Ja. 487 00:21:05,680 --> 00:21:08,840 Om du har en hel del om uttalanden, Det kanske bara inte mycket läsvärd. 488 00:21:08,840 --> 00:21:10,965 Det kanske inte är mycket snabb för dig att gå igenom den. 489 00:21:10,965 --> 00:21:13,230 Så byter uttalanden kan vara mycket användbart, liksom. 490 00:21:13,230 --> 00:21:17,900 Och även, inte remember-- inte glömmer att sätta raster där. 491 00:21:17,900 --> 00:21:20,330 >> DAVID MALAN: Minns inte detta. 492 00:21:20,330 --> 00:21:24,890 >> MARIA: För då kan du falla genom från ett fall till ett annat. 493 00:21:24,890 --> 00:21:27,930 Så låt oss säga att fallet constant1 hade inte en break i det. 494 00:21:27,930 --> 00:21:31,920 Då kanske vi faller igenom inuti fallet constant2. 495 00:21:31,920 --> 00:21:35,070 Och vi vill inte göra det om Vi har redan nått målet constant1 496 00:21:35,070 --> 00:21:37,830 och det är lika med n. 497 00:21:37,830 --> 00:21:45,100 >> Så, till exempel, om vi har en variabel n som innehåller ett klassnummer, 498 00:21:45,100 --> 00:21:48,990 och vi vill se vad det klass är-- om n är lika med 50, 499 00:21:48,990 --> 00:21:51,957 vi kommer att skriva ut "CS50 är Introduktion till datalogi I. " 500 00:21:51,957 --> 00:21:53,040 Då vi kommer att bryta. 501 00:21:53,040 --> 00:21:53,920 Och det är allt. 502 00:21:53,920 --> 00:21:55,950 Om emellertid, n är lika 51, kommer vi 503 00:21:55,950 --> 00:21:58,494 att skriva ut "CS51 är Inledning till datalogi II. " 504 00:21:58,494 --> 00:21:59,910 Sedan, återigen, vi kommer att bryta. 505 00:21:59,910 --> 00:22:05,080 Men om då vi sätter 124, 61, alla annat nummer som du kan tänka dig, 506 00:22:05,080 --> 00:22:06,890 eller program inte kommer att erkänna det. 507 00:22:06,890 --> 00:22:09,010 Så det kommer att säga, "Tyvärr, jag är inte är bekant med den klassen. " 508 00:22:09,010 --> 00:22:10,009 Och det kommer att bryta. 509 00:22:10,009 --> 00:22:12,847 DAVID MALAN: Så du kan verkligen se if, annars om, annars tanken här. 510 00:22:12,847 --> 00:22:15,430 Det är bara annorlunda syntax för uttrycka exakt samma idé. 511 00:22:15,430 --> 00:22:17,690 >> MARIA: Exakt. 512 00:22:17,690 --> 00:22:19,480 Nu har vi våra ternära operatörer. 513 00:22:19,480 --> 00:22:24,900 Så ternära operatörer har tre parts-- ett villkor, 514 00:22:24,900 --> 00:22:27,220 något att göra om detta villkor är sant, 515 00:22:27,220 --> 00:22:29,730 och sedan något att göra Om detta villkor är falskt. 516 00:22:29,730 --> 00:22:33,400 Så ni ser, i princip, syntax det här. 517 00:22:33,400 --> 00:22:37,792 Vi har frågetecken, och sedan the-- vad vi kalla detta? 518 00:22:37,792 --> 00:22:38,750 DAVID MALAN: Kolon. 519 00:22:38,750 --> 00:22:39,100 MARIA: Colon. 520 00:22:39,100 --> 00:22:39,599 Tack. 521 00:22:39,599 --> 00:22:41,880 Förlåt. 522 00:22:41,880 --> 00:22:45,800 Så låt oss titta på vårt exempel till se om vi kan förstå this-- 523 00:22:45,800 --> 00:22:47,840 class_num == 50. 524 00:22:47,840 --> 00:22:52,580 Så här ser vi vår Boolean operatör == som jämför den variabla class_num 525 00:22:52,580 --> 00:22:53,100 till 50. 526 00:22:53,100 --> 00:22:55,150 Så class_num lagrar ett heltal. 527 00:22:55,150 --> 00:22:58,180 Och om det heltal är lika med 50, då är vi 528 00:22:58,180 --> 00:23:02,810 kommer att lagra "David Malan" inuti strängen professor. 529 00:23:02,810 --> 00:23:05,912 Om klassens nummer inte lika 50 ", inte David Malan" 530 00:23:05,912 --> 00:23:07,120 kommer att bli professor. 531 00:23:07,120 --> 00:23:08,630 >> DAVID MALAN: Tack. 532 00:23:08,630 --> 00:23:12,110 Och så detta verkar motsvarar vad skulle du säga, vid första anblicken? 533 00:23:12,110 --> 00:23:17,930 534 00:23:17,930 --> 00:23:19,960 >> MARIA: För mig verkar det som om-else uttalanden. 535 00:23:19,960 --> 00:23:20,709 >> DAVID MALAN: Ja. 536 00:23:20,709 --> 00:23:24,020 Och i själva verket är denna typ av en nätt en eyeliner, 537 00:23:24,020 --> 00:23:27,520 så att säga, för att genomföra exakt logiken i if-else 538 00:23:27,520 --> 00:23:29,010 men gör allt i ett steg. 539 00:23:29,010 --> 00:23:29,860 >> MARIA: Exakt. 540 00:23:29,860 --> 00:23:30,360 Ja. 541 00:23:30,360 --> 00:23:33,520 Så if-else uttalanden kanske ta upp en hel del utrymme. 542 00:23:33,520 --> 00:23:36,283 De kan vara för lång för något så enkelt som detta. 543 00:23:36,283 --> 00:23:38,350 Så detta kan vara mycket kortfattad och mycket trevlig. 544 00:23:38,350 --> 00:23:40,880 545 00:23:40,880 --> 00:23:46,820 Så nu ska vi till att titta på verkställande något om och om igen, 546 00:23:46,820 --> 00:23:50,060 så kontroll av en skick flera gånger 547 00:23:50,060 --> 00:23:53,510 och sedan fortsätta att göra något medan villkor är sant. 548 00:23:53,510 --> 00:23:56,740 Så detta leder oss fint in medan slingor. 549 00:23:56,740 --> 00:23:59,270 >> Till vänster har vi vår första while. 550 00:23:59,270 --> 00:24:03,840 Så medan något är sant, göra något om och om igen. 551 00:24:03,840 --> 00:24:08,850 Så se till att märka att vår förutsättning för detta är validerad på toppen. 552 00:24:08,850 --> 00:24:14,150 Medan vårt andra loop-- vi kallar att en gör-while loop-- vi gör något, 553 00:24:14,150 --> 00:24:15,890 sedan kontrollera vi för ett tillstånd. 554 00:24:15,890 --> 00:24:17,980 Och om detta villkor fortsätter att vara sant, 555 00:24:17,980 --> 00:24:20,150 vi gå tillbaka och göra saken igen. 556 00:24:20,150 --> 00:24:23,360 Så den viktigaste skillnaden är där villkoret kontrolleras för. 557 00:24:23,360 --> 00:24:29,260 Och koden kan aldrig vara exekveras om villkoret inte är 558 00:24:29,260 --> 00:24:30,430 sant med while-loopen. 559 00:24:30,430 --> 00:24:33,050 Medan med do-while loop, har vi koden 560 00:24:33,050 --> 00:24:35,380 som alltid genomförs minst en gång. 561 00:24:35,380 --> 00:24:37,470 Och sedan när villkoret fortsätter att vara sant, 562 00:24:37,470 --> 00:24:39,960 vi kan gå tillbaka och upprepa igen inuti. 563 00:24:39,960 --> 00:24:43,625 Varför tror du att vi skulle använda en gör-while-slinga över en while-slinga? 564 00:24:43,625 --> 00:24:48,221 565 00:24:48,221 --> 00:24:48,720 Höger. 566 00:24:48,720 --> 00:24:52,600 Så om vi vill att uppmana användaren för någon form av inmatning, 567 00:24:52,600 --> 00:24:55,400 om vi vill be dem ange sitt namn, 568 00:24:55,400 --> 00:24:57,342 Vi vill åtminstone be dem en gång. 569 00:24:57,342 --> 00:24:59,050 Och om de anger det namnet, är vi inte 570 00:24:59,050 --> 00:25:00,740 kommer att be dem igen eftersom vi redan vet det. 571 00:25:00,740 --> 00:25:02,656 Men om de inte anger deras namn, eller om de 572 00:25:02,656 --> 00:25:05,787 ange något som är uppenbarligen inte ett namn, 573 00:25:05,787 --> 00:25:08,120 vi fortfarande vill fortsätta be dem för deras namn. 574 00:25:08,120 --> 00:25:10,710 >> DAVID MALAN: Och föreläsning hade vi en såhär med få positiva int 575 00:25:10,710 --> 00:25:13,550 exempel där det finns inget att Kontrollera först att du har inte ens 576 00:25:13,550 --> 00:25:14,190 fått en int. 577 00:25:14,190 --> 00:25:16,680 Så vi vill göra this-- få ett int från user-- 578 00:25:16,680 --> 00:25:18,860 så kolla det, kanske, igen och igen och igen. 579 00:25:18,860 --> 00:25:21,030 >> MARIA: Exakt. 580 00:25:21,030 --> 00:25:22,060 För loops-- OK. 581 00:25:22,060 --> 00:25:25,842 För loopar kan tillåta oss att göra nästan exakt samma sak, liksom. 582 00:25:25,842 --> 00:25:27,300 Det är faktiskt exakt samma sak. 583 00:25:27,300 --> 00:25:30,190 Så det finns inget som du kan göra med loopar 584 00:25:30,190 --> 00:25:32,840 att du inte skulle kunna att göra med while-slingor. 585 00:25:32,840 --> 00:25:36,900 Men för loopar kan tyckas lite lite mer komplicerat syntaktiskt 586 00:25:36,900 --> 00:25:39,730 eftersom de har tre delar inuti vad 587 00:25:39,730 --> 00:25:42,990 var innan bara skick med while-slingor. 588 00:25:42,990 --> 00:25:48,260 Så den första delen som du havet, längst till vänster, vi har "int dvärgar = 0." 589 00:25:48,260 --> 00:25:51,490 Så det är där vi initiera vår variabel. 590 00:25:51,490 --> 00:25:55,210 >> Då har vi ett semikolon och "dvärgar <7." 591 00:25:55,210 --> 00:25:57,100 Så det är där ute villkoret faktiskt är. 592 00:25:57,100 --> 00:26:00,170 Så det är vad vi skulle ha bara sätta i tiden loop-- 593 00:26:00,170 --> 00:26:01,880 "medan dvärgar <7." 594 00:26:01,880 --> 00:26:05,380 Här, som går i mitten av vår för slinga. 595 00:26:05,380 --> 00:26:07,190 Så "dwaves <7." 596 00:26:07,190 --> 00:26:11,350 Och sedan vår sista delen är "dvärgar ++" som är där vi uppdaterar vår variabel. 597 00:26:11,350 --> 00:26:15,470 Så det viktiga att inse är att detta 598 00:26:15,470 --> 00:26:22,010 kommer att gå igenom detta för loop sju gånger och köra sju gånger. 599 00:26:22,010 --> 00:26:24,020 Så vi har sju dvärgar, och de är alla 600 00:26:24,020 --> 00:26:26,020 kommer att säga, "Jag är här för att hjälpa dig, Snövit " 601 00:26:26,020 --> 00:26:28,860 eftersom de är redo att hjälpa Snövit. 602 00:26:28,860 --> 00:26:33,600 >> Med medan loopar, skulle vi ha gjort initieringen och uppdatering 603 00:26:33,600 --> 00:26:37,490 inte inne i skick, återigen, men antingen före eller inuti while 604 00:26:37,490 --> 00:26:40,210 att se till att we-- eftersom Vi behöver alltid dessa delar. 605 00:26:40,210 --> 00:26:42,835 Så för att se till att vi har dem, skulle vi har fortfarande lagt till dem 606 00:26:42,835 --> 00:26:44,580 på, inte bara innanför parentes. 607 00:26:44,580 --> 00:26:47,288 >> DAVID MALAN: Och så det ser like-- i föreläsningen, till exempel, 608 00:26:47,288 --> 00:26:50,250 Jag nästan alltid använda, som, i och n och ganska tråkiga variabler. 609 00:26:50,250 --> 00:26:53,050 Det ser ut som du kan använda mer skickligt namngivna variabler, också. 610 00:26:53,050 --> 00:26:56,300 >> MARIA: Ja, det är faktiskt mycket trevligt att använda lite mer beskrivande variabler 611 00:26:56,300 --> 00:26:59,400 eftersom särskilt om någon annan är läsa din code-- kanske du är grader 612 00:26:59,400 --> 00:27:00,940 eller om du samarbetar med somebody-- 613 00:27:00,940 --> 00:27:03,481 du vill se till att de förstår vad du gör. 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 Så detta är något mycket funky-- for-loop i en for-loop. 617 00:27:11,435 --> 00:27:13,060 Jag vet inte om vi har sett det här förut. 618 00:27:13,060 --> 00:27:13,830 Antagligen inte. 619 00:27:13,830 --> 00:27:17,750 Men vi kan faktiskt ha this-- så loopar i stället för slingor. 620 00:27:17,750 --> 00:27:25,130 Så är det någon som vill kanske gå mig genom vad som händer här? 621 00:27:25,130 --> 00:27:28,240 622 00:27:28,240 --> 00:27:29,490 DAVID MALAN: Jag tar en stab. 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 vill skriva ut grejer det är i det nedre högra hörnet 626 00:27:34,690 --> 00:27:35,190 det. 627 00:27:35,190 --> 00:27:35,450 >> MARIA: Rätt. 628 00:27:35,450 --> 00:27:35,710 Jaja. 629 00:27:35,710 --> 00:27:38,043 >> DAVID MALAN: Så vi har bara sätta det prov utgång där. 630 00:27:38,043 --> 00:27:42,590 Så jag kan sluta från översta slinga som du är 631 00:27:42,590 --> 00:27:45,680 iteration över rader de yttersta slinga, så att säga. 632 00:27:45,680 --> 00:27:48,107 Och du iterera över kolonner med den innersta slingan. 633 00:27:48,107 --> 00:27:50,190 Och intuitivt, detta bör förhoppningsvis vettigt 634 00:27:50,190 --> 00:27:52,070 på grund av naturen av varje program vi har sett 635 00:27:52,070 --> 00:27:55,570 före, printf, som är den funktion vi använder, i slutändan, 636 00:27:55,570 --> 00:27:58,190 har möjlighet att skriva ut saker ut huvudsak rad för rad. 637 00:27:58,190 --> 00:27:59,960 Liksom, när du har matas ut en ny linje, det finns 638 00:27:59,960 --> 00:28:02,876 ingen fördubbling tillbaka och skriva ut något högre i skärmen, åtminstone 639 00:28:02,876 --> 00:28:04,530 inte använder printf så här. 640 00:28:04,530 --> 00:28:07,750 >> Och så i det avseendet, gör det meningen att den yttersta slingan 641 00:28:07,750 --> 00:28:10,930 bör hänvisning till raderna eftersom för varje given rad, 642 00:28:10,930 --> 00:28:13,650 du kommer att vilja skriva ut XXXXX, och sedan 643 00:28:13,650 --> 00:28:15,520 gå vidare till nästa rad, XXXXX. 644 00:28:15,520 --> 00:28:17,317 Så rader komma först. 645 00:28:17,317 --> 00:28:19,150 Och sedan inom varje rad, du skriver ut kolumner. 646 00:28:19,150 --> 00:28:21,160 Om du försökte göra det motsatta, skulle det förmodligen inte 647 00:28:21,160 --> 00:28:21,690 kommit ut som du tänker. 648 00:28:21,690 --> 00:28:22,190 >> MARIA: Ja. 649 00:28:22,190 --> 00:28:24,950 Vi kunde inte bara gå tillbaka till föregående rad med printf. 650 00:28:24,950 --> 00:28:27,658 >> DAVID MALAN: Och vad är intressant per dagens pratstund om omfattning, 651 00:28:27,658 --> 00:28:31,600 faktiskt, är den raden är en int som är förklarat i den översta slingan. 652 00:28:31,600 --> 00:28:34,030 Men märker att det fortfarande insida, så att säga, 653 00:28:34,030 --> 00:28:35,982 klammerparenteserna som omedelbart efter, 654 00:28:35,982 --> 00:28:38,440 även om det inte är tekniskt inom dessa klammerparenteserna. 655 00:28:38,440 --> 00:28:41,750 Så raden är i omfattning för helheten av kodsträng, 656 00:28:41,750 --> 00:28:44,690 både inne i den yttre for-slingan och insidan av det inre för slingan. 657 00:28:44,690 --> 00:28:48,050 Men däremot, där är kolumn i omfattning? 658 00:28:48,050 --> 00:28:49,810 Den rörliga kolumn? 659 00:28:49,810 --> 00:28:51,310 Ja, endast i insidan slingan. 660 00:28:51,310 --> 00:28:54,280 Och det är OK eftersom vi inte tillgång till den utanför dess klammerparenteserna. 661 00:28:54,280 --> 00:28:57,280 Allt vi gör är att skriva ut en ny linje i slutet där. 662 00:28:57,280 --> 00:28:58,670 Så att i själva verket är OK. 663 00:28:58,670 --> 00:29:03,740 >> Så det här har effekten, det ser ut som, för att göra tre rader och fyra kolumner. 664 00:29:03,740 --> 00:29:04,370 >> MARIA: Rätt. 665 00:29:04,370 --> 00:29:06,270 Så först går vi igenom vårt första raden. 666 00:29:06,270 --> 00:29:10,520 Och just i vår första raden, gör vi fyra kolumner inne i första raden. 667 00:29:10,520 --> 00:29:11,980 Så vi skriver ut fyra X: s. 668 00:29:11,980 --> 00:29:15,800 Och då kan vi lämna för loop, eftersom Vi har redan skrivs ut fyra X: s. 669 00:29:15,800 --> 00:29:17,100 Och vi ut en ny linje. 670 00:29:17,100 --> 00:29:19,920 Och sedan går vi igenom samma process för ytterligare två rader 671 00:29:19,920 --> 00:29:21,170 att göra totalt tre. 672 00:29:21,170 --> 00:29:23,530 >> DAVID MALAN: Och det är värt att notera att det är bara en artefakt på teckensnittet, det faktum 673 00:29:23,530 --> 00:29:25,680 att provutgången verkar så mycket längre, 674 00:29:25,680 --> 00:29:27,520 som om det finns mer rader än kolumner. 675 00:29:27,520 --> 00:29:29,824 Men det är bara för att X är högre än den är bred. 676 00:29:29,824 --> 00:29:32,740 Det är allt som händer där, plus det vita utrymmet mellan raderna. 677 00:29:32,740 --> 00:29:33,281 >> MARIA: Rätt. 678 00:29:33,281 --> 00:29:34,792 Häftigt. 679 00:29:34,792 --> 00:29:35,750 DAVID MALAN: Okej. 680 00:29:35,750 --> 00:29:39,830 Så en snabb titt på problem ange ett, ta några frågor, och sedan skjuta? 681 00:29:39,830 --> 00:29:40,330 Okej. 682 00:29:40,330 --> 00:29:43,164 Så problemet sätta en, det finns tre primära utmaningar, i slutändan. 683 00:29:43,164 --> 00:29:44,955 Men först, hittar du att problemet satt 684 00:29:44,955 --> 00:29:47,900 specifikation, som med många av psets i höst, kommer att guida dig 685 00:29:47,900 --> 00:29:50,691 genom några uppvärmningsövningar, pekar du ut några resurser 686 00:29:50,691 --> 00:29:52,440 att du kanske eller kanske inte har sett redan. 687 00:29:52,440 --> 00:29:54,440 Exempelvis CS50 har en svit av shorts, 688 00:29:54,440 --> 00:29:56,481 som är korta videofilmer, inte olik denna, men att 689 00:29:56,481 --> 00:29:58,460 är mycket ämne specific-- kanske fem minuter, 690 00:29:58,460 --> 00:30:02,360 10 minuter i längd på slingor eller om villkor eller på algoritmer 691 00:30:02,360 --> 00:30:04,125 eller senare på mer avancerade ämnen, liksom. 692 00:30:04,125 --> 00:30:06,000 Och vi generellt bädda de i problemet 693 00:30:06,000 --> 00:30:07,950 uppsättningar så att eleverna har en resurs med vilken 694 00:30:07,950 --> 00:30:10,840 att granska material som kan ha redan kommit upp i föreläsning eller avsnitt. 695 00:30:10,840 --> 00:30:13,220 Men detta sätt är det mer fokuserad och mer på sina fingertoppar. 696 00:30:13,220 --> 00:30:15,928 >> Vi tenderar också att bädda in i problem sätter saker som kallas genomgångar. 697 00:30:15,928 --> 00:30:20,790 Så nästan alla de exempel jag gör i föreläsning, på scen här, vi också 698 00:30:20,790 --> 00:30:24,565 har skjutit på kameran i föra fram ett mer långsammare, 699 00:30:24,565 --> 00:30:28,760 en mer intim genomgång av mig på min laptop i nämnda lag, rad för rad 700 00:30:28,760 --> 00:30:31,427 så att i klassen, vi kommer ofta skumma igenom något eller någon 701 00:30:31,427 --> 00:30:33,260 kommer interject med en svara på en fråga. 702 00:30:33,260 --> 00:30:35,820 Men det betyder inte nödvändigtvis att sjunka i för alla i publiken. 703 00:30:35,820 --> 00:30:38,230 Så att du hittar koden genomgångar för de flesta av exemplen 704 00:30:38,230 --> 00:30:40,950 att vi gör här i föreläsning så att du kan gå igenom den i din egen takt 705 00:30:40,950 --> 00:30:43,580 och bakåt eller framåt eller hoppa helt och hållet, om du vill. 706 00:30:43,580 --> 00:30:45,356 >> Det finns ofta ett fåtal warm-up frågor som 707 00:30:45,356 --> 00:30:47,105 be dig att sortera av förstärka detta material 708 00:30:47,105 --> 00:30:50,250 och se till att du är bekväm innan du fortsätta med resten av pset. 709 00:30:50,250 --> 00:30:51,700 Och sedan, naturligtvis, finns det pset själv. 710 00:30:51,700 --> 00:30:53,450 Och en av de saker vi mycket medvetet 711 00:30:53,450 --> 00:30:57,202 göra i CS50 är nästan varje ointressant eller intellektuellt ointressant 712 00:30:57,202 --> 00:30:58,910 mekaniska steg som du kanske måste göra 713 00:30:58,910 --> 00:31:00,519 är nästan alltid mycket väl dokumenterade. 714 00:31:00,519 --> 00:31:03,560 Under begreppet, vi ska börja ställa mer retoriska frågor 715 00:31:03,560 --> 00:31:06,187 som minns hur man gör det ena eller det? 716 00:31:06,187 --> 00:31:08,520 Men generellt, hittar du att problemsamlingar får du 717 00:31:08,520 --> 00:31:10,269 genom mekaniken av något så att 718 00:31:10,269 --> 00:31:14,160 intressanta, intellektuella utmaningar slutligen lämnas till dig studenten. 719 00:31:14,160 --> 00:31:17,390 >> Med det sagt, Zamyla, som vi hålls hänvisar dag i föreläsning, 720 00:31:17,390 --> 00:31:20,190 är en av våra longtime personal medlem som också innehar genomgångar 721 00:31:20,190 --> 00:31:24,520 på specifika PSET problem som Mario och giriga, men inte vatten i år. 722 00:31:24,520 --> 00:31:26,540 Och det är i dessa walkthroughs att hon ofta 723 00:31:26,540 --> 00:31:29,450 erbjuder några tips och tricks för hur man ska gå, aldrig berätta 724 00:31:29,450 --> 00:31:31,810 exakt vad de ska göra, men rather-- som ett tillstånd, 725 00:31:31,810 --> 00:31:35,200 Om du will-- ger dig åtminstone en par idéer så att det är upp till dig, 726 00:31:35,200 --> 00:31:37,830 i slutändan, att besluta hur man närma sig dem. 727 00:31:37,830 --> 00:31:41,200 >> MARIA: Typ av som en hög nivå förståelse av logiken i vad 728 00:31:41,200 --> 00:31:42,220 Vi ber er att göra. 729 00:31:42,220 --> 00:31:42,485 >> DAVID MALAN: Exakt. 730 00:31:42,485 --> 00:31:44,190 Och, faktiskt, Zamyla s genomgångar är avsedda 731 00:31:44,190 --> 00:31:46,190 att besvara den ofta frågade frågan om var 732 00:31:46,190 --> 00:31:48,610 jag började, särskilt när dessa långa specifikationer 733 00:31:48,610 --> 00:31:51,960 lite skrämmande med tanke på all text och bilder som de har i dem. 734 00:31:51,960 --> 00:31:54,890 >> Så water.c, hittar du efter att du har slutfört det, 735 00:31:54,890 --> 00:31:56,920 är faktiskt relativt enkelt. 736 00:31:56,920 --> 00:31:58,882 Absolut är ett gäng ni kommer att bang 737 00:31:58,882 --> 00:32:01,840 era huvuden mot väggen försöker ta reda på varför det inte att sammanställa 738 00:32:01,840 --> 00:32:03,450 eller varför den inte fungerar korrekt. 739 00:32:03,450 --> 00:32:05,040 Men när du är klar med det och när du har 740 00:32:05,040 --> 00:32:07,620 spenderat lite tid brottas med någon av de buggar som du kan ha, 741 00:32:07,620 --> 00:32:09,490 du kommer att upptäcka att det är en mycket kort program. 742 00:32:09,490 --> 00:32:11,770 Det kan göras på bara några rader kod, varav de flesta 743 00:32:11,770 --> 00:32:15,030 vi har sett här i föreläsning redan om du monterar rätt byggstenar. 744 00:32:15,030 --> 00:32:16,810 >> Och som vi föreslår här, kommer det att fråga 745 00:32:16,810 --> 00:32:22,250 du ange hur många minuter någon tar en dusch på campus. 746 00:32:22,250 --> 00:32:24,779 Vi anger i problemet ställa in flödeshastigheten för vatten 747 00:32:24,779 --> 00:32:27,320 i, liksom, ett lågt flöde dusch huvudet, ungefär som Seinfeld klippet 748 00:32:27,320 --> 00:32:29,180 vi såg igår eller den motsatta därav. 749 00:32:29,180 --> 00:32:30,971 Och då du bara har att göra lite matematik, 750 00:32:30,971 --> 00:32:34,710 really-- aritmetik med C för att berätta oss hur många, ungefär, flaskor med vatten 751 00:32:34,710 --> 00:32:37,720 är att motsvarande om vi är tar en n-minuters dusch. 752 00:32:37,720 --> 00:32:41,389 >> Nu, i mario.c, detta kommer att vara en något längre program. 753 00:32:41,389 --> 00:32:42,930 Det är fortfarande inte kommer att vara så här långt. 754 00:32:42,930 --> 00:32:45,130 Bara några rader längre än water.c. 755 00:32:45,130 --> 00:32:48,230 Men det kommer att bli tillfälle att återskapa den gamla skolan Mario 756 00:32:48,230 --> 00:32:50,670 pyramid från Super Mario Brothers eller någon uppföljning på. 757 00:32:50,670 --> 00:32:53,510 Det kommer inte att se ut som sötare eller lika färgstark som en där. 758 00:32:53,510 --> 00:32:56,468 Vi ska bara använda små hashtags som vi har här på skärmen 759 00:32:56,468 --> 00:32:58,120 med hjälp av ASCII-text. 760 00:32:58,120 --> 00:33:00,362 Men det kommer att approximera samma idé. 761 00:33:00,362 --> 00:33:02,570 Och det kommer att bli en utöva som vid första anblicken 762 00:33:02,570 --> 00:33:04,720 verkar ganska simple-- bara skriva ut en enkel pyramid. 763 00:33:04,720 --> 00:33:07,345 Men det finns ett par egenskaper här som är intressanta. 764 00:33:07,345 --> 00:33:12,400 Lägg märke till att den högra kanten av pyramiden faktiskt har två bredd. 765 00:33:12,400 --> 00:33:14,570 Så det finns två lika höjd kolumner, vilket 766 00:33:14,570 --> 00:33:16,804 gör det kräver lite bit tanke att göra 767 00:33:16,804 --> 00:33:19,720 säker på att du får det precis rätt, som motsats till bara en perfekt vinklad 768 00:33:19,720 --> 00:33:20,220 linje. 769 00:33:20,220 --> 00:33:23,340 Så det är en bit av ett hörn fall men matchar själva spelet. 770 00:33:23,340 --> 00:33:27,610 >> Och det är också icke-självklar vid första blick hur du skriver ut blanktecken. 771 00:33:27,610 --> 00:33:29,430 Så när jag tittar på exempel på utdata här-- 772 00:33:29,430 --> 00:33:32,440 och det är också i spec-- det typ av ser ut som en rektangel, 773 00:33:32,440 --> 00:33:35,120 men en diagonal av rektangel har avhugget, 774 00:33:35,120 --> 00:33:37,320 och det är bara vita ytor, så att säga. 775 00:33:37,320 --> 00:33:40,100 Och så en vanliga Frågan här är alltid bra, 776 00:33:40,100 --> 00:33:43,302 hur gör jag flyttar hashtags över till höger? 777 00:33:43,302 --> 00:33:44,760 Eller hur kan jag skriva ut tomma utrymmen? 778 00:33:44,760 --> 00:33:46,860 Och det är faktiskt lättare än de flesta studenter tror. 779 00:33:46,860 --> 00:33:47,360 Höger? 780 00:33:47,360 --> 00:33:51,620 Du kan approximera det visuellt genom att bara slå på mellanslagstangenten en eller två gånger 781 00:33:51,620 --> 00:33:52,700 eller tre gånger. 782 00:33:52,700 --> 00:33:56,260 >> Och så även om med printf vi nästan alltid skriva ut en sträng eller en int 783 00:33:56,260 --> 00:33:59,950 eller ett ord som "Hej, världen "eller en serie av ord, 784 00:33:59,950 --> 00:34:03,560 Du kan också bara skriva ut citationstecken, utrymme, unquote. 785 00:34:03,560 --> 00:34:06,320 Och det kommer att faktiskt ge en blank där. 786 00:34:06,320 --> 00:34:08,330 Så ha det i åtanke och inte overthink redan. 787 00:34:08,330 --> 00:34:10,570 Du måste verkligen besluta rad för rad för rad, 788 00:34:10,570 --> 00:34:14,280 inte olikt ditt exempel en stund sedan, hur många av dessa 789 00:34:14,280 --> 00:34:18,420 kolumner vara vita ytor och hur många av dem bör vara hashtags. 790 00:34:18,420 --> 00:34:21,560 Det kommer att ta lite tid, men det är i slutändan en logisk pussel av slag. 791 00:34:21,560 --> 00:34:22,060 >> MARIA: Ja. 792 00:34:22,060 --> 00:34:25,060 Men logiken i gå rad för rad kommer att vara till stor nytta här. 793 00:34:25,060 --> 00:34:25,810 DAVID MALAN: Ja. 794 00:34:25,810 --> 00:34:28,976 Jag tror exempelkoden du gave-- även även om det inte var ett komplett program. 795 00:34:28,976 --> 00:34:34,247 Du måste fortfarande int och huvud och ogiltiga och #include stdio.h, 796 00:34:34,247 --> 00:34:35,580 en hel del av saker från föreläsningen. 797 00:34:35,580 --> 00:34:37,629 Men byggstenar verkar vara där. 798 00:34:37,629 --> 00:34:39,920 Och sedan slutligen är något lite mer algoritm. 799 00:34:39,920 --> 00:34:43,210 Så visar det sig att varje gång du gå in i CVS eller närbutik 800 00:34:43,210 --> 00:34:47,810 och någon händer dig på kassör räkningar eller mynt som förändring, 801 00:34:47,810 --> 00:34:50,620 det visar sig att de, människor, oavsett om de vet det eller inte, 802 00:34:50,620 --> 00:34:53,300 använder troligen vad kallas en girig algoritm, 803 00:34:53,300 --> 00:34:58,170 där om du är skyldig, säger, $ 21 i förändring eftersom av någon anledning 804 00:34:58,170 --> 00:35:01,580 du köpte något mycket billigt med en mycket stor faktura på CVS, 805 00:35:01,580 --> 00:35:05,910 det skulle vara riktigt irriterande om kassörskan gav dig 21 singlar eller, värre 806 00:35:05,910 --> 00:35:07,629 ändå en hel del mynt. 807 00:35:07,629 --> 00:35:10,670 Snarare, vad en förnuftig person är förmodligen kommer att göra är att de ska 808 00:35:10,670 --> 00:35:14,224 att ta en $ 20- och sedan en $ 1 bill, och hand du bara två räkningar i detta fall. 809 00:35:14,224 --> 00:35:17,390 MARIA: Så de är ute efter att minimera den förändring som de ger tillbaka till dig. 810 00:35:17,390 --> 00:35:17,850 DAVID MALAN: Exakt. 811 00:35:17,850 --> 00:35:19,540 Och samma affär med mynt, liksom. 812 00:35:19,540 --> 00:35:23,040 Om du är skyldig, säger, $ 0,50, förhoppningsvis du inte vill ha 50 öre. 813 00:35:23,040 --> 00:35:25,500 Du istället vill ha två kvartal, till exempel. 814 00:35:25,500 --> 00:35:27,540 Nu, gör detta antar att kassören har 815 00:35:27,540 --> 00:35:29,940 nog av varje valör som han eller hon kanske vill ge dig. 816 00:35:29,940 --> 00:35:32,148 Men vi tillåter dig att ta lika mycket i problemet. 817 00:35:32,148 --> 00:35:35,590 Och målet i slutändan, är att genomföra i C-kod en girig algoritm. 818 00:35:35,590 --> 00:35:37,344 Så att användaren tillåts för att skriva in hur mycket 819 00:35:37,344 --> 00:35:40,510 ändra han eller hon är skyldig med dollar och ören, någon form av flyttals 820 00:35:40,510 --> 00:35:41,590 värde förmodligen. 821 00:35:41,590 --> 00:35:45,530 Och då måste man göra matten och räkna ut algoritm, ja, 822 00:35:45,530 --> 00:35:49,020 hur många mynt kan jag ge du minimalt för att ge dig 823 00:35:49,020 --> 00:35:50,270 exakt den mängd av förändring. 824 00:35:50,270 --> 00:35:53,470 Men det kommer att bli en några knepiga delar här, eller hur? 825 00:35:53,470 --> 00:35:56,236 Som det finns hela inexakthet fråga. 826 00:35:56,236 --> 00:35:56,860 MARIA: Exakt. 827 00:35:56,860 --> 00:35:59,114 Så flyttal värden har vaghet. 828 00:35:59,114 --> 00:36:00,780 Har vi prata om det här i föreläsning idag? 829 00:36:00,780 --> 00:36:02,340 >> DAVID MALAN: Vi gjorde sista gången i föreläsningen. 830 00:36:02,340 --> 00:36:03,506 Vi pratade om vaghet. 831 00:36:03,506 --> 00:36:08,840 Och du inte vill lura användaren hur mycket förändring han eller hon är skyldig. 832 00:36:08,840 --> 00:36:11,290 Och så genomgång, i problemet set specifikationen, 833 00:36:11,290 --> 00:36:15,990 fundera, i slutändan, att hur du kan minska de vaghet 834 00:36:15,990 --> 00:36:17,280 fel, potentiellt. 835 00:36:17,280 --> 00:36:21,050 Det kan undvikas, förvisso, för ingångarna vi pratar om. 836 00:36:21,050 --> 00:36:23,590 Och, faktiskt, pennies-- kanske vi ska skjuta till Zamyla, 837 00:36:23,590 --> 00:36:25,136 Jag tror, ​​för trick där. 838 00:36:25,136 --> 00:36:27,760 Så i slutändan, hittar du en progression av problem den här veckan, 839 00:36:27,760 --> 00:36:30,700 varav den första är ganska liten, sedan medium, sedan en lite större. 840 00:36:30,700 --> 00:36:33,200 Men alla av dem använder byggnaden kvarter från den senaste veckan, 841 00:36:33,200 --> 00:36:35,280 från denna supersection, problem set specifikation 842 00:36:35,280 --> 00:36:36,710 sätter dig på otaliga resurser. 843 00:36:36,710 --> 00:36:41,000 Men ändå, om alls kämpar, särskilt bland de mindre bekväma 844 00:36:41,000 --> 00:36:42,917 utan tidigare bakgrund, komma till kontorstid 845 00:36:42,917 --> 00:36:44,958 På måndag och tisdag och Onsdag och torsdag. 846 00:36:44,958 --> 00:36:46,950 Gå till CS50 Diskutera via kursens hemsida, 847 00:36:46,950 --> 00:36:49,080 via vilken du kan chatta med personal och klasskamrater. 848 00:36:49,080 --> 00:36:51,670 >> Men i slutändan, jag tror att bästa råd är bara börja tidigt. 849 00:36:51,670 --> 00:36:54,711 Det är inte den typ av klass som du bör start psets på onsdag 850 00:36:54,711 --> 00:36:56,640 natt, eller ännu värre torsdag kväll. 851 00:36:56,640 --> 00:36:59,067 >> MARIA: Mitt bästa råd är ha börjat vid Måndag. 852 00:36:59,067 --> 00:36:59,900 DAVID MALAN: måndag. 853 00:36:59,900 --> 00:37:02,490 Så om du inte har startat already-- nej. 854 00:37:02,490 --> 00:37:04,732 Men även om inte måndag, sedan tisdag. 855 00:37:04,732 --> 00:37:05,690 Ju tidigare desto bättre. 856 00:37:05,690 --> 00:37:08,605 Och det är orsaken till att Kursen har så många sena dagar är 857 00:37:08,605 --> 00:37:10,535 för att ge dig en bit av en psykologisk press 858 00:37:10,535 --> 00:37:13,684 att börja tidigare, men ändå låta saker slip när saker tar längre tid 859 00:37:13,684 --> 00:37:14,350 än du förväntar dig. 860 00:37:14,350 --> 00:37:17,950 >> MARIA: Och du vill använda kontorstid så mycket du kan, alltför. 861 00:37:17,950 --> 00:37:20,291 >> DAVID MALAN: Några frågor? 862 00:37:20,291 --> 00:37:20,790 Okej. 863 00:37:20,790 --> 00:37:22,930 Tja, varför inte vi ajournera här? 864 00:37:22,930 --> 00:37:23,487