1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> SPEAKER 1: Okay. 3 00:00:13,650 --> 00:00:14,390 Velkommen tilbage. 4 00:00:14,390 --> 00:00:19,260 Dette er Uge To af CS50, og vi har hidtil været hjælp af funktioner, men 5 00:00:19,260 --> 00:00:20,830 i høj grad taget dem for givet. 6 00:00:20,830 --> 00:00:23,430 Vi har brugt printf som har bivirkning af udskrivning 7 00:00:23,430 --> 00:00:24,110 ting på skærmen. 8 00:00:24,110 --> 00:00:25,790 Vi har brugt get-int, få flyde. 9 00:00:25,790 --> 00:00:29,230 >> Men hvad nu hvis du rent faktisk ønsker at skabe dine egne funktioner, som nogle af 10 00:00:29,230 --> 00:00:31,740 du måske allerede begyndt at gøre for Problem Set One, selvom 11 00:00:31,740 --> 00:00:33,140 ikke strengt nødvendigt? 12 00:00:33,140 --> 00:00:37,150 Nå, lad os gå videre og gense det problem bare at spørge brugeren om 13 00:00:37,150 --> 00:00:40,660 deres navn og udskrivning noget på skærm, men prøv at faktor nogle 14 00:00:40,660 --> 00:00:44,000 af fællestræk, at vi har ses i vores kode hidtil. 15 00:00:44,000 --> 00:00:45,120 Så ved at jeg mener det følgende. 16 00:00:45,120 --> 00:00:47,315 >> Jeg har tænkt mig at gå videre og skabe et nyt program, skal du blot ringe til 17 00:00:47,315 --> 00:00:49,320 det hello.c som sædvanlig. 18 00:00:49,320 --> 00:00:53,730 Jeg har tænkt mig at gå videre og give mig selv omfatte standard io.h på toppen. 19 00:00:53,730 --> 00:00:57,040 Jeg har tænkt mig at også give mig selv preemptively det CS50 biblioteket, således at 20 00:00:57,040 --> 00:00:59,080 Jeg bliver ikke råbte på af compiler. 21 00:00:59,080 --> 00:01:02,400 Og nu vil jeg gå videre og erklære int, main, ugyldig. 22 00:01:02,400 --> 00:01:09,020 >> Og så her er det, hvor jeg vil at begynde at outsource funktionalitet til 23 00:01:09,020 --> 00:01:12,090 nogle andre funktioner, som jeg selv er kommer til at skrive, men som ikke 24 00:01:12,090 --> 00:01:13,820 findes i dag. 25 00:01:13,820 --> 00:01:19,210 For eksempel antage, at jeg ønskede at skrive en funktion, der tillader mig at 26 00:01:19,210 --> 00:01:23,830 udskrive hej, komma, og derefter nogle brugerens navn. 27 00:01:23,830 --> 00:01:29,010 Snarere end at fortsætte med at gøre printf hej,% s, ville det ikke være rart, hvis 28 00:01:29,010 --> 00:01:33,380 der var bare en funktion kaldet ikke printf men print navn? 29 00:01:33,380 --> 00:01:36,600 >> Så med andre ord, vil jeg være i stand til skrive et program, der gør lidt 30 00:01:36,600 --> 00:01:37,710 noget som dette. 31 00:01:37,710 --> 00:01:42,070 Først vil jeg sige printf din navn, hvorved spørge brugeren til 32 00:01:42,070 --> 00:01:46,150 give mig hans eller hendes navn, og så er jeg kommer til at bruge de velkendte strengen s til 33 00:01:46,150 --> 00:01:47,290 erklære en streng. 34 00:01:47,290 --> 00:01:50,420 Giv mig en variabel af typen string, kalder det s, og opbevares i, at den 35 00:01:50,420 --> 00:01:52,120 følge af ringe få strengen. 36 00:01:52,120 --> 00:01:56,060 Men nu i uger tidligere, ville jeg have noget kedelig gjort hej,% 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 set det fx en masse gange, og det er en 39 00:02:02,570 --> 00:02:05,280 trivielt eksempel fordi der er kun én linje kode, så det er virkelig ikke en 40 00:02:05,280 --> 00:02:06,860 big deal at holde skrive i igen. 41 00:02:06,860 --> 00:02:09,990 Men formoder, at denne linje kode var faktisk ved at blive en byrde, og 42 00:02:09,990 --> 00:02:12,900 det er ikke én linje kode, men det er 10 linjer kode et par uger fra nu, 43 00:02:12,900 --> 00:02:15,190 og du bare at blive træt at kopiere og indsætte eller 44 00:02:15,190 --> 00:02:17,180 genindtastning samme kode. 45 00:02:17,180 --> 00:02:22,100 Ville det ikke være rart i stedet for at gøre printf hej,% s og så videre, 46 00:02:22,100 --> 00:02:26,500 ville det ikke være rart, hvis der var bare en funktion kaldet print navn, 47 00:02:26,500 --> 00:02:27,560 tager et argument - 48 00:02:27,560 --> 00:02:29,120 med andre ord, det tager input - 49 00:02:29,120 --> 00:02:30,620 og derefter semikolon. 50 00:02:30,620 --> 00:02:33,240 Så denne funktion, ville det ikke være rart, hvis der eksisterede? 51 00:02:33,240 --> 00:02:36,690 Så jeg ville ikke have at bekymre sig om hvad printf er, hvad% s og alle 52 00:02:36,690 --> 00:02:39,400 disse komplekse, der er ikke så 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 var desværre ikke opfundet nogle 40 plus år siden. 55 00:02:44,700 --> 00:02:45,980 Ingen troede at skrive det. 56 00:02:45,980 --> 00:02:48,300 Men det er skønheden i at have en programmeringssprog, ligesom i 57 00:02:48,300 --> 00:02:52,930 Scratch kan du definere brugerdefinerede blokke, så i C og de fleste ethvert sprog, kan du 58 00:02:52,930 --> 00:02:57,260 definere din egen funktionalitet, kan du definere dine egne funktioner. 59 00:02:57,260 --> 00:03:01,710 Så selv om vi får main ved automatisk gratis, kan vi erklære 60 00:03:01,710 --> 00:03:02,730 vores egne funktioner. 61 00:03:02,730 --> 00:03:05,670 >> Så jeg har tænkt mig at gøre nogle plads op her up top, og jeg har tænkt mig at erklære min 62 00:03:05,670 --> 00:03:08,210 egen funktion, der kommer til at se en lidt mærkeligt i starten, men vi vil komme 63 00:03:08,210 --> 00:03:09,400 tilbage til denne inden længe. 64 00:03:09,400 --> 00:03:12,310 Jeg har tænkt mig at sige ugyldig, og dermed angiver denne funktion gør 65 00:03:12,310 --> 00:03:16,040 noget, har en bivirkning, men det ikke returnere noget til mig i 66 00:03:16,040 --> 00:03:18,810 samme måde som får int eller få strengen selv gør. 67 00:03:18,810 --> 00:03:22,450 Og jeg har tænkt mig at give denne funktion en Navn på print navn, og jeg har tænkt mig at 68 00:03:22,450 --> 00:03:26,470 angive, at denne fyr kommer til at tage en streng, og jeg har tænkt mig at kalde det 69 00:03:26,470 --> 00:03:27,600 string navn. 70 00:03:27,600 --> 00:03:32,100 Jeg kunne kalde det noget, jeg vil, men jeg vil have min kode til at være selvdokumenterende. 71 00:03:32,100 --> 00:03:34,770 Med andre ord var hvis en af ​​jer til at åbne filen og læse den, du kunne 72 00:03:34,770 --> 00:03:39,020 slags udleder navnet på denne input hvilken rolle det er meningen at spille. 73 00:03:39,020 --> 00:03:42,270 >> Og nu under det, jeg kommer til at åbne klammeparentes og lukkede klammeparentes, 74 00:03:42,270 --> 00:03:47,140 og så opdager jeg har fulgt den samme mønster på linjerne fire gennem syv som 75 00:03:47,140 --> 00:03:51,622 Jeg har fulgt efter en god uge plus nu mellem f.eks linjerne ni og 76 00:03:51,622 --> 00:03:53,400 14, som komponerer main. 77 00:03:53,400 --> 00:03:56,160 Med andre ord, skal du udskrive navn er en anden funktion. 78 00:03:56,160 --> 00:03:58,990 Nu er compileren ikke kommer til at kende at kalde denne ting automatisk 79 00:03:58,990 --> 00:04:02,670 fordi jeg bogstaveligt talt bare opfandt det, men det vil vide stadig at kalde main 80 00:04:02,670 --> 00:04:08,710 automatisk, og så selvfølgelig i linje 13, jeg kalder min egen funktion. 81 00:04:08,710 --> 00:04:12,805 Og fordi jeg har erklæret, at funktionen up on line fire før main, 82 00:04:12,805 --> 00:04:16,579 dette vil lære compiler hvad citerer, citat slut, "print name" 83 00:04:16,579 --> 00:04:18,140 betyder, og hvad den skal gøre. 84 00:04:18,140 --> 00:04:22,700 Så jeg er slags at give den en ny brugerdefineret blokere i forbindelse med, siger, Skrab. 85 00:04:22,700 --> 00:04:27,240 >> Så her kan jeg sætte det meget almindeligt eller tilbagevendende mønster kode jeg holder 86 00:04:27,240 --> 00:04:32,300 skriver i klassen, printf % S hej,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 hvad ønsker jeg at sætte her? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Så jeg ønsker at sætte navn i denne sammenhæng. 91 00:04:41,420 --> 00:04:43,440 Så mærke lidt af en tvedeling her. 92 00:04:43,440 --> 00:04:47,680 Fordi jeg erklære min egen funktion og jeg har noget vilkårligt kaldt 93 00:04:47,680 --> 00:04:50,880 udskrives navn, og fordi jeg har specificeret i parentes, at dette 94 00:04:50,880 --> 00:04:55,035 Funktionen tager et argument, typen af hvilket er en streng - så det er et ord 95 00:04:55,035 --> 00:05:00,010 eller en sætning eller noget - og Jeg ringer dette argument navn, så 96 00:05:00,010 --> 00:05:04,770 betyder den eneste variabel, der er i rækkevidde, så at sige, er navnet. 97 00:05:04,770 --> 00:05:07,780 >> S findes kun mellem, hvad to krøllede parenteser, selvfølgelig? 98 00:05:07,780 --> 00:05:12,990 Nå virkelig, ligesom linie 10 gennem 14, så bare gerne på mandag kan ikke bruge 99 00:05:12,990 --> 00:05:17,650 S, men hvad jeg kan gøre, er pass S i trykken navn. 100 00:05:17,650 --> 00:05:21,030 Print navn bare så sker for at give det et alias, et synonym et kaldenavn, 101 00:05:21,030 --> 00:05:24,400 kalde det navn, og nu bruger det i denne linje. 102 00:05:24,400 --> 00:05:26,840 Så lad mig gemme dette, zoome ud. 103 00:05:26,840 --> 00:05:31,250 >> Lad mig gå videre og gøre hej. 104 00:05:31,250 --> 00:05:32,400 Ser godt ud. 105 00:05:32,400 --> 00:05:36,110 Ikke spytte ud eventuelle fejl. . / Hello Enter. 106 00:05:36,110 --> 00:05:37,020 Hvad er mit navn? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 Og goddag David. 109 00:05:39,270 --> 00:05:41,820 Så ikke alt, spændende, men bare tænk nu. 110 00:05:41,820 --> 00:05:44,310 Du har nu den samme ingrediens som vi gjorde i Scratch til 111 00:05:44,310 --> 00:05:45,420 gøre vores egne funktioner. 112 00:05:45,420 --> 00:05:46,770 >> Men der er lidt af en Gotcha. 113 00:05:46,770 --> 00:05:50,620 Antag, at jeg virkelig ikke havde troet dette igennem, og jeg faktisk uden 114 00:05:50,620 --> 00:05:54,250 virkelig tænke over det skrev denne funktion hernede. 115 00:05:54,250 --> 00:05:55,420 Føles helt rimeligt. 116 00:05:55,420 --> 00:05:58,440 I Scratch er der ingen forestilling af placering i dine scripts. 117 00:05:58,440 --> 00:06:00,670 Du kunne sætte en op her, en op her, en op her, og det kan begynde 118 00:06:00,670 --> 00:06:03,310 at se lidt rodet, hvis du ikke lægge det ud pænt, men det gør ikke 119 00:06:03,310 --> 00:06:05,910 ligegyldigt hvor det er fysisk scripts var på skærmen. 120 00:06:05,910 --> 00:06:09,660 Desværre i C - og det er i modsætning til sprog som Java og Python 121 00:06:09,660 --> 00:06:13,600 og andre, som du kan være bekendt med - desværre i C, rækkefølgen er 122 00:06:13,600 --> 00:06:15,830 noget, fordi ur, hvad der er kommer til at ske nu. 123 00:06:15,830 --> 00:06:19,010 >> Som standard-funktion, der kommer at udføre, er, naturligvis, hoved. 124 00:06:19,010 --> 00:06:22,290 Main kommer til at kalde print navn på line otte, men desværre 125 00:06:22,290 --> 00:06:26,660 compiler vil ikke engang vide, at udskrive navn eksisterer indtil det bliver til linie 11, 126 00:06:26,660 --> 00:06:28,520 som desværre er kommer til at være for sent. 127 00:06:28,520 --> 00:06:30,660 Så lad os gøre gøre hej. 128 00:06:30,660 --> 00:06:32,950 Og nu damn, to fejl genereres. 129 00:06:32,950 --> 00:06:36,050 Så lad mig rulle op til den meget første, som vi altid bør gøre, og 130 00:06:36,050 --> 00:06:39,560 bemærke, at det er råben på mig, "Underforstået erklæring af funktion 131 00:06:39,560 --> 00:06:40,540 print navn. " 132 00:06:40,540 --> 00:06:43,860 >> Så vi har set dette budskab før, implicit erklæring af funktionen. 133 00:06:43,860 --> 00:06:48,080 Hvornår har vi set, at form for fejl? 134 00:06:48,080 --> 00:06:49,180 Da jeg ikke omfatter et bibliotek. 135 00:06:49,180 --> 00:06:53,470 Hvis jeg har glemt cs50.h og jeg ville få råbte på for at få strengen eller få int. 136 00:06:53,470 --> 00:06:56,880 Men i dette tilfælde er denne funktion print navn er ikke et bibliotek, right? 137 00:06:56,880 --> 00:07:00,230 Det er bogstaveligt talt i denne fil, så hvad der virkelig er problemet? 138 00:07:00,230 --> 00:07:04,660 >> Nå desværre i C, det tager dig så utroligt bogstaveligt, at hvis du 139 00:07:04,660 --> 00:07:08,640 ønsker en funktion kaldet print navn til eksisterer, skal du enten nødt til at gennemføre 140 00:07:08,640 --> 00:07:11,940 denne funktion øverst på din kode, så det er tilgængeligt at sænke 141 00:07:11,940 --> 00:07:15,070 funktioner, men helt ærligt, der bliver sjusket meget hurtigt. 142 00:07:15,070 --> 00:07:18,160 Personligt kan jeg godt lide at sætte vigtigste først fordi så er det meget klart, hvad dette 143 00:07:18,160 --> 00:07:19,890 program gør ved første øjekast. 144 00:07:19,890 --> 00:07:23,290 Og plus, kan du komme ind underlig hjørne tilfælde, hvor hvis x ønsker at kalde 145 00:07:23,290 --> 00:07:27,530 y men y kunne kalde x, du bare fysisk kan faktisk ikke sætte en 146 00:07:27,530 --> 00:07:28,540 over den anden. 147 00:07:28,540 --> 00:07:31,230 >> Men det viser sig i C, kan vi løse dette meget enkelt. 148 00:07:31,230 --> 00:07:34,010 Jeg har tænkt mig at sætte en lille smule af plads heroppe, og jeg vil bare 149 00:07:34,010 --> 00:07:38,170 preemptively, omend lidt redundant, gå til at undervise i 150 00:07:38,170 --> 00:07:42,320 compiler, at der findes en funktion kaldet print navn, det tager en streng, 151 00:07:42,320 --> 00:07:46,330 og jeg har tænkt mig at ringe til det navngive semikolon. 152 00:07:46,330 --> 00:07:50,220 >> Så det nu på linje fire, som vi ikke har set før, er en erklæring 153 00:07:50,220 --> 00:07:53,940 for en funktion print navn, men det er kun et løfte, at denne funktion vil 154 00:07:53,940 --> 00:07:56,620 sidst defineres, efterhånden blive gennemført. 155 00:07:56,620 --> 00:08:00,180 Dette nu kan jeg forlade alene fordi nu er dette den definition, den 156 00:08:00,180 --> 00:08:04,090 implementering, sortering af den sidste kilometer af gennemførelsen af ​​dette 157 00:08:04,090 --> 00:08:05,130 særlig funktion. 158 00:08:05,130 --> 00:08:08,450 Så ærligt det er dumt, det er irriterende, men det er den måde C er, og det er 159 00:08:08,450 --> 00:08:12,050 fordi det tager dig meget bogstaveligt og, som en computer ærligt bør 160 00:08:12,050 --> 00:08:16,020 kun gør præcis, hvad du fortæller det til gøre, og således at bestilling er vigtig. 161 00:08:16,020 --> 00:08:18,940 >> Så holder det i tankerne og igen, begynder at mærke til gentagelse af mønstre. 162 00:08:18,940 --> 00:08:21,850 Odds er du vil, hvis du ikke har allerede begynder at støde beskeder 163 00:08:21,850 --> 00:08:24,700 som denne, der ved første øjekast synes helt kryptisk, men hvis du starter 164 00:08:24,700 --> 00:08:29,000 til at lede efter disse centrale ord som "Underforstået erklæring", nævner en 165 00:08:29,000 --> 00:08:32,380 funktion i dette tilfælde - og helt ærligt, du undertiden endda få en lille grøn 166 00:08:32,380 --> 00:08:35,010 gulerod symbol, der fortæller dig, hvor spørgsmålet sandsynligvis er - 167 00:08:35,010 --> 00:08:40,980 kan du begynde at arbejde dig vej gennem endnu usete fejlmeddelelser. 168 00:08:40,980 --> 00:08:45,860 Eventuelle spørgsmål om at skrive din egen funktion på denne måde? 169 00:08:45,860 --> 00:08:47,540 >> Lad os gøre noget, der er en lidt mere overbevisende. 170 00:08:47,540 --> 00:08:51,760 Snarere end blot at gøre noget, der har en bivirkning af udskrivning, så lad mig gå 171 00:08:51,760 --> 00:08:55,340 videre og gemme en ny fil, og vi vil kalder denne positive.c, selvom det er 172 00:08:55,340 --> 00:08:57,600 kommer til at være lidt anderledes versus sidste gang. 173 00:08:57,600 --> 00:09:01,910 Og denne gang vil jeg på ny at gennemføre sidste tids positive.C eksempel, som 174 00:09:01,910 --> 00:09:04,430 er tvinge brugeren til at give mig et positivt heltal. 175 00:09:04,430 --> 00:09:07,280 Men jeg måtte bruge få int sidste gang. 176 00:09:07,280 --> 00:09:10,780 Ville det ikke have været rart, hvis der var en funktion kaldet få positiv int 177 00:09:10,780 --> 00:09:13,610 at jeg bare kunne outsource denne stykke af funktionalitet til? 178 00:09:13,610 --> 00:09:16,480 Så forskellen her er vi vil gennemføre få positive int, men i modsætning til 179 00:09:16,480 --> 00:09:20,330 print navn, som havde en bivirkning - det returnerede ikke noget til mig som 180 00:09:20,330 --> 00:09:21,710 et nummer eller en snor - 181 00:09:21,710 --> 00:09:25,510 få positive int er naturligvis at gå til tilbage, forhåbentlig en positiv int. 182 00:09:25,510 --> 00:09:26,170 >> Så lad os gøre dette. 183 00:09:26,170 --> 00:09:30,840 Medtag cs50.h, Medtag 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 nu her, jeg kommer til at gå videre og lad os sige int, kalder det n er lig 186 00:09:42,160 --> 00:09:44,270 få positive int. 187 00:09:44,270 --> 00:09:49,080 Og ligesom at få int allerede eksisterer fordi personalet skrev det, jeg går 188 00:09:49,080 --> 00:09:53,950 påtage sig for øjeblikket, der får positive int findes, og nu vil jeg 189 00:09:53,950 --> 00:09:57,730 at gå videre og sige printf, tak for% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Så nu, hvis jeg kompilere dette program, hvad kommer til at ske i min terminal 192 00:10:07,770 --> 00:10:09,075 vindue nederst på skærmen? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Jeg har tænkt mig at nok få at samme fejl som før. 195 00:10:13,900 --> 00:10:14,570 Så lad os prøve dette. 196 00:10:14,570 --> 00:10:16,450 Gør positivt. 197 00:10:16,450 --> 00:10:19,900 Og igen, underforstået erklæring af funktion, få positiv int. 198 00:10:19,900 --> 00:10:21,970 Så vi kan løse dette på et par måder. 199 00:10:21,970 --> 00:10:27,310 Jeg har tænkt mig at holde det simpelt og bare sætte min erklæring op her og få 200 00:10:27,310 --> 00:10:28,120 positive int. 201 00:10:28,120 --> 00:10:29,720 Jeg har brug for den såkaldte signatur. 202 00:10:29,720 --> 00:10:32,410 Signaturen netop refererer til æstetik 203 00:10:32,410 --> 00:10:34,090 første linje af programmet. 204 00:10:34,090 --> 00:10:37,420 Så hvad bør få positive int tilbage? 205 00:10:37,420 --> 00:10:37,970 >> Så en int. 206 00:10:37,970 --> 00:10:41,540 Jeg mener ideelt set, ville den vende tilbage noget som positivt int, men at 207 00:10:41,540 --> 00:10:42,160 eksisterer ikke. 208 00:10:42,160 --> 00:10:45,280 Vi har ikke set, at der blandt vores data typer, så vi er nødt til at beskæftige sig med 209 00:10:45,280 --> 00:10:47,170 faktum, at vi har meget få datatyper at arbejde med. 210 00:10:47,170 --> 00:10:50,360 Men vi kan vende tilbage en int og bare tillid til, at det vil være positivt. 211 00:10:50,360 --> 00:10:52,690 Det kommer til at hedde få positive int. 212 00:10:52,690 --> 00:10:55,122 >> Og nu hvor omkring sine argumenter? 213 00:10:55,122 --> 00:10:56,440 Er det tage nogen input? 214 00:10:56,440 --> 00:10:58,280 Er det behøver nogen input? 215 00:10:58,280 --> 00:11:00,900 Så det behøver ikke at vide i forvejen noget. 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 gør - det skal have nogle input passerede ind i det - og udskrive navn 218 00:11:06,430 --> 00:11:09,020 brug for nogle input, men får positive int ikke. 219 00:11:09,020 --> 00:11:11,530 Så jeg har tænkt mig at eksplicit fortælle compiler ugyldig. 220 00:11:11,530 --> 00:11:13,470 Void er fraværet af noget andet. 221 00:11:13,470 --> 00:11:17,990 Så void betyder intet der foregår inde i af disse parenteser. semikolon 222 00:11:17,990 --> 00:11:20,840 >> Og nu på bunden af ​​min fil - og igen, jeg bare bliver slags anal 223 00:11:20,840 --> 00:11:23,640 her sætte main foroven, som er god praksis, fordi denne måde, 224 00:11:23,640 --> 00:11:26,220 når som helst du eller en anden åbner din fil, 225 00:11:26,220 --> 00:11:27,400 funktionaliteten er lige der. 226 00:11:27,400 --> 00:11:29,660 Du kan dykke ind fra udgangspunktet. 227 00:11:29,660 --> 00:11:34,190 Så nu har jeg tænkt mig at duplikere denne, få positive int tomrum, men jeg er ikke 228 00:11:34,190 --> 00:11:35,430 kommer til at ramme et semikolon nu. 229 00:11:35,430 --> 00:11:38,280 Jeg har tænkt mig at åbne krøllede parenteser, og nu har jeg brug for at låne 230 00:11:38,280 --> 00:11:39,700 nogle ideer fra mandag. 231 00:11:39,700 --> 00:11:44,450 >> Så som du husker, vi gjorde noget gerne gøre følgende, mens 232 00:11:44,450 --> 00:11:45,830 noget var sandt. 233 00:11:45,830 --> 00:11:46,630 Og hvad gjorde jeg? 234 00:11:46,630 --> 00:11:51,540 Jeg gjorde noget lignende giver mig et positivt heltal, 235 00:11:51,540 --> 00:11:52,430 lidt af en prompt. 236 00:11:52,430 --> 00:11:53,540 Jeg kunne godt bruge nogle ord, jeg ønsker. 237 00:11:53,540 --> 00:11:54,960 Og så brugte jeg hvad? 238 00:11:54,960 --> 00:11:59,530 Int n er lig med få int, ingen argumenter for det. 239 00:11:59,530 --> 00:12:00,550 >> Og mærke forskellen. 240 00:12:00,550 --> 00:12:04,680 Når du ringer til en funktion, når du bruger en funktion, behøver du ikke sætte i tomrum. 241 00:12:04,680 --> 00:12:08,570 Du skal kun gøre det, når erklære en funktion, undervisning compiler, hvad 242 00:12:08,570 --> 00:12:09,780 det skal forvente. 243 00:12:09,780 --> 00:12:11,650 Så du behøver ikke at sætte ugyldig der selv. 244 00:12:11,650 --> 00:12:12,940 >> Og nu, hvad var min tilstand? 245 00:12:12,940 --> 00:12:19,670 Nå, n er ikke lig med positiv, men det er bare pseudo-kode. 246 00:12:19,670 --> 00:12:22,530 Så hvordan kan jeg udtrykke dette mere rent? 247 00:12:22,530 --> 00:12:24,090 Så mindre end eller lig med nul. 248 00:12:24,090 --> 00:12:26,250 Så igen mærke, at du kan gøre mindre end eller lig med. 249 00:12:26,250 --> 00:12:28,100 Selvom det er to separate symboler, kan du gø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 der er stadig en fejl, Jeg skruet op sidste gang også. 252 00:12:33,950 --> 00:12:36,950 Jeg nødt til at erklære - 253 00:12:36,950 --> 00:12:37,460 nøjagtigt. 254 00:12:37,460 --> 00:12:39,640 Jeg nødt til at erklære n udenfor af løkken. 255 00:12:39,640 --> 00:12:44,180 Så jeg har brug for at sætte n op her, og jeg kan ikke ønsker at re-erklære den her 256 00:12:44,180 --> 00:12:46,480 lest jeg får en ny variabel. 257 00:12:46,480 --> 00:12:48,860 Jeg ønsker blot at tildele en værdi på her. 258 00:12:48,860 --> 00:12:54,320 >> Og nu er jeg ikke helt færdig her. 259 00:12:54,320 --> 00:12:57,290 Lad mig komme foran mig og lader jeg er færdig. 260 00:12:57,290 --> 00:13:01,220 Gør positivt, og nu der er en ny fejl. 261 00:13:01,220 --> 00:13:04,550 Kontrol når til slutningen af non-void funktion. 262 00:13:04,550 --> 00:13:07,760 Så ny fejlmeddelelse, hvis men du slags af drille hinanden hver af de ord, 263 00:13:07,760 --> 00:13:09,620 formentlig antyder hvad der er galt. 264 00:13:09,620 --> 00:13:11,240 >> Kontrollere. 265 00:13:11,240 --> 00:13:14,250 Kontrol betyder bare til bestillingen af operationer i et program. 266 00:13:14,250 --> 00:13:16,510 Computeren er i kontrol og noget gik galt. 267 00:13:16,510 --> 00:13:18,510 Så det når enden af en ikke-void funktion. 268 00:13:18,510 --> 00:13:21,760 Hvilken funktion er det tilsyneladende henvise til? 269 00:13:21,760 --> 00:13:24,790 Hvilken funktion er ikke ugyldig? 270 00:13:24,790 --> 00:13:27,400 Så får positive int, og lidt forvirrende i, godt, 271 00:13:27,400 --> 00:13:29,010 det er lidt ugyldige. 272 00:13:29,010 --> 00:13:33,070 Det har en specifikation af tomrum for sin argumenter, men dens produktion vil 273 00:13:33,070 --> 00:13:34,540 være af typen n. 274 00:13:34,540 --> 00:13:37,260 Så ordet til venstre er den såkaldt returtype. 275 00:13:37,260 --> 00:13:40,320 Ordet på indersiden her er de nul eller flere argumenter 276 00:13:40,320 --> 00:13:41,970 at en funktion tager. 277 00:13:41,970 --> 00:13:44,060 >> Så hvad skal jeg gøre? 278 00:13:44,060 --> 00:13:47,650 På dette tidspunkt i min kode, linje 21, hvor Den blinkende prompt er nu, jeg 279 00:13:47,650 --> 00:13:51,430 have en positiv int inde af variabel kaldet n. 280 00:13:51,430 --> 00:13:55,200 Hvordan giver jeg den tilbage til main? 281 00:13:55,200 --> 00:13:55,960 Bogstaveligt. 282 00:13:55,960 --> 00:13:59,320 Retur n semikolon. 283 00:13:59,320 --> 00:14:04,090 >> Så lige så Colton returneret et stykke af papir med et svar til mig ved at droppe 284 00:14:04,090 --> 00:14:07,020 det stykke papir i den lille sorte boksen på bordet, for at gøre det i 285 00:14:07,020 --> 00:14:10,100 kode, du bogstaveligt talt bare skrive, tilbage n, og det er som om Colton var 286 00:14:10,100 --> 00:14:12,140 rakte mig noget fysisk tilbage. 287 00:14:12,140 --> 00:14:15,870 I dette tilfælde er, hvad der sker får positive int kommer til at aflevere tilbage 288 00:14:15,870 --> 00:14:19,220 hvad er formentlig en positiv heltal til hvem? 289 00:14:19,220 --> 00:14:21,380 Hvor kommer denne værdi ender? 290 00:14:21,380 --> 00:14:29,080 Der ender i denne variabel, n, og så vi videre med linje ni. 291 00:14:29,080 --> 00:14:31,920 >> Så med andre ord, i rækkefølge operationer, dette program starter 292 00:14:31,920 --> 00:14:34,430 udførelse, og compiler indser, åh, du vil have biblioteket? 293 00:14:34,430 --> 00:14:36,310 Lad mig gå grab hvad der er indeni det. 294 00:14:36,310 --> 00:14:37,750 Åh, du ønsker standard IO biblioteket? 295 00:14:37,750 --> 00:14:39,660 Lad mig gå grab hvad der er indeni det. 296 00:14:39,660 --> 00:14:44,510 Hvad betyder compiler sige til sig selv når det rammer linje fire? 297 00:14:44,510 --> 00:14:47,980 Åh, du lovede at gennemføre funktion kaldet få positiv, men 298 00:14:47,980 --> 00:14:50,820 vender vi tilbage til senere, noget langs disse linjer. 299 00:14:50,820 --> 00:14:53,450 >> Int main void betyder blot her er tarme af mit program. 300 00:14:53,450 --> 00:14:54,990 Linje syv er blot en klammeparentes. 301 00:14:54,990 --> 00:14:59,540 Linie otte siger på venstre side, giver me 32 bit til et heltal, kalder det n. 302 00:14:59,540 --> 00:15:02,160 På den højre side, er det siger få positive int. 303 00:15:02,160 --> 00:15:07,120 Lad os nu holde pause den historie, fordi nu Jeg kan ikke holde flytte min markøren ned. 304 00:15:07,120 --> 00:15:11,720 Min cursor nu går ned her, fordi nu få positive int udfører. 305 00:15:11,720 --> 00:15:13,100 Int n deklareres. 306 00:15:13,100 --> 00:15:14,040 Gør følgende. 307 00:15:14,040 --> 00:15:16,090 Printf giver mig et positivt heltal. 308 00:15:16,090 --> 00:15:19,740 >> Få en int fra brugeren, skal det opbevares i n, og måske gøre det igen og igen. 309 00:15:19,740 --> 00:15:23,010 Denne løkke betyder, at denne kode kunne eksekvere op og ned som dette igen 310 00:15:23,010 --> 00:15:25,810 og igen, men når brugeren endelig samarbejder og giver mig en positiv 311 00:15:25,810 --> 00:15:31,750 int, jeg ramte linje 21, på hvilket tidspunkt nummer er afleveret tilbage, og som man 312 00:15:31,750 --> 00:15:34,280 skal jeg fremhæve nu? 313 00:15:34,280 --> 00:15:35,070 Ni. 314 00:15:35,070 --> 00:15:39,010 Kontrol, så at sige, vender til linje ni. 315 00:15:39,010 --> 00:15:40,650 Det er den linje, der er nu i gebyr. 316 00:15:40,650 --> 00:15:43,250 >> Så det er hvad der er sket alle denne gang under hætten, men 317 00:15:43,250 --> 00:15:46,480 når vi har brugt funktioner som printf eller endda få strengen, som en anden 318 00:15:46,480 --> 00:15:50,600 skrev til dig, var kontrollen bliver afleveret off til en andens kode linje 319 00:15:50,600 --> 00:15:51,290 ved linje for linje. 320 00:15:51,290 --> 00:15:53,770 Det er bare vi ikke kunne se det, og vi kunne ikke rigtig skildre den i denne 321 00:15:53,770 --> 00:15:57,620 program, fordi det er på en anden fil på harddisken 322 00:15:57,620 --> 00:16:00,000 ukendt for os. 323 00:16:00,000 --> 00:16:02,100 Så lad os faktisk kompilere og køre det nu. 324 00:16:02,100 --> 00:16:03,890 >> Gør positivt. 325 00:16:03,890 --> 00:16:05,260 Kompiler, det er fremskridt. 326 00:16:05,260 --> 00:16:06,650 . / Positive. 327 00:16:06,650 --> 00:16:08,020 Giv mig et positivt heltal. 328 00:16:08,020 --> 00:16:08,800 Lad os være vanskelig. 329 00:16:08,800 --> 00:16:10,430 Negativ 1.. 330 00:16:10,430 --> 00:16:11,360 Nul. 331 00:16:11,360 --> 00:16:13,370 Lad os give det 50.. 332 00:16:13,370 --> 00:16:18,100 Tak for de 50, og så kontrol er nu vendt tilbage. 333 00:16:18,100 --> 00:16:21,750 Eventuelle spørgsmål, så på det? 334 00:16:21,750 --> 00:16:23,180 Ja? 335 00:16:23,180 --> 00:16:25,630 >> [Uhørligt]. 336 00:16:25,630 --> 00:16:26,130 >> Sig igen. 337 00:16:26,130 --> 00:16:27,860 Åh, godt spørgsmål. 338 00:16:27,860 --> 00:16:31,100 Så du måske bemærke en parallel her, at Jeg er lidt skære et hjørne på. 339 00:16:31,100 --> 00:16:35,420 I linje 12, jeg siger, få positive int returnerer en int, men på det samme 340 00:16:35,420 --> 00:16:39,660 logik, er det nu indlysende, at i line seks, jeg siger, at de vigtigste afkast 341 00:16:39,660 --> 00:16:44,040 en int, men hvad har vi aldrig havde i nogen af ​​vores programmer? 342 00:16:44,040 --> 00:16:46,470 Vi har aldrig haft omtale af denne Nøgleordet tilbage. 343 00:16:46,470 --> 00:16:49,970 >> Så det viser sig, at i C, mindst den version af det, vi bruger 344 00:16:49,970 --> 00:16:55,750 i 1999, teknisk, det er sker automatisk for dig. 345 00:16:55,750 --> 00:16:59,300 Hver gang du gennemfører et program, og du gennemføre en funktion kaldet main, 346 00:16:59,300 --> 00:17:04,230 at funktionen vil returnere nul standard, hvis du ikke siger andet, 347 00:17:04,230 --> 00:17:05,849 og nul er bare en konvention. 348 00:17:05,849 --> 00:17:09,430 Verden returnerer nul derved angiver, at alt er godt, 349 00:17:09,430 --> 00:17:13,040 effektivt forlader os med fire milliarder mulige ting, der kunne gå 350 00:17:13,040 --> 00:17:17,530 galt, så at hvis vi vende tilbage en, der kunne betyde en kode, der betyder 351 00:17:17,530 --> 00:17:18,310 ting gik galt. 352 00:17:18,310 --> 00:17:20,589 Vi kunne vende tilbage to, hvilket betyder denne anden ting gik galt. 353 00:17:20,589 --> 00:17:23,440 Vi kunne vende tilbage fire milliarder, hvilket betyder det anden ting gik galt. 354 00:17:23,440 --> 00:17:27,170 >> Og hvis du nu tænker om din egen PC eller Mac, kan du huske, at 355 00:17:27,170 --> 00:17:29,610 nogle gange får kryptiske fejlmeddelelser fra software, som du er 356 00:17:29,610 --> 00:17:32,650 bruger, og undertiden har en menneskelig venlig beskrivelse, men der er 357 00:17:32,650 --> 00:17:35,265 ofte en kode eller et tal på skærmen? 358 00:17:35,265 --> 00:17:37,800 Hvis dette ikke kommer til at tænke, bare holde øje med det. 359 00:17:37,800 --> 00:17:40,790 Det er typisk, hvad disse koder henviser til. 360 00:17:40,790 --> 00:17:44,200 De er inkluderet i Microsoft Word og andre programmer, så hvis du indgive en 361 00:17:44,200 --> 00:17:48,850 fejlrapport med virksomheden, kan du fortælle dem, åh, jeg fik fejl nummer 45.. 362 00:17:48,850 --> 00:17:51,750 Og nogle programmør tilbage på virksomheden kan se, at op i hans eller hendes 363 00:17:51,750 --> 00:17:54,940 kode og sige, åh, det er fordi jeg gjorde denne fejl, og det er derfor, at brugeren 364 00:17:54,940 --> 00:17:56,240 fik denne meddelelse. 365 00:17:56,240 --> 00:17:59,490 >> Men helt ærligt, det er bare en smule distraherende og lidt besværligt at 366 00:17:59,490 --> 00:18:02,130 konkludere, at i det mindste på vores første par programmer, så vi har 367 00:18:02,130 --> 00:18:02,970 været udelade det. 368 00:18:02,970 --> 00:18:07,450 Men al denne tid hver eneste af dine funktioner main har i al hemmelighed haft dette 369 00:18:07,450 --> 00:18:11,600 line tilføjes automatisk for dig af compiler, bare ved konvention 370 00:18:11,600 --> 00:18:13,172 spare dig tid. 371 00:18:13,172 --> 00:18:14,620 >> [Uhørligt]. 372 00:18:14,620 --> 00:18:16,250 >> Du behøver ikke at medtage den i main. 373 00:18:16,250 --> 00:18:16,700 Det er fint. 374 00:18:16,700 --> 00:18:20,260 Du behøver at medtage det, hvis du var gennemføre en funktion som denne. 375 00:18:20,260 --> 00:18:22,850 Ellers funktion flad ud ville ikke fungere. 376 00:18:22,850 --> 00:18:24,480 Men i main, er det ikke nødvendigt. 377 00:18:24,480 --> 00:18:28,450 I en uge eller to, vil vi begynde at få ind i denne vane, når vi ønsker at starte 378 00:18:28,450 --> 00:18:29,690 signalerer fejl. 379 00:18:29,690 --> 00:18:32,550 Virkelig godt spørgsmål. 380 00:18:32,550 --> 00:18:36,880 >> Så hurtig verbal pause at nævne, at denne fredag, vil vi ikke have frokost 381 00:18:36,880 --> 00:18:39,980 per se, men vi vil være at have middag med nogle af de studerende og ansatte. 382 00:18:39,980 --> 00:18:42,940 Hvis du gerne vil slutte sig til os, føler sig fri til at gå til cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 06:00 denne fredag. 384 00:18:45,030 --> 00:18:47,990 Rummet er, som altid, begrænset, men vi vil fortsætte med at gøre disse på en næsten 385 00:18:47,990 --> 00:18:51,420 ugentlig basis, hvis pladsen løber ud i denne uge. 386 00:18:51,420 --> 00:18:56,160 >> Så den cliffhanger, som vi slap på Mandag var, at strengene kan faktisk 387 00:18:56,160 --> 00:19:00,520 blive indekseret i, hvilket netop betyder, at du kan få på den første karakter, 388 00:19:00,520 --> 00:19:03,770 andet tegn, er det tredje skrifttegn og så videre, fordi du kan 389 00:19:03,770 --> 00:19:07,860 effektivt tænke på en snor, ligesom hej, som værende i dette tilfælde fem 390 00:19:07,860 --> 00:19:09,670 bogstaver inde i kasser. 391 00:19:09,670 --> 00:19:13,370 Og du kan få på hvert af de kasser med, hvad syntaks gjorde vi 392 00:19:13,370 --> 00:19:15,230 introducere på mandag? 393 00:19:15,230 --> 00:19:16,760 Disse firkantede parenteser på dit tastatur. 394 00:19:16,760 --> 00:19:18,980 Det betød bare gå til sted nul. 395 00:19:18,980 --> 00:19:22,840 >> Vi begynder at tælle ved nul, så beslag nul betyder h, beslaget et 396 00:19:22,840 --> 00:19:25,170 betyder e, og så videre. 397 00:19:25,170 --> 00:19:28,490 Og så hele tiden, når vi har været hjælp strings og skrive "hej" 398 00:19:28,490 --> 00:19:31,250 og "verden", og andre ting på skærmen, er det blevet opbevaret 399 00:19:31,250 --> 00:19:32,820 i kasser som denne. 400 00:19:32,820 --> 00:19:33,370 Og tage et gæt. 401 00:19:33,370 --> 00:19:37,470 Hvad betyder hver boks repræsenterer fysisk indersiden af ​​din computer? 402 00:19:37,470 --> 00:19:38,250 >> [Uhørligt]. 403 00:19:38,250 --> 00:19:39,150 >> Undskyld? 404 00:19:39,150 --> 00:19:39,580 >> Tegn. 405 00:19:39,580 --> 00:19:44,760 >> Så et tegn, i hvert fald i tilfælde af strenge, en karakter og er lige 406 00:19:44,760 --> 00:19:46,800 otte bits eller en byte. 407 00:19:46,800 --> 00:19:49,550 Så har du sandsynligvis er mindst vagt bekendt med det faktum, at din 408 00:19:49,550 --> 00:19:50,500 computer har hukommelse. 409 00:19:50,500 --> 00:19:52,110 Det har to typer hukommelse mindst. 410 00:19:52,110 --> 00:19:54,810 Den ene er den harddisk, hvor du gemmer kram permanent, og det er 411 00:19:54,810 --> 00:19:57,400 typisk store, så du kan have film og musik og så videre. 412 00:19:57,400 --> 00:20:04,010 >> Så har du en anden type hukommelse kaldet RAM, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Hukommelse, og det er den type hukommelse der bruges, når computeren er 414 00:20:07,510 --> 00:20:11,520 kører, men hvis du mister magt eller din batteriet dør, noget, der er gemt 415 00:20:11,520 --> 00:20:15,300 i RAM forsvinder, hvis du mister strøm helt, fordi det ikke er 416 00:20:15,300 --> 00:20:16,060 vedholdende. 417 00:20:16,060 --> 00:20:19,120 Du typisk har, i disse dage, en gig af det, to koncerter, måske flere. 418 00:20:19,120 --> 00:20:23,490 Og opadrettede af RAM er, at det er meget meget, meget hurtigere end harddiske 419 00:20:23,490 --> 00:20:27,390 eller endda solid state drev i disse dage, men det er typisk dyrere, så 420 00:20:27,390 --> 00:20:28,480 du har mindre af det. 421 00:20:28,480 --> 00:20:32,400 >> Så dagens samtale virkelig refererer til RAM, at type hukommelse, som 422 00:20:32,400 --> 00:20:35,270 eksisterer kun, mens der er strøm bliver fodret ind i din computer. 423 00:20:35,270 --> 00:20:40,530 Så når du skriver i H-E-L-L-O, på Enter tastaturet er H går i ét 424 00:20:40,530 --> 00:20:44,550 byte RAM, er E går i anden byte RAM, som er 425 00:20:44,550 --> 00:20:45,800 resten af ​​ordet. 426 00:20:45,800 --> 00:20:49,010 Så huske hvad vi kunne at gøre sidste gang var dette. 427 00:20:49,010 --> 00:20:53,940 Lad mig gå videre og åbne filen at vi kaldte string.c og husker 428 00:20:53,940 --> 00:20:56,860 at det kiggede lidt noget som dette. 429 00:20:56,860 --> 00:20:59,860 Lad mig faktisk rulle tilbage og ændre det på præcis, hvad det lignede, 430 00:20:59,860 --> 00:21:02,654 streng længde sek. 431 00:21:02,654 --> 00:21:04,560 >> Så kig på programmet her. 432 00:21:04,560 --> 00:21:08,530 Vi inkluderer CS50 biblioteket, så at vi kan bruge få streng. 433 00:21:08,530 --> 00:21:11,400 Vi inkluderer standard io.h så vi kan bruge printf. 434 00:21:11,400 --> 00:21:13,580 Hvorfor har vi inkluderer string.h? 435 00:21:13,580 --> 00:21:16,980 Det var nyt på mandag. 436 00:21:16,980 --> 00:21:18,230 Så vi ønskede streng længde. 437 00:21:18,230 --> 00:21:19,090 Str Leng. 438 00:21:19,090 --> 00:21:21,470 Folk besluttede år siden, lad os bare være kortfattet. 439 00:21:21,470 --> 00:21:24,290 I stedet for at kalde det "streng længde," lad os kalde det "str Leng", og lad 440 00:21:24,290 --> 00:21:28,540 verdens figur ud af, og så det er hvad vi får adgang til med string.h. 441 00:21:28,540 --> 00:21:29,390 >> Dette er velkendt. 442 00:21:29,390 --> 00:21:30,320 Dette er velkendt. 443 00:21:30,320 --> 00:21:31,450 Dette er velkendt. 444 00:21:31,450 --> 00:21:32,370 Dette er en lille ny. 445 00:21:32,370 --> 00:21:35,420 På linje 22 - og vi vil komme tilbage til dette, men for nu kender - 446 00:21:35,420 --> 00:21:37,880 og du vil kun kender det fra at have læs dokumentationen, eller hvis 447 00:21:37,880 --> 00:21:39,010 du vidste C allerede - 448 00:21:39,010 --> 00:21:41,510 få strengen til tider kan skrue op. 449 00:21:41,510 --> 00:21:45,130 Hvis brugeren er virkelig kontradiktorisk eller usamarbejdsvillig og han eller hun bare 450 00:21:45,130 --> 00:21:49,450 ikke skrive noget på tastaturet eller typer, så meget på tastaturet, der 451 00:21:49,450 --> 00:21:53,760 Det overvælder computerens hukommelse, i teorien få strengen kunne returnere 452 00:21:53,760 --> 00:21:56,270 noget andet end en streng af tegn. 453 00:21:56,270 --> 00:22:01,930 Det kunne returnere en speciel kaldet værdi NULL i alle caps, N-U-L-L, og dette er 454 00:22:01,930 --> 00:22:03,390 blot en såkaldt sentinel værdi. 455 00:22:03,390 --> 00:22:08,010 Det er en særlig værdi, der betyder noget slemt er sket i dette tilfælde. 456 00:22:08,010 --> 00:22:10,520 Det er fraværet af en streng. 457 00:22:10,520 --> 00:22:16,190 >> Så null jeg tjekker for blot at så, lang historie kort, str. Leng og 458 00:22:16,190 --> 00:22:20,230 andre funktioner, der kommer med C, hvis de forventer en streng, men du passerer dem 459 00:22:20,230 --> 00:22:23,630 fraværet af en streng, hvis du passerer dem NULL, computeren eller programmet 460 00:22:23,630 --> 00:22:25,000 vil bare gå ned direkte. 461 00:22:25,000 --> 00:22:25,610 Det vil hænge. 462 00:22:25,610 --> 00:22:27,250 Det vil kaste op nogle fejlmeddelelse. 463 00:22:27,250 --> 00:22:28,690 Dårlige ting vil ske. 464 00:22:28,690 --> 00:22:31,130 Så selvom dette er stadig ikke veldefineret - 465 00:22:31,130 --> 00:22:33,730 dette vil gøre mere mening i en uge eller to - i linie 22, er dette blot en 466 00:22:33,730 --> 00:22:38,790 eksempel af selv defensiv fejlkontrol bare i tilfælde én gang ud af 467 00:22:38,790 --> 00:22:42,040 en million noget går galt, ved mindst mit program ikke vil gå ned. 468 00:22:42,040 --> 00:22:45,960 >> Så hvis s ikke gør lig noget slemt, Jeg har denne for-løkke, og det var 469 00:22:45,960 --> 00:22:47,710 hvor vi havde den anden nyt stykke syntaks. 470 00:22:47,710 --> 00:22:51,580 Jeg har en for-løkke iteration fra nul på op til længden af ​​s. 471 00:22:51,580 --> 00:22:56,140 Og så er her, var jeg et trykkeri ude s beslag i, men hvorfor jeg bruger% c alle 472 00:22:56,140 --> 00:23:00,770 pludselig i stedet for% s selv selvom s er en streng? 473 00:23:00,770 --> 00:23:02,110 Det er et tegn, right? 474 00:23:02,110 --> 00:23:06,560 S er en streng, men s beslag noget, s beslag i hvor i er nul 475 00:23:06,560 --> 00:23:10,380 eller en eller to, som er en individuel tegn i strengen, og så for 476 00:23:10,380 --> 00:23:14,970 at printf skal informeres om, at Det er faktisk et tegn til at forvente. 477 00:23:14,970 --> 00:23:18,096 >> Og så husker, hvad der gjorde det program faktisk gøre? 478 00:23:18,096 --> 00:23:19,848 >> Trykt det ud i kolonner. 479 00:23:19,848 --> 00:23:21,120 >> Ja, præcis. 480 00:23:21,120 --> 00:23:24,990 Det bare udskrevet det ord, som jeg skriver i en kolonne, et tegn per linje. 481 00:23:24,990 --> 00:23:26,190 Så lad os se det igen. 482 00:23:26,190 --> 00:23:27,810 Så gør streng. 483 00:23:27,810 --> 00:23:30,200 Opgjort OK. . / Streng. 484 00:23:30,200 --> 00:23:35,560 Lad mig skrive i H-E-L-L-O, Enter, og ja, jeg får det, én pr linje. 485 00:23:35,560 --> 00:23:37,280 >> Så lad mig gøre én optimering her. 486 00:23:37,280 --> 00:23:40,240 Hvis du tænker over det, især hvis du har programmeret før, er der 487 00:23:40,240 --> 00:23:43,340 velsagtens en ineffektivitet på linje 24.. 488 00:23:43,340 --> 00:23:46,160 Med andre ord, er det ikke nødvendigvis det bedste design. 489 00:23:46,160 --> 00:23:50,200 Ligetil, mindst én gang du huske, hvad str Leng er, men det er 490 00:23:50,200 --> 00:23:52,640 gør noget dumt potentielt. 491 00:23:52,640 --> 00:23:54,863 Hvad kan det være? 492 00:23:54,863 --> 00:23:56,280 >> [Uhørligt]. 493 00:23:56,280 --> 00:23:56,800 >> Præcis. 494 00:23:56,800 --> 00:24:00,340 Det kontrollerer for længden af ​​s hver eneste gang, selvom 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O altid vil til at være fem tegn. 496 00:24:02,980 --> 00:24:05,490 Hver gang gennem denne løkke, de fem ikke ændrer sig. 497 00:24:05,490 --> 00:24:08,750 Jeg kunne være forøgelse i, men hvad er længden af ​​s på hver 498 00:24:08,750 --> 00:24:09,690 iteration af denne løkke? 499 00:24:09,690 --> 00:24:15,810 Det er fem, det er fem, det er fem, og dog er jeg ikke desto mindre stiller dette 500 00:24:15,810 --> 00:24:18,320 spørgsmål igen og igen og igen. 501 00:24:18,320 --> 00:24:20,750 Nu ærligt, at computeren er så pokkers hurtig, er ingen kommer til at mærke en 502 00:24:20,750 --> 00:24:23,780 Forskellen i dette tilfælde, men disse former af fattige design beslutninger kan 503 00:24:23,780 --> 00:24:28,330 begynde at tilføje op, hvis compileren selv forsøger ikke at løse dette for dig, som 504 00:24:28,330 --> 00:24:30,630 det typisk ville ikke på mindst i apparatet. 505 00:24:30,630 --> 00:24:31,540 >> Så jeg har tænkt mig at gøre dette. 506 00:24:31,540 --> 00:24:34,580 Jeg har tænkt mig at tilføje et komma efter min første variabel, dvs. 507 00:24:34,580 --> 00:24:37,310 Jeg har tænkt mig at give mig selv et andet variable, kalder det n, blot ved 508 00:24:37,310 --> 00:24:41,330 konvention for tal, og så er jeg vil tildele n værdien af ​​strengen 509 00:24:41,330 --> 00:24:42,530 længde sek. 510 00:24:42,530 --> 00:24:46,060 Og så jeg har tænkt mig at ændre min tilstand at være, hvad? 511 00:24:46,060 --> 00:24:51,960 Jeg har tænkt mig at ændre min tilstand til, mens jeg er mindre end n. 512 00:24:51,960 --> 00:24:55,700 >> Så nu, hvor mange gange jeg kontrollere længden af ​​s? 513 00:24:55,700 --> 00:25:00,110 Én gang, men det er OK at tjekke jeg imod n igen og igen, fordi nu er der 514 00:25:00,110 --> 00:25:03,170 værdier faktisk ikke ændrer sig. 515 00:25:03,170 --> 00:25:06,020 Nu for nu, ved bare, at hver gang du kalde en funktion, der er lidt af 516 00:25:06,020 --> 00:25:09,930 overhead, ikke nok til at afskrække dig virkelig fra nogensinde at bruge funktioner, men 517 00:25:09,930 --> 00:25:12,750 sikkert, når der er en linje kode lide det - og linjerne får 518 00:25:12,750 --> 00:25:15,490 mere interessant inden længe - hvor der er en mulighed for at tænke, hvis jeg 519 00:25:15,490 --> 00:25:18,320 skriv denne kode, hvor mange tider vil det udføre? 520 00:25:18,320 --> 00:25:20,950 Du vil begynde at se over tid udførelsen af ​​dine programmer kan 521 00:25:20,950 --> 00:25:21,660 faktisk ændre. 522 00:25:21,660 --> 00:25:24,110 >> Faktisk indeholder en af ​​det problem, vi har gjort i de forløbne år indebærer 523 00:25:24,110 --> 00:25:27,600 implementering, som du måske husker fra uge nul, en stavekontrol, men en 524 00:25:27,600 --> 00:25:31,380 Stavekontrol, der er designet til at understøtte en ordbog på 150.000 plus 525 00:25:31,380 --> 00:25:32,860 ord, som vi giver jer. 526 00:25:32,860 --> 00:25:37,100 Du ville have til at skrive kode, der indlæses disse ord i RAM, så ind 527 00:25:37,100 --> 00:25:40,700 bokse som vi så på skærmen et øjeblik siden, og derefter så hurtigt som du 528 00:25:40,700 --> 00:25:43,740 kan, skal du være i stand til at besvare et spørgsmål af formen, er dette ord 529 00:25:43,740 --> 00:25:44,280 stavet forkert? 530 00:25:44,280 --> 00:25:45,420 Er dette ord stavet forkert? 531 00:25:45,420 --> 00:25:46,770 Er dette ord stavet forkert? 532 00:25:46,770 --> 00:25:49,525 >> Og i sådan noget, hvad vi har gjort i de forløbne år er vendt det til, 533 00:25:49,525 --> 00:25:53,500 omend på en opt-in frivillig basis, en konkurrence slags, hvorved 534 00:25:53,500 --> 00:25:59,470 studerende, der bruger mindre RAM og mindre tid, færre CPU-cyklusser, ender 535 00:25:59,470 --> 00:26:02,640 gennemstrømning op til toppen af ​​en lille pointtavlen eller rangering som vi sætter på 536 00:26:02,640 --> 00:26:04,770 kursets hjemmeside, som vi har gjort i de forløbne år. 537 00:26:04,770 --> 00:26:08,100 Så igen helt valgfrit, men dette taler til de konstruktionsmæssige muligheder 538 00:26:08,100 --> 00:26:11,250 der er foran, når vi starter bygning oven nogle af disse 539 00:26:11,250 --> 00:26:14,010 grundlæggende byggesten. 540 00:26:14,010 --> 00:26:16,780 >> Så lad mig gå tilbage til dette diagram for bare et øjeblik og afslører lidt 541 00:26:16,780 --> 00:26:17,610 noget mere. 542 00:26:17,610 --> 00:26:21,400 Dette faktisk er en streng, og vi har taget udnyttede et par biblioteker, 543 00:26:21,400 --> 00:26:25,150 standard io.h der har - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, blandt andre ting. 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 havde str Leng. 548 00:26:32,570 --> 00:26:34,800 Men det viser sig at der er endnu en. 549 00:26:34,800 --> 00:26:38,540 Helt ærligt, der er masser og masser af header filer, der erklærer funktioner 550 00:26:38,540 --> 00:26:43,320 til biblioteker, denne ctype.h men er faktisk kommer til at være noget 551 00:26:43,320 --> 00:26:46,900 fordelagtig, fordi jeg har tænkt mig at gå videre og gennemføre en 552 00:26:46,900 --> 00:26:48,120 andet program her. 553 00:26:48,120 --> 00:26:52,420 >> Lad mig gå videre og åbne op noget Jeg skrev i kaldet forhånd 554 00:26:52,420 --> 00:26:55,750 capitalize.c, og lad os tage et kig på hvordan det virker. 555 00:26:55,750 --> 00:27:00,340 Bemærk, at jeg bruger, i denne version af det,. tre velkendte filer 556 00:27:00,340 --> 00:27:04,110 Bemærk, at på linje 18, er jeg få en linje af tekst. 557 00:27:04,110 --> 00:27:07,660 Bemærk i linje 21, jeg hævder, at følgende kode vil 558 00:27:07,660 --> 00:27:12,170 kapitalisere s, hvad brugeren har indtastet i, og hvordan gør jeg det? 559 00:27:12,170 --> 00:27:13,300 Nå, jeg tager - 560 00:27:13,300 --> 00:27:14,750 lektion lærte fra sidste gang - 561 00:27:14,750 --> 00:27:18,370 Jeg erklærer i og n og iteration over tegn i strengen. 562 00:27:18,370 --> 00:27:22,720 Og hvad er så denne blok af kode i linie 24 gennem 27 563 00:27:22,720 --> 00:27:24,550 gør i lægmandssprog? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Lille bogstav tilbage. 566 00:27:29,730 --> 00:27:30,430 >> Præcis. 567 00:27:30,430 --> 00:27:35,920 Hvis s beslag i - så hvis den i'te karakter s, som er en specifik 568 00:27:35,920 --> 00:27:40,220 char i strengen, er større end eller lig med små bogstaver a og - 569 00:27:40,220 --> 00:27:42,670 minde om, at dobbelt-tegn betyde og - 570 00:27:42,670 --> 00:27:46,810 og den samme karakter, s beslag i, er mindre end eller lig med små bogstaver z, 571 00:27:46,810 --> 00:27:50,600 det betyder, at det er et a eller b eller en c eller dot, dot, dot, eller et z, hvilket betyder 572 00:27:50,600 --> 00:27:51,340 det er små. 573 00:27:51,340 --> 00:27:52,900 Hvad ønsker jeg at gøre i denne sag? 574 00:27:52,900 --> 00:27:55,010 Tja, jeg kan gøre det lidt kryptisk, men 575 00:27:55,010 --> 00:27:56,160 lad os drille det fra hinanden. 576 00:27:56,160 --> 00:28:00,210 >> Jeg har tænkt mig at kalde printf udskriver% c fordi jeg ønsker at genoptrykke denne 577 00:28:00,210 --> 00:28:01,580 tegn på skærmen. 578 00:28:01,580 --> 00:28:06,650 Jeg derefter gå til at tage s beslag i, at i'te karakter i s, og hvorfor 579 00:28:06,650 --> 00:28:12,330 gør jeg dette lille trick her små bogstaver et minus kapital A? 580 00:28:12,330 --> 00:28:16,352 Hvad der kommer til at give mig generelt? 581 00:28:16,352 --> 00:28:18,600 >> [Uhørligt]. 582 00:28:18,600 --> 00:28:19,390 >> Præcis. 583 00:28:19,390 --> 00:28:20,860 Jeg kan ikke rigtig huske - 584 00:28:20,860 --> 00:28:24,390 Det var 65 for kapital A. jeg ikke rigtig huske, hvad små bogstaver a er, 585 00:28:24,390 --> 00:28:25,540 men uanset. 586 00:28:25,540 --> 00:28:26,580 Computeren kender. 587 00:28:26,580 --> 00:28:30,380 Så ved at sige, små bogstaver et minus kapital A, det er underligt at være 588 00:28:30,380 --> 00:28:33,530 trække et tegn fra hinanden, men hvad er tegn under hætten? 589 00:28:33,530 --> 00:28:34,520 De er bare tal. 590 00:28:34,520 --> 00:28:36,980 Så uanset hvad disse numre er, lade computeren huske det 591 00:28:36,980 --> 00:28:38,240 snarere end mig menneske. 592 00:28:38,240 --> 00:28:41,710 >> Så små bogstaver et minus hovedstad A er kommer til at give mig en forskel. 593 00:28:41,710 --> 00:28:45,370 Det sker for at være 32, og det ville være tilfældet for lille 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 Den forbliver konsistent, heldigvis. 596 00:28:47,710 --> 00:28:51,930 Så jeg hovedsageligt siger, tage små bogstaver, trække det 597 00:28:51,930 --> 00:28:55,340 standard forskel, og at ændrer effektivt s beslag i fra 598 00:28:55,340 --> 00:28:59,400 små bogstaver til, naturligvis, store bogstaver, uden min egentlig at skulle tænke 599 00:28:59,400 --> 00:29:03,040 om, eller husk, hvad der var dem numre, vi talte om, når de otte 600 00:29:03,040 --> 00:29:04,800 frivillige kom op på scenen? 601 00:29:04,800 --> 00:29:08,800 Nu mellemtiden, i andet, hvis det ikke er et lille bogstav, som bestemt 602 00:29:08,800 --> 00:29:10,400 af linie 24, printe det bare ud. 603 00:29:10,400 --> 00:29:12,590 Jeg ønsker kun at røre ved tegn, der var 604 00:29:12,590 --> 00:29:14,410 faktisk oprindeligt små bogstaver. 605 00:29:14,410 --> 00:29:15,150 >> Så lad os se dette. 606 00:29:15,150 --> 00:29:17,400 Foretag kapitalisere. 607 00:29:17,400 --> 00:29:18,470 Opgjort, OK. 608 00:29:18,470 --> 00:29:19,730 . / Kapitalisere. 609 00:29:19,730 --> 00:29:23,530 Og lad mig skrive i H-E-L-L-O med små bogstaver, Enter. 610 00:29:23,530 --> 00:29:26,370 Og læg mærke til, at det omdannes ind store bogstaver. 611 00:29:26,370 --> 00:29:27,940 Lad mig gøre det igen med et andet ord. 612 00:29:27,940 --> 00:29:32,720 Hvordan om D-A-V-I-D med den første D kapitaliseret som et navn typisk er? 613 00:29:32,720 --> 00:29:33,560 Enter. 614 00:29:33,560 --> 00:29:34,870 Bemærk det er stadig korrekt. 615 00:29:34,870 --> 00:29:40,250 Det bare udlæst det første D uændret via det andet konstruere. 616 00:29:40,250 --> 00:29:42,170 >> Så husk på, så en par ting her. 617 00:29:42,170 --> 00:29:45,060 One, hvis du nogensinde ønsker at kontrollere to betingelser på en gang, du kan og dem 618 00:29:45,060 --> 00:29:46,500 sammen som vi forudsagde. 619 00:29:46,500 --> 00:29:49,900 Du kan sammenligne tegn på denne måde og effektivt at behandle tegn som 620 00:29:49,900 --> 00:29:53,050 tal, men helt ærligt, det er så pokkers kryptisk Jeg kommer aldrig til at huske 621 00:29:53,050 --> 00:29:56,510 hvordan man kommer op med dette fra bunden uden begrundelse gennem det i ganske 622 00:29:56,510 --> 00:29:57,140 lidt tid. 623 00:29:57,140 --> 00:30:00,590 >> Ville det ikke have været rart, hvis nogen derude skrev en funktion kaldet er 624 00:30:00,590 --> 00:30:05,390 lavere, der kunne svare for mig sandt eller falsk, denne karakter er små bogstaver? 625 00:30:05,390 --> 00:30:09,350 Nå heldigvis, hvem skrev ctype.h gjorde præcis det. 626 00:30:09,350 --> 00:30:15,540 Lad mig gå op her og tilføje ctype for c typer, og nu lade mig gå herned 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 hedder, er mindre, jeg hævder, s beslag i, så jeg har tænkt mig at slette 629 00:30:27,510 --> 00:30:29,400 disse to linjer helt. 630 00:30:29,400 --> 00:30:32,570 Så nu en anden, jeg håber, skrev en funktion kaldet er lavere, og det 631 00:30:32,570 --> 00:30:36,250 Slår de gjorde, og de erklærede det inde i ctype.h. 632 00:30:36,250 --> 00:30:39,480 Og nu vil jeg forlade linje 27 alene, vil jeg lade linie 31 633 00:30:39,480 --> 00:30:41,890 alene, men bemærke, hvor meget jeg har strammet min kode. 634 00:30:41,890 --> 00:30:42,690 Det er nu renere. 635 00:30:42,690 --> 00:30:47,250 Det er mindre vanskeligt at se gennem fordi nu den funktion er i øvrigt 636 00:30:47,250 --> 00:30:50,080 så vidunderligt navngivne det bare gør hvad den siger. 637 00:30:50,080 --> 00:30:51,520 >> Så nu har jeg tænkt mig at gemme denne. 638 00:30:51,520 --> 00:30:52,930 Jeg har tænkt mig at zoome ud. 639 00:30:52,930 --> 00:30:56,650 Og ligesom i Scratch du kunne have Booleans, boolske værdier sandt eller 640 00:30:56,650 --> 00:31:01,530 falsk, det er præcis, hvad der er lavere effektivt afkast. 641 00:31:01,530 --> 00:31:02,960 Lad mig kompilere. 642 00:31:02,960 --> 00:31:04,500 Lad mig re-run. 643 00:31:04,500 --> 00:31:07,350 Og lad os nu prøve det igen, H-E-L-L-O, Enter. 644 00:31:07,350 --> 00:31:07,970 Det er temmelig godt. 645 00:31:07,970 --> 00:31:10,150 Og prøv det igen, sørge for jeg ikke skrue noget op. 646 00:31:10,150 --> 00:31:11,670 Det aktiveres så godt. 647 00:31:11,670 --> 00:31:14,190 >> Men dette er ikke godt nok, fordi anden ting, som jeg aldrig har tænkt mig at 648 00:31:14,190 --> 00:31:19,090 husk medmindre jeg arbejder gennem det virkelig forsigtigt på, siger, papir 649 00:31:19,090 --> 00:31:19,920 den forbandede linje. 650 00:31:19,920 --> 00:31:23,450 Ville det ikke være rart, hvis der var en funktion kaldet til øverste? 651 00:31:23,450 --> 00:31:26,930 Nå det viser sig, at der er i ctype.h samt. 652 00:31:26,930 --> 00:31:30,150 Jeg har tænkt mig at gå videre og skrive - 653 00:31:30,150 --> 00:31:31,340 Lad mig bringe denne linje tilbage. 654 00:31:31,340 --> 00:31:36,430 I stedet for denne her, lad mig gå videre og sige, stedet for den% c. 655 00:31:36,430 --> 00:31:42,110 resultat af at kalde denne funktion til øverste på i-th karakter s. 656 00:31:42,110 --> 00:31:45,430 Og nu mærke til det er at få lidt afbalanceret. 657 00:31:45,430 --> 00:31:48,870 Jeg er nødt til at holde styr på, hvor mange parenteser, jeg har åbnet og lukket. 658 00:31:48,870 --> 00:31:50,050 >> Så nu er det endnu renere. 659 00:31:50,050 --> 00:31:53,460 Nu er dette program bliver bedre og bedre designet velsagtens fordi det er 660 00:31:53,460 --> 00:31:56,450 meget, meget mere læsbar, men det er ikke så lad os rette. 661 00:31:56,450 --> 00:31:57,600 Foretag 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. Lad os køre det igen, D-A-V-I-D. OK, så vi er stadig i 664 00:32:03,220 --> 00:32:04,250 temmelig god figur. 665 00:32:04,250 --> 00:32:06,030 >> Men nu til øverste. 666 00:32:06,030 --> 00:32:09,720 Jeg foreslår, at der er én mere raffinement vi kunne gøre det ville være 667 00:32:09,720 --> 00:32:12,820 virkelig rart, der virkelig kunne strammes op denne kode og virkelig give os fem 668 00:32:12,820 --> 00:32:15,150 ud af fem for design, f.eks. 669 00:32:15,150 --> 00:32:16,510 Hvad ville være rart at slippe af med? 670 00:32:16,510 --> 00:32:20,770 Nå, se hvor pokkers lang tid denne blok af kode er bare at gøre noget simpelt. 671 00:32:20,770 --> 00:32:23,850 >> Nu som en sidebemærkning, som du måske har set i super afsnit denne fortid 672 00:32:23,850 --> 00:32:27,570 weekend, behøver du ikke strengt brug for krøllede parenteser, når du bare har én 673 00:32:27,570 --> 00:32:32,180 linje kode, selvom vi foreslog holde dem så det gør meget 674 00:32:32,180 --> 00:32:36,190 mere klar, ligesom i Scratch er U-formet blokke, hvad der er indeni af filialen. 675 00:32:36,190 --> 00:32:40,170 Men ville det ikke være rart, hvis til øverste, når det gives sit input, vendte det til 676 00:32:40,170 --> 00:32:44,730 store bogstaver, hvis det ikke er, og hvad ville være vidunderligt i den modsatte tilfældet, hvis 677 00:32:44,730 --> 00:32:47,210 det allerede store bogstaver? 678 00:32:47,210 --> 00:32:49,620 Bare passere det gennem og overlade det alene. 679 00:32:49,620 --> 00:32:50,660 >> Så måske det gør det. 680 00:32:50,660 --> 00:32:52,990 Jeg kunne prøve og bare håbe at det gør, men lad mig 681 00:32:52,990 --> 00:32:54,450 introducere en anden ting. 682 00:32:54,450 --> 00:32:57,440 I stedet for at bruge denne indbyggede terminal Vinduet hernede, minde om, at 683 00:32:57,440 --> 00:33:01,130 dette torv sorte ikon giver dig en større terminal vindue, jeg kan fuld 684 00:33:01,130 --> 00:33:02,260 skærmen, hvis jeg vil? 685 00:33:02,260 --> 00:33:05,820 Så det viser sig at de er en slags mærkeligt navngivne, men der er disse kaldet ting 686 00:33:05,820 --> 00:33:10,970 man-sider, manualsider, mand for korte, og jeg kan få adgang til disse ved 687 00:33:10,970 --> 00:33:14,515 skrive mand - 688 00:33:14,515 --> 00:33:15,570 hvad gør jeg vil skrive? 689 00:33:15,570 --> 00:33:17,830 Man til øverste. 690 00:33:17,830 --> 00:33:21,090 >> Og nu mærke til, om der foreligger en fungere inde i computeren, i 691 00:33:21,090 --> 00:33:23,970 dette tilfælde apparatet, som er lige operativsystemet Linux, går det 692 00:33:23,970 --> 00:33:27,920 at give mig en noget kryptisk sæt output, men du vil finde over tid, 693 00:33:27,920 --> 00:33:31,720 det altid er formateret temmelig samme, så du begynder at vænne sig til det. 694 00:33:31,720 --> 00:33:35,130 Bemærk øverst til øverste og tilsyneladende er det samme dokumentation 695 00:33:35,130 --> 00:33:35,680 for at sænke. 696 00:33:35,680 --> 00:33:38,740 Hvem skrev det var at skære nogle hjørner og sætte det hele på én side. 697 00:33:38,740 --> 00:33:40,720 Disse ting 'formål i livet er at konvertere en 698 00:33:40,720 --> 00:33:42,780 brev til øvre eller små bogstaver. 699 00:33:42,780 --> 00:33:46,290 >> Bemærk, at under Synopsis, manden siden er undervisning mig, hvad fil jeg har 700 00:33:46,290 --> 00:33:48,130 at inkludere at bruge denne ting. 701 00:33:48,130 --> 00:33:51,320 Det giver mig signaturen for disse funktioner, både af dem, selv 702 00:33:51,320 --> 00:33:53,510 selvom vi lige nu kun bekymrer sig om én. 703 00:33:53,510 --> 00:33:54,730 Her er nu en beskrivelse. 704 00:33:54,730 --> 00:33:58,800 Til øverste konverterer brevet c til store bogstaver, hvis muligt. 705 00:33:58,800 --> 00:34:02,280 >> Stadig ikke så lærerigt, men lad mig nu se under returværdi, de ting 706 00:34:02,280 --> 00:34:03,520 der er afleveret tilbage. 707 00:34:03,520 --> 00:34:08,600 Så den returnerede værdi er, at den konverterede brev eller c, hvis 708 00:34:08,600 --> 00:34:09,870 omdannelse var ikke muligt. 709 00:34:09,870 --> 00:34:11,202 Hvad er c? 710 00:34:11,202 --> 00:34:12,560 >> Den oprindelige karakter. 711 00:34:12,560 --> 00:34:15,370 >> Den oprindelige karakter, og vi kender at ved igen, går op til 712 00:34:15,370 --> 00:34:19,179 synopsis, og hvem skrev dette Funktionen netop besluttet, at input 713 00:34:19,179 --> 00:34:22,909 til at øvre og nedre er bare vilkårligt kommer til at blive kaldt c.. 714 00:34:22,909 --> 00:34:24,909 De kunne have kaldt det mest noget de vil, men de holdt det 715 00:34:24,909 --> 00:34:26,270 simpelt som ca. 716 00:34:26,270 --> 00:34:27,880 Så jeg har hørt manden siden. 717 00:34:27,880 --> 00:34:31,870 Denne sætning beroliger mig, at hvis det er ikke et lille bogstav, det er 718 00:34:31,870 --> 00:34:34,969 vil bare give mig tilbage C, hvilket er perfekt, hvilket betyder, at jeg kan slippe af med 719 00:34:34,969 --> 00:34:36,199 min ellers tilstand. 720 00:34:36,199 --> 00:34:39,679 >> Så lad mig gå tilbage til gedit, og lad mig bare gøre dette. 721 00:34:39,679 --> 00:34:41,960 Jeg har tænkt mig at kopiere min printf erklæring. 722 00:34:41,960 --> 00:34:45,969 Jeg har tænkt mig at gå videre og lige inde for-løkken print det ud og få 723 00:34:45,969 --> 00:34:48,760 slippe af nu er denne helhed, hvis konstruktion. 724 00:34:48,760 --> 00:34:51,860 Var ikke en dårlig idé, og det var meget meget korrekt og i overensstemmelse med 725 00:34:51,860 --> 00:34:54,100 alt, hvad vi har prædiket, men bare ikke nødvendigt. 726 00:34:54,100 --> 00:34:57,070 Så snart du er klar over nogle biblioteket funktionen eksisterer, at en anden 727 00:34:57,070 --> 00:35:01,340 skrev, eller måske du skrev andetsteds i filen, kan du bruge det og virkelig 728 00:35:01,340 --> 00:35:02,690 begynde at stramme op på koden. 729 00:35:02,690 --> 00:35:06,080 >> Og når jeg siger ting som god stil, det faktum, at denne person kaldes 730 00:35:06,080 --> 00:35:11,490 funktion til øverste eller tidligere er lavere er vidunderligt nyttigt, fordi 731 00:35:11,490 --> 00:35:12,900 de er meget beskrivende. 732 00:35:12,900 --> 00:35:16,120 Du ville ikke ønsker at ringe til dine funktioner x og y og z, som har 733 00:35:16,120 --> 00:35:19,620 meget, meget mindre mening. 734 00:35:19,620 --> 00:35:25,160 Eventuelle spørgsmål vedrørende denne serie forbedringer? 735 00:35:25,160 --> 00:35:28,010 >> Så er det tilstrækkeligt at sige en af ​​de grillbarer er endda så dit eget problem 736 00:35:28,010 --> 00:35:30,960 sæt - måske problem set én, men sikkert P indstille to og fremefter, selv 737 00:35:30,960 --> 00:35:34,380 når de er korrekt ikke nødvendigvis betyde, at de er perfekte lige 738 00:35:34,380 --> 00:35:36,155 endnu, eller særligt veltilrettelagt. 739 00:35:36,155 --> 00:35:38,420 Det er den anden akse til begynde at tænke over. 740 00:35:38,420 --> 00:35:41,730 Så det var en streng inde i dit computerens hukommelse, men hvis du har en 741 00:35:41,730 --> 00:35:46,180 hel masse tegn ligesom på H-E-L-L-O inde i RAM, og formoder 742 00:35:46,180 --> 00:35:51,330 at du i dit program kalder få strengen flere gange, således at man 743 00:35:51,330 --> 00:35:54,200 kalde få strengen én gang, så du kalde få strengen igen. 744 00:35:54,200 --> 00:35:55,880 Nå, hvad sker til ske over tid? 745 00:35:55,880 --> 00:35:59,170 >> Med andre ord, hvis du har en linje af kode, omend ud af kontekst, ligesom 746 00:35:59,170 --> 00:36:02,120 string s får - 747 00:36:02,120 --> 00:36:02,960 lad os gøre det. 748 00:36:02,960 --> 00:36:05,270 String navn lig få streng. 749 00:36:05,270 --> 00:36:08,590 Så antage, at linje kode menes at spørge brugeren om hans eller hendes navn. 750 00:36:08,590 --> 00:36:14,580 Denne næste linje kode er beregnet til at spørge brugeren for hans eller hendes skole, og 751 00:36:14,580 --> 00:36:15,920 denne næste linie, og så videre. 752 00:36:15,920 --> 00:36:18,150 Antag, at vi holde beder brugeren for en anden og 753 00:36:18,150 --> 00:36:19,750 anden og en anden streng. 754 00:36:19,750 --> 00:36:22,390 De kommer til at bo i hukommelsen på samme tid. 755 00:36:22,390 --> 00:36:24,280 Man kommer ikke til at tæske den anden. 756 00:36:24,280 --> 00:36:26,420 Skole er ikke overskrive det andet. 757 00:36:26,420 --> 00:36:28,520 Men hvor gør de alle ender i hukommelsen? 758 00:36:28,520 --> 00:36:32,030 >> Tja, hvis vi begynder at tegne på skærmen, som vi kan bruge denne ting 759 00:36:32,030 --> 00:36:35,800 her som en tavle, hvis denne sorte rektangel repræsenterer min computers 760 00:36:35,800 --> 00:36:39,800 hukommelse, vil jeg vilkårligt starte dividere det op i små firkanter, 761 00:36:39,800 --> 00:36:42,120 hver især repræsenterer en byte hukommelse. 762 00:36:42,120 --> 00:36:46,560 Helt ærligt, hvis du har en gigabyte RAM disse dage, har du en milliard bytes 763 00:36:46,560 --> 00:36:49,540 af hukommelse i din computer, så en milliard af disse kvadrater. 764 00:36:49,540 --> 00:36:52,110 Så er det tilstrækkeligt at sige, at dette er egentlig ikke at skalere. 765 00:36:52,110 --> 00:36:58,250 >> Men vi kunne holde trække alle disse tydeligvis ikke at skalere kvadrater, og dette 766 00:36:58,250 --> 00:37:01,260 kollektivt repræsenterer min computers hukommelse. 767 00:37:01,260 --> 00:37:03,136 Nu vil vi bare gøre dot, dot, dot. 768 00:37:03,136 --> 00:37:06,260 Så med andre ord, når jeg nu bede bruger med get snor at give mig en 769 00:37:06,260 --> 00:37:07,350 streng, hvad sker der? 770 00:37:07,350 --> 00:37:14,270 Hvis brugeren typer i "Hej," der ender i H-E-L-L-O. Men formoder 771 00:37:14,270 --> 00:37:15,720 Brugeren typer i - 772 00:37:15,720 --> 00:37:17,250 Faktisk burde jeg ikke have gjort hej fordi vi beder 773 00:37:17,250 --> 00:37:18,330 dem for deres navne. 774 00:37:18,330 --> 00:37:20,580 Så lad os gå tilbage, hvis jeg kan gøre dette. 775 00:37:20,580 --> 00:37:26,130 >> Så hvis jeg skriver i D-A-V-I-D for mit navn, men minder om, at den anden linje 776 00:37:26,130 --> 00:37:29,220 koden blev få strengen igen for at få deres skole. 777 00:37:29,220 --> 00:37:32,090 Hvor er det ord, som brugeren typer i kommer til at gå næste? 778 00:37:32,090 --> 00:37:38,290 Tja, måske er det kommer til at gå ind i H-A-R-V-A-R-D. Så selvom jeg har 779 00:37:38,290 --> 00:37:41,560 trukket det som to rækker, det er bare en hel bunke af bytes i din 780 00:37:41,560 --> 00:37:42,710 computerens RAM. 781 00:37:42,710 --> 00:37:46,560 Der er et problem nu, fordi nu, hvis jeg hjælp RAM i denne meget rimelige 782 00:37:46,560 --> 00:37:49,910 men slags naiv måde, hvad kan du tilsyneladende ikke skelne? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Hvis en begynder, og hvor man ender, right? 785 00:37:54,680 --> 00:37:55,860 De er slags sløring sammen. 786 00:37:55,860 --> 00:37:57,920 >> Så det viser sig computeren ikke gør dette. 787 00:37:57,920 --> 00:38:04,720 Lad mig faktisk rulle tilbage i tiden et få tegn, og i stedet for Harvard 788 00:38:04,720 --> 00:38:09,570 går umiddelbart efter brugerens navn, brugeren bliver faktisk, bag 789 00:38:09,570 --> 00:38:12,000 kulisserne, en særlig karakter indsat ved 790 00:38:12,000 --> 00:38:13,885 computer for ham eller hende. 791 00:38:13,885 --> 00:38:19,470 / 0, ellers kendt som NUL-tegn irriterende kaldet 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 nul bits er en markør i mellem det første ord, brugerens 794 00:38:27,130 --> 00:38:28,290 maskinskrevet og andet. 795 00:38:28,290 --> 00:38:33,020 >> Så Harvard faktisk nu ender da denne sekvens af tegn 796 00:38:33,020 --> 00:38:36,110 og en mere / 0. 797 00:38:36,110 --> 00:38:41,690 Så med andre ord, ved at have disse sentinel værdier, otte sammenhængende nul 798 00:38:41,690 --> 00:38:45,220 bits, kan du nu begynde at skelne et tegn fra hinanden. 799 00:38:45,220 --> 00:38:49,720 Så al denne tid, hvad der blev "Hej" er faktisk "hej" med en / 0, og 800 00:38:49,720 --> 00:38:53,580 I mellemtiden er der meget vel være ganske lidt mere RAM 801 00:38:53,580 --> 00:38:56,400 indersiden af ​​computeren. 802 00:38:56,400 --> 00:38:57,810 >> Lad mig gøre en anden ting nu. 803 00:38:57,810 --> 00:39:01,800 Det viser sig, at alle disse kvadrater vi har været tegning, de er, ja, 804 00:39:01,800 --> 00:39:06,140 strenge, men mere generelt, disse ting er arrays. 805 00:39:06,140 --> 00:39:10,590 Et array er blot en luns af hukommelse der er tilbage til tilbage til tilbage til tilbage, 806 00:39:10,590 --> 00:39:15,130 og du bruger typisk et array ved hjælp af denne firkantede beslag notation. 807 00:39:15,130 --> 00:39:18,210 Så vi kommer til at se disse ganske lidt over tid, men lad mig gå videre og 808 00:39:18,210 --> 00:39:21,160 åbne op, lad os kalde det aldre. 809 00:39:21,160 --> 00:39:23,920 Og læg mærke til, hvad vi kan gøre med disse samme tricks lidt 810 00:39:23,920 --> 00:39:25,750 lidt mere syntaks her. 811 00:39:25,750 --> 00:39:29,270 >> Så på linje 17 i dette program - faktisk, lad mig køre programmet først 812 00:39:29,270 --> 00:39:30,770 så vi kan se, hvad denne ting gør. 813 00:39:30,770 --> 00:39:33,530 Lad mig kalde lave aldre til kompilere dette program. 814 00:39:33,530 --> 00:39:34,950 . / Aldre. 815 00:39:34,950 --> 00:39:36,480 Hvor mange mennesker er i rummet? 816 00:39:36,480 --> 00:39:38,020 Kald det tre. 817 00:39:38,020 --> 00:39:39,575 Age of den første person? 818 00:39:39,575 --> 00:39:42,710 18, 19 og 20. 819 00:39:42,710 --> 00:39:46,770 Og nu noget latterligt, jeg bare har lavet et program, der aldre dem 820 00:39:46,770 --> 00:39:47,740 tre personer. 821 00:39:47,740 --> 00:39:50,390 >> Så der er helt klart en mulighed for nogle sjove aritmetik her. 822 00:39:50,390 --> 00:39:51,560 Heldigvis math er korrekt. 823 00:39:51,560 --> 00:39:54,720 18 gik til 19, 19, gik til 20 og så videre. 824 00:39:54,720 --> 00:39:58,510 Men hvad der virkelig betød at være illustrative her er hvordan vi opbevaring 825 00:39:58,510 --> 00:40:00,190 disse tre folks aldre. 826 00:40:00,190 --> 00:40:02,370 Lad mig zoome ind på, hvad der er foregår her. 827 00:40:02,370 --> 00:40:06,240 >> Så det første, disse første par linjer bør være at få temmelig bekendt. 828 00:40:06,240 --> 00:40:08,770 Jeg er bare at spørge brugeren om Antallet af personer i lokalet. 829 00:40:08,770 --> 00:40:11,490 Så jeg bruger får int og gøre, mens at gøre det igen og igen og igen. 830 00:40:11,490 --> 00:40:15,780 Vi har set, at mønsteret før, men line 27 er ny og faktisk ret 831 00:40:15,780 --> 00:40:18,160 nyttige, og vil blive mere nyttigt. 832 00:40:18,160 --> 00:40:21,620 Bemærk, at hvad der er anderledes på linje 27 er, at jeg synes at erklære en 833 00:40:21,620 --> 00:40:23,960 int kaldet aldre, men vent. 834 00:40:23,960 --> 00:40:27,140 Det er ikke kun int aldre. 835 00:40:27,140 --> 00:40:30,130 Der er i disse kantede parenteser, inderside er n. 836 00:40:30,130 --> 00:40:35,150 >> Så beslaget n i denne sammenhæng ikke indersiden af ​​en printf erklæring her, men 837 00:40:35,150 --> 00:40:44,370 i denne ene linje 27, er denne linje sagde, giv mig n ints, som hver især 838 00:40:44,370 --> 00:40:46,080 er af typen int. 839 00:40:46,080 --> 00:40:49,870 Så dette er en spand, så at sige, af, i dette tilfælde, at tre heltal tilbage 840 00:40:49,870 --> 00:40:52,770 tilbage til tilbage, så jeg effektivt have tre variabler. 841 00:40:52,770 --> 00:40:54,890 Alternativet, for at være klar, ville være det. 842 00:40:54,890 --> 00:40:57,400 >> Hvis jeg ønskede den første studerendes alder, kunne jeg gøre dette. 843 00:40:57,400 --> 00:40:59,520 Hvis jeg ville den anden elevs alder, jeg kan gøre dette. 844 00:40:59,520 --> 00:41:01,860 Hvis jeg ønskede det tredje studerendes alder, kunne jeg gøre dette. 845 00:41:01,860 --> 00:41:04,320 Og Gud forbyde vi har brug for alles alder i dette rum - 846 00:41:04,320 --> 00:41:07,670 Jeg mener, det er en pokkers af en masse kopi, indsætte igen og igen og igen. 847 00:41:07,670 --> 00:41:10,870 Og plus når jeg kompilere dette program, hvis en anden elev går ind over ud 848 00:41:10,870 --> 00:41:14,200 af den dør, som nu mit nummer variabler er forkert. 849 00:41:14,200 --> 00:41:17,450 >> Så hvad er rart om et array er så snart du begynder at føle dig 850 00:41:17,450 --> 00:41:20,190 kopiere og indsætte, er odds, der er ikke den bedste fremgangsmåde. 851 00:41:20,190 --> 00:41:22,240 Et array er dynamisk potentielt. 852 00:41:22,240 --> 00:41:24,610 Jeg kender ikke på forhånd, hvor mange mennesker kommer til at være i rummet, 853 00:41:24,610 --> 00:41:28,670 men jeg ved, jeg har brug for n af dem, og jeg vil regne ud n når den tid kommer. 854 00:41:28,670 --> 00:41:35,500 Denne linje kode betyder nu, giv mig et luns af hukommelse, der ser sådan ud 855 00:41:35,500 --> 00:41:40,380 hvor antallet af kasser på skærmen er helt afhængig af n som 856 00:41:40,380 --> 00:41:42,010 brugeren skrevet i. 857 00:41:42,010 --> 00:41:44,850 >> Så nu resten af ​​dette program er faktisk temmelig svarer til, hvad vi 858 00:41:44,850 --> 00:41:46,860 bare gjorde med tegn. 859 00:41:46,860 --> 00:41:49,970 Bemærk, at jeg har en for-løkke startende i linje 30. 860 00:41:49,970 --> 00:41:54,920 Så lige efter jeg får array, jeg gentage fra y lig nul på op til n.. 861 00:41:54,920 --> 00:41:58,890 Jeg har bare det lærerigt printf budskab siger bare, giv mig den alder, 862 00:41:58,890 --> 00:42:03,690 person #% i, så nummer et, nummer to, nummer tre. 863 00:42:03,690 --> 00:42:04,730 Og hvorfor gjorde jeg det? 864 00:42:04,730 --> 00:42:08,870 Helt ærligt, mennesker foretrækker at tælle fra den ene på op mens dataloger, 865 00:42:08,870 --> 00:42:09,620 nul på op. 866 00:42:09,620 --> 00:42:11,700 dataloger ikke kommer til at bruge denne form for program, så vi er 867 00:42:11,700 --> 00:42:13,990 vil bare begynde at tælle på én som normale mennesker. 868 00:42:13,990 --> 00:42:17,630 >> Og nu på linje 33, bemærke den lidt anderledes stykke syntaks. 869 00:42:17,630 --> 00:42:23,710 Den i'te alder at variabel af typen matrix kommer til at få en int. 870 00:42:23,710 --> 00:42:25,770 Og nu endelig, det er bare aritmetiske hernede. 871 00:42:25,770 --> 00:42:29,200 Jeg besluttede i en separat loop til at kræve der går nogen tid, og nu i denne 872 00:42:29,200 --> 00:42:31,400 separat loop, disse linjer udføre. 873 00:42:31,400 --> 00:42:35,810 >> Et år fra nu, person, vil jeg være i år, men bemærke dette er ikke den 874 00:42:35,810 --> 00:42:36,500 variablen i. 875 00:42:36,500 --> 00:42:38,390 Dette er nu% i for int. 876 00:42:38,390 --> 00:42:43,210 Og varsel som den første pladsholder, jeg plug in i plus 1, så vi tæller 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 værdien af ​​deres alder, for jeg år, jeg tager aldre beslag 879 00:42:49,190 --> 00:42:52,980 I - og hvorfor gør jeg plus en her? 880 00:42:52,980 --> 00:42:53,760 De har lige alderen. 881 00:42:53,760 --> 00:42:55,030 Det er min dumme valg af programmer. 882 00:42:55,030 --> 00:42:56,810 De har lige alderen et år. 883 00:42:56,810 --> 00:42:59,770 Jeg kunne skrive i vilkårligt antal, Jeg faktisk ønsker der. 884 00:42:59,770 --> 00:43:02,430 >> Så hvad er faktisk alle relevansen her? 885 00:43:02,430 --> 00:43:07,610 Nå, lad mig faktisk rulle tilbage herover og male et billede 886 00:43:07,610 --> 00:43:10,830 af, hvad der ligger forude. 887 00:43:10,830 --> 00:43:15,720 Hvad vi vil gøre med vores næste Problem Set Two fuske i 888 00:43:15,720 --> 00:43:17,070 verden af ​​kryptografi. 889 00:43:17,070 --> 00:43:22,500 Så dette er en streng af tegn, så en sekvens af flere tegn, og hvad 890 00:43:22,500 --> 00:43:23,750 siger det? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Det er ikke i online-version af dias. 893 00:43:30,600 --> 00:43:35,880 >> Så jeg hævder, at dette er lig det, en stupid annonce fra mange år 894 00:43:35,880 --> 00:43:39,950 siden, kan faktisk huske en af ​​dens oprindelse. 895 00:43:39,950 --> 00:43:42,740 Så dette er et eksempel på kryptering eller kryptering. 896 00:43:42,740 --> 00:43:46,150 Det viser sig, at hvis du ønsker at faktisk sende oplysninger eller deler 897 00:43:46,150 --> 00:43:49,310 oplysninger med nogen sikkert, ligesom en besked som denne, kan du 898 00:43:49,310 --> 00:43:50,500 scramble bogstaver. 899 00:43:50,500 --> 00:43:53,170 Men typisk, ordene er ikke krypteret tilfældigt. 900 00:43:53,170 --> 00:43:56,365 De er permuteres i nogle måde eller ændres på en måde, således at - UPS. 901 00:43:56,365 --> 00:43:59,040 Det er en sjov spoiler til næste gang. 902 00:43:59,040 --> 00:44:04,390 >> Så du kan kortlægge, hvad der er tilsyneladende O til B. Bemærk, at linjerne op 903 00:44:04,390 --> 00:44:05,420 kapitalisering-wise. 904 00:44:05,420 --> 00:44:07,960 Tilsyneladende r bliver e. 905 00:44:07,960 --> 00:44:14,000 Tilsyneladende F-H-E-R bliver S-U-R-E. Så det viser sig der er en kortlægning, og 906 00:44:14,000 --> 00:44:18,720 dette tilfælde er der er en temmelig dum kortlægning hvis nogen har regnet det ud? 907 00:44:18,720 --> 00:44:21,440 Det er noget, der hedder Rot 13, Roter 13. 908 00:44:21,440 --> 00:44:24,760 Det er den dummeste af kryptering mekanismer, fordi det bogstaveligt talt bare 909 00:44:24,760 --> 00:44:29,160 tilføjer 13 til hver eneste af de breve, dum i den forstand, at hvis du bare 910 00:44:29,160 --> 00:44:31,890 have lidt fri tid på dine hænder og en blyant, eller du bare synes, det 911 00:44:31,890 --> 00:44:35,260 igennem i dit hoved, kan du prøve alle mulige tilføjelser - en, to, 912 00:44:35,260 --> 00:44:38,470 tre, prik, prik, prik, 25 til bare rotere hele alfabetet, og 913 00:44:38,470 --> 00:44:40,860 i sidste ende, vil du finde ud af hvad dette budskab er. 914 00:44:40,860 --> 00:44:43,700 Så hvis du gjorde noget som dette i folkeskolen passerer beskeder til din 915 00:44:43,700 --> 00:44:46,830 bedste ven, hvis din folkeskolen Læreren blot læse igennem 916 00:44:46,830 --> 00:44:50,320 besked og brutale tvang opløsningen, du måske har fået 917 00:44:50,320 --> 00:44:52,550 et svar med det. 918 00:44:52,550 --> 00:44:54,970 >> Nu er selvfølgelig, i den virkelige verden kryptografi er mere sofistikeret. 919 00:44:54,970 --> 00:45:00,120 Dette er et uddrag af tekst fra en edb-system, der har brugernavne og 920 00:45:00,120 --> 00:45:03,630 passwords, da næsten alle vores gør, og dette er hvad dit password måske 921 00:45:03,630 --> 00:45:07,260 ser gerne, hvis der er gemt på din harddisk køre, men i krypteret form. 922 00:45:07,260 --> 00:45:11,050 Dette er ikke blot en rotation af breve, A er B og B er C. Dette er 923 00:45:11,050 --> 00:45:15,620 langt mere sofistikeret, men det bruger hvad er almindeligt kendt som hemmelige nøgle 924 00:45:15,620 --> 00:45:16,690 kryptografi. 925 00:45:16,690 --> 00:45:20,210 Dette billede fortæller følgende historie med et par ikoner. 926 00:45:20,210 --> 00:45:22,250 >> Til venstre har vi, hvad vi kalder almindelig tekst. 927 00:45:22,250 --> 00:45:25,420 I en verden af ​​kryptografi, plain Teksten er bare den oprindelige meddelelse 928 00:45:25,420 --> 00:45:29,050 skrevet på engelsk eller fransk eller noget sprog overhovedet. 929 00:45:29,050 --> 00:45:32,405 Hvis du ønsker at kryptere det, vil vi passerer det billedligt gennem en hængelås, så 930 00:45:32,405 --> 00:45:35,580 nogle af slags algoritme, nogle funktion eller et program, nogen skrev 931 00:45:35,580 --> 00:45:39,880 at krypterer bogstaverne forhåbentlig mere complicatedly end blot at tilføje 13 932 00:45:39,880 --> 00:45:40,980 til hver af dem. 933 00:45:40,980 --> 00:45:43,780 >> Hvad du får ud af denne proces i midten der kaldes cyphertext. 934 00:45:43,780 --> 00:45:44,850 Så sådan en sexet ord. 935 00:45:44,850 --> 00:45:47,630 Det betyder blot, det er den krypterede udgave af almindelig tekst. 936 00:45:47,630 --> 00:45:52,570 Og kun hvis du har den samme hemmelighed, 13 eller minus 13, er du i stand til at 937 00:45:52,570 --> 00:45:54,970 dekryptere en besked som denne. 938 00:45:54,970 --> 00:45:57,770 >> Så i Problem Set To, blandt de ting du vil gøre hvis i Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, bliver du nødt til at skrive kode til knæk disse adgangskoder, regne ud, 940 00:46:01,860 --> 00:46:05,170 hvad de var, og hvordan de var krypteret, selvom vi giver dig en smule 941 00:46:05,170 --> 00:46:06,460 vejledning undervejs. 942 00:46:06,460 --> 00:46:09,320 I Standard Edition, introducerer vi et par ciphers, kryptering 943 00:46:09,320 --> 00:46:12,400 mekanismer, den ene kaldte Cæsar, en kaldet Vigenere, som stadig er 944 00:46:12,400 --> 00:46:16,100 roterende ciphers hvor A bliver noget, B bliver noget, men 945 00:46:16,100 --> 00:46:18,820 du er nødt til at gøre det programmatisk fordi der rent faktisk vil være en hemmelighed 946 00:46:18,820 --> 00:46:22,840 involverede nøgle som typisk er en række eller et søgeord, at kun de 947 00:46:22,840 --> 00:46:26,420 afsender og modtager af disse meddelelser skal forstå. 948 00:46:26,420 --> 00:46:28,660 >> Nu, dette har faktisk inkarnationer i den virkelige verden. 949 00:46:28,660 --> 00:46:32,910 Dette, for eksempel, er lidt sjældne Annie hemmelige dekoder ring, og du 950 00:46:32,910 --> 00:46:35,180 kan rent faktisk at gennemføre disse roterende ciphers - 951 00:46:35,180 --> 00:46:37,930 A bliver noget, B bliver noget - med et par hjul, 952 00:46:37,930 --> 00:46:40,840 en på ydersiden, en på indersiden sådan, at hvis du drejer hjulet eller 953 00:46:40,840 --> 00:46:44,170 ringen, kan du faktisk linje op breve med forskellige bogstaver, 954 00:46:44,170 --> 00:46:45,430 få en hemmelig kode. 955 00:46:45,430 --> 00:46:48,110 Og så den cliffhanger for i dag, hvad jeg troede, jeg ville gøre, er lidt af 956 00:46:48,110 --> 00:46:52,170 throwback at hvis du tænder for fjernsynet den 24. december, kan du se den 957 00:46:52,170 --> 00:46:55,390 movie ad nauseum for 24 timer i træk. 958 00:46:55,390 --> 00:47:06,030 Men for i dag, vil jeg åbne det op her og give os blot to minutter af en 959 00:47:06,030 --> 00:47:13,493 pædagogisk relevant Christmas Story med en lille fyr ved navn Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [VIDEO AFSPIL] 961 00:47:14,400 --> 00:47:17,420 >> -Be det kendt for alle og enhver, at Ralph Parker udnævnes til 962 00:47:17,420 --> 00:47:20,650 medlem af Little Orphan Annie hemmelighed cirkel og er berettiget til alle 963 00:47:20,650 --> 00:47:23,460 hæder og fordele forekommende dertil. 964 00:47:23,460 --> 00:47:25,990 >> -Signed, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Medunderskrives, Pierre Andre i blæk. 966 00:47:30,100 --> 00:47:34,270 Honors og fordele allerede i en alder af ni. 967 00:47:34,270 --> 00:47:39,440 >> [RÅBER PÅ RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Kom, lad os komme videre med det. 969 00:47:40,770 --> 00:47:44,965 Jeg behøver ikke alt det jazz om smuglere og pirater. 970 00:47:44,965 --> 00:47:48,270 >> -Lyt morgen aften for indgåelse eventyr af den sorte 971 00:47:48,270 --> 00:47:49,650 sørøverskib. 972 00:47:49,650 --> 00:47:53,320 Nu er det tid til Annies Secret Meddelelse til dig medlemmer 973 00:47:53,320 --> 00:47:55,720 Den hemmelige cirkel. 974 00:47:55,720 --> 00:47:56,580 Husk, unger. 975 00:47:56,580 --> 00:48:01,720 Kun medlemmer af Annies Secret Circle kan afkode Annies hemmelig besked. 976 00:48:01,720 --> 00:48:05,872 Husk, Annie afhængig af dig. 977 00:48:05,872 --> 00:48:08,670 Sæt dine ben til B2. 978 00:48:08,670 --> 00:48:11,000 Her er budskabet. 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 hemmeligt møde. 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 aften. 983 00:48:21,650 --> 00:48:24,830 Jeg kunne fortælle, at aftenens budskab var virkelig vigtigt. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25.. 985 00:48:26,400 --> 00:48:28,540 Det er en besked fra Annie selv. 986 00:48:28,540 --> 00:48:30,086 Husk, ikke fortælle nogen. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Sekunder senere, er jeg i det eneste rum i huset, hvor en dreng på ni 989 00:48:38,710 --> 00:48:42,668 kunne sidde i fred og afkode. 990 00:48:42,668 --> 00:48:47,628 Aha, gik B. I den næste. 991 00:48:47,628 --> 00:48:53,060 E. Det første ord er "at være." S. Det kom lettere nu. 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 nu, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Jeg skal gå. 996 00:48:57,860 --> 00:48:59,780 >> -Jeg skal lige ned, Ma. 997 00:48:59,780 --> 00:49:01,030 Gee guru. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Vær sikker på at. 1000 00:49:08,220 --> 00:49:09,500 Vær sikker på at hvad? 1001 00:49:09,500 --> 00:49:11,660 Hvad var Little Orphan Annie prøver at sige? 1002 00:49:11,660 --> 00:49:12,844 Vær sikker på at hvad? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie har Randy kom til at gå. 1004 00:49:14,732 --> 00:49:16,148 Vil du venligst komme ud? 1005 00:49:16,148 --> 00:49:17,092 >> -Okay, Ma. 1006 00:49:17,092 --> 00:49:18,510 Jeg kommer lige ud. 1007 00:49:18,510 --> 00:49:20,270 >> -Jeg var at komme tættere på nu. 1008 00:49:20,270 --> 00:49:21,823 Spændingen var forfærdeligt. 1009 00:49:21,823 --> 00:49:23,045 Hvad var det? 1010 00:49:23,045 --> 00:49:26,510 Den skæbne af planeten kan hænge i balance. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, Randys skal afsted. 1012 00:49:28,985 --> 00:49:32,680 >> -Jeg skal lige ud for skriger højt. 1013 00:49:32,680 --> 00:49:33,956 >> -Næsten der. 1014 00:49:33,956 --> 00:49:35,140 Mine fingre fløj. 1015 00:49:35,140 --> 00:49:36,880 Mit sind var en stål fælde. 1016 00:49:36,880 --> 00:49:38,010 Hver pore vibrerede. 1017 00:49:38,010 --> 00:49:39,878 Det var næsten 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 at 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 mærkværdige kommercielle? 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 VIDEOAFSPILNING] 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 dig næste uge. 1028 00:50:06,305 --> 00:50:08,800 >> SPEAKER 2: På det næste CS50, dette sker. 1029 00:50:08,800 --> 00:50:11,060 >> SPEAKER 1: So ét emne har vi ikke så på hidtil er 1030 00:50:11,060 --> 00:50:12,220 at funktions pointere. 1031 00:50:12,220 --> 00:50:14,540 Nu en funktion pointer er bare adressen på en offentlig 1032 00:50:14,540 --> 00:50:17,000 funktion, men meget ligesom - 1033 00:50:17,000 --> 00:50:18,250 søn af en - 1034 00:50:18,250 --> 00:50:19,670