1 00:00:00,000 --> 00:00:07,070 [Powered by Google Translate] [♪ Buzzing ♪] 2 00:00:07,070 --> 00:00:10,380 Så for å introdusere deg til det jeg har fått opp på skjermen; 3 00:00:10,380 --> 00:00:12,710 det er en av de verktøyene vi utviklet over sommeren; 4 00:00:12,710 --> 00:00:15,530 det heter CS50 Spaces, 5 00:00:15,530 --> 00:00:18,860 og det er vår samarbeidende koding søknad 6 00:00:18,860 --> 00:00:20,180 at vi kommer til å bruke i seksjoner. 7 00:00:20,180 --> 00:00:22,470 Det er ganske kult. 8 00:00:22,470 --> 00:00:26,040 Har noen av dere sett CS50 run ennå? 9 00:00:26,040 --> 00:00:29,760 La meg trekke det opp i en annen fane. 10 00:00:29,760 --> 00:00:33,440 Run.cs50.net 11 00:00:33,440 --> 00:00:36,230 Så 12 00:00:36,230 --> 00:00:39,700 hvis du går til run.cs50.net, 13 00:00:39,700 --> 00:00:43,030 du kan se dette er en i din nettleser måten å 14 00:00:43,030 --> 00:00:45,940 faktisk kode - skriv C-kode, 15 00:00:45,940 --> 00:00:47,460 og deretter kjøre den, 16 00:00:47,460 --> 00:00:50,960 så det både kompilerer det, går det, returnerer deretter resultatet til deg, 17 00:00:50,960 --> 00:00:53,350 så dette er en slags kul måte å eksperimentere 18 00:00:53,350 --> 00:00:56,060 med noen av koden at David går over i forelesninger 19 00:00:56,060 --> 00:00:58,640 og vi gir til på deg på oppgavesett 20 00:00:58,640 --> 00:01:01,900 uten egentlig å måtte fyre opp maskinen. 21 00:01:01,900 --> 00:01:04,489 >> Så hva Spaces gjør som er annerledes fra det 22 00:01:04,489 --> 00:01:07,450 hvis jeg bytter tilbake til denne fanen, 23 00:01:07,450 --> 00:01:11,580 Spaces er CS50 løp, som du ser her, 24 00:01:11,580 --> 00:01:15,380 men hvis vi rulle over og se på den andre siden av vinduet, 25 00:01:15,380 --> 00:01:18,130 du ser rett jeg er den eneste personen i dette rommet, 26 00:01:18,130 --> 00:01:21,030 men hva jeg skal gjøre er å spørre dere å delta i denne Space med meg 27 00:01:21,030 --> 00:01:24,590 og vi vil alle komme til kode i samme lille vinduet, 28 00:01:24,590 --> 00:01:26,070 dele kode med hverandre, 29 00:01:26,070 --> 00:01:28,900 og snakke om forskjellene mellom koden vår. 30 00:01:28,900 --> 00:01:31,530 Så det er en slags kule ting - 31 00:01:31,530 --> 00:01:35,770 så å bli med, hvis du vil gå til denne linken her på toppen 32 00:01:35,770 --> 00:01:38,980 at jeg har uthevet, 33 00:01:38,980 --> 00:01:53,860 du kan bare skrive i apps.cs50.net/spaces/vqcspSnO. 34 00:01:53,860 --> 00:01:56,610 >> All right, så starter, 35 00:01:56,610 --> 00:01:59,720 Jeg kommer til å gi deg en liten bit av en tur til dette. 36 00:01:59,720 --> 00:02:01,720 Vi skal gjøre noen dum liten koding med det først, 37 00:02:01,720 --> 00:02:06,200 bare slik at alle får ganske en følelse for hva det er, 38 00:02:06,200 --> 00:02:09,000 men det jeg har gjort - 39 00:02:09,000 --> 00:02:11,830 eller hva jeg skal gjøre her er - 40 00:02:11,830 --> 00:02:13,480 Jeg kommer til å ta koden som jeg har skrevet her, 41 00:02:13,480 --> 00:02:15,800 som som du ser akkurat nå er tom; 42 00:02:15,800 --> 00:02:17,090 det gjør ikke noe. 43 00:02:17,090 --> 00:02:21,080 Det er bare kjele plate koden, vil vi kaller det. 44 00:02:21,080 --> 00:02:23,820 Med litt to-do kommentar. 45 00:02:23,820 --> 00:02:27,850 Jeg kommer til å lagre den ved å treffe denne knappen Lagre. 46 00:02:27,850 --> 00:02:30,190 Og hva det gjør er det 47 00:02:30,190 --> 00:02:34,400 fremhevet det opp her en kort stund - at revisjon lagre grønn boks, 48 00:02:34,400 --> 00:02:37,570 og nå, hvis du søker etter meg i Space, 49 00:02:37,570 --> 00:02:40,340 du klikker navnet mitt, 50 00:02:40,340 --> 00:02:43,370 du kan se at jeg har fått denne revisjonen akkurat her, 51 00:02:43,370 --> 00:02:45,490 og hvis du klikker på den revisjonen, 52 00:02:45,490 --> 00:02:48,240 det vil laste den koden inn Space din, også. 53 00:02:50,510 --> 00:02:54,160 >> Så har alle lastet at koden inn Space deres? 54 00:02:54,160 --> 00:02:57,810 Greit, hvis du ennå ikke har, gå videre og gjøre det, 55 00:02:57,810 --> 00:03:01,120 og hva jeg ønsker dere å gjøre i denne lille to-do seksjon 56 00:03:01,120 --> 00:03:05,940 er å skrive en litt hjelp printf om deg selv, 57 00:03:05,940 --> 00:03:08,310 så for eksempel, ville jeg skrive 58 00:03:08,310 --> 00:03:12,270 printf ("Mitt navn er Nate"); 59 00:03:15,140 --> 00:03:17,700 og da jeg skulle skrive 60 00:03:17,700 --> 00:03:21,660 "Jeg ble uteksaminert i 2009 61 00:03:21,660 --> 00:03:24,440 fra Stanford " 62 00:03:26,050 --> 00:03:28,390 og jeg ville elske å høre om 63 00:03:28,390 --> 00:03:30,270 Hvilket år du er på skolen, 64 00:03:30,270 --> 00:03:33,910 enten du er på høyskole eller handelshøyskole 65 00:03:33,910 --> 00:03:36,130 eller en annen Harvard skole, 66 00:03:36,130 --> 00:03:39,200 hva du studerer om det er kjent ennå; 67 00:03:39,200 --> 00:03:41,290 hvis det ikke er kjent, er det helt kult. 68 00:03:41,290 --> 00:03:45,170 Jeg gjorde ikke bestemme før jeg var sent i mitt andre år som student. 69 00:03:46,910 --> 00:03:49,210 og så ville jeg også gjerne vite 70 00:03:49,210 --> 00:03:51,610 noe gale du vil fortelle meg eller 71 00:03:51,610 --> 00:03:54,790 noe om klassen eller bare noe annet. 72 00:03:56,930 --> 00:04:00,370 Når du er ferdig med å skrive at med din lille printf, 73 00:04:00,370 --> 00:04:03,480 Hvis du vil spare revisjonen eller snarere 74 00:04:03,480 --> 00:04:06,080 først forsikre deg om at du kan kjøre det 75 00:04:06,080 --> 00:04:10,640 og at det skrives ut nøyaktig hva du vil den skal skrive ut, 76 00:04:14,050 --> 00:04:16,399 og hvis du går videre og lagre den revisjonen 77 00:04:16,399 --> 00:04:21,600 bruker Revisjon Lagre-knappen, denne første lille fyren over her, 78 00:04:24,080 --> 00:04:27,340 og vi vil ganske gå gjennom og gjøre en liten introduksjon på den måten. 79 00:04:27,340 --> 00:04:30,150 Så du bør bare nødt til å treffe på Play-knappen, 80 00:04:30,150 --> 00:04:32,550 som er opp her på øverst til venstre, 81 00:04:32,550 --> 00:04:35,340 så dette Play-knappen øverst til venstre vil 82 00:04:35,340 --> 00:04:39,050 send koden off til vår server der det blir utarbeidet og deretter kjøre. 83 00:04:40,600 --> 00:04:43,300 Så hva er ganske sprøtt om dette er 84 00:04:43,300 --> 00:04:46,550 denne koden faktisk ikke kjører på datamaskinen; 85 00:04:46,550 --> 00:04:49,290 det er faktisk blir sendt over Internett. 86 00:04:49,290 --> 00:04:51,240 >> Hvordan går det, Charlotte? 87 00:04:51,240 --> 00:04:54,810 >> I - okay. Jeg er - jeg tror jeg er 88 00:04:54,810 --> 00:04:57,330 ha vanskeligheter lagrer den 89 00:04:57,330 --> 00:05:00,530 på serveren, slik at det kan - jeg kan kjøre programmet. 90 00:05:02,090 --> 00:05:05,780 Og så når jeg prøver å kjøre den, står det at det er en feil. 91 00:05:05,780 --> 00:05:08,850 Erklært som et virus, som er ikke i det lenger. 92 00:05:08,850 --> 00:05:11,860 Oh, la oss se, kan du treffe Lagre igjen? 93 00:05:11,860 --> 00:05:13,770 Jeg ser det på skjermen. 94 00:05:13,770 --> 00:05:15,120 >> Høyre, greit, slik at det jeg har. 95 00:05:15,120 --> 00:05:19,430 Og jeg vet ikke hvorfor det ikke lar meg kjøre den. 96 00:05:22,990 --> 00:05:24,990 Oh, ok, beklager. 97 00:05:27,930 --> 00:05:31,220 Kan du forklare hvorfor - hva som var galt - hva som ikke fungerer med den? 98 00:05:31,220 --> 00:05:34,760 >> Ja, fordi jeg ikke se at det var en siste linje der det er fortsatt en variabel 99 00:05:34,760 --> 00:05:37,700 at jeg ikke hadde erklært, som jeg ikke har tenkt på at det er det. 100 00:05:37,700 --> 00:05:38,730 Ja, perfekt! 101 00:05:38,730 --> 00:05:40,390 >> Nå hvis jeg lagrer det, tror jeg det skal fungere. 102 00:05:40,390 --> 00:05:42,970 Nå som du har lagret det, det fungerer; awesome. 103 00:05:42,970 --> 00:05:44,570 >> Så ja, når vi går gjennom - 104 00:05:44,570 --> 00:05:46,690 så hva som skjedde, 105 00:05:46,690 --> 00:05:49,130 Jeg bare kommer til å gjenta dette for kameraet. 106 00:05:49,130 --> 00:05:51,760 Hva skjedde var at denne variabelen er 107 00:05:51,760 --> 00:05:54,310 var igjen i etter - jeg antar du slettet noen andre ting 108 00:05:54,310 --> 00:05:56,670 hvor du erklært som, 109 00:05:56,670 --> 00:05:59,560 og så dette var å kaste ting av og ble ikke som å kjøre den. 110 00:05:59,560 --> 00:06:02,540 Så dette er akkurat hva vi ønsker å gjøre i seksjon 111 00:06:02,540 --> 00:06:05,690 er har folk prøver å skrive forskjellige deler av koden, 112 00:06:05,690 --> 00:06:08,490 sammenstille det, se hva som fungerer, se hva som ikke, 113 00:06:08,490 --> 00:06:10,730 og deretter ganske snakke om disse tingene, fordi disse er tripping punkter som 114 00:06:10,730 --> 00:06:12,850 Jeg fortsatt møter, 115 00:06:12,850 --> 00:06:15,470 Jeg fortsatt - jeg gjør masse dumme ting hele tiden, 116 00:06:15,470 --> 00:06:17,820 og jeg vet ikke hvorfor det ikke fungerer, 117 00:06:17,820 --> 00:06:22,960 så la oss trekke opp Charlotte revisjon 3, 118 00:06:23,980 --> 00:06:25,380 og vi vil kjøre den. 119 00:06:25,380 --> 00:06:28,950 >> Så når jeg kjører, nå som jeg har fått henne kode her, 120 00:06:28,950 --> 00:06:31,450 Jeg kan zoome inn, traff Run-knappen, 121 00:06:31,450 --> 00:06:33,680 opplastninger det, bygger det, går det, 122 00:06:33,680 --> 00:06:36,980 sier det var vellykket, og hvis jeg ruller nedover, 123 00:06:36,980 --> 00:06:39,440 se Charlotte er en junior på Adams House, 124 00:06:39,440 --> 00:06:42,720 psykologi, videregående i økonomi; awesome. 125 00:06:42,720 --> 00:06:44,310 Flott å møte deg! 126 00:06:44,310 --> 00:06:46,550 Awesome. 127 00:06:46,550 --> 00:06:49,670 Ok, flytte på, la oss gå til Daniel, 128 00:06:49,670 --> 00:06:52,710 gå til revisjon 3, 129 00:06:52,710 --> 00:06:54,180 kompilere, kjøre; 130 00:06:54,180 --> 00:06:56,680 hvorfor ikke du fortelle oss litt om deg selv, Daniel? 131 00:06:56,680 --> 00:06:59,380 >> Ring meg Dan. 132 00:06:59,380 --> 00:07:01,920 Jeg kommer til å handelshøyskole over fra dere, 133 00:07:01,920 --> 00:07:05,020 og jeg var i marinen før her, 134 00:07:05,020 --> 00:07:08,020 og dette er alt nytt for meg, så ja. 135 00:07:08,020 --> 00:07:11,060 Ikke føler seg dårlig, jeg er 30 og jeg vet ikke noe av dette ting. 136 00:07:11,060 --> 00:07:13,800 Awesome, takk, Dan! 137 00:07:13,800 --> 00:07:17,300 Greit, vi fikk en annen Daniel. 138 00:07:17,300 --> 00:07:20,930 Du går av Daniel - vil du introdusere deg selv, Daniel? 139 00:07:20,930 --> 00:07:22,260 >> >> Jada, jeg er Daniel. 140 00:07:22,260 --> 00:07:24,330 Jeg er en sophomore på Mather akkurat nå. 141 00:07:24,330 --> 00:07:25,840 Jeg må konsentrere meg om regjeringen, 142 00:07:25,840 --> 00:07:28,760 men jeg ønsket å ta CS50 fordi jeg har hørt gode anmeldelser om klassen 143 00:07:28,760 --> 00:07:30,750 og jeg har aldri prøvd CS før. 144 00:07:30,750 --> 00:07:34,680 Bla nedover her og vis dette - kult. 145 00:07:36,330 --> 00:07:39,090 Flytte på, Jared. 146 00:07:39,090 --> 00:07:41,990 Hvordan går det? 147 00:07:41,990 --> 00:07:43,430 >> Bra, hvor er du? 148 00:07:43,430 --> 00:07:47,520 Som du kan se, jeg er en junior filosofi konsentratoren i Eliot, 149 00:07:47,520 --> 00:07:50,260 opprinnelig fra Sør-California, 150 00:07:50,260 --> 00:07:53,100 og jeg er interessert i å ta CS50 fordi jeg liker logikken i det, 151 00:07:53,100 --> 00:07:57,420 og det virker veldig kult å gjøre ting på datamaskinen, så. 152 00:07:57,420 --> 00:07:59,570 Awesome, hvor i Sør-California er du fra? 153 00:07:59,570 --> 00:08:02,340 >> Om en time fra [uhørlig], en liten by [hørbar]. 154 00:08:02,340 --> 00:08:04,850 Oh, yeah, min far fra Redlands. 155 00:08:04,850 --> 00:08:07,060 Kule ting. 156 00:08:07,060 --> 00:08:12,130 >> Greit, Jimmy, hvordan går det, Jimmy? 157 00:08:12,130 --> 00:08:15,130 >> Bra, hvor er du? 158 00:08:15,130 --> 00:08:16,040 Gjør det ganske bra! 159 00:08:16,040 --> 00:08:17,710 Fortell oss om deg selv. 160 00:08:17,710 --> 00:08:20,840 >> Jeg er en førsteårsstudent, og jeg er ikke helt sikker på hva jeg hovedfag i 161 00:08:20,840 --> 00:08:22,820 men jeg er ganske lener mot økonomi. 162 00:08:22,820 --> 00:08:25,680 Som Daniel før meg, jeg har aldri gjort noe CS, men det høres ganske kult. 163 00:08:25,680 --> 00:08:28,120 Jeg er opprinnelig fra Chicago. 164 00:08:28,120 --> 00:08:31,640 Awesome. Så sjekk ut hans utskriften her. 165 00:08:31,640 --> 00:08:34,630 Jeg ønsket å spørre, gjorde dette print ut som du forventet? 166 00:08:34,630 --> 00:08:37,650 >> Nei, jeg glemte å skrive ut en ny linje. 167 00:08:37,650 --> 00:08:41,270 Jeg har faktisk glemte at når jeg skrev min greie 168 00:08:41,270 --> 00:08:43,090 for første gang, også. 169 00:08:43,090 --> 00:08:46,330 Det er litt vondt å huske å sette dem inn manuelt. 170 00:08:46,330 --> 00:08:50,560 Det ville være fint om det bare vet det er det du ville. 171 00:08:50,560 --> 00:08:53,630 >> Ok, Kelly. 172 00:08:53,630 --> 00:08:56,050 Wow, vi har to Kellys, 2 Daniels, 2 Kellys. 173 00:08:56,050 --> 00:09:00,490 Så Kelly - du går av Kelly Ren? 174 00:09:00,490 --> 00:09:03,870 Ok, awesome. 175 00:09:03,870 --> 00:09:07,270 Eller Kelly, mener jeg. 176 00:09:07,270 --> 00:09:10,260 >> Så ja, så jeg er Kelly. 177 00:09:10,260 --> 00:09:12,930 Jeg er en sophomore i Pfoho. 178 00:09:12,930 --> 00:09:17,000 Jeg fikk en e-post i dag at jeg fortsatt har 7 uker å erklære min konsentrasjon, 179 00:09:17,000 --> 00:09:20,940 så jeg prøver å ikke tenke på det, 180 00:09:20,940 --> 00:09:24,090 og jeg liker baking, løping, og craisins. 181 00:09:24,090 --> 00:09:29,110 Jeg har ikke erfaring med de fleste av CS; 182 00:09:29,110 --> 00:09:32,700 Jeg lærte meg å bygge nettsteder da jeg var veldig ung, 183 00:09:32,700 --> 00:09:35,750 men jeg tror jeg sannsynligvis lært meg feil mange ganger. 184 00:09:35,750 --> 00:09:39,260 Forhåpentligvis vil jeg lære litt mer 185 00:09:39,260 --> 00:09:41,450 og - ja. 186 00:09:41,450 --> 00:09:44,100 >> Awesome, vel, takk skal du ha. 187 00:09:44,100 --> 00:09:47,190 La oss gå til den andre Kelly; 188 00:09:47,190 --> 00:09:48,880 Jeg har ikke noe - Sa du noe her inne? 189 00:09:48,880 --> 00:09:51,880 >> [Uhørlig] 190 00:09:51,880 --> 00:09:56,180 Det er det! 191 00:09:56,180 --> 00:09:58,120 Søt! 192 00:09:58,120 --> 00:10:01,400 >> All right, så jeg er Kelly. 193 00:10:01,400 --> 00:10:03,980 Jeg er en første-års graduate student. 194 00:10:03,980 --> 00:10:05,560 Jeg hovedfag i Mind, Brain, og utdanning. 195 00:10:05,560 --> 00:10:07,940 Jeg ble uteksaminert i Franklin & Marshall College i 2008 196 00:10:07,940 --> 00:10:10,840 med hovedfag i psykologi og sosiologi 197 00:10:10,840 --> 00:10:13,120 og en mindre på fransk. 198 00:10:13,120 --> 00:10:15,330 Jeg tar CS50 199 00:10:15,330 --> 00:10:18,080 fordi jeg er interessert i å få en doktorgrad i nevrovitenskap 200 00:10:18,080 --> 00:10:21,220 og jeg føler at dette vil hjelpe meg å forstå den teknologien som blir brukt. 201 00:10:21,220 --> 00:10:23,150 Awesome. 202 00:10:26,980 --> 00:10:29,390 Flytte på, Mikaela. 203 00:10:29,390 --> 00:10:31,640 Er det riktig uttale? 204 00:10:31,640 --> 00:10:32,990 Ok, awesome. 205 00:10:32,990 --> 00:10:34,640 >> >> Jeg er Mikhaila. 206 00:10:34,640 --> 00:10:36,870 Jeg er en sophomore i Kirkland House, 207 00:10:36,870 --> 00:10:39,950 og jeg må konsentrere meg i Mechanical Engineering. 208 00:10:39,950 --> 00:10:43,180 Jeg liker sykling, bygget en sykkel i sommer. 209 00:10:43,180 --> 00:10:46,140 Jeg tar CS, faktisk, 210 00:10:46,140 --> 00:10:48,350 som en konsentrasjon krav, 211 00:10:48,350 --> 00:10:52,550 men du vet, jeg tror det er fortsatt kult slags ingeniør klasse. 212 00:10:52,550 --> 00:10:55,150 Awesome - du bygget en sykkel i sommer? 213 00:10:55,150 --> 00:10:56,730 >> Ja. 214 00:10:56,730 --> 00:10:58,900 Wow, som rammen og alt det? 215 00:10:58,900 --> 00:11:00,120 >> Uh-hunh (bekreftende). 216 00:11:00,120 --> 00:11:01,530 Wow, det er kult. 217 00:11:01,530 --> 00:11:06,370 >> [Uhørlig off-camera chat] 218 00:11:06,370 --> 00:11:10,000 [Latter] 219 00:11:12,640 --> 00:11:14,200 Ja, det har vært så lenge. 220 00:11:14,200 --> 00:11:16,730 Du vet aldri, ikke sant? 221 00:11:16,730 --> 00:11:19,420 Vel, kult, vel takk, Mikhaila. 222 00:11:19,420 --> 00:11:21,390 >> Greit, Missy. 223 00:11:21,390 --> 00:11:23,280 >> Jeg heter Missy, jeg er en freshman, 224 00:11:23,280 --> 00:11:25,500 så det betyr at jeg ikke vet noe! 225 00:11:25,500 --> 00:11:29,180 Jeg ønsker å konsentrere seg i astrofysikk. 226 00:11:29,180 --> 00:11:31,220 I CS50, 227 00:11:31,220 --> 00:11:33,350 Jeg føler definitivt hjelpe med det. 228 00:11:33,350 --> 00:11:37,750 En merkelig faktum om meg er at jeg er et nasjonalt sertifisert brannmann. 229 00:11:37,750 --> 00:11:39,960 Wow! 230 00:11:39,960 --> 00:11:42,440 Hvordan skjedde det? 231 00:11:42,440 --> 00:11:45,570 >> Jeg deltok på en akademi 232 00:11:45,570 --> 00:11:49,000 og gikk gjennom helvete for mange uker 233 00:11:49,000 --> 00:11:51,200 og fikk min sertifisering. 234 00:11:51,200 --> 00:11:54,090 Wow, grattis! 235 00:11:54,090 --> 00:11:57,280 Det er ingen liten prestasjon, for sikker. 236 00:11:57,280 --> 00:11:59,070 Ok, så nå vil vi gjøre meg. 237 00:11:59,070 --> 00:12:01,290 Jeg er den neste i rekken. 238 00:12:01,290 --> 00:12:04,510 Jeg er - kjøre den. 239 00:12:04,510 --> 00:12:07,580 >> Så mitt navn er Nate. 240 00:12:07,580 --> 00:12:11,160 Jeg var klasse 2009 på Stanford. 241 00:12:11,160 --> 00:12:13,840 Jeg var en symbolsk Systems store, 242 00:12:13,840 --> 00:12:17,370 som er lik den Mind, Brain, Behavior konsentrasjon her, 243 00:12:17,370 --> 00:12:19,300 men det er litt av en blanding av 244 00:12:19,300 --> 00:12:22,350 informatikk, lingvistikk, psykologi og filosofi. 245 00:12:22,350 --> 00:12:26,600 Slags - Ja, mye av rare ting, men det var flott, 246 00:12:26,600 --> 00:12:29,880 og da jeg gjorde min master i informatikk der, også. 247 00:12:29,880 --> 00:12:33,250 Så jeg er ny på Harvard i år. 248 00:12:33,250 --> 00:12:35,750 Jeg virkelig ønsket å få inn i undervisningen. 249 00:12:35,750 --> 00:12:39,860 Jeg tilbrakte de siste 4 årene på Stanford TA-ing Computer Science klasser 250 00:12:39,860 --> 00:12:43,370 og så David la meg komme på, 251 00:12:43,370 --> 00:12:45,550 og jeg skal være med å hjelpe ut med CS50, 252 00:12:45,550 --> 00:12:47,890 så jeg gjør dette på heltid, er jeg ikke i grad skolen. 253 00:12:47,890 --> 00:12:50,330 Det har vært morsomt. 254 00:12:50,330 --> 00:12:53,130 Forhåpentligvis vil det fortsette å være morsom, jeg er sikker på at det vil. 255 00:12:53,130 --> 00:12:56,040 >> Greit, Sam. 256 00:13:01,910 --> 00:13:05,470 >> Mitt navn er Sam, jeg er en sophomore ved høgskolen, i lov spesielt. 257 00:13:05,470 --> 00:13:10,110 Min største vil være vitenskapens historie, sannsynligvis, og VES videregående, 258 00:13:10,110 --> 00:13:13,240 og min favoritt farge er gul. 259 00:13:18,790 --> 00:13:21,100 Du trenger ikke å avsi dom eller noe, men det er en god farge! 260 00:13:21,100 --> 00:13:24,780 Og Stella. 261 00:13:24,780 --> 00:13:26,980 >> Hei, jeg Stella, jeg er en førsteårsstudent i Grays. 262 00:13:26,980 --> 00:13:30,070 Jeg har ingen anelse hva jeg har konsentrert inn enda, 263 00:13:30,070 --> 00:13:32,500 så CS50 var bare slags tilfeldig, 264 00:13:32,500 --> 00:13:34,220 som er interessant. 265 00:13:34,220 --> 00:13:36,080 Moro var faktisk Jimmy første Harvard venn av meg, 266 00:13:36,080 --> 00:13:38,360 fordi vi er begge fra Chicago. 267 00:13:38,360 --> 00:13:42,450 Kult, og Grace - som er ment å være den virkelig fin en, ikke sant? 268 00:13:42,450 --> 00:13:45,220 >> Jeg trodde [hørbar]. 269 00:13:45,220 --> 00:13:46,690 Oh, yeah. 270 00:13:46,690 --> 00:13:51,210 [Uhørlig / off-camera chat] 271 00:13:51,210 --> 00:13:54,420 Ok, jeg er fortsatt læring, fortsatt læring. 272 00:13:54,420 --> 00:13:57,800 >> Så vi har noe annet som er like interessant her. 273 00:13:59,600 --> 00:14:02,870 Ja, jeg bare lurer, har du en idé som skjer her? 274 00:14:02,870 --> 00:14:05,890 Du vet hvordan du skal tolke dette? 275 00:14:05,890 --> 00:14:13,340 >> Jeg skulle bli satt semikolon etter hver eneste linje. 276 00:14:13,340 --> 00:14:16,370 Det er en slags smerte. 277 00:14:16,370 --> 00:14:19,100 Noen ganger er disse semikolon kan være en reell smerte å spore opp. 278 00:14:19,100 --> 00:14:21,420 Så det viser seg at 279 00:14:21,420 --> 00:14:22,820 det spesielle programmet vi bruker dette året til 280 00:14:22,820 --> 00:14:26,670 kompilere vår C-kode kalles Clang, 281 00:14:26,670 --> 00:14:29,460 og grunnen til at vi har begynt å bruke Clang i år - 282 00:14:29,460 --> 00:14:32,030 fordi vi ikke har brukt det programmet i det siste; 283 00:14:32,030 --> 00:14:35,710 Vi har brukt en annen som heter GCC som er veldig populære - 284 00:14:35,710 --> 00:14:38,420 Clang faktisk gir deg feilmeldinger som fornuftig. 285 00:14:38,420 --> 00:14:41,420 Dette sier "forventet ';' etter uttrykket" 286 00:14:41,420 --> 00:14:45,260 og det forteller deg også uttrykket etter som du trengte et semikolon. 287 00:14:45,260 --> 00:14:47,830 Så er du fikse det? 288 00:14:47,830 --> 00:14:48,930 >> Ja, akkurat nå. 289 00:14:48,930 --> 00:14:52,040 Awesome, la meg vite, og vi vil trekke det opp, og vi vil kjøre den. 290 00:14:52,040 --> 00:14:55,830 Men ja, å sette disse semikolon i er en slags smerte. 291 00:14:55,830 --> 00:14:59,580 >> Jeg fikset det, så jeg tror det skal fungere. 292 00:14:59,580 --> 00:15:02,760 Awesome - revision 3. 293 00:15:02,760 --> 00:15:05,250 Det ser ut som det. 294 00:15:05,250 --> 00:15:08,580 Ok, så nå hvis vi kjører den, 295 00:15:08,580 --> 00:15:11,020 der det går. 296 00:15:11,020 --> 00:15:13,830 Kule ting. 297 00:15:13,830 --> 00:15:15,340 >> OK. 298 00:15:15,340 --> 00:15:18,230 Så takk for å gjøre det. 299 00:15:18,230 --> 00:15:20,210 Det er flott å møte dere. 300 00:15:20,210 --> 00:15:22,880 Hva vi skal gjøre nå er å tilbringe den neste litt 301 00:15:22,880 --> 00:15:24,740 ganske dykke inn i avsnittet problemer 302 00:15:24,740 --> 00:15:27,550 som kommer fra problemet sett fra denne uken 303 00:15:27,550 --> 00:15:29,920 og vi vil gjøre det for de fleste av delene 304 00:15:29,920 --> 00:15:32,110 for resten av begrepet, 305 00:15:32,110 --> 00:15:35,580 og så skal vi spare de siste 15, 20 minutter eller så 306 00:15:35,580 --> 00:15:38,490 å snakke om problemet satt seg 307 00:15:38,490 --> 00:15:41,420 og deretter bare andre spørsmål du har generelt om klassen. 308 00:15:43,380 --> 00:15:45,670 Når det er sagt, hva vi egentlig ønsker å gjøre 309 00:15:45,670 --> 00:15:49,390 er har alle deltar 310 00:15:49,390 --> 00:15:51,500 bruker Spaces ting, 311 00:15:51,500 --> 00:15:53,500 kaste i koden, kaster i forslag, 312 00:15:53,500 --> 00:15:56,500 og snakker om når ting som dette pause 313 00:15:56,500 --> 00:15:58,360 eller ikke fungerer, bare fordi dette er ting som 314 00:15:58,360 --> 00:16:00,870 Jeg vet jeg kom over 315 00:16:00,870 --> 00:16:03,180 da jeg begynte koding, 316 00:16:03,180 --> 00:16:05,490 og var egentlig ganske frustrerende til tider 317 00:16:05,490 --> 00:16:08,690 fordi hvis det er som 2 am før oppgavesettet er grunn, 318 00:16:08,690 --> 00:16:11,330 så - bare for offentliggjøring, 319 00:16:11,330 --> 00:16:14,590 Jeg startet ikke programmering før jeg var en sophomore på college. 320 00:16:14,590 --> 00:16:17,360 Det var snilt av denne rare, ukjente ting 321 00:16:17,360 --> 00:16:20,360 at jeg hørte var ganske kult 322 00:16:20,360 --> 00:16:23,590 og jeg har også hørt det kan være en reell smerte i baken 323 00:16:23,590 --> 00:16:27,610 hvis du går glipp av et semikolon, og det er den eneste feilen holde programmet fungerer 324 00:16:27,610 --> 00:16:30,890 og holde deg fra å gå i dvale, 325 00:16:30,890 --> 00:16:32,650 så definitivt, 326 00:16:32,650 --> 00:16:34,020 hvis du har spørsmål som det, 327 00:16:34,020 --> 00:16:37,060 Hvis du har spørsmål som det, gi meg beskjed, 328 00:16:37,060 --> 00:16:40,050 fordi jeg ønsker å gjøre dette til en god opplevelse for dere. 329 00:16:40,050 --> 00:16:44,620 >> Så har dere alle nedlastede problemet satt ennå? 330 00:16:44,620 --> 00:16:47,160 Kinda vet hvor det er? Okay. 331 00:16:47,160 --> 00:16:51,490 Så vil vi gå til cs50.net, fordi jeg ikke har det på denne kontoen, 332 00:16:51,490 --> 00:16:54,110 trekke opp de problematiske sett, 333 00:16:54,110 --> 00:16:57,940 trekke opp problemet sett 2, og vi skal se på standardutgaven dag. 334 00:16:57,940 --> 00:17:01,190 Vi vil trekke opp spesifikasjonen her. 335 00:17:02,640 --> 00:17:04,420 Bla nedover. 336 00:17:06,790 --> 00:17:11,109 Så vi skal begynne å se på denne delen av spørsmål. 337 00:17:14,069 --> 00:17:16,710 Har dere sett disse shorts ennå? 338 00:17:16,710 --> 00:17:18,329 Okay. 339 00:17:18,329 --> 00:17:21,329 Så det er shorts på løkker, 340 00:17:21,329 --> 00:17:24,700 som er gjort av Tommy, en av hodet undervisning stipendiater. 341 00:17:24,700 --> 00:17:27,230 Det er en på omfang, 342 00:17:27,230 --> 00:17:30,530 Jeg tror gjort av en annen undervisning kar ved navn David 343 00:17:30,530 --> 00:17:33,400 og deretter en på Caesar Cipher også gjort av David. 344 00:17:33,400 --> 00:17:35,550 De er ganske kult. 345 00:17:35,550 --> 00:17:37,770 Har dere vært å se sine shorts så langt? 346 00:17:37,770 --> 00:17:39,270 How've de vært? 347 00:17:39,270 --> 00:17:41,490 Nyttig? Ok, godt å vite. 348 00:17:41,490 --> 00:17:44,210 Hvis de ikke er det, kan du si det. 349 00:17:46,290 --> 00:17:49,870 Men før du gjør det, 350 00:17:49,870 --> 00:17:52,600 har dere sett på disse spørsmålene 351 00:17:52,600 --> 00:17:55,430 i det hele tatt? 352 00:17:55,430 --> 00:17:57,480 >> La oss snakke om dette litt. 353 00:17:57,480 --> 00:18:00,600 Så vi har introdusert de siste par ukene 354 00:18:00,600 --> 00:18:02,480 i foredraget 355 00:18:02,480 --> 00:18:04,910 en rekke forskjellige sløyfer. 356 00:18:04,910 --> 00:18:06,140 Det er for loop, 357 00:18:06,140 --> 00:18:09,570 mens loop, og deretter gjør-mens loop, 358 00:18:09,570 --> 00:18:13,100 og i foredrag, har vi snakket mye om 359 00:18:13,100 --> 00:18:16,010 hvordan disse løkker er alle 360 00:18:16,010 --> 00:18:18,320 nokså lik i mange måter, 361 00:18:18,320 --> 00:18:21,210 og du kan gjøre mye av de samme tingene med en stund loop 362 00:18:21,210 --> 00:18:23,260 som du kan med en for løkke. 363 00:18:23,260 --> 00:18:26,300 Du må bare slags bruk de rette kombinasjonene av variabler og slikt. 364 00:18:26,300 --> 00:18:28,680 og så virkelig 365 00:18:28,680 --> 00:18:31,200 den virkelige skillet mellom alle løkkene er at 366 00:18:31,200 --> 00:18:33,620 noen ganger er de mer nyttige 367 00:18:33,620 --> 00:18:36,930 å bruke dem på en gang enn ved en annen gang. 368 00:18:36,930 --> 00:18:39,340 >> Så for eksempel 369 00:18:39,340 --> 00:18:42,260 mens loop avviker fra en do-mens loop. 370 00:18:42,260 --> 00:18:45,680 Føles alle som de har en god hånd på når 371 00:18:45,680 --> 00:18:48,650 en gjør-mens loop er mer 372 00:18:48,650 --> 00:18:50,990 nyttig eller hva forskjellen er? 373 00:18:50,990 --> 00:18:53,410 >> Jeg tror forskjellen er en gjør-mens loop 374 00:18:53,410 --> 00:18:56,960 går - Jeg vet ikke helt hva terminologien er, 375 00:18:56,960 --> 00:18:59,750 men rekke funksjoner i sløyfen. 376 00:18:59,750 --> 00:19:02,020 De automatisk - det gjør sine runs minst 377 00:19:02,020 --> 00:19:05,390 før det sjekker tilstanden, eller mens loop vil bare kjøre den når 378 00:19:05,390 --> 00:19:08,290 det går kontinuerlig - hvorvidt tilstanden blir oppfylt. 379 00:19:08,290 --> 00:19:11,010 Ja, gjør det fornuftig? 380 00:19:11,010 --> 00:19:14,200 >> La oss ta en titt på en liten bit av koden. 381 00:19:14,200 --> 00:19:16,930 Så bare for å gjenta spørsmålet, 382 00:19:16,930 --> 00:19:19,230 eller svaret, heller; 383 00:19:19,230 --> 00:19:22,050 svaret var at 384 00:19:22,050 --> 00:19:25,850 en stund loop vil sjekke for å se om tilstanden 385 00:19:25,850 --> 00:19:27,440 at du angir er oppfylt 386 00:19:27,440 --> 00:19:31,320 før det renner kroppen av løkken for første gang, 387 00:19:31,320 --> 00:19:35,000 mens do-while løkke vil automatisk kjøre kroppen av loopen, 388 00:19:35,000 --> 00:19:38,450 er hva vi kaller det - det er rart terminologi, 389 00:19:38,450 --> 00:19:41,460 men hvis jeg noen gang sier noe som ikke gir mening, la meg vite - 390 00:19:41,460 --> 00:19:45,360 løkken kroppen er at ting som du putter i mellom klammeparentes. 391 00:19:45,360 --> 00:19:47,840 Og i en gjør-mens loop, 392 00:19:47,840 --> 00:19:50,220 at kroppen får kjørt minst en gang, 393 00:19:50,220 --> 00:19:54,460 og da tilstanden blir kontrollert før det går hver gang på rad. 394 00:19:54,460 --> 00:19:56,580 >> Så egentlig, Sam, 395 00:19:56,580 --> 00:20:00,820 gjør du noe imot å skrive en enkel mens loop 396 00:20:00,820 --> 00:20:02,840 i Spaces? 397 00:20:02,840 --> 00:20:05,600 >> Hvordan sorterer du om som 398 00:20:05,600 --> 00:20:07,060 lage en ny ...? 399 00:20:07,060 --> 00:20:09,220 Jeg bare slette det du har der. 400 00:20:09,220 --> 00:20:11,300 Ja, bare tømme den ut. 401 00:20:11,300 --> 00:20:14,510 >> Vel, jeg tror jeg har dette - 402 00:20:14,510 --> 00:20:16,640 hvilken vil du, en stund, eller ønsker du ...? 403 00:20:16,640 --> 00:20:19,350 Ja, bare en stund sant, skrive noe ut. 404 00:20:21,050 --> 00:20:23,140 Og la oss se. 405 00:20:23,140 --> 00:20:25,850 Alexander, innså jeg at vi aldri introduserte deg. 406 00:20:25,850 --> 00:20:27,510 >> Å, det er fint. 407 00:20:27,510 --> 00:20:30,760 Har du - kan du kode opp en gjør-mens loop for oss? 408 00:20:30,760 --> 00:20:32,520 >> Ja, jeg skal prøve. 409 00:20:32,520 --> 00:20:34,370 Greit, vi bare trekke disse opp på skjermen, 410 00:20:34,370 --> 00:20:38,240 slik at du slags har et håndtak på hva forskjellene er. 411 00:20:38,240 --> 00:20:41,280 >> Så her er hva Sam har gjort. 412 00:20:41,280 --> 00:20:44,460 Han har et heltall jeg ringte 413 00:20:44,460 --> 00:20:47,480 at han har initialisert til 17. 414 00:20:47,480 --> 00:20:51,570 Så sier han mens (int i = 17) 415 00:20:51,570 --> 00:20:54,230 printf ("Mitt navn er Sam."); 416 00:20:54,230 --> 00:20:57,300 Så hva skjer når vi kjører denne koden? 417 00:20:57,300 --> 00:21:00,340 Det er en feil; hva sier feilen? 418 00:21:00,340 --> 00:21:02,890 La oss dra den opp og snakke om det. 419 00:21:02,890 --> 00:21:05,040 Det oppstod en feil, står det. 420 00:21:05,040 --> 00:21:07,400 La oss bla nedover. 421 00:21:07,400 --> 00:21:09,460 Slik at det ga oss denne feilen, og det sa, 422 00:21:09,460 --> 00:21:12,690 "Hei, jeg forventet et uttrykk." 423 00:21:12,690 --> 00:21:16,180 Det er ganske kryptisk. 424 00:21:19,160 --> 00:21:23,140 Ja, så akkurat - og igjen, 425 00:21:23,140 --> 00:21:27,140 vil det være en annen liten bug som vi vil ta i løpet av et sekund. 426 00:21:27,140 --> 00:21:31,800 Men dette er en av de slags rare terminologi ting, 427 00:21:31,800 --> 00:21:36,150 så dette int i = 17 428 00:21:36,150 --> 00:21:39,290 ikke er et uttrykk. 429 00:21:39,290 --> 00:21:41,220 Hva det ser ut som det gjør er det er 430 00:21:41,220 --> 00:21:43,410 erklære et heltall jeg ringte 431 00:21:43,410 --> 00:21:45,540 og sette den til lik til 17 432 00:21:45,540 --> 00:21:48,780 eller, rettere sagt, setter 17 i det int jeg ringte. 433 00:21:50,560 --> 00:21:53,350 Og det ikke fornuftig 434 00:21:53,350 --> 00:21:55,790 i sammenheng med denne mens loop. 435 00:21:55,790 --> 00:21:58,190 Det virker fornuftig, som vi skal se, 436 00:21:58,190 --> 00:22:01,250 i sammenheng med en for løkke, fordi for løkke erklæringer ikke starte 437 00:22:01,250 --> 00:22:05,800 med at for int lik i noe 438 00:22:05,800 --> 00:22:07,830 og går videre. 439 00:22:07,830 --> 00:22:09,500 >> Det gjorde du - 440 00:22:09,500 --> 00:22:12,630 fikse noe, all right. 441 00:22:12,630 --> 00:22:15,270 Her går det; awesome. 442 00:22:15,270 --> 00:22:17,920 Så nå er ting ser litt annerledes ut. 443 00:22:17,920 --> 00:22:19,030 Et par ting har endret seg. 444 00:22:19,030 --> 00:22:21,300 Kan du fortelle oss hva ting har endret seg? 445 00:22:21,300 --> 00:22:24,950 >> Jeg tok ut int, så det er ingen erklæring [hørbar] i stedet for et oppdrag. 446 00:22:24,950 --> 00:22:28,770 Den ene likhetstegn, satte jeg to like tegn, som betyr en lik. 447 00:22:28,770 --> 00:22:30,560 Awesome. 448 00:22:30,560 --> 00:22:33,320 Ja, så hva Sam gjorde han tok ut int 449 00:22:33,320 --> 00:22:35,770 som var her tidligere, 450 00:22:35,770 --> 00:22:39,340 så hvis jeg bare se på dette - dette er hva det var tidligere, sa det int, 451 00:22:39,340 --> 00:22:41,970 som erklærte det - så vi tok ut type. 452 00:22:41,970 --> 00:22:44,710 Det er int, røye, streng, kort, 453 00:22:44,710 --> 00:22:47,380 de kalles typer. 454 00:22:47,380 --> 00:22:49,510 Så du tok ut den type 455 00:22:49,510 --> 00:22:51,580 og deretter tidligere, 456 00:22:51,580 --> 00:22:54,190 Han hadde bare én likhetstegnet 457 00:22:54,190 --> 00:22:57,300 og hva han sa var problematisk om dette ble 458 00:22:57,300 --> 00:22:59,580 når du har en likhetstegnet, 459 00:22:59,580 --> 00:23:01,780 det er en oppgave operatør. 460 00:23:01,780 --> 00:23:04,930 Det er ikke å teste hvorvidt to ting er like. 461 00:23:04,930 --> 00:23:07,920 Det er faktisk å sette noe lik noe. 462 00:23:07,920 --> 00:23:11,110 Vi setter nummer 17 i variabelen i. 463 00:23:11,110 --> 00:23:13,850 Så for å gjøre den slags sammenligning 464 00:23:13,850 --> 00:23:16,430 du må bruke den doble lik, 465 00:23:16,430 --> 00:23:19,640 som er en slags merkelig ting 466 00:23:19,640 --> 00:23:22,760 men er en ganske vanlig feil. 467 00:23:23,980 --> 00:23:27,830 Så en annen ting jeg vil påpeke, hvis du ikke tankene, 468 00:23:27,830 --> 00:23:30,610 er at i 469 00:23:30,610 --> 00:23:33,210 vår funksjon her i int main, 470 00:23:33,210 --> 00:23:36,740 du ser at kroppen vår funksjon 471 00:23:36,740 --> 00:23:39,810 er forskjøvet fra venstre side 472 00:23:39,810 --> 00:23:42,400 med 4 mellomrom eller en tabulator. 473 00:23:42,400 --> 00:23:44,730 Grunnen til at vi gjør dette 474 00:23:44,730 --> 00:23:47,000 er bare for lesbarhet. 475 00:23:47,000 --> 00:23:51,620 Som du kan se i Sams mens loop her, 476 00:23:51,620 --> 00:23:53,120 han gjorde ikke rykke i det hele tatt, 477 00:23:53,120 --> 00:23:55,390 og som ikke påvirker funksjonaliteten av koden. 478 00:23:55,390 --> 00:23:57,860 Det vil kjøre nøyaktig det samme. 479 00:23:57,860 --> 00:24:00,950 >> Så for eksempel, hvis vi kommer opp til toppen her 480 00:24:00,950 --> 00:24:02,680 og trykk vår Play-knappen, vil det bygge den, 481 00:24:02,680 --> 00:24:04,470 det vil kjøre den, 482 00:24:04,470 --> 00:24:06,700 og hva som kommer til å skje? 483 00:24:06,700 --> 00:24:08,360 Hvorfor det likevel si kjører? 484 00:24:08,360 --> 00:24:10,560 >> Fordi det vil terpe hi. 485 00:24:10,560 --> 00:24:12,900 Nettopp, og hvorfor holde det gjenta hi? 486 00:24:12,900 --> 00:24:15,850 >> Fordi heltall aldri endres, så det er alltid 17. 487 00:24:15,850 --> 00:24:18,030 Ja, akkurat, så 488 00:24:18,030 --> 00:24:20,970 la oss se, etter - minner meg om navnet ditt igjen? 489 00:24:20,970 --> 00:24:24,020 Jimmy. Så Jimmy sa at 490 00:24:24,020 --> 00:24:27,340 grunnen til dette repeterer hi igjen og igjen 491 00:24:27,340 --> 00:24:30,510 er fordi denne tilstanden er alltid sant. 492 00:24:30,510 --> 00:24:33,270 Vi har aldri endre verdien av jeg. 493 00:24:33,270 --> 00:24:36,170 Vi aldri endre innholdet i hva som er lagret i den variabelen. 494 00:24:36,170 --> 00:24:39,180 Så på dette punktet fikk vi denne feilen som 495 00:24:39,180 --> 00:24:42,170 programmet generert for mye utgang, 496 00:24:42,170 --> 00:24:45,100 og hvis vi bla ned og type titt på hva som skjer her, 497 00:24:45,100 --> 00:24:49,160 du kan se at det er hi, hi, hi, hi, hi, hi, hi hele veien gjennom. 498 00:24:49,160 --> 00:24:51,200 Awesome. 499 00:24:51,200 --> 00:24:53,750 >> Så slags tilbake til det opprinnelige punktet 500 00:24:53,750 --> 00:24:57,020 at det å ha innrykk her 501 00:24:57,020 --> 00:25:00,110 i kroppen av mens loop påvirke ikke noe. 502 00:25:00,110 --> 00:25:03,050 Programmet fortsatt kjørte helt fint. 503 00:25:03,050 --> 00:25:06,790 Typisk for god stil - 504 00:25:06,790 --> 00:25:10,210 og dette er noe som vi ser etter i oppgavesett - 505 00:25:10,210 --> 00:25:13,930 Vi ber dere om å rykke dette med 4 plasser, som du kan gjøre 506 00:25:13,930 --> 00:25:16,440 ved bare å trykke på tabulatortasten 507 00:25:16,440 --> 00:25:18,860 eller ved å manuelt sette i 4 områder selv. 508 00:25:21,880 --> 00:25:25,050 Cool, greit så la oss gå tilbake og se på 509 00:25:25,050 --> 00:25:30,460 Alexander gjør-stund. 510 00:25:30,460 --> 00:25:32,980 >> Bare litt å ha litt problemer. 511 00:25:32,980 --> 00:25:34,390 Ok, vel la oss arbeide gjennom den. 512 00:25:34,390 --> 00:25:36,400 Er det kult? 513 00:25:36,400 --> 00:25:37,430 >> Ja. 514 00:25:37,430 --> 00:25:39,200 >> Ok, så her vi går. 515 00:25:39,200 --> 00:25:41,010 Dette er koden som Alexander skrev. 516 00:25:41,010 --> 00:25:43,410 Går du med Alex - OK. 517 00:25:43,410 --> 00:25:46,380 Så her er koden som Alex har skrevet. 518 00:25:46,380 --> 00:25:50,500 Så har vi fått vår erklæring viktigste akkurat her, 519 00:25:50,500 --> 00:25:54,410 og så har vi dette heltallsvariabel jeg ringte 520 00:25:54,410 --> 00:25:57,320 blir erklært her. 521 00:25:57,320 --> 00:26:01,060 Vi har en do uttalelse 522 00:26:01,060 --> 00:26:04,600 og så kroppen igjen med disse bukseseler, 523 00:26:04,600 --> 00:26:06,520 så dette er kroppen av do-while - 524 00:26:06,520 --> 00:26:09,210 la meg zoome inn på dette, så det er lettere å lese - 525 00:26:09,210 --> 00:26:12,730 og i kroppen, vi prøver å skrive ut "dette er kroppen", 526 00:26:12,730 --> 00:26:14,300 i + +, 527 00:26:14,300 --> 00:26:17,710 så inkrementere innholdet av i og gjøre dette 528 00:26:17,710 --> 00:26:19,470 før jeg kommer til å bli 3, 529 00:26:19,470 --> 00:26:22,440 og deretter vårt program avsluttes. 530 00:26:22,440 --> 00:26:24,680 >> Så hva skjer når vi kjører dette programmet? 531 00:26:24,680 --> 00:26:27,580 >> Jeg forventet en identifikator. 532 00:26:27,580 --> 00:26:32,070 Ok, så bygge, drifte, oppstår feil. 533 00:26:32,070 --> 00:26:34,820 Hva skjer? 534 00:26:34,820 --> 00:26:37,060 Vi bla nedover her, 535 00:26:37,060 --> 00:26:40,260 vi får dette litt kryptisk ser ting, 536 00:26:40,260 --> 00:26:43,930 forventet semikolon etter toppnivå erklæringen. 537 00:26:43,930 --> 00:26:46,620 Det er ganske rart. 538 00:26:46,620 --> 00:26:50,990 Har noen en idé om hva som kan være det som skjer? 539 00:26:53,080 --> 00:26:54,640 Ganske rart, ja. 540 00:26:54,640 --> 00:26:57,640 >> [Uhørlig] bli erklært utenfor parentesen? 541 00:26:57,640 --> 00:27:03,480 Så det betyr ikke gjelder så når du bruker parenteser? 542 00:27:03,480 --> 00:27:07,390 Så han erklærte denne fyren utenfor som parenteser? 543 00:27:09,670 --> 00:27:12,240 Å, disse gutta - de klammeparentes? 544 00:27:12,240 --> 00:27:13,850 >> Ja. 545 00:27:13,850 --> 00:27:15,310 Ja, akkurat. 546 00:27:15,310 --> 00:27:17,120 Så det viser seg at 547 00:27:17,120 --> 00:27:21,550 du kan faktisk ikke erklære en variabel her som dette. 548 00:27:23,750 --> 00:27:26,690 Hva du kanskje har prøvd å gjøre var - 549 00:27:26,690 --> 00:27:30,110 klippe det ut av det - 550 00:27:30,110 --> 00:27:34,330 du kan enten sette den i løpet av de klammeparentes her 551 00:27:34,330 --> 00:27:37,400 eller et annet alternativ 552 00:27:37,400 --> 00:27:40,350 er å sette det helt utenfor. 553 00:27:42,480 --> 00:27:46,610 Og så disse - avhengig av hvor du faktisk sette erklæringen 554 00:27:46,610 --> 00:27:48,550 av at heltallsvariabel, 555 00:27:48,550 --> 00:27:53,540 du kan få 2 svært ulike typer variabler; 556 00:27:53,540 --> 00:27:55,100 når det er utenfor viktigste, 557 00:27:55,100 --> 00:27:58,240 det er hva vi kaller en global variabel. 558 00:27:58,240 --> 00:28:00,070 Det er utenfor rammen av noen av funksjonene - 559 00:28:00,070 --> 00:28:03,420 det er ikke i en funksjon - 560 00:28:03,420 --> 00:28:07,050 mens hvis vi setter det på innsiden av main, 561 00:28:07,050 --> 00:28:10,000 liker her, så er det som kalles en lokal variabel, 562 00:28:10,000 --> 00:28:13,830 fordi det er lokale til omfanget av main. 563 00:28:13,830 --> 00:28:16,720 Og vi vil snakke litt mer om hva forskjellene er 564 00:28:16,720 --> 00:28:20,970 mellom de to typene og hvorfor du bruker forskjellige typer variabler, 565 00:28:20,970 --> 00:28:23,040 men for nå, 566 00:28:23,040 --> 00:28:25,070 du kan bare beholde alle variablene lokale, 567 00:28:25,070 --> 00:28:28,320 fordi vi ikke har noe behov for globale variabler. 568 00:28:28,320 --> 00:28:31,390 >> Ok, så det er en ting akkurat der. 569 00:28:31,390 --> 00:28:34,680 La oss prøve å kjøre dette igjen, se hva som skjer. 570 00:28:37,420 --> 00:28:40,270 Kjør, får en annen feil. 571 00:28:40,270 --> 00:28:43,320 Zoome inn litt, hva skal vi få? 572 00:28:45,110 --> 00:28:50,000 Vi får dette forventet parentes etter do / stund. 573 00:28:53,660 --> 00:28:55,260 Noen ideer hva som skjer? Dan? 574 00:28:55,260 --> 00:28:58,880 >> Er stund da parentes og deretter - 575 00:28:58,880 --> 00:29:01,990 Jeg vet ikke om du trenger å redeclare int, 576 00:29:01,990 --> 00:29:04,980 men gjøre mens (i <3). 577 00:29:04,980 --> 00:29:06,930 Akkurat, ja. 578 00:29:06,930 --> 00:29:08,830 Så det viser seg at Dan er helt riktig. 579 00:29:08,830 --> 00:29:11,230 Vi trenger ikke å sette denne type her igjen. 580 00:29:11,230 --> 00:29:14,440 Vi kan i stedet drepe den type 581 00:29:14,440 --> 00:29:17,220 og bare gjøre det. 582 00:29:19,270 --> 00:29:21,640 OK. 583 00:29:21,640 --> 00:29:24,950 Jeg vil zoome ut igjen, kan du prøve det en gang. 584 00:29:26,360 --> 00:29:29,580 Se på det, det går vellykket. 585 00:29:29,580 --> 00:29:33,260 Hvis vi rulle ned, "dette er kroppen" skrives ut 3 ganger. 586 00:29:33,260 --> 00:29:35,820 Det er ganske søt. 587 00:29:35,820 --> 00:29:38,670 Godt gjort, godt gjort, folkens. 588 00:29:38,670 --> 00:29:41,080 Godt gjort. 589 00:29:41,080 --> 00:29:43,250 Hvordan er dette kommer så langt? 590 00:29:43,250 --> 00:29:46,200 Anstendig tempo? 591 00:29:46,200 --> 00:29:49,200 Ok, kult. 592 00:29:49,200 --> 00:29:52,590 >> Så, som vi på en måte tilbake til det opprinnelige spørsmålet, 593 00:29:52,590 --> 00:29:55,430 vi - og nå hvis vi ser forskjellen, 594 00:29:55,430 --> 00:29:58,240 du ser at i denne do-mens loop, 595 00:29:58,240 --> 00:30:00,030 betingelsen kommer sist. 596 00:30:00,030 --> 00:30:02,530 Så som datamaskinen leser programmet 597 00:30:02,530 --> 00:30:06,050 siden C-programmer blir henrettet slags i denne rekkefølge, 598 00:30:06,050 --> 00:30:09,450 der de bokstavelig talt starte med den første linjen i main, 599 00:30:09,450 --> 00:30:13,450 og deretter utføre linje 6, linje 7, 8 linje, linje 9, 600 00:30:13,450 --> 00:30:16,150 linje 10 linje 11, 601 00:30:16,150 --> 00:30:18,440 alt dette øverst til høyre her 602 00:30:18,440 --> 00:30:20,020 skal utføre en gang 603 00:30:20,020 --> 00:30:23,350 før vi noen gang teste denne tilstanden for å se 604 00:30:23,350 --> 00:30:26,240 hvorvidt i - eller innholdet av I, heller - 605 00:30:26,240 --> 00:30:29,750 er mindre enn antallet 3. 606 00:30:29,750 --> 00:30:33,300 Og bare hvis en gang vi kommer til linje 12, 607 00:30:33,300 --> 00:30:36,260 innholdet av i er mindre enn 3 608 00:30:36,260 --> 00:30:39,150 vi faktisk hoppe tilbake til linje 7 609 00:30:39,150 --> 00:30:41,140 og deretter gjenta prosessen, 610 00:30:41,140 --> 00:30:44,620 og da vi teste tilstanden igjen og igjen og igjen. 611 00:30:44,620 --> 00:30:47,440 >> Så vi kan kontrastere denne 612 00:30:47,440 --> 00:30:50,240 med - zoome ut igjen, 613 00:30:50,240 --> 00:30:56,500 bla ned til Sams versjon, 614 00:30:56,500 --> 00:31:00,760 vi skal se på dette, litt endret slik at det ikke lenger er en uendelig loop - 615 00:31:00,760 --> 00:31:03,570 der hvis vi zoome inn, 616 00:31:03,570 --> 00:31:06,300 Vi ser det som dette programmet utfører, 617 00:31:06,300 --> 00:31:09,120 det kommer til første erklære int i, 618 00:31:09,120 --> 00:31:12,030 bestemme innholdet jeg være til 0, 619 00:31:12,030 --> 00:31:15,820 og deretter den treffer tilstanden mens loop første, 620 00:31:15,820 --> 00:31:19,210 så i dette tilfellet, denne kroppen, dette printf ("Hei") og jeg + + 621 00:31:19,210 --> 00:31:21,630 vil ikke engang kjøre 622 00:31:21,630 --> 00:31:24,310 mindre jeg er faktisk mindre enn eller lik 2. 623 00:31:24,310 --> 00:31:26,750 Så hvis jeg er 3, for eksempel, 624 00:31:26,750 --> 00:31:28,840 hvis vi setter dette her 625 00:31:28,840 --> 00:31:32,160 lik 4 - eller jeg vil gjøre 3, fordi jeg sa 3 - 626 00:31:32,160 --> 00:31:34,890 og deretter kjøre den, 627 00:31:34,890 --> 00:31:38,320 det vil bygge, det vil kjøre helt fint, 628 00:31:38,320 --> 00:31:40,530 men det vil ikke faktisk skrive ut noe, 629 00:31:40,530 --> 00:31:43,030 fordi den ikke klarte denne testen for det første tilfellet. 630 00:31:44,780 --> 00:31:47,530 Så i klassen, vi slags snakket om hvorfor akkurat disse do-mens sløyfer 631 00:31:47,530 --> 00:31:49,800 er nyttige noen ganger 632 00:31:49,800 --> 00:31:53,140 og hvorfor vi vil bruke den i motsetning til en stund loop. 633 00:31:53,140 --> 00:31:56,450 >> Er der - gjør dere har noen forslag 634 00:31:56,450 --> 00:31:59,090 for hvorfor en gjør-mens loop kan være mer nyttig? 635 00:31:59,090 --> 00:32:02,560 >> Vel, jeg tror gjør-mens sløyfer er hvis du ønsker brukerundersøkelser, 636 00:32:02,560 --> 00:32:05,020 fordi den måten du kan la dem 637 00:32:05,020 --> 00:32:07,780 sette noe i gang, og hvis det er riktig, 638 00:32:07,780 --> 00:32:09,300 vi kan gå videre til resten av programmet, 639 00:32:09,300 --> 00:32:11,250 men hvis det ikke er riktig, så du holder på å spørre brukeren 640 00:32:11,250 --> 00:32:13,250 før du setter riktig inngang. 641 00:32:13,250 --> 00:32:14,260 Ja, akkurat - nøyaktig, 642 00:32:14,260 --> 00:32:16,840 så en gjør-mens loop er nyttig 643 00:32:16,840 --> 00:32:18,930 fordi når ber om brukerens input 644 00:32:18,930 --> 00:32:23,000 fordi du trenger for å få brukerens input før du faktisk kan sjekke det. 645 00:32:23,000 --> 00:32:27,330 Så i pset 1, pset 2, 646 00:32:27,330 --> 00:32:29,650 hvor du ber om brukerens input mye, 647 00:32:29,650 --> 00:32:31,200 det er en nyttig ting å bruke 648 00:32:31,200 --> 00:32:33,740 i motsetning til bare en enkel stund loop. 649 00:32:33,740 --> 00:32:36,780 Hvis du bruker en stund loop, kan du gjøre det samme - 650 00:32:36,780 --> 00:32:38,750 du kan gjøre det samme med en stund loop 651 00:32:38,750 --> 00:32:40,580 som du gjør med en gjør-mens loop. 652 00:32:40,580 --> 00:32:43,380 Du må bare slags har denne dupliserte prosessen 653 00:32:43,380 --> 00:32:47,010 hvor du får innspill først og deretter starte mens loop. 654 00:32:47,010 --> 00:32:49,800 Mens en do-mens loop, du må bare skrive det en gang 655 00:32:49,800 --> 00:32:52,430 og det er en mye renere. 656 00:32:52,430 --> 00:32:54,650 >> OK. 657 00:32:55,970 --> 00:32:57,330 Eventuelle spørsmål? 658 00:32:59,350 --> 00:33:01,380 Fornuftig? 659 00:33:01,380 --> 00:33:06,200 >> The return 0 - det er bare en slags stall eller er det -? 660 00:33:06,200 --> 00:33:08,960 Ja, så vi kan - 661 00:33:08,960 --> 00:33:11,960 vel, vil vi dekke dette litt mer senere 662 00:33:11,960 --> 00:33:13,290 men det viser seg at 663 00:33:13,290 --> 00:33:15,720 denne avkastningen 0 som vi legger 664 00:33:15,720 --> 00:33:19,090 på slutten av hoved hele tiden - 665 00:33:19,090 --> 00:33:21,980 du kan ganske bare ta det som noe vi gjør 666 00:33:21,980 --> 00:33:24,930 for tiden. 667 00:33:24,930 --> 00:33:28,860 Hva vi har begynt å snakke om med funksjoner 668 00:33:28,860 --> 00:33:31,600 slags på slutten av forrige uke og så igjen denne uken 669 00:33:31,600 --> 00:33:33,550 er at en funksjon 670 00:33:33,550 --> 00:33:37,680 tar innganger som er disse tingene i parentes; 671 00:33:37,680 --> 00:33:41,690 disse er to innganger, våre argumenter eller parametere, 672 00:33:41,690 --> 00:33:44,540 hva de er også kalt til vår viktigste funksjon, 673 00:33:44,540 --> 00:33:48,510 og deretter en funksjon frembringer et utgangssignal 674 00:33:48,510 --> 00:33:51,290 som vi kaller en returverdi. 675 00:33:51,290 --> 00:33:56,260 Og returverdien i tilfelle av hoved er denne int, 676 00:33:56,260 --> 00:33:58,320 dette heltall, 677 00:33:58,320 --> 00:34:01,160 og måten du forteller en funksjon, "Hey, dette er hva din utgang 678 00:34:01,160 --> 00:34:05,840 kommer til å være, "er med dette ordet" return ", 679 00:34:05,840 --> 00:34:07,960 dette søkeordet, heller, 680 00:34:07,960 --> 00:34:11,000 og så viktigste retur 0 681 00:34:11,000 --> 00:34:13,389 eller viktigste gi ut 0 682 00:34:13,389 --> 00:34:15,139 er standard i C-programmer 683 00:34:15,139 --> 00:34:18,110 fordi 0 retur fra viktigste middel som 684 00:34:18,110 --> 00:34:21,600 "Hei, alt utført med mitt program helt fint." 685 00:34:21,600 --> 00:34:24,639 Hvis vi skulle sette noe annet enn 0, 686 00:34:24,639 --> 00:34:27,440 som en, for eksempel, 687 00:34:27,440 --> 00:34:31,080 som brukes til å fortelle hvem kjørte dette programmet 688 00:34:31,080 --> 00:34:33,540 at noe gikk galt. 689 00:34:35,739 --> 00:34:39,989 Så når vi får mer involvert med ting over semesteret, 690 00:34:39,989 --> 00:34:42,670 hvis du noen gang ønsker å si, 691 00:34:42,670 --> 00:34:46,650 "Oops, du vet, noe gikk galt med dette programmet," 692 00:34:46,650 --> 00:34:49,409 snarere enn å ha mitt program krasjer, vil jeg varsle 693 00:34:49,409 --> 00:34:52,310 løperen av mitt program at noe gikk galt, 694 00:34:52,310 --> 00:34:54,530 du kan bruke returverdien, 695 00:34:54,530 --> 00:34:57,230 som vi kaller det, det er ikke 0. 696 00:35:00,180 --> 00:35:02,240 >> Så vi vil dekke det litt mer 697 00:35:02,240 --> 00:35:05,480 når vi får inn funksjoner. 698 00:35:05,480 --> 00:35:09,030 Den slags er fornuftig? 699 00:35:09,030 --> 00:35:11,240 Okay. 700 00:35:11,240 --> 00:35:13,530 Funksjoner er slags bisarre - 701 00:35:13,530 --> 00:35:17,270 Jeg tror for folk som har mye matematikk bakgrunn, 702 00:35:17,270 --> 00:35:20,100 det kommer litt lettere, 703 00:35:20,100 --> 00:35:22,540 spesielt hvis du har litt mer abstrakt matematikk bakgrunn 704 00:35:22,540 --> 00:35:24,240 og du er vant til å snakke om funksjoner 705 00:35:24,240 --> 00:35:27,370 og alle den slags ting. 706 00:35:28,590 --> 00:35:30,610 Men vi skal prøve og dekke dem 707 00:35:30,610 --> 00:35:33,280 og gå pent og sakte som de kommer opp. 708 00:35:34,730 --> 00:35:37,870 Likeledes, hele denne int argc, 709 00:35:37,870 --> 00:35:41,090 char * argv [], 710 00:35:41,090 --> 00:35:44,960 for akkurat nå, kan du også ta det som kjele plate. 711 00:35:46,650 --> 00:35:49,050 Vi har begynt å dekke de litt i foredrag 712 00:35:49,050 --> 00:35:53,060 når vi snakker om argumenter som blir vedtatt i programmer på kommandolinjen, 713 00:35:53,060 --> 00:35:55,700 men i dine oppgavesett og dine programmer, 714 00:35:55,700 --> 00:35:58,760 det er helt greit bare å skrive ugyldig og holde det enkelt. 715 00:35:58,760 --> 00:36:01,490 Og hva dette tomrommet betyr er at 716 00:36:01,490 --> 00:36:04,630 "Hei, er viktigste ikke kommer til å godta noen innganger; 717 00:36:04,630 --> 00:36:07,440 Dette er bare et program vi skal bare kjøre. 718 00:36:07,440 --> 00:36:09,320 Vi skal ikke gi den noe ekstra informasjon 719 00:36:09,320 --> 00:36:12,420 hver gang vi starter den opp å kjøre. " 720 00:36:14,730 --> 00:36:16,600 Så for nå, kan du gjøre dette; 721 00:36:16,600 --> 00:36:19,710 Du kan også selv utelate return 0 722 00:36:19,710 --> 00:36:22,650 på slutten av programmene, og de vil kjøre helt fint, 723 00:36:22,650 --> 00:36:26,150 men jeg anbefaler bare å holde det i. 724 00:36:26,150 --> 00:36:28,320 I et par uker, vil vi begynne å slags 725 00:36:28,320 --> 00:36:31,340 trekke tilbake dekselet litt og forstå mer om 726 00:36:31,340 --> 00:36:34,380 alle de forskjellige lite bevegelige deler. 727 00:36:34,380 --> 00:36:38,160 >> Greit, nå la oss snakke om våre andre spørsmål her. 728 00:36:38,160 --> 00:36:43,190 Så hva betyr "svart identifikator" vanligvis indikere 729 00:36:43,190 --> 00:36:46,040 hvis outputted av Clang? 730 00:36:46,040 --> 00:36:49,290 Jeg tror vi kanskje har sett det allerede i dag. 731 00:36:51,170 --> 00:36:54,370 Kan noen gi en oppsummering av hva det betyr? 732 00:36:54,370 --> 00:36:57,680 La oss se, Kelly - en av de Kellys. 733 00:37:02,580 --> 00:37:05,300 >> Så - 734 00:37:05,300 --> 00:37:07,080 Ja, hva gjør - 735 00:37:07,080 --> 00:37:10,140 >> Jeg tror når du, som, ikke erklære variablene og du prøver å bruke den. 736 00:37:10,140 --> 00:37:13,310 Ja, akkurat, akkurat. 737 00:37:13,310 --> 00:37:15,250 Så hvis du noen gang se denne utgangen 738 00:37:15,250 --> 00:37:17,690 når du prøver og kompilere programmet, 739 00:37:17,690 --> 00:37:19,470 akkurat som Kelly sa, 740 00:37:19,470 --> 00:37:24,210 det betyr at du har brukt en variabel som du ikke erklære 741 00:37:24,210 --> 00:37:28,460 så hvis jeg går tilbake til vårt område, 742 00:37:28,460 --> 00:37:31,150 og jeg gjøre noe sånt 743 00:37:31,150 --> 00:37:34,800 printf ( 744 00:37:34,800 --> 00:37:38,260 "Hei% s") 745 00:37:40,070 --> 00:37:42,440 og prøve og fylle ut en% s 746 00:37:42,440 --> 00:37:45,640 med en variabel s som jeg ikke har erklært overalt 747 00:37:45,640 --> 00:37:48,330 og jeg prøver å kjøre den, 748 00:37:48,330 --> 00:37:51,330 du vil se hva jeg får ned på denne nederst til høyre her: 749 00:37:51,330 --> 00:37:54,010 "Bruk av svart identifikator 's'"; 750 00:37:54,010 --> 00:37:57,710 det betyr bare at du ikke deklarerer variabelen. 751 00:37:57,710 --> 00:38:00,750 Samme skjer hvis 752 00:38:00,750 --> 00:38:05,240 du har x og du prøver og lagre 7 i det 753 00:38:05,240 --> 00:38:08,720 og jeg ikke erklære X. 754 00:38:08,720 --> 00:38:10,200 Jeg får det samme feilen: 755 00:38:10,200 --> 00:38:13,480 "Bruk av svart identifikator 'x'". 756 00:38:16,390 --> 00:38:18,250 >> Greit, 757 00:38:18,250 --> 00:38:21,720 så Caesar Cipher, som ikke er veldig sikker, 758 00:38:21,720 --> 00:38:24,590 Jeg skal la dere se denne korte, slik å forstå hvorfor, 759 00:38:24,590 --> 00:38:27,590 og forhåpentligvis etter å gjøre denne uken er problemet satt 760 00:38:27,590 --> 00:38:29,270 hvor du faktisk skrive en Caesar Cipher, vil du forstå litt mer 761 00:38:29,270 --> 00:38:32,600 om hva det vil si å være en sikker og usikker - 762 00:38:36,180 --> 00:38:38,960 eller ikke sikker, antar jeg - usikker er litt annerledes. 763 00:38:40,560 --> 00:38:43,140 Den andre tingen var vi har disse andre spørsmål her 764 00:38:43,140 --> 00:38:45,470 om funksjoner 765 00:38:45,470 --> 00:38:47,330 og hva en funksjon er, 766 00:38:47,330 --> 00:38:52,820 og vi slags snakket om at kort når vi snakket om retur verdier; 767 00:38:52,820 --> 00:38:54,560 for noen som har vært å forelese, 768 00:38:54,560 --> 00:38:57,790 kan du oppsummere som har vært til forelese i dag? 769 00:38:57,790 --> 00:38:59,670 OK. 770 00:39:01,210 --> 00:39:04,320 La oss se, la oss ha - kan noen fortelle oss hva en funksjon er? 771 00:39:04,320 --> 00:39:06,060 Kelly? 772 00:39:07,800 --> 00:39:11,260 >> >> I utgangspunktet noe du trekke på noe som er skrevet i biblioteket som er 773 00:39:11,260 --> 00:39:14,460 mer komplisert enn det, og du bare skrive en kort form av det, 774 00:39:14,460 --> 00:39:17,360 så liker du henviser tilbake til det biblioteket, ved hjelp 775 00:39:17,360 --> 00:39:19,650 hele den lange koden og [hørbar]. 776 00:39:19,650 --> 00:39:22,680 Ja, akkurat, og du vil legge noe til det? 777 00:39:22,680 --> 00:39:27,050 >> Ja, jeg tror på det som ligner på konseptet med en formel i matematikk 778 00:39:27,050 --> 00:39:30,130 der du bare skrive en formel, og deretter kan du plugge variabler i 779 00:39:30,130 --> 00:39:32,660 og det er det en funksjon er [uhørlig]. 780 00:39:32,660 --> 00:39:35,390 >> Ja, så vi har fått et par svar her 781 00:39:35,390 --> 00:39:38,080 som er både veldig bra og rett på. 782 00:39:38,080 --> 00:39:43,040 Det er refererer til kode som er blitt skrevet i biblioteket et sted 783 00:39:43,040 --> 00:39:45,390 som er mer komplisert 784 00:39:45,390 --> 00:39:47,130 og deretter kan du trekke på den koden 785 00:39:47,130 --> 00:39:50,480 og faktisk bruke det ved bare å skrive kortformen av det - 786 00:39:50,480 --> 00:39:54,060 eller, rettere sagt, sitt navn - 787 00:39:54,060 --> 00:39:57,590 og så er det også denne sammenligningen til en formel i matematikk 788 00:39:57,590 --> 00:40:00,400 eller fysikk, alt sånt 789 00:40:00,400 --> 00:40:02,980 der du har en formel 790 00:40:02,980 --> 00:40:05,690 og du kan deretter koble 791 00:40:05,690 --> 00:40:08,100 variablene til den formelen 792 00:40:08,100 --> 00:40:11,130 å deretter få resultatet av formelen, 793 00:40:11,130 --> 00:40:14,580 så du tror på det som som kvadratisk likning. 794 00:40:14,580 --> 00:40:17,690 Tenk hvis stedet for å måtte lære om 795 00:40:17,690 --> 00:40:21,310 hva den kvadratiske formelen er i matte klasse, 796 00:40:21,310 --> 00:40:24,610 du bare hadde en liten kalkulator program som gjorde det for deg. 797 00:40:24,610 --> 00:40:28,930 Har noen bruker kalkulator programmer i matematikk klasser i videregående skole? 798 00:40:28,930 --> 00:40:31,020 Ja, fysikk klasser? 799 00:40:31,020 --> 00:40:34,670 Hvor du kan bare si "Hei, kvadratiske formelen. 800 00:40:34,670 --> 00:40:37,740 Disse er variablene som jeg ønsker å legge inn. 801 00:40:37,740 --> 00:40:40,250 Nå gi meg svaret. " 802 00:40:40,250 --> 00:40:42,170 Det er litt av hva en funksjon er. 803 00:40:42,170 --> 00:40:44,850 Det er en måte for oss å 804 00:40:44,850 --> 00:40:47,720 slags skrive som en liten liten sub program 805 00:40:47,720 --> 00:40:51,700 innenfor våre større program 806 00:40:51,700 --> 00:40:55,090 og bruke den om og om igjen 807 00:40:55,090 --> 00:40:58,380 slik at vi ikke trenger å kopiere og lime inn koden, 808 00:40:58,380 --> 00:41:04,220 vi kan gi den forskjellige innganger og få forskjellige utganger, 809 00:41:04,220 --> 00:41:07,090 det er super praktisk 810 00:41:07,090 --> 00:41:11,420 når du prøver å skrive forskjellige programmer til forskjellige tider. 811 00:41:11,420 --> 00:41:14,580 >> Så for eksempel en funksjon som vi har brukt om og om igjen og om igjen 812 00:41:14,580 --> 00:41:17,310 gjennom hele kurset er printf. 813 00:41:17,310 --> 00:41:19,680 Printf er i seg selv en funksjon 814 00:41:19,680 --> 00:41:23,360 og det viser seg at det er faktisk en ganske lang og komplisert, 815 00:41:23,360 --> 00:41:26,420 stygg leter, fungere å skrive. 816 00:41:26,420 --> 00:41:29,590 Så så enkelt som det virker for oss 817 00:41:29,590 --> 00:41:31,810 å skrive ut ting ut til skjermen, 818 00:41:31,810 --> 00:41:34,820 fordi vi alle bare gjorde det i begynnelsen av avsnittet i dag, 819 00:41:34,820 --> 00:41:36,870 det viser seg at det er faktisk, du vet, 820 00:41:36,870 --> 00:41:39,900 en god par hundre linjer med kode. 821 00:41:42,030 --> 00:41:45,620 Det er ikke noe som jeg noen gang ønsket å skrive, sikkert, 822 00:41:45,620 --> 00:41:47,480 men vi kommer til å bruke den hver dag, det er slags kult, 823 00:41:47,480 --> 00:41:49,020 så vi kommer til å dele den med hverandre, 824 00:41:49,020 --> 00:41:51,790 med forskjellige programmer, 825 00:41:51,790 --> 00:41:54,520 så vi vil være dykking mer i funksjoner; 826 00:41:54,520 --> 00:41:56,090 for tiden, vi er ikke - 827 00:41:56,090 --> 00:41:59,150 den eneste funksjonen vi skal skrive er viktigste. 828 00:41:59,150 --> 00:42:01,570 Viktigste i seg selv er også en funksjon, 829 00:42:01,570 --> 00:42:04,270 og du kan se det fikk sin produksjon, 830 00:42:04,270 --> 00:42:06,610 sine innganger som vi snakket om, 831 00:42:06,610 --> 00:42:08,930 og deretter navnet, som er viktigste. 832 00:42:08,930 --> 00:42:11,800 Viktigste er slag av en - er en spesiell funksjon der. 833 00:42:11,800 --> 00:42:14,800 I C-program, det må være en hovedfunksjon, 834 00:42:14,800 --> 00:42:17,900 og så for nå, har vi på en måte utelatt skriving 835 00:42:17,900 --> 00:42:21,400 prototypen, eller utdeling av, viktigste. 836 00:42:21,400 --> 00:42:23,050 Vi har gitt det til deg, 837 00:42:23,050 --> 00:42:25,650 og vi har nettopp hadde du fylle i form av de blanke feltene. 838 00:42:25,650 --> 00:42:29,120 >> >> Så for det andre problemet sett, trenger vi ikke å 839 00:42:29,120 --> 00:42:31,350 skriv det i den andre funksjonen? 840 00:42:31,350 --> 00:42:34,200 Jeg tror ikke det. 841 00:42:34,200 --> 00:42:37,600 Jeg tror det er alt her. 842 00:42:37,600 --> 00:42:41,710 Ja, så Caesar Cipher, 843 00:42:41,710 --> 00:42:45,000 du trenger ikke å, det ser ikke ut som, 844 00:42:48,740 --> 00:42:53,150 og Vigenere, at du ikke heller, 845 00:42:53,150 --> 00:42:56,400 så - og det viser seg at du ikke noen gang faktisk nødt til å skrive 846 00:42:56,400 --> 00:42:58,250 en funksjon, ikke sant? 847 00:42:58,250 --> 00:43:01,950 Du kaller alltid sette alle koden din innen main, 848 00:43:01,950 --> 00:43:04,500 og mange programmerere gjør det. 849 00:43:04,500 --> 00:43:07,130 Som vi går videre, 850 00:43:07,130 --> 00:43:09,480 vi starter å innføre funksjoner som en måte 851 00:43:09,480 --> 00:43:11,530 å rydde opp koden din, 852 00:43:11,530 --> 00:43:13,380 å gjøre det mer elegant, 853 00:43:13,380 --> 00:43:16,890 i tilfelle du har oppgaver - type som når vi snakket om looper, 854 00:43:16,890 --> 00:43:20,400 hvordan noen ganger er det ting som du ønsker å gjøre igjen og igjen og igjen, 855 00:43:20,400 --> 00:43:23,510 og du har slags naiv måte - 856 00:43:23,510 --> 00:43:26,360 eller hva vi ofte kaller "stråmann" løsning, 857 00:43:26,360 --> 00:43:29,390 er å bare kopiere og lime igjen og igjen - 858 00:43:29,390 --> 00:43:31,000 du kan gjøre det samme med funksjoner hvor du bare kopiere og lime inn 859 00:43:31,000 --> 00:43:33,360 den samme koden igjen og igjen, 860 00:43:33,360 --> 00:43:35,750 men det bloats koden - 861 00:43:35,750 --> 00:43:38,550 det ender opp med å gjøre koden veldig lang - 862 00:43:38,550 --> 00:43:41,550 og det blir også litt forvirrende, 863 00:43:41,550 --> 00:43:43,470 og da betyr det at du ikke er i stand til å like - 864 00:43:43,470 --> 00:43:45,250 hvis du noen gang ønsker å bruke den koden på nytt i et annet program, 865 00:43:45,250 --> 00:43:48,610 du er også fast kopiere og lime det igjen, 866 00:43:48,610 --> 00:43:51,170 så en av de tingene vi skal snakke om er 867 00:43:51,170 --> 00:43:54,960 slags design og stil av programmene, 868 00:43:54,960 --> 00:43:57,010 og så når det er fornuftig å slags 869 00:43:57,010 --> 00:43:59,800 pakke noe opp og sette det som en separat funksjon, 870 00:43:59,800 --> 00:44:02,080 Vi oppfordrer deg til å gjøre det, 871 00:44:02,080 --> 00:44:04,700 og det er noe som igjen, 872 00:44:04,700 --> 00:44:07,790 det er ingen fast regel. 873 00:44:07,790 --> 00:44:11,540 Vi sjelden si at du må skrive en funksjon som heter dette, 874 00:44:12,870 --> 00:44:16,320 men det er mer av en av de tingene du bare utvikle seg over tid 875 00:44:16,320 --> 00:44:19,470 som du skriver flere og flere programmer. 876 00:44:21,940 --> 00:44:24,790 >> Noen flere spørsmål? 877 00:44:26,340 --> 00:44:30,610 Ok, så la oss nå 878 00:44:30,610 --> 00:44:34,750 gå tilbake til denne fyren her, 879 00:44:34,750 --> 00:44:37,800 så jeg er fortsatt i denne delen av spørsmål. 880 00:44:37,800 --> 00:44:39,900 Vi har snakket om alle disse forskjellige typer, 881 00:44:39,900 --> 00:44:42,050 hva er en funksjon, hvorfor skrive funksjoner, 882 00:44:42,050 --> 00:44:44,700 når du kan bare kopiere og lime? 883 00:44:44,700 --> 00:44:47,700 Forhåpentligvis har vi overbevist deg om at du skriver funksjoner er en god ting. 884 00:44:47,700 --> 00:44:50,870 Så nå la oss gå videre til denne MySpace program, 885 00:44:50,870 --> 00:44:53,080 og vi vil bruke litt tid på å gjøre dette. 886 00:44:54,600 --> 00:44:56,480 >> Så, la oss se, 887 00:44:56,480 --> 00:45:00,230 kan jeg ha noen lese dette for meg? 888 00:45:02,640 --> 00:45:04,660 La oss få Mikhaila - vil du leser dette for oss? 889 00:45:07,660 --> 00:45:08,890 >> Du mener tilbake når MySpace - 890 00:45:08,890 --> 00:45:10,920 Tilbake når MySpace var kult. 891 00:45:10,920 --> 00:45:12,070 >> "Tilbake når MySpace var kult, 892 00:45:12,070 --> 00:45:14,900 det var alle raseri til å skrive som dette. 893 00:45:14,900 --> 00:45:17,320 Kanskje det er fortsatt? Jeg er ikke helt sikker. 894 00:45:17,320 --> 00:45:19,990 I alle fall med CS50 Appliance, 895 00:45:19,990 --> 00:45:22,600 CS50 Run, eller CS50 Spaces, 896 00:45:22,600 --> 00:45:25,370 skrive et program som ber brukeren om en melding 897 00:45:25,370 --> 00:45:29,350 og utganger deretter meldingen med sin første bokstaven, 898 00:45:29,350 --> 00:45:31,800 med alle de andre bokstavene i vekslende saken, 899 00:45:31,800 --> 00:45:34,010 pr prøven utgang nedenfor, 900 00:45:34,010 --> 00:45:37,060 hvor boldfaced tekst representerer noen brukerens input. 901 00:45:37,060 --> 00:45:39,800 For enkelhets skyld kan du anta at brukeren 902 00:45:39,800 --> 00:45:42,810 vil bare innspill små bokstaver og mellomrom. 903 00:45:42,810 --> 00:45:45,900 Tenk på dette problemet en mulighet til å praktisere; 904 00:45:45,900 --> 00:45:48,640 vil du ikke bli bedt om å sende inn dette programmet. " 905 00:45:48,640 --> 00:45:51,640 >> Awesome, takk. 906 00:45:51,640 --> 00:45:54,750 Så som Mikhaila sa, 907 00:45:54,750 --> 00:45:58,850 vi kommer til å skrive et program som MySpaces koden. 908 00:45:58,850 --> 00:46:02,230 Så gjorde noen av dere bruker MySpace? 909 00:46:02,230 --> 00:46:04,100 Noen av dere har MySpace-kontoer? 910 00:46:04,100 --> 00:46:05,920 Oh, yeah, yeah! 911 00:46:05,920 --> 00:46:08,300 Det var ganske kult. 912 00:46:08,300 --> 00:46:09,950 [Latter] 913 00:46:09,950 --> 00:46:12,060 Jeg vet det. 914 00:46:12,060 --> 00:46:14,500 Dating meg selv. 915 00:46:15,490 --> 00:46:18,300 Så det vi prøver å gjøre er å skrive et program 916 00:46:18,300 --> 00:46:21,110 som går gjennom 917 00:46:21,110 --> 00:46:24,490 og stor forbokstav 918 00:46:24,490 --> 00:46:27,140 og deretter hver bokstav etterpå - 919 00:46:27,140 --> 00:46:29,350 eller annenhver bokstav etterpå, jeg beklager. 920 00:46:29,350 --> 00:46:32,910 >> Så - og du kan se i dette eksemplet, 921 00:46:32,910 --> 00:46:35,260 Dette er hvordan vi kjører programmet, 922 00:46:35,260 --> 00:46:38,780 og så dette er bare å si: "Vi kjører et program kalt a.out. 923 00:46:41,490 --> 00:46:44,630 Innspill som vi kommer til å gi den 924 00:46:44,630 --> 00:46:47,090 kommer til å bli bedt om det. 925 00:46:47,090 --> 00:46:51,150 Vi skal ikke levere innspill på kommandolinjen. " 926 00:46:51,150 --> 00:46:54,100 Hvis du har fulgt alle forelesningene 927 00:46:54,100 --> 00:46:56,710 og høre om kommandolinjeargumenter, 928 00:46:57,810 --> 00:47:00,080 det er slags der de - som funky syntaks 929 00:47:00,080 --> 00:47:04,530 på main kommer inn med int argc, alt det der, 930 00:47:04,530 --> 00:47:07,630 så her vi ikke bruker det, vi ikke arbeider med noe av det. 931 00:47:09,400 --> 00:47:12,650 Vi skal bare få dette skrevet inn av brukeren, 932 00:47:12,650 --> 00:47:15,700 og så dette andre linje med funky bokstaver 933 00:47:15,700 --> 00:47:18,550 er hva vi ønsker vårt program til produksjonen. 934 00:47:19,790 --> 00:47:22,860 >> Så istedenfor å bruke Appliance eller Run, vil vi bruke Spaces, 935 00:47:22,860 --> 00:47:25,360 fordi vi har fått Spaces, 936 00:47:25,360 --> 00:47:28,640 og så hvis dere vil 937 00:47:28,640 --> 00:47:32,380 få koden til å se noe som dette, 938 00:47:32,380 --> 00:47:35,930 så jeg kommer til å lagre denne revisjonen 939 00:47:35,930 --> 00:47:38,390 bare så du har kjelen plate her 940 00:47:38,390 --> 00:47:42,840 som ser slik ut, int main (void), ingenting i det. 941 00:47:44,480 --> 00:47:48,460 Egentlig er hva vi skal gjøre vi bare slette alt sammen. 942 00:47:48,460 --> 00:47:50,330 Vi ønsker en blank tavle, 943 00:47:50,330 --> 00:47:52,470 fordi vi ikke skal begynne å skrive kode; 944 00:47:52,470 --> 00:47:55,380 heller, vi skal prøve å skrive noen pseudokode 945 00:47:55,380 --> 00:47:58,580 som egentlig bare betyr at vi kommer til å skrive noe som ikke er kode 946 00:47:58,580 --> 00:48:01,010 den slags beskriver hva vi ønsker å gjøre, 947 00:48:01,010 --> 00:48:05,180 litt som David gjorde på den første dagen av forelesning, 948 00:48:05,180 --> 00:48:08,310 eller jeg tror det var den andre dagen av foredrag da han gjorde hele sokker demo. 949 00:48:08,310 --> 00:48:10,990 Dere husker det - se sokker? 950 00:48:10,990 --> 00:48:13,300 Josef var oppe slags skrive ut på engelsk? 951 00:48:13,300 --> 00:48:16,300 Så vi skal gjøre det samme. 952 00:48:16,300 --> 00:48:18,380 >> Så når jeg begynner å skrive pseudokode, 953 00:48:18,380 --> 00:48:22,640 Jeg liker å starte med å se på hva inngangen skal være. 954 00:48:22,640 --> 00:48:24,950 Og jeg gir meg selv et eksempel tilfelle, 955 00:48:24,950 --> 00:48:28,780 så som "takk for add!" 956 00:48:35,030 --> 00:48:38,010 Og da jeg også skrive hva jeg vil at output skal være, 957 00:48:38,010 --> 00:48:42,210 som i dette tilfellet er noe sånt som dette. 958 00:48:53,790 --> 00:48:56,050 Og den slags gir meg en god, liksom utgangspunkt å tenke på, 959 00:48:56,050 --> 00:48:59,730 "Ok, jeg ønsker å ta linje 1 960 00:48:59,730 --> 00:49:03,560 og jeg ønsker å forvandle det til linje 2, " 961 00:49:03,560 --> 00:49:06,570 og den slags hjelper lede min tenkning. 962 00:49:06,570 --> 00:49:09,990 Dette er et bra sted å starte. 963 00:49:09,990 --> 00:49:12,190 En annen måte å tenke på det, også, som vi ganske gå videre 964 00:49:12,190 --> 00:49:15,020 og som du gjør dette i dine egne programmer, er å 965 00:49:15,020 --> 00:49:18,530 tenke typen som hva er kanten saker til dette? 966 00:49:18,530 --> 00:49:20,740 Hva er slags rare scenarier? 967 00:49:20,740 --> 00:49:23,660 Hva er de rare innganger som vi kan få? 968 00:49:23,660 --> 00:49:26,550 Og hva bør disse utganger se ut? 969 00:49:26,550 --> 00:49:29,670 For eksempel, en merkelig inngang 970 00:49:29,670 --> 00:49:33,200 ville være denne, 971 00:49:33,200 --> 00:49:35,630 skape absolutt ingenting, 972 00:49:35,630 --> 00:49:37,840 som hva skal vi sende ut i så fall? 973 00:49:37,840 --> 00:49:40,530 Noe vi ønsker å tenke på, også. 974 00:49:40,530 --> 00:49:44,450 >> Så bare som et spørsmål, 975 00:49:44,450 --> 00:49:46,870 hva kan vi ønsker å sende ut? 976 00:49:46,870 --> 00:49:50,740 Hvis vi ikke får noen innspill i det hele tatt, hva skal vårt program være sender ut? 977 00:49:53,740 --> 00:49:54,860 >> Ingenting. 978 00:49:54,860 --> 00:49:57,340 Ingenting? Høres flott ut. 979 00:49:57,340 --> 00:49:59,280 Så vi vil være sikker på at vi ikke skriver noe ut 980 00:49:59,280 --> 00:50:01,500 hvis vi ikke får noe i. 981 00:50:01,500 --> 00:50:04,320 Cool. Okay. 982 00:50:04,320 --> 00:50:07,370 Så 983 00:50:07,370 --> 00:50:09,380 Jeg kommer til å ringe på et par mennesker som vi går gjennom 984 00:50:09,380 --> 00:50:12,790 og bare finne ut typen som hva den generelle algoritmen er 985 00:50:12,790 --> 00:50:15,250 og vi vil slags begynne å jobbe gjennom dette sammen. 986 00:50:16,240 --> 00:50:19,710 >> Så, la oss se. Missy. 987 00:50:19,710 --> 00:50:21,220 Hvordan tror du vi vil begynne? 988 00:50:21,220 --> 00:50:24,830 Hva ville være et godt sted å begynne her 989 00:50:24,830 --> 00:50:27,900 hvis vi ønsker å forvandle, sier linje 1 990 00:50:27,900 --> 00:50:29,440 på linje 2? 991 00:50:29,440 --> 00:50:32,650 Kan du slags bare forklare meg, på engelsk, hva du tenker? 992 00:50:32,650 --> 00:50:34,770 Ikke engang bekymre kode. 993 00:50:34,770 --> 00:50:38,250 >> Første jeg ville gjøre ville være å 994 00:50:38,250 --> 00:50:41,170 slags direkte brukeren å fortelle dem hva du vil. 995 00:50:41,170 --> 00:50:44,730 Ok, så si, 996 00:50:44,730 --> 00:50:47,450 "Hei, bruker. Jeg vil 997 00:50:47,450 --> 00:50:50,560 en streng "- awesome. 998 00:50:50,560 --> 00:50:52,990 Så la oss skrive dette ned. 999 00:50:52,990 --> 00:50:56,140 Spør brukeren om en streng. 1000 00:50:56,140 --> 00:50:59,270 Det høres ut som en god start. 1001 00:51:03,920 --> 00:51:06,460 OK. 1002 00:51:06,460 --> 00:51:09,750 La oss be Kelly Ren denne gangen. 1003 00:51:09,750 --> 00:51:11,580 Hva ville vi da ønsker å gjøre nå? 1004 00:51:11,580 --> 00:51:14,220 Hva er slags vår neste -? 1005 00:51:14,220 --> 00:51:18,080 >> Samle deres innspill og lagre den som en variabel. 1006 00:51:18,080 --> 00:51:20,470 Flott. 1007 00:51:20,470 --> 00:51:24,280 Så samle strengen, 1008 00:51:25,450 --> 00:51:27,880 lagre den i en variabel. 1009 00:51:34,840 --> 00:51:36,460 Så er det noe spesielt vi ønsker å gjøre her? 1010 00:51:36,460 --> 00:51:39,700 Ønsker vi å sjekke deres innspill 1011 00:51:39,700 --> 00:51:42,260 før -? 1012 00:51:42,260 --> 00:51:43,790 >> Ja. 1013 00:51:43,790 --> 00:51:46,330 Hva kan vi ønsker å se etter? 1014 00:51:46,330 --> 00:51:48,980 >> Vel, du sa vi ikke trenger å sjekke om det er et tall, ikke sant? 1015 00:51:48,980 --> 00:51:52,400 Fordi det vil anta at det er små bokstaver? 1016 00:51:52,400 --> 00:51:55,650 Ja. 1017 00:51:56,380 --> 00:51:58,920 >> Så det viser seg at - ja. 1018 00:51:58,920 --> 00:52:01,850 Så getString er garantert å returnere oss en streng. 1019 00:52:01,850 --> 00:52:05,050 Det kommer ikke til å returnere et tall til oss eller noe sånt. 1020 00:52:05,050 --> 00:52:09,140 Det kan være siffer tegn i strengen, skjønt. 1021 00:52:09,140 --> 00:52:13,460 Og de kan vi se bort som vi gjorde kapitaliseringen. 1022 00:52:13,460 --> 00:52:16,620 Men en tom streng er helt greit, 1023 00:52:16,620 --> 00:52:19,900 slik tilfellet her på linje 4 og 5, 1024 00:52:19,900 --> 00:52:22,020 høyre, hvor det er ingen inngang, 1025 00:52:22,020 --> 00:52:25,190 og vi har satt noe som produksjonen vår. 1026 00:52:25,190 --> 00:52:28,730 Vi trenger ikke å bekymre deg for å sørge for at det er noe i strengen 1027 00:52:28,730 --> 00:52:31,840 eller at strengen er minst 4 tegn; 1028 00:52:31,840 --> 00:52:34,190 noe er fint. 1029 00:52:34,190 --> 00:52:38,270 Så dette er i motsetning for eksempel med like pennies programmer som du skrev 1030 00:52:38,270 --> 00:52:42,340 hvor du måtte sørge for at du skulle få ikke-negative tall; 1031 00:52:42,340 --> 00:52:46,430 du måtte være sikker på at du får riktig antall dager i en måned. 1032 00:52:46,430 --> 00:52:49,630 Og hvordan gjør dere det? 1033 00:52:49,630 --> 00:52:51,470 Hvordan ville du gjøre denne testen? 1034 00:52:51,470 --> 00:52:54,090 Hva gjorde som krever at du bruker? 1035 00:52:54,090 --> 00:52:55,650 >> Do-mens sløyfer. 1036 00:52:55,650 --> 00:53:00,840 Do-mens sløyfer, andre typer løkker, også, ja. 1037 00:53:02,190 --> 00:53:04,520 Så det viser seg at vi ikke trenger å bruke en løkke i dette tilfellet, 1038 00:53:04,520 --> 00:53:07,360 når vi ber om en streng, som er slags hyggelig. 1039 00:53:08,280 --> 00:53:10,620 >> Greit, flytte på. 1040 00:53:12,410 --> 00:53:14,270 Så, Stella. 1041 00:53:14,270 --> 00:53:17,530 Kan du fortelle oss litt om hva vi skal gjøre nå? 1042 00:53:17,530 --> 00:53:20,270 Så nå har vi fått streng, har vi den lagret i en variabel; 1043 00:53:20,270 --> 00:53:23,360 hva trenger vi å gjøre med strengen? 1044 00:53:26,790 --> 00:53:33,530 >> Vi må - 1045 00:53:33,530 --> 00:53:36,550 identifisere to - 1046 00:53:36,550 --> 00:53:39,290 Ja, bare si det på engelsk, det er fantastisk. 1047 00:53:39,290 --> 00:53:42,670 >> Identifiser [hørbar] hovedsteder - eller, store bokstaver. 1048 00:53:44,420 --> 00:53:48,130 Ja, så du vil identifisere hvilke som er store og små bokstaver. 1049 00:53:50,020 --> 00:53:54,180 Vi kan ikke store eller små bokstaver dem før vi har identifisert hvilke. 1050 00:54:03,790 --> 00:54:06,350 Så vi skal sette det inn her. 1051 00:54:06,350 --> 00:54:10,210 >> Så, bare tenke på denne prosessen, 1052 00:54:10,210 --> 00:54:13,200 hvordan gjør vi dette identifisering? 1053 00:54:13,200 --> 00:54:15,050 Vet du, Dan? 1054 00:54:15,050 --> 00:54:18,120 Slags hva vi - hva verktøyet vi har for å bruke ut av verktøykassen vår? 1055 00:54:18,120 --> 00:54:22,500 >> Jeg ville sette det i en eller annen måte i som en matrise eller hver linje 1056 00:54:22,500 --> 00:54:24,240 er sin egen lille boks, 1057 00:54:24,240 --> 00:54:27,240 og deretter store bokstaver det derfra eller ikke. 1058 00:54:27,240 --> 00:54:30,440 Ok, så ett verktøy vi kan bruke er en matrise. 1059 00:54:30,440 --> 00:54:33,760 Hva har vi å se på i strengen, 1060 00:54:33,760 --> 00:54:36,680 men å finne ut - vi måtte se på tegnene. 1061 00:54:36,680 --> 00:54:40,890 >> Så du har fått til å se på lengden av strengen? 1062 00:54:40,890 --> 00:54:43,880 Ja, slik at en del av det er å få lengden på strengen. 1063 00:54:50,450 --> 00:54:54,150 Bare av nysgjerrighet, hva vi bruker for å få lengden på en streng? 1064 00:54:54,150 --> 00:54:58,080 >> Strlen? 1065 00:54:58,080 --> 00:55:02,870 Ja, strlen, vi kaller dette "strlen" 1066 00:55:04,180 --> 00:55:08,620 Alle disse strengfunksjoner, så strlen er en funksjon, 1067 00:55:08,620 --> 00:55:10,670 og det er super praktisk, fordi vi kan bruke det til bare si, 1068 00:55:10,670 --> 00:55:13,430 Hei, strlen: Her er en streng, fortelle meg hvor lenge det er. 1069 00:55:13,430 --> 00:55:17,350 I foredraget i dag, snakket David mye om hvordan strlen er implementert, 1070 00:55:17,350 --> 00:55:20,370 hva som faktisk skjer bak kulissene. 1071 00:55:20,370 --> 00:55:25,450 Men dette er en av de aller fortreffelig hendig seg. 1072 00:55:25,450 --> 00:55:29,170 Det finnes andre som også er i strengen biblioteket, 1073 00:55:29,170 --> 00:55:34,690 som strcmp, som er stavet "strcmp", 1074 00:55:34,690 --> 00:55:38,010 som brukes til å sammenligne strenger til hverandre. 1075 00:55:41,220 --> 00:55:45,020 Andre som du vil bruke som strstr, 1076 00:55:45,020 --> 00:55:48,770 som er bra for å finne sub strenger og så videre. 1077 00:55:48,770 --> 00:55:53,380 For det meste, de alle begynner med str og deretter gå videre til å være noe annet. 1078 00:55:53,380 --> 00:55:57,080 Grunnen til at de ikke faktisk stave dem som streng og så videre 1079 00:55:57,080 --> 00:56:00,260 er fordi tilbake i som de tidlige dagene av C, 1080 00:56:00,260 --> 00:56:04,100 når folk var første skriving og alt det, 1081 00:56:04,100 --> 00:56:07,580 de hadde begrensninger på antall tegn du kan bruke 1082 00:56:07,580 --> 00:56:09,950 for funksjonsnavn og variabelnavn, 1083 00:56:09,950 --> 00:56:12,620 slik at alt er som super kondensert. 1084 00:56:12,620 --> 00:56:15,750 Men når du ser noe som begynner med str, 1085 00:56:15,750 --> 00:56:18,600 det betyr vanligvis dette har noe å gjøre med en streng. 1086 00:56:20,990 --> 00:56:23,350 >> Ok, så du er nødt til å få lengden på strengen, 1087 00:56:23,350 --> 00:56:27,110 og da, hva gjør vi med figurene? 1088 00:56:27,110 --> 00:56:29,020 Vet du, Sam? 1089 00:56:29,020 --> 00:56:32,410 >> Har jeg ingen anelse om, jeg prøvde å finne ut av det. 1090 00:56:32,410 --> 00:56:35,410 Jeg vet virkelig ikke - jeg skulle ønske det var noen måte å - 1091 00:56:35,410 --> 00:56:38,990 Jeg mener, jeg tror kanskje vi kunne gjøre noe med odds og jevner, 1092 00:56:38,990 --> 00:56:40,860 men jeg vet ikke om noen funksjon sånn. 1093 00:56:40,860 --> 00:56:42,240 Ja. 1094 00:56:43,160 --> 00:56:45,200 >> Men det - det ville ikke nødvendigvis fungere, 1095 00:56:45,200 --> 00:56:48,690 fordi da ville få mellomrom for å være - 1096 00:56:48,690 --> 00:56:51,130 du må ha plass til å få tips om hvordan - 1097 00:56:51,130 --> 00:56:54,310 Okay. 1098 00:56:54,310 --> 00:56:56,490 >> Jeg vet ikke - jeg slags tapt på dette punktet. 1099 00:56:56,490 --> 00:56:58,120 Ja - nei, nei, nei, disse er gode poeng. 1100 00:56:58,120 --> 00:57:00,420 Så det vi trenger å gjøre er, som Sam sa, 1101 00:57:00,420 --> 00:57:02,970 vi trenger å spore hvilke bokstaver er de odde bokstaver, 1102 00:57:02,970 --> 00:57:05,540 og hvilke som er de enda bokstaver. 1103 00:57:06,650 --> 00:57:09,090 Men vi ønsker å sørge for at vi ikke bare ser 1104 00:57:09,090 --> 00:57:12,110 ved den odde og like 1105 00:57:12,110 --> 00:57:14,030 indekser i strengen, 1106 00:57:14,030 --> 00:57:17,660 men heller ser på de odde og like bokstaver i strengen, 1107 00:57:17,660 --> 00:57:20,190 så vi må ganske ha dette skillet mellom 1108 00:57:20,190 --> 00:57:25,190 bokstaver - som hva er egentlig A, B, C, D, eller så på, 1109 00:57:25,190 --> 00:57:29,090 og hva ting er ikke bokstaver, men fortsatt i streng vår. 1110 00:57:29,090 --> 00:57:32,390 For eksempel her, som dette utropstegnet er ikke en bokstav, 1111 00:57:32,390 --> 00:57:36,060 men det er fortsatt en del av strengen vår, det er fortsatt en røye. 1112 00:57:36,060 --> 00:57:38,820 Likeledes, alle disse mellomrom - 1113 00:57:38,820 --> 00:57:41,710 det gjør ikke fornuftig å kapitalisere en plass, ikke sant? 1114 00:57:41,710 --> 00:57:46,160 Så vi ønsker å sørge for at vi liksom hoppe over dem 1115 00:57:46,160 --> 00:57:49,410 samtidig sporing odds og jevner. 1116 00:57:50,900 --> 00:57:54,990 >> Så snilt av i vår programmering verktøykasse 1117 00:57:54,990 --> 00:57:57,270 så langt, om du vil, 1118 00:57:57,270 --> 00:58:01,310 Vi har en rekke forskjellige verktøy som vi har snakket om. 1119 00:58:01,310 --> 00:58:04,640 Så en, for eksempel, er variabler, 1120 00:58:04,640 --> 00:58:07,120 som vi har snakket om her. 1121 00:58:07,120 --> 00:58:10,730 Annet verktøy vi har snakket om er funksjoner. 1122 00:58:10,730 --> 00:58:15,800 Så vi har snakket om variabler i pseudokode vår her oppe 1123 00:58:15,800 --> 00:58:19,760 som hva vi kommer til å bruke til å lagre vårt bånd. 1124 00:58:19,760 --> 00:58:24,630 Vi har snakket om funksjoner for å få lengden på en streng, som strlen. 1125 00:58:28,510 --> 00:58:31,170 Vi har snakket om noe annet, og vi har snakket om det 1126 00:58:31,170 --> 00:58:34,850 for mye tidligere i avsnitt dag: looper. 1127 00:58:39,390 --> 00:58:42,030 >> Hva tror dere om å bruke en løkke i dette programmet? 1128 00:58:42,030 --> 00:58:44,110 Jared, hva tror du? 1129 00:58:47,150 --> 00:58:50,030 Ville vi bruke en løkke i dette programmet? 1130 00:58:50,030 --> 00:58:52,500 >> Sannsynligvis ikke, nei, fordi du ikke trenger å gå gjennom det mer enn én gang. 1131 00:58:52,500 --> 00:58:55,260 Ok, trenger du ikke å gå gjennom hva mer enn en gang? 1132 00:58:55,260 --> 00:58:57,190 >> Hele strengen. 1133 00:58:57,190 --> 00:59:00,660 Høyre, så du trenger ikke å gå gjennom streng hele en gang. 1134 00:59:00,660 --> 00:59:03,330 Beklager at laget absolutt ingen mening! 1135 00:59:03,330 --> 00:59:06,360 Du trenger ikke å gå gjennom hele strengen mer enn én gang. 1136 00:59:06,360 --> 00:59:08,660 Okay. 1137 00:59:09,790 --> 00:59:11,920 Hva tror du? 1138 00:59:11,920 --> 00:59:14,110 >> Jeg tror at det er bedre å bruke dem 1139 00:59:14,110 --> 00:59:16,640 slik at vi kan gjøre som kapitalisere mens 1140 00:59:16,640 --> 00:59:19,750 plasseringen av det er [uhørbart] nummer. 1141 00:59:19,750 --> 00:59:22,940 Stor, og så utnytte hva? 1142 00:59:22,940 --> 00:59:25,200 Ok, så vi sier at 1143 00:59:25,200 --> 00:59:28,130 vi bør bruke en løkke fordi vi ønsker å 1144 00:59:28,130 --> 00:59:32,550 en stor bokstav, mens det er ikke et tall. 1145 00:59:35,130 --> 00:59:37,140 Så - beklager, ville du legge til? 1146 00:59:37,140 --> 00:59:39,340 >> Jeg hadde tenkt å si at måten du behandler strengen 1147 00:59:39,340 --> 00:59:42,290 og det [uhørbart] skille [uhørlig] på tegn? 1148 00:59:42,290 --> 00:59:43,710 Ja. 1149 00:59:43,710 --> 00:59:45,850 >> Og da kan vi tildele tallene til - 1150 00:59:45,850 --> 00:59:47,780 eller basert på plasseringen av bokstavene i strengen? 1151 00:59:47,780 --> 00:59:49,720 Ja. 1152 00:59:49,720 --> 00:59:53,640 >> Og identifisere om det er oddetall eller partall, og å kapitalisere brevet selv 1153 00:59:53,640 --> 00:59:57,750 mens plasseringen av brevet er [uhørlig] - beklager. 1154 00:59:57,750 --> 01:00:00,150 Flott. 1155 01:00:00,150 --> 01:00:03,430 >> Så bare en oppsummering. 1156 01:00:03,430 --> 01:00:05,840 Kan du minner meg om navnet ditt igjen - jeg beklager. 1157 01:00:05,840 --> 01:00:06,900 >> Charlotte. 1158 01:00:06,900 --> 01:00:08,490 Charlotte, ok. 1159 01:00:08,490 --> 01:00:11,130 Så hva Charlotte sier, 1160 01:00:11,130 --> 01:00:14,950 som er helt rett - gosh, dette liker å auto innrykk på meg - 1161 01:00:14,950 --> 01:00:17,770 er at hvis vi ser på en streng 1162 01:00:17,770 --> 01:00:19,160 som dette på toppen - 1163 01:00:19,160 --> 01:00:21,590 "Takk for add" - 1164 01:00:21,590 --> 01:00:24,790 som en sekvens av tegn 1165 01:00:24,790 --> 01:00:29,010 der den er i stillingen 0, 1166 01:00:29,010 --> 01:00:32,260 h er i posisjon 1. 1167 01:00:32,260 --> 01:00:36,880 A er ved 2, så vi fikk 3, 4, 5; 1168 01:00:36,880 --> 01:00:40,830 plassen er i posisjon 6. 1169 01:00:42,380 --> 01:00:45,300 Mens - hva er stillingen f? 1170 01:00:45,300 --> 01:00:47,610 7! 1171 01:00:47,610 --> 01:00:49,300 O? 8. 1172 01:00:49,300 --> 01:00:52,070 R? 9. 1173 01:00:52,070 --> 01:00:54,340 Og så har vi 10, og da jeg ikke kan virkelig skrive den uten at det 1174 01:00:54,340 --> 01:00:57,430 ganske få rotete på skjermen. 1175 01:00:57,430 --> 01:01:02,340 Men dette er faktisk hvordan vi kan snakke om strenger i minnet. 1176 01:01:02,340 --> 01:01:04,660 Er det en streng 1177 01:01:04,660 --> 01:01:07,920 er en sekvens av tegn, 1178 01:01:07,920 --> 01:01:12,430 og når vi refererer til en individuell karakter i en streng, 1179 01:01:12,430 --> 01:01:15,280 vi ofte gjøre det ved å henvise til det tegnet posisjon 1180 01:01:15,280 --> 01:01:17,620 i strengen, 1181 01:01:17,620 --> 01:01:19,910 sannsynligvis på samme måte som vi snakker rundt september 1182 01:01:19,910 --> 01:01:22,870 være den niende måneden i året 1183 01:01:22,870 --> 01:01:27,730 eller mandag er den første dagen i uken. 1184 01:01:29,280 --> 01:01:33,070 Så dette gir oss en måte å 1185 01:01:33,070 --> 01:01:37,030 finne ut hvilke som er merkelig versus selv 1186 01:01:37,030 --> 01:01:39,540 fordi du kan se her, 1187 01:01:39,540 --> 01:01:43,640 hvis vi matche det opp med denne T, 1188 01:01:46,310 --> 01:01:49,360 du kan se at alle de aktiverte seg 1189 01:01:49,360 --> 01:01:53,040 er at selv posisjoner, 1190 01:01:53,040 --> 01:01:55,880 minst for det første ordet, 1191 01:01:55,880 --> 01:01:59,080 og deretter ting blir kastet av når vi treffer den plassen, 1192 01:01:59,080 --> 01:02:02,460 fordi vi ikke teller denne plassen som et brev, 1193 01:02:02,460 --> 01:02:05,150 så det er som om vi startet 1194 01:02:05,150 --> 01:02:08,930 og gikk 0, 1, 2, 3, 4, 5, 1195 01:02:08,930 --> 01:02:12,600 plass, 6, 7, 8, plass, 1196 01:02:12,600 --> 01:02:16,440 9, og deretter 10, 11, 12, og så videre. 1197 01:02:19,300 --> 01:02:22,910 >> Kult, så vi definitivt vil ønske å bruke noen form for sløyfe 1198 01:02:22,910 --> 01:02:27,760 å gå over hver av karakterene i sving. 1199 01:02:31,330 --> 01:02:34,580 Så på dette punktet, 1200 01:02:36,490 --> 01:02:38,360 vi vil komme tilbake til vår gamle pseudokode her. 1201 01:02:40,970 --> 01:02:42,650 Som en del av denne identifisering av hvilke som 1202 01:02:42,650 --> 01:02:45,350 som er store og hvilke som er små, 1203 01:02:45,350 --> 01:02:48,340 vi ønsker å gjøre dette i en slags loop. 1204 01:02:51,080 --> 01:02:53,390 Loop, kolon. 1205 01:02:55,070 --> 01:03:01,220 Hva slags loop, ut av hvilke typer sløyfer som vi har, 1206 01:03:01,220 --> 01:03:03,670 synes å være en god en å bruke i dette tilfellet? 1207 01:03:03,670 --> 01:03:05,610 >> Jeg tenkte for loop. 1208 01:03:05,610 --> 01:03:07,500 Og hvorfor er du tenker på for loop? 1209 01:03:07,500 --> 01:03:10,000 >> Fordi den starter på null, og deretter 1210 01:03:10,000 --> 01:03:13,000 når vi nå lengden av strengen, 1211 01:03:13,000 --> 01:03:16,170 og deretter hver iterasjon du kan [uhørlig], også? 1212 01:03:16,170 --> 01:03:18,260 Ja, akkurat. 1213 01:03:18,260 --> 01:03:21,490 Så, ut av de forskjellige valg av loops, 1214 01:03:21,490 --> 01:03:25,350 vi har for looper, mens sløyfer, og gjør-mens sløyfer. 1215 01:03:25,350 --> 01:03:28,550 Hvor en for løkke er spesielt nyttig 1216 01:03:28,550 --> 01:03:32,120 er når du ønsker å vite 1217 01:03:32,120 --> 01:03:34,940 slags hvor du er i loopen, 1218 01:03:34,940 --> 01:03:38,520 hvor mange ganger løkken er utført så langt. 1219 01:03:38,520 --> 01:03:42,490 Som er akkurat hva vi ønsker å vite i denne situasjonen, 1220 01:03:42,490 --> 01:03:44,640 som Kelly sa, 1221 01:03:44,640 --> 01:03:47,400 basert off av Charlottes tidligere kommentar at vi ønsker å vite posisjonen 1222 01:03:47,400 --> 01:03:49,900 av tegnet i strengen, 1223 01:03:49,900 --> 01:03:51,750 og for loop vil gi oss nettopp det, 1224 01:03:51,750 --> 01:03:54,680 fordi hvis vi starter slags ser tilbake på strengen vår, 1225 01:03:54,680 --> 01:03:57,140 hvis vi starter vår for løkke på 0, 1226 01:03:57,140 --> 01:04:00,350 og vi gå opp gjennom lengden av hele strengen, 1227 01:04:00,350 --> 01:04:04,740 så vi kan knytte bokstaven T 1228 01:04:04,740 --> 01:04:08,110 med 0 i vår for loop, 1229 01:04:09,950 --> 01:04:13,080 bokstaven H med 1 i vår for loop, og så videre, 1230 01:04:13,080 --> 01:04:16,600 å gå hele veien til slutten av strengen. 1231 01:04:18,810 --> 01:04:21,890 >> Så la oss starte koding dette bare en liten bit 1232 01:04:21,890 --> 01:04:24,930 bare så dere får et inntrykk av hva dette ser ut. 1233 01:04:24,930 --> 01:04:27,980 Jeg kommer til å lagre denne, 1234 01:04:27,980 --> 01:04:31,230 så vi har fått vår pseudokode her, 1235 01:04:33,490 --> 01:04:38,120 og jeg kommer til å slette alt. 1236 01:04:38,120 --> 01:04:42,210 Så jeg har en blank tavle. 1237 01:04:42,210 --> 01:04:45,910 Jeg skal begynne med å skrive int main (void) 1238 01:04:45,910 --> 01:04:48,440 { 1239 01:04:48,440 --> 01:04:51,380 Jeg skal sette return 0 i 1240 01:04:51,380 --> 01:04:53,320 og deretter}. 1241 01:04:53,320 --> 01:04:56,130 Så vanligvis når jeg begynner å programmere, dette er hva jeg begynne med. 1242 01:04:56,130 --> 01:04:59,370 Jeg skal lagre den slik at dere har det. 1243 01:05:06,290 --> 01:05:08,440 Så en av de første tingene vi snakket om var 1244 01:05:08,440 --> 01:05:10,920 å få innspill fra brukeren 1245 01:05:10,920 --> 01:05:13,740 og lagre den i en streng. 1246 01:05:13,740 --> 01:05:16,420 Hvordan får vi innspill fra en bruker? 1247 01:05:16,420 --> 01:05:19,640 >> GetString. 1248 01:05:19,640 --> 01:05:21,870 GetString, all right. 1249 01:05:23,150 --> 01:05:26,820 Så hvis jeg skriver GetString () 1250 01:05:26,820 --> 01:05:32,150 og et semikolon. 1251 01:05:32,150 --> 01:05:36,630 La oss prøve å kjøre dette, vil denne kjøre, først av alt? 1252 01:05:36,630 --> 01:05:38,430 Og hvorfor vil ikke dette gå? 1253 01:05:38,430 --> 01:05:40,090 >> Du må deklarere variabelen. 1254 01:05:40,090 --> 01:05:43,040 Jeg må erklære en variabel. Okay. 1255 01:05:43,040 --> 01:05:45,700 >> Så hvordan gjør jeg det? 1256 01:05:45,700 --> 01:05:48,400 Har du noe imot å skrive noe, dele det? 1257 01:05:48,400 --> 01:05:51,270 Og så kan vi trekke den opp. 1258 01:05:51,270 --> 01:05:54,630 La oss se, Dan, høyre, greit. 1259 01:05:54,630 --> 01:05:59,100 Eller Daniel. Mottatt i, inndata = GetString (). 1260 01:05:59,100 --> 01:06:01,340 Awesome. 1261 01:06:01,340 --> 01:06:02,890 Vil dette kjøre? 1262 01:06:02,890 --> 01:06:05,210 La oss prøve det. 1263 01:06:05,210 --> 01:06:08,890 Hit løp, opplasting kildekode, bygg, det oppstod en feil. 1264 01:06:08,890 --> 01:06:11,040 Okay. 1265 01:06:11,040 --> 01:06:14,950 Så hva skjer her? 1266 01:06:14,950 --> 01:06:18,700 Bruk av svart identifikator 'streng'. 1267 01:06:18,700 --> 01:06:22,840 >> Vi må inkludere bibliotekene? 1268 01:06:22,840 --> 01:06:25,130 Ja, så Dan sier vi må inkludere bibliotekene. 1269 01:06:25,130 --> 01:06:28,270 Er det hva du skulle si, Stella? Awesome. 1270 01:06:29,450 --> 01:06:31,430 Det er kjempebra, så Stella, kan du 1271 01:06:31,430 --> 01:06:34,800 kopiere denne koden ut av Daniels Space? 1272 01:06:34,800 --> 01:06:37,580 Hvis du klikker på Daniel Roland Ki, kopiere den, 1273 01:06:37,580 --> 01:06:41,360 og da vil du sette inkluderer line i, og deretter lagre den ut? 1274 01:06:46,580 --> 01:06:49,360 La meg vite når du er klar. 1275 01:06:57,160 --> 01:06:59,490 Så dette inkluderer syntaks er også slags funky; 1276 01:06:59,490 --> 01:07:02,210 Det er sånn hash tag, 1277 01:07:02,210 --> 01:07:05,760 og det har blant annet, og så er det disse vinkelparenteser. 1278 01:07:12,490 --> 01:07:15,360 Husker du hvordan dette fungerer, eller skal jeg sette den opp på denne koden her? 1279 01:07:15,360 --> 01:07:17,850 >> Jeg er god. 1280 01:07:17,850 --> 01:07:19,810 Okay. 1281 01:07:19,810 --> 01:07:23,260 >> Jeg trykket det - jeg var ikke sikker på hvilket bibliotek, skjønt. 1282 01:07:23,260 --> 01:07:25,570 Oh, ok - ja, så det er det CS50 biblioteket. 1283 01:07:25,570 --> 01:07:27,660 >> Å, la jeg stdio bibliotek. 1284 01:07:27,660 --> 01:07:30,950 >> Oh, fikk den - ja, nei, that - 1285 01:07:30,950 --> 01:07:34,380 så viser det seg at strengen er faktisk noe som er spesielt for CS50. 1286 01:07:36,590 --> 01:07:41,240 Det er faktisk ikke en ekte strengtype 1287 01:07:41,240 --> 01:07:45,000 fordi akkurat her, er streng i den type stilling, - 1288 01:07:45,000 --> 01:07:49,140 vi erklære en variabel kalt input av typen string - 1289 01:07:49,140 --> 01:07:53,320 og vi setter innsiden av innspill 1290 01:07:53,320 --> 01:07:58,440 verdien som blir returnert til oss: produksjon av denne GetString funksjon samtale. 1291 01:07:58,440 --> 01:08:02,910 Du kan si dette er en funksjon samtale fordi det har parentesene, akkurat som printf gjør, 1292 01:08:02,910 --> 01:08:05,920 akkurat som strlen gjør. 1293 01:08:05,920 --> 01:08:09,860 Men strengen er faktisk ikke en ekte typen 1294 01:08:09,860 --> 01:08:11,760 i C-språk. 1295 01:08:11,760 --> 01:08:15,710 Vi har gjort det til en type, og vi vil ta om mer hva det egentlig er 1296 01:08:15,710 --> 01:08:19,000 i C, fordi det er en måte å jobbe med strenger; 1297 01:08:19,000 --> 01:08:22,479 Vi har nettopp gjort noe for å gjøre det ser litt hyggeligere. 1298 01:08:22,479 --> 01:08:25,240 >> Så her går vi. 1299 01:08:25,240 --> 01:08:28,439 Her er Stella kode. 1300 01:08:28,439 --> 01:08:32,470 Det fikk # include . 1301 01:08:32,470 --> 01:08:36,390 Andre mennesker vil kalle dette som en hash inkluderer noen ganger eller en skarp inkludere. 1302 01:08:36,390 --> 01:08:39,580 Nå kan vi starte den, kjøre den, 1303 01:08:39,580 --> 01:08:43,649 og vi fortsatt får en feilmelding. 1304 01:08:43,649 --> 01:08:46,290 La oss se hva som skjer. 1305 01:08:48,069 --> 01:08:50,569 "Ubrukt variable" input "." 1306 01:08:50,569 --> 01:08:53,350 Ok, så det kult, det er kult. 1307 01:08:53,350 --> 01:08:55,859 Jeg mener, det er ikke kult, 1308 01:08:55,859 --> 01:08:57,930 fordi vi får en feil og det er ikke kjører, 1309 01:08:57,930 --> 01:09:00,410 men hva dette sier er at 1310 01:09:00,410 --> 01:09:03,130 Vi har ikke brukt vår variabel, noe som gir mening. 1311 01:09:03,130 --> 01:09:06,090 Vi har ikke prøvd å gjøre noe med det. 1312 01:09:07,819 --> 01:09:10,490 Dette er en måte som 1313 01:09:10,490 --> 01:09:14,170 Clang prøver å hjelpe oss med å gjøre at vi ikke bare bruker variabler 1314 01:09:14,170 --> 01:09:18,819 og deretter utilsiktet kalle dem noe annet senere i koden vår, 1315 01:09:18,819 --> 01:09:21,649 hjelpe oss til å unngå feil på den måten. 1316 01:09:23,130 --> 01:09:28,810 >> Greit, så vi har fått innspill fra brukeren, 1317 01:09:28,810 --> 01:09:31,910 vi lagret den i en variabel. 1318 01:09:31,910 --> 01:09:34,569 Det neste skritt var å så 1319 01:09:34,569 --> 01:09:37,609 begynne å se på alle de tegnene i strengen 1320 01:09:37,609 --> 01:09:41,830 og identifisere hvilke som er å bli stor 1321 01:09:41,830 --> 01:09:44,600 og hvilke som skal være små. 1322 01:09:44,600 --> 01:09:49,439 Og som Kelly og Charlotte brakt opp, 1323 01:09:49,439 --> 01:09:52,340 Vi gjør dette ved hjelp av en for-løkke. 1324 01:09:52,340 --> 01:09:55,520 Så husker noen syntaksen til en for loop 1325 01:09:55,520 --> 01:09:58,670 og ønsker å ta en stikke på bare å skrive 1326 01:09:58,670 --> 01:10:03,170 den første linjen i for loop, bare for bit? 1327 01:10:05,740 --> 01:10:07,330 Kelly, vil du gi det et forsøk? 1328 01:10:07,330 --> 01:10:10,300 >> Ja, så du må initialisere først, 1329 01:10:10,300 --> 01:10:13,170 så jeg satte i = 0, 1330 01:10:13,170 --> 01:10:15,390 og da jeg gjorde jeg 01:10:18,570 Er det i Space din - kan jeg dra den opp? 1332 01:10:18,570 --> 01:10:21,330 >> Ja, skrudd jeg opp litt, men ja. 1333 01:10:21,330 --> 01:10:24,180 >> Ok, la oss dra det opp. 1334 01:10:24,180 --> 01:10:26,490 Awesome. 1335 01:10:26,490 --> 01:10:29,510 >> Men da jeg visste ikke om du hadde det - 1336 01:10:29,510 --> 01:10:32,180 Ja, ok. 1337 01:10:33,020 --> 01:10:36,030 Så her er det Kellys fikk: la oss se på det raskt. 1338 01:10:36,030 --> 01:10:40,290 Så hun har tatt med CS50 bibliotek på toppen. 1339 01:10:40,290 --> 01:10:44,790 Hun er inkludert standard IO biblioteket øverst, 1340 01:10:45,550 --> 01:10:48,990 og standard IO har funksjoner som printf, 1341 01:10:48,990 --> 01:10:51,690 så hvis du noen gang ønsker å bruke printf, må du den linjen. 1342 01:10:53,060 --> 01:10:56,140 Og da hun følger strengen biblioteket, 1343 01:10:56,140 --> 01:10:58,200 som vi trenger, 1344 01:10:58,200 --> 01:11:01,010 fordi strengen biblioteket har strlen funksjon, 1345 01:11:01,010 --> 01:11:04,320 som vi får til i bare litt. 1346 01:11:04,320 --> 01:11:07,560 Så hvis vi ser på hva Kelly har gjort her, 1347 01:11:07,560 --> 01:11:10,260 kan du lede oss gjennom hva du gjorde? 1348 01:11:10,260 --> 01:11:13,600 >> Ja, så - jeg mener, jeg fikk feil, så - 1349 01:11:13,600 --> 01:11:15,380 Ja, nei, det er - 1350 01:11:15,380 --> 01:11:18,580 >> Så jeg ønsket å ringe strengen at jeg fikk bare "streng". 1351 01:11:18,580 --> 01:11:22,230 Jeg ønsket å skrive ut strengen 1352 01:11:22,230 --> 01:11:25,640 og da jeg - 1353 01:11:27,450 --> 01:11:30,930 Jeg ønsket å like stille strengen som liker en rekke av hver karakter 1354 01:11:30,930 --> 01:11:33,170 være annerledes [uhørlig], ikke sant? 1355 01:11:33,170 --> 01:11:38,080 Og da jeg ønsket å starte i posisjon 0 1356 01:11:38,080 --> 01:11:40,630 og deretter hver 2. plasser, 1357 01:11:40,630 --> 01:11:42,580 Jeg hadde tenkt å kapitalisere, 1358 01:11:42,580 --> 01:11:45,680 så jeg nettopp beskrev det som 23, fordi jeg var ute på ASCII-tabellen. 1359 01:11:45,680 --> 01:11:48,730 Så det er hva jeg tenkte - jeg vet det ikke er riktig. 1360 01:11:48,730 --> 01:11:50,920 >> Fikk den, så dette er en god start. 1361 01:11:50,920 --> 01:11:54,120 Jeg tror mye av rammeverket er på plass her. 1362 01:11:54,120 --> 01:11:57,500 La oss gå gjennom slags linje for linje og se hva som skjer. 1363 01:11:57,500 --> 01:12:01,040 Så slik jeg liker å gjøre dette på er å starte bare ved å kompilere koden 1364 01:12:01,040 --> 01:12:04,300 og la kompilatoren fortelle meg som hva som er galt med min kode, 1365 01:12:04,300 --> 01:12:07,450 fordi kompilatoren er virkelig god til å fortelle deg hva som er galt med koden. 1366 01:12:09,790 --> 01:12:12,780 Så hvis vi spiller det, bygge, og det bygger ikke. 1367 01:12:12,780 --> 01:12:14,860 Det står at det var en feil, 1368 01:12:14,860 --> 01:12:17,320 så hvis vi bla ned og se på den første feilen, 1369 01:12:17,320 --> 01:12:20,960 det sa - 1370 01:12:20,960 --> 01:12:22,040 Vi blar tilbake til toppen, 1371 01:12:22,040 --> 01:12:26,070 vi kan se det er 5 feil som genereres her nede på bunnen. 1372 01:12:26,070 --> 01:12:30,180 Oops, det er virkelig avskåret. 1373 01:12:31,810 --> 01:12:35,790 Jeg antar det er bare ikke kommer til å få noe bedre. 1374 01:12:36,970 --> 01:12:38,500 >> Here we go. 1375 01:12:39,790 --> 01:12:42,530 Så er det 5 totalt feil som genereres. 1376 01:12:42,530 --> 01:12:45,140 Her kan jeg bare se de første 2, 1377 01:12:45,140 --> 01:12:49,100 slik at jeg kan flytte denne opp litt og deretter slags bla opp. 1378 01:12:49,100 --> 01:12:53,220 Dette er kommandoen som ble kjørt for å kompilere koden, 1379 01:12:53,220 --> 01:12:59,030 og deretter den første feilen var i file.c her: 1380 01:12:59,030 --> 01:13:03,300 "Forventet identifisere eller '('", og det var på denne linjen 1381 01:13:03,300 --> 01:13:06,680 hvor vi sa string = GetString (). 1382 01:13:07,660 --> 01:13:12,920 Du kan se her at det var på linje 8 av file.c, 1383 01:13:12,920 --> 01:13:17,230 og da tror jeg dette er tegnet 12 - det er feil. 1384 01:13:17,230 --> 01:13:20,390 Så hva som går galt på linje 8 - Kelly? 1385 01:13:20,390 --> 01:13:22,810 >> Du trenger bare å kalle det, som, et brev eller noe, 1386 01:13:22,810 --> 01:13:24,400 som streng s eller noe? 1387 01:13:24,400 --> 01:13:28,250 Ja, så viser det seg at disse spesiell type navn, 1388 01:13:28,250 --> 01:13:31,770 så streng, int, røye, kort, 1389 01:13:31,770 --> 01:13:35,740 de er alle spesielle nøkkelord, 1390 01:13:35,740 --> 01:13:38,940 og du ikke kan faktisk bruke dem som navn på variabler, 1391 01:13:38,940 --> 01:13:41,430 fordi kompilatoren ser på det og sier, 1392 01:13:41,430 --> 01:13:43,680 "Å, jeg vet det er en type" 1393 01:13:43,680 --> 01:13:46,530 slik at du ikke kan faktisk ha en streng variabel kalt streng, 1394 01:13:46,530 --> 01:13:50,800 som jeg prøver å gjøre her, og dette vil ikke fungere. 1395 01:13:52,610 --> 01:13:58,250 Men i stedet, kan vi kalle det noe sånt som s eller st eller str. 1396 01:13:58,250 --> 01:14:01,540 Vi kunne ikke også kalle det int. 1397 01:14:01,540 --> 01:14:03,740 Vi kan ikke ha en streng som heter int. 1398 01:14:03,740 --> 01:14:06,740 Vi kan ikke ha en streng som heter char, ingen av dem vil fungere. 1399 01:14:06,740 --> 01:14:09,420 >> Så får vi bare kaller det er for tiden. 1400 01:14:10,630 --> 01:14:13,170 Awesome. 1401 01:14:13,170 --> 01:14:17,500 Så hva blir det neste som skjer i denne linjen? 1402 01:14:21,390 --> 01:14:24,350 String - denne linjen ser ganske bra? 1403 01:14:24,350 --> 01:14:27,830 La oss gi det et forsøk, la oss kjøre den. 1404 01:14:27,830 --> 01:14:30,360 Ok, så vi fortsatt får feil. 1405 01:14:30,360 --> 01:14:32,080 Denne gangen er vi ned til 4 feil. 1406 01:14:32,080 --> 01:14:34,350 Så fikk vi en av dem. 1407 01:14:34,350 --> 01:14:36,130 La oss gå opp. 1408 01:14:36,130 --> 01:14:38,890 "Uventet type navn 'streng': forventet uttrykk," ja? 1409 01:14:38,890 --> 01:14:41,780 >> Ja, det er fordi jeg prøvde å nevne strengen. 1410 01:14:41,780 --> 01:14:44,270 Ja, så det ser ut som vi nå også må gå fix 1411 01:14:44,270 --> 01:14:46,560 alle disse referanser til streng. 1412 01:14:46,560 --> 01:14:50,070 Du kan se det er en referanse til streng her, ett her, ett her, 1413 01:14:50,070 --> 01:14:53,440 slik at vi kan flytte alle disse til s. 1414 01:14:56,040 --> 01:15:00,930 Flott. Ok, kjøre den på nytt. 1415 01:15:00,930 --> 01:15:03,260 Building - en annen feil. 1416 01:15:03,260 --> 01:15:06,900 >> Ok, nå er vi nede i én feil, 1417 01:15:06,900 --> 01:15:11,090 så int i = s og deretter klammeparentesene. 1418 01:15:11,090 --> 01:15:14,880 Så kan du fortelle oss litt om hva du gjorde her, Kelly? 1419 01:15:14,880 --> 01:15:17,120 >> Ja. 1420 01:15:17,120 --> 01:15:19,410 Det var på linje 10. 1421 01:15:19,410 --> 01:15:22,760 >> Jeg vet ikke om vi trengte det hele, 1422 01:15:22,760 --> 01:15:25,560 men jeg tror jeg prøvde å - 1423 01:15:25,560 --> 01:15:27,580 Jeg skal lagre den slik at du kan følge med. 1424 01:15:27,580 --> 01:15:30,470 >> Jeg tror jeg var 1425 01:15:30,470 --> 01:15:33,150 prøver å fortelle det til å begynne i posisjon 0 1426 01:15:33,150 --> 01:15:35,030 i begynnelsen av min for loop, 1427 01:15:35,030 --> 01:15:38,370 så jeg tror kanskje det å si var unødvendig. 1428 01:15:39,690 --> 01:15:41,350 Så bare for å oppsummere, 1429 01:15:41,350 --> 01:15:44,850 du sa at dette - du prøvde å starte dette i posisjon 0 1430 01:15:44,850 --> 01:15:47,030 og få dette - ja, 1431 01:15:47,030 --> 01:15:50,460 så jeg tror tidligere også, når du gikk gjennom koden, 1432 01:15:50,460 --> 01:15:54,070 du snakket om hvordan du ønsket å behandle strengen som en matrise 1433 01:15:54,070 --> 01:15:57,440 slik at vi kan få tilgang til hvert tegn individuelt. 1434 01:15:57,440 --> 01:16:00,660 Jeg tror Dan nevnt matriser, også, prøver å konvertere strenger til arrays. 1435 01:16:01,400 --> 01:16:03,300 >> Det viser seg at slik under panseret, 1436 01:16:03,300 --> 01:16:06,060 en streng er faktisk lagret som en matrise allerede, 1437 01:16:06,060 --> 01:16:08,060 og du kan få tilgang til det som en matrise; 1438 01:16:08,060 --> 01:16:12,390 det er ingen konvertering som du har å gjøre. 1439 01:16:12,390 --> 01:16:15,770 En streng er ikke - så - 1440 01:16:15,770 --> 01:16:18,200 en streng er egentlig ikke en matrise, 1441 01:16:18,200 --> 01:16:21,940 men du kan få tilgang til det som sådan, fordi alle tegnene er lagret 1442 01:16:21,940 --> 01:16:25,160 en rett ved siden av hverandre i minnet, 1443 01:16:25,160 --> 01:16:28,310 så hvis du ønsker å få det første tegnet i strengen, 1444 01:16:28,310 --> 01:16:31,910 Det er det samme som å få det første heltall i et heltall matrise. 1445 01:16:31,910 --> 01:16:35,010 Slik at vi ofte - vi vil 1446 01:16:35,010 --> 01:16:36,360 referere til 2 lignende 1447 01:16:36,360 --> 01:16:38,590 oh, som en streng, som en matrise, 1448 01:16:38,590 --> 01:16:40,830 selv om det egentlig - de svært forskjellige ting, 1449 01:16:40,830 --> 01:16:43,410 men du kan behandle dem veldig mye det samme. 1450 01:16:44,700 --> 01:16:47,400 Så det viser seg at denne linjen faktisk - 1451 01:16:47,400 --> 01:16:51,270 Vi trenger ikke å gjøre noen konvertering, 1452 01:16:51,270 --> 01:16:53,500 og faktisk, 1453 01:16:53,500 --> 01:16:56,790 Dette er faktisk ikke et gyldig uttrykk, 1454 01:16:56,790 --> 01:16:59,040 som er hva vår kompilatoren er å fortelle oss. 1455 01:16:59,040 --> 01:17:01,290 Det sier: "Hey, ventet det et uttrykk, 1456 01:17:01,290 --> 01:17:04,610 og hva jeg har her er noe som ikke er et uttrykk. " 1457 01:17:04,610 --> 01:17:07,310 Å erklære en matrise, 1458 01:17:07,310 --> 01:17:11,780 alt du trenger å gjøre er noe som dette med et semikolon, 1459 01:17:11,780 --> 01:17:15,080 og deretter fortelle rekke hvor lenge du vil den skal være, 1460 01:17:15,080 --> 01:17:18,370 eksempel 5, så denne linjen 10 1461 01:17:18,370 --> 01:17:23,880 vil erklære en matrise jeg ringte med 5 heltall i det. 1462 01:17:23,880 --> 01:17:26,540 >> Dette er en side, og dette er ikke nødvendig for koden, 1463 01:17:26,540 --> 01:17:30,970 men dette er - dette er slags hva erklæringen ser ut. 1464 01:17:30,970 --> 01:17:35,310 >> Hvordan ville du ikke bruke røye i [strlen (s)]? 1465 01:17:35,310 --> 01:17:38,500 Char i [strlen (s)]? 1466 01:17:38,500 --> 01:17:41,500 >> Røye i, og deretter inne i parentesene strlen (s). 1467 01:17:43,900 --> 01:17:47,710 Ja, så vi kunne - 1468 01:17:47,710 --> 01:17:49,460 vi kunne gjøre dette, 1469 01:17:49,460 --> 01:17:52,160 og dette ville erklære - hva ville dette gjøre? 1470 01:17:52,160 --> 01:17:55,900 >> Jeg tror det ville erklære en matrise 1471 01:17:55,900 --> 01:18:01,780 av, som - av - 1472 01:18:01,780 --> 01:18:04,540 oh, trenger du ikke i - oh, 1473 01:18:04,540 --> 01:18:06,420 yeah, du definitivt ikke trenger jeg. 1474 01:18:06,420 --> 01:18:10,250 Du erklærer en rekke tegn 1475 01:18:10,250 --> 01:18:13,150 av lengde s. 1476 01:18:14,680 --> 01:18:16,770 Og så hva Sam sier er at 1477 01:18:16,770 --> 01:18:20,660 denne linjen 10 - la meg sette noen plass i mellom den og resten slik at vi kan isolere det - 1478 01:18:20,660 --> 01:18:23,440 denne linjen 10 ville erklære en matrise 1479 01:18:23,440 --> 01:18:28,520 av tegn, strlen (s) verdi av dem, 1480 01:18:28,520 --> 01:18:32,270 men vi faktisk trenger den i, 1481 01:18:32,270 --> 01:18:35,710 og grunnen til at vi trenger jeg er fordi vi trenger å gi tabellen et navn; 1482 01:18:35,710 --> 01:18:38,900 ellers ville vi ikke ha en måte å referere til tabellen senere i koden. 1483 01:18:38,900 --> 01:18:41,180 >> Så dette her er rekke navn 1484 01:18:41,180 --> 01:18:43,420 og er inne i lengden. 1485 01:18:43,420 --> 01:18:45,010 Dette vil gi oss en matrise, 1486 01:18:45,010 --> 01:18:47,430 men dette er - igjen, dette er en erklæring. 1487 01:18:47,430 --> 01:18:50,380 Det er ikke en oppgave, det er ikke en initialisering. 1488 01:18:50,380 --> 01:18:52,330 Hvis vi erklærer denne tabellen som dette, 1489 01:18:52,330 --> 01:18:54,490 det er faktisk ikke noe i innholdet i matrisen. 1490 01:18:54,490 --> 01:18:57,490 Det er bare junk - hva er der inne. 1491 01:18:57,490 --> 01:18:59,780 Og som vi sa, 1492 01:18:59,780 --> 01:19:01,340 vi faktisk ikke engang trenger å gjøre denne konverteringen, 1493 01:19:01,340 --> 01:19:04,810 fordi vi allerede kan behandle streng s som en matrise. 1494 01:19:06,750 --> 01:19:09,170 Jeg vet at vi kjører en litt lang på tid, 1495 01:19:09,170 --> 01:19:12,330 men jeg vil bare veldig raskt komme til dette for loop 1496 01:19:12,330 --> 01:19:14,850 og viser deg hvordan du får tilgang til enkelte tegn i rekken, 1497 01:19:14,850 --> 01:19:17,170 fordi det er nøkkelen for tildeling vår. 1498 01:19:17,170 --> 01:19:20,790 Og så får vi la deg gå derfra. 1499 01:19:20,790 --> 01:19:24,610 >> Så her har vi en for loop 1500 01:19:24,610 --> 01:19:28,310 som ser nesten bra. 1501 01:19:28,310 --> 01:19:30,960 Hva er ikke helt nesten der? 1502 01:19:30,960 --> 01:19:33,240 What's - hva er ikke helt rett om dette for loop? 1503 01:19:33,240 --> 01:19:36,010 >> Ingen klammeparentes? 1504 01:19:36,010 --> 01:19:38,420 Ingen klammeparentes, for en. 1505 01:19:38,420 --> 01:19:42,580 Vil sørge for at vi har kroppen av loopen med klammeparentes. 1506 01:19:42,580 --> 01:19:45,240 Oops, ikke plassen spenne! 1507 01:19:45,240 --> 01:19:48,660 Og hva er det neste ting som vi trenger å gjøre med dette loop? 1508 01:19:48,660 --> 01:19:52,640 Hvis jeg prøver og kjøre den, 1509 01:19:52,640 --> 01:19:56,740 hva denne feilen at jeg får? 1510 01:19:56,740 --> 01:20:00,990 Jeg får alle disse feilene - Jeg må initialisere jeg. 1511 01:20:00,990 --> 01:20:03,610 Flott. 1512 01:20:03,610 --> 01:20:05,770 Så dette blir en løkke - dette er ikke helt der, 1513 01:20:05,770 --> 01:20:08,680 men det blir veldig nære. 1514 01:20:08,680 --> 01:20:11,260 Denne koden kan vi nå kjøre, 1515 01:20:11,260 --> 01:20:14,620 bygge, oppstår det en feil likevel. 1516 01:20:17,960 --> 01:20:19,800 Hvorfor er det fortsatt klager, 1517 01:20:19,800 --> 01:20:22,030 sier uttrykket er ubrukt, 1518 01:20:22,030 --> 01:20:24,600 og det er fordi denne linjen ikke gjøre noe. 1519 01:20:24,600 --> 01:20:27,620 Vi gjorde ikke lagre den hvor som helst, vi gjorde ikke lagre resultatet. 1520 01:20:27,620 --> 01:20:30,210 Hvor skal vi være redde dette resultatet? 1521 01:20:30,210 --> 01:20:32,920 >> S eller jeg? 1522 01:20:32,920 --> 01:20:35,990 Nøyaktig, og denne funky syntaks, 1523 01:20:35,990 --> 01:20:38,550 dette er med klammeparentesene 1524 01:20:38,550 --> 01:20:41,500 betyr tilgang til i-th karakter s. 1525 01:20:41,500 --> 01:20:45,650 Det kommer til å være noe som er veldig viktig for oppdraget. 1526 01:20:45,650 --> 01:20:48,070 Dessverre, vi nødt til å stoppe her, 1527 01:20:48,070 --> 01:20:50,550 slik at Sebastian delen kan komme inn, 1528 01:20:50,550 --> 01:20:53,980 men jeg er glad for å bo etter utenfor og vil ta noen spørsmål. 1529 01:20:53,980 --> 01:20:56,680 Så takk folkens for kommer. 1530 01:20:56,680 --> 01:20:59,730 Dette skal nå laste opp, bygge, drifte. 1531 01:21:01,570 --> 01:21:04,320 Vi kan skrive inn en streng som "hallo" 1532 01:21:06,570 --> 01:21:08,730 og det skrives "QOX". 1533 01:21:08,730 --> 01:21:11,030 [Latter] 1534 01:21:11,030 --> 01:21:14,640 >> Så ikke helt der, men beveger seg, får mot de sløyfer! 1535 01:21:14,640 --> 01:21:18,640 Takk for at du kom, og jeg skal være utenfor.