1 00:00:00,000 --> 00:00:02,880 >> [MUSIK SPELA] 2 00:00:02,880 --> 00:00:10,580 3 00:00:10,580 --> 00:00:13,500 >> TALARE 1: Detta är CS50 och detta är början på veckan två. 4 00:00:13,500 --> 00:00:18,400 Så, låt oss dyka rakt in något det är buggig, så att säga. 5 00:00:18,400 --> 00:00:24,015 Så, här är över CS50 IDE och jag har drog i förväg detta Screen-- jävla 6 00:00:24,015 --> 00:00:25,070 Det. 7 00:00:25,070 --> 00:00:25,760 Spoiler varning. 8 00:00:25,760 --> 00:00:26,260 Okej. 9 00:00:26,260 --> 00:00:29,060 Jag har dragit upp den här skärmen här, som har ett mycket enkelt program. 10 00:00:29,060 --> 00:00:32,659 Om vi ​​bläddra ner, de flesta av detta är bara kommentarer, 11 00:00:32,659 --> 00:00:36,730 men här i ledningarna 13 genom 17 har vi ett program. 12 00:00:36,730 --> 00:00:40,580 >> Det är syntaktiskt giltigt, vilket innebär att om Jag kompilera det, kommer det att kompilera och köra, 13 00:00:40,580 --> 00:00:41,920 men det är buggig. 14 00:00:41,920 --> 00:00:47,330 Detta program hävdar i kommentarerna där uppe att det ska skrivas ut 10 stjärnor, 15 00:00:47,330 --> 00:00:48,870 men det gör det inte. 16 00:00:48,870 --> 00:00:53,290 Och baserat på din erfarenhet, eller snart kommer att vara erfarenhet av C, 17 00:00:53,290 --> 00:00:56,820 kan du logiskt urskilja varför detta är i själva verket, buggy? 18 00:00:56,820 --> 00:00:57,804 Yeah? 19 00:00:57,804 --> 00:00:59,220 Publik: Det går från noll till 10. 20 00:00:59,220 --> 00:01:01,884 Det är 11 iterationer. 21 00:01:01,884 --> 00:01:02,550 TALARE 1: Ja. 22 00:01:02,550 --> 00:01:06,030 Så, det kommer från noll upp genom och lika med 10, 23 00:01:06,030 --> 00:01:08,140 vilket naturligtvis är 11 iterationer. 24 00:01:08,140 --> 00:01:10,020 Så det kommer att print, ja, 11 stjärnor. 25 00:01:10,020 --> 00:01:13,040 Så, datavetenskap konventionen i de flesta programmeringsspråk 26 00:01:13,040 --> 00:01:15,270 är faktiskt bara för att börja räkna på noll, 27 00:01:15,270 --> 00:01:18,800 men räkna upp till men inte genom värde som du faktiskt bryr sig om. 28 00:01:18,800 --> 00:01:21,216 >> Nu är detta en sak som tar lite tid att vänja sig 29 00:01:21,216 --> 00:01:25,350 och även Scratch, utformad som den är för icke programmerare eller icke dator 30 00:01:25,350 --> 00:01:28,070 forskare och för barn till stor del är utformad för att ha 31 00:01:28,070 --> 00:01:29,570 du börjar räkna i allmänhet vid en. 32 00:01:29,570 --> 00:01:30,277 Och det är bra. 33 00:01:30,277 --> 00:01:33,110 Du kan absolut börja räkna vid en om det är mer bekvämt. 34 00:01:33,110 --> 00:01:37,210 Och räkna upp till och genom 10, men du inser särskilt den här veckan 35 00:01:37,210 --> 00:01:39,950 och utöver det bara så många saker i programmering 36 00:01:39,950 --> 00:01:42,465 anta att 0 är den första siffra som du räkna, 37 00:01:42,465 --> 00:01:45,590 att du kommer att finna det lättare bara för att komma in i denna vana av start 38 00:01:45,590 --> 00:01:49,490 från noll och räknar upp till värdet du bryr dig om just nu från 39 00:01:49,490 --> 00:01:49,990 få gå. 40 00:01:49,990 --> 00:01:50,990 >> Så har det fixat det. 41 00:01:50,990 --> 00:01:53,670 Vi ändrade mindre än eller lika med knappt. 42 00:01:53,670 --> 00:01:56,050 Låt oss ta en titt på ett andra exempel här. 43 00:01:56,050 --> 00:01:59,585 >> Så också hävdar detta program i sin kommenterar där uppe att det ska skrivas ut 44 00:01:59,585 --> 00:02:02,260 tio stjärnor, men det gör det inte. 45 00:02:02,260 --> 00:02:05,540 Vad är felet här? 46 00:02:05,540 --> 00:02:07,930 >> Så Vad-- och ledsen, låt oss vara tydliga. 47 00:02:07,930 --> 00:02:08,610 10 stjärnor. 48 00:02:08,610 --> 00:02:11,644 En per rad, men det gör det inte. 49 00:02:11,644 --> 00:02:14,810 Så i själva verket, låt mig gå vidare och sammanställa detta eftersom det är en lite mindre 50 00:02:14,810 --> 00:02:16,900 rensa baserat på den beskrivningen. 51 00:02:16,900 --> 00:02:18,720 Låt mig gå in på vår källa katalog. 52 00:02:18,720 --> 00:02:25,110 Gör buggy en prick snedstreck, buggy ett. 53 00:02:25,110 --> 00:02:28,680 OK, jag ser 11 stjärnor, som är fortfarande problematisk, 54 00:02:28,680 --> 00:02:30,090 men de är också alla i en rad. 55 00:02:30,090 --> 00:02:31,500 Vad är problemet här? 56 00:02:31,500 --> 00:02:32,339 Yeah. 57 00:02:32,339 --> 00:02:33,255 PUBLIK: [OHÖRBAR]. 58 00:02:33,255 --> 00:02:36,194 59 00:02:36,194 --> 00:02:36,860 TALARE 1: Ja. 60 00:02:36,860 --> 00:02:40,210 Så det här är en finess som du kan minns mig att kortfattat nämna. 61 00:02:40,210 --> 00:02:42,793 Trots allt ser nätt, och det är snyggt indragen, 62 00:02:42,793 --> 00:02:45,850 och det slags ser Scratch liknande på denna rad 16 och 17 är, 63 00:02:45,850 --> 00:02:47,600 sannerligen, indragna enligt den for-loop. 64 00:02:47,600 --> 00:02:48,400 Det är oväsentligt. 65 00:02:48,400 --> 00:02:50,460 Datorn inte vet eller se blanktecken. 66 00:02:50,460 --> 00:02:52,910 Blanktecken bara för oss människor, stilistiskt. 67 00:02:52,910 --> 00:02:57,010 Datorn vet när du har klamrar, vilket skulle faktiskt, 68 00:02:57,010 --> 00:02:58,280 åtgärda problemet. 69 00:02:58,280 --> 00:03:02,350 >> Så, om vi faktiskt gick in och uttryckligen sätta i dessa klammerparenteser 70 00:03:02,350 --> 00:03:05,220 som skulle åtgärda detta problem genom göra klart för kompilatorn 71 00:03:05,220 --> 00:03:07,930 att jag faktiskt vill köra två rader kod igen, 72 00:03:07,930 --> 00:03:09,220 och igen, och igen. 73 00:03:09,220 --> 00:03:11,680 Men vad är det grundläggande förklaringen? 74 00:03:11,680 --> 00:03:12,180 Höger? 75 00:03:12,180 --> 00:03:15,260 Vi behöver inte strikt behöver lockig hängslen hela tiden, 76 00:03:15,260 --> 00:03:18,210 även om det är förmodligen bäst praxis att komma in i den vana ändå 77 00:03:18,210 --> 00:03:20,878 även om det tillför två tecken till koden. varför? 78 00:03:20,878 --> 00:03:22,380 >> PUBLIK: [OHÖRBAR]? 79 00:03:22,380 --> 00:03:24,630 TALARE 1: Ja, så det är en annan lösning helt och hållet. 80 00:03:24,630 --> 00:03:25,130 Höger? 81 00:03:25,130 --> 00:03:28,250 Särskilt om vid första anblicken du inte verkligen uppskatta vad som händer. 82 00:03:28,250 --> 00:03:31,070 Jo, säkert vi kunde bara göra två saker på en gång 83 00:03:31,070 --> 00:03:32,710 och bara undvika problemet helt och hållet. 84 00:03:32,710 --> 00:03:36,080 Och det är bra, men nu, för dagens ändamål, vad 85 00:03:36,080 --> 00:03:38,200 är förklaringen till felet? 86 00:03:38,200 --> 00:03:39,810 Varför var alla dessa stjärnor på en rad? 87 00:03:39,810 --> 00:03:40,806 Yeah? 88 00:03:40,806 --> 00:03:43,296 >> PUBLIK: Det verkar som om du har en rad kod, 89 00:03:43,296 --> 00:03:46,649 du kan göra det utan dem. 90 00:03:46,649 --> 00:03:47,440 TALARE 1: Exakt. 91 00:03:47,440 --> 00:03:48,750 Detta är bara en mänsklig konvention. 92 00:03:48,750 --> 00:03:50,750 Folk inser att det är en lite irriterande eller tråkiga 93 00:03:50,750 --> 00:03:53,470 att behöva sätta klammerparenteserna alla av tiden om allt du vill göra 94 00:03:53,470 --> 00:03:55,090 är köra en kodrad. 95 00:03:55,090 --> 00:03:57,660 Så beslutade människor vissa tid sedan att det är bra. 96 00:03:57,660 --> 00:04:01,180 Om du vill lägga alla dina loop på just det en rad som denna, 97 00:04:01,180 --> 00:04:04,030 det är bra med en enda semikolon i slutet. 98 00:04:04,030 --> 00:04:07,210 Men du kan bara göra en sådan linjen utan klammerparenteserna. 99 00:04:07,210 --> 00:04:09,900 >> Så när CS50 stilguide som kommer att peka dig till, 100 00:04:09,900 --> 00:04:11,980 ser du att generellt Det är god vana 101 00:04:11,980 --> 00:04:14,920 att komma in i denna tills du är ganska bekväm avvikandet 102 00:04:14,920 --> 00:04:17,404 från dessa typer av konventioner och gör din egen sak. 103 00:04:17,404 --> 00:04:18,820 Så länge du är själv konsekvent. 104 00:04:18,820 --> 00:04:21,540 Och vi ska prata mer om styla lite senare i dag. 105 00:04:21,540 --> 00:04:23,200 >> Så, låt mig att öppna upp ett annat program. 106 00:04:23,200 --> 00:04:24,930 Naturligtvis bör vi fixa det 10 också. 107 00:04:24,930 --> 00:04:32,470 Låt mig gå vidare och skriva en verklig snabb program som jag ringer, 108 00:04:32,470 --> 00:04:38,140 låt oss säga, dot slinga C. Så dot C. loop Och i loop dot C jag ska ha, 109 00:04:38,140 --> 00:04:41,970 inkluderar standard I / O dot H int main tomrum. 110 00:04:41,970 --> 00:04:44,020 Och nu ska vi bara göra, faktiskt, en slinga. 111 00:04:44,020 --> 00:04:46,020 Så, får 4 int jag noll. 112 00:04:46,020 --> 00:04:48,660 I är mindre än, låt oss säga, 50. 113 00:04:48,660 --> 00:04:49,950 I plus, plus. 114 00:04:49,950 --> 00:04:53,350 Och sedan här låt oss gå vidare och skriver ut F. 115 00:04:53,350 --> 00:04:56,400 Och sedan vill jag skriva ut I och en ny linje, semikolon. 116 00:04:56,400 --> 00:05:00,015 >> Och detta bör skriva ut alla siffror från noll upp till 50? 117 00:05:00,015 --> 00:05:02,900 118 00:05:02,900 --> 00:05:03,680 Några huvudet nickar. 119 00:05:03,680 --> 00:05:04,270 Några nos. 120 00:05:04,270 --> 00:05:05,339 Vad är felet redan? 121 00:05:05,339 --> 00:05:06,630 Vad är det enkelt misstag jag gjort? 122 00:05:06,630 --> 00:05:07,170 Yeah. 123 00:05:07,170 --> 00:05:08,544 >> PUBLIK: [OHÖRBAR]. 124 00:05:08,544 --> 00:05:09,210 TALARE 1: Ja. 125 00:05:09,210 --> 00:05:11,520 Så även om det ser så här är vad jag tänker, 126 00:05:11,520 --> 00:05:13,920 minns att jag är också bara ett ASCII-tecken. 127 00:05:13,920 --> 00:05:14,955 >> Så, om jag säger, print "I." 128 00:05:14,955 --> 00:05:16,670 Det är bokstavligen gå att skriva ut I. Så, om jag 129 00:05:16,670 --> 00:05:20,030 vill plug-in en platshållare värde jag faktiskt behöver göra detta 130 00:05:20,030 --> 00:05:22,630 och sedan plug-i värde på I dynamiskt. 131 00:05:22,630 --> 00:05:25,200 Annars jag ska bara får 50 I: s på skärmen. 132 00:05:25,200 --> 00:05:28,140 >> Så, låt mig gå vidare och gör denna loop, köra den, 133 00:05:28,140 --> 00:05:30,650 och, faktiskt, vi har alla vägen upp genom 49. 134 00:05:30,650 --> 00:05:34,140 Och om jag rulla tillbaka i tiden jag ser talet noll vid början. 135 00:05:34,140 --> 00:05:36,050 >> Tja, vad händer om jag slags skruva upp? 136 00:05:36,050 --> 00:05:37,800 Vad händer om jag gör det? 137 00:05:37,800 --> 00:05:40,120 Bara för att jag tänker inte. 138 00:05:40,120 --> 00:05:40,970 Vad är det här programmet. 139 00:05:40,970 --> 00:05:43,970 När åter sammanställas och köra, kommer att göra logiskt? 140 00:05:43,970 --> 00:05:44,870 >> PUBLIK: Ingenting. 141 00:05:44,870 --> 00:05:45,661 >> TALARE 1: Ingenting. 142 00:05:45,661 --> 00:05:47,156 Varför? 143 00:05:47,156 --> 00:05:49,124 >> Publik: I är utformad för noll. 144 00:05:49,124 --> 00:05:51,899 Så, är villkoret falskt. 145 00:05:51,899 --> 00:05:52,940 TALARE 1: Ja, exakt. 146 00:05:52,940 --> 00:05:55,110 Allt koden är korrekt, syntaktiskt. 147 00:05:55,110 --> 00:05:57,310 Detta kommer att sammanställa denna kod kommer att köras, men det är inte 148 00:05:57,310 --> 00:06:00,110 kommer att göra något användbart eftersom jag initiera jag till noll. 149 00:06:00,110 --> 00:06:02,240 Vi kontrollerar då är jag mer än 50? 150 00:06:02,240 --> 00:06:03,810 Självklart, nej, det är inte. 151 00:06:03,810 --> 00:06:05,760 Så slingan exekverar aldrig alls. 152 00:06:05,760 --> 00:06:09,580 >> Vad händer om vi gör något lite mer vårdslös? 153 00:06:09,580 --> 00:06:12,890 Så, vad händer om vi gillar int jag blir noll. 154 00:06:12,890 --> 00:06:15,640 Och låt mig nu använda tiden loop, vilket var ett annat tillstånd. 155 00:06:15,640 --> 00:06:21,810 Och medan jag säger, när jag är större än eller lika med noll, och sedan här jag 156 00:06:21,810 --> 00:06:26,070 gå vidare och spara filen, gör loop. 157 00:06:26,070 --> 00:06:27,070 Och jag är på väg att köra den. 158 00:06:27,070 --> 00:06:30,230 Vad ska jag se det här tid med en while-slinga? 159 00:06:30,230 --> 00:06:30,852 Yeah. 160 00:06:30,852 --> 00:06:32,120 >> PUBLIK: En oändlig loop? 161 00:06:32,120 --> 00:06:35,360 >> TALARE 1: En oändlig loop? 162 00:06:35,360 --> 00:06:36,662 Ja, och varför? 163 00:06:36,662 --> 00:06:38,120 PUBLIK: Eftersom det är alltid noll. 164 00:06:38,120 --> 00:06:38,786 TALARE 1: Ja. 165 00:06:38,786 --> 00:06:40,100 Så, jag initieras som noll. 166 00:06:40,100 --> 00:06:44,470 Naturligtvis jag är alltid större än eller lika med 0 som följd. 167 00:06:44,470 --> 00:06:46,460 Så, jag ska bara se denna oändligt. 168 00:06:46,460 --> 00:06:49,850 Och nu, detta har kommit upp en gång eller två gånger för att kursens huvuden. 169 00:06:49,850 --> 00:06:52,417 Vad händer när du har en oändlig loop? 170 00:06:52,417 --> 00:06:53,314 >> PUBLIK: Kontroll C. 171 00:06:53,314 --> 00:06:53,980 TALARE 1: Ja. 172 00:06:53,980 --> 00:06:56,250 Så Kontroll C kommer så småningom att svara. 173 00:06:56,250 --> 00:06:59,520 Tyvärr har vi skrivas ut miljontals nollor redan 174 00:06:59,520 --> 00:07:01,520 och så att datorn har sorts fick framför mig. 175 00:07:01,520 --> 00:07:03,394 Så kommer det att ignorera mig för lite. 176 00:07:03,394 --> 00:07:06,560 Men om du bara trycka Kontroll C några gånger på din Mac eller PC-tangentbord, 177 00:07:06,560 --> 00:07:08,790 småningom det borde verkligen avsluta. 178 00:07:08,790 --> 00:07:11,770 Och om inte, så visar vi dig några tekniker innan länge var du 179 00:07:11,770 --> 00:07:14,850 kan faktiskt med våld döda program, ungefär som i Windows och Mac OS, 180 00:07:14,850 --> 00:07:15,562 om så behövs. 181 00:07:15,562 --> 00:07:16,770 Men låt oss prova något annat. 182 00:07:16,770 --> 00:07:19,895 Låt oss faktiskt öka I. Är Detta kommer fortfarande att vara oändligt? 183 00:07:19,895 --> 00:07:22,870 184 00:07:22,870 --> 00:07:25,140 Låt mig köra. 185 00:07:25,140 --> 00:07:27,090 Och nu kan du typ av se vad som händer. 186 00:07:27,090 --> 00:07:30,140 Även detta är en oändlig slinga. 187 00:07:30,140 --> 00:07:33,080 Men det är lite av en kuggfråga. 188 00:07:33,080 --> 00:07:35,460 Kommer detta att skriva ut siffror för evigt? 189 00:07:35,460 --> 00:07:36,647 >> PUBLIK: Nej 190 00:07:36,647 --> 00:07:37,230 TALARE 1: Nej 191 00:07:37,230 --> 00:07:37,620 Varför? 192 00:07:37,620 --> 00:07:38,820 Jag hörde några nos hit. 193 00:07:38,820 --> 00:07:41,859 Someone-- Yeah. 194 00:07:41,859 --> 00:07:44,275 PUBLIK: Du har inte tillräckligt bitar för att verkligen hålla igång. 195 00:07:44,275 --> 00:07:44,730 TALARE 1: Okej. 196 00:07:44,730 --> 00:07:46,000 Så jag har inte tillräckligt bitar för att hålla igång. 197 00:07:46,000 --> 00:07:47,124 Så, vad som kommer att hända? 198 00:07:47,124 --> 00:07:49,320 Det är bara att sluta? 199 00:07:49,320 --> 00:07:52,542 >> PUBLIK: Någon gång den kommer att stängas the-- 200 00:07:52,542 --> 00:07:54,500 TALARE 1: Det kommer att stänga slingan ner, men varför? 201 00:07:54,500 --> 00:07:57,950 Vad kommer att hända på Alldeles i slutet av dess gränser? 202 00:07:57,950 --> 00:07:58,479 Yeah? 203 00:07:58,479 --> 00:08:00,520 PUBLIK: Det växlar tillbaka till negativa tal. 204 00:08:00,520 --> 00:08:02,900 TALARE 1: Att negativa tal, eller om vi bara behandla positiv, 205 00:08:02,900 --> 00:08:03,570 noll åtminstone. 206 00:08:03,570 --> 00:08:04,550 Så ja, absolut. 207 00:08:04,550 --> 00:08:08,059 Minns att vi såg förra gången att om du öka dina bitar en alltför många gånger, 208 00:08:08,059 --> 00:08:10,225 och du där fore overflow kapaciteten i int 209 00:08:10,225 --> 00:08:13,058 eller vad datatypen är, du är kommer att linda runt, förmodligen, 210 00:08:13,058 --> 00:08:14,020 två negativa tal. 211 00:08:14,020 --> 00:08:16,644 Eller om du har ange att intervall bör bara vara positivt, 212 00:08:16,644 --> 00:08:18,560 som du kan göra, men Vi har inte sett det ännu, 213 00:08:18,560 --> 00:08:21,420 du kan hamna åtminstone tillbaka på noll. 214 00:08:21,420 --> 00:08:22,410 Även faktiskt ja. 215 00:08:22,410 --> 00:08:24,320 I det här fallet, negativ tal, i vilket fall 216 00:08:24,320 --> 00:08:26,870 slingan kommer att avsluta eftersom jag är i själva verket inte, 217 00:08:26,870 --> 00:08:29,220 större än eller lika med noll om det är negativt. 218 00:08:29,220 --> 00:08:31,780 >> Så tyvärr, hur länge skulle vi behöva vänta? 219 00:08:31,780 --> 00:08:35,490 Just nu är vi upp till vad, 2000000-ish? 220 00:08:35,490 --> 00:08:37,705 Vi är som 2 miljarder, vi kommer att behöva vänta 221 00:08:37,705 --> 00:08:39,330 tills vi faktiskt kan se detta symtom. 222 00:08:39,330 --> 00:08:46,200 Men vi kan se det lite snabbare, maybe-- låt oss se om vi kan avbryta. 223 00:08:46,200 --> 00:08:46,700 Kom igen. 224 00:08:46,700 --> 00:08:49,500 225 00:08:49,500 --> 00:08:51,331 Även menyerna dyker långsamt. 226 00:08:51,331 --> 00:08:51,830 Okej. 227 00:08:51,830 --> 00:08:54,270 Så, ska vi återkomma till detta inom kort. 228 00:08:54,270 --> 00:08:56,320 Det är en bra time-- fan, valpar. 229 00:08:56,320 --> 00:08:58,280 >> Det är en bra tid för vissa meddelanden. 230 00:08:58,280 --> 00:09:01,225 Så, om du kanske gillar att engagera sig i YHack, 231 00:09:01,225 --> 00:09:03,600 vilken är en händelse som är sponsras av våra vänner på Yale. 232 00:09:03,600 --> 00:09:05,990 Och, ja, en del av kursens TF vid Yale är inblandad i detta. 233 00:09:05,990 --> 00:09:08,610 YHack är en internationell hacka-a-thon värd och höll 234 00:09:08,610 --> 00:09:12,395 vid Yale, som samlar 1500 likasinnade hackare och annons alla 235 00:09:12,395 --> 00:09:13,120 över världen. 236 00:09:13,120 --> 00:09:14,610 Om detta är av intresse, ta en titt här. 237 00:09:14,610 --> 00:09:17,401 Om detta är för kort på skärm, ta en titt på dagens diabilder 238 00:09:17,401 --> 00:09:19,622 för webbadressen för yhack.org. 239 00:09:19,622 --> 00:09:21,080 Så, även några snabba meddelanden. 240 00:09:21,080 --> 00:09:24,410 Så, officiellt sektioner kommer att börja nästa vecka både här och New Haven. 241 00:09:24,410 --> 00:09:27,660 Tänk på att du kommer att få en e-post senare i helgen mest sannolika. 242 00:09:27,660 --> 00:09:29,390 Det tar lång tid för CS50 avsnitt, 243 00:09:29,390 --> 00:09:32,080 med tanke på alla människor i klass och alla flyttar runt. 244 00:09:32,080 --> 00:09:34,871 Och alla Undervisning Fellows ' scheman också fortfarande stelnande, 245 00:09:34,871 --> 00:09:38,110 men håll ögonen öppna för en e-post och vid behov vara, kan du åter avsnitt där efter. 246 00:09:38,110 --> 00:09:39,580 >> Study.cs50.net. 247 00:09:39,580 --> 00:09:43,280 Så, även om du är en ständig deltagare vid sektionerna, inse att nästan alla 248 00:09:43,280 --> 00:09:46,786 av de resurser som vi använder i sektioner är allmänt tillgängliga på CS50 249 00:09:46,786 --> 00:09:48,460 Studera på följande webbadress här. 250 00:09:48,460 --> 00:09:51,630 Så, om du någonsin vill åter recension material från avsnitt, eller läs framåt, 251 00:09:51,630 --> 00:09:54,170 eller så kan du inte göra det för någon vecka, inse att provglasen, 252 00:09:54,170 --> 00:09:58,210 och problem, och definitioner, och fler är alla där. 253 00:09:58,210 --> 00:10:00,645 >> Kontorstider återupptas i dag, och i morgon, och onsdag, 254 00:10:00,645 --> 00:10:03,020 och torsdag kontrollera kursens hemsida för schemat. 255 00:10:03,020 --> 00:10:05,690 >> Och även, lanserar nu idag är CS50 diskutera. 256 00:10:05,690 --> 00:10:09,230 Så, om och när du har frågor till varandra eller för kursen personal, 257 00:10:09,230 --> 00:10:12,099 och fungerar i allmänhet på vissa problem som, 258 00:10:12,099 --> 00:10:15,015 inse att du inte nödvändigtvis måste vända sig till den mänskliga nästa dig. 259 00:10:15,015 --> 00:10:17,810 Om det finns ingen där, kan du nå ut till oss och klasskamrater 260 00:10:17,810 --> 00:10:19,890 online via CS50 Diskutera. 261 00:10:19,890 --> 00:10:22,600 Så detta är en diskussion Styrelsen för kursen, 262 00:10:22,600 --> 00:10:24,550 och inser att detta är kanske den bästa 263 00:10:24,550 --> 00:10:28,480 ställe att börja när du har frågor när utanför kontorstid 264 00:10:28,480 --> 00:10:29,470 i synnerhet. 265 00:10:29,470 --> 00:10:31,070 >> Luncher startar den här veckan också. 266 00:10:31,070 --> 00:10:33,170 På Fire and Ice [OHÖRBAR] i New Haven. 267 00:10:33,170 --> 00:10:35,379 Ta en titt på kursens webbplats för att RSVP. 268 00:10:35,379 --> 00:10:36,753 Först till kvarn, först tjäna för det. 269 00:10:36,753 --> 00:10:39,380 Om du inte får i den här veckan Vi kommer att göra dessa mest varje fredag 270 00:10:39,380 --> 00:10:40,400 under löptiden. 271 00:10:40,400 --> 00:10:41,830 >> OK, och nu ett ord om betygssättning. 272 00:10:41,830 --> 00:10:44,690 Särskilt när vi går in problem ställa in ett, vilket är denna vecka, 273 00:10:44,690 --> 00:10:46,670 och problem set två och därefter. 274 00:10:46,670 --> 00:10:51,680 Hur ska vi göra en utvärdering P uppsättningar och utvärdera kvaliteten på dessa? 275 00:10:51,680 --> 00:10:55,560 Så det är fyra axlar som vi använder i CS50, och de är dessa fyra här. 276 00:10:55,560 --> 00:10:59,200 >> Omfattning, som fångar på en numerisk basis hur mycket av P set 277 00:10:59,200 --> 00:10:59,860 har du tackla. 278 00:10:59,860 --> 00:11:02,890 Det är i stort sett överensstämmer med ansträngning, och det är vårt sätt att fånga 279 00:11:02,890 --> 00:11:05,190 Har du försökt halva P set, alla av P uppsättningen. 280 00:11:05,190 --> 00:11:08,860 Detta är ett lätt att få perfekt poäng på om du gör det, ja, 281 00:11:08,860 --> 00:11:11,020 prova varje aspekt av P set. 282 00:11:11,020 --> 00:11:12,010 Så ha det i åtanke. 283 00:11:12,010 --> 00:11:13,420 >> Korrektheten är just detta. 284 00:11:13,420 --> 00:11:17,760 Har din kod fungerar som specifikationen och eftersom staber provlösningen 285 00:11:17,760 --> 00:11:19,730 tyder på att din kod bör i själva verket fungerar. 286 00:11:19,730 --> 00:11:23,260 Kontrollera 50, om du inte har träffat det ändå är i P ställa in en specifikation 287 00:11:23,260 --> 00:11:25,060 och kommer i allmänhet ge dig ja / nej svar 288 00:11:25,060 --> 00:11:26,518 om huruvida koden är korrekt. 289 00:11:26,518 --> 00:11:30,680 Åtminstone så långt vi ska att utvärdera det baserat på tester 290 00:11:30,680 --> 00:11:32,430 att vi kör i det programmet. 291 00:11:32,430 --> 00:11:33,850 >> Design är mycket mer subjektiv. 292 00:11:33,850 --> 00:11:35,994 Detta är hur välskriven är din kod. 293 00:11:35,994 --> 00:11:38,410 Och detta är något som du får bättre på tiden, 294 00:11:38,410 --> 00:11:41,201 och det är något som vi ska ger mer kvalitativ feedbacken. 295 00:11:41,201 --> 00:11:43,350 Och genom design som jag kanske betyda innan länge du 296 00:11:43,350 --> 00:11:47,650 kan frestas i vissa P inställd på att göra något loopingly, 297 00:11:47,650 --> 00:11:51,590 men att ha kanske tre eller fyra, eller fem kapslade främre slingor eller kapslade medan 298 00:11:51,590 --> 00:11:52,090 loopar. 299 00:11:52,090 --> 00:11:54,130 Som i allmänhet bör börja göra dig krypa 300 00:11:54,130 --> 00:11:56,070 och skulle i allmänhet anses dålig design. 301 00:11:56,070 --> 00:11:59,490 Och du börjar att se i klassen och av klass bra sätt att göra saker, 302 00:11:59,490 --> 00:12:02,920 dåliga sätt att göra saker som kan alla vara korrekt, men inte 303 00:12:02,920 --> 00:12:04,304 nödvändigtvis väl utformade. 304 00:12:04,304 --> 00:12:05,220 Som att skriva en uppsats. 305 00:12:05,220 --> 00:12:08,100 Du skulle kunna sätta ord på en sida som är grammatiskt korrekt, 306 00:12:08,100 --> 00:12:10,016 men uppsatsen eller Avhandlingen de är i är bara 307 00:12:10,016 --> 00:12:11,810 helt osammanhängande eller föga övertygande. 308 00:12:11,810 --> 00:12:15,930 Och så det kan vara den analoga i skriftlig värld av dåligt eller bra design. 309 00:12:15,930 --> 00:12:18,490 >> Och stil är också ganska subjektiv. 310 00:12:18,490 --> 00:12:20,060 Men åtminstone vi förväntar konsekvens. 311 00:12:20,060 --> 00:12:21,480 Detta är hur vacker är din kod. 312 00:12:21,480 --> 00:12:22,840 Saker och ting fint indragen? 313 00:12:22,840 --> 00:12:26,600 Är dina variabler väl kallas / Är alla av dina parenteser och klammerparenteserna 314 00:12:26,600 --> 00:12:27,920 linje som de borde vara? 315 00:12:27,920 --> 00:12:31,490 Vi har en CS50 stilguide som problemet uppsättningen kommer att peka dig på. 316 00:12:31,490 --> 00:12:33,730 De mer bekväm är Välkommen att avvika från den 317 00:12:33,730 --> 00:12:35,771 så länge du är själv konsekvent. 318 00:12:35,771 --> 00:12:38,020 Och detta är också en lektion vi ska förstärka i avsnitt. 319 00:12:38,020 --> 00:12:40,990 Så, om allt detta var lite snabb, inser P set och sektioner 320 00:12:40,990 --> 00:12:42,900 kommer att gå in mer på djupet inom kort. 321 00:12:42,900 --> 00:12:45,490 >> Men generellt har vi fåtal skopor till CS50. 322 00:12:45,490 --> 00:12:48,170 Poäng är i allmänhet på en skala av ett till tre, eller en till fem. 323 00:12:48,170 --> 00:12:50,836 Vi är literally-- och jag kan inte säga detta tillräckligt i den första veckan. 324 00:12:50,836 --> 00:12:51,582 Tre är bra. 325 00:12:51,582 --> 00:12:54,290 Så även om ja, tre ut av fem normalt, matematiskt, 326 00:12:54,290 --> 00:12:57,240 kan vara en 60 procent eller som en D-minus. 327 00:12:57,240 --> 00:12:58,840 Tre är i själva verket bra. 328 00:12:58,840 --> 00:13:01,050 Och, faktiskt, vi förväntar oss de flesta studenter i klassen 329 00:13:01,050 --> 00:13:04,280 att börja termen runt tvåor, treor och och fyror. 330 00:13:04,280 --> 00:13:05,510 Förmodligen inte så många femmor. 331 00:13:05,510 --> 00:13:06,661 Inte alltför många sådana. 332 00:13:06,661 --> 00:13:08,910 Men generellt starta i att sweet spot i kurvan 333 00:13:08,910 --> 00:13:11,694 så att när tiden går, det finns faktiskt utrymme för, 334 00:13:11,694 --> 00:13:13,360 och möjligheter för övre progression. 335 00:13:13,360 --> 00:13:15,810 Så ska du inte likställer tre med 60%. 336 00:13:15,810 --> 00:13:17,410 Det är mycket mer abstrakt än så. 337 00:13:17,410 --> 00:13:20,160 Formeln som vi beräknar kvaliteter viktas på följande sätt. 338 00:13:20,160 --> 00:13:21,610 Korrektheten är värt mest. 339 00:13:21,610 --> 00:13:23,010 Design är värt lite mindre. 340 00:13:23,010 --> 00:13:24,490 Style är värt lite mindre. 341 00:13:24,490 --> 00:13:26,950 Och detta i allmänhet fångar den tid 342 00:13:26,950 --> 00:13:29,800 som går till att få varje av dessa axlar precis lagom. 343 00:13:29,800 --> 00:13:31,810 Style är superlätt, bör vara supersnabb, 344 00:13:31,810 --> 00:13:33,657 men det är en lätt vana att få lata om. 345 00:13:33,657 --> 00:13:35,490 Korrektheten kan ta du för det mesta. 346 00:13:35,490 --> 00:13:38,990 Jagar vissa programfel kanske ta det extra timme eller mer, 347 00:13:38,990 --> 00:13:41,737 och så, poäng i slutändan fångar det. 348 00:13:41,737 --> 00:13:43,070 Och så nu en allvarligare ord. 349 00:13:43,070 --> 00:13:45,240 Eftersom CS50 har åtskillnad, för bättre 350 00:13:45,240 --> 00:13:47,440 eller ännu värre, att vara kanske bättre bekant 351 00:13:47,440 --> 00:13:50,065 med frågor om akademisk ärlighet än de flesta någon annan kurs. 352 00:13:50,065 --> 00:13:53,720 Och faktiskt, är det till min kännedom att vi skicka fler studenter, tyvärr, 353 00:13:53,720 --> 00:13:56,690 för disciplinära ändamål varje år som följd. Så, 354 00:13:56,690 --> 00:13:59,040 i syfte att fullt ut avslöjande, låt oss prata en kort stund 355 00:13:59,040 --> 00:14:02,820 om vad som händer i CS50, och vad du kan göra, och vad du kan vara uppmärksam på. 356 00:14:02,820 --> 00:14:05,530 >> Så här sedan 2007, när Jag ärvde kursen, 357 00:14:05,530 --> 00:14:07,870 är antalet Ad styrelse fall. 358 00:14:07,870 --> 00:14:10,690 Ad styrelsen Harvard disciplin kropp, eller nu Honor Counsel, 359 00:14:10,690 --> 00:14:13,790 till vilka fall hänvisas när elever gör något som kursens 360 00:14:13,790 --> 00:14:15,470 kursplan anser orimligt. 361 00:14:15,470 --> 00:14:17,220 Det finns ingen verklig mönster här, skulle jag säga. 362 00:14:17,220 --> 00:14:19,530 Det varierar över år men i allmänhet 363 00:14:19,530 --> 00:14:22,262 detta är antalet ärenden som avses. 364 00:14:22,262 --> 00:14:23,970 Antalet studenter som är inblandade? 365 00:14:23,970 --> 00:14:25,290 Det varierar också. 366 00:14:25,290 --> 00:14:27,930 Typiskt, förra året för instans, 29 studenter vid Harvard 367 00:14:27,930 --> 00:14:29,740 var Ad Boarded, så att säga. 368 00:14:29,740 --> 00:14:32,670 29 av dem nuvarande studenter, två av dem tidigare studenter, 369 00:14:32,670 --> 00:14:35,610 som samarbetade på något ogynnsam sätt. 370 00:14:35,610 --> 00:14:38,400 Och sedan när det gäller procentsats, är det oftast ca 3% 371 00:14:38,400 --> 00:14:41,360 av den klass som, tyvärr, gör dessa typer av beslut. 372 00:14:41,360 --> 00:14:44,470 >> Så förra året var 3,5% av CS50: s studentkåren 373 00:14:44,470 --> 00:14:46,820 Det var Ad Boarded, så att säga. 374 00:14:46,820 --> 00:14:48,490 >> Så, vad betyder allt detta? 375 00:14:48,490 --> 00:14:49,660 Och vad gör vi egentligen? 376 00:14:49,660 --> 00:14:52,930 >> Så, för full information, vi absolut, som datavetare, 377 00:14:52,930 --> 00:14:57,620 har programverktyg till vårt förfogande och det är väldigt lätt för oss, i rättvisans namn, 378 00:14:57,620 --> 00:15:00,980 att andra klasskamrater som inte korsar dessa linjer för att korsa jämföra 379 00:15:00,980 --> 00:15:04,570 varje underkastelse i år mot varje underkastelse under de senaste åtta åren. 380 00:15:04,570 --> 00:15:05,445 Programvaran gör detta. 381 00:15:05,445 --> 00:15:07,440 Och i slutändan är det mänskliga ögon som beslutar 382 00:15:07,440 --> 00:15:11,410 eller inte hänvisa någon roll för ytterligare prövning, 383 00:15:11,410 --> 00:15:12,737 men programvara hjälper verkligen. 384 00:15:12,737 --> 00:15:15,820 Och detta, ärligt talat, är därför att jag tror vi har så stora siffror i CS50. 385 00:15:15,820 --> 00:15:18,540 Det är inte för CS50 studenter eller CS eleverna mer 386 00:15:18,540 --> 00:15:20,840 generellt är något mindre ärlig än någon annan deltagare, 387 00:15:20,840 --> 00:15:22,340 Det är bara att vi har verktyg och tekniker 388 00:15:22,340 --> 00:15:24,095 som att ta detta första pass. 389 00:15:24,095 --> 00:15:25,960 >> Men vi hålla ett öga på alla dessa saker 390 00:15:25,960 --> 00:15:30,340 samt, återigen, med tanke på erkänner det arbete som är sätts 391 00:15:30,340 --> 00:15:32,397 i av en super majoritet av klassen. 392 00:15:32,397 --> 00:15:34,230 Och kursen politik på akademisk hederlighet, 393 00:15:34,230 --> 00:15:37,021 även om det är ett gäng av punkterna lång med en massa kulor 394 00:15:37,021 --> 00:15:40,490 som är förhoppningsvis ganska lättläst, det verkligen kokar ner för att vara rimligt. 395 00:15:40,490 --> 00:15:44,000 Och det bästa tumregel som Vi erbjuder upp inom kursplanen 396 00:15:44,000 --> 00:15:46,020 är detta, essensen av allt arbete som du 397 00:15:46,020 --> 00:15:47,850 underkasta sig den här kursen ska vara din egen. 398 00:15:47,850 --> 00:15:51,510 Och faktiskt, i nästan alla av dem fall som avses för disciplinära åtgärder 399 00:15:51,510 --> 00:15:55,640 Det var på grund av någon elev sent en natt vände typiskt sin kod 400 00:15:55,640 --> 00:15:58,130 över direkt till en klasskamrat, som sedan antagit 401 00:15:58,130 --> 00:16:00,840 i sin helhet eller avsevärt därav. 402 00:16:00,840 --> 00:16:02,680 >> Men egentligen, är detta OK. 403 00:16:02,680 --> 00:16:04,684 Och faktiskt, på kontoret timmar, de papperslappar 404 00:16:04,684 --> 00:16:07,850 du har överlämnats om du kom med kontor timmar förra veckan uppmuntrar lika mycket. 405 00:16:07,850 --> 00:16:09,710 Du är absolut välkomnas och uppmuntras 406 00:16:09,710 --> 00:16:12,340 att diskutera problemsamlingar med klasskamrater. 407 00:16:12,340 --> 00:16:14,461 För att hjälpa varandra när snubbla. 408 00:16:14,461 --> 00:16:17,710 Men i allmänhet tumregel bör vara så här ", när du ber om hjälp, 409 00:16:17,710 --> 00:16:20,412 du kan visa din kod för andra, men du kanske inte se deras. " 410 00:16:20,412 --> 00:16:22,620 Så, med andra ord, om jag kämpar med vissa P set 411 00:16:22,620 --> 00:16:25,290 och jag sitter där i matsal hall, eller i biblioteket, 412 00:16:25,290 --> 00:16:28,470 eller i klassrummet försöker hitta något fel, 413 00:16:28,470 --> 00:16:30,340 Jag kan verkligen visa min kod på min skärm 414 00:16:30,340 --> 00:16:32,590 till personen som sitter bredvid för mig, verkligen personal, 415 00:16:32,590 --> 00:16:33,600 men också en klasskompis. 416 00:16:33,600 --> 00:16:36,580 Men om den lösning som min klasskamrat erbjuder är, oh, 417 00:16:36,580 --> 00:16:39,200 här bara ta en titt på vad Jag gjorde, som korsar linjen. 418 00:16:39,200 --> 00:16:43,120 >> Och jag skulle våga säga att det är i allmänhet en rimlig sak för de flesta människor 419 00:16:43,120 --> 00:16:45,030 till mycket lätt se raden av. 420 00:16:45,030 --> 00:16:47,195 Och så, se kursplan för mer information. 421 00:16:47,195 --> 00:16:49,070 Och nu en av de mer kontroversiella aspekter 422 00:16:49,070 --> 00:16:52,529 av CS50 kursplan som jag trodde att jag skulle tala i slutsats här 423 00:16:52,529 --> 00:16:53,820 är den så kallade ånger klausulen. 424 00:16:53,820 --> 00:16:55,340 Så, här är allt det finstilta. 425 00:16:55,340 --> 00:16:58,090 Men i allmänhet har vi sett under de senaste 8 plus år 426 00:16:58,090 --> 00:17:01,510 att, ja, nästan alla CS50: s fall av akademisk oärlighet 427 00:17:01,510 --> 00:17:04,390 har varit resultatet av bara dålig beslutsfattande sent på natten. 428 00:17:04,390 --> 00:17:07,144 Det resultat av stress, resultatet av brist på äta, brist på sömn, 429 00:17:07,144 --> 00:17:09,560 alltför många P-apparater, alltför många tidsfrister, för många åtaganden. 430 00:17:09,560 --> 00:17:13,520 Stress bygga upp i en 02:00, 03:00 AM, 04:00, med en deadline hotande. 431 00:17:13,520 --> 00:17:17,020 De flesta elever i dessa fall har just gjort dåliga beslut 432 00:17:17,020 --> 00:17:20,619 att de kan mycket väl ångra Nästa morgon om inte minuter senare, 433 00:17:20,619 --> 00:17:25,490 men fram till förra året fanns det ingen avlastningsventil att dessa elever kunde 434 00:17:25,490 --> 00:17:29,140 faktiskt öppna upp för att faktiskt ta itu med problem huvudet på utan rädsla för att bli 435 00:17:29,140 --> 00:17:30,850 startas från college helt och hållet. 436 00:17:30,850 --> 00:17:33,260 >> Och faktiskt, introducerade vi Detta beklagar klausul förra året, 437 00:17:33,260 --> 00:17:35,970 som säger att om inom 72 timmar, tre dagar, 438 00:17:35,970 --> 00:17:37,970 att korsa någon linje föreskrivs i kursplanen 439 00:17:37,970 --> 00:17:41,178 du kommer fram till en av kursens huvuden och vi kommer att ha en pratstund om det. 440 00:17:41,178 --> 00:17:43,720 Det finns fortfarande finnas en viss resultatet, i motsats till vad som är 441 00:17:43,720 --> 00:17:44,990 rapporterats till motsatsen. 442 00:17:44,990 --> 00:17:49,190 Det finns fortfarande en del resultat som är talan av kursen 443 00:17:49,190 --> 00:17:51,611 allmänhet nollställning ett P set eller vidta någon annan åtgärd, 444 00:17:51,611 --> 00:17:53,610 men vi kommer faktiskt hantera det själva och inte 445 00:17:53,610 --> 00:17:58,460 hänskjuta det högre var resultatet kan vara mycket mer allvarliga. 446 00:17:58,460 --> 00:18:01,810 Och, ja, för att dela vad som hände förra året, under de åtta åren, och nu 447 00:18:01,810 --> 00:18:04,950 nio år, att undervisa denna kurs och efter mixtra med olika knoppar, 448 00:18:04,950 --> 00:18:07,866 vända olika rattarna under de senaste flera år på akademisk hederlighet, 449 00:18:07,866 --> 00:18:11,920 och ser per data accepteras inget uppenbara inverkan, även tal som denna, 450 00:18:11,920 --> 00:18:15,490 detta var händer ned det bästa Vi har infört pedagogiskt 451 00:18:15,490 --> 00:18:18,090 i åtta år tillsammans dessa rader i CS50. 452 00:18:18,090 --> 00:18:21,010 >> 19 elever kom fram enligt denna klausul i fjol. 453 00:18:21,010 --> 00:18:23,389 Vi tog inga åtgärder för sju av de studenter, 454 00:18:23,389 --> 00:18:25,430 fastställa att de var onödigt orolig. 455 00:18:25,430 --> 00:18:27,304 De hade i själva verket inte, korsade en linje, men det 456 00:18:27,304 --> 00:18:28,960 var en bra chatt att ha ändå. 457 00:18:28,960 --> 00:18:31,190 Vi zeroed 11 av poängen som lämnades in. 458 00:18:31,190 --> 00:18:33,840 Och i ett fall vi frågade en student att göra ett problembild. 459 00:18:33,840 --> 00:18:36,370 Men mer övertygande, ärligt, med dessa 19 chattar, 460 00:18:36,370 --> 00:18:39,020 som var långt mer än jag förväntas ha, var och en av dem 461 00:18:39,020 --> 00:18:41,370 10 minuter till kanske en timme lång, även fört 462 00:18:41,370 --> 00:18:44,920 att tända ett antal frågor angående familjära frågor, vän frågor, 463 00:18:44,920 --> 00:18:46,940 psykiska problem att vi bedriver sedan, 464 00:18:46,940 --> 00:18:50,200 med studentens välsignelse, bosatt dekan, eller vänner, eller något annat nummer 465 00:18:50,200 --> 00:18:51,450 supportresurser. 466 00:18:51,450 --> 00:18:54,454 För att detta var överlägset en av de bästa användningsområdena för vår tid 467 00:18:54,454 --> 00:18:55,870 och ett av de bästa insatser. 468 00:18:55,870 --> 00:18:58,870 >> Med detta sagt, hade det inte ingång på hastigheten av detektion 469 00:18:58,870 --> 00:19:00,909 akademisk oärlighet mer generellt. 470 00:19:00,909 --> 00:19:02,950 Och jag vågar säga, denna undergrupp studenter förra året 471 00:19:02,950 --> 00:19:06,350 var en demografiska som vi tidigare aldrig identifieras innan 472 00:19:06,350 --> 00:19:08,140 och hade aldrig i samband med tidigare. 473 00:19:08,140 --> 00:19:10,020 Och så var dessa underbara framgångshistorier 474 00:19:10,020 --> 00:19:13,390 trots att de fördes till ljus i mindre än optimala förhållanden. 475 00:19:13,390 --> 00:19:15,640 Så ha detta i åtanke som du gör, kanske, 476 00:19:15,640 --> 00:19:17,390 några dåliga beslut själv sent på natten, 477 00:19:17,390 --> 00:19:20,151 att det finns anlita så länge som studenten i en sådan situation 478 00:19:20,151 --> 00:19:23,400 äger upp och komma fram så att vi kan har den typen av chatt och ta itu med det 479 00:19:23,400 --> 00:19:27,310 på ett sätt som är pedagogiska och sedan vi kan lägga det bakom oss nästa dag. 480 00:19:27,310 --> 00:19:30,335 >> Så utan vidare, ta edge off av detta samtal, 481 00:19:30,335 --> 00:19:35,080 orsaken till att valparna är upp är bara för att bryta isen för ett ögonblick. 482 00:19:35,080 --> 00:19:39,560 Och tyvärr, de är alla sömn, men vad skulle hända här 483 00:19:39,560 --> 00:19:41,760 var alla var tänkt att respektingivande och typ av avkoppling 484 00:19:41,760 --> 00:19:43,910 efter det mycket tung konversation. 485 00:19:43,910 --> 00:19:46,930 Men tydligen har jag lagt valparna att sova. 486 00:19:46,930 --> 00:19:50,070 Men om du går till CS50: s webbplats slash valpar, 487 00:19:50,070 --> 00:19:51,610 du kan titta på dem hela dagen lång. 488 00:19:51,610 --> 00:19:55,280 Särskilt kanske 2:00 eller 03:00 eller 04:00 på natten 489 00:19:55,280 --> 00:19:57,480 att se en liten stressa där. 490 00:19:57,480 --> 00:19:58,805 Så det är slash valpar. 491 00:19:58,805 --> 00:20:01,700 492 00:20:01,700 --> 00:20:02,200 Okej. 493 00:20:02,200 --> 00:20:03,020 Var inte det roligt? 494 00:20:03,020 --> 00:20:04,200 OK. 495 00:20:04,200 --> 00:20:07,140 Så, tillbaka till någon dator vetenskap, om jag får. 496 00:20:07,140 --> 00:20:10,600 >> Så minns att förra gången vi började tittar inte bara på huvud, som 497 00:20:10,600 --> 00:20:13,930 var standard funktion, när gröna flaggan klickade motsvarande, 498 00:20:13,930 --> 00:20:16,999 men vi började också kort skriver några av våra egna funktioner. 499 00:20:16,999 --> 00:20:20,040 Och hittills ingen av dessa funktioner har varit särskilt stort eller köttig. 500 00:20:20,040 --> 00:20:24,570 Du får in i de större funktioner förmodligen P set 2, P set 3 501 00:20:24,570 --> 00:20:26,410 definitivt P set 4 och framåt. 502 00:20:26,410 --> 00:20:29,340 Just nu de flesta av dina program, om inte alla av dem, säkert för P 503 00:20:29,340 --> 00:20:31,550 set 1 kan göras helt i main. 504 00:20:31,550 --> 00:20:33,810 Om ditt program är bara fem rader, 10 linjer, 505 00:20:33,810 --> 00:20:37,070 även 20 rader lång, perfekt rimligt att skriva det 506 00:20:37,070 --> 00:20:40,930 alla i huvud och inte över komplicera koden, men vad vi gör i dag 507 00:20:40,930 --> 00:20:44,360 och framåt försöker också införa några bra design tekniker 508 00:20:44,360 --> 00:20:48,660 så att din kod blir mer komplicerade och de problem 509 00:20:48,660 --> 00:20:51,690 du vill lösa blir hårdare och mer intressant att du har, typ av, 510 00:20:51,690 --> 00:20:55,850 verktygen i din verktygslåda som att utforma bra lösningar till dem. 511 00:20:55,850 --> 00:21:01,210 >> Så, låt oss ta en snabb titt tillbaka på det här programmet från min förra veckan, vilket 512 00:21:01,210 --> 00:21:06,550 var funktioner noll dot C. Och märka det, helt enkelt, 513 00:21:06,550 --> 00:21:10,310 Det ser ut så här med två funktioner, huvud- och utskriftsnamn. 514 00:21:10,310 --> 00:21:13,160 Och tänker tillbaka eller kanske reverse engineering idag, 515 00:21:13,160 --> 00:21:16,880 Vad var motivationen för att införa en funktion i linje 28 kallas, 516 00:21:16,880 --> 00:21:18,180 Utskrifts namn? 517 00:21:18,180 --> 00:21:21,745 Eller vad var detta ett exempel på i termer av en princip eller takeaway, 518 00:21:21,745 --> 00:21:22,605 om du vill. 519 00:21:22,605 --> 00:21:26,560 520 00:21:26,560 --> 00:21:27,300 Några blåsljud. 521 00:21:27,300 --> 00:21:28,830 Va? 522 00:21:28,830 --> 00:21:32,210 >> Ja så Funktionell Nedbrytning är typen av finare sätt att säga, 523 00:21:32,210 --> 00:21:34,690 sönder ditt program i dess beståndsdelar 524 00:21:34,690 --> 00:21:37,530 och sedan använda dessa delar att sätta samman en helhet. 525 00:21:37,530 --> 00:21:39,620 Så är också att bara typ av en klunk redan, 526 00:21:39,620 --> 00:21:42,050 men det är kanske till och med en bättre exempel på något 527 00:21:42,050 --> 00:21:43,081 bara kallas abstraktion. 528 00:21:43,081 --> 00:21:43,580 Höger? 529 00:21:43,580 --> 00:21:46,950 Abstraktion kommer att vara en av de återkommande teman i CS50 530 00:21:46,950 --> 00:21:49,085 och även datavetenskap mer generellt eftersom det är 531 00:21:49,085 --> 00:21:53,060 en teknik med vilken du kan lösa problem mer effektivt eftersom du 532 00:21:53,060 --> 00:21:56,807 kan skriva lösningar mer intuitivt och på ett sätt som skalar 533 00:21:56,807 --> 00:21:58,390 och är förstås av andra människor. 534 00:21:58,390 --> 00:21:59,860 Vad menar jag med det? 535 00:21:59,860 --> 00:22:04,340 >> Så, det är utan tvekan mycket mer lättläst att titta på ett program som detta, 536 00:22:04,340 --> 00:22:05,990 super kort men det är. 537 00:22:05,990 --> 00:22:10,050 När du ser på linjen 22 att det finns en funktion som kallas, utskriftsnamn. 538 00:22:10,050 --> 00:22:12,620 Det namnet ensam säger vad den gör. 539 00:22:12,620 --> 00:22:15,780 Denna funktion tydligen tar input mellan sina parenteser, 540 00:22:15,780 --> 00:22:18,600 och uppenbarligen gör något, förmodligen skriver namnet. 541 00:22:18,600 --> 00:22:20,880 Och så, även om vi absolut kan ha 542 00:22:20,880 --> 00:22:25,280 gjort vad vi gjorde för en vecka sedan, som var bara ta denna faktiska kodraden, 543 00:22:25,280 --> 00:22:28,710 bli av detta, och få bli av med detta alla tillsammans, 544 00:22:28,710 --> 00:22:31,436 vi sorts abstraherade bort begreppet skriva ut ett namn. 545 00:22:31,436 --> 00:22:33,060 Jag bryr mig inte om du använder utskrifts def. 546 00:22:33,060 --> 00:22:35,601 Jag bryr mig inte om du har en procent S och ett bakstreck N. Dessa 547 00:22:35,601 --> 00:22:37,270 är otroligt svårbegripliga detaljer. 548 00:22:37,270 --> 00:22:40,090 Vad jag bryr mig om som en programmerare skriver ett namn. 549 00:22:40,090 --> 00:22:43,414 Och så, vad bättre sätt att göra det än genom att anropa en funktion, tryck namn? 550 00:22:43,414 --> 00:22:46,330 Och så, det var en av de motiv för att göra något sådant. 551 00:22:46,330 --> 00:22:50,370 Göra koden mer lättläst, mer återanvändbara, och även själv beskrivande. 552 00:22:50,370 --> 00:22:52,120 Nu ska vi ta en titt på ett annat exempel, 553 00:22:52,120 --> 00:22:56,220 vilket var funktioner en, som vi hade här. 554 00:22:56,220 --> 00:23:00,367 >> Så detta är en kanske ännu mer övertygande eftersom, i detta fall, 555 00:23:00,367 --> 00:23:01,700 Jag vill inte bara få en int. 556 00:23:01,700 --> 00:23:03,320 Jag vill få en positiv int. 557 00:23:03,320 --> 00:23:06,470 Och det visar sig att få en positiv int du måste göra en massa legwork. 558 00:23:06,470 --> 00:23:06,969 Höger? 559 00:23:06,969 --> 00:23:09,600 Det är inte en enkel rad ring som utskrifts hette, 560 00:23:09,600 --> 00:23:11,480 vilket är visserligen mindre övertygande. 561 00:23:11,480 --> 00:23:16,000 >> För att få en positiv int, logically-- Låt mig rulla tillbaka ner för att dölja detta. 562 00:23:16,000 --> 00:23:18,887 Vad måste du göra? 563 00:23:18,887 --> 00:23:20,720 Liksom alla de verktyg vi har just nu är 564 00:23:20,720 --> 00:23:24,440 saker som utskrifts def från Standard Bibliotek och även från CS50 bibliotek 565 00:23:24,440 --> 00:23:26,990 Vi har få Int, och få Float, Få Lång Lång, få String, 566 00:23:26,990 --> 00:23:29,260 men den enda, Germane, just nu är att få Int. 567 00:23:29,260 --> 00:23:32,970 Så, om det enda verktyg man har i din verktygslåda är Få Int, 568 00:23:32,970 --> 00:23:35,505 hur ska vi gå om att genomföra den för att få positiva int? 569 00:23:35,505 --> 00:23:35,929 >> PUBLIK: Skapa en logg och kontrollera om huruvida den ingång som de gav 570 00:23:35,929 --> 00:23:36,762 var positivt eller inte. 571 00:23:36,762 --> 00:23:39,390 572 00:23:39,390 --> 00:23:40,640 >> TALARE 1: Perfect. 573 00:23:40,640 --> 00:23:41,200 Exakt. 574 00:23:41,200 --> 00:23:43,950 Ett annat verktyg som vi har i vår verktygslåda från en vecka eller två sedan 575 00:23:43,950 --> 00:23:45,419 är bara looping konstruktionen. 576 00:23:45,419 --> 00:23:48,210 Och så, ja, om vi använder en stund loop, eller en gör while-slinga eller en främre 577 00:23:48,210 --> 00:23:50,850 loop vi skulle förmodligen komma undan med någon av de i någon form. 578 00:23:50,850 --> 00:23:55,140 Vi kan genomföra begreppet get positiva int genom att bara använda Få Int, 579 00:23:55,140 --> 00:23:57,830 och sedan bara hålla kalla det igen och hålla tjat användaren 580 00:23:57,830 --> 00:24:00,320 tills han eller hon faktiskt ger oss vad vi vill. 581 00:24:00,320 --> 00:24:03,260 >> Och så nu detta abstraktion av processen 582 00:24:03,260 --> 00:24:05,680 för att få en positiv int in en funktion som kallas 583 00:24:05,680 --> 00:24:08,930 Få Positiv Int är lite mer övertygande eftersom titta på detta. 584 00:24:08,930 --> 00:24:10,990 Dessa är som 10 plus kodrader som 585 00:24:10,990 --> 00:24:15,090 är involverade i att få en positiv int, och jag bryr mig egentligen inte hur du gör det. 586 00:24:15,090 --> 00:24:17,850 Allt jag bryr mig är att du kan göra det, så jag har 587 00:24:17,850 --> 00:24:21,660 dolda alla dessa detaljer bakom en funktion kallad Få Positivt int att 588 00:24:21,660 --> 00:24:23,430 Så har det do while-slinga. 589 00:24:23,430 --> 00:24:27,660 >> Och se förra veckan för syntaxen där, men det bara förklarar N, 590 00:24:27,660 --> 00:24:29,800 och det skriver ut instruktion till användaren. 591 00:24:29,800 --> 00:24:33,330 Det kallar Få Int och kontrollerar sedan det detta tillstånd igen, och igen, 592 00:24:33,330 --> 00:24:35,230 och igen tills användaren samverkar. 593 00:24:35,230 --> 00:24:38,000 >> Så nu, några rimlighetskontroller. 594 00:24:38,000 --> 00:24:40,370 För dem som kanske bekant med viss programmering, 595 00:24:40,370 --> 00:24:46,410 varför N förklarade varför jag skapar N utanför göra medan loop? 596 00:24:46,410 --> 00:24:50,370 Varför är det på rad 29 och inte på liknande 33, till exempel. 597 00:24:50,370 --> 00:24:53,529 >> PUBLIK: För när du förklara den utanför, det slags 598 00:24:53,529 --> 00:24:56,688 av mer, ju större scope-- 599 00:24:56,688 --> 00:24:58,146 >> TALARE 1: Bra. 600 00:24:58,146 --> 00:24:59,604 >> PUBLIK: --and om du deklarerar det innanför slingan, [OHÖRBAR] 601 00:24:59,604 --> 00:25:00,979 eftersom den inte vet om det. 602 00:25:00,979 --> 00:25:02,819 603 00:25:02,819 --> 00:25:03,610 TALARE 1: Exakt. 604 00:25:03,610 --> 00:25:06,330 Om jag kan simplify-- Det är en fråga om omfattning. 605 00:25:06,330 --> 00:25:11,530 Och omfattning hänvisas till det sammanhang i som en variabel existerar eller är användbar. 606 00:25:11,530 --> 00:25:15,050 Och den fina tumregel här är att i allmänhet när du deklarerar eller skapa 607 00:25:15,050 --> 00:25:21,642 en variabel som du bara kan använda det inne av de närmaste omfamna klammerparenteserna. 608 00:25:21,642 --> 00:25:22,600 Så vad betyder det? 609 00:25:22,600 --> 00:25:26,551 Om jag istället ångra detta och gå med något som känns lite enklare. 610 00:25:26,551 --> 00:25:27,050 Höger? 611 00:25:27,050 --> 00:25:29,360 >> Linje 32 ser ut precis renare för mig nu. 612 00:25:29,360 --> 00:25:31,500 Jag gör båda sakerna på en gång och sedan tilldela 613 00:25:31,500 --> 00:25:33,070 den högra till den vänstra. 614 00:25:33,070 --> 00:25:35,180 Problemet nu baseras på denna definition av tillämpningsområdet 615 00:25:35,180 --> 00:25:41,130 är att N kan användas i rader 31 och 32 på insidan av denna slinga, 616 00:25:41,130 --> 00:25:45,100 men där av denna definition kan det inte användas? 617 00:25:45,100 --> 00:25:45,660 I linje vad? 618 00:25:45,660 --> 00:25:46,160 Yeah. 619 00:25:46,160 --> 00:25:47,490 >> PUBLIK: 35. 620 00:25:47,490 --> 00:25:49,180 >> TALARE 1: 35. 621 00:25:49,180 --> 00:25:50,480 Definitivt inte 35. 622 00:25:50,480 --> 00:25:52,349 Och även var annars? 623 00:25:52,349 --> 00:25:52,890 PUBLIK: 34. 624 00:25:52,890 --> 00:25:55,040 TALARE 1: Även 34 är problematiskt eftersom det är 625 00:25:55,040 --> 00:25:56,450 utanför klammerparenteserna. 626 00:25:56,450 --> 00:25:58,200 Och så i själva verket, låt oss se vad som händer. 627 00:25:58,200 --> 00:25:58,700 Höger? 628 00:25:58,700 --> 00:26:00,722 Detta kan tyckas lite intuitiv eller kanske inte, 629 00:26:00,722 --> 00:26:02,680 men låt oss se vad kompilator har att säga när 630 00:26:02,680 --> 00:26:04,730 vi går in dagens källkods-katalogen. 631 00:26:04,730 --> 00:26:08,950 Gör funktion en. 632 00:26:08,950 --> 00:26:11,231 Herregud. 633 00:26:11,231 --> 00:26:12,980 Tja, jag äntligen klar att, förresten. 634 00:26:12,980 --> 00:26:14,030 Okej. 635 00:26:14,030 --> 00:26:15,510 Och vad är problemet här? 636 00:26:15,510 --> 00:26:17,430 Mycket svårbegripliga att titta på. 637 00:26:17,430 --> 00:26:19,570 Men här är vad jag typed-- gör funktionen en. 638 00:26:19,570 --> 00:26:21,640 Här är det som gör induceras som är faktiskt 639 00:26:21,640 --> 00:26:23,705 med hjälp av kompilatorn clang med vissa av dessa flaggor 640 00:26:23,705 --> 00:26:25,080 att vi kommer att se igen snart. 641 00:26:25,080 --> 00:26:26,829 Och återigen, alltid titta vid det första felet, 642 00:26:26,829 --> 00:26:30,540 eftersom det kan bara ha en kaskad meningslös effekt på andra linjer. 643 00:26:30,540 --> 00:26:34,410 >> Så vad detta betyder är att Problemet är i funktion 1.c. 644 00:26:34,410 --> 00:26:36,890 Det är på linje 32. 645 00:26:36,890 --> 00:26:39,712 Och det är vid kolumn eller karaktär, 13. 646 00:26:39,712 --> 00:26:42,670 Så när din textredigerare som kan hjälpa dig att identifiera var problemet är. 647 00:26:42,670 --> 00:26:47,079 Så om jag rulla upp, vad är linje 32? 648 00:26:47,079 --> 00:26:49,120 Det är sannerligen här som är redan markerat 649 00:26:49,120 --> 00:26:50,607 just här-- oanvända variabeln n. 650 00:26:50,607 --> 00:26:51,440 Men det är inte oanvänd. 651 00:26:51,440 --> 00:26:52,320 Jag använder det. 652 00:26:52,320 --> 00:26:56,110 Men kompilatorn förvirrade, eftersom det bara finns inne i denna omfattning. 653 00:26:56,110 --> 00:26:57,727 Och så jag kan inte använda den här. 654 00:26:57,727 --> 00:26:58,560 Jag kan inte använda den här. 655 00:26:58,560 --> 00:27:01,320 Och kompilatorn därför inte ens bry sig om att jag försöker. 656 00:27:01,320 --> 00:27:03,940 Det verkar vara oanvänd inom dess faktiska omfattning. 657 00:27:03,940 --> 00:27:08,854 >> Så vi kan bredda genom att göra exakt vad vi började with-- int n. 658 00:27:08,854 --> 00:27:11,020 Och även om det inte ser lika elegant, kanske, 659 00:27:11,020 --> 00:27:15,110 och vi tar en extra rad här, nu är det i omfattning överallt. 660 00:27:15,110 --> 00:27:15,970 Så låt oss försöka igen. 661 00:27:15,970 --> 00:27:19,040 Så gör funktionen en. 662 00:27:19,040 --> 00:27:19,610 Fin. 663 00:27:19,610 --> 00:27:23,370 Och nu om jag om jag kör funktion en, låt oss ge det negativa 10, 664 00:27:23,370 --> 00:27:27,170 -1, 0, 1, och det verkligen fungerar. 665 00:27:27,170 --> 00:27:28,610 >> Så det finns en annan lösning här. 666 00:27:28,610 --> 00:27:29,280 Du vet vad? 667 00:27:29,280 --> 00:27:31,230 Vad händer om jag verkligen brottas med detta? 668 00:27:31,230 --> 00:27:33,140 Jag vet inte var det n är tänkt att gå. 669 00:27:33,140 --> 00:27:33,723 Du vet vad? 670 00:27:33,723 --> 00:27:39,220 Jag kommer bara att sätta det hela sätt på toppen av min fil här. 671 00:27:39,220 --> 00:27:42,835 Vad skulle det göra, tror du? 672 00:27:42,835 --> 00:27:43,335 Yeah? 673 00:27:43,335 --> 00:27:44,251 >> PUBLIK: [OHÖRBAR]. 674 00:27:44,251 --> 00:27:47,964 675 00:27:47,964 --> 00:27:48,630 TALARE 1: Ja. 676 00:27:48,630 --> 00:27:50,560 Så jag har gjort det globalt, så att säga. 677 00:27:50,560 --> 00:27:54,430 Om du har en variabel som är utanför alla dina funktioner som är tillåtet, 678 00:27:54,430 --> 00:27:58,780 koden bör sammanställa och n kommer nu vara tillgängliga inte bara i get 679 00:27:58,780 --> 00:28:02,490 positiv int, men också i main-- som är lite oroande eftersom det finns 680 00:28:02,490 --> 00:28:04,864 redan ett n i main, så mer på det på bara en moment-- 681 00:28:04,864 --> 00:28:06,530 men detta skulle anses dålig design. 682 00:28:06,530 --> 00:28:06,910 Okej. 683 00:28:06,910 --> 00:28:08,570 Om du måste ta till något liknande, åh, jag 684 00:28:08,570 --> 00:28:10,125 bara sätta upp det här eftersom koden verkar sammanställa 685 00:28:10,125 --> 00:28:12,180 är i allmänhet inte den bästa praxis. 686 00:28:12,180 --> 00:28:14,590 Snarare du vill välja snävast möjliga omfattning 687 00:28:14,590 --> 00:28:18,720 för dina variabler, skulle vilket innebär gå med vår ursprungliga design, som 688 00:28:18,720 --> 00:28:19,920 är just här. 689 00:28:19,920 --> 00:28:24,400 >> Nu som en sidoreplik, om du hade en identiskt namngiven variabel här, 690 00:28:24,400 --> 00:28:27,750 vägen c skulle hantera this-- även om detta inte kommer att hända alltför often-- 691 00:28:27,750 --> 00:28:30,150 är att detta är fortfarande mycket bra här. 692 00:28:30,150 --> 00:28:35,000 Men denna definition av n i linje 22 kommer att skugga global. 693 00:28:35,000 --> 00:28:38,190 Så här kommer att arbeta inom viktigaste, och den globala ett 694 00:28:38,190 --> 00:28:41,670 faktiskt kommer att gälla när du är i få positiva int Men mer om det 695 00:28:41,670 --> 00:28:43,890 en annan gång, men bara för dem nyfikna. 696 00:28:43,890 --> 00:28:45,970 >> Så kort sagt, vi fixar det här. 697 00:28:45,970 --> 00:28:49,220 Nu retas isär två andra pjäser innan vi tittar på en sista kodrad 698 00:28:49,220 --> 00:28:50,170 i detta program. 699 00:28:50,170 --> 00:28:52,170 Få positiva int. 700 00:28:52,170 --> 00:28:54,450 På den vänstra sidan av sitt ord är ordet int. 701 00:28:54,450 --> 00:28:56,860 Vad betyder det betyda tror du? 702 00:28:56,860 --> 00:28:58,900 Hittills har vi mest sett ogiltig. 703 00:28:58,900 --> 00:28:59,400 Yeah? 704 00:28:59,400 --> 00:29:01,810 >> PUBLIK: Det är den typ av variabel som du frågar om. 705 00:29:01,810 --> 00:29:04,550 >> TALARE 1: Ja, det är den typ av, låt mig inte säga variabel, men vilken typ av värde 706 00:29:04,550 --> 00:29:05,990 att jag frågar tillbaka. 707 00:29:05,990 --> 00:29:08,070 Och faktiskt, det är intuitiv här, förhoppningsvis. 708 00:29:08,070 --> 00:29:08,200 Höger? 709 00:29:08,200 --> 00:29:10,250 Om du vill få en positiv int, vad är det du 710 00:29:10,250 --> 00:29:12,920 vill function-- som vår volontärer från förra veckan 711 00:29:12,920 --> 00:29:15,720 att lämna tillbaka en bit papper med en int på det? 712 00:29:15,720 --> 00:29:19,190 Och så vi har angett att s.k. returtyp av denna funktion 713 00:29:19,190 --> 00:29:20,450 är att få positiv int. 714 00:29:20,450 --> 00:29:22,990 Om vi ​​inte vill att det ska tillbaka något, du säger ogiltiga. 715 00:29:22,990 --> 00:29:25,270 Om du vill att det ska återvända en sträng, säger du sträng. 716 00:29:25,270 --> 00:29:27,310 Om du vill att det ska återvända en flottör, säger du flyta. 717 00:29:27,310 --> 00:29:30,440 Men det enda som gäller här logiskt, eftersom jag använder få int, 718 00:29:30,440 --> 00:29:34,130 trots att jag begränsar det till positiva värden, är att återvända en int. 719 00:29:34,130 --> 00:29:38,380 >> Så omvänt, vad betyder det att det finns ett tomrum inom parentes? 720 00:29:38,380 --> 00:29:40,130 Vad gör parentes generellt definiera? 721 00:29:40,130 --> 00:29:40,588 Yeah? 722 00:29:40,588 --> 00:29:42,880 >> PUBLIK: Det betyder funktionens faktiskt inte få det. 723 00:29:42,880 --> 00:29:44,650 >> TALARE 1: Det betyder funktionens faktiskt inte får vad? 724 00:29:44,650 --> 00:29:45,430 >> Publik: En ingång. 725 00:29:45,430 --> 00:29:46,763 >> TALARE 1: En ingång, helst. 726 00:29:46,763 --> 00:29:49,870 Så ja, om parentes här du anger ogiltiga, 727 00:29:49,870 --> 00:29:51,650 det betyder bara att jag inte vill ha någon ingång. 728 00:29:51,650 --> 00:29:53,269 Jag ska ta itu med själv problemet. 729 00:29:53,269 --> 00:29:55,810 Och faktiskt, behöver du inte att berätta få positiva int någonting. 730 00:29:55,810 --> 00:29:59,630 Du kan bara säga, få positiva int, och att Funktionen kommer att gå ut och göra sin sak. 731 00:29:59,630 --> 00:30:02,970 >> Men det har varit ett litet trick jag har spelat här hela tiden 732 00:30:02,970 --> 00:30:04,970 att se till att denna kod sammanställer. 733 00:30:04,970 --> 00:30:09,620 Lägg märke till att int-- få positiva int void-- ligger på linje 27. 734 00:30:09,620 --> 00:30:14,530 Men av någon till synes konstig anledning det är också upp här på rad 16. 735 00:30:14,530 --> 00:30:18,530 Och bara för bra åtgärd Jag ska upprepa detta så det är helt identiska. 736 00:30:18,530 --> 00:30:21,640 Och jag har sagt prototyp med en liten en-line kommentar. 737 00:30:21,640 --> 00:30:28,850 Vad händer om jag tar bort det, och nu köra gör funktion 1 anger. 738 00:30:28,850 --> 00:30:29,350 Hoppsan. 739 00:30:29,350 --> 00:30:32,527 740 00:30:32,527 --> 00:30:33,110 Vänta en minut. 741 00:30:33,110 --> 00:30:34,764 Var är min flik? 742 00:30:34,764 --> 00:30:35,263 Va? 743 00:30:35,263 --> 00:30:37,969 744 00:30:37,969 --> 00:30:39,620 Standby. 745 00:30:39,620 --> 00:30:41,570 Gör funktion 1. 746 00:30:41,570 --> 00:30:42,150 Det går vi. 747 00:30:42,150 --> 00:30:42,310 OK. 748 00:30:42,310 --> 00:30:43,400 Hade inte sparat det ordentligt. 749 00:30:43,400 --> 00:30:45,220 Så jag tror det finns en liten bugg här där jag är inte 750 00:30:45,220 --> 00:30:46,636 se fliknamnet för tillfället. 751 00:30:46,636 --> 00:30:47,940 Så vad är det som händer här? 752 00:30:47,940 --> 00:30:52,210 Implicit deklaration av funktion få positiva int är ogiltig i C99. 753 00:30:52,210 --> 00:30:53,940 Så förvirrande igen. 754 00:30:53,940 --> 00:30:55,200 Så vad är detta ett tecken på? 755 00:30:55,200 --> 00:30:57,287 Tja, visar det sig att C är ganska dumt. 756 00:30:57,287 --> 00:30:59,912 Tja, det är programmeringen språk, eller snarare kompilatorn är. 757 00:30:59,912 --> 00:31:02,940 Det vet bara vad du har lärde, och det är bara 758 00:31:02,940 --> 00:31:05,640 kommer att veta något Om du lärt det förut. 759 00:31:05,640 --> 00:31:07,960 Med andra ord, i Huvud just nu, jag är 760 00:31:07,960 --> 00:31:10,900 försöker ringa en funktion kallas få positiva int. 761 00:31:10,900 --> 00:31:14,120 Men kompilatorn inte kommer lägga märke till att få en positiv int 762 00:31:14,120 --> 00:31:16,500 existerar tills ledningen 26. 763 00:31:16,500 --> 00:31:21,360 Och så vad kompilatorn gör är bara fel så snart det blir till ledningen 17, 764 00:31:21,360 --> 00:31:23,700 säger implicit deklaration av få positiva int, som 765 00:31:23,700 --> 00:31:27,740 är bara ett fint sätt att säga, jag vet inte vet vad får positiva int ännu. 766 00:31:27,740 --> 00:31:31,240 >> Andra språk som Java och Python och Ruby kan se framåt. 767 00:31:31,240 --> 00:31:32,240 C inte. 768 00:31:32,240 --> 00:31:35,110 Och så sätt att fixa detta är ett av två sätt. 769 00:31:35,110 --> 00:31:40,160 Antingen en, om problemet är att få positiv int inte har sett förut, 770 00:31:40,160 --> 00:31:42,150 Tja, låt mig bara flytta den till toppen. 771 00:31:42,150 --> 00:31:43,650 Det skulle lösa problemet. 772 00:31:43,650 --> 00:31:46,790 Men generellt är det anses bättre teknik 773 00:31:46,790 --> 00:31:50,220 att sätta din huvuduppgift vid mycket toppen så att en människa som läser din kod 774 00:31:50,220 --> 00:31:52,710 vet vad programmet gör, eftersom huvud inte begravd alla 775 00:31:52,710 --> 00:31:53,960 vägen i botten eller i mitten. 776 00:31:53,960 --> 00:31:55,130 Det är högst upp. 777 00:31:55,130 --> 00:31:56,410 Så som inte känns perfekt. 778 00:31:56,410 --> 00:31:58,326 Och du kan faktiskt få i situationer där 779 00:31:58,326 --> 00:32:00,820 om ett funktionsanrop en annan, vilket kräver en annan, 780 00:32:00,820 --> 00:32:04,630 du kan hamna i en fråga där ingen kan gå över den andra, logiskt. 781 00:32:04,630 --> 00:32:05,920 Det är bara inte möjligt. 782 00:32:05,920 --> 00:32:09,290 >> Och så sätt att arbeta runt detta är att bara ta 783 00:32:09,290 --> 00:32:13,200 funktionen underskrift, så att speak-- den första raden där det är declared-- 784 00:32:13,200 --> 00:32:16,850 och bara kopiera, klistra in den på toppen, men inte med lockigt braces-- 785 00:32:16,850 --> 00:32:17,980 bara med ett semikolon. 786 00:32:17,980 --> 00:32:20,840 Det är som en liten ledtråd av vad som komma skall. 787 00:32:20,840 --> 00:32:26,630 Och faktiskt, all denna tid, då vi har sett saker som standard io.h 788 00:32:26,630 --> 00:32:33,040 och cs50.h, Även i dessa dot h-filer finns det andra prototyper. 789 00:32:33,040 --> 00:32:35,250 Och vi ser att inom kort. 790 00:32:35,250 --> 00:32:39,340 >> Så kort sagt, när du har ett program i en fil med flera funktioner 791 00:32:39,340 --> 00:32:42,300 förutom huvud, du nästan alltid vill deklarera dem 792 00:32:42,300 --> 00:32:45,360 bara genom sin första linjen, följt av ett semikolon, 793 00:32:45,360 --> 00:32:48,410 högst upp i filen. 794 00:32:48,410 --> 00:32:50,460 Det var en hel del på en gång. 795 00:32:50,460 --> 00:32:53,130 Några frågor? 796 00:32:53,130 --> 00:32:53,920 Några frågor? 797 00:32:53,920 --> 00:32:54,530 Okej. 798 00:32:54,530 --> 00:32:59,760 >> Så låt oss gå vidare sedan till något som hosta. 799 00:32:59,760 --> 00:33:00,260 Oh. 800 00:33:00,260 --> 00:33:00,570 Hur passande. 801 00:33:00,570 --> 00:33:01,220 Okej. 802 00:33:01,220 --> 00:33:02,260 Hosta. 803 00:33:02,260 --> 00:33:05,080 Så här är en c genomförande av ett program 804 00:33:05,080 --> 00:33:07,560 vi gjorde häromdagen i Scratch som mycket enkelt bara 805 00:33:07,560 --> 00:33:08,691 säger hosta, hosta, hosta. 806 00:33:08,691 --> 00:33:09,190 Okej. 807 00:33:09,190 --> 00:33:11,136 Och någon sade ett par dagar sedan att det finns 808 00:33:11,136 --> 00:33:12,760 ett sätt att rengöra den här koden upp redan. 809 00:33:12,760 --> 00:33:12,880 Okej? 810 00:33:12,880 --> 00:33:15,440 Så snart du kopierar och klistra förmodligen dålig design. 811 00:33:15,440 --> 00:33:18,725 Minst en gång får vi fyra eller fem eller 20 hosta, känns det dålig praxis. 812 00:33:18,725 --> 00:33:19,850 Vi håller bara kopiera, klistra. 813 00:33:19,850 --> 00:33:22,213 Vad är den självklara lösningen att rengöra det här programmet upp? 814 00:33:22,213 --> 00:33:23,120 >> PUBLIK: Loop. 815 00:33:23,120 --> 00:33:23,350 >> TALARE 1: Ja. 816 00:33:23,350 --> 00:33:24,070 Så använd en loop. 817 00:33:24,070 --> 00:33:27,697 Och vi kan använda en for-loop, ett tag slinga, vilket som helst antal metoder. 818 00:33:27,697 --> 00:33:29,780 Och faktiskt, är vad som vi gör i version ett här. 819 00:33:29,780 --> 00:33:32,250 Jag har i stället skrivas det i version ett av cough.c 820 00:33:32,250 --> 00:33:35,170 bara vara hosta inom en for-loop. 821 00:33:35,170 --> 00:33:38,240 Okej, men det finns en möjlighet nu till typ av start 822 00:33:38,240 --> 00:33:41,630 att utforma denna lite mer som lektionen vi lärt en stund sedan, 823 00:33:41,630 --> 00:33:46,190 vilket är this-- antar att jag ville för att skapa en funktion som kallas hosta, 824 00:33:46,190 --> 00:33:49,730 låt oss betrakta bara ett ögonblick vad det kommer att se ut. 825 00:33:49,730 --> 00:33:51,900 Så om jag vill ha något hosta, jag behöver bara 826 00:33:51,900 --> 00:33:53,800 att använda utskrifts f inuti funktionen. 827 00:33:53,800 --> 00:33:55,030 Och faktiskt jag. 828 00:33:55,030 --> 00:33:56,990 Och faktiskt, allt detta tid, varje gång du är 829 00:33:56,990 --> 00:33:59,000 utskrift något skärmen, en programmerare 830 00:33:59,000 --> 00:34:00,610 skulle kalla det en bieffekt. 831 00:34:00,610 --> 00:34:02,990 Det är mig inte lämna tillbaka någon ett värde. 832 00:34:02,990 --> 00:34:06,170 Det är mig ta några åtgärder som kan vara visuellt uppenbar. 833 00:34:06,170 --> 00:34:10,672 Men denna funktion hosta, det åter allt baserat på dess första raden? 834 00:34:10,672 --> 00:34:12,880 Nej, eftersom dess returtyp är ogiltigt, vilket betyder bara 835 00:34:12,880 --> 00:34:14,250 det är inte gav mig någonting tillbaka. 836 00:34:14,250 --> 00:34:16,791 Det kan göra något visuellt, men det är inte lämna mig 837 00:34:16,791 --> 00:34:18,639 backa en bit papper som förra veckan. 838 00:34:18,639 --> 00:34:21,310 >> Behöver det någon ingång? 839 00:34:21,310 --> 00:34:21,810 Nej. 840 00:34:21,810 --> 00:34:23,134 Och så är det ogiltigt här också. 841 00:34:23,134 --> 00:34:25,600 Så det här är för typ av över engineering detta problem. 842 00:34:25,600 --> 00:34:26,099 Höger? 843 00:34:26,099 --> 00:34:28,820 Jag har gjort programmet mer komplexa, flera rader kod, 844 00:34:28,820 --> 00:34:31,889 Jag har inte gjort det mer funktionella, men detta 845 00:34:31,889 --> 00:34:34,210 skulle vara en språngbräda, kanske för en bredare 846 00:34:34,210 --> 00:34:36,830 sammanhang med mer komplicerad kod. 847 00:34:36,830 --> 00:34:38,150 Men hur är det? 848 00:34:38,150 --> 00:34:42,050 Vad har jag done-- bara blick på detta utan att titta på kommentaren 849 00:34:42,050 --> 00:34:46,076 högst upp på file-- vad har Jag grunden gjort här med min hosta 850 00:34:46,076 --> 00:34:47,409 genomförandet som är annorlunda? 851 00:34:47,409 --> 00:34:48,327 Ja, på baksidan? 852 00:34:48,327 --> 00:34:51,384 >> PUBLIK: Gör det så att du kan har en karaktär stänga. 853 00:34:51,384 --> 00:34:52,050 TALARE 1: Ja. 854 00:34:52,050 --> 00:34:53,270 Så det känns ganska trevligt. 855 00:34:53,270 --> 00:34:53,389 Höger? 856 00:34:53,389 --> 00:34:56,600 Det är som att lägga till en funktion till program eller din funktion, i det här fallet. 857 00:34:56,600 --> 00:34:57,830 Den returnerar fortfarande ingenting. 858 00:34:57,830 --> 00:35:00,538 Det kan ha en visuell bieffekt, eftersom det ringer print f. 859 00:35:00,538 --> 00:35:02,800 Men nu har jag parametrized funktionen, som 860 00:35:02,800 --> 00:35:06,470 betyder att jag har angett tagit inmatning av typen int och kallar det n, 861 00:35:06,470 --> 00:35:08,510 men jag kan kalla det vad jag vill. 862 00:35:08,510 --> 00:35:11,550 I själva verket kan det bara vara gånger för att bli ännu tydligare. 863 00:35:11,550 --> 00:35:13,310 Och då kunde jag bara ändra det här. 864 00:35:13,310 --> 00:35:16,450 Men poängen är att det är hur jag skapa en funktion som tar indata. 865 00:35:16,450 --> 00:35:19,530 Och om du minns vända genom kanske på nätet i en 866 00:35:19,530 --> 00:35:23,000 av genomgångar, den fjärde och sista hosta exempel, 867 00:35:23,000 --> 00:35:27,150 du kommer att märka här har jag gener min kod further-- slags abstraherade 868 00:35:27,150 --> 00:35:27,690 det ytterligare. 869 00:35:27,690 --> 00:35:31,390 Liksom hosta och nysning, båda är ungefär som att säga något eller göra 870 00:35:31,390 --> 00:35:32,330 någon form av ljud. 871 00:35:32,330 --> 00:35:34,725 Spara skulle vara den motsvarande Scratch blocket. 872 00:35:34,725 --> 00:35:37,350 Så vad jag gjorde i denna version, som vi kan bara blick på, 873 00:35:37,350 --> 00:35:43,170 är hosta är precis som att säga, [HOSTA] hosta, och under tiden, är nysningar 874 00:35:43,170 --> 00:35:44,570 som att säga, [Achoo]. 875 00:35:44,570 --> 00:35:46,900 Och så har jag gener genomförandet av dem 876 00:35:46,900 --> 00:35:48,970 nu genomföra denna generiska funktion, 877 00:35:48,970 --> 00:35:51,490 säga, vilket är intressant för dagens ändamål 878 00:35:51,490 --> 00:35:54,300 bara för att det fortfarande inte har en returtyp. 879 00:35:54,300 --> 00:35:56,398 Men hur många ingångar har den? 880 00:35:56,398 --> 00:35:56,981 PUBLIK: Två. 881 00:35:56,981 --> 00:35:57,430 TALARE 1: Två. 882 00:35:57,430 --> 00:35:59,263 Och så om du vill ta två argument, 883 00:35:59,263 --> 00:36:00,710 bara separera dem med kommatecken. 884 00:36:00,710 --> 00:36:03,110 Och om du vill sedan kallar denna funktion, 885 00:36:03,110 --> 00:36:05,800 märker att du bara Ring säga, citationstecken, unquote, 886 00:36:05,800 --> 00:36:09,090 för det första argumentet, gemensamt n, för det andra argumentet. 887 00:36:09,090 --> 00:36:12,130 Så återigen, vi har just nu byggstenar så att vi kan faktiskt 888 00:36:12,130 --> 00:36:15,686 genomföra några av våra egna funktioner. 889 00:36:15,686 --> 00:36:16,570 Okej. 890 00:36:16,570 --> 00:36:19,690 Har du frågor om dessa? 891 00:36:19,690 --> 00:36:22,400 >> Så nu ska vi skära ner ett lager om det. 892 00:36:22,400 --> 00:36:24,840 Och målet i slutändan, är nästa veckas problem set 893 00:36:24,840 --> 00:36:27,710 kommer att vara på cryptogrophy-- konsten att förvrängningsinformation. 894 00:36:27,710 --> 00:36:30,640 Och särskilt den information kommer att få dig att kryptera eller dekryptera 895 00:36:30,640 --> 00:36:31,605 kommer att vara text. 896 00:36:31,605 --> 00:36:33,980 Och så att typen av inviterar Frågan i dag som väl, 897 00:36:33,980 --> 00:36:38,480 vad som händer under huven med text bortom ASCII från vecka noll, 898 00:36:38,480 --> 00:36:40,730 och hur kan vi faktiskt börja att manipulera den? 899 00:36:40,730 --> 00:36:43,070 Så här är Zamyla namn. 900 00:36:43,070 --> 00:36:47,380 Och i text, som kan inmatas i likhet med get strängfunktionen. 901 00:36:47,380 --> 00:36:52,540 Och börjar nu, när du ser en sträng som this-- Z-A-M-Y-L-A-- 902 00:36:52,540 --> 00:36:56,550 börja tänka på det som om varje av dessa tecken är i en låda med sin 903 00:36:56,550 --> 00:36:57,050 eget. 904 00:36:57,050 --> 00:36:59,460 Och faktiskt, i en vecka eller så är tid, var och en av dessa lådor 905 00:36:59,460 --> 00:37:04,280 kommer att representera mycket specifikt ett block av memory-- en bit minne. 906 00:37:04,280 --> 00:37:07,050 Så vart och ett av dessa brev, i slutändan, kommer att representera 8 bitar. 907 00:37:07,050 --> 00:37:10,560 Och vi ska verkligen se vad som händer på under huven i min dator. 908 00:37:10,560 --> 00:37:13,440 >> Men för att inte räcker bara för att titta på Zamyla 909 00:37:13,440 --> 00:37:17,520 genom denna lins, varigenom var och en av dessa brev är i sin egen låda. 910 00:37:17,520 --> 00:37:22,697 Och trevligt nog i C kan vi tillgång till var och en av dessa rutor direkt. 911 00:37:22,697 --> 00:37:25,530 Så om du vill få den första bokstaven i hennes namn, super lätt i C. 912 00:37:25,530 --> 00:37:28,410 Om du vill få den sista brev, super lätt samt 913 00:37:28,410 --> 00:37:30,240 med en bit av ny syntax. 914 00:37:30,240 --> 00:37:36,250 >> Så jag kommer att gå vidare till CS50 IDE och öppna upp snöret noll dot C. 915 00:37:36,250 --> 00:37:40,270 Och i detta exempel här, det finns ett par nya saker på gång. 916 00:37:40,270 --> 00:37:44,360 Så först i linje 19, vi har sett detta before-- få sträng. 917 00:37:44,360 --> 00:37:49,840 Så precis som en snabb kontroll sanity, om någon kunde ge upp muntligt 918 00:37:49,840 --> 00:37:52,662 en lekman förklaring av vad som händer i linje 19. 919 00:37:52,662 --> 00:37:55,370 Liksom bara omsätta detta i Engelska som en rumskompis inte i CS50 920 00:37:55,370 --> 00:37:56,416 kan förstå. 921 00:37:56,416 --> 00:37:56,916 Yeah. 922 00:37:56,916 --> 00:37:59,749 >> PUBLIK: Har användaren mata in ett sträng och förvara den i en variabel s. 923 00:37:59,749 --> 00:38:01,934 924 00:38:01,934 --> 00:38:02,600 TALARE 1: Bra. 925 00:38:02,600 --> 00:38:05,579 Har användaren mata in en sträng och förvara den i en variabel s. 926 00:38:05,579 --> 00:38:06,120 Toppen. 927 00:38:06,120 --> 00:38:08,090 Så på den högra sida, kallar vi få sträng. 928 00:38:08,090 --> 00:38:10,340 Som returnerar ett värde som inte får tilldelas 929 00:38:10,340 --> 00:38:14,230 från höger sida till vänster sida i en variabel som kallas s som är 930 00:38:14,230 --> 00:38:15,950 konstruerade för att lagra en sträng. 931 00:38:15,950 --> 00:38:16,800 Exakt. 932 00:38:16,800 --> 00:38:20,000 >> Så nu linje 22, per kommentaren i linje 21, 933 00:38:20,000 --> 00:38:22,780 uppenbarligen skriver att sträng ett tecken per rad. 934 00:38:22,780 --> 00:38:23,740 Men hur? 935 00:38:23,740 --> 00:38:27,040 Så först av allt, vi initiera jag till 0. 936 00:38:27,040 --> 00:38:31,061 Och sedan hur får vi till I slutet av Zamyla namn? 937 00:38:31,061 --> 00:38:32,810 Tja, i slutet av Zamyla namn, jag kunde 938 00:38:32,810 --> 00:38:38,151 manuellt skriva i det sista tecknet i hennes namn på något sätt, eller antalet det. 939 00:38:38,151 --> 00:38:38,650 Höger? 940 00:38:38,650 --> 00:38:43,500 Om vi ​​går tillbaka här-- Z-A-M-L-- Y-L-A-- så jag kunde skriva in. 941 00:38:43,500 --> 00:38:47,340 Vad är index för Zamyla sista bokstaven? 942 00:38:47,340 --> 00:38:52,517 Om detta är 0-- talande som en programmer-- 0, 1, 2, 3, 4, 5, 943 00:38:52,517 --> 00:38:56,570 Jag heard-- så faktiskt, den sista bokstaven i Zamyla namn är den sjätte, 944 00:38:56,570 --> 00:38:58,890 men om vi räknar från 0, det kommer att vara nummer 5. 945 00:38:58,890 --> 00:39:01,320 Så ha det i åtanke här. 946 00:39:01,320 --> 00:39:04,929 >> Det visar sig att det finns en funktion i C kallas strlen och tillbaka i dag 947 00:39:04,929 --> 00:39:06,720 och i dag fortfarande, en massa programmerare 948 00:39:06,720 --> 00:39:09,524 väljer att synkronisera namn för deras funktioner som låter som ord 949 00:39:09,524 --> 00:39:10,440 de försöker säga. 950 00:39:10,440 --> 00:39:12,590 Så strlen är stränglängd. 951 00:39:12,590 --> 00:39:18,168 Och så vad skulle stränglängd S tillbaka när Zamyla är ingången? 952 00:39:18,168 --> 00:39:19,569 >> PUBLIK: Five. 953 00:39:19,569 --> 00:39:22,090 >> TALARE 1: Z-A-M-Y-L. Sex. 954 00:39:22,090 --> 00:39:22,590 Höger? 955 00:39:22,590 --> 00:39:23,940 Vad är längden på Zamyla namn? 956 00:39:23,940 --> 00:39:24,440 Höger? 957 00:39:24,440 --> 00:39:26,240 Och just i verkligheten, sex bokstäver. 958 00:39:26,240 --> 00:39:26,740 Höger? 959 00:39:26,740 --> 00:39:28,940 Så vad betyder det för vår loop? 960 00:39:28,940 --> 00:39:32,130 Vi kommer att gå från 0 upp till sex, som 961 00:39:32,130 --> 00:39:33,650 kommer att ge oss fem iterationer. 962 00:39:33,650 --> 00:39:34,890 Vad gör vi på varje iteration? 963 00:39:34,890 --> 00:39:36,870 Tja, procent C, någon gissade häromdagen, 964 00:39:36,870 --> 00:39:38,710 innebär en platshållare för vad? 965 00:39:38,710 --> 00:39:39,335 >> PUBLIK: Char. 966 00:39:39,335 --> 00:39:40,293 TALARE 1: Bara en röding. 967 00:39:40,293 --> 00:39:42,877 Så en enda character-- inte flera tecken som en sträng. 968 00:39:42,877 --> 00:39:45,251 Och så här är den nya linjen att vi har fått skriva ut. 969 00:39:45,251 --> 00:39:46,580 Och så här är den nya syntaxen. 970 00:39:46,580 --> 00:39:51,130 Om du vill skriva ut den i: te tecken i strängen S, så att säga, 971 00:39:51,130 --> 00:39:54,060 kan du helt enkelt säga namn på strängen S, 972 00:39:54,060 --> 00:39:58,230 och sedan öppna hakparentes och sedan stängs hakparentes, med en i 973 00:39:58,230 --> 00:39:58,780 mitten. 974 00:39:58,780 --> 00:40:01,430 Och det är ganska trevligt att det slags ser ut som en kvadrat 975 00:40:01,430 --> 00:40:06,210 precis som de rutor där Zamyla s tecken finns på den bilden där. 976 00:40:06,210 --> 00:40:09,970 >> Så om jag verkligen köra detta nu, låt oss se vad som händer. 977 00:40:09,970 --> 00:40:15,190 Gör sträng 0 dot snedstreck string 0, och då är jag 978 00:40:15,190 --> 00:40:16,720 kommer att skriva i Zamyla namn. 979 00:40:16,720 --> 00:40:19,428 Det finns ingen snabb, eftersom jag inte Använd utskrifts f, men det är bra. 980 00:40:19,428 --> 00:40:20,660 Jag vet precis vad jag ska göra. 981 00:40:20,660 --> 00:40:23,240 Och faktiskt, skriver den ut Zamyla namn, en per rad. 982 00:40:23,240 --> 00:40:25,760 >> Nu vara lite vårdslös. 983 00:40:25,760 --> 00:40:28,461 Antag att jag inte visste om strlen och jag tänkte, 984 00:40:28,461 --> 00:40:31,460 okej, är ingen kommer att ha en namnge större än som 50 tecken. 985 00:40:31,460 --> 00:40:36,360 Låt oss gå vidare och kompilera detta och köra den, och skriv sedan in Zamyla 986 00:40:36,360 --> 00:40:37,160 igen. 987 00:40:37,160 --> 00:40:40,850 Logiskt, vad är det Programmet kommer att försöka att skriva ut? 988 00:40:40,850 --> 00:40:49,545 Z-A-M-Y-L-A sedan som 45 okända byte minne. 989 00:40:49,545 --> 00:40:51,670 Och faktiskt, vi kommer tillbaka denna idé minne. 990 00:40:51,670 --> 00:40:54,180 Men bara logiskt, om Zamyla namn är denna långa, 991 00:40:54,180 --> 00:40:56,450 enligt bilden här, vad vi säger 992 00:40:56,450 --> 00:40:59,810 är fortsätta att skriva ut, fortsätta att skriva ut, håll tryckning, fortsätta att skriva ut, fortsätta att skriva ut, 993 00:40:59,810 --> 00:41:03,781 hela vägen till den 50: e tecken, som vem vet vad som kommer att hända. 994 00:41:03,781 --> 00:41:05,030 Så låt oss faktiskt ta en titt. 995 00:41:05,030 --> 00:41:06,720 Låt oss skriva in Zamyla. 996 00:41:06,720 --> 00:41:07,250 Intressant. 997 00:41:07,250 --> 00:41:08,190 Vi hade tur. 998 00:41:08,190 --> 00:41:09,700 Bara en massa vitt utrymme. 999 00:41:09,700 --> 00:41:09,930 Oh. 1000 00:41:09,930 --> 00:41:11,120 Det finns en funky karaktär. 1001 00:41:11,120 --> 00:41:14,577 Det ser ungefär som en konstig fråga markera det, men det finns Zamyla namn. 1002 00:41:14,577 --> 00:41:15,660 Låt oss få riktigt hänsynslös. 1003 00:41:15,660 --> 00:41:20,000 Ska vi skriva ut 500 block i det okända? 1004 00:41:20,000 --> 00:41:24,380 Låt oss gå vidare och göra det samt och sedan åter köra. 1005 00:41:24,380 --> 00:41:27,980 Och låt oss helskärm det, eftersom Vi behöver se mer utrymme. 1006 00:41:27,980 --> 00:41:30,460 Zamyla. 1007 00:41:30,460 --> 00:41:31,830 Got lucky igen. 1008 00:41:31,830 --> 00:41:33,070 >> Vågar vi får mer hänsynslös? 1009 00:41:33,070 --> 00:41:36,070 Låt oss få mer hänsynslös. 1010 00:41:36,070 --> 00:41:39,350 50.000 tecken. 1011 00:41:39,350 --> 00:41:41,390 Detta är mest säkert inte en bra idé. 1012 00:41:41,390 --> 00:41:41,890 Okej. 1013 00:41:41,890 --> 00:41:42,990 Gör strängen 0. 1014 00:41:42,990 --> 00:41:44,720 Detta kommer att vara vår sista demo. 1015 00:41:44,720 --> 00:41:47,261 Zamyla. 1016 00:41:47,261 --> 00:41:48,632 Ugh. 1017 00:41:48,632 --> 00:41:50,010 Ugh. 1018 00:41:50,010 --> 00:41:50,680 OK. 1019 00:41:50,680 --> 00:41:54,407 Så mitt minne är verkligen tomt just nu, vilket är faktiskt typ av praktiskt. 1020 00:41:54,407 --> 00:41:55,990 Vad jag försöker få att-- okej. 1021 00:41:55,990 --> 00:41:57,614 Och nu är jag bara kommer att få vårdslös. 1022 00:41:57,614 --> 00:41:58,570 500 tusen. 1023 00:41:58,570 --> 00:42:03,860 Make-- låt oss helskärmsläge det. 1024 00:42:03,860 --> 00:42:04,990 Enter. 1025 00:42:04,990 --> 00:42:05,490 Zamyla. 1026 00:42:05,490 --> 00:42:12,050 1027 00:42:12,050 --> 00:42:13,390 Det går vi. 1028 00:42:13,390 --> 00:42:15,610 Jag har ingen aning om vad det är, men det låter illa. 1029 00:42:15,610 --> 00:42:16,110 Okej. 1030 00:42:16,110 --> 00:42:20,322 Och faktiskt, snart, om du är bland de lyckliga få i kontorstid 1031 00:42:20,322 --> 00:42:22,780 och problem ange ett, du kan mycket väl stöta på detta. 1032 00:42:22,780 --> 00:42:25,490 Segmente fel faktiskt gör har en väldefinierad betydelse. 1033 00:42:25,490 --> 00:42:28,450 Det innebär någon form av misstag om ett segment av minnet. 1034 00:42:28,450 --> 00:42:30,490 Och i lekmannaspråk, Det innebär att vi berört 1035 00:42:30,490 --> 00:42:34,780 memory-- vi använde RAM i min dator att jag inte borde ha haft tillgång till. 1036 00:42:34,780 --> 00:42:37,050 Och det är det som är både kraftfull och också farligt 1037 00:42:37,050 --> 00:42:39,910 om C är att du faktiskt har fritt tillträde 1038 00:42:39,910 --> 00:42:45,910 till helheten av ditt program minne eller byte eller RAM, mera specifikt. 1039 00:42:45,910 --> 00:42:49,510 >> Så även om Zamyla namn är bara sex tecken långt, 1040 00:42:49,510 --> 00:42:51,450 Jag kan fortfarande gå någonstans i minnet jag vill. 1041 00:42:51,450 --> 00:42:53,491 Och som en sidoreplik, om du har någonsin läst någon artikel 1042 00:42:53,491 --> 00:42:55,610 under årens lopp om vissa server eller något program 1043 00:42:55,610 --> 00:42:58,654 bli knäckt eller hacka det är utnyttjat något 1044 00:42:58,654 --> 00:43:00,820 kallas en buffer overflow utnyttja att vi kommer faktiskt 1045 00:43:00,820 --> 00:43:04,970 tala om i några veckor, det är allmänt med hänvisning till på något sätt lura 1046 00:43:04,970 --> 00:43:09,090 en dator i går bra bortom gränserna för minnet 1047 00:43:09,090 --> 00:43:11,410 att den bör ha, och hitta något saftiga 1048 00:43:11,410 --> 00:43:13,530 av att memory-- en lösenord, kanske, en väg 1049 00:43:13,530 --> 00:43:16,990 kringgå vissa serienummer kontrollera, eller bara allmänt kunna 1050 00:43:16,990 --> 00:43:20,360 att lura datorn exekverar kod som inte var avsett. 1051 00:43:20,360 --> 00:43:22,360 Men låt oss återkomma till verklighet för bara ett ögonblick 1052 00:43:22,360 --> 00:43:24,550 där det här programmet var genomförs med strlen, 1053 00:43:24,550 --> 00:43:26,110 och införa en sak här. 1054 00:43:26,110 --> 00:43:30,030 Vad är nytt bland dessa topp tre rader? 1055 00:43:30,030 --> 00:43:30,910 >> Så sträng dot h. 1056 00:43:30,910 --> 00:43:35,490 Det visar sig att det är det här biblioteket kallas String Dot H, eller String Library, 1057 00:43:35,490 --> 00:43:38,490 vars sidhuvudfilen, så att säga, är sträng dot h som ger mig 1058 00:43:38,490 --> 00:43:40,860 tillgång till denna strlen funktion. 1059 00:43:40,860 --> 00:43:43,841 Om jag utelämnar det är kompilatorn kommer att skrika på mig i någon form. 1060 00:43:43,841 --> 00:43:44,590 Men vet du vad? 1061 00:43:44,590 --> 00:43:46,090 Låt oss nu få riktigt nyanserad. 1062 00:43:46,090 --> 00:43:50,820 I linje 22, det finns något slag av inefficient-- dåligt utformad, 1063 00:43:50,820 --> 00:43:53,990 arguably-- om denna kodrad. 1064 00:43:53,990 --> 00:43:56,280 Tänker tillbaka på hur för-slinga genomförs 1065 00:43:56,280 --> 00:44:00,140 och vilka åtgärder hända igen och igen och igen-- initieringen, 1066 00:44:00,140 --> 00:44:04,110 tillståndet, den kod som blir exekveras sedan inkrementet 1067 00:44:04,110 --> 00:44:07,880 eller förändringen, då tillståndet, då koden, då förändringen sedan 1068 00:44:07,880 --> 00:44:11,280 tillståndet, då koden, då förändringen, och så vidare. 1069 00:44:11,280 --> 00:44:15,320 Så vad kan vara lite oroande eller dåligt gjort här? 1070 00:44:15,320 --> 00:44:16,387 Ja, i blått. 1071 00:44:16,387 --> 00:44:18,220 PUBLIK: strlen är kallade många, många gånger. 1072 00:44:18,220 --> 00:44:20,654 1073 00:44:20,654 --> 00:44:21,320 TALARE 1: Ja. 1074 00:44:21,320 --> 00:44:23,700 Så strlen kallas många gånger, men vad som är 1075 00:44:23,700 --> 00:44:27,113 längden av Zamyla namn den första gången slingan exekverar? 1076 00:44:27,113 --> 00:44:27,860 >> PUBLIK: Sex. 1077 00:44:27,860 --> 00:44:28,110 >> TALARE 1: Six. 1078 00:44:28,110 --> 00:44:30,976 Ja, vad är längden på hennes namn andra gången koden körs? 1079 00:44:30,976 --> 00:44:31,432 >> PUBLIK: Sex. 1080 00:44:31,432 --> 00:44:31,890 >> TALARE 1: Okej. 1081 00:44:31,890 --> 00:44:32,720 Det är fortfarande sex. 1082 00:44:32,720 --> 00:44:33,220 Höger? 1083 00:44:33,220 --> 00:44:35,260 Zarla namn har inte ändrats, även om jag ser 1084 00:44:35,260 --> 00:44:38,240 endast en del av bokstäverna i hennes namn. 1085 00:44:38,240 --> 00:44:41,349 Och så det faktum att jag är ett effektivt sätt ställer denna fråga, vad är 1086 00:44:41,349 --> 00:44:44,640 längden på Zamyla, vad är längden av Zamyla, vad är längden på Zamyla, 1087 00:44:44,640 --> 00:44:47,990 sex separata gånger, eller sju även är bara dumt, 1088 00:44:47,990 --> 00:44:50,390 eftersom det är oföränderligt det svaret. 1089 00:44:50,390 --> 00:44:53,550 Och så vad jag kunde faktiskt gör är this-- i sträng en 1090 00:44:53,550 --> 00:44:55,680 Jag har en marginellt bättre version här. 1091 00:44:55,680 --> 00:45:00,110 There-- whoops-- sträng två Jag har en marginellt bättre version där 1092 00:45:00,110 --> 00:45:05,010 Jag gör this-- istället för att bara initierar jag till 0, jag också med kommatecken 1093 00:45:05,010 --> 00:45:07,990 deklarera en andra variabel som heter n-- Jag behöver inte säga int igen. 1094 00:45:07,990 --> 00:45:09,220 Jag skulle faktiskt inte. 1095 00:45:09,220 --> 00:45:10,380 Men jag säger n. 1096 00:45:10,380 --> 00:45:13,610 Och då jag initiera n till den strlen av n, så att nu 1097 00:45:13,610 --> 00:45:17,110 hur många gånger inte strlen får verk totalt? 1098 00:45:17,110 --> 00:45:17,610 Bara en gång. 1099 00:45:17,610 --> 00:45:20,257 Och så det här är vad vi menar tidigare om bättre design. 1100 00:45:20,257 --> 00:45:23,090 Egentligen när koden är korrekt, gå tillbaka och tänka igenom, 1101 00:45:23,090 --> 00:45:26,820 jag med så lite minne eller så få sekunder 1102 00:45:26,820 --> 00:45:30,409 eller millisekunder datortid som möjligt att genomföra några problem? 1103 00:45:30,409 --> 00:45:32,200 Och jag kommer att rulla upp och bara nämna 1104 00:45:32,200 --> 00:45:34,283 att det är det här omnämnande av null i denna version, 1105 00:45:34,283 --> 00:45:36,390 men vi ska återkomma till det inom kort. 1106 00:45:36,390 --> 00:45:41,010 Eftersom det för nu, låt oss ta en titt på var detta kommer att leda oss. 1107 00:45:41,010 --> 00:45:44,110 Så en, visar det sig att nu när vi har förmågan 1108 00:45:44,110 --> 00:45:46,860 att titta på enskilda tecken, vi kan utnyttja något 1109 00:45:46,860 --> 00:45:50,807 från vecka 0 som var mycket svårbegripliga och slags ointressant på tiden. 1110 00:45:50,807 --> 00:45:53,390 Men nu, och särskilt när vi får kryptografi i en vecka, 1111 00:45:53,390 --> 00:45:54,820 det kommer att vara ganska stark. 1112 00:45:54,820 --> 00:45:57,450 Det visar sig att med några Data types-- Ints och flyter 1113 00:45:57,450 --> 00:46:00,300 och tecken och strängar och andra saker-- vissa av dem 1114 00:46:00,300 --> 00:46:02,800 kan mycket enkelt omvandlas till en annan. 1115 00:46:02,800 --> 00:46:05,840 >> Till exempel när vi talat om ASCII en tid ago-- här är 1116 00:46:05,840 --> 00:46:07,796 det versaler A genom M, punkt, punkt, 1117 00:46:07,796 --> 00:46:12,530 dot-- vi sade att det finns en kartläggning mellan dessa bokstäver och siffror. 1118 00:46:12,530 --> 00:46:14,970 Och faktiskt, håller den sanna för gemener liksom. 1119 00:46:14,970 --> 00:46:17,470 Gemener a är 97, är huvudstad en 65. 1120 00:46:17,470 --> 00:46:20,860 Och det finns en rad i ASCII, vilket är just denna kartläggning 1121 00:46:20,860 --> 00:46:23,240 system för alla de andra bokstäverna. 1122 00:46:23,240 --> 00:46:25,030 Så vad betyder det? 1123 00:46:25,030 --> 00:46:28,390 Tja, jag ska gå vidare och öppna upp verkliga snabbt något som kallas 1124 00:46:28,390 --> 00:46:31,240 ASCII 0, varav de flesta är kommentarer. 1125 00:46:31,240 --> 00:46:33,860 Och återigen på nätet kan du alltid blick igenom kommentarerna. 1126 00:46:33,860 --> 00:46:36,180 >> Och ta en titt vad detta kommer att göra. 1127 00:46:36,180 --> 00:46:38,410 Så det har fått en huvuduppgift. 1128 00:46:38,410 --> 00:46:41,490 Jag har hårdkodade siffrorna bara för nu, eftersom jag vet vad jag gör. 1129 00:46:41,490 --> 00:46:42,950 Jag vet vad jag vill se här. 1130 00:46:42,950 --> 00:46:45,220 Och jag har initierats jag till 65. 1131 00:46:45,220 --> 00:46:48,490 Och jag räknar upp genom 26 bokstäver totalt. 1132 00:46:48,490 --> 00:46:52,990 Och vad ska jag skriva ut en rad i taget 1133 00:46:52,990 --> 00:46:54,930 om du kan tolka Detta markerade linjen? 1134 00:46:54,930 --> 00:46:55,970 Vad får tryckas? 1135 00:46:55,970 --> 00:46:56,797 Yeah. 1136 00:46:56,797 --> 00:46:57,264 >> PUBLIK: Kommer ni att skriva ut brev som 1137 00:46:57,264 --> 00:46:59,805 motsvarar den karta över den brev värde och heltalsvärde? 1138 00:46:59,805 --> 00:47:01,199 1139 00:47:01,199 --> 00:47:01,990 TALARE 1: Exakt. 1140 00:47:01,990 --> 00:47:04,740 Jag kommer att skriva brevet motsvarande heltalsvärdet, 1141 00:47:04,740 --> 00:47:06,131 och vice versa, enligt följande. 1142 00:47:06,131 --> 00:47:08,880 Ja detta, någon sade tidigare, är bara en platshållare för en röding. 1143 00:47:08,880 --> 00:47:09,490 Det är fortfarande. 1144 00:47:09,490 --> 00:47:12,280 Detta är naturligtvis är en platshållare för en int-- inte en ny rad. 1145 00:47:12,280 --> 00:47:18,140 Och nu märker, min första värde som Jag ansluter för det platshållare 1146 00:47:18,140 --> 00:47:22,320 är inte bara I. jag säger, inom parentes, röding I, 1147 00:47:22,320 --> 00:47:26,700 vilket inom parentes röding är berättar kompilatorn, behandlar jag 1148 00:47:26,700 --> 00:47:28,490 inte som vad det är, vilket är ett nummer. 1149 00:47:28,490 --> 00:47:30,490 Behandla det som en verklig karaktär. 1150 00:47:30,490 --> 00:47:34,490 Medan det andra värdet jag ansluta in-- jag-- borde bara vara ett nummer. 1151 00:47:34,490 --> 00:47:38,140 >> Så om jag sammanställa denna program-- så detta är att göra ASCII 0, 1152 00:47:38,140 --> 00:47:41,720 dot slash ASCII 0-- jag bara få denna behändiga lilla diagram som 1153 00:47:41,720 --> 00:47:44,950 visar mig alla möjliga avbildningar utan att behöva tänka det 1154 00:47:44,950 --> 00:47:46,450 genom eller räkna ut det på egen hand. 1155 00:47:46,450 --> 00:47:48,783 Och jag också skriva ut, märker gemener, 1156 00:47:48,783 --> 00:47:51,410 eftersom några rader senare, jag också skriva ut denna kartläggning 1157 00:47:51,410 --> 00:47:53,737 också, vilket är bara säger att när du förstår 1158 00:47:53,737 --> 00:47:55,570 vad som händer under huven, kan du 1159 00:47:55,570 --> 00:47:57,111 automatiskt konvertera fram och tillbaka. 1160 00:47:57,111 --> 00:48:00,160 Och faktum är att om någon av er någonsin gjorde detta i grundskolan 1161 00:48:00,160 --> 00:48:03,490 eller hört talas om någon mythically tar en anteckning 1162 00:48:03,490 --> 00:48:05,620 och passerar den till sin eller hennes vän i klassen, 1163 00:48:05,620 --> 00:48:08,300 men du oordning den brev från som A blir B, 1164 00:48:08,300 --> 00:48:11,240 och B blir C, eller något mer komplicerat än så, ja, 1165 00:48:11,240 --> 00:48:13,410 hur skulle du gå tillväga genomförandet av denna som barn? 1166 00:48:13,410 --> 00:48:16,340 Tja, du bara typ av vet A blir B, B blir C 1167 00:48:16,340 --> 00:48:19,700 men matematiskt, vad var den där ungen gör? 1168 00:48:19,700 --> 00:48:22,050 Vad gjorde du lägger till varje bokstav? 1169 00:48:22,050 --> 00:48:23,340 Effektivt, 1. 1170 00:48:23,340 --> 00:48:27,740 >> Så när du ändrar A till B, det är ungefär som att byta 65-66, 1171 00:48:27,740 --> 00:48:29,590 vilket matematiskt innebär bara lägga ett. 1172 00:48:29,590 --> 00:48:33,300 Och så om du skulle genomföra den lilla vilseledande teknik 1173 00:48:33,300 --> 00:48:36,380 för lärare i koden, du kan göra just det bara 1174 00:48:36,380 --> 00:48:38,552 genom tillsats av en enda bokstav tillsammans. 1175 00:48:38,552 --> 00:48:40,260 Så snart vi är kommer att se hur vi 1176 00:48:40,260 --> 00:48:43,300 kan dra nytta av det faktiskt genuint rusning och unscramble 1177 00:48:43,300 --> 00:48:43,991 informationen. 1178 00:48:43,991 --> 00:48:47,240 Under tiden, vet att vi har börjat att införa ett par andra bibliotek 1179 00:48:47,240 --> 00:48:48,990 här-- strängen en dag. 1180 00:48:48,990 --> 00:48:51,180 Och en mycket hjälpsam plats förhoppningsvis hittar du 1181 00:48:51,180 --> 00:48:55,010 kallas reference.cs50.net, vilket lärarna har sammanställt, 1182 00:48:55,010 --> 00:48:57,510 så att om du vill slå upp hur strlen verk, 1183 00:48:57,510 --> 00:48:59,300 du kan börja skriva funktionens namn, 1184 00:48:59,300 --> 00:49:02,890 klicka strlen där, och sedan en mindre bekväm förklaring 1185 00:49:02,890 --> 00:49:03,700 kommer att visas. 1186 00:49:03,700 --> 00:49:06,880 Eller om du vill att tjänstemannen Linux-baserad förklaring, 1187 00:49:06,880 --> 00:49:08,945 Du kan klicka skönare uppe till höger, och det 1188 00:49:08,945 --> 00:49:12,070 kommer att presentera samma information, men i mer komplexa termer. 1189 00:49:12,070 --> 00:49:15,070 Det är en användbar resurs för faktiskt vet vad allt gör. 1190 00:49:15,070 --> 00:49:17,320 >> Nästa gång vi kommer att ta en titt på Ovaltine 1191 00:49:17,320 --> 00:49:20,070 och mer, och presentera oss till en värld av kryptografi. 1192 00:49:20,070 --> 00:49:21,930 Innan dess får vi se senare i veckan. 1193 00:49:21,930 --> 00:49:23,390 Och nu, Colton Ogden. 1194 00:49:23,390 --> 00:49:26,730 Vi ses på onsdag. 1195 00:49:26,730 --> 00:49:30,216 >> [MUSIK SPELA] 1196 00:49:30,216 --> 00:49:33,702 >> [MUSIK SPELA] 1197 00:49:33,702 --> 00:49:38,682 1198 00:49:38,682 --> 00:49:42,200 >> TALARE 1: Vad [BLEEP] gör du? 1199 00:49:42,200 --> 00:49:45,720 >> TALARE 1: Jag äter min dessert? 1200 00:49:45,720 --> 00:49:47,160 Hur äter du det? 1201 00:49:47,160 --> 00:49:47,860 Med dina händer? 1202 00:49:47,860 --> 00:49:54,050 1203 00:49:54,050 --> 00:49:57,940 >> [MUSIK SPELA] 1204 00:49:57,940 --> 00:50:03,453