1 00:00:00,000 --> 00:00:03,353 >> [MUSIC SPILLE] 2 00:00:03,353 --> 00:00:04,842 3 00:00:04,842 --> 00:00:06,050 DAVID MALAN: Hei, alle sammen. 4 00:00:06,050 --> 00:00:07,777 Dette er CS50 er supersection. 5 00:00:07,777 --> 00:00:09,860 Tildelte §§ vil ikke starte for en uke. 6 00:00:09,860 --> 00:00:11,580 Og så i dag, jeg er her with-- 7 00:00:11,580 --> 00:00:12,122 >> MARIA: Maria. 8 00:00:12,122 --> 00:00:14,163 DAVID MALAN: --to faktisk ta en titt på problem 9 00:00:14,163 --> 00:00:16,110 satt en, kursets første ukene av materialet, 10 00:00:16,110 --> 00:00:19,780 få deg orientert med CS50 IDE, litt av Linux, operativsystemet som er 11 00:00:19,780 --> 00:00:22,290 kjører på IDE, samt se på noen av overgangs 12 00:00:22,290 --> 00:00:25,730 fra Scratch til C ledende opp til oppgavesettet en. 13 00:00:25,730 --> 00:00:28,340 >> Så uten videre, i oppgavesettet en, 14 00:00:28,340 --> 00:00:30,520 du kommer til å være introdusert til CS50 IDE, som 15 00:00:30,520 --> 00:00:33,230 Dette web-basert programmering miljø som vi bruker for 16 00:00:33,230 --> 00:00:34,280 å skrive programmer. 17 00:00:34,280 --> 00:00:37,280 Det er blitt designet for å se meget minner om en vanlig datamaskin 18 00:00:37,280 --> 00:00:39,430 system som kjører et operativsystem system kalt Linux. 19 00:00:39,430 --> 00:00:42,440 Men det er i den såkalte nettskyen, som betyr at alle i klassen 20 00:00:42,440 --> 00:00:45,100 kan faktisk ha sin egen konto og bruke den, også. 21 00:00:45,100 --> 00:00:48,950 >> Så de fleste av dere sikkert har aldri brukt et Linux-miljø før eller kanskje 22 00:00:48,950 --> 00:00:50,447 enda en kommandolinje miljø. 23 00:00:50,447 --> 00:00:52,280 Og en kommandolinje Miljøet er forskjellig. 24 00:00:52,280 --> 00:00:53,200 Det er all tekstlig. 25 00:00:53,200 --> 00:00:54,730 Det er alle tastaturkommandoer. 26 00:00:54,730 --> 00:00:59,480 Og det er ingen musefunksjonen, ingen ikoner, ingen dialog vinduer, ingen menyer. 27 00:00:59,480 --> 00:01:00,212 Det er rent tekst. 28 00:01:00,212 --> 00:01:01,920 Så i starten, det slag føles som et skritt 29 00:01:01,920 --> 00:01:04,434 bakover i form av raffinement. 30 00:01:04,434 --> 00:01:06,600 Men det ender opp med å bli mye kraftigere, absolutt, 31 00:01:06,600 --> 00:01:08,510 for en datamaskin vitenskapsmann, til slutt. 32 00:01:08,510 --> 00:01:09,540 >> Så la oss ta en titt. 33 00:01:09,540 --> 00:01:13,850 Her er jeg på CS50.io, via som du kan logge inn CS50 IDE. 34 00:01:13,850 --> 00:01:17,414 Og mye som i Scratch, er det tre hovedområder til denne skjermen. 35 00:01:17,414 --> 00:01:20,080 Så på venstre side har vi hva som vil være den filbehandleren. 36 00:01:20,080 --> 00:01:22,413 Og det er denne mappen toppen, som er akkurat nå tom 37 00:01:22,413 --> 00:01:24,690 siden jeg ble kvitt all min filer før supersection. 38 00:01:24,690 --> 00:01:27,599 Og det er der vi vil lagre C-filer som vi skriver. 39 00:01:27,599 --> 00:01:30,890 Øverst til høyre, har vi et sted der alt av koden vår kommer til å bli skrevet. 40 00:01:30,890 --> 00:01:34,610 Og faktisk, hvis jeg klikker dette pluss, dette kommer til å la meg velge ny fil. 41 00:01:34,610 --> 00:01:38,310 Og her kan jeg begynne å skrive C-kode eller egentlig, en rekke andre språk. 42 00:01:38,310 --> 00:01:42,670 >> Og deretter på bunnen hvor den sier jharvard @ ide50-- og dine vil 43 00:01:42,670 --> 00:01:45,080 si noe litt different-- hva dette kalles? 44 00:01:45,080 --> 00:01:48,644 45 00:01:48,644 --> 00:01:49,310 Terminalvindu. 46 00:01:49,310 --> 00:01:49,570 Yeah. 47 00:01:49,570 --> 00:01:51,810 Så terminalvinduet er den såkalte kommandolinjen 48 00:01:51,810 --> 00:01:55,540 grensesnitt via som du kan samhandle med det underliggende operativsystemet. 49 00:01:55,540 --> 00:01:58,220 Og for nå, vi kommer til å gjøre svært lite bruk av dette-- 50 00:01:58,220 --> 00:02:01,170 bare for å kompilere, for å se på feilmeldinger som vi ser, 51 00:02:01,170 --> 00:02:02,347 og for å kjøre våre programmer. 52 00:02:02,347 --> 00:02:04,680 Men til slutt, vi skal for å gjøre det mye mer, så vel. 53 00:02:04,680 --> 00:02:07,490 Og du kan til og med installere programvare og administrere din arbeidsplass 54 00:02:07,490 --> 00:02:09,066 innen CS50 IDE, også. 55 00:02:09,066 --> 00:02:10,440 Men mer om det en annen gang. 56 00:02:10,440 --> 00:02:12,689 >> Så la oss gå videre og skrive et meget enkelt program bare 57 00:02:12,689 --> 00:02:15,064 å gå gjennom en warm-up av hello.c, som er kanskje 58 00:02:15,064 --> 00:02:16,480 det enkleste programmet vi kan skrive. 59 00:02:16,480 --> 00:02:18,330 Jeg har allerede åpnet opp en ny fane. 60 00:02:18,330 --> 00:02:24,310 Jeg kommer til å gå videre og si inkluderer 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 ("Hello, World" backslash n, nær sitat, 64 00:02:35,200 --> 00:02:39,480 nære parentes og semikolon. 65 00:02:39,480 --> 00:02:39,990 >> Greit. 66 00:02:39,990 --> 00:02:41,700 Så nå legger merke til vinduet mitt er untitled. 67 00:02:41,700 --> 00:02:44,840 Så jeg er veldig raskt kommer å gå opp til File, Save. 68 00:02:44,840 --> 00:02:46,910 Og det er viktig at Jeg kaller ikke dette "hei." 69 00:02:46,910 --> 00:02:49,243 Så en veldig vanlig feil, spesielt i oppgavesettet en, 70 00:02:49,243 --> 00:02:52,530 er å tilfeldigvis bare ringe din program "vann" eller "grådig" eller "Mario" 71 00:02:52,530 --> 00:02:53,890 eller "kreditt" eller lignende. 72 00:02:53,890 --> 00:02:55,970 Men du faktisk ønsker å gjøre at du har den filtypen 73 00:02:55,970 --> 00:02:58,928 fordi dette er den eneste måten kompilatoren og også kode editor 74 00:02:58,928 --> 00:03:00,710 vet at du er egentlig skrive C-kode. 75 00:03:00,710 --> 00:03:02,280 Så la meg gå videre og klikk på Lagre. 76 00:03:02,280 --> 00:03:05,710 >> Og nå, også, hva CS50 IDE har gjort for oss er det også 77 00:03:05,710 --> 00:03:07,120 syntaks uthevet alt. 78 00:03:07,120 --> 00:03:08,822 Så det er gjort alt veldig fargerik. 79 00:03:08,822 --> 00:03:10,780 Og hele hensikten med som ikke er funksjonell. 80 00:03:10,780 --> 00:03:14,290 Det er bare å trekke øynene mine konseptuelt forskjellige brikker 81 00:03:14,290 --> 00:03:15,310 av dette programmet. 82 00:03:15,310 --> 00:03:17,570 Så la oss gå videre og kompilere dette. 83 00:03:17,570 --> 00:03:19,490 Og jeg kan kompilere dette i et par måter. 84 00:03:19,490 --> 00:03:22,010 Og i en uke, er old-school måte som vi gjorde 85 00:03:22,010 --> 00:03:26,250 det var bokstavelig talt på kommando line-- "klang hello.c." 86 00:03:26,250 --> 00:03:27,596 Og så traff jeg på Enter. 87 00:03:27,596 --> 00:03:29,720 Og ingenting ser ut til å skje i terminalvinduet. 88 00:03:29,720 --> 00:03:32,654 Men hva gjorde endring i IDE? 89 00:03:32,654 --> 00:03:35,320 Der, igjen, IDE betyr bare Integrated Development Environment. 90 00:03:35,320 --> 00:03:38,360 Det er en fancy måte å si dette integrert utviklingsmiljø 91 00:03:38,360 --> 00:03:40,620 miljø for utvikling av programvare. 92 00:03:40,620 --> 00:03:42,477 Så hva gjorde endring i brukergrensesnittet? 93 00:03:42,477 --> 00:03:44,310 Hva la du merke som er annerledes, Maria? 94 00:03:44,310 --> 00:03:47,100 >> MARIA: Jeg la merke til noe under IDE50 mappe opp her. 95 00:03:47,100 --> 00:03:47,850 >> DAVID MALAN: Yeah. 96 00:03:47,850 --> 00:03:50,230 Så her oppe, ikke bare har vi "hello.c." 97 00:03:50,230 --> 00:03:53,120 Vi har også "a.out", som er slag av en dum navn på et program. 98 00:03:53,120 --> 00:03:56,430 Men ja, det er standardnavnet for en program når du bare kompilere koden din 99 00:03:56,430 --> 00:03:59,110 og ikke fortelle kompilatoren hva filen til utgang. 100 00:03:59,110 --> 00:04:01,790 Så hvis jeg ønsker å kjøre dette, jeg må fortelle compiler-- 101 00:04:01,790 --> 00:04:05,340 eller rettere sagt, jeg trenger å fortelle arbeidsplass som jeg 102 00:04:05,340 --> 00:04:09,780 ønsker å kjøre programmet som heter "a.out." 103 00:04:09,780 --> 00:04:10,550 Gå. 104 00:04:10,550 --> 00:04:12,474 Og det er "hallo, verden. "nå" ./ ". 105 00:04:12,474 --> 00:04:13,390 er faktisk viktig. 106 00:04:13,390 --> 00:04:16,050 Selv om normalt bare vi skrive navnene på kommandoer, 107 00:04:16,050 --> 00:04:19,060 når det er et program du har skrevet, vil du si "./" 108 00:04:19,060 --> 00:04:22,460 fordi som eksplisitt forteller Linux som du ønsker å kjøre et program som heter 109 00:04:22,460 --> 00:04:26,930 "a.out" det er i dette, hvor dot betyr denne katalogen at jeg for øyeblikket 110 00:04:26,930 --> 00:04:31,600 i, som skjer for å være kalt arbeidsplassen "a.out. 111 00:04:31,600 --> 00:04:35,410 Fordi hvis jeg bare sa "a.out," Enter Jeg kommer til å få "-kommandoen a.out ikke 112 00:04:35,410 --> 00:04:38,035 fant "fordi computer-- fordi jeg oppfunnet "a.out;" 113 00:04:38,035 --> 00:04:40,910 det kom ikke med computer-- ikke vet hvor du skal lete etter den, 114 00:04:40,910 --> 00:04:43,590 selv om det er rett under nesen, så å si. 115 00:04:43,590 --> 00:04:44,090 OK. 116 00:04:44,090 --> 00:04:49,910 Så vi kan endre dette til være "klang -o hallo hello.c." 117 00:04:49,910 --> 00:04:53,030 Og hvis jeg trykker Enter, hva program dette kommer til utgang for meg? 118 00:04:53,030 --> 00:04:55,710 Hva er navnet på filen? 119 00:04:55,710 --> 00:04:57,500 Ja, i ryggen. 120 00:04:57,500 --> 00:04:58,479 Det er riktig. "Hallo." 121 00:04:58,479 --> 00:05:00,520 Så "hallo" kommer til å være navnet på programmet 122 00:05:00,520 --> 00:05:04,610 fordi vi har brukt en såkalt kommandolinje argument, som er like 123 00:05:04,610 --> 00:05:08,120 en måte å endre virkemåten til kompilatoren å faktisk utgang 124 00:05:08,120 --> 00:05:09,450 et bestemt navn fil. 125 00:05:09,450 --> 00:05:12,400 Og faktisk, hvis jeg zoome ut og se opp her, 126 00:05:12,400 --> 00:05:17,430 nå har jeg ikke bare "a.out" og "hello.c", men også "hallo", også. 127 00:05:17,430 --> 00:05:22,410 Så nå kan jeg gjøre "./hello," Enter. 128 00:05:22,410 --> 00:05:23,640 Og det er "hallo, verden." 129 00:05:23,640 --> 00:05:25,640 Men lastly-- og dette vil nå bli stevnet 130 00:05:25,640 --> 00:05:27,590 vi bruker hele semester, typically-- 131 00:05:27,590 --> 00:05:30,070 er du også bare si "make hei." 132 00:05:30,070 --> 00:05:33,370 Og ja, det sier det er opp å date fordi det finnes allerede. 133 00:05:33,370 --> 00:05:37,860 La meg gå videre og ta med rm kommandoen, både "a.out" - 134 00:05:37,860 --> 00:05:39,644 og si "fjern vanlig fil a.out?" 135 00:05:39,644 --> 00:05:41,810 Det betyr bare at, er du sikker på at du vil slette det? 136 00:05:41,810 --> 00:05:42,880 Jeg kommer til å si ja. 137 00:05:42,880 --> 00:05:46,690 Og så kommer jeg til å fjerne "Hallo", men ikke "hello.c." 138 00:05:46,690 --> 00:05:49,920 Jeg kommer til å si "ja" eksplisitt, men "y" er tilstrekkelig, så vel. 139 00:05:49,920 --> 00:05:52,140 >> Og nå merke hvis jeg skriver ls-- som husker, 140 00:05:52,140 --> 00:05:55,540 betyr list-- det viser alle av filene i mappen min. 141 00:05:55,540 --> 00:05:57,850 Og faktisk, hvis jeg zoome ut og se på øverst til venstre, 142 00:05:57,850 --> 00:05:59,730 det bekrefter at det er i denne mappen, selv 143 00:05:59,730 --> 00:06:04,990 om den er merket som IDE50 opp her og ikke arbeidsområde, det er bare "hello.c." 144 00:06:04,990 --> 00:06:09,152 Så nå her nede, hvis jeg do "gjøre hallo," Enter 145 00:06:09,152 --> 00:06:12,360 Nå ser jeg en mye lengre kommando, men en mer sofistikert kommando som kommer 146 00:06:12,360 --> 00:06:13,940 å være nyttig i ukene som kommer. 147 00:06:13,940 --> 00:06:16,720 Og nå kan jeg si "./hello." 148 00:06:16,720 --> 00:06:19,257 >> Så la oss ta en rask tur noen andre Linux-kommandoer. 149 00:06:19,257 --> 00:06:21,840 Så hvorfor ikke vi ta et skritt tilbake og faktisk se på C mer 150 00:06:21,840 --> 00:06:25,020 generelt, overgangen fra Scratch til C, og deretter konkludere med en titt 151 00:06:25,020 --> 00:06:27,305 ved den første problem satt i C. All right. 152 00:06:27,305 --> 00:06:30,430 Så jeg kommer til å gå videre og bare ren opp min arbeidsplass med Ctrl-L bare 153 00:06:30,430 --> 00:06:31,429 å holde skjermen ryddig. 154 00:06:31,429 --> 00:06:33,520 Men som ikke har noen funksjonell innvirkning på annen måte. 155 00:06:33,520 --> 00:06:35,820 >> Husk at vi har sett noen kommandoer nå. 156 00:06:35,820 --> 00:06:39,900 Så vi har sett klang, som du vanligvis slipper å utføre manuelt lenger. 157 00:06:39,900 --> 00:06:41,650 Vi vil i stedet bruke sminke. 158 00:06:41,650 --> 00:06:45,290 Men vi så også ls, som viser et oversikt over filene i katalogen min. 159 00:06:45,290 --> 00:06:48,750 Og nå hvorfor er det-- det to filer nå, "Hei" og "hello.c." 160 00:06:48,750 --> 00:06:52,240 Hvorfor er det en stjerne eller en Stjernen etter "hallo"? 161 00:06:52,240 --> 00:06:54,900 Hva gjorde at betegne, basert på hva vi så i uke én? 162 00:06:54,900 --> 00:06:58,852 163 00:06:58,852 --> 00:07:00,400 Hva synes du? 164 00:07:00,400 --> 00:07:02,742 Hva gjør stjernen bety? 165 00:07:02,742 --> 00:07:04,614 >> MARIA: For-- programmet "Hallo"? 166 00:07:04,614 --> 00:07:05,530 DAVID MALAN: "Hei *". 167 00:07:05,530 --> 00:07:06,330 Yeah. 168 00:07:06,330 --> 00:07:07,760 Å, ja? 169 00:07:07,760 --> 00:07:08,639 Oh, kjørbar. 170 00:07:08,639 --> 00:07:09,180 Det er riktig. 171 00:07:09,180 --> 00:07:10,890 Slik det betyr at "hallo" er kjørbar. 172 00:07:10,890 --> 00:07:13,430 Så ja, det er derfor Jeg kan gjøre "./hello." 173 00:07:13,430 --> 00:07:13,930 Greit. 174 00:07:13,930 --> 00:07:15,179 Så hva annet kan jeg gjøre her? 175 00:07:15,179 --> 00:07:17,290 Vel, det viser seg at jeg kan også opprette kataloger. 176 00:07:17,290 --> 00:07:20,924 Så la meg gå videre og skape, for eksempel en "pset1" katalogen. 177 00:07:20,924 --> 00:07:23,590 Og problemet satt spesifikasjonen vil ha deg gjøre akkurat dette, 178 00:07:23,590 --> 00:07:25,260 slik at du ikke trenger å huske i dag. 179 00:07:25,260 --> 00:07:27,340 Men "mkdir pset1" synes til å ha noen innvirkning. 180 00:07:27,340 --> 00:07:30,540 Men igjen, ingen feilmelding er generelt en god ting. 181 00:07:30,540 --> 00:07:34,060 Så hvis jeg skriver "ls" now-- ah, nå Jeg har en kjørbar fil som heter 182 00:07:34,060 --> 00:07:36,570 "Hallo", en C-fil som heter "hello.c." 183 00:07:36,570 --> 00:07:40,860 Og så den etterfølgende skråstrek, så å tale, betyr at dette er en katalog. 184 00:07:40,860 --> 00:07:42,510 >> Så ja, nå ønsker jeg å åpne den. 185 00:07:42,510 --> 00:07:45,730 Og jeg ikke dobbeltklikke på det som i et GUI, et grafisk miljø. 186 00:07:45,730 --> 00:07:48,550 Jeg i stedet si "cd pset1." 187 00:07:48,550 --> 00:07:49,640 Gå. 188 00:07:49,640 --> 00:07:53,100 Noe interessant synes å ha skjedde bortsett fra min lille teksten 189 00:07:53,100 --> 00:07:57,300 her-- dette er Linux sin måte minner meg hvor jeg er, så hva mappen er åpen. 190 00:07:57,300 --> 00:08:00,080 Det er bare å fortelle meg eksplisitt i motsetning til grafisk. 191 00:08:00,080 --> 00:08:05,100 Og hvis jeg skriver "ls", hvorfor ser jeg en annen spør en gang, tror du, 192 00:08:05,100 --> 00:08:07,269 når jeg vise innholdet i pset1? 193 00:08:07,269 --> 00:08:09,310 MARIA: Du har sannsynligvis ikke har noe der inne. 194 00:08:09,310 --> 00:08:09,630 DAVID MALAN: Yeah. 195 00:08:09,630 --> 00:08:11,510 Så da vi ikke har åpenbart skapt noe der inne 196 00:08:11,510 --> 00:08:13,150 fordi jeg nettopp opprettet katalogen. 197 00:08:13,150 --> 00:08:17,690 Nå, hvis jeg ønsket å lage en file-- for eksempel, kan jeg lage en ny fil. 198 00:08:17,690 --> 00:08:20,190 Og så jeg kunne gå til Lagre og lagre det som, 199 00:08:20,190 --> 00:08:23,090 som "mario.c" hvis du gjør standardutgaven av PSet en. 200 00:08:23,090 --> 00:08:27,610 Og så, som en hvilken som helst Mac eller PC, bare velge mappen "pset1, Save. 201 00:08:27,610 --> 00:08:28,740 Og nå filen er tom. 202 00:08:28,740 --> 00:08:31,160 Men la oss zoome inn på nytt for andre. 203 00:08:31,160 --> 00:08:32,470 La oss gjøre ls her. 204 00:08:32,470 --> 00:08:34,470 Nå ser vi "mario.c". 205 00:08:34,470 --> 00:08:37,850 >> Så det er et par andre kommandoer som er verdt å holde i tankene over tid-- 206 00:08:37,850 --> 00:08:41,200 klar, eller Ctrl-L er hva jeg har vært trykket; mkdir vi har sett; 207 00:08:41,200 --> 00:08:45,240 rm vi har sett, også, som er for å fjerne eller slette en fil. 208 00:08:45,240 --> 00:08:49,310 Pass deg du kan also-- og hvis du ser på elektronisk opplæring, vil du rm -rf 209 00:08:49,310 --> 00:08:52,630 er en svært vanlig måte å si slette en mappe som har ting i den. 210 00:08:52,630 --> 00:08:54,280 Bare være super, super forsiktig. 211 00:08:54,280 --> 00:08:58,780 -rf betyr rekursivt slett hva det er 212 00:08:58,780 --> 00:09:01,150 du prøver å slette og tvangs slette den. 213 00:09:01,150 --> 00:09:04,630 Så rekursiv hjelp 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 makt betyr ikke engang spør meg ja eller nei, jeg er sikker? 216 00:09:08,680 --> 00:09:11,960 Så det er en super farlig måte slette masse ting raskt. 217 00:09:11,960 --> 00:09:17,210 Men beware-- altfor ofte gjør en uforferdet student ved et uhell sletter, sier PSet 218 00:09:17,210 --> 00:09:18,000 en, for eksempel. 219 00:09:18,000 --> 00:09:19,833 >> MARIA: Og hvis de bare gjøre -r, de kommer 220 00:09:19,833 --> 00:09:21,870 å spørre dem om hver enkelt fil. 221 00:09:21,870 --> 00:09:22,790 >> DAVID MALAN: Hvilken er moderat irriterende. 222 00:09:22,790 --> 00:09:23,480 >> MARIA: Yeah. 223 00:09:23,480 --> 00:09:25,813 >> DAVID MALAN: Så det er derfor så mange av oss, inkludert seg selv, 224 00:09:25,813 --> 00:09:27,070 er i vane å bruke rf. 225 00:09:27,070 --> 00:09:27,861 Men det er farlig. 226 00:09:27,861 --> 00:09:29,010 Så kjøper pass. 227 00:09:29,010 --> 00:09:31,050 Og så mv er slags interessant navngitt. 228 00:09:31,050 --> 00:09:33,600 Så dette er farten kommando, som føles litt rart 229 00:09:33,600 --> 00:09:37,260 fordi du faktisk kan bruke den til å flytte filer fra ett sted til et annet. 230 00:09:37,260 --> 00:09:39,970 For eksempel anta at jeg messed up. 231 00:09:39,970 --> 00:09:43,660 Anta at jeg opprettet en ny fil for PSet. 232 00:09:43,660 --> 00:09:46,320 Og jeg lagret det som "greedy.c." 233 00:09:46,320 --> 00:09:49,970 Men antar jeg tilfeldigvis lagre det i IDE50-- så i min arbeidsplass 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å mye på øverst til venstre. 236 00:09:53,960 --> 00:09:55,284 Det er "greedy.c." 237 00:09:55,284 --> 00:09:56,450 Og det er noen løsninger. 238 00:09:56,450 --> 00:09:58,324 Så en kan jeg bruke super brukervennlig måte 239 00:09:58,324 --> 00:09:59,740 for bare å dra og slippe den. 240 00:09:59,740 --> 00:10:01,910 Og det ville faktisk løse dette problemet. 241 00:10:01,910 --> 00:10:04,967 Men i dag, vi prøver å se på de mer uforståelige men effektive måter 242 00:10:04,967 --> 00:10:05,550 å gjøre dette på. 243 00:10:05,550 --> 00:10:07,880 Så la meg ta "ls" i pset1. 244 00:10:07,880 --> 00:10:09,690 Og jeg bare se "mario.c." 245 00:10:09,690 --> 00:10:13,450 La meg gå videre og gjøre "cd ..". 246 00:10:13,450 --> 00:10:15,320 Så CD igjen er endringen katalogen. 247 00:10:15,320 --> 00:10:18,130 ".." Betyr hva, skjønt? 248 00:10:18,130 --> 00:10:21,100 Sist gang jeg sa "cd pset1 "for å gå inn pset1. 249 00:10:21,100 --> 00:10:24,360 Så når jeg sier "cd ..", hva gjør jeg? 250 00:10:24,360 --> 00:10:24,910 Bakover. 251 00:10:24,910 --> 00:10:25,150 Yeah. 252 00:10:25,150 --> 00:10:26,750 >> Så det kommer til den såkalte overordnede. 253 00:10:26,750 --> 00:10:29,730 Gå ett nivå opp, som spennende ut av 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 hva den gjorde. 256 00:10:31,900 --> 00:10:37,070 Den beveget meg bare inn i arbeidsområdet stedet av inn pset1, som er i arbeidsområdet. 257 00:10:37,070 --> 00:10:39,710 Og nå hvis jeg skriver "ls", det er en hel haug med ting. 258 00:10:39,710 --> 00:10:41,650 I det "greedy.c". 259 00:10:41,650 --> 00:10:48,720 Så nå la meg bruke mv bokstavelig flytte "greedy.c" inn pset1. 260 00:10:48,720 --> 00:10:51,120 Og så mye av Linux-kommandoer fungerer akkurat som dette. 261 00:10:51,120 --> 00:10:54,470 De tar ingen argumenter eller de tar én argument eller de ta to kommandolinjen 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 tilfellet, er det bokstavelig talt gjøre hva 264 00:10:57,240 --> 00:11:01,670 det står, riktignok succinctly-- flytte greedy.c inn pset1. 265 00:11:01,670 --> 00:11:02,310 Gå. 266 00:11:02,310 --> 00:11:03,310 Ingenting ser ut til å skje. 267 00:11:03,310 --> 00:11:06,180 Men hvis jeg gjør en ls igjen, er grådig borte. 268 00:11:06,180 --> 00:11:12,437 Og hvis jeg gjør "cd pset1", Enter, og deretter ls igjen, nå er det på rett sted. 269 00:11:12,437 --> 00:11:14,270 Som en side, hvis for noen reason-- spesielt 270 00:11:14,270 --> 00:11:16,194 hvis du har uregelmessig nettverkstilkobling 271 00:11:16,194 --> 00:11:18,360 eller du vandre rundt campus med den bærbare datamaskinen lokk 272 00:11:18,360 --> 00:11:20,180 lukket og deretter åpne den opp igjen og arbeidsområdet 273 00:11:20,180 --> 00:11:21,730 synes noe ute av sync, ingen big deal. 274 00:11:21,730 --> 00:11:23,646 Bare laste nettleseren din vindu, og det skal 275 00:11:23,646 --> 00:11:26,339 resync slik at den venstre filbehandleren ser nøyaktig 276 00:11:26,339 --> 00:11:27,380 som terminalvinduet. 277 00:11:27,380 --> 00:11:27,921 Ikke vær redd. 278 00:11:27,921 --> 00:11:31,460 Når du er i tvil, oppdater siden, så lenge du har lagret filene allerede. 279 00:11:31,460 --> 00:11:31,960 OK. 280 00:11:31,960 --> 00:11:34,710 Så mv kan også brukes til å endre navn på filer. 281 00:11:34,710 --> 00:11:36,760 Og la oss ta en titt på denne siste kommandoen her. 282 00:11:36,760 --> 00:11:39,950 Så suppose-- og denne er super felles, også tidlig. 283 00:11:39,950 --> 00:11:46,400 Noen studenter tidvis lage en fil kalt, la oss say-- hva som er en annen? 284 00:11:46,400 --> 00:11:47,730 Like "WATER.C." 285 00:11:47,730 --> 00:11:51,080 Så jeg vil bare hyle, for ingen grunn til, i alle caps. 286 00:11:51,080 --> 00:11:53,190 Men dette er ikke Riktig navn på filen 287 00:11:53,190 --> 00:11:56,660 hvis bare fordi vår oppgavesettet spesifikasjonen ikke fortelle deg 288 00:11:56,660 --> 00:11:59,430 å lagre filen som all caps "WATER.C." 289 00:11:59,430 --> 00:12:01,320 I stedet, forventer vi "water.c" med små bokstaver. 290 00:12:01,320 --> 00:12:03,140 Og, faktisk, er dette problematisk fordi check50, 291 00:12:03,140 --> 00:12:04,370 et program du kommer å møtes i problem 292 00:12:04,370 --> 00:12:07,350 satt en som automatisk tester riktigheten av koden din 293 00:12:07,350 --> 00:12:11,615 kommer til å kjefte på deg hvis den ikke kan finne "water.c" i små bokstaver. 294 00:12:11,615 --> 00:12:12,712 >> Så jeg trenger å fikse dette. 295 00:12:12,712 --> 00:12:14,920 Så mange forskjellige måter å gjøre dette, hvorav den første 296 00:12:14,920 --> 00:12:18,330 ville være å kontrollere Klikk eller høyreklikk filnavnet og bare endre Gi nytt navn. 297 00:12:18,330 --> 00:12:19,740 Helt greit å gjøre det. 298 00:12:19,740 --> 00:12:21,820 Men igjen, i dag, la oss gjøre det litt mer avansert. 299 00:12:21,820 --> 00:12:26,680 La oss bruke mv for å endre "WATER.C" til "water.c." 300 00:12:26,680 --> 00:12:30,690 Så du kan også bruke det første argumentet å endre navnet til det andre argumentet 301 00:12:30,690 --> 00:12:34,455 hvis det andre argumentet er ikke, i Faktisk, en mappe eller et katalognavn. 302 00:12:34,455 --> 00:12:35,120 >> Greit. 303 00:12:35,120 --> 00:12:39,560 Og til slutt, litt trick-- så jeg er i min arbeidsplass katalog for øyeblikket. 304 00:12:39,560 --> 00:12:43,660 Hvis jeg ønsker å komme inn PSet en, Jeg kan sikkert skrive "cd pset1." 305 00:12:43,660 --> 00:12:47,260 Men det er så kjedelig å skrive "pset1" eller lengre filnavn eller mappenavn 306 00:12:47,260 --> 00:12:47,980 fortsatt. 307 00:12:47,980 --> 00:12:51,960 Så veldig ofte i Linux, hva du kan gjøre er å begynne å skrive "PSE" 308 00:12:51,960 --> 00:12:56,100 og bare gå lei, traff Tab, og la datamaskinen finne det ut for deg. 309 00:12:56,100 --> 00:12:58,190 Super nyttig å komme inn som vane. 310 00:12:58,190 --> 00:13:01,079 Den eneste haken er hvis du har flere filer eller mapper med start 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 å skrive noen flere før datamaskin vet hva de skal gjøre. 313 00:13:05,525 --> 00:13:06,820 >> MARIA: Vi liker snarveier. 314 00:13:06,820 --> 00:13:08,695 >> DAVID MALAN: Dette vil spare deg så mye tid. 315 00:13:08,695 --> 00:13:11,930 Og også, som vi sa i foredraget du kan bla opp i historien, opp og ned, 316 00:13:11,930 --> 00:13:15,461 å finne nylig utført kommandoer, så vel. 317 00:13:15,461 --> 00:13:15,960 Greit. 318 00:13:15,960 --> 00:13:20,904 Så nå, la oss vende oppmerksomheten tilbake til et enkelt program, hallo verden. 319 00:13:20,904 --> 00:13:22,195 Så vi har satt sammen denne nøyaktig. 320 00:13:22,195 --> 00:13:24,050 Og nå hvorfor ikke vi ta en titt på datatyper 321 00:13:24,050 --> 00:13:26,776 og deretter overgang fra noen tilsvarSkrape blokker til C. 322 00:13:26,776 --> 00:13:27,400 MARIA: Awesome. 323 00:13:27,400 --> 00:13:30,031 Så nå som du har begynt skrive programmer i C, 324 00:13:30,031 --> 00:13:32,530 vi kommer til å begynne å snakke om datatyper og variabler. 325 00:13:32,530 --> 00:13:37,570 Så noen datatyper som du ønsker å vite starter nå 326 00:13:37,570 --> 00:13:39,400 er de som er uthevet i blått. 327 00:13:39,400 --> 00:13:42,420 Så vi har int første, som står for heltall. 328 00:13:42,420 --> 00:13:46,075 Og som holder heltall, som du kan ha guessed-- så 1, 2, 3, 329 00:13:46,075 --> 00:13:47,950 og andre heltall som du kan tenke 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, ja. 332 00:13:50,220 --> 00:13:51,450 Og 0. 333 00:13:51,450 --> 00:13:54,250 Da har vi flyter, som er flyttall. 334 00:13:54,250 --> 00:13:58,360 Så det er alle de reelle tallene som har desimaler. 335 00:13:58,360 --> 00:14:03,960 Så 5,0, 5,2, og enda mer sifre etter desimaltegnet, 336 00:14:03,960 --> 00:14:05,620 så vel, og også negative. 337 00:14:05,620 --> 00:14:07,530 Da har vi char som er et tegn. 338 00:14:07,530 --> 00:14:10,240 Så jeg tror vi snakket om dette i forelesning i dag. 339 00:14:10,240 --> 00:14:15,682 Men vi har bokstaver, for example-- A, B, C-- som kan lagres som en char. 340 00:14:15,682 --> 00:14:18,390 Men så har vi mye flere symboler som kan lagres som en char. 341 00:14:18,390 --> 00:14:22,380 Og de lagres 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 de som vurderer å Sant eller Falsk eller 1 og 0, henholdsvis. 344 00:14:29,067 --> 00:14:31,650 DAVID MALAN: Og huske at bool kommer fra CS50 biblioteket. 345 00:14:31,650 --> 00:14:33,300 Så det er ikke bygget inn C, men det er super nyttig 346 00:14:33,300 --> 00:14:34,850 å ha den oppfatningen av ekte og falske. 347 00:14:34,850 --> 00:14:36,990 Og selv om du kanskje think-- morsomt faktum. 348 00:14:36,990 --> 00:14:43,700 En bool teknisk trenger hvor mange biter, virkelig, å representere sant versus usant? 349 00:14:43,700 --> 00:14:47,910 Hvor mange biter du tror gjøre du trenger, maksimalt? 350 00:14:47,910 --> 00:14:48,790 Ja, bare en. 351 00:14:48,790 --> 00:14:52,077 Så det viser seg at C kan ikke gi deg bare en bit. 352 00:14:52,077 --> 00:14:54,160 Den minste måleenheten du kan få er åtte. 353 00:14:54,160 --> 00:14:57,090 Så det er litt bortkastet de du er ved hjelp av en hel byte, eller åtte biter, 354 00:14:57,090 --> 00:14:58,340 å representere Sant eller usant. 355 00:14:58,340 --> 00:15:01,807 Men det er bare slik det er implementert i C ved CS50 biblioteket. 356 00:15:01,807 --> 00:15:04,890 Maria: Og så de som vi er ikke kommer til å snakke om så omfattende 357 00:15:04,890 --> 00:15:08,060 rett now-- dobbel, det er for større flyter. 358 00:15:08,060 --> 00:15:09,811 Lang lang og kort er også for heltall. 359 00:15:09,811 --> 00:15:10,643 DAVID MALAN: Ja. 360 00:15:10,643 --> 00:15:13,190 I hacker utgave av PSet en, vi faktisk bruker lang lang. 361 00:15:13,190 --> 00:15:15,801 Men for standardutgaven, Det skulle ikke være nødvendig. 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 være sannsynligvis kjent med de fleste av disse. 365 00:15:20,110 --> 00:15:22,620 Tillegg, +; subtraksjon, -. 366 00:15:22,620 --> 00:15:24,070 For multiplikasjon, har vi *. 367 00:15:24,070 --> 00:15:25,900 Så ikke den X som vi vanligvis bruker. 368 00:15:25,900 --> 00:15:27,840 Divisjon, har vi den backslash. 369 00:15:27,840 --> 00:15:31,380 Og modulo er vår siste operatør som vi kommer til å snakke om akkurat nå. 370 00:15:31,380 --> 00:15:35,610 Det er en operatør som tillater oss å ta resten av en deling. 371 00:15:35,610 --> 00:15:40,630 Så hvis vi har 4% 2, 4 delt ved 2 er to med en rest på 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 en. 374 00:15:42,950 --> 00:15:44,870 4% 5 er 4, som du kunne ha gjettet. 375 00:15:44,870 --> 00:15:48,860 Og husk når du bruker alle disse operatørene å bruke PEMDAS regler. 376 00:15:48,860 --> 00:15:54,060 >> DAVID MALAN: Så for å være klart, hvis du gjøre 4% 2, hvorfor er det 0, egentlig? 377 00:15:54,060 --> 00:15:57,480 >> MARIA: Fordi fire dividert 2 er to med en rest på 0. 378 00:15:57,480 --> 00:16:00,752 Så modulo gir oss at resten som i motsetning til resultatet av divisjonen. 379 00:16:00,752 --> 00:16:02,960 DAVID MALAN: Og ja, hva vi finner dette nyttig 380 00:16:02,960 --> 00:16:05,640 for er at i noen problemer det er ikke nødvendigvis en, 381 00:16:05,640 --> 00:16:08,040 hvis du vil ha den virkning å begrense deg selv 382 00:16:08,040 --> 00:16:10,720 til en rekke tall som 0 gjennom noe, 383 00:16:10,720 --> 00:16:13,904 du kan bruke modulo å vikle rundt tidligere enn som 2 milliarder 384 00:16:13,904 --> 00:16:16,320 eller 4 milliarder verdien som vi har snakket om i forelesningen. 385 00:16:16,320 --> 00:16:16,870 >> MARIA: Yeah. 386 00:16:16,870 --> 00:16:19,429 Og selv i "grådig" vi kan. 387 00:16:19,429 --> 00:16:21,345 DAVID MALAN: Ja, i Problemet satt en, også. 388 00:16:21,345 --> 00:16:22,520 MARIA: Ja, fint. 389 00:16:22,520 --> 00:16:24,340 DAVID MALAN: Good hint. 390 00:16:24,340 --> 00:16:25,750 MARIA: Sorry. 391 00:16:25,750 --> 00:16:28,590 Boolsk expressions-- så for boolske operatører, 392 00:16:28,590 --> 00:16:31,770 vi kommer til å snakke om alt av disse som du ser her. 393 00:16:31,770 --> 00:16:35,310 Så akkurat nå, har vi to likhetstegn oppført for likeverdige. 394 00:16:35,310 --> 00:16:38,650 Slik at de er for sammenligning. 395 00:16:38,650 --> 00:16:40,830 Så langt har vi bare sett en likhetstegn. 396 00:16:40,830 --> 00:16:44,870 Det er når vi tildeler en verdi til en variabel. 397 00:16:44,870 --> 00:16:50,160 Så hvis vi har sett int n = 5, deretter vi har tildelt fem til variabelen n. 398 00:16:50,160 --> 00:16:55,600 Men hvis vi ønsker å bruke == for Til sammenligning kan vi sjekke om n == 5. 399 00:16:55,600 --> 00:16:58,310 Og hvis n == 5, så det er sant. 400 00:16:58,310 --> 00:17:01,950 >> Så boolske operatorer tillate oss, i utgangspunktet, 401 00:17:01,950 --> 00:17:04,670 å evaluere boolsk uttrykk til Sant eller usant. 402 00:17:04,670 --> 00:17:07,819 Så ikke equals-- vi har utropstegn og likemenn. 403 00:17:07,819 --> 00:17:14,240 Så vi kan også sjekke om n ikke lik 5-- så n! = 5. 404 00:17:14,240 --> 00:17:17,640 Mindre enn, mindre enn eller lik større enn, større enn eller lik 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 de tillater oss å evaluere flere boolske uttrykk sammen 407 00:17:24,060 --> 00:17:27,930 i utgangspunktet komme sammen som en hel boolsk uttrykk. 408 00:17:27,930 --> 00:17:34,970 Så hvis vi ønsker å finne et nummer, si, som er større enn 5, men mindre enn 15 409 00:17:34,970 --> 00:17:39,810 på samme tid, vil vi bruke logisk AND-operatoren for å se om n er 410 00:17:39,810 --> 00:17:42,937 større enn 5 && n mindre enn 15. 411 00:17:42,937 --> 00:17:44,770 DAVID MALAN: Og her, også, det er veldig lett 412 00:17:44,770 --> 00:17:47,290 tidlig uhell bruker bare en enkelt-tegn 413 00:17:47,290 --> 00:17:48,572 eller en enkelt loddrett strek. 414 00:17:48,572 --> 00:17:51,280 Og forhåpentligvis vil kompilatoren kjefte på deg fordi de faktisk 415 00:17:51,280 --> 00:17:52,530 har en helt annen betydning. 416 00:17:52,530 --> 00:17:55,660 For de nysgjerrige, de er brukes for bitvis operasjoner, 417 00:17:55,660 --> 00:17:57,197 opererer på enkelte biter. 418 00:17:57,197 --> 00:17:58,780 Men du vil par av dem her. 419 00:17:58,780 --> 00:18:01,560 Og super viktig er at første, likhetstegnet, 420 00:18:01,560 --> 00:18:05,270 som er det likestilling operatør som motsetning til oppdraget operatør. 421 00:18:05,270 --> 00:18:08,552 >> MARIA: Og den vertikale linjen er ligger mellom slette og Return. 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: Jepp. 425 00:18:13,190 --> 00:18:15,890 Så la oss hoppe rett inn betinget utsagn. 426 00:18:15,890 --> 00:18:18,300 I Scratch, har du allerede sett, sannsynligvis, 427 00:18:18,300 --> 00:18:22,730 hvis uttalelser som lar deg sjekke om noe er sant, så 428 00:18:22,730 --> 00:18:23,660 gjøre noe annet. 429 00:18:23,660 --> 00:18:28,410 Så du kanskje har lyst å sjekke om din sprite er 430 00:18:28,410 --> 00:18:31,410 berøre noen andre sprite eller grensen av skjermen. 431 00:18:31,410 --> 00:18:35,520 Og da du kanskje har lyst til å avslutte spillet eller gjøre noe annet. 432 00:18:35,520 --> 00:18:40,000 Så syntaksen for at er "if (tilstand)." 433 00:18:40,000 --> 00:18:46,820 Så hvis din sprite berører noe, da trenger er inne i klammeparentes. 434 00:18:46,820 --> 00:18:48,980 >> Da har vi if-else uttalelser. 435 00:18:48,980 --> 00:18:54,080 Else tillater oss å gjøre noe hvis betingelsen at vi 436 00:18:54,080 --> 00:18:55,870 se etter i begynnelsen er ikke sant. 437 00:18:55,870 --> 00:19:01,530 Så hvis sprite berører grensen gjør dette, andre gjøre noe annet. 438 00:19:01,530 --> 00:19:04,030 Så ellers gjøre noe annet. 439 00:19:04,030 --> 00:19:07,530 Da har vi et kort eksempel på dette. 440 00:19:07,530 --> 00:19:11,551 Så hvis (military_time <12), vi ønsker å printf "God morgen!" 441 00:19:11,551 --> 00:19:13,300 Else vi kommer til å printf "God kveld!" 442 00:19:13,300 --> 00:19:14,860 Grunnleggende eksempel. 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å nå har vi switch uttalelser. 446 00:19:18,560 --> 00:19:21,960 Slå uttalelser generelt kan tillate oss å gjøre mye av det samme 447 00:19:21,960 --> 00:19:25,070 at vi bare snakket om med hvis uttalelser. 448 00:19:25,070 --> 00:19:29,440 For eksempel, akkurat nå har vi det generell form av bryteren uttalelse 449 00:19:29,440 --> 00:19:33,870 som tillater oss å ta en variabel kalt n 450 00:19:33,870 --> 00:19:37,670 og sammenligne det med en masse forskjellige verdier, som vi her 451 00:19:37,670 --> 00:19:40,010 har kalt constant1, constant2. 452 00:19:40,010 --> 00:19:41,150 Vi kan ha mye mer. 453 00:19:41,150 --> 00:19:42,930 Og de som er kalt tilfeller. 454 00:19:42,930 --> 00:19:46,280 >> Så hvis vi har en bryter statement-- og dette fungerer 455 00:19:46,280 --> 00:19:50,580 bare for integers-- vi har en variabel i dette tilfellet det er n. 456 00:19:50,580 --> 00:19:53,840 Hvis variabelen n er lik constant1, vi 457 00:19:53,840 --> 00:19:59,720 vil utføre noen kodebit eller noe som vi ønsker å gjøre. 458 00:19:59,720 --> 00:20:01,280 Og så ville vi bryte. 459 00:20:01,280 --> 00:20:04,820 Så pause betyr at bryter uttalelse 460 00:20:04,820 --> 00:20:08,120 vil stoppe utføring hvis n er lik constant1, 461 00:20:08,120 --> 00:20:09,752 og deretter programmet vil fortsette. 462 00:20:09,752 --> 00:20:11,835 Det vil gå ut av bryter uttalelse og det vil 463 00:20:11,835 --> 00:20:13,520 fortsette å gjøre noe annet. 464 00:20:13,520 --> 00:20:17,204 >> Hvis imidlertid, n ikke lik constant1, deretter sak for constant2 465 00:20:17,204 --> 00:20:17,870 vil bli kontrollert. 466 00:20:17,870 --> 00:20:21,750 Så hvis n er lik constant2, som andre kodeutklippet vil bli henrettet. 467 00:20:21,750 --> 00:20:23,850 Og så vil det bryte Hvis det er lik den. 468 00:20:23,850 --> 00:20:27,580 Og så kan vi ha also-- ikke nødvendigvis, though-- en standard sak, 469 00:20:27,580 --> 00:20:32,290 som vil skje hvis n ikke lik noen av sakene som du har oppført. 470 00:20:32,290 --> 00:20:35,400 Og i standard tilfelle, vi også trenger ikke en pause nødvendigvis 471 00:20:35,400 --> 00:20:39,271 fordi den bryter uttalelse vil vite at det er behov for å avslutte etter standard 472 00:20:39,271 --> 00:20:40,270 tilfellet hvis det er tilfelle. 473 00:20:40,270 --> 00:20:42,140 >> DAVID MALAN: Men stilistisk, vi alltid sette den inn der. 474 00:20:42,140 --> 00:20:42,540 >> MARIA: Yeah. 475 00:20:42,540 --> 00:20:42,710 >> DAVID MALAN: Yeah. 476 00:20:42,710 --> 00:20:44,750 Så spesielt når du starter opp, spesielt hvis blant de mindre 477 00:20:44,750 --> 00:20:47,458 komfortabel, ville jeg personlig bare anbefaler å holde fast med ifs 478 00:20:47,458 --> 00:20:51,564 og ifs-andens og if-else-if-andens og så videre hvis bare 479 00:20:51,564 --> 00:20:53,480 fordi de er litt mer oversiktlig. 480 00:20:53,480 --> 00:20:56,142 Dette er en fin optimalisering, eller noen ganger også estetisk det 481 00:20:56,142 --> 00:20:57,350 gjør koden mer lesbar. 482 00:20:57,350 --> 00:20:59,599 Og faktisk, sannsynligvis mid-semester får vi se et problem 483 00:20:59,599 --> 00:21:02,504 satt der det ser bare bedre og lettere å lese for mennesker 484 00:21:02,504 --> 00:21:03,670 ved hjelp av en bryter uttalelse. 485 00:21:03,670 --> 00:21:05,460 Men ikke bekymre deg klamrer seg til dette for tidlig. 486 00:21:05,460 --> 00:21:05,680 >> MARIA: Yeah. 487 00:21:05,680 --> 00:21:08,840 Hvis du har mye av hvis uttalelser, det kan bare ikke være veldig lesbar. 488 00:21:08,840 --> 00:21:10,965 Det er kanskje ikke veldig fort for deg å gå gjennom den. 489 00:21:10,965 --> 00:21:13,230 Så bytter uttalelser kan være meget nyttig, i tillegg. 490 00:21:13,230 --> 00:21:17,900 Og også, ikke remember-- ikke glemmer å sette pausene der. 491 00:21:17,900 --> 00:21:20,330 >> DAVID MALAN: Husker ikke dette. 492 00:21:20,330 --> 00:21:24,890 >> MARIA: Fordi da du kan falle gjennom fra en sak til en annen. 493 00:21:24,890 --> 00:21:27,930 Så la oss si at saken constant1 hadde ikke en pause uttalelse i den. 494 00:21:27,930 --> 00:21:31,920 Så vi kan falle gjennom inne sak constant2. 495 00:21:31,920 --> 00:21:35,070 Og vi ønsker ikke å gjøre det hvis Vi har allerede nådd saken constant1 496 00:21:35,070 --> 00:21:37,830 og det er lik n. 497 00:21:37,830 --> 00:21:45,100 >> Så, for eksempel, dersom vi har en variabel n som inneholder en klassenummer, 498 00:21:45,100 --> 00:21:48,990 og vi ønsker å se hva som klasse er-- hvis n er lik 50, 499 00:21:48,990 --> 00:21:51,957 vi kommer til å skrive ut "CS50 er Introduksjon til Computer Science I. " 500 00:21:51,957 --> 00:21:53,040 Vi så kommer til å bryte. 501 00:21:53,040 --> 00:21:53,920 Og det er det. 502 00:21:53,920 --> 00:21:55,950 Hvis, derimot, er lik n til 51, kommer vi 503 00:21:55,950 --> 00:21:58,494 til å skrive ut "CS51 er Introduksjon til Computer Science II. " 504 00:21:58,494 --> 00:21:59,910 Så, igjen, vi kommer til å bryte. 505 00:21:59,910 --> 00:22:05,080 Men hvis så vi setter 124, 61, noe annet nummer som du kan tenke på, 506 00:22:05,080 --> 00:22:06,890 eller programmet ikke kommer å erkjenne at. 507 00:22:06,890 --> 00:22:09,010 Så det kommer til å si: "Beklager, jeg er ikke kjent med at klasse ». 508 00:22:09,010 --> 00:22:10,009 Og det kommer til å bryte. 509 00:22:10,009 --> 00:22:12,847 DAVID MALAN: Så du kan virkelig se if, else if, ellers ideen her. 510 00:22:12,847 --> 00:22:15,430 Det er bare annerledes syntaks for uttrykker nøyaktig samme idé. 511 00:22:15,430 --> 00:22:17,690 >> MARIA: Nettopp. 512 00:22:17,690 --> 00:22:19,480 Nå har vi våre trefoldig operatører. 513 00:22:19,480 --> 00:22:24,900 Så trefoldig operatører har tre parts-- en tilstand, 514 00:22:24,900 --> 00:22:27,220 noe å gjøre hvis at betingelsen er sann, 515 00:22:27,220 --> 00:22:29,730 og deretter noe å gjøre Hvis denne betingelsen er usann. 516 00:22:29,730 --> 00:22:33,400 Så du ser, i utgangspunktet, syntaksen til det her. 517 00:22:33,400 --> 00:22:37,792 Vi har spørsmålstegn, og deretter the-- hva kaller vi dette? 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 Takk skal du ha. 521 00:22:39,599 --> 00:22:41,880 Beklager. 522 00:22:41,880 --> 00:22:45,800 Så la oss se på vårt eksempel til se om vi kan få følelse av dette-- 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 vår boolsk operator == som sammenligner det 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 butikker et heltall. 527 00:22:55,150 --> 00:22:58,180 Og hvis det heltall lik 50, da er vi 528 00:22:58,180 --> 00:23:02,810 skal lagre "David Malan" inne i streng professor. 529 00:23:02,810 --> 00:23:05,912 Hvis klassenummer ikke tilsvare 50 ", ikke David Malan" 530 00:23:05,912 --> 00:23:07,120 kommer til å være professor. 531 00:23:07,120 --> 00:23:08,630 >> DAVID MALAN: Takk. 532 00:23:08,630 --> 00:23:12,110 Og så dette synes tilsvarer hva vil du si, ved første øyekast? 533 00:23:12,110 --> 00:23:17,930 534 00:23:17,930 --> 00:23:19,960 >> MARIA: For meg virker det som if-else uttalelser. 535 00:23:19,960 --> 00:23:20,709 >> DAVID MALAN: Yeah. 536 00:23:20,709 --> 00:23:24,020 Og faktisk, er denne typen av en pen liner, 537 00:23:24,020 --> 00:23:27,520 så å si, for å implementere nøyaktig logikken i if-annet 538 00:23:27,520 --> 00:23:29,010 men gjør alt i ett trinn. 539 00:23:29,010 --> 00:23:29,860 >> MARIA: Nettopp. 540 00:23:29,860 --> 00:23:30,360 Yeah. 541 00:23:30,360 --> 00:23:33,520 Så hvis-else uttalelser kan ta opp mye plass. 542 00:23:33,520 --> 00:23:36,283 De kan være for lang for noe så enkelt som dette. 543 00:23:36,283 --> 00:23:38,350 Så dette kan være svært konsis og veldig hyggelig. 544 00:23:38,350 --> 00:23:40,880 545 00:23:40,880 --> 00:23:46,820 Så nå skal vi inn å se på gjennomføre noe igjen og igjen, 546 00:23:46,820 --> 00:23:50,060 så sjekker for en tilstand flere ganger 547 00:23:50,060 --> 00:23:53,510 og deretter fortsetter å gjøre noe mens den tilstanden er sant. 548 00:23:53,510 --> 00:23:56,740 Så dette bringer oss pent inn mens sløyfer. 549 00:23:56,740 --> 00:23:59,270 >> Til venstre har vi vår første mens loop. 550 00:23:59,270 --> 00:24:03,840 Så mens noe er sant, gjøre noe igjen og igjen. 551 00:24:03,840 --> 00:24:08,850 Så sørg for å legge merke til at vår tilstanden her er validert på toppen. 552 00:24:08,850 --> 00:24:14,150 Mens med våre andre loop-- vi kaller at en gjør-mens loop-- vi gjør noe, 553 00:24:14,150 --> 00:24:15,890 så vi sjekker for en tilstand. 554 00:24:15,890 --> 00:24:17,980 Og hvis den tilstanden fortsetter å være sant, 555 00:24:17,980 --> 00:24:20,150 vi gå tilbake og gjøre ting på nytt. 556 00:24:20,150 --> 00:24:23,360 Så den største forskjellen er der betingelsen er sjekket for. 557 00:24:23,360 --> 00:24:29,260 Og koden kan aldri være henrettet hvis tilstanden er ikke 558 00:24:29,260 --> 00:24:30,430 true med mens loop. 559 00:24:30,430 --> 00:24:33,050 Mens med do-while loop, har vi koden 560 00:24:33,050 --> 00:24:35,380 som alltid utføres minst én gang. 561 00:24:35,380 --> 00:24:37,470 Og så mens tilstanden fortsetter å være sant, 562 00:24:37,470 --> 00:24:39,960 vi kan gå tilbake og iterere igjen inne. 563 00:24:39,960 --> 00:24:43,625 Så hvorfor tror du vi ville bruke en gjør-mens loop over en stund loop? 564 00:24:43,625 --> 00:24:48,221 565 00:24:48,221 --> 00:24:48,720 Høyre. 566 00:24:48,720 --> 00:24:52,600 Så hvis vi ønsker å be bruker for noen form for input, 567 00:24:52,600 --> 00:24:55,400 hvis vi ønsker å spørre dem å oppgi sitt navn, 568 00:24:55,400 --> 00:24:57,342 vi vil i det minste be dem en gang. 569 00:24:57,342 --> 00:24:59,050 Og hvis de går inn det navnet, vi er ikke 570 00:24:59,050 --> 00:25:00,740 kommer til å spørre dem igjen fordi vi allerede vet det. 571 00:25:00,740 --> 00:25:02,656 Men hvis de ikke angir deres navn, eller om de 572 00:25:02,656 --> 00:25:05,787 skriv noe som er åpenbart ikke et navn, 573 00:25:05,787 --> 00:25:08,120 vi fortsatt ønsker å fortsette spør dem på i deres navn. 574 00:25:08,120 --> 00:25:10,710 >> DAVID MALAN: Og i forelesningen hadde vi én som dette med få positive int 575 00:25:10,710 --> 00:25:13,550 eksempel, der det er ingenting å sjekk først fordi du ikke har selv 576 00:25:13,550 --> 00:25:14,190 fått en int. 577 00:25:14,190 --> 00:25:16,680 Så vi ønsker å gjøre dette-- får en int fra user-- 578 00:25:16,680 --> 00:25:18,860 deretter sjekke det, kanskje, igjen og igjen og igjen. 579 00:25:18,860 --> 00:25:21,030 >> MARIA: Nettopp. 580 00:25:21,030 --> 00:25:22,060 For loops-- OK. 581 00:25:22,060 --> 00:25:25,842 For looper kan tillate oss å gjøre nesten akkurat det samme, så vel. 582 00:25:25,842 --> 00:25:27,300 Det er faktisk akkurat det samme. 583 00:25:27,300 --> 00:25:30,190 Så det er ingenting som du kan gjøre med for løkker 584 00:25:30,190 --> 00:25:32,840 at du ikke ville være i stand å gjøre med mens sløyfer. 585 00:25:32,840 --> 00:25:36,900 Men etter looper kan virke litt litt mer komplisert syntaktisk 586 00:25:36,900 --> 00:25:39,730 fordi de har tre deler inne hva 587 00:25:39,730 --> 00:25:42,990 var før bare tilstand med mens sløyfer. 588 00:25:42,990 --> 00:25:48,260 Så den første delen som du havet, venstre-mest, har vi "int dverger = 0." 589 00:25:48,260 --> 00:25:51,490 Så det er her vi initial vår variabel. 590 00:25:51,490 --> 00:25:55,210 >> Da har vi et semikolon og "dverger <7." 591 00:25:55,210 --> 00:25:57,100 Så dette er der ute tilstanden faktisk er. 592 00:25:57,100 --> 00:26:00,170 Så det er det vi vil ha satt bare i mens loop-- 593 00:26:00,170 --> 00:26:01,880 "mens dverger <7." 594 00:26:01,880 --> 00:26:05,380 Her, som går i midt i vår for loop. 595 00:26:05,380 --> 00:26:07,190 Så "dwaves <7." 596 00:26:07,190 --> 00:26:11,350 Og da er vår siste delen er "dverger ++," som er der vi oppdaterer vår variabel. 597 00:26:11,350 --> 00:26:15,470 Så det viktigste å innse er at dette 598 00:26:15,470 --> 00:26:22,010 kommer til å gå gjennom dette for loop syv ganger og kjøre sju ganger. 599 00:26:22,010 --> 00:26:24,020 Så vi har sju dverger, og de er alle 600 00:26:24,020 --> 00:26:26,020 kommer til å si: "Jeg er her for å hjelpe deg, Snehvit " 601 00:26:26,020 --> 00:26:28,860 fordi de er klare å hjelpe Snow White. 602 00:26:28,860 --> 00:26:33,600 >> Med mens løkker, ville vi ha gjort initialisering og oppdatering 603 00:26:33,600 --> 00:26:37,490 ikke inne i tilstand, igjen, men enten før eller inne i sløyfen mens 604 00:26:37,490 --> 00:26:40,210 å sørge for at we-- fordi vi trenger alltid disse delene. 605 00:26:40,210 --> 00:26:42,835 Så for å være sikker på at vi har dem, ville vi har fortsatt lagt dem 606 00:26:42,835 --> 00:26:44,580 på, bare ikke i parentesen. 607 00:26:44,580 --> 00:26:47,288 >> DAVID MALAN: Og slik ser like-- i foredraget, for eksempel, 608 00:26:47,288 --> 00:26:50,250 Jeg bruker nesten alltid, liker, jeg og n og ganske kjedelige variabler. 609 00:26:50,250 --> 00:26:53,050 Det ser ut som du kan bruke mer kløktig heter variabler, også. 610 00:26:53,050 --> 00:26:56,300 >> MARIA: Ja, det er faktisk veldig fin å bruke litt mer beskrivende variabler 611 00:26:56,300 --> 00:26:59,400 fordi spesielt hvis noen andre er leser code-- kanskje du sorterer 612 00:26:59,400 --> 00:27:00,940 eller hvis du samarbeider med somebody-- 613 00:27:00,940 --> 00:27:03,481 du vil være sikker på at de forstår hva du gjø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å dette er noe veldig funky-- for loop inne i en for loop. 617 00:27:11,435 --> 00:27:13,060 Jeg vet ikke om vi har sett dette før. 618 00:27:13,060 --> 00:27:13,830 Sannsynligvis ikke. 619 00:27:13,830 --> 00:27:17,750 Men vi kan faktisk ha dette-- så looper i stedet for loops. 620 00:27:17,750 --> 00:27:25,130 Så er det noen som ønsker å kanskje gå meg gjennom hva som skjer her? 621 00:27:25,130 --> 00:27:28,240 622 00:27:28,240 --> 00:27:29,490 DAVID MALAN: Jeg skal ta en stikke. 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 å skrive ut ting som er lavt i høyre hjørne 626 00:27:34,690 --> 00:27:35,190 der. 627 00:27:35,190 --> 00:27:35,450 >> MARIA: Høyre. 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 sette at prøven utgang der. 630 00:27:38,043 --> 00:27:42,590 Så jeg kan slutte fra øverste løkke som du er 631 00:27:42,590 --> 00:27:45,680 itera over rader de ytterste løkke, så å si. 632 00:27:45,680 --> 00:27:48,107 Og du gjentar løpet kolonner med den innerste løkken. 633 00:27:48,107 --> 00:27:50,190 Og intuitivt, dette burde forhåpentligvis er fornuftig 634 00:27:50,190 --> 00:27:52,070 grunn av natur hvert program vi har sett 635 00:27:52,070 --> 00:27:55,570 før, printf, som er funksjonen vi bruker, til slutt, 636 00:27:55,570 --> 00:27:58,190 har evnen til å skrive ut ting ut i det vesentlige linje for linje. 637 00:27:58,190 --> 00:27:59,960 Som, når du har avgitt en ny linje, det er 638 00:27:59,960 --> 00:28:02,876 ingen dobling tilbake og skrive noe høyere i skjermen, i det minste 639 00:28:02,876 --> 00:28:04,530 ikke å bruke printf som dette. 640 00:28:04,530 --> 00:28:07,750 >> Og så i den forbindelse, gjør det forstand at den ytterste løkke 641 00:28:07,750 --> 00:28:10,930 skal henvise til radene fordi for hver gitt rad, 642 00:28:10,930 --> 00:28:13,650 du kommer til å ønske å skrive ut XXXXX, og deretter 643 00:28:13,650 --> 00:28:15,520 gå videre til neste rad, XXXXX. 644 00:28:15,520 --> 00:28:17,317 Så rekker komme først. 645 00:28:17,317 --> 00:28:19,150 Og deretter innen hver rad, du skriver ut kolonner. 646 00:28:19,150 --> 00:28:21,160 Hvis du prøvde å gjøre det på den motsatte, ville det sannsynligvis ikke 647 00:28:21,160 --> 00:28:21,690 komme ut som du har tenkt. 648 00:28:21,690 --> 00:28:22,190 >> MARIA: Yeah. 649 00:28:22,190 --> 00:28:24,950 Vi kunne ikke gå tilbake til forrige rad med printf. 650 00:28:24,950 --> 00:28:27,658 >> DAVID MALAN: Og hva er interessant per dagens prat om omfang, 651 00:28:27,658 --> 00:28:31,600 faktisk, er at rad er en int som er deklarert i den øverste løkken. 652 00:28:31,600 --> 00:28:34,030 Men legg merke til at det fortsatt er innsiden av, så å si, 653 00:28:34,030 --> 00:28:35,982 klammeparentes som umiddelbart følge, 654 00:28:35,982 --> 00:28:38,440 selv om det ikke er teknisk innenfor disse klammeparentes. 655 00:28:38,440 --> 00:28:41,750 Så rad er i omfang for helheten av kodeutklippet, 656 00:28:41,750 --> 00:28:44,690 både på innsiden av den ytre sløyfe for og innsiden av det indre av sløyfen. 657 00:28:44,690 --> 00:28:48,050 Men derimot, der er kolonne i omfang? 658 00:28:48,050 --> 00:28:49,810 Variabelen kolonne? 659 00:28:49,810 --> 00:28:51,310 Ja, bare på innsiden loop. 660 00:28:51,310 --> 00:28:54,280 Og det er OK fordi vi ikke tilgang til den utenfor sine klammeparentes. 661 00:28:54,280 --> 00:28:57,280 Alt vi gjør er skrive ut en ny linjen helt på slutten der. 662 00:28:57,280 --> 00:28:58,670 Så det faktisk er OK. 663 00:28:58,670 --> 00:29:03,740 >> Så dette har effekt, ser det ut som, for å gjøre tre rader og fire kolonner. 664 00:29:03,740 --> 00:29:04,370 >> MARIA: Høyre. 665 00:29:04,370 --> 00:29:06,270 Så først går vi gjennom vår første rad. 666 00:29:06,270 --> 00:29:10,520 Og bare i vår første rad, gjør vi det fire kolonner på innsiden av første rekke. 667 00:29:10,520 --> 00:29:11,980 Så vi skrive ut fire X-er. 668 00:29:11,980 --> 00:29:15,800 Og så kan vi gå ut for loop, siden Vi har allerede skrevet ut fire X-er. 669 00:29:15,800 --> 00:29:17,100 Og vi ut en ny linje. 670 00:29:17,100 --> 00:29:19,920 Og så går vi gjennom samme prosess for to flere rader 671 00:29:19,920 --> 00:29:21,170 for å lage en total av tre. 672 00:29:21,170 --> 00:29:23,530 >> DAVID MALAN: Og det er verdt å merke seg er det bare en gjenstand på skriften, det faktum 673 00:29:23,530 --> 00:29:25,680 at prøven utgang synes så mye høyere, 674 00:29:25,680 --> 00:29:27,520 som om det er mer rader enn kolonner. 675 00:29:27,520 --> 00:29:29,824 Men det er bare fordi X er høyere enn den er bred. 676 00:29:29,824 --> 00:29:32,740 Det er alt som skjer der, pluss det hvite området mellom linjene. 677 00:29:32,740 --> 00:29:33,281 >> MARIA: Høyre. 678 00:29:33,281 --> 00:29:34,792 Kjølig. 679 00:29:34,792 --> 00:29:35,750 DAVID MALAN: All right. 680 00:29:35,750 --> 00:29:39,830 Så en rask titt på oppgavesettet en, ta noen spørsmål, og deretter utsette? 681 00:29:39,830 --> 00:29:40,330 Greit. 682 00:29:40,330 --> 00:29:43,164 Så i oppgavesettet en, det er tre- primære utfordringer, til slutt. 683 00:29:43,164 --> 00:29:44,955 Men først, finner du at problemet satt 684 00:29:44,955 --> 00:29:47,900 spesifikasjonen, som med mange den psets denne høsten, kommer til å gå deg 685 00:29:47,900 --> 00:29:50,691 gjennom noen oppvarmingsøvelser, peke deg ut noen ressurser 686 00:29:50,691 --> 00:29:52,440 som du kanskje eller kanskje ikke har sett allerede. 687 00:29:52,440 --> 00:29:54,440 For eksempel, CS50 har en pakke med shorts, 688 00:29:54,440 --> 00:29:56,481 som er korte videoer, ikke i motsetning til dette, men 689 00:29:56,481 --> 00:29:58,460 er veldig emne specific-- kanskje fem minutter, 690 00:29:58,460 --> 00:30:02,360 10 minutter i lengde på løkker eller på betingelser eller på algoritmer 691 00:30:02,360 --> 00:30:04,125 eller senere mer avanserte emner, så vel. 692 00:30:04,125 --> 00:30:06,000 Og vi vanligvis legge ned de inn i problemet 693 00:30:06,000 --> 00:30:07,950 settene slik at studentene har en ressurs som 694 00:30:07,950 --> 00:30:10,840 en anmeldelse av materiale som kan ha allerede kommet opp i foredrag eller delen. 695 00:30:10,840 --> 00:30:13,220 Men denne måten er det mer fokusert og mer på fingertuppene. 696 00:30:13,220 --> 00:30:15,928 >> Vi pleier også å bygge inn i problem setter ting kalt walkthroughs. 697 00:30:15,928 --> 00:30:20,790 Slik at nesten alle eksemplene jeg gjør i foredraget på scenen her, vi også 698 00:30:20,790 --> 00:30:24,565 har skutt på kamera i fremme en mer tregere, 699 00:30:24,565 --> 00:30:28,760 en mer intim gjennomgang av meg på min laptop av denne koden, linje for linje 700 00:30:28,760 --> 00:30:31,427 slik at i klassen, vil vi ofte skumme gjennom noe eller noen 701 00:30:31,427 --> 00:30:33,260 vil skyte inn med en svare på et spørsmål. 702 00:30:33,260 --> 00:30:35,820 Men det betyr ikke nødvendigvis synke i for alle i publikum. 703 00:30:35,820 --> 00:30:38,230 Slik at du finner kode walkthroughs for de fleste av eksemplene 704 00:30:38,230 --> 00:30:40,950 som vi gjør her i foredrag, slik at du kan gå gjennom det i ditt eget tempo 705 00:30:40,950 --> 00:30:43,580 og spole bakover eller fremover eller hoppe helt, hvis du ønsker. 706 00:30:43,580 --> 00:30:45,356 >> Det er ofte noen warm-up spørsmål som 707 00:30:45,356 --> 00:30:47,105 be deg om å sortere av forsterke dette materialet 708 00:30:47,105 --> 00:30:50,250 og sørg for at du er komfortabel før du fortsetter med resten av PSet. 709 00:30:50,250 --> 00:30:51,700 Og så, selvfølgelig, det er den PSet selv. 710 00:30:51,700 --> 00:30:53,450 Og en av de tingene vi veldig bevisst 711 00:30:53,450 --> 00:30:57,202 gjøre i CS50 er nesten hver uinteressant eller intellektuelt uinteressant 712 00:30:57,202 --> 00:30:58,910 mekanisk skritt som du kan ha å gjøre 713 00:30:58,910 --> 00:31:00,519 er nesten alltid svært godt dokumentert. 714 00:31:00,519 --> 00:31:03,560 I løpet av semesteret, vil vi begynner å spørre mer retoriske spørsmål 715 00:31:03,560 --> 00:31:06,187 som husker hvordan du gjør dette, eller at? 716 00:31:06,187 --> 00:31:08,520 Men generelt, finner du at oppgavesett får du 717 00:31:08,520 --> 00:31:10,269 gjennom mekanikerne av noe slik at 718 00:31:10,269 --> 00:31:14,160 de interessante, intellektuelle utfordringer blir til slutt overlatt til deg studenten. 719 00:31:14,160 --> 00:31:17,390 >> Med det sagt, Zamyla, til hvem vi holdt henviser i dag i foredraget 720 00:31:17,390 --> 00:31:20,190 er en av våre mangeårige ansatte medlem som også innehar walkthroughs 721 00:31:20,190 --> 00:31:24,520 på bestemte PSet problemer som mario og grådig, men ikke vanne i år. 722 00:31:24,520 --> 00:31:26,540 Og det er i de walkthroughs at hun ofte 723 00:31:26,540 --> 00:31:29,450 har noen tips og triks for hvordan du går frem, aldri fortelle deg 724 00:31:29,450 --> 00:31:31,810 nøyaktig hva du skal gjøre, men rather-- som en tilstand, 725 00:31:31,810 --> 00:31:35,200 hvis du will-- gi deg minst en par ideer, slik at det er opp til deg, 726 00:31:35,200 --> 00:31:37,830 til slutt, for å avgjøre hvordan å nærme seg dem. 727 00:31:37,830 --> 00:31:41,200 >> MARIA: liksom som et høyt nivå forståelsen av logikken i hvilken 728 00:31:41,200 --> 00:31:42,220 Vi ber deg om å gjøre. 729 00:31:42,220 --> 00:31:42,485 >> DAVID MALAN: Nettopp. 730 00:31:42,485 --> 00:31:44,190 Og, faktisk, Zamyla s walkthroughs er ment 731 00:31:44,190 --> 00:31:46,190 å svare på ofte spurte spørsmål om hvor 732 00:31:46,190 --> 00:31:48,610 jeg begynte, spesielt når disse lange spesifikasjoner 733 00:31:48,610 --> 00:31:51,960 litt skremmende gitt all tekst og bilder som de har i dem. 734 00:31:51,960 --> 00:31:54,890 >> Så water.c, finner du etter at du har fullført det, 735 00:31:54,890 --> 00:31:56,920 er faktisk relativt ukomplisert. 736 00:31:56,920 --> 00:31:58,882 Absolutt er en gjeng dere kommer til å banke 737 00:31:58,882 --> 00:32:01,840 hodet mot veggen prøver å finne ut hvorfor det ikke er kompilering 738 00:32:01,840 --> 00:32:03,450 eller hvorfor den ikke kjører riktig. 739 00:32:03,450 --> 00:32:05,040 Men når du er ferdig med det, og når du har 740 00:32:05,040 --> 00:32:07,620 brukt litt tid bryting med noen av feilene som du måtte ha, 741 00:32:07,620 --> 00:32:09,490 du vil finne at det er et meget kort program. 742 00:32:09,490 --> 00:32:11,770 Det kan gjøres i løpet av få linjer med kode, hvorav de fleste 743 00:32:11,770 --> 00:32:15,030 vi har sett her i foredraget allerede, hvis du monterer de riktige byggesteinene. 744 00:32:15,030 --> 00:32:16,810 >> Og som vi foreslår her, det kommer til å spørre 745 00:32:16,810 --> 00:32:22,250 du angi hvor mange minutter noen tar en dusj på campus. 746 00:32:22,250 --> 00:32:24,779 Vi angir i problemet angi hastigheten av vannstrømmen 747 00:32:24,779 --> 00:32:27,320 i, som, en lav-flow dusj hode, mye som Seinfeld klipp 748 00:32:27,320 --> 00:32:29,180 vi så i går eller det motsatte av denne. 749 00:32:29,180 --> 00:32:30,971 Og så må du bare å gjøre litt matte, 750 00:32:30,971 --> 00:32:34,710 really-- aritmetikk med C for å fortelle oss hvor mange, omtrent, flasker med vann 751 00:32:34,710 --> 00:32:37,720 er at tilsvarende hvis vi er ta en n-minutters dusj. 752 00:32:37,720 --> 00:32:41,389 >> Nå, i mario.c, dette kommer å være en litt lengre program. 753 00:32:41,389 --> 00:32:42,930 Det er likevel ikke til å være så lenge. 754 00:32:42,930 --> 00:32:45,130 Bare noen få linjer som er lengre enn water.c. 755 00:32:45,130 --> 00:32:48,230 Men det kommer til å være mulighet å gjenskape den gamle skolen Mario 756 00:32:48,230 --> 00:32:50,670 pyramide fra Super Mario Brødre eller noen oppfølgings. 757 00:32:50,670 --> 00:32:53,510 Det kommer ikke til å se så penere eller like fargerik som at man der. 758 00:32:53,510 --> 00:32:56,468 Vi er bare nødt til å bruke litt hashtags som vi har her på skjermen 759 00:32:56,468 --> 00:32:58,120 ved hjelp av ASCII-tekst. 760 00:32:58,120 --> 00:33:00,362 Men det vil tilnærmet den samme ideen. 761 00:33:00,362 --> 00:33:02,570 Og det kommer til å bli en utøve som ved første øyekast 762 00:33:02,570 --> 00:33:04,720 virker ganske simple-- bare skrive ut en enkel pyramide. 763 00:33:04,720 --> 00:33:07,345 Men det er et par kjennetegn her som er interessant. 764 00:33:07,345 --> 00:33:12,400 Legg merke til at den høyre kant pyramiden faktisk har bredde to. 765 00:33:12,400 --> 00:33:14,570 Så det er to like høyde kolonner, som 766 00:33:14,570 --> 00:33:16,804 gjør det krever litt litt av tanken å gjøre 767 00:33:16,804 --> 00:33:19,720 sikker på at du får det helt riktig, som i motsetning til bare 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 litt av et hjørne saken men matcher selve spillet. 770 00:33:23,340 --> 00:33:27,610 >> Og det er også ikke-åpenbare først øyekast hvordan du skriver ut det hvite området. 771 00:33:27,610 --> 00:33:29,430 Så når jeg ser på sample utgangs her-- 772 00:33:29,430 --> 00:33:32,440 og det er også i spec-- det slags ser ut som et rektangel, 773 00:33:32,440 --> 00:33:35,120 men en diagonal rektangel har blitt kappet av, 774 00:33:35,120 --> 00:33:37,320 og det er bare mellomrom, så å si. 775 00:33:37,320 --> 00:33:40,100 Og så en vanlige Spørsmålet her er alltid godt, 776 00:33:40,100 --> 00:33:43,302 hvordan flytter jeg de hashtags over til høyre? 777 00:33:43,302 --> 00:33:44,760 Eller hvordan skriver jeg det tomme rom? 778 00:33:44,760 --> 00:33:46,860 Og det er faktisk enklere enn de fleste studenter tror. 779 00:33:46,860 --> 00:33:47,360 Høyre? 780 00:33:47,360 --> 00:33:51,620 Du kan tilnærme det visuelt ved bare trykke på mellomromstasten en gang eller to 781 00:33:51,620 --> 00:33:52,700 eller tre ganger. 782 00:33:52,700 --> 00:33:56,260 >> Og så selv om med printf vi nesten alltid skrive ut en streng eller en int 783 00:33:56,260 --> 00:33:59,950 eller et ord som "hei, verden "eller serie av ord, 784 00:33:59,950 --> 00:34:03,560 du kan også bare skrive ut sitat, plass, unquote. 785 00:34:03,560 --> 00:34:06,320 Og som faktisk vil gi du et hvitt område der. 786 00:34:06,320 --> 00:34:08,330 Så hold det i tankene, og ikke overthink dette. 787 00:34:08,330 --> 00:34:10,570 Du må virkelig bestemmer rad for rad for rad, 788 00:34:10,570 --> 00:34:14,280 ikke ulikt ditt eksempel en øyeblikk siden, hvor mange av disse 789 00:34:14,280 --> 00:34:18,420 kolonnene skal være mellomrom og hvor mange av dem bør være hashtags. 790 00:34:18,420 --> 00:34:21,560 Det vil ta litt tid, men det er til slutt en logikk puslespill av former. 791 00:34:21,560 --> 00:34:22,060 >> MARIA: Yeah. 792 00:34:22,060 --> 00:34:25,060 Men logikken går rad for rad kommer til å være svært nyttig her. 793 00:34:25,060 --> 00:34:25,810 DAVID MALAN: Yeah. 794 00:34:25,810 --> 00:34:28,976 Jeg tror eksempelkoden du gave-- selv men det var ikke et komplett program. 795 00:34:28,976 --> 00:34:34,247 Du må fortsatt int og hoved og ugyldig og #include stdio.h, 796 00:34:34,247 --> 00:34:35,580 en masse ting fra forelesningen. 797 00:34:35,580 --> 00:34:37,629 Men byggesteinene ser ut til å være der. 798 00:34:37,629 --> 00:34:39,920 Og så til slutt er noe litt mer algoritmisk. 799 00:34:39,920 --> 00:34:43,210 Så det viser seg at hver gang du gå inn i CVS eller storkiosk 800 00:34:43,210 --> 00:34:47,810 og noen hender deg på kasserer regninger eller mynter som endring, 801 00:34:47,810 --> 00:34:50,620 det viser seg at de, mennesker, om ikke de vet det eller ikke, 802 00:34:50,620 --> 00:34:53,300 bruker antakelig hva som er kalt en grådig algoritme, 803 00:34:53,300 --> 00:34:58,170 der hvis du skylder, sier $ 21 i endring fordi en eller annen grunn 804 00:34:58,170 --> 00:35:01,580 du har kjøpt noe veldig billig med en veldig stor regning på CVS, 805 00:35:01,580 --> 00:35:05,910 det ville være veldig irriterende hvis den kasserer ga deg 21 singler, eller verre 806 00:35:05,910 --> 00:35:07,629 ennå, en hel masse mynter. 807 00:35:07,629 --> 00:35:10,670 Snarere hva en fornuftig person er sannsynligvis kommer til å gjøre, er at de kommer 808 00:35:10,670 --> 00:35:14,224 å ta en $ 20- og deretter a-bill 1 $, og hånd du bare to regninger i så fall. 809 00:35:14,224 --> 00:35:17,390 MARIA: Så de er ute etter å minimere endringen at de gir tilbake til deg. 810 00:35:17,390 --> 00:35:17,850 DAVID MALAN: Nettopp. 811 00:35:17,850 --> 00:35:19,540 Og samme avtale med mynter, så vel. 812 00:35:19,540 --> 00:35:23,040 Hvis du skylder, sier, $ 0,50, forhåpentligvis du ikke vil at 50 pennies. 813 00:35:23,040 --> 00:35:25,500 Du stedet ønsker to- kvartalene, for eksempel. 814 00:35:25,500 --> 00:35:27,540 Nå gjør dette anta at kassereren har 815 00:35:27,540 --> 00:35:29,940 nok av hver valør som han eller hun kanskje ønsker å gi deg. 816 00:35:29,940 --> 00:35:32,148 Men vi tillater deg å anta like mye i problemet. 817 00:35:32,148 --> 00:35:35,590 Og målet til slutt er å implementere i C-kode en grådig algoritme. 818 00:35:35,590 --> 00:35:37,344 Slik at brukeren får lov å skrive inn hvor mye 819 00:35:37,344 --> 00:35:40,510 endre han eller hun skyldte med dollar og øre, en slags flytende punktet 820 00:35:40,510 --> 00:35:41,590 verdien sannsynligvis. 821 00:35:41,590 --> 00:35:45,530 Og så må du gjøre regnestykket og finne ut algoritmer, vel, 822 00:35:45,530 --> 00:35:49,020 hvor mange mynter kan jeg gi du minimalt for å gi deg 823 00:35:49,020 --> 00:35:50,270 akkurat den mengden endring. 824 00:35:50,270 --> 00:35:53,470 Men det kommer til å bli en noen vanskelige deler her, ikke sant? 825 00:35:53,470 --> 00:35:56,236 Som om det er hele unøyaktighet problemet. 826 00:35:56,236 --> 00:35:56,860 MARIA: Nettopp. 827 00:35:56,860 --> 00:35:59,114 Så flyttall verdiene har unøyaktighet. 828 00:35:59,114 --> 00:36:00,780 Har vi snakke om dette i foredraget i dag? 829 00:36:00,780 --> 00:36:02,340 >> DAVID MALAN: Vi gjorde det siste gang i forelesning. 830 00:36:02,340 --> 00:36:03,506 Vi snakket om unøyaktighet. 831 00:36:03,506 --> 00:36:08,840 Og du ikke ønsker å lure brukeren av hvor mye forandring han eller hun er skyldig. 832 00:36:08,840 --> 00:36:11,290 Og så walkthrough, i oppgavesettet spesifikasjonen, 833 00:36:11,290 --> 00:36:15,990 gi noen trodde til slutt, som til hvordan du kan redusere de imprecision 834 00:36:15,990 --> 00:36:17,280 feil, potensielt. 835 00:36:17,280 --> 00:36:21,050 Det er unngåelig, absolutt, for inngangene vi snakker om. 836 00:36:21,050 --> 00:36:23,590 Og, faktisk, pennies-- kanskje vi skal utsette til Zamyla, 837 00:36:23,590 --> 00:36:25,136 Jeg tror, ​​for triksene der. 838 00:36:25,136 --> 00:36:27,760 Så til slutt, vil du finne en progresjon av problemene denne uken, 839 00:36:27,760 --> 00:36:30,700 hvorav den første er ganske liten, deretter medium, så litt større. 840 00:36:30,700 --> 00:36:33,200 Men alle av dem bruker bygningen kvartaler fra denne siste uken, 841 00:36:33,200 --> 00:36:35,280 fra denne supersection, Problemet satt spesifikasjon 842 00:36:35,280 --> 00:36:36,710 setter deg på utallige ressurser. 843 00:36:36,710 --> 00:36:41,000 Men likevel, hvis i det hele tatt sliter, spesielt blant de mindre komfortable 844 00:36:41,000 --> 00:36:42,917 med ingen tidligere bakgrunn, kommer til kontortid 845 00:36:42,917 --> 00:36:44,958 på 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 hvor du kan chatte med ansatte og klassekamerater. 848 00:36:49,080 --> 00:36:51,670 >> Men til slutt, tror jeg beste råd er bare å starte tidlig. 849 00:36:51,670 --> 00:36:54,711 Det er ikke den type klasse som deg bør starte psets onsdag 850 00:36:54,711 --> 00:36:56,640 natt, eller verre torsdag kveld. 851 00:36:56,640 --> 00:36:59,067 >> MARIA: Mitt beste råd er å ha startet innen 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-- no. 854 00:37:02,490 --> 00:37:04,732 Men selv om 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 grunnen til den Kurset har så mange sene dager er 857 00:37:08,605 --> 00:37:10,535 for å gi deg en bit av en psykisk press 858 00:37:10,535 --> 00:37:13,684 å starte tidligere, men fortsatt la ting skli når ting tar lengre tid 859 00:37:13,684 --> 00:37:14,350 enn du forventer. 860 00:37:14,350 --> 00:37:17,950 >> MARIA: Og du ønsker å gjøre bruk av kontortid så mye du kan, også. 861 00:37:17,950 --> 00:37:20,291 >> DAVID MALAN: Eventuelle spørsmål? 862 00:37:20,291 --> 00:37:20,790 Greit. 863 00:37:20,790 --> 00:37:22,930 Vel, hvorfor ikke vi utsette her? 864 00:37:22,930 --> 00:37:23,487