1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> SPEAKER 1: All right. 3 00:00:13,650 --> 00:00:14,390 Velkommen tilbake. 4 00:00:14,390 --> 00:00:19,260 Dette er uke to av CS50, og vi har så langt vært å bruke funksjoner, men 5 00:00:19,260 --> 00:00:20,830 i stor grad tatt dem for gitt. 6 00:00:20,830 --> 00:00:23,430 Vi har brukt printf som har bivirkning av utskrift 7 00:00:23,430 --> 00:00:24,110 ting på skjermen. 8 00:00:24,110 --> 00:00:25,790 Vi har brukt get-int, får flyte. 9 00:00:25,790 --> 00:00:29,230 >> Men hva om du faktisk ønsker å skape dine egne funksjoner, som noen av 10 00:00:29,230 --> 00:00:31,740 du har kanskje allerede begynt å gjøre for Problem Set One, men 11 00:00:31,740 --> 00:00:33,140 strengt tatt ikke nødvendig? 12 00:00:33,140 --> 00:00:37,150 Vel, la oss gå videre og besøker samme problemet med bare å spørre brukeren for 13 00:00:37,150 --> 00:00:40,660 deres navn og utskrift noe på skjermen, men prøv å faktor ut noen 14 00:00:40,660 --> 00:00:44,000 av felles at vi har sett i koden vår så langt. 15 00:00:44,000 --> 00:00:45,120 Så med det mener jeg følgende. 16 00:00:45,120 --> 00:00:47,315 >> Jeg kommer til å gå videre og skape et nytt program, bare ring 17 00:00:47,315 --> 00:00:49,320 det hello.c som vanlig. 18 00:00:49,320 --> 00:00:53,730 Jeg kommer til å gå videre og gi meg selv Utover standard io.h på toppen. 19 00:00:53,730 --> 00:00:57,040 Jeg skal også gi meg selv preemptively den CS50 biblioteket slik at 20 00:00:57,040 --> 00:00:59,080 Jeg får ikke skreket til av kompilatoren. 21 00:00:59,080 --> 00:01:02,400 Og nå skal jeg gå videre og erklære int, viktigste, annullert. 22 00:01:02,400 --> 00:01:09,020 >> Og så i her, det er her jeg vil å begynne å outsource funksjonalitet til 23 00:01:09,020 --> 00:01:12,090 en annen funksjon som jeg selv er kommer til å skrive, men som ikke 24 00:01:12,090 --> 00:01:13,820 Det finnes i dag. 25 00:01:13,820 --> 00:01:19,210 For eksempel anta at jeg ønsket å skrive en funksjon som tillater meg å 26 00:01:19,210 --> 00:01:23,830 skrive ut Hallo, komma, og deretter noen brukers navn. 27 00:01:23,830 --> 00:01:29,010 Snarere enn å fortsette å gjøre printf hallo,% s, ikke ville det være fint om 28 00:01:29,010 --> 00:01:33,380 det var bare en funksjon kalt ikke printf men print navn? 29 00:01:33,380 --> 00:01:36,600 >> Så med andre ord, jeg vil være i stand til å skrive et program som gjør litt 30 00:01:36,600 --> 00:01:37,710 noe sånt som dette. 31 00:01:37,710 --> 00:01:42,070 Først skal jeg si printf din navn, og dermed spørre brukeren til 32 00:01:42,070 --> 00:01:46,150 gi meg hans eller hennes navn, og da er jeg kommer til å bruke de kjente streng s til 33 00:01:46,150 --> 00:01:47,290 erklære en streng. 34 00:01:47,290 --> 00:01:50,420 Gi meg en variabel av type string, kalle det s, og oppbevar i at 35 00:01:50,420 --> 00:01:52,120 resultere av ringer får streng. 36 00:01:52,120 --> 00:01:56,060 Men nå i uker tidligere, ville jeg ha noe ordinært gjort hallo,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> Og med andre ord, vi har sett dette eksempel en rekke ganger, og det er en 39 00:02:02,570 --> 00:02:05,280 trivielt eksempel fordi det er bare en linje med kode så det er egentlig ikke en 40 00:02:05,280 --> 00:02:06,860 big deal å fortsette å skrive på nytt. 41 00:02:06,860 --> 00:02:09,990 Men anta at denne linjen med kode faktisk var blitt en byrde, og 42 00:02:09,990 --> 00:02:12,900 det er ikke en linje med kode, men det er 10 kodelinjer et par uker fra nå, 43 00:02:12,900 --> 00:02:15,190 og du bare blir sliten å kopiere og lime inn eller 44 00:02:15,190 --> 00:02:17,180 retyping den samme koden. 45 00:02:17,180 --> 00:02:22,100 Ville det ikke vært fint stedet for å gjøre printf hallo,% s og så videre, 46 00:02:22,100 --> 00:02:26,500 ville det ikke vært fint hvis det var bare en funksjon kalt print navn som 47 00:02:26,500 --> 00:02:27,560 tar et argument - 48 00:02:27,560 --> 00:02:29,120 med andre ord, tar det inngang - 49 00:02:29,120 --> 00:02:30,620 og deretter semikolon. 50 00:02:30,620 --> 00:02:33,240 Slik at funksjon, ville det ikke være fint om det fantes? 51 00:02:33,240 --> 00:02:36,690 Da ville jeg ikke trenger å bekymre deg hva printf er, hva% s og alle 52 00:02:36,690 --> 00:02:39,400 denne kompleksiteten som er ikke alle som interessant. 53 00:02:39,400 --> 00:02:40,570 De er nyttige. 54 00:02:40,570 --> 00:02:44,700 >> Så print navn, dessverre, var ikke oppfunnet noen 40 pluss år siden. 55 00:02:44,700 --> 00:02:45,980 Ingen tenkte å skrive det. 56 00:02:45,980 --> 00:02:48,300 Men det er det fine med å ha en programmeringsspråk, akkurat som i 57 00:02:48,300 --> 00:02:52,930 Skrapelodd kan du definere tilpassede blokker, så i C og de fleste andre språk, kan du 58 00:02:52,930 --> 00:02:57,260 definere din egen funksjonalitet, kan du definere dine egne funksjoner. 59 00:02:57,260 --> 00:03:01,710 Så selv om vi får viktigste by automatisk for gratis, kan vi erklære 60 00:03:01,710 --> 00:03:02,730 våre egne funksjoner. 61 00:03:02,730 --> 00:03:05,670 >> Så jeg kommer til å gjøre noen plass her oppe opp toppen, og jeg kommer til å erklære min 62 00:03:05,670 --> 00:03:08,210 egen funksjon som kommer til å se en litt rart i begynnelsen, men vi vil komme 63 00:03:08,210 --> 00:03:09,400 tilbake til dette før lenge. 64 00:03:09,400 --> 00:03:12,310 Jeg kommer til å si ugyldig, og dermed indikerer denne funksjonen gjør 65 00:03:12,310 --> 00:03:16,040 noe, har en bivirkning, men det returnerer ikke noe til meg i 66 00:03:16,040 --> 00:03:18,810 samme måte som får int eller får streng selv gjør. 67 00:03:18,810 --> 00:03:22,450 Og jeg kommer til å gi denne funksjonen en Navn på print navn, og jeg kommer til å 68 00:03:22,450 --> 00:03:26,470 spesifisere at denne fyren kommer til å ta en streng, og jeg kommer til å kalle det 69 00:03:26,470 --> 00:03:27,600 string navn. 70 00:03:27,600 --> 00:03:32,100 Jeg kan kalle det hva jeg vil, men jeg vil ha min kode for å være selvstendig dokumentere. 71 00:03:32,100 --> 00:03:34,770 Med andre ord, var hvis en av dere til åpne denne filen og lese den, kan du 72 00:03:34,770 --> 00:03:39,020 slags antyde fra navnet på det inngang hvilken rolle den skal spille. 73 00:03:39,020 --> 00:03:42,270 >> Og nå under det, kommer jeg til å åpne klammeparentes og lukket klammeparentes, 74 00:03:42,270 --> 00:03:47,140 og så merker jeg har fulgt det samme mønster på linjene fire gjennom syv som 75 00:03:47,140 --> 00:03:51,622 Jeg har fulgt etter en god uke pluss nå mellom, sier ni linjer og 76 00:03:51,622 --> 00:03:53,400 14 som komponere viktigste. 77 00:03:53,400 --> 00:03:56,160 Med andre ord, skrive navnet er en annen funksjon. 78 00:03:56,160 --> 00:03:58,990 Nå er kompilatoren ikke kommer til å vite å kalle denne tingen automatisk 79 00:03:58,990 --> 00:04:02,670 fordi jeg bokstavelig talt bare oppfant den, men det vil vite fortsatt å kalle hoved 80 00:04:02,670 --> 00:04:08,710 automatisk, og da selvfølgelig i linje 13, jeg kaller min egen funksjon. 81 00:04:08,710 --> 00:04:12,805 Og fordi jeg har erklært at funksjonen opp på linje fire før main, 82 00:04:12,805 --> 00:04:16,579 dette kommer til å lære kompilatoren hva sitat, unquote, "print name" 83 00:04:16,579 --> 00:04:18,140 betyr og hva den skal gjøre. 84 00:04:18,140 --> 00:04:22,700 Så jeg er liksom gi det en ny tilpasset blokkere i sammenheng, sier Scratch. 85 00:04:22,700 --> 00:04:27,240 >> Så her kan jeg putte det svært vanlig eller gjentakende mønster av koden jeg holder 86 00:04:27,240 --> 00:04:32,300 skriver i klassen, printf % S hallo,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 hva ønsker jeg å sette her? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Så jeg ønsker å sette navn i denne sammenheng. 91 00:04:41,420 --> 00:04:43,440 Så merker litt av en dikotomi her. 92 00:04:43,440 --> 00:04:47,680 Fordi jeg erklære min egen funksjon og jeg har noe tilfeldig kalt 93 00:04:47,680 --> 00:04:50,880 det ut navn, og fordi jeg har angitt i parentes at dette 94 00:04:50,880 --> 00:04:55,035 Funksjonen tar ett argument, type som er en streng - så det er et ord 95 00:04:55,035 --> 00:05:00,010 eller en setning eller noe sånt - og Jeg ringer som argument navn, som 96 00:05:00,010 --> 00:05:04,770 betyr den eneste variabelen som er i omfang, så å si, er navnet. 97 00:05:04,770 --> 00:05:07,780 >> S eksisterer bare mellom det to klammeparentes, selvfølgelig? 98 00:05:07,780 --> 00:05:12,990 Vel egentlig, akkurat som linje 10 gjennom 14, så akkurat som på mandag kan ikke bruke 99 00:05:12,990 --> 00:05:17,650 S, men hva jeg kan gjøre er å passere S i trykken navn. 100 00:05:17,650 --> 00:05:21,030 Skriv ut navn bare så skjer for å gi den et alias, et synonym, et kallenavn, 101 00:05:21,030 --> 00:05:24,400 kaller det navnet, og nå bruke det i denne linjen. 102 00:05:24,400 --> 00:05:26,840 Så nå la meg lagre denne, zoome ut. 103 00:05:26,840 --> 00:05:31,250 >> La meg gå videre og gjøre hallo. 104 00:05:31,250 --> 00:05:32,400 Ser bra ut. 105 00:05:32,400 --> 00:05:36,110 Fikk ikke spytte ut eventuelle feil. . / Hallo Enter. 106 00:05:36,110 --> 00:05:37,020 Hva er navnet mitt? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 Og hallo David. 109 00:05:39,270 --> 00:05:41,820 Så ikke alt som er spennende, men tenk nå. 110 00:05:41,820 --> 00:05:44,310 Du har nå den samme ingrediens som vi gjorde i Scratch til 111 00:05:44,310 --> 00:05:45,420 gjøre våre egne funksjoner. 112 00:05:45,420 --> 00:05:46,770 >> Men det er litt av en fikser. 113 00:05:46,770 --> 00:05:50,620 Anta at jeg egentlig ikke hadde tenkt dette gjennom og jeg faktisk uten 114 00:05:50,620 --> 00:05:54,250 egentlig tenker om det skrev som fungerer her nede. 115 00:05:54,250 --> 00:05:55,420 Føles helt rimelig. 116 00:05:55,420 --> 00:05:58,440 I Scratch er det ingen forestilling av plassering i skript. 117 00:05:58,440 --> 00:06:00,670 Du kan sette en opp her, her oppe, her oppe, og det kan starte 118 00:06:00,670 --> 00:06:03,310 å se litt rotete hvis du ikke legge den ut pent, men det gjør ikke 119 00:06:03,310 --> 00:06:05,910 Uansett hvor fysisk skript var på skjermen. 120 00:06:05,910 --> 00:06:09,660 Dessverre i C - og dette er ulikt språk som Java og Python 121 00:06:09,660 --> 00:06:13,600 og andre at du kan bli kjent med - dessverre i C, gjør rekkefølge 122 00:06:13,600 --> 00:06:15,830 saken fordi watch hva som er kommer til å skje nå. 123 00:06:15,830 --> 00:06:19,010 >> Standard funksjon som kommer å utføre er, selvfølgelig, hoved. 124 00:06:19,010 --> 00:06:22,290 Hoved kommer til å kalle print navn på linjen åtte, men dessverre, 125 00:06:22,290 --> 00:06:26,660 kompilatoren vil ikke engang vet at print navn foreligger før det blir til linje 11, 126 00:06:26,660 --> 00:06:28,520 som dessverre kommer til å være for sent. 127 00:06:28,520 --> 00:06:30,660 Så la oss gjøre gjøre hallo. 128 00:06:30,660 --> 00:06:32,950 Og nå jævla, to feil genereres. 129 00:06:32,950 --> 00:06:36,050 Så nå la meg bla opp til den aller først, som vi alltid bør gjøre, og 130 00:06:36,050 --> 00:06:39,560 legge merke til at det er roping på meg, "Implisitt deklarasjon av funksjon 131 00:06:39,560 --> 00:06:40,540 skrive navn. " 132 00:06:40,540 --> 00:06:43,860 >> Så vi har sett denne meldingen før, implisitt deklarasjon av funksjon. 133 00:06:43,860 --> 00:06:48,080 Når har vi sett at type feil? 134 00:06:48,080 --> 00:06:49,180 Når jeg ikke er bibliotek. 135 00:06:49,180 --> 00:06:53,470 Hvis jeg har glemt cs50.h og jeg ville få skreket til for få streng eller få int. 136 00:06:53,470 --> 00:06:56,880 Men i dette tilfelle, er denne funksjonen print Navnet er ikke i et bibliotek, ikke sant? 137 00:06:56,880 --> 00:07:00,230 Det er bokstavelig talt i denne filen, så hva er egentlig problemet? 138 00:07:00,230 --> 00:07:04,660 >> Vel dessverre i C, tar det deg så utrolig bokstavelig talt at hvis du 139 00:07:04,660 --> 00:07:08,640 vil ha en funksjon som heter print navn til eksisterer, du enten nødt til å implementere 140 00:07:08,640 --> 00:07:11,940 som fungerer på toppen av din koden slik at det er tilgjengelig for å senke 141 00:07:11,940 --> 00:07:15,070 funksjoner, men ærlig talt, det blir slurvete svært raskt. 142 00:07:15,070 --> 00:07:18,160 Personlig liker jeg å sette viktigste først fordi da er det svært klart hva dette 143 00:07:18,160 --> 00:07:19,890 Programmet gjør ved første øyekast. 144 00:07:19,890 --> 00:07:23,290 Og pluss, kan du komme inn rare hjørne tilfeller der hvis x ønsker å ringe 145 00:07:23,290 --> 00:07:27,530 y, men y kan kalle x, du bare fysisk kan faktisk ikke sette en 146 00:07:27,530 --> 00:07:28,540 over hverandre. 147 00:07:28,540 --> 00:07:31,230 >> Men det viser seg i C, kan vi løse dette veldig enkelt. 148 00:07:31,230 --> 00:07:34,010 Jeg kommer til å sette en liten bit av plass opp her, og jeg skal bare 149 00:07:34,010 --> 00:07:38,170 preemptively, om enn noe redundant, kommer til å lære 150 00:07:38,170 --> 00:07:42,320 kompilator som det eksisterer en funksjon kalles print navn, tar det en streng, 151 00:07:42,320 --> 00:07:46,330 og jeg kommer til å ringe det navnet semikolon. 152 00:07:46,330 --> 00:07:50,220 >> Så dette nå på linje fire, som vi ikke har sett før, er en erklæring 153 00:07:50,220 --> 00:07:53,940 av en funksjon print navn, men det er bare et løfte om at denne funksjonen vil 154 00:07:53,940 --> 00:07:56,620 etter hvert bli definert, til slutt iverksettes. 155 00:07:56,620 --> 00:08:00,180 Dette nå kan jeg la være fordi nå dette er definisjonen, den 156 00:08:00,180 --> 00:08:04,090 gjennomføring, liksom den siste mil av gjennomføringen av dette 157 00:08:04,090 --> 00:08:05,130 bestemt funksjon. 158 00:08:05,130 --> 00:08:08,450 Så ærlig talt det er dumt, det er irriterende, men dette er måten er C, og den er 159 00:08:08,450 --> 00:08:12,050 fordi det tar deg svært bokstavelig og, som en datamaskin ærlig bør, 160 00:08:12,050 --> 00:08:16,020 bare gjør akkurat det du ber den om gjør, og slik at sortering er viktig. 161 00:08:16,020 --> 00:08:18,940 >> Så hold det i tankene og igjen, begynner å merke gjentakelse av mønstre. 162 00:08:18,940 --> 00:08:21,850 Odds er du vil, hvis du ikke har allerede, begynner å støte på meldinger 163 00:08:21,850 --> 00:08:24,700 slik som ved første øyekast synes helt kryptisk, men hvis du starter 164 00:08:24,700 --> 00:08:29,000 å lete etter disse stikkordene som "Implisitt erklæring," omtale av en 165 00:08:29,000 --> 00:08:32,380 funksjon i dette tilfellet - og ærlig, du noen ganger også få en liten grønn 166 00:08:32,380 --> 00:08:35,010 gulrot symbol som forteller deg hvor problemet er sannsynligvis - 167 00:08:35,010 --> 00:08:40,980 du kan begynne å jobbe deg gjennom ennå usett feilmeldinger. 168 00:08:40,980 --> 00:08:45,860 Eventuelle spørsmål om å skrive egen funksjon på denne måte? 169 00:08:45,860 --> 00:08:47,540 >> La oss gjøre noe som er en litt mer overbevisende. 170 00:08:47,540 --> 00:08:51,760 Snarere enn bare å gjøre noe som har en bivirkning av utskrift, la meg gå 171 00:08:51,760 --> 00:08:55,340 videre og lagre en ny fil, og vi vil kaller dette positive.c, selv om det er 172 00:08:55,340 --> 00:08:57,600 kommer til å være litt annerledes versus forrige gang. 173 00:08:57,600 --> 00:09:01,910 Og denne gangen, jeg ønsker å re-implementere siste tids positive.C eksempel, som 174 00:09:01,910 --> 00:09:04,430 er tvinge brukeren til å gi me et positivt heltall. 175 00:09:04,430 --> 00:09:07,280 Men jeg måtte bruke få int siste gang. 176 00:09:07,280 --> 00:09:10,780 Ville det ikke vært fint hvis det var en funksjon som heter få positive int 177 00:09:10,780 --> 00:09:13,610 at jeg bare kunne outsource denne stykke funksjonalitet til? 178 00:09:13,610 --> 00:09:16,480 Så forskjellen her er vi vil implementere få positive int, men i motsetning til 179 00:09:16,480 --> 00:09:20,330 print navn som hadde en bivirkning - det kom ikke tilbake noe til meg som 180 00:09:20,330 --> 00:09:21,710 et tall eller en streng - 181 00:09:21,710 --> 00:09:25,510 få positive int er, selvfølgelig, kommer til å tilbake, forhåpentligvis, en positiv int. 182 00:09:25,510 --> 00:09:26,170 >> Så la oss gjøre dette. 183 00:09:26,170 --> 00:09:30,840 Inkluder cs50.h, Inkluder standard io.h. 184 00:09:30,840 --> 00:09:33,520 Int main ugyldig. 185 00:09:33,520 --> 00:09:42,160 Og nå her, jeg kommer til å gå videre og la oss si int, kall det n er lik 186 00:09:42,160 --> 00:09:44,270 få positive int. 187 00:09:44,270 --> 00:09:49,080 Og akkurat som få int allerede eksisterer fordi de ansatte skrev det, jeg kommer 188 00:09:49,080 --> 00:09:53,950 å anta for øyeblikket at få positive int eksisterer, og nå skal jeg 189 00:09:53,950 --> 00:09:57,730 å gå videre og si printf, takk for% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Så nå hvis jeg kompilere dette programmet, hva kommer til å skje i terminalen min 192 00:10:07,770 --> 00:10:09,075 vinduet på bunnen av skjermen? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Jeg skal nok få som samme feil som tidligere. 195 00:10:13,900 --> 00:10:14,570 Så la oss prøve dette. 196 00:10:14,570 --> 00:10:16,450 Gjør positive. 197 00:10:16,450 --> 00:10:19,900 Og igjen, implisitt erklæring av funksjon, får positiv int. 198 00:10:19,900 --> 00:10:21,970 Så vi kan løse dette i et par måter. 199 00:10:21,970 --> 00:10:27,310 Jeg kommer til å holde det enkelt og bare sette min erklæringen opp her og få 200 00:10:27,310 --> 00:10:28,120 positive int. 201 00:10:28,120 --> 00:10:29,720 Jeg trenger den såkalte signatur. 202 00:10:29,720 --> 00:10:32,410 Signaturen refererer bare til estetikk av 203 00:10:32,410 --> 00:10:34,090 første linjen i programmet. 204 00:10:34,090 --> 00:10:37,420 Så hva bør få positive int retur? 205 00:10:37,420 --> 00:10:37,970 >> Så en int. 206 00:10:37,970 --> 00:10:41,540 Jeg mener også ideelt sett tilbake noe sånt som positivt int, men at 207 00:10:41,540 --> 00:10:42,160 finnes ikke. 208 00:10:42,160 --> 00:10:45,280 Vi har ikke sett at blant våre data typer, så vi har å forholde seg til 209 00:10:45,280 --> 00:10:47,170 faktum at vi har svært få datatyper å jobbe med. 210 00:10:47,170 --> 00:10:50,360 Men vi kan returnere en int og bare stoler på at det vil være positivt. 211 00:10:50,360 --> 00:10:52,690 Det kommer til å bli kalt få positive int. 212 00:10:52,690 --> 00:10:55,122 >> Og nå hva med sine argumenter? 213 00:10:55,122 --> 00:10:56,440 Tar det noen innspill? 214 00:10:56,440 --> 00:10:58,280 Trenger det noen innspill? 215 00:10:58,280 --> 00:11:00,900 Slik at den ikke trenger å vite på forhånd noe. 216 00:11:00,900 --> 00:11:03,220 Få strengen ikke får int ikke. 217 00:11:03,220 --> 00:11:06,430 Printf gjør - det er behov for å ha noen innspill gått inn i den - og skrive ut navn 218 00:11:06,430 --> 00:11:09,020 trengte noen innspill, men få positive int ikke. 219 00:11:09,020 --> 00:11:11,530 Så jeg kommer til å eksplisitt fortelle kompilatoren ugyldig. 220 00:11:11,530 --> 00:11:13,470 Void er fraværet av noe annet. 221 00:11:13,470 --> 00:11:17,990 Så ugyldig betyr ingenting kommer inne av disse parenteser, semikolon. 222 00:11:17,990 --> 00:11:20,840 >> Og nå på bunnen av filen min - og igjen, jeg bare være snill av anal 223 00:11:20,840 --> 00:11:23,640 her sette hoved øverst, som er god praksis fordi denne måten 224 00:11:23,640 --> 00:11:26,220 når du eller noen andre åpner filen, vises 225 00:11:26,220 --> 00:11:27,400 funksjonalitet er rett der. 226 00:11:27,400 --> 00:11:29,660 Du kan dykke i fra Square One. 227 00:11:29,660 --> 00:11:34,190 Så nå skal jeg kopiere dette, få positive int tomrom, men jeg er ikke 228 00:11:34,190 --> 00:11:35,430 kommer til å treffe et semikolon nå. 229 00:11:35,430 --> 00:11:38,280 Jeg kommer til å åpne klammeparentes, og nå trenger jeg å låne 230 00:11:38,280 --> 00:11:39,700 noen ideer fra mandag. 231 00:11:39,700 --> 00:11:44,450 >> Så som du husker, gjorde vi noe liker du gjøre følgende mens 232 00:11:44,450 --> 00:11:45,830 noe var sant. 233 00:11:45,830 --> 00:11:46,630 Og hva gjorde jeg? 234 00:11:46,630 --> 00:11:51,540 Jeg gjorde noe som gir meg et positivt heltall, 235 00:11:51,540 --> 00:11:52,430 litt av en melding. 236 00:11:52,430 --> 00:11:53,540 Jeg kunne bruke noen ord jeg ønsker. 237 00:11:53,540 --> 00:11:54,960 Og så brukte jeg det? 238 00:11:54,960 --> 00:11:59,530 Int n er lik få int, ingen argumenter til det. 239 00:11:59,530 --> 00:12:00,550 >> Og legg merke til forskjellen. 240 00:12:00,550 --> 00:12:04,680 Når du ringer til en funksjon, når du bruker en funksjon, trenger du ikke sette i tomrommet. 241 00:12:04,680 --> 00:12:08,570 Du bare gjøre det når erklære en funksjon, undervisning kompilatoren hva 242 00:12:08,570 --> 00:12:09,780 det bør forvente. 243 00:12:09,780 --> 00:12:11,650 Slik at du ikke trenger å sette ugyldiggjøre det selv. 244 00:12:11,650 --> 00:12:12,940 >> Og nå hva som var tilstanden min? 245 00:12:12,940 --> 00:12:19,670 Vel, er n ikke lik positiv, men det er bare pseudo-kode. 246 00:12:19,670 --> 00:12:22,530 Så hvordan uttrykker jeg gjør dette mer renslig? 247 00:12:22,530 --> 00:12:24,090 Slik at mindre enn eller lik null. 248 00:12:24,090 --> 00:12:26,250 Så igjen, merker du kan gjøre mindre enn eller lik. 249 00:12:26,250 --> 00:12:28,100 Selv om det er to separate symboler, kan du gjøre det på 250 00:12:28,100 --> 00:12:29,350 tastaturet som sådan. 251 00:12:29,350 --> 00:12:33,950 >> Men det er fortsatt en bug som Jeg skrudd opp sist gang også. 252 00:12:33,950 --> 00:12:36,950 Jeg må erklære - 253 00:12:36,950 --> 00:12:37,460 nøyaktig. 254 00:12:37,460 --> 00:12:39,640 Jeg må erklære n utenfor av løkken. 255 00:12:39,640 --> 00:12:44,180 Så jeg trenger å sette n opp her, og jeg vet ikke ønsker å re-erklære den inn her 256 00:12:44,180 --> 00:12:46,480 så jeg får en ny variabel. 257 00:12:46,480 --> 00:12:48,860 Jeg vil bare tilordne en verdi her. 258 00:12:48,860 --> 00:12:54,320 >> Og nå er jeg ikke helt ferdig her. 259 00:12:54,320 --> 00:12:57,290 La meg komme foran meg selv og late som jeg er ferdig. 260 00:12:57,290 --> 00:13:01,220 Gjør positive, og nå det er en ny feil. 261 00:13:01,220 --> 00:13:04,550 Kontroll når slutten av ikke-void funksjon. 262 00:13:04,550 --> 00:13:07,760 Så ny feilmelding, men hvis du snill av erte hverandre hvert av ordene, det 263 00:13:07,760 --> 00:13:09,620 sannsynligvis hint på hva som er galt. 264 00:13:09,620 --> 00:13:11,240 >> Kontrollere. 265 00:13:11,240 --> 00:13:14,250 Styreinnretningen bare til rekkefølgen av virksomheten i et program. 266 00:13:14,250 --> 00:13:16,510 Datamaskinen er i kontroll og noe gikk galt. 267 00:13:16,510 --> 00:13:18,510 Så det kommer til slutten av en ikke-void funksjon. 268 00:13:18,510 --> 00:13:21,760 Hvilken funksjon er det tilsynelatende henviser til? 269 00:13:21,760 --> 00:13:24,790 Hva funksjonen er ikke-tomrom? 270 00:13:24,790 --> 00:13:27,400 Så får positive int, og litt forvirrende i at godt, 271 00:13:27,400 --> 00:13:29,010 det er slags tomrom. 272 00:13:29,010 --> 00:13:33,070 Den har en spesifikasjon av tomrom for dens argumenter, men produksjonen skal 273 00:13:33,070 --> 00:13:34,540 være av typen n.. 274 00:13:34,540 --> 00:13:37,260 Så ordet til venstre er såkalt retur-type. 275 00:13:37,260 --> 00:13:40,320 Ordet på innsiden her er de null eller flere argumenter 276 00:13:40,320 --> 00:13:41,970 som en funksjon tar. 277 00:13:41,970 --> 00:13:44,060 >> Så hva må jeg gjøre? 278 00:13:44,060 --> 00:13:47,650 På dette punktet i min kode, linje 21 hvor den blinkende meldingen er nå, jeg 279 00:13:47,650 --> 00:13:51,430 ha en positiv int inne av variabel kalt N. 280 00:13:51,430 --> 00:13:55,200 Hvordan gir jeg den tilbake til hovedsiden? 281 00:13:55,200 --> 00:13:55,960 Bokstavelig talt. 282 00:13:55,960 --> 00:13:59,320 Returnere n semikolon. 283 00:13:59,320 --> 00:14:04,090 >> Så akkurat som Colton returnerte stykke papir med et svar til meg ved å slippe 284 00:14:04,090 --> 00:14:07,020 det stykke papir i den lille sorte boksen på bordet, for å gjøre det i 285 00:14:07,020 --> 00:14:10,100 koden, du bokstavelig talt bare skrive, returnere n, og det er som om Colton var 286 00:14:10,100 --> 00:14:12,140 levere meg noe fysisk tilbake. 287 00:14:12,140 --> 00:14:15,870 I dette tilfellet, det som skjer er få positive int kommer til å levere tilbake 288 00:14:15,870 --> 00:14:19,220 hva er formodentlig en positiv heltall til hvem? 289 00:14:19,220 --> 00:14:21,380 Hvor ender denne verdien opp? 290 00:14:21,380 --> 00:14:29,080 Som ender opp i denne variabelen, n, og da vi fortsette med linjen ni. 291 00:14:29,080 --> 00:14:31,920 >> Så med andre ord, i størrelsesorden drift, starter dette programmet 292 00:14:31,920 --> 00:14:34,430 gjennomføring, og kompilatoren innser, Åh, du vil biblioteket? 293 00:14:34,430 --> 00:14:36,310 La meg gå grab hva som er inni det. 294 00:14:36,310 --> 00:14:37,750 Åh, du vil standard IO biblioteket? 295 00:14:37,750 --> 00:14:39,660 La meg gå grab hva som er inni det. 296 00:14:39,660 --> 00:14:44,510 Hva sier kompilatoren til seg selv når den treffer linjen fire? 297 00:14:44,510 --> 00:14:47,980 Oh, du lovte å implementere funksjon som heter få positive, men 298 00:14:47,980 --> 00:14:50,820 vi vil komme tilbake til det senere, noe langs disse linjene. 299 00:14:50,820 --> 00:14:53,450 >> Int main ugyldig betyr bare her er guts av mitt program. 300 00:14:53,450 --> 00:14:54,990 Linje syv er bare en klammeparentes. 301 00:14:54,990 --> 00:14:59,540 Linje åtte sier til venstre, gi me 32 bits for et heltall, kall det n. 302 00:14:59,540 --> 00:15:02,160 På høyre side er det sier få positive int. 303 00:15:02,160 --> 00:15:07,120 Nå la oss stoppe denne historien fordi nå Jeg kan ikke bevege meg markøren ned. 304 00:15:07,120 --> 00:15:11,720 Min markøren går nå ned her fordi nå får positive int utfører. 305 00:15:11,720 --> 00:15:13,100 Int n er deklarert. 306 00:15:13,100 --> 00:15:14,040 Gjør følgende. 307 00:15:14,040 --> 00:15:16,090 Printf gir meg et positivt heltall. 308 00:15:16,090 --> 00:15:19,740 >> Få en int fra brukeren, lagre den i n, og kanskje gjøre dette igjen og igjen. 309 00:15:19,740 --> 00:15:23,010 Denne sløyfen betyr at denne koden makt kjøre opp og ned som dette igjen 310 00:15:23,010 --> 00:15:25,810 og igjen, men når brukeren endelig samarbeider og gir meg en positiv 311 00:15:25,810 --> 00:15:31,750 int, jeg traff linjen 21, noe som medførte at nummeret er levert tilbake, og som man 312 00:15:31,750 --> 00:15:34,280 bør jeg fremheve nå? 313 00:15:34,280 --> 00:15:35,070 Ni. 314 00:15:35,070 --> 00:15:39,010 Kontroll, så å si, returnerer til linje ni. 315 00:15:39,010 --> 00:15:40,650 Det er den linjen som er nå ansvarlig. 316 00:15:40,650 --> 00:15:43,250 >> Så det er hva som har skjedd alle denne gangen under panseret, men 317 00:15:43,250 --> 00:15:46,480 når vi har brukt funksjoner som printf eller selv få streng som noen andre 318 00:15:46,480 --> 00:15:50,600 skrev til deg, ble kontrollen blir overlevert off til andres kodelinje 319 00:15:50,600 --> 00:15:51,290 for linje for linje. 320 00:15:51,290 --> 00:15:53,770 Det er bare vi ikke kunne se det, og vi kunne egentlig ikke skildre det i denne 321 00:15:53,770 --> 00:15:57,620 program fordi det er i en annen fil på harddisken 322 00:15:57,620 --> 00:16:00,000 Ukjent for oss. 323 00:16:00,000 --> 00:16:02,100 Så la oss faktisk kompilere og kjøre dette nå. 324 00:16:02,100 --> 00:16:03,890 >> Gjør positive. 325 00:16:03,890 --> 00:16:05,260 Kompilere, det er fremgang. 326 00:16:05,260 --> 00:16:06,650 . / Positiv. 327 00:16:06,650 --> 00:16:08,020 Gi meg et positivt heltall. 328 00:16:08,020 --> 00:16:08,800 La oss være vanskelig. 329 00:16:08,800 --> 00:16:10,430 Negative en. 330 00:16:10,430 --> 00:16:11,360 Zero. 331 00:16:11,360 --> 00:16:13,370 La oss gi den 50. 332 00:16:13,370 --> 00:16:18,100 Takk for 50, og så kontroll har nå returnert. 333 00:16:18,100 --> 00:16:21,750 Eventuelle spørsmål, da, på det? 334 00:16:21,750 --> 00:16:23,180 Yeah? 335 00:16:23,180 --> 00:16:25,630 >> [Uhørlig]. 336 00:16:25,630 --> 00:16:26,130 >> Si det igjen. 337 00:16:26,130 --> 00:16:27,860 Oh, godt spørsmål. 338 00:16:27,860 --> 00:16:31,100 Så du kanskje merke en parallell her at Jeg er litt å kutte et hjørne på. 339 00:16:31,100 --> 00:16:35,420 I linje 12, jeg sier, får positiv int returnerer en int, men av den samme 340 00:16:35,420 --> 00:16:39,660 logikk, står det nå til grunn at det i Online seks, jeg sier at viktigste avkastning 341 00:16:39,660 --> 00:16:44,040 en int, men hva har vi aldri hatt i noen av våre programmer? 342 00:16:44,040 --> 00:16:46,470 Vi har aldri hatt omtale av dette stikkordet retur. 343 00:16:46,470 --> 00:16:49,970 >> Så det viser seg at i C, minst den versjonen av det at vi bruker 344 00:16:49,970 --> 00:16:55,750 gjort i 1999, teknisk, er dette skjer automatisk for deg. 345 00:16:55,750 --> 00:16:59,300 Når du gjennomføre et program, og du implementere en funksjon som heter main, 346 00:16:59,300 --> 00:17:04,230 at funksjonen vil returnere null ved standard hvis du ikke sier noe annet, 347 00:17:04,230 --> 00:17:05,849 og null er bare en konvensjon. 348 00:17:05,849 --> 00:17:09,430 Verden returnerer null dermed som indikerer at alt er bra, 349 00:17:09,430 --> 00:17:13,040 effektivt forlate oss med fire milliarder mulige ting som kan gå 350 00:17:13,040 --> 00:17:17,530 feil slik at hvis vi går tilbake ett, som kan betegne en kode som betyr dette 351 00:17:17,530 --> 00:17:18,310 ting gikk galt. 352 00:17:18,310 --> 00:17:20,589 Vi kunne returnere to, noe som innebærer denne andre ting gikk galt. 353 00:17:20,589 --> 00:17:23,440 Vi kunne returnere fire milliarder, som betyr dette andre ting gikk galt. 354 00:17:23,440 --> 00:17:27,170 >> Og hvis du nå tenker om din egen PC eller Mac, kan du huske at 355 00:17:27,170 --> 00:17:29,610 noen ganger får du kryptiske feilmeldinger fra programvare som du er 356 00:17:29,610 --> 00:17:32,650 ved hjelp av, og noen ganger har det et menneske vennlig beskrivelse, men det er 357 00:17:32,650 --> 00:17:35,265 ofte en kode eller et nummer på skjermen? 358 00:17:35,265 --> 00:17:37,800 Hvis dette ikke kommer til hjernen, bare holde et øye for det. 359 00:17:37,800 --> 00:17:40,790 Det er typisk hva disse kodene henviser til. 360 00:17:40,790 --> 00:17:44,200 De er inkludert i Microsoft Word og andre programmer, slik at hvis du sende inn en 361 00:17:44,200 --> 00:17:48,850 feilrapport med selskapet, kan du fortelle dem, oh, jeg fikk feil nummer 45. 362 00:17:48,850 --> 00:17:51,750 Og noen programmerer tilbake på selskapet kan se det opp i hans eller hennes 363 00:17:51,750 --> 00:17:54,940 koden og si, oh, det er fordi jeg har gjort denne feilen, og det er derfor brukeren 364 00:17:54,940 --> 00:17:56,240 fikk denne meldingen. 365 00:17:56,240 --> 00:17:59,490 >> Men ærlig talt, det er bare litt distraherende og litt kjedelig å 366 00:17:59,490 --> 00:18:02,130 konkluderer med at, i det minste på vår første få programmer, så vi har 367 00:18:02,130 --> 00:18:02,970 vært å utelate det. 368 00:18:02,970 --> 00:18:07,450 Men hele denne tiden hver og en av dine funksjoner main har i all hemmelighet hadde denne 369 00:18:07,450 --> 00:18:11,600 linjen automatisk lagt for deg av kompilator, bare ved konvensjonen til 370 00:18:11,600 --> 00:18:13,172 spare deg litt tid. 371 00:18:13,172 --> 00:18:14,620 >> [Uhørlig]. 372 00:18:14,620 --> 00:18:16,250 >> Du trenger ikke å inkludere det i main. 373 00:18:16,250 --> 00:18:16,700 Det er bra. 374 00:18:16,700 --> 00:18:20,260 Du trenger ikke å inkludere den hvis du var implementere en funksjon som dette. 375 00:18:20,260 --> 00:18:22,850 Ellers funksjonen flat ut ville ikke fungere. 376 00:18:22,850 --> 00:18:24,480 Men i hovedsak er det ikke nødvendig. 377 00:18:24,480 --> 00:18:28,450 I en uke eller to, vil vi begynne å bli inn som vane når vi ønsker å starte 378 00:18:28,450 --> 00:18:29,690 betegner feil. 379 00:18:29,690 --> 00:18:32,550 Virkelig godt spørsmål. 380 00:18:32,550 --> 00:18:36,880 >> Så rask verbal pause for å nevne at denne fredagen, vil vi ikke ha lunsj 381 00:18:36,880 --> 00:18:39,980 per se, men vi skal ha middag med noen av studenter og ansatte. 382 00:18:39,980 --> 00:18:42,940 Hvis du ønsker å bli med oss, føler fri til å gå til cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 06:00 denne fredagen. 384 00:18:45,030 --> 00:18:47,990 Space er, som alltid, begrenset, men vi vil fortsette å gjøre disse på en nesten 385 00:18:47,990 --> 00:18:51,420 ukentlig basis hvis plassen går ut denne uken. 386 00:18:51,420 --> 00:18:56,160 >> Så cliffhanger at vi slapp på Mandag var at strengene kan faktisk 387 00:18:56,160 --> 00:19:00,520 bli indeksert inn, noe som betyr bare at du kan få ved første tegn, 388 00:19:00,520 --> 00:19:03,770 andre tegn, det tredje tegnet og så videre, fordi du kan 389 00:19:03,770 --> 00:19:07,860 effektivt tenke på en snor, som hallo, som i dette tilfellet fem 390 00:19:07,860 --> 00:19:09,670 bokstaver på innsiden av bokser. 391 00:19:09,670 --> 00:19:13,370 Og du kan få på hver av de bokser med hva syntaks gjorde vi 392 00:19:13,370 --> 00:19:15,230 innføre på mandag? 393 00:19:15,230 --> 00:19:16,760 De klammer på tastaturet. 394 00:19:16,760 --> 00:19:18,980 Det betydde bare gå til plassering null. 395 00:19:18,980 --> 00:19:22,840 >> Vi begynner å telle på null, så brakett null betyr h, en brakett 396 00:19:22,840 --> 00:19:25,170 betegner E, og så videre. 397 00:19:25,170 --> 00:19:28,490 Og så hele tiden når vi har vært hjelp strenger og skrive i "hallo" 398 00:19:28,490 --> 00:19:31,250 og "verden" og andre ting på skjermen, er det blitt lagret 399 00:19:31,250 --> 00:19:32,820 i bokser som dette. 400 00:19:32,820 --> 00:19:33,370 Og ta en gjetning. 401 00:19:33,370 --> 00:19:37,470 Hva hver boks representerer fysisk innsiden av datamaskinen? 402 00:19:37,470 --> 00:19:38,250 >> [Uhørlig]. 403 00:19:38,250 --> 00:19:39,150 >> Sorry? 404 00:19:39,150 --> 00:19:39,580 >> Tegn. 405 00:19:39,580 --> 00:19:44,760 >> Så et tegn, sikkert på grunn av strenger, og et tegn er bare 406 00:19:44,760 --> 00:19:46,800 åtte bits eller én byte. 407 00:19:46,800 --> 00:19:49,550 Slik at du sannsynligvis er minst vagt kjent med det faktum at 408 00:19:49,550 --> 00:19:50,500 datamaskinen har minne. 409 00:19:50,500 --> 00:19:52,110 Den har to typer minne minst. 410 00:19:52,110 --> 00:19:54,810 Den ene er den harddisken der du lagrer stappe permanent, og det er 411 00:19:54,810 --> 00:19:57,400 vanligvis stor slik at du kan ha filmer og musikk og så videre. 412 00:19:57,400 --> 00:20:04,010 >> Da har du en annen type minne kalt RAM, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Minne, og dette er den typen minne som brukes når datamaskinen er 414 00:20:07,510 --> 00:20:11,520 kjører, men hvis du mister makt eller din batteriet dør, noe som er lagret 415 00:20:11,520 --> 00:20:15,300 i RAM forsvinner hvis du mister makt helt fordi det ikke er 416 00:20:15,300 --> 00:20:16,060 vedvarende. 417 00:20:16,060 --> 00:20:19,120 Du vanligvis har, i disse dager, en gig av det, to konserter, kanskje mer. 418 00:20:19,120 --> 00:20:23,490 Og oppsiden av RAM er at det er mye mye, mye raskere enn harddisker 419 00:20:23,490 --> 00:20:27,390 eller Solid State-stasjoner i disse dager, men det er vanligvis dyrere så 420 00:20:27,390 --> 00:20:28,480 du har mindre av det. 421 00:20:28,480 --> 00:20:32,400 >> Så dagens samtale refererer virkelig til RAM, som type minne som 422 00:20:32,400 --> 00:20:35,270 bare eksisterer mens det er strøm blir matet inn i datamaskinen. 423 00:20:35,270 --> 00:20:40,530 Så når du skriver i H-E-L-L-O, Enter på tastaturet, er H går i ett 424 00:20:40,530 --> 00:20:44,550 byte av RAM, er E går i en annen byte RAM, er som 425 00:20:44,550 --> 00:20:45,800 resten av ordet. 426 00:20:45,800 --> 00:20:49,010 Så husker hva vi kunne å gjøre siste gang var dette. 427 00:20:49,010 --> 00:20:53,940 La meg gå videre og åpne opp filen som vi kalte string.c, og husker 428 00:20:53,940 --> 00:20:56,860 at det så litt noe sånt som dette. 429 00:20:56,860 --> 00:20:59,860 La meg faktisk rulle tilbake og endre det til nøyaktig hvordan det så ut, 430 00:20:59,860 --> 00:21:02,654 hyssinglengde på s. 431 00:21:02,654 --> 00:21:04,560 >> Så se på programmet her. 432 00:21:04,560 --> 00:21:08,530 Vi inkluderer CS50 biblioteket slik som vi kan bruke får streng. 433 00:21:08,530 --> 00:21:11,400 Vi inkluderer standard io.h slik at vi kan bruke printf. 434 00:21:11,400 --> 00:21:13,580 Hvorfor gjorde vi inkluderer string.h? 435 00:21:13,580 --> 00:21:16,980 Dette var nytt på mandag. 436 00:21:16,980 --> 00:21:18,230 Så vi ønsket strenglengde. 437 00:21:18,230 --> 00:21:19,090 Str leng. 438 00:21:19,090 --> 00:21:21,470 Folk besluttet år siden, la oss bare være konsis. 439 00:21:21,470 --> 00:21:24,290 I stedet for å kalle det "streng lengde," la oss kalle det "str leng" og la 440 00:21:24,290 --> 00:21:28,540 verden figur som ut, og slik at det er hva vi får tilgang til med string.h. 441 00:21:28,540 --> 00:21:29,390 >> Dette er kjent. 442 00:21:29,390 --> 00:21:30,320 Dette er kjent. 443 00:21:30,320 --> 00:21:31,450 Dette er kjent. 444 00:21:31,450 --> 00:21:32,370 Dette er en lite nytt. 445 00:21:32,370 --> 00:21:35,420 I 22 line - og vi vil komme tilbake til dette, men for nå vet - 446 00:21:35,420 --> 00:21:37,880 og du ville bare vite dette fra å ha Les dokumentasjonen eller hvis 447 00:21:37,880 --> 00:21:39,010 du visste C allerede - 448 00:21:39,010 --> 00:21:41,510 får streng noen ganger kan skru opp. 449 00:21:41,510 --> 00:21:45,130 Hvis brukeren er egentlig motstandere eller lite samarbeidsvillig, og han eller hun bare 450 00:21:45,130 --> 00:21:49,450 ikke skriver ikke noe på tastaturet eller typer så mye på tastaturet som 451 00:21:49,450 --> 00:21:53,760 de overdøver datamaskinens minne, i teorien får streng kunne returnere 452 00:21:53,760 --> 00:21:56,270 noe annet enn en streng med tegn. 453 00:21:56,270 --> 00:22:01,930 Det kunne returnere en spesiell verdi som kalles NULL i store bokstaver, N-U-L-L, og dette er 454 00:22:01,930 --> 00:22:03,390 bare en såkalt fast punkt verdi. 455 00:22:03,390 --> 00:22:08,010 Det er en spesiell verdi som betegner noe dårlig skjedde i dette tilfellet. 456 00:22:08,010 --> 00:22:10,520 Det er fraværet av en streng. 457 00:22:10,520 --> 00:22:16,190 >> Så null Jeg sjekker for rett og slett slik at lang historie kort, str leng og 458 00:22:16,190 --> 00:22:20,230 andre funksjoner som kommer med C, hvis de forventer en streng, men passerer du dem 459 00:22:20,230 --> 00:22:23,630 fravær av en streng, hvis du passerer dem NULL, datamaskinen eller programmet 460 00:22:23,630 --> 00:22:25,000 vil bare krasje direkte. 461 00:22:25,000 --> 00:22:25,610 Det skal henge. 462 00:22:25,610 --> 00:22:27,250 Det vil kaste opp noen feilmelding. 463 00:22:27,250 --> 00:22:28,690 Dårlige ting vil skje. 464 00:22:28,690 --> 00:22:31,130 Så selv om dette er fortsatt ikke godt definert - 465 00:22:31,130 --> 00:22:33,730 Dette vil være mer fornuftig i en uke eller to - på linje 22, er dette bare en 466 00:22:33,730 --> 00:22:38,790 eksempel på selvtillit defensive feilkontroll bare i tilfelle en gang ut av 467 00:22:38,790 --> 00:22:42,040 en million noe går galt, på Minst mitt program ikke vil krasje. 468 00:22:42,040 --> 00:22:45,960 >> Så hvis s ikke lik noe dårlig, Jeg har dette for loop, og dette var 469 00:22:45,960 --> 00:22:47,710 hvor vi hadde den andre nytt stykke av syntaks. 470 00:22:47,710 --> 00:22:51,580 Jeg har en for loop gjentar fra null på opp til lengden av s. 471 00:22:51,580 --> 00:22:56,140 Og så her, var jeg en utskrift ut s brakett i, men hvorfor har jeg bruk% c alle 472 00:22:56,140 --> 00:23:00,770 Plutselig stedet for% s selv men s er en streng? 473 00:23:00,770 --> 00:23:02,110 Det er et tegn, ikke sant? 474 00:23:02,110 --> 00:23:06,560 S er en streng, men s braketten noe, s brakett jeg hvor jeg er null 475 00:23:06,560 --> 00:23:10,380 eller en eller to, er at en person karakter i strengen, og slik for 476 00:23:10,380 --> 00:23:14,970 det, trenger printf å bli informert om at det er faktisk et tegn du kan forvente. 477 00:23:14,970 --> 00:23:18,096 >> Og så husker, gjorde hva dette programmet faktisk gjør? 478 00:23:18,096 --> 00:23:19,848 >> Skrives det ut i kolonner. 479 00:23:19,848 --> 00:23:21,120 >> Ja, akkurat. 480 00:23:21,120 --> 00:23:24,990 Det bare trykte ordet som jeg skriver i en kolonne, ett tegn per linje. 481 00:23:24,990 --> 00:23:26,190 Så la oss se dette igjen. 482 00:23:26,190 --> 00:23:27,810 Så sørg for streng. 483 00:23:27,810 --> 00:23:30,200 Kompilert OK. . / String. 484 00:23:30,200 --> 00:23:35,560 La meg skrive i H-E-L-L-O, Enter, og faktisk jeg får det, ett per linje. 485 00:23:35,560 --> 00:23:37,280 >> Så la meg gjøre en optimalisering her. 486 00:23:37,280 --> 00:23:40,240 Hvis du tenker på det, spesielt hvis du har programmert før, er det 487 00:23:40,240 --> 00:23:43,340 uten tvil en ineffektivitet i tråd 24. 488 00:23:43,340 --> 00:23:46,160 Med andre ord, er det ikke nødvendigvis den beste design. 489 00:23:46,160 --> 00:23:50,200 Grei, i hvert fall når du huske hva str Leng er, men det er 490 00:23:50,200 --> 00:23:52,640 gjør noe dumt potensielt. 491 00:23:52,640 --> 00:23:54,863 Hva kan det være? 492 00:23:54,863 --> 00:23:56,280 >> [Uhørlig]. 493 00:23:56,280 --> 00:23:56,800 >> Nettopp. 494 00:23:56,800 --> 00:24:00,340 Det sjekker for lengden på s hver eneste gang, selv om 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O er alltid kommer å være fem tegn. 496 00:24:02,980 --> 00:24:05,490 Hver gang gjennom denne sløyfen, de fem ikke er i endring. 497 00:24:05,490 --> 00:24:08,750 Jeg kan økes i, men hva er lengden s på hvert 498 00:24:08,750 --> 00:24:09,690 gjentakelse av denne sløyfen? 499 00:24:09,690 --> 00:24:15,810 Det er fem, er det fem, er det fem, og Likevel er jeg likevel spørre dette 500 00:24:15,810 --> 00:24:18,320 spørsmålet igjen og igjen og igjen. 501 00:24:18,320 --> 00:24:20,750 Nå ærlig, er datamaskinen så jævla rask, er det ingen som kommer til å merke en 502 00:24:20,750 --> 00:24:23,780 Forskjellen i dette tilfellet, men slike av dårlig design beslutninger kan 503 00:24:23,780 --> 00:24:28,330 begynner å legge opp hvis kompilatoren selv ikke prøve å fikse dette for deg som 504 00:24:28,330 --> 00:24:30,630 det vanligvis ikke ville, på minst i apparatet. 505 00:24:30,630 --> 00:24:31,540 >> Så jeg kommer til å gjøre dette. 506 00:24:31,540 --> 00:24:34,580 Jeg kommer til å legge til et komma etter min første variabelen, jeg. 507 00:24:34,580 --> 00:24:37,310 Jeg kommer til å gi meg selv en annen variabel, kaller det n, bare ved 508 00:24:37,310 --> 00:24:41,330 konvensjonen for tall, og da er jeg kommer til å tildele n Verdien av strengen 509 00:24:41,330 --> 00:24:42,530 lengden på s. 510 00:24:42,530 --> 00:24:46,060 Og så jeg kommer til å endre min tilstand å være det? 511 00:24:46,060 --> 00:24:51,960 Jeg kommer til å endre min tilstand til mens jeg er mindre enn n. 512 00:24:51,960 --> 00:24:55,700 >> Så nå, hvor mange ganger jeg kontroll av lengden av s? 513 00:24:55,700 --> 00:25:00,110 Gang, men det er greit å sjekke i mot n igjen og igjen fordi nå de 514 00:25:00,110 --> 00:25:03,170 verdier er faktisk ikke forandrer seg. 515 00:25:03,170 --> 00:25:06,020 Nå for nå, bare vet at når du kalle en funksjon, det er litt av 516 00:25:06,020 --> 00:25:09,930 overhead, ikke nok til å ta motet fra deg egentlig fra noensinne å bruke funksjoner, men 517 00:25:09,930 --> 00:25:12,750 sikkert når det er en linje med kode liker det - og linjene vil få 518 00:25:12,750 --> 00:25:15,490 mer interessant før lenge - der det er en mulighet til å tenke at hvis jeg 519 00:25:15,490 --> 00:25:18,320 skriv inn denne koden, hvor mange ganger vil det utføre? 520 00:25:18,320 --> 00:25:20,950 Du vil begynne å se over tid ytelse av programmene kan 521 00:25:20,950 --> 00:25:21,660 faktisk endres. 522 00:25:21,660 --> 00:25:24,110 >> Faktisk anvise en av problemet har vi gjort i år tidligere innebærer 523 00:25:24,110 --> 00:25:27,600 gjennomføring, som du kanskje husker fra uke null, en stavekontroll, men en 524 00:25:27,600 --> 00:25:31,380 stavekontroll som er utformet for å støtte en ordbok på 150.000 pluss 525 00:25:31,380 --> 00:25:32,860 ord som vi gir dere. 526 00:25:32,860 --> 00:25:37,100 Du må skrive kode som laster disse ordene inn i RAM, så inn 527 00:25:37,100 --> 00:25:40,700 bokser som vi så på skjermen et øyeblikk siden, og da så fort du 528 00:25:40,700 --> 00:25:43,740 kan, må du være i stand til å svare på et Spørsmålet av skjemaet, er dette ordet 529 00:25:43,740 --> 00:25:44,280 feilstavet? 530 00:25:44,280 --> 00:25:45,420 Er dette ordet stavet feil? 531 00:25:45,420 --> 00:25:46,770 Er dette ordet stavet feil? 532 00:25:46,770 --> 00:25:49,525 >> Og i noe sånt som at det vi har gjort i år tidligere er slått den inn, 533 00:25:49,525 --> 00:25:53,500 om enn på en opt-in frivillig basis, en konkurranse av former, der 534 00:25:53,500 --> 00:25:59,470 elever som bruker mindre RAM og mindre tid, færre CPU-sykluser, ender opp 535 00:25:59,470 --> 00:26:02,640 bobler opp til toppen av et litt leder styret eller rangering som vi legger på 536 00:26:02,640 --> 00:26:04,770 kursets hjemmeside som vi har gjort i år tidligere. 537 00:26:04,770 --> 00:26:08,100 Så igjen, helt valgfri, men denne taler til design muligheter 538 00:26:08,100 --> 00:26:11,250 som er i forkant når vi starter bygge på toppen av noen av disse 539 00:26:11,250 --> 00:26:14,010 grunnleggende byggesteinene. 540 00:26:14,010 --> 00:26:16,780 >> Så la meg gå tilbake til dette diagrammet for bare et øyeblikk og avslører litt 541 00:26:16,780 --> 00:26:17,610 noe mer. 542 00:26:17,610 --> 00:26:21,400 Dette er faktisk en streng, og vi har tatt Fordelen med noen biblioteker, 543 00:26:21,400 --> 00:26:25,150 standard io.h som har - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, blant annet. 546 00:26:27,860 --> 00:26:31,540 cs50.h, som har få int og få streng og så videre, string.h, som 547 00:26:31,540 --> 00:26:32,570 hadde str leng. 548 00:26:32,570 --> 00:26:34,800 Men det viser seg at det er enda en. 549 00:26:34,800 --> 00:26:38,540 Ærlig talt, det er masse header filer som erklærer funksjoner 550 00:26:38,540 --> 00:26:43,320 for bibliotekene, men dette ctype.h er faktisk kommer til å bli noe 551 00:26:43,320 --> 00:26:46,900 en fordel fordi jeg kommer å gå videre og gjennomføre en 552 00:26:46,900 --> 00:26:48,120 andre program her. 553 00:26:48,120 --> 00:26:52,420 >> La meg gå videre og åpne opp noe Jeg skrev på forhånd kalt 554 00:26:52,420 --> 00:26:55,750 capitalize.c, og la oss ta en titt på hvordan dette fungerer. 555 00:26:55,750 --> 00:27:00,340 Legg merke til at jeg bruker, i denne versjonen av det, tre kjente filer. 556 00:27:00,340 --> 00:27:04,110 Legg merke til at i tråd 18, jeg få en tekstlinje. 557 00:27:04,110 --> 00:27:07,660 Varsel på linje 21, jeg hevde at følgende kode skal 558 00:27:07,660 --> 00:27:12,170 kapitalisere s, hva brukeren har skrevet i, og hvordan gjør jeg det? 559 00:27:12,170 --> 00:27:13,300 Vel, jeg tar - 560 00:27:13,300 --> 00:27:14,750 lekse lært fra forrige gang - 561 00:27:14,750 --> 00:27:18,370 Jeg erklærer jeg og n og iterating over karakterene i strengen. 562 00:27:18,370 --> 00:27:22,720 Og hva er denne blokken av kode på linje 24 gjennom 27 563 00:27:22,720 --> 00:27:24,550 gjør i lekmann vilkår? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Små bokstaver brev tilbake. 566 00:27:29,730 --> 00:27:30,430 >> Nettopp. 567 00:27:30,430 --> 00:27:35,920 Hvis s brakett i - så hvis i-te karakter i s, er der en spesifikk 568 00:27:35,920 --> 00:27:40,220 char i strengen, er større enn eller lik til små bokstaver og et - 569 00:27:40,220 --> 00:27:42,670 husker at dobbel-tegn betegne og - 570 00:27:42,670 --> 00:27:46,810 og samme tegn, s brakett I, er mindre enn eller lik små bokstaver z, 571 00:27:46,810 --> 00:27:50,600 det betyr at det er en a eller en b eller en c eller prikk, prikk, prikk eller en z, noe som betyr 572 00:27:50,600 --> 00:27:51,340 det er små bokstaver. 573 00:27:51,340 --> 00:27:52,900 Hva ønsker jeg å gjøre i dette tilfellet? 574 00:27:52,900 --> 00:27:55,010 Vel, jeg kan gjøre dette litt kryptisk, men 575 00:27:55,010 --> 00:27:56,160 la oss erte dette fra hverandre. 576 00:27:56,160 --> 00:28:00,210 >> Jeg kommer til å kalle printf, skriver% c fordi jeg ønsker å trykke denne 577 00:28:00,210 --> 00:28:01,580 tegn på skjermen. 578 00:28:01,580 --> 00:28:06,650 Jeg er så kommer til å ta s brakett i, den i-ende tegn i s, og deretter hvorfor 579 00:28:06,650 --> 00:28:12,330 gjør jeg dette lille trikset her, små bokstaver et minus kapital A? 580 00:28:12,330 --> 00:28:16,352 Hva som kommer til å gi meg, generelt sett? 581 00:28:16,352 --> 00:28:18,600 >> [Uhørlig]. 582 00:28:18,600 --> 00:28:19,390 >> Nettopp. 583 00:28:19,390 --> 00:28:20,860 Jeg vet egentlig ikke huske - 584 00:28:20,860 --> 00:28:24,390 det var 65 for hovedstaden A. Jeg har egentlig ikke huske hva små bokstaver en er, 585 00:28:24,390 --> 00:28:25,540 men uansett. 586 00:28:25,540 --> 00:28:26,580 Datamaskinen vet. 587 00:28:26,580 --> 00:28:30,380 Så ved å si, små bokstaver et minus kapital A, er det rart å være 588 00:28:30,380 --> 00:28:33,530 subtrahere en char fra en annen, men hva er tegn under panseret? 589 00:28:33,530 --> 00:28:34,520 De er bare tall. 590 00:28:34,520 --> 00:28:36,980 Så uansett hva disse tallene er, la maskinen husker det 591 00:28:36,980 --> 00:28:38,240 snarere enn meg menneske. 592 00:28:38,240 --> 00:28:41,710 >> Så små bokstaver et minus kapital A er kommer til å gi meg en forskjell. 593 00:28:41,710 --> 00:28:45,370 Det skjer for å være 32, og det ville være tilfelle for små b og kapital B 594 00:28:45,370 --> 00:28:45,930 og så videre. 595 00:28:45,930 --> 00:28:47,710 Det forblir konsekvent, heldigvis. 596 00:28:47,710 --> 00:28:51,930 Så jeg er egentlig sier, ta liten bokstav, trekker seg som 597 00:28:51,930 --> 00:28:55,340 standard forskjell, og at effektivt endringer s brakett i fra 598 00:28:55,340 --> 00:28:59,400 små bokstaver til, selvfølgelig, store bokstaver, uten at jeg virkelig måtte tenke 599 00:28:59,400 --> 00:29:03,040 om eller huske, hva var de tallene vi snakket om da de åtte 600 00:29:03,040 --> 00:29:04,800 frivillige kom opp på scenen? 601 00:29:04,800 --> 00:29:08,800 Nå i mellomtiden, i den andre, hvis det ikke er en liten bokstav som bestemmes 602 00:29:08,800 --> 00:29:10,400 for linje 24, bare skrive det ut. 603 00:29:10,400 --> 00:29:12,590 Jeg vil bare berøre tegn som var 604 00:29:12,590 --> 00:29:14,410 faktisk opprinnelig små bokstaver. 605 00:29:14,410 --> 00:29:15,150 >> Så la oss se dette. 606 00:29:15,150 --> 00:29:17,400 Gjør kapitalisere. 607 00:29:17,400 --> 00:29:18,470 Kompilert, OK. 608 00:29:18,470 --> 00:29:19,730 . / Kapitalisere. 609 00:29:19,730 --> 00:29:23,530 Og la meg skrive i H-E-L-L-O med små bokstaver, Enter. 610 00:29:23,530 --> 00:29:26,370 Og legg merke til at den er konvertert inn store bokstaver. 611 00:29:26,370 --> 00:29:27,940 La meg gjøre dette igjen med et annet ord. 612 00:29:27,940 --> 00:29:32,720 Hva med D-A-V-I-D med den første D balanseføres som et navn er typisk? 613 00:29:32,720 --> 00:29:33,560 Enter. 614 00:29:33,560 --> 00:29:34,870 Legg merke til det er fortsatt riktig. 615 00:29:34,870 --> 00:29:40,250 Det bare sendes ut at første D uendret via det annet konstruere. 616 00:29:40,250 --> 00:29:42,170 >> Så husk, da en par ting her. 617 00:29:42,170 --> 00:29:45,060 En, hvis du noen gang ønsker å sjekke to forholdene på en gang, kan du og dem 618 00:29:45,060 --> 00:29:46,500 sammen som vi spådde. 619 00:29:46,500 --> 00:29:49,900 Du kan sammenligne tegn på denne måten og effektivt behandle tegn som 620 00:29:49,900 --> 00:29:53,050 tall, men ærlig, dette er så jævla kryptisk jeg aldri kommer til å huske 621 00:29:53,050 --> 00:29:56,510 hvordan å komme opp med dette fra scratch uten resonnement gjennom det for ganske 622 00:29:56,510 --> 00:29:57,140 litt tid. 623 00:29:57,140 --> 00:30:00,590 >> Ville det ikke vært fint hvis noen ute skrev en funksjon kalles er 624 00:30:00,590 --> 00:30:05,390 lavere som kan svare for meg sant eller falske, er dette tegnet små bokstaver? 625 00:30:05,390 --> 00:30:09,350 Vel heldigvis, den som skrev ctype.h gjorde akkurat det. 626 00:30:09,350 --> 00:30:15,540 La meg gå opp her og legge ctype for c typer, og nå la meg gå ned her og 627 00:30:15,540 --> 00:30:18,820 omskrive denne linje som følger. 628 00:30:18,820 --> 00:30:27,510 >> Så hvis det heter er lavere, jeg hevder, s brakett i, så jeg kommer til å slette 629 00:30:27,510 --> 00:30:29,400 disse to linjene helt. 630 00:30:29,400 --> 00:30:32,570 Så nå noen andre, håper jeg skrev en funksjon som heter er lavere, og det 631 00:30:32,570 --> 00:30:36,250 svinger ut de gjorde, og de erklærte det inni ctype.h. 632 00:30:36,250 --> 00:30:39,480 Og nå skal jeg til å forlate line 27 alene, jeg kommer til å forlate linjen 31 633 00:30:39,480 --> 00:30:41,890 alene, men legger merke til hvor mye jeg har strammet opp min kode. 634 00:30:41,890 --> 00:30:42,690 Det er nå renere. 635 00:30:42,690 --> 00:30:47,250 Det er mindre vanskelig å se gjennom fordi nå funksjonen, dessuten er 636 00:30:47,250 --> 00:30:50,080 så fantastisk heter det bare gjør det de sier. 637 00:30:50,080 --> 00:30:51,520 >> Så nå skal jeg lagre dette. 638 00:30:51,520 --> 00:30:52,930 Jeg kommer til å zoome ut. 639 00:30:52,930 --> 00:30:56,650 Og akkurat som i spillene du kunne ha Boolske, boolske verdier sant eller 640 00:30:56,650 --> 00:31:01,530 falsk, det er akkurat det som er senke effektivt avkastning. 641 00:31:01,530 --> 00:31:02,960 La meg rekompilere. 642 00:31:02,960 --> 00:31:04,500 La meg re-run. 643 00:31:04,500 --> 00:31:07,350 Og la oss nå prøve det igjen, H-E-L-L-O, Enter. 644 00:31:07,350 --> 00:31:07,970 Det er ganske bra. 645 00:31:07,970 --> 00:31:10,150 Og prøve det igjen, sørge for at jeg ikke skru noe opp. 646 00:31:10,150 --> 00:31:11,670 Det er balanseført i tillegg. 647 00:31:11,670 --> 00:31:14,190 >> Men dette er ikke bra nok fordi andre ting som jeg aldri kommer til å 648 00:31:14,190 --> 00:31:19,090 Husker med mindre jeg jobbe gjennom det virkelig nøye på, sier, er papir 649 00:31:19,090 --> 00:31:19,920 denne jævla linje. 650 00:31:19,920 --> 00:31:23,450 Ville det ikke vært fint hvis det var en funksjon kalt til videregående? 651 00:31:23,450 --> 00:31:26,930 Vel det viser seg at det er i ctype.h også. 652 00:31:26,930 --> 00:31:30,150 Jeg kommer til å gå videre og skriver - 653 00:31:30,150 --> 00:31:31,340 la meg ta den linjen tilbake. 654 00:31:31,340 --> 00:31:36,430 I stedet for dette her, la meg gå videre og si erstatning for% c 655 00:31:36,430 --> 00:31:42,110 Resultatet av å kalle denne funksjonen til øvre på i-ende tegn i s. 656 00:31:42,110 --> 00:31:45,430 Og nå merker det begynner å bli litt balansert. 657 00:31:45,430 --> 00:31:48,870 Jeg må holde styr på hvor mange parenteser Jeg har åpnet og lukket. 658 00:31:48,870 --> 00:31:50,050 >> Så nå er det enda renere. 659 00:31:50,050 --> 00:31:53,460 Nå er dette programmet blir bedre og bedre utformet uten tvil fordi det er 660 00:31:53,460 --> 00:31:56,450 mye, mye mer lesbar, men det la ingen er riktig. 661 00:31:56,450 --> 00:31:57,600 Gjør kapitalisere. 662 00:31:57,600 --> 00:31:58,930 . / Kapitalisere. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. La oss kjøre det igjen, D-A-V-I-D. OK, så vi er fortsatt i 664 00:32:03,220 --> 00:32:04,250 ganske god form. 665 00:32:04,250 --> 00:32:06,030 >> Men nå til videregående. 666 00:32:06,030 --> 00:32:09,720 Jeg foreslår at det er ett mer raffinement vi kunne gjøre som ville være 667 00:32:09,720 --> 00:32:12,820 veldig hyggelig, som kunne virkelig stramme opp denne koden og virkelig gi oss fem 668 00:32:12,820 --> 00:32:15,150 av fem for utforming, for eksempel. 669 00:32:15,150 --> 00:32:16,510 Hva ville være fint å bli kvitt? 670 00:32:16,510 --> 00:32:20,770 Vel, se hvor jævla lenge denne blokken av Koden er bare for å gjøre noe enkelt. 671 00:32:20,770 --> 00:32:23,850 >> Nå som en side, som du kanskje har sett i super seksjon denne fortiden 672 00:32:23,850 --> 00:32:27,570 helg, trenger du strengt tatt ikke trenger klammeparentes når du bare har én 673 00:32:27,570 --> 00:32:32,180 kodelinje, selv om vi foreslo holder dem slik at det gjør mye 674 00:32:32,180 --> 00:32:36,190 mer tydelig, som i Scratch er U-formet blokker, hva som er inne i den grenen. 675 00:32:36,190 --> 00:32:40,170 Men ville det ikke vært fint om til øvre, når gitt sin input, snudde det til 676 00:32:40,170 --> 00:32:44,730 store bokstaver hvis det ikke er, og hva ville være flott i motsatt tilfelle hvis 677 00:32:44,730 --> 00:32:47,210 det er allerede store bokstaver? 678 00:32:47,210 --> 00:32:49,620 Bare passerer det gjennom og la det være. 679 00:32:49,620 --> 00:32:50,660 >> Så kanskje det gjør det. 680 00:32:50,660 --> 00:32:52,990 Jeg kan prøve og bare håper at det gjør, men la meg 681 00:32:52,990 --> 00:32:54,450 introdusere en annen ting. 682 00:32:54,450 --> 00:32:57,440 I stedet for å bruke denne innebygde terminal vindu her nede, husker at 683 00:32:57,440 --> 00:33:01,130 denne plassen svart ikon gir deg en større terminal vindu som jeg kan full 684 00:33:01,130 --> 00:33:02,260 skjermen hvis jeg vil? 685 00:33:02,260 --> 00:33:05,820 Så det viser seg at de er liksom merkelig navngitt, men det er disse tingene heter 686 00:33:05,820 --> 00:33:10,970 man-sider, manuelle sider, mann for kort, og jeg kan få tilgang til disse ved 687 00:33:10,970 --> 00:33:14,515 skrive mann - 688 00:33:14,515 --> 00:33:15,570 hva ønsker jeg å skrive? 689 00:33:15,570 --> 00:33:17,830 Man til øvre. 690 00:33:17,830 --> 00:33:21,090 >> Og nå merke hvis det finnes en fungere innsiden av maskinen, i 691 00:33:21,090 --> 00:33:23,970 dette tilfellet apparatet, som er bare operativsystemet Linux, det kommer 692 00:33:23,970 --> 00:33:27,920 å gi meg en noe kryptisk sett utgang, men du finner over tid som 693 00:33:27,920 --> 00:33:31,720 det alltid er formatert ganske mye samme slik at du begynner å bli vant til det. 694 00:33:31,720 --> 00:33:35,130 Legg merke øverst til øvre, og tilsynelatende er den samme dokumentasjonen 695 00:33:35,130 --> 00:33:35,680 for å senke. 696 00:33:35,680 --> 00:33:38,740 Den som skrev det var å kutte noen hjørner og sette det hele på en side. 697 00:33:38,740 --> 00:33:40,720 Disse tingene 'formål i livet er å konvertere en 698 00:33:40,720 --> 00:33:42,780 brev til øvre eller små bokstaver. 699 00:33:42,780 --> 00:33:46,290 >> Legg merke til at under Synopsis, mannen siden lærer meg hvilken fil jeg har 700 00:33:46,290 --> 00:33:48,130 å inkludere for å bruke denne tingen. 701 00:33:48,130 --> 00:33:51,320 Det gir meg underskriftene for disse funksjoner, begge av dem, selv 702 00:33:51,320 --> 00:33:53,510 selv om vi akkurat nå bare bryr seg om en. 703 00:33:53,510 --> 00:33:54,730 Her er nå en beskrivelse. 704 00:33:54,730 --> 00:33:58,800 Til øvre konverterer brevet c til store bokstaver hvis mulig. 705 00:33:58,800 --> 00:34:02,280 >> Fortsatt ikke at lærerikt, men la meg nå ser under returverdi, tingen 706 00:34:02,280 --> 00:34:03,520 som er levert tilbake. 707 00:34:03,520 --> 00:34:08,600 Så den returnerte verdien er at av konvertert brev eller c hvis 708 00:34:08,600 --> 00:34:09,870 konvertering ikke var mulig. 709 00:34:09,870 --> 00:34:11,202 Hva er c? 710 00:34:11,202 --> 00:34:12,560 >> Den opprinnelige karakter. 711 00:34:12,560 --> 00:34:15,370 >> Den opprinnelige karakter, og vi vet at ved, igjen, går opp til 712 00:34:15,370 --> 00:34:19,179 synopsis, og den som skrev dette funksjon nettopp besluttet at inngangen 713 00:34:19,179 --> 00:34:22,909 til å øvre og nedre er bare vilkårlig kommer til å bli kalt c. 714 00:34:22,909 --> 00:34:24,909 De kunne ha kalt det mest noe de vil, men de holdt det 715 00:34:24,909 --> 00:34:26,270 enkelt som c. 716 00:34:26,270 --> 00:34:27,880 Så jeg har konsultert mannen siden. 717 00:34:27,880 --> 00:34:31,870 Denne setningen forsikrer meg at hvis det er ikke en liten bokstav, er det 718 00:34:31,870 --> 00:34:34,969 kommer til å bare gi meg tilbake c, som er perfekt, noe som betyr at jeg kan bli kvitt 719 00:34:34,969 --> 00:34:36,199 min andre tilstand. 720 00:34:36,199 --> 00:34:39,679 >> Så la meg gå tilbake til gedit, og Nå la meg bare gjøre dette. 721 00:34:39,679 --> 00:34:41,960 Jeg kommer til å kopiere min printf uttalelse. 722 00:34:41,960 --> 00:34:45,969 Jeg kommer til å gå videre og rett på innsiden for loop print det ut, og få 723 00:34:45,969 --> 00:34:48,760 kvitt nå hele denne hvis konstruksjon. 724 00:34:48,760 --> 00:34:51,860 Var ikke en dårlig idé, og det var veldig mye riktig og i samsvar med 725 00:34:51,860 --> 00:34:54,100 alt vi har forkynt, men bare ikke nødvendig. 726 00:34:54,100 --> 00:34:57,070 Så snart du oppdager noen bibliotek Funksjonen finnes det noen andre 727 00:34:57,070 --> 00:35:01,340 skrev, eller kanskje du skrev et annet sted i filen, kan du bruke det og virkelig 728 00:35:01,340 --> 00:35:02,690 begynner å stramme opp koden. 729 00:35:02,690 --> 00:35:06,080 >> Og når jeg sier ting som god stil, det faktum at denne personen kalles 730 00:35:06,080 --> 00:35:11,490 fungere til øvre, eller tidligere er lavere er fantastisk nyttig fordi 731 00:35:11,490 --> 00:35:12,900 de er veldig beskrivende. 732 00:35:12,900 --> 00:35:16,120 Du ville ikke ønsker å ringe dine funksjoner x og y og z, som har 733 00:35:16,120 --> 00:35:19,620 mye, mye mindre betydning. 734 00:35:19,620 --> 00:35:25,160 Eventuelle spørsmål om den serien av forbedringer? 735 00:35:25,160 --> 00:35:28,010 >> Så det er nok å si at en av de takeaways er likesom deres eget problem 736 00:35:28,010 --> 00:35:30,960 sett - kanskje problem sett en, men sikkert P satt to og framover, selv 737 00:35:30,960 --> 00:35:34,380 når de er riktig betyr ikke nødvendigvis mener de er perfekt akkurat 738 00:35:34,380 --> 00:35:36,155 ennå, eller spesielt godt designet. 739 00:35:36,155 --> 00:35:38,420 Det er den andre aksen til begynne å tenke på. 740 00:35:38,420 --> 00:35:41,730 Så dette var en streng innsiden av datamaskinens minne, men hvis du har en 741 00:35:41,730 --> 00:35:46,180 hel haug av tegn som H-E-L-L-O innsiden av RAM, og anta 742 00:35:46,180 --> 00:35:51,330 at du i programmet ringe få streng flere ganger slik at du 743 00:35:51,330 --> 00:35:54,200 ring får streng gang, så du ring får streng igjen. 744 00:35:54,200 --> 00:35:55,880 Vel, hva kommer til å skje over tid? 745 00:35:55,880 --> 00:35:59,170 >> Med andre ord, hvis du har en linje med kode, om enn ut av sammenhengen, som 746 00:35:59,170 --> 00:36:02,120 string s blir - 747 00:36:02,120 --> 00:36:02,960 la oss gjøre dette. 748 00:36:02,960 --> 00:36:05,270 String navn tilsvarer får streng. 749 00:36:05,270 --> 00:36:08,590 Så antar at kodelinje er ment å spørre brukeren om hans eller hennes navn. 750 00:36:08,590 --> 00:36:14,580 Denne neste kodelinje er ment å spørre brukeren for hans eller hennes skole, og 751 00:36:14,580 --> 00:36:15,920 denne neste linje, og så videre. 752 00:36:15,920 --> 00:36:18,150 Anta at vi fortsette å spørre brukeren for en annen og 753 00:36:18,150 --> 00:36:19,750 annen og en annen streng. 754 00:36:19,750 --> 00:36:22,390 De kommer til å bo i minnet samtidig. 755 00:36:22,390 --> 00:36:24,280 Man kommer ikke til å clobber den andre. 756 00:36:24,280 --> 00:36:26,420 Skolen er overskriver ikke den andre. 757 00:36:26,420 --> 00:36:28,520 Men hvor gjør de alle ende opp i minnet? 758 00:36:28,520 --> 00:36:32,030 >> Vel, hvis vi begynner å tegne på skjermen, som vi kan bruke denne tingen 759 00:36:32,030 --> 00:36:35,800 her som en tavle, hvis dette svart rektangel representerer datamaskinen min 760 00:36:35,800 --> 00:36:39,800 minne, kommer jeg til å vilkårlig starte dele det opp i små firkanter, 761 00:36:39,800 --> 00:36:42,120 som hver representerer én byte minne. 762 00:36:42,120 --> 00:36:46,560 Ærlig talt, hvis du har en gigabyte RAM i disse dager, har du en milliard bytes 763 00:36:46,560 --> 00:36:49,540 minnet i maskinen din, slik at en milliard av disse rutene. 764 00:36:49,540 --> 00:36:52,110 Så det er nok å si, dette er egentlig ikke å skalere. 765 00:36:52,110 --> 00:36:58,250 >> Men vi kunne holde tegne alle disse åpenbart ikke i riktig målestokk kvadrater, og denne 766 00:36:58,250 --> 00:37:01,260 kollektivt representerer min datamaskinens minne. 767 00:37:01,260 --> 00:37:03,136 Nå er vi bare vil gjøre prikk, prikk, prikk. 768 00:37:03,136 --> 00:37:06,260 Så med andre ord, når jeg nå be bruker med get streng å gi meg en 769 00:37:06,260 --> 00:37:07,350 streng, hva skjer? 770 00:37:07,350 --> 00:37:14,270 Hvis brukeren skriver inn "hallo", som ender opp i H-E-L-L-O. Men antar at den 771 00:37:14,270 --> 00:37:15,720 brukeren deretter typer i - 772 00:37:15,720 --> 00:37:17,250 Egentlig burde jeg ikke ha gjort hei fordi vi ber 773 00:37:17,250 --> 00:37:18,330 dem for deres navn. 774 00:37:18,330 --> 00:37:20,580 Så la oss gå tilbake hvis jeg kan gjøre dette. 775 00:37:20,580 --> 00:37:26,130 >> Så hvis jeg skriver i D-A-V-I-D for mitt navn, men husker at den andre linjen på 776 00:37:26,130 --> 00:37:29,220 koden ble få strengen igjen å få deres skole. 777 00:37:29,220 --> 00:37:32,090 Hvor er det ordet som brukeren typer i kommer til å gå neste? 778 00:37:32,090 --> 00:37:38,290 Vel, kanskje det kommer til å gå inn H-A-R-V-A-R-D. Så selv om jeg har 779 00:37:38,290 --> 00:37:41,560 trukket det som to rader, er dette bare en hel haug med byte i din 780 00:37:41,560 --> 00:37:42,710 datamaskinens RAM. 781 00:37:42,710 --> 00:37:46,560 Det er et problem nå, fordi nå hvis jeg er bruker RAM i denne svært rimelig 782 00:37:46,560 --> 00:37:49,910 men slags naiv måte, hva kan du ikke tilsynelatende skille? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Hvor den ene begynner og hvor en ender, ikke sant? 785 00:37:54,680 --> 00:37:55,860 De er litt uskarpe sammen. 786 00:37:55,860 --> 00:37:57,920 >> Så det viser seg datamaskinen ikke gjør dette. 787 00:37:57,920 --> 00:38:04,720 La meg faktisk bla tilbake i tid tegnene, og i stedet for Harvard 788 00:38:04,720 --> 00:38:09,570 kommer umiddelbart etter brukerens navn, brukeren får faktisk, bak 789 00:38:09,570 --> 00:38:12,000 kulissene, en spesiell karakter satt inn av 790 00:38:12,000 --> 00:38:13,885 datamaskin for ham eller henne. 791 00:38:13,885 --> 00:38:19,470 / 0, ellers kjent som nul karakter plagsomt kalt N-U-L, ikke 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, men du skriver det som / 0. 793 00:38:22,190 --> 00:38:27,130 Det er bare alle null biter er en markør i mellom det første ordet som brukerens 794 00:38:27,130 --> 00:38:28,290 skrevet og det andre. 795 00:38:28,290 --> 00:38:33,020 >> Så Harvard faktisk ender nå opp som denne sekvensen av tegn 796 00:38:33,020 --> 00:38:36,110 og en mer / 0. 797 00:38:36,110 --> 00:38:41,690 Så med andre ord, ved å ha disse fast punkt verdier, åtte sammenhengende null 798 00:38:41,690 --> 00:38:45,220 bits, kan du nå begynne å skille ett tegn fra en annen. 799 00:38:45,220 --> 00:38:49,720 Så hele denne tiden hva som var "hallo" er faktisk "hallo" med a / 0, og 800 00:38:49,720 --> 00:38:53,580 i mellomtiden, det kan godt være ganske litt mer RAM 801 00:38:53,580 --> 00:38:56,400 innsiden av maskinen. 802 00:38:56,400 --> 00:38:57,810 >> La meg gjøre en annen ting nå. 803 00:38:57,810 --> 00:39:01,800 Det viser seg at alle disse rutene vi har vært å tegne, de er, ja, 804 00:39:01,800 --> 00:39:06,140 strenger, men mer generelt, disse tingene er arrays. 805 00:39:06,140 --> 00:39:10,590 En matrise er bare en del av minne det er rygg mot rygg mot rygg mot rygg, 806 00:39:10,590 --> 00:39:15,130 og du som regel bruke en rekke av veien av denne hakeparentes notasjon. 807 00:39:15,130 --> 00:39:18,210 Så vi kommer til å se disse ganske mye over tid, men la meg gå videre og 808 00:39:18,210 --> 00:39:21,160 åpne opp, la oss kalle det aldre. 809 00:39:21,160 --> 00:39:23,920 Og legg merke til hva vi kan gjøre med de samme triksene, litt 810 00:39:23,920 --> 00:39:25,750 litt mer syntaks her. 811 00:39:25,750 --> 00:39:29,270 >> Så i linje 17 av dette programmet - faktisk, la meg kjøre programmet først 812 00:39:29,270 --> 00:39:30,770 så vi kan se hva denne tingen gjør. 813 00:39:30,770 --> 00:39:33,530 La meg kalle gjøre aldre til kompilere dette programmet. 814 00:39:33,530 --> 00:39:34,950 . / Aldre. 815 00:39:34,950 --> 00:39:36,480 Hvor mange mennesker er i rommet? 816 00:39:36,480 --> 00:39:38,020 Kall det tre. 817 00:39:38,020 --> 00:39:39,575 Alder av den første personen? 818 00:39:39,575 --> 00:39:42,710 18, 19, og 20.. 819 00:39:42,710 --> 00:39:46,770 Og nå litt latterlig, bare jeg har laget et program som eldes de 820 00:39:46,770 --> 00:39:47,740 tre personer. 821 00:39:47,740 --> 00:39:50,390 >> Så det er helt klart en mulighet for litt moro aritmetikk her. 822 00:39:50,390 --> 00:39:51,560 Heldigvis er regnestykket riktig. 823 00:39:51,560 --> 00:39:54,720 18 gikk til 19, 19 gikk til 20 og så videre. 824 00:39:54,720 --> 00:39:58,510 Men hva er egentlig ment å være illustrerende her er hvordan vi lagrer 825 00:39:58,510 --> 00:40:00,190 de tre folks aldre. 826 00:40:00,190 --> 00:40:02,370 La meg zoome inn på hva som er skjer her. 827 00:40:02,370 --> 00:40:06,240 >> Så først, disse første linjene bør være å få ganske kjent. 828 00:40:06,240 --> 00:40:08,770 Jeg er bare å spørre brukeren for antall personer i rommet. 829 00:40:08,770 --> 00:40:11,490 Så jeg bruker få int og gjøre mens til gjøre dette igjen og igjen og igjen. 830 00:40:11,490 --> 00:40:15,780 Vi har sett dette mønsteret før, men linje 27 er ny, og faktisk ganske 831 00:40:15,780 --> 00:40:18,160 stoff, og vil bli mer og mer viktig. 832 00:40:18,160 --> 00:40:21,620 Legg merke til at det er annerledes i line 27 er at jeg ser ut til å erklære en 833 00:40:21,620 --> 00:40:23,960 int kalt aldre, men vent. 834 00:40:23,960 --> 00:40:27,140 Det er ikke bare int aldre. 835 00:40:27,140 --> 00:40:30,130 Det er disse klammer, på innsiden av hvilken er n. 836 00:40:30,130 --> 00:40:35,150 >> Så braketten n i denne sammenheng ikke innsiden av en printf uttalelse her, men 837 00:40:35,150 --> 00:40:44,370 i dette eneste linje 27, er denne linje sier, gi meg n ints, som hver 838 00:40:44,370 --> 00:40:46,080 er av type int. 839 00:40:46,080 --> 00:40:49,870 Så dette er en bøtte, så å si, av, i dette tilfellet tre heltall tilbake til 840 00:40:49,870 --> 00:40:52,770 rygg mot rygg slik at jeg effektivt har tre variabler. 841 00:40:52,770 --> 00:40:54,890 Alternativet, å bli klar, ville være dette. 842 00:40:54,890 --> 00:40:57,400 >> Hvis jeg ønsket det første studentens alder, kan jeg gjøre dette. 843 00:40:57,400 --> 00:40:59,520 Hvis jeg ønsket den andre studentens alder jeg kan gjøre dette. 844 00:40:59,520 --> 00:41:01,860 Hvis jeg ønsket den tredje student alder, kan jeg gjøre dette. 845 00:41:01,860 --> 00:41:04,320 Og gud forby vi trenger alles alder i dette rommet - 846 00:41:04,320 --> 00:41:07,670 Jeg mener, dette er en pokker for en masse kopier, lime igjen og igjen og igjen. 847 00:41:07,670 --> 00:41:10,870 Og pluss når jeg kompilere dette programmet, hvis en annen student går inn over seg 848 00:41:10,870 --> 00:41:14,200 av døren, nå nummeret mitt variabler er feil. 849 00:41:14,200 --> 00:41:17,450 >> Så hva er fint om en matrise er som snart du begynner å føle deg selv 850 00:41:17,450 --> 00:41:20,190 kopiere og lime inn, oddsen er det er ikke den beste tilnærmingen. 851 00:41:20,190 --> 00:41:22,240 En rekke er dynamisk potensielt. 852 00:41:22,240 --> 00:41:24,610 Jeg vet ikke på forhånd hvor mange mennesker kommer til å være i rommet, 853 00:41:24,610 --> 00:41:28,670 men jeg vet jeg trenger n av dem, og jeg vil finne ut n når den tid kommer. 854 00:41:28,670 --> 00:41:35,500 Dette kodelinje betyr nå, gi meg en del av minnet som ser slik ut 855 00:41:35,500 --> 00:41:40,380 der antall bokser på skjermen er helt avhengig av at n 856 00:41:40,380 --> 00:41:42,010 brukeren har skrevet i. 857 00:41:42,010 --> 00:41:44,850 >> Så nå resten av dette programmet er faktisk ganske likt det vi 858 00:41:44,850 --> 00:41:46,860 bare gjorde med tegn. 859 00:41:46,860 --> 00:41:49,970 Merker jeg har en for loop starter på linje 30. 860 00:41:49,970 --> 00:41:54,920 Så rett etter at jeg får array, jeg iterere fra y er lik null på opptil n. 861 00:41:54,920 --> 00:41:58,890 Jeg må bare denne lærerikt printf melding sier bare, gi meg en alder 862 00:41:58,890 --> 00:42:03,690 person #% i, så nummer en, nummer to, tre tall. 863 00:42:03,690 --> 00:42:04,730 Og hvorfor gjorde jeg dette? 864 00:42:04,730 --> 00:42:08,870 Oppriktig, mennesker foretrekker å telle fra én på opp mens dataforskere, 865 00:42:08,870 --> 00:42:09,620 null på opp. 866 00:42:09,620 --> 00:42:11,700 dataforskere kommer ikke til å bruke denne typen program, så vi er 867 00:42:11,700 --> 00:42:13,990 kommer til å bare begynne å telle på en som normale mennesker. 868 00:42:13,990 --> 00:42:17,630 >> Og nå på linje 33, ser den litt annerledes stykke syntaks. 869 00:42:17,630 --> 00:42:23,710 I-te alder i at variabel av type matrise kommer til å få en int. 870 00:42:23,710 --> 00:42:25,770 Og nå til slutt, er dette bare aritmetikk her nede. 871 00:42:25,770 --> 00:42:29,200 Jeg bestemte meg i en egen sløyfe for å hevde noen tid har gått, og nå i dette 872 00:42:29,200 --> 00:42:31,400 separat loop, disse linjene utføre. 873 00:42:31,400 --> 00:42:35,810 >> Et år fra nå, personen jeg vil være i år gammel, men merker dette ikke er 874 00:42:35,810 --> 00:42:36,500 variabelen i. 875 00:42:36,500 --> 00:42:38,390 Dette er nå% i for int. 876 00:42:38,390 --> 00:42:43,210 Og legg merke til som den første plassholderen, jeg plug in i pluss ett, så vi telle som en 877 00:42:43,210 --> 00:42:44,250 normal person. 878 00:42:44,250 --> 00:42:49,190 Og så for verdien av deres alder, for i. år gammel, jeg tar aldre brakett 879 00:42:49,190 --> 00:42:52,980 i - og hvorfor gjør jeg pluss en her? 880 00:42:52,980 --> 00:42:53,760 De bare alderen. 881 00:42:53,760 --> 00:42:55,030 Det er min dumme valg av programmer. 882 00:42:55,030 --> 00:42:56,810 De bare alderen ett år. 883 00:42:56,810 --> 00:42:59,770 Jeg kunne skrive inn et tall som Jeg faktisk ønsker det. 884 00:42:59,770 --> 00:43:02,430 >> Så hva er egentlig alle relevansen her? 885 00:43:02,430 --> 00:43:07,610 Vel, la meg faktisk bla tilbake over her og male et bilde 886 00:43:07,610 --> 00:43:10,830 av hva som ligger foran. 887 00:43:10,830 --> 00:43:15,720 Hva vi skal gjøre med vår neste Problem Set To er dabbling i 888 00:43:15,720 --> 00:43:17,070 verden av kryptografi. 889 00:43:17,070 --> 00:43:22,500 Så dette er en streng av tegn, slik at en sekvens av flere tegn, og hva 890 00:43:22,500 --> 00:43:23,750 sier dette? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Det er ikke i den elektroniske versjonen av lysbildene. 893 00:43:30,600 --> 00:43:35,880 >> Så jeg hevder at dette tilsvarer dette en dum reklame fra mange år 894 00:43:35,880 --> 00:43:39,950 siden det kan faktisk huske en av dens opprinnelse. 895 00:43:39,950 --> 00:43:42,740 Så dette er et eksempel på kryptering eller kryptografi. 896 00:43:42,740 --> 00:43:46,150 Det viser seg at hvis du ønsker å faktisk sende informasjon eller dele 897 00:43:46,150 --> 00:43:49,310 informasjon med noen sikker måte, som en melding som dette, kan du 898 00:43:49,310 --> 00:43:50,500 scramble bokstaver. 899 00:43:50,500 --> 00:43:53,170 Men vanligvis, ordene er ikke scrambled tilfeldig. 900 00:43:53,170 --> 00:43:56,365 De er permutert på noen måte eller endres på noen måte slik at - oops. 901 00:43:56,365 --> 00:43:59,040 Det er en morsom spoiler for neste gang. 902 00:43:59,040 --> 00:44:04,390 >> Så du kan kartlegge hva som er tilsynelatende O til B. Legg merke til at linjene opp 903 00:44:04,390 --> 00:44:05,420 kapitalisering-messig. 904 00:44:05,420 --> 00:44:07,960 Angivelig r blir e. 905 00:44:07,960 --> 00:44:14,000 Tilsynelatende F-H-E-R blir S-U-R-E. Så det viser seg at det er en kartlegging, og i 906 00:44:14,000 --> 00:44:18,720 dette tilfellet er det en ganske dum kartlegge om noen har funnet det ut? 907 00:44:18,720 --> 00:44:21,440 Dette er noe som kalles Rot 13, Roter 13. 908 00:44:21,440 --> 00:44:24,760 Det er den dummeste av kryptering mekanismer fordi det bokstavelig talt bare 909 00:44:24,760 --> 00:44:29,160 legger 13 til hver og en av bokstavene, dum i den forstand at hvis du bare 910 00:44:29,160 --> 00:44:31,890 har litt ledig tid på hendene og en blyant, eller du bare tror det 911 00:44:31,890 --> 00:44:35,260 gjennom i hodet ditt, kan du prøve alle mulige filer - en, to, 912 00:44:35,260 --> 00:44:38,470 tre, prikk, prikk, prikk, 25 til bare rotere hele alfabetet, og 913 00:44:38,470 --> 00:44:40,860 slutt, vil du finne ut hva denne meldingen er. 914 00:44:40,860 --> 00:44:43,700 Så hvis du gjorde noe som dette i grunnskolen passerer meldinger til 915 00:44:43,700 --> 00:44:46,830 beste venn, hvis grunnskolen lærer bare lese gjennom 916 00:44:46,830 --> 00:44:50,320 meldingen og utstrakte tvunget løsningen, du kan ha fått 917 00:44:50,320 --> 00:44:52,550 et svar etter det. 918 00:44:52,550 --> 00:44:54,970 >> Nå selvfølgelig, i den virkelige verden, kryptografi er mer sofistikert. 919 00:44:54,970 --> 00:45:00,120 Dette er et tekstutdrag fra en datasystem som har brukernavn og 920 00:45:00,120 --> 00:45:03,630 passord, som nesten alle av oss gjør, og dette er hva passordet makt 921 00:45:03,630 --> 00:45:07,260 se ut hvis det er lagret på harddisken din kjøre, men i kryptert form. 922 00:45:07,260 --> 00:45:11,050 Dette er ikke bare en rotasjon av bokstaver, A er B og B er C. Dette er 923 00:45:11,050 --> 00:45:15,620 mye mer sofistikert, men den bruker hva som er allment kjent som hemmelig nøkkel 924 00:45:15,620 --> 00:45:16,690 kryptografi. 925 00:45:16,690 --> 00:45:20,210 Dette bildet forteller følgende historien med noen få ikoner. 926 00:45:20,210 --> 00:45:22,250 >> På venstre har vi det vi vil kalle ren tekst. 927 00:45:22,250 --> 00:45:25,420 I en verden av kryptografi, vanlig Teksten er bare den opprinnelige meldingen 928 00:45:25,420 --> 00:45:29,050 skrevet på engelsk eller fransk eller hvilket som helst språk overhodet. 929 00:45:29,050 --> 00:45:32,405 Hvis du ønsker å kryptere det, vil vi passere det billedlig gjennom en hengelås, så 930 00:45:32,405 --> 00:45:35,580 noen av slags algoritme, noen funksjon eller et program som noen skrev 931 00:45:35,580 --> 00:45:39,880 at forvrenges bokstavene forhåpentligvis mer complicatedly enn bare å legge 13 932 00:45:39,880 --> 00:45:40,980 til hver av dem. 933 00:45:40,980 --> 00:45:43,780 >> Hva du får ut av denne prosessen i midten er det kalles cyphertext. 934 00:45:43,780 --> 00:45:44,850 Så snilt av en sexy ord. 935 00:45:44,850 --> 00:45:47,630 Det betyr bare det er den krypterte versjon av ren tekst. 936 00:45:47,630 --> 00:45:52,570 Og bare hvis du har den samme hemmelige, 13 eller minus 13, er du i stand til å 937 00:45:52,570 --> 00:45:54,970 dekryptere en melding sånn. 938 00:45:54,970 --> 00:45:57,770 >> Så i oppgavesettet To blant de tingene du skal gjøre om i Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, må du skrive kode for å knekke disse passordene, finne ut 940 00:46:01,860 --> 00:46:05,170 hva de var og hvordan de var kryptert, selv om vi gjør gir deg en bit 941 00:46:05,170 --> 00:46:06,460 av veiledning underveis. 942 00:46:06,460 --> 00:46:09,320 I Standard Edition, innfører vi et par av koder, kryptering 943 00:46:09,320 --> 00:46:12,400 mekanismer, en som heter Cæsar, en kalt Vigenère, som fortsatt 944 00:46:12,400 --> 00:46:16,100 rotasjons chifre der A blir noe, blir B noe, men 945 00:46:16,100 --> 00:46:18,820 du må gjøre det programmatisk fordi det vil faktisk være en hemmelighet 946 00:46:18,820 --> 00:46:22,840 nøkkel involvert som typisk er et tall eller et nøkkelord som kun 947 00:46:22,840 --> 00:46:26,420 avsender og mottaker av disse meldinger skal forstå. 948 00:46:26,420 --> 00:46:28,660 >> Nå har dette faktisk inkarnasjoner i den virkelige verden. 949 00:46:28,660 --> 00:46:32,910 Dette, for eksempel, er lite orphan Annie hemmelige dekoder ring, og du 950 00:46:32,910 --> 00:46:35,180 kan faktisk gjennomføre disse rotasjons chifre - 951 00:46:35,180 --> 00:46:37,930 En blir noe, blir B noe - med et par hjul, 952 00:46:37,930 --> 00:46:40,840 en på utsiden, en på innsiden slik at hvis du roterer hjulet eller 953 00:46:40,840 --> 00:46:44,170 ringen, kan du faktisk stille opp brev med ulike bokstaver, 954 00:46:44,170 --> 00:46:45,430 får en hemmelig kode. 955 00:46:45,430 --> 00:46:48,110 Og så som cliffhanger for i dag, det jeg trodde jeg ville gjøre er litt av 956 00:46:48,110 --> 00:46:52,170 tilbakesteg at hvis du slår på TV den 24. desember, kan du se 957 00:46:52,170 --> 00:46:55,390 film ad nauseum for 24 timer på rad. 958 00:46:55,390 --> 00:47:06,030 Men for i dag, vil jeg åpne den opp her og gir oss bare to minutter av en 959 00:47:06,030 --> 00:47:13,493 pedagogisk relevant Christmas Story med en liten fyr som heter Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [VIDEOAVSPILLING] 961 00:47:14,400 --> 00:47:17,420 >> -Det være kjent for alle og enhver at Ralph Parker er herved utnevnt en 962 00:47:17,420 --> 00:47:20,650 medlem av Little Orphan Annie hemmelighet sirkel og har krav på 963 00:47:20,650 --> 00:47:23,460 æren og fordeler forekommende dertil. 964 00:47:23,460 --> 00:47:25,990 >> -Signed, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Countersigned, Pierre Andre i blekk. 966 00:47:30,100 --> 00:47:34,270 Honors og fordeler allerede i en alder av ni. 967 00:47:34,270 --> 00:47:39,440 >> [SKRIKER PÅ RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Kom igjen, la oss fortsette med det. 969 00:47:40,770 --> 00:47:44,965 Jeg trenger ikke all that jazz om smuglere og pirater. 970 00:47:44,965 --> 00:47:48,270 >> -Lytt morgen kveld for avsluttende eventyr av den svarte 971 00:47:48,270 --> 00:47:49,650 piratskip. 972 00:47:49,650 --> 00:47:53,320 Nå er det tid for Annie Secret Melding for dere medlemmer 973 00:47:53,320 --> 00:47:55,720 av den hemmelige sirkel. 974 00:47:55,720 --> 00:47:56,580 Husk barna. 975 00:47:56,580 --> 00:48:01,720 Bare medlemmer av Annie Secret Circle kan dekode Annie hemmelige budskap. 976 00:48:01,720 --> 00:48:05,872 Husk at Annie avhengig av deg. 977 00:48:05,872 --> 00:48:08,670 Still dine pins til B2. 978 00:48:08,670 --> 00:48:11,000 Her er budskapet. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Jeg er i min første hemmelig møte. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre var i stor stemme i kveld. 983 00:48:21,650 --> 00:48:24,830 Jeg kunne fortelle at kveldens melding var veldig viktig. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25 år. 985 00:48:26,400 --> 00:48:28,540 Det er en melding fra Annie selv. 986 00:48:28,540 --> 00:48:30,086 Husk, ikke si det til noen. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Sekunder senere, jeg er i det eneste rommet i huset der en gutt på ni 989 00:48:38,710 --> 00:48:42,668 kunne sitte i ro og dekode. 990 00:48:42,668 --> 00:48:47,628 Aha, gikk B. jeg til den neste. 991 00:48:47,628 --> 00:48:53,060 E. Det første ordet er "være". S. Det kom lettere nå. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Det er R. 994 00:48:55,940 --> 00:48:56,900 >> -Kom igjen, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Jeg må gå. 996 00:48:57,860 --> 00:48:59,780 >> -Jeg kommer rett ned, Ma. 997 00:48:59,780 --> 00:49:01,030 Jøss. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Pass på å. 1000 00:49:08,220 --> 00:49:09,500 Pass på å hva? 1001 00:49:09,500 --> 00:49:11,660 Hva var Little Orphan Annie prøver å si? 1002 00:49:11,660 --> 00:49:12,844 Pass på å hva? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, har Randy må gå. 1004 00:49:14,732 --> 00:49:16,148 Kan du komme ut? 1005 00:49:16,148 --> 00:49:17,092 >> -Greit, Ma. 1006 00:49:17,092 --> 00:49:18,510 Jeg kommer rett ut. 1007 00:49:18,510 --> 00:49:20,270 >> -Jeg begynte å bli nærmere nå. 1008 00:49:20,270 --> 00:49:21,823 Spenningen var forferdelig. 1009 00:49:21,823 --> 00:49:23,045 Hva var det? 1010 00:49:23,045 --> 00:49:26,510 Skjebnen til planeten kan henge i balanse. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, Randy må gå. 1012 00:49:28,985 --> 00:49:32,680 >> -Jeg kommer rett ut for roper høyt. 1013 00:49:32,680 --> 00:49:33,956 >> -Nesten der. 1014 00:49:33,956 --> 00:49:35,140 Fingrene mine fløy. 1015 00:49:35,140 --> 00:49:36,880 Mitt sinn var en stål felle. 1016 00:49:36,880 --> 00:49:38,010 Hver pore vibrerte. 1017 00:49:38,010 --> 00:49:39,878 Det var nesten klar. 1018 00:49:39,878 --> 00:49:43,210 Ja, ja, ja, ja, ja. 1019 00:49:43,210 --> 00:49:49,030 >> -Sørg for å drikke din Ovaltine. 1020 00:49:49,030 --> 00:49:50,280 Ovaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 En crummy kommersielle? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Son of a bitch. 1025 00:50:00,694 --> 00:50:01,900 >> [END VIDEOAVSPILLING] 1026 00:50:01,900 --> 00:50:04,260 >> SPEAKER 1: Dette er CS50, og at vil være Problem Set Two. 1027 00:50:04,260 --> 00:50:06,305 Se deg neste uke. 1028 00:50:06,305 --> 00:50:08,800 >> SPEAKER 2: Ved neste CS50, skjer dette. 1029 00:50:08,800 --> 00:50:11,060 >> SPEAKER 1: Så ett emne vi har ikke sett på så langt er 1030 00:50:11,060 --> 00:50:12,220 det av funksjonspekere. 1031 00:50:12,220 --> 00:50:14,540 Nå er en funksjon peker bare adressen til en offentlig 1032 00:50:14,540 --> 00:50:17,000 funksjon, men mye som - 1033 00:50:17,000 --> 00:50:18,250 sønn av en - 1034 00:50:18,250 --> 00:50:19,670