1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] David J. MALAN: Okej, det här är CS50, och det är 2 00:00:11,630 --> 00:00:14,790 start av vecka två. 3 00:00:14,790 --> 00:00:16,300 Tack. 4 00:00:16,300 --> 00:00:19,000 Låt oss börja här med ett telefonsamtal. 5 00:00:19,000 --> 00:00:30,005 Jag ska ringa 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Detta är CS50. 7 00:00:31,230 --> 00:00:33,930 För Shuttle pojke, tryck 1. 8 00:00:33,930 --> 00:00:36,660 Att börja om, tryck 9. 9 00:00:36,660 --> 00:00:38,180 David J. MALAN: Så sa han till Shuttle Boy, tryck på 1. 10 00:00:38,180 --> 00:00:41,560 Så vi kommer att trycka på 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Vilken är din ursprung? 12 00:00:43,230 --> 00:00:45,340 För quad, tryck 1. 13 00:00:45,340 --> 00:00:47,080 Mather, tryck på 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, tryck 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, tryck på 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, tryck 5. 17 00:00:53,210 --> 00:00:55,660 Att börja om, tryck 0. 18 00:00:55,660 --> 00:00:59,590 David J. MALAN: Vi ska trycka 1 för quad. 19 00:00:59,590 --> 00:01:03,610 CS50: Nästa buss lämnar denna stund vid 1:10 PM och 20 00:01:03,610 --> 00:01:09,820 sedan vid 01:20, 1:30 PM, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 Detta är CS50. 22 00:01:12,030 --> 00:01:15,570 >> David J. MALAN: Så det här är CS50 röst. 23 00:01:15,570 --> 00:01:18,030 Och det är ett exempel på den typ av slutliga projekt, 24 00:01:18,030 --> 00:01:19,500 Exempelvis kan du bita av mot 25 00:01:19,500 --> 00:01:20,600 slutet av terminen. 26 00:01:20,600 --> 00:01:23,840 Till exempel finns det shuttleboy.cs50.net - 27 00:01:23,840 --> 00:01:28,200 faktiskt ett projekt som jag först skrev efter att ha tagit CS51 28 00:01:28,200 --> 00:01:29,740 tillbaka när jag var ett grundutbildningsprogram. 29 00:01:29,740 --> 00:01:32,250 Och inspirationen här var då, var allt de hade 30 00:01:32,250 --> 00:01:34,320 de tryckta shuttle buss tidtabeller, och det fanns ingen 31 00:01:34,320 --> 00:01:35,970 begreppet titta upp saker på nätet. 32 00:01:35,970 --> 00:01:38,730 Och så jag slags duva i en helg, hälls genom 33 00:01:38,730 --> 00:01:41,460 tryckt schema och ported till ett datorprogram. 34 00:01:41,460 --> 00:01:43,790 Vid den tiden, hände datorprogrammet som skall skrivas 35 00:01:43,790 --> 00:01:47,110 i C. Och du körde faktiskt genom att skriva Shuttle Pojke på en 36 00:01:47,110 --> 00:01:48,600 blinkande uppmana som vi har gjort hittills. 37 00:01:48,600 --> 00:01:50,450 Men under årens lopp har det utvecklats till en omedelbar 38 00:01:50,450 --> 00:01:51,390 meddelanden bot. 39 00:01:51,390 --> 00:01:53,970 Det utvecklades senare till denna webbplats, i ett 40 00:01:53,970 --> 00:01:57,720 SMS-baserat verktyg, liksom i denna röst-baserade verktyg. 41 00:01:57,720 --> 00:02:00,170 Och det är att antyda vilka typer av saker som du kan 42 00:02:00,170 --> 00:02:02,380 göra för dig själv genom termins slut. 43 00:02:02,380 --> 00:02:05,490 >> Till exempel finns det händer SMS versionen av Shuttle Boy 44 00:02:05,490 --> 00:02:06,510 att fungera såsom följer. 45 00:02:06,510 --> 00:02:10,880 Om på din mobiltelefon, skicka ett SMS till 41411 och 46 00:02:10,880 --> 00:02:14,300 sedan skicka den speciella symbolen sboy för Shuttle pojke, 47 00:02:14,300 --> 00:02:18,350 följt av A och B, där A är ett ursprung och B är en 48 00:02:18,350 --> 00:02:19,070 destination - 49 00:02:19,070 --> 00:02:21,030 exempelvis Boylston Space Quad - 50 00:02:21,030 --> 00:02:23,330 vad du ska få tillbaka inom några sekunder är en text 51 00:02:23,330 --> 00:02:25,820 meddelande från Shuttle Pojke berätta exakt när 52 00:02:25,820 --> 00:02:28,990 närmaste skyttlar är från den punkten A går till det 53 00:02:28,990 --> 00:02:29,640 punkt B. 54 00:02:29,640 --> 00:02:32,510 Och detta är en mer allmän exempel på vad som kallas 55 00:02:32,510 --> 00:02:33,920 med hjälp av en API. 56 00:02:33,920 --> 00:02:36,930 >> Så till exempel är det här bara shuttleboy.cs50.net, den 57 00:02:36,930 --> 00:02:39,300 faktiska webbaserad inkarnation av detta. 58 00:02:39,300 --> 00:02:42,480 Men de data som understryker detta och andra program som CS50 59 00:02:42,480 --> 00:02:45,560 har utvecklat är alla utsatta för alla här i form 60 00:02:45,560 --> 00:02:49,340 av API, programmeringsgränssnitt. 61 00:02:49,340 --> 00:02:52,220 Och det är bara ett finare sätt att säga att folk gillar vi på 62 00:02:52,220 --> 00:02:56,010 Internet och andra har tillbringat en tid att skapa 63 00:02:56,010 --> 00:02:59,970 programvara som du kan använda för att ta uppgifter från oss och 64 00:02:59,970 --> 00:03:02,510 sedan bygga egna applikationer ovanpå 65 00:03:02,510 --> 00:03:03,840 detta datauppsättning. 66 00:03:03,840 --> 00:03:06,610 Så till exempel, denna Shuttle Boy API sida här, som 67 00:03:06,610 --> 00:03:09,390 råkar vara i CS50 manuell, huvudsakligen dokument 68 00:03:09,390 --> 00:03:13,080 hur du kan gå om att be CS50 servrar för data. 69 00:03:13,080 --> 00:03:16,240 Till exempel, om du är bekant med CSV-filer, komma 70 00:03:16,240 --> 00:03:18,940 separerade värden, dessa är bara typ av snabb och smutsig 71 00:03:18,940 --> 00:03:20,310 Excel-liknande filer. 72 00:03:20,310 --> 00:03:23,110 Så du kan be Shuttle Boy för alla uppgifter om alla 73 00:03:23,110 --> 00:03:25,090 hus och deras GPS-koordinater, och du får 74 00:03:25,090 --> 00:03:27,300 tillbaka i huvudsak ett kalkylblad som det som 75 00:03:27,300 --> 00:03:30,820 Du kan sedan läsa in ett program med din egen och sedan 76 00:03:30,820 --> 00:03:33,250 generera resultat, som Shuttle Boy själv 77 00:03:33,250 --> 00:03:34,160 råkar göra. 78 00:03:34,160 --> 00:03:37,030 För de mer välkända, modernare datarepresentationer 79 00:03:37,030 --> 00:03:39,420 omfatta JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Något kommer att återkomma till dig mot 81 00:03:40,620 --> 00:03:41,720 slutet av terminen. 82 00:03:41,720 --> 00:03:45,440 >> Men återigen, detta är bara ett av flera av CS50 egen API. 83 00:03:45,440 --> 00:03:48,320 Och det spännande är nu i dessa dagar, Facebook och 84 00:03:48,320 --> 00:03:51,110 Twitter och Google och ganska mycket varje populära hemsidan ut 85 00:03:51,110 --> 00:03:54,130 Det har någon form av API, vilket innebär att om du läser 86 00:03:54,130 --> 00:03:56,620 dokumentation på deras hemsida, registrera dig för en 87 00:03:56,620 --> 00:03:59,980 konto kan du börja sedan skriva programvara ovanpå 88 00:03:59,980 --> 00:04:03,680 de verktyg och data som företag där ger. 89 00:04:03,680 --> 00:04:06,210 Och så en av våra egna pedagogiska medmänniskor ett par år tillbaka 90 00:04:06,210 --> 00:04:07,620 skrev en Mac-version av detta. 91 00:04:07,620 --> 00:04:10,990 Så på länken titeln Mac här uppe till vänster, kan du faktiskt 92 00:04:10,990 --> 00:04:13,940 ladda ner en Mac OS widget som körs på din egen Mac att göra 93 00:04:13,940 --> 00:04:15,040 samma typer av saker. 94 00:04:15,040 --> 00:04:17,970 Så det handlar om att bygga på toppen av datamängder som dessa. 95 00:04:17,970 --> 00:04:21,839 Men mer om det mot slutet av terminen. 96 00:04:21,839 --> 00:04:25,780 >> Så låt oss dyka i riktigt snabbt en bugg, bara för att typ av få 97 00:04:25,780 --> 00:04:27,990 Saker värmas upp idag, och tänker tillbaka på några av de 98 00:04:27,990 --> 00:04:29,660 saker vi tittat på förra veckan. 99 00:04:29,660 --> 00:04:32,840 I synnerhet vill jag gå vidare och dra upp, säg, 100 00:04:32,840 --> 00:04:34,080 detta exempel här. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c är detta tillgängligt på kursens hemsida om du skulle 102 00:04:37,500 --> 00:04:40,250 gillar att ladda ner den och rota runt dig själv. 103 00:04:40,250 --> 00:04:43,520 Men låt oss zooma in på den här ganska kort program, och bara 104 00:04:43,520 --> 00:04:46,550 en supersnabb resumé av några av de grundläggande byggstenarna som 105 00:04:46,550 --> 00:04:48,880 vi verkligen kommer att bara börja ta för givet. 106 00:04:48,880 --> 00:04:51,860 >> Så blå saker i linjer 1 till 9, är bara 107 00:04:51,860 --> 00:04:53,670 softball frågor. 108 00:04:53,670 --> 00:04:54,590 Så det är bara kommentarer. 109 00:04:54,590 --> 00:04:56,230 De har ingen funktionell betydelse. 110 00:04:56,230 --> 00:04:58,460 Men de är kommentarer i den meningen att de är noterar att 111 00:04:58,460 --> 00:05:02,010 Jag, människan, gjorde till mig själv så att i föredrag och efter 112 00:05:02,010 --> 00:05:04,340 föreläsning, jag minns faktiskt vad detta program 113 00:05:04,340 --> 00:05:07,120 gör utan att behöva läsa igenom rad för rad och 114 00:05:07,120 --> 00:05:08,990 återskapa historia i mitt sinne. 115 00:05:08,990 --> 00:05:11,000 Dessutom, om jag överlämna detta program till någon annan som 116 00:05:11,000 --> 00:05:14,420 dig är det mycket tydligare för dig, på grund av kommentarer som denna, 117 00:05:14,420 --> 00:05:16,680 vad programmet egentligen gör, eller åtminstone vad 118 00:05:16,680 --> 00:05:18,210 Programmet är tänkt att göra. 119 00:05:18,210 --> 00:05:20,760 Oavsett om det är rätt är en annan sak helt och hållet. 120 00:05:20,760 --> 00:05:25,040 Nu i C, med flera linjer kommentarer ihåg att på nätet 121 00:05:25,040 --> 00:05:27,880 en här den magiska symbolen, / *. 122 00:05:27,880 --> 00:05:30,380 Det betyder här kommer i början av en kommentar. 123 00:05:30,380 --> 00:05:34,560 Och inget annat frågor tills du når slutet terminatorn, 124 00:05:34,560 --> 00:05:36,700 som är * /, tvärtom. 125 00:05:36,700 --> 00:05:39,120 Så det faktum att jag har 80-några udda stjärnor här från 126 00:05:39,120 --> 00:05:41,550 vänster till höger är egentligen bara en estetisk detalj. 127 00:05:41,550 --> 00:05:43,370 Det har ingen funktionell betydelse. 128 00:05:43,370 --> 00:05:44,490 >> Nu sägs om linjen 11? 129 00:05:44,490 --> 00:05:46,940 Vad gör detta i lekmannaspråk? 130 00:05:51,560 --> 00:05:52,540 Vad är det? 131 00:05:52,540 --> 00:05:54,280 PUBLIK: inkluderar standard. 132 00:05:54,280 --> 00:05:54,740 David J. MALAN: OK, bra. 133 00:05:54,740 --> 00:05:57,500 Så det ingår stdio.h biblioteket. 134 00:05:57,500 --> 00:05:58,230 Så vad betyder det? 135 00:05:58,230 --> 00:06:01,570 Tja, inuti den filen, stdio.h är ett helt gäng 136 00:06:01,570 --> 00:06:03,320 funktionsdeklarationer - 137 00:06:03,320 --> 00:06:05,290 det vill säga kod som någon annan skrivit. 138 00:06:05,290 --> 00:06:08,160 Och ett perfekt exempel på en funktion som är deklarerade i 139 00:06:08,160 --> 00:06:10,250 stdio.h är - 140 00:06:10,250 --> 00:06:11,980 vilket favorit vid det här laget? 141 00:06:11,980 --> 00:06:14,300 Så printf, en av de vanligaste använda, säkert 142 00:06:14,300 --> 00:06:15,840 tidigt, från biblioteket är där. 143 00:06:15,840 --> 00:06:19,290 Om jag utesluter att kodraden är klang kommer att skrika 144 00:06:19,290 --> 00:06:22,550 på mig något om att använda en svart symbol. 145 00:06:22,550 --> 00:06:24,930 Något odeklarerat är förmodligen nyckelordet, eftersom 146 00:06:24,930 --> 00:06:27,770 vi har inte informerat kompilatorn vad printf ser 147 00:06:27,770 --> 00:06:29,230 liknande om vi inkluderar den linjen. 148 00:06:29,230 --> 00:06:31,830 Och mer jordnära, egentligen, vad den linjen säger är 149 00:06:31,830 --> 00:06:34,890 öppna filen, stdio.h, var det är på servern 150 00:06:34,890 --> 00:06:38,200 hårddisk eller apparatens hårddisk och kopiera-klistra in den 151 00:06:38,200 --> 00:06:40,240 rätt där i min fil, utan min 152 00:06:40,240 --> 00:06:41,730 behöva göra det manuellt. 153 00:06:41,730 --> 00:06:44,420 >> Nu, när vi kommer ner hit till huvudgruppen, snart börjar vi 154 00:06:44,420 --> 00:06:46,900 retas isär vad int och vad tomrum. 155 00:06:46,900 --> 00:06:48,430 Men för nu, låt oss titta på de tre raderna 156 00:06:48,430 --> 00:06:50,350 inom 15 till 17. 157 00:06:50,350 --> 00:06:52,250 Detta här jag hävdar som buggy. 158 00:06:52,250 --> 00:06:54,900 Linje 7 i mina kommentarer säger "ska skrivas ut 10 159 00:06:54,900 --> 00:06:59,410 asterisker men inte. "Varför skriver ut inte i själva verket 160 00:06:59,410 --> 00:07:01,097 10 sådana stjärnor? 161 00:07:01,097 --> 00:07:02,347 PUBLIK: [OHÖRBAR]. 162 00:07:05,210 --> 00:07:05,800 David J. MALAN: Exakt. 163 00:07:05,800 --> 00:07:08,720 Så märker att vi börjar räkna från 0. 164 00:07:08,720 --> 00:07:10,780 Och det är faktiskt en konvention i programmering och 165 00:07:10,780 --> 00:07:13,230 datavetenskap mer allmänt börjar räkna 166 00:07:13,230 --> 00:07:14,610 från 0 istället för 1. 167 00:07:14,610 --> 00:07:16,690 Och detta är verkligen bara härrör från det faktum att för 168 00:07:16,690 --> 00:07:18,940 Exempelvis när vi hade åtta personer upp på scenen, då 169 00:07:18,940 --> 00:07:20,680 ingen var att höja sin hand, var de 170 00:07:20,680 --> 00:07:22,340 Alla effektivt nollor. 171 00:07:22,340 --> 00:07:24,260 Och så är det bara typ av dator konvention så, 172 00:07:24,260 --> 00:07:26,030 Därför, för att börja räkna från 0. 173 00:07:26,030 --> 00:07:29,130 Om det är det lägsta antalet kan representera i binärt. 174 00:07:29,130 --> 00:07:32,270 >> Så här har vi börjat initiera i till 0. 175 00:07:32,270 --> 00:07:34,230 Vi har satt i lika med 0. 176 00:07:34,230 --> 00:07:37,780 Men sedan jag gjorde detta misstag här, säger jag är mindre än eller 177 00:07:37,780 --> 00:07:38,820 lika med 10. 178 00:07:38,820 --> 00:07:41,700 Men om du tror att genom om jag börjar på 0 och sedan går jag 179 00:07:41,700 --> 00:07:46,410 upp till 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, jag ska faktiskt 180 00:07:46,410 --> 00:07:49,980 skriva ut 11 stjärnor till skärmen, för jag har gått upp 181 00:07:49,980 --> 00:07:52,410 till och lika med 10. 182 00:07:52,410 --> 00:07:55,090 Så enkel fix här är vad? 183 00:07:55,090 --> 00:07:56,070 PUBLIK: [OHÖRBAR]. 184 00:07:56,070 --> 00:07:57,350 David J. MALAN: Bara ändra till mindre än. 185 00:07:57,350 --> 00:07:59,700 Om du verkligen vill, kan du göra det här. 186 00:07:59,700 --> 00:08:01,370 Men i allmänhet, det är ogillat. 187 00:08:01,370 --> 00:08:04,020 Och så börjar räkna från 0 är bara något du bör 188 00:08:04,020 --> 00:08:05,510 vanligtvis vänja sig. 189 00:08:05,510 --> 00:08:07,810 Nu, vad om hela konstruktion i sig? 190 00:08:07,810 --> 00:08:10,640 Denna linje 15 demarks en for-slinga. 191 00:08:10,640 --> 00:08:12,510 Så för är inte en funktion. 192 00:08:12,510 --> 00:08:13,640 Det är bara ett uttalande. 193 00:08:13,640 --> 00:08:16,180 Det är en looping konstruktion, som vi såg i Scratch. 194 00:08:16,180 --> 00:08:17,600 Och den har tre delar. 195 00:08:17,600 --> 00:08:19,740 Observera att det är den första delen som 196 00:08:19,740 --> 00:08:21,350 vänster om semikolon. 197 00:08:21,350 --> 00:08:24,200 Det är den mellersta delen mellan de två semikolon. 198 00:08:24,200 --> 00:08:26,250 Och sedan finns det högra delen åt höger 199 00:08:26,250 --> 00:08:27,640 av den andra semikolon. 200 00:08:27,640 --> 00:08:31,822 Nu gör den första av dessa vad? 201 00:08:31,822 --> 00:08:33,679 PUBLIK: [OHÖRBAR]. 202 00:08:33,679 --> 00:08:34,270 David J. MALAN: Tillbaka där? 203 00:08:34,270 --> 00:08:34,816 Ja? 204 00:08:34,816 --> 00:08:35,980 Publiken: Initiering. 205 00:08:35,980 --> 00:08:36,850 >> David J. MALAN: Initiering. 206 00:08:36,850 --> 00:08:37,840 Så vad betyder det? 207 00:08:37,840 --> 00:08:40,690 Vi har deklarerat en variabel som heter jag. 208 00:08:40,690 --> 00:08:43,840 Det är av typen int, för jag har angett int i. 209 00:08:43,840 --> 00:08:46,470 Och jag initialiseras i till värdet 0. 210 00:08:46,470 --> 00:08:47,730 Så vad är detta talesätt egentligen? 211 00:08:47,730 --> 00:08:50,680 Det är ett effektivt sätt att säga till datorn Ge mig nog 212 00:08:50,680 --> 00:08:53,660 minne, tillräckligt med RAM för att passa ett nummer och sedan lägga 213 00:08:53,660 --> 00:08:56,130 nummer 0 i den bit av RAM. 214 00:08:56,130 --> 00:08:59,100 Och som en sidoreplik, hur stor är en int typiskt, åtminstone inom 215 00:08:59,100 --> 00:09:00,280 av apparaten? 216 00:09:00,280 --> 00:09:01,000 Publiken: 32 bitar. 217 00:09:01,000 --> 00:09:01,670 David J. MALAN: 32 bitar. 218 00:09:01,670 --> 00:09:04,890 Så det betyder att ge mig 32 bitar, annars känd som 4 byte, 219 00:09:04,890 --> 00:09:07,250 och sätta värdet 0 i den, vilket är ganska lätt eftersom 220 00:09:07,250 --> 00:09:09,110 det betyder bara satt alla bitar till 0. 221 00:09:09,110 --> 00:09:11,690 >> Så nu är den andra delen här tillståndet. 222 00:09:11,690 --> 00:09:14,590 Och villkoret, som namnet antyder, är vad som kontrolleras 223 00:09:14,590 --> 00:09:18,100 igen och igen och igen om huruvida det är sant eller falskt. 224 00:09:18,100 --> 00:09:21,410 Så detta är bara säga göra följande kodrader - 225 00:09:21,410 --> 00:09:23,950 nämligen linjen 16, eftersom det är den enda indragen 226 00:09:23,950 --> 00:09:24,820 under - 227 00:09:24,820 --> 00:09:26,980 så länge som i är mindre än 10. 228 00:09:26,980 --> 00:09:30,520 Och efter varje iteration genom denna slinga, gör 229 00:09:30,520 --> 00:09:33,840 inkrementering, som i detta fall är i + +. 230 00:09:33,840 --> 00:09:35,580 Nu behöver det inte vara i + +. 231 00:09:35,580 --> 00:09:37,610 Det kan vara i. -. 232 00:09:37,610 --> 00:09:39,860 Men om jag gjorde det, vad beteendet går 233 00:09:39,860 --> 00:09:41,370 vara i detta program? 234 00:09:41,370 --> 00:09:42,290 PUBLIK: Det kommer att bli en oändlig slinga. 235 00:09:42,290 --> 00:09:44,060 David J. MALAN: Det kommer att bli någon form av oändlig slinga, 236 00:09:44,060 --> 00:09:47,720 om vi har tur efter negativ 2 miljarder eller så. 237 00:09:47,720 --> 00:09:51,320 Kanske saker kommer linda runt, precis som på grund av den ändliga 238 00:09:51,320 --> 00:09:53,930 antalet bitar som vi har tilldelats för en int. 239 00:09:53,930 --> 00:09:56,270 Men det är verkligen kommer att iterera långt mer än 10 och 240 00:09:56,270 --> 00:09:58,630 säkert mer än 11 ​​gånger här. 241 00:09:58,630 --> 00:10:02,240 >> Och nu, precis som en parentes, inser att jag + + och i - 242 00:10:02,240 --> 00:10:04,420 är egentligen bara syntaktisk socker. 243 00:10:04,420 --> 00:10:07,210 Det är bara förkortning för vad som är lite mer 244 00:10:07,210 --> 00:10:08,720 uttryckligen skrivs enligt följande: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Som är identisk med I + +. 247 00:10:13,460 --> 00:10:15,860 Det bara slags ser snyggare säga att jag + +. 248 00:10:15,860 --> 00:10:17,490 Det är mer kortfattad, mer lättläst. 249 00:10:17,490 --> 00:10:19,030 Och så de flesta människor gör det i stället. 250 00:10:19,030 --> 00:10:21,840 Men detta är identisk funktionellt 251 00:10:21,840 --> 00:10:22,900 vad vi just såg. 252 00:10:22,900 --> 00:10:27,770 Så kort sagt, är det snabb lösning här bara säga iterera jag 253 00:10:27,770 --> 00:10:30,690 från 0 ända upp till mindre än 10. 254 00:10:30,690 --> 00:10:32,700 Och sedan ska vi verkligen få 10 stjärnor. 255 00:10:32,700 --> 00:10:33,430 >> Så låt oss prova det här. 256 00:10:33,430 --> 00:10:35,310 Låt mig öppnar terminalen nedtill. 257 00:10:35,310 --> 00:10:37,420 Låt mig gå in i katalogen som är i. 258 00:10:37,420 --> 00:10:40,030 Och jag kommer att sammanställa det manuellt med klang för nu. 259 00:10:40,030 --> 00:10:44,880 Och jag kommer att sammanställa detta som buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 Och nu buggy1, varför finns det ingen sådan fil eller katalog 261 00:10:50,280 --> 00:10:52,026 heter buggy1? 262 00:10:52,026 --> 00:10:53,850 PUBLIK: [OHÖRBAR]. 263 00:10:53,850 --> 00:10:54,240 David J. MALAN: Ja. 264 00:10:54,240 --> 00:10:55,420 Så det är faktiskt kallas a.out. 265 00:10:55,420 --> 00:10:57,480 Så minns om du bara kör klang, där klang är 266 00:10:57,480 --> 00:11:00,420 kompilator, och du inte anger det namn du vill 267 00:11:00,420 --> 00:11:03,550 ge ditt program, det kommer att standardinställningen a.out. 268 00:11:03,550 --> 00:11:05,030 Så ja, om jag gör ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 Och jag didn't - den svart-vita frågan några 271 00:11:07,680 --> 00:11:08,840 Ni möter har fastställts. 272 00:11:08,840 --> 00:11:10,670 Men låt mig göra det här. 273 00:11:10,670 --> 00:11:14,570 Där har vi a.out till vänster där. 274 00:11:14,570 --> 00:11:17,360 Så vi måste köra a.out istället för buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Så låt mig gå vidare och göra det. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Enter. 277 00:11:22,840 --> 00:11:26,160 Och jag uppenbarligen inte gör vad? 278 00:11:26,160 --> 00:11:26,620 Publiken: Spara. 279 00:11:26,620 --> 00:11:27,390 David J. MALAN: Spara min fil. 280 00:11:27,390 --> 00:11:31,520 Så det är lätt att lösa genom att slå Ctrl S eller gå till 281 00:11:31,520 --> 00:11:33,450 Arkiv, Spara, liksom i de flesta program. 282 00:11:33,450 --> 00:11:36,360 Låt mig gå ner hit, rensa skärmen, köra den igen. 283 00:11:36,360 --> 00:11:37,960 Och det finns fortfarande en bugg. 284 00:11:37,960 --> 00:11:41,618 Så vad som händer - 285 00:11:41,618 --> 00:11:42,980 Målgrupp: Du har inte kompilera. 286 00:11:42,980 --> 00:11:44,040 David J. MALAN: Ah, bra. 287 00:11:44,040 --> 00:11:45,010 Jag har inte kompilera det. 288 00:11:45,010 --> 00:11:47,250 Som en idiot, jag tittar på koden för att se vad som är fel. 289 00:11:47,250 --> 00:11:51,275 Så klang buggy1.c nu a.out. 290 00:11:51,275 --> 00:11:52,640 Och Puh, räddade. 291 00:11:52,640 --> 00:11:55,090 >> Så det ser lite ful eftersom det inte finns någon ny linje 292 00:11:55,090 --> 00:11:55,970 helst i programmet. 293 00:11:55,970 --> 00:11:57,390 Men återigen, det är bara en estetisk detalj. 294 00:11:57,390 --> 00:11:59,430 Och åtminstone om vi räknar de ut, bör vi 295 00:11:59,430 --> 00:12:01,160 nu se 10 sådana stjärnor. 296 00:12:01,160 --> 00:12:03,260 Nå, hur är det med denna andra uppvärmning exempel? 297 00:12:03,260 --> 00:12:07,750 Så buggy2 hävdar jag att denna version kommer också att skrivas ut 298 00:12:07,750 --> 00:12:10,110 10 stjärnor, en per rad. 299 00:12:10,110 --> 00:12:12,340 Så den här gången har jag en radmatningstecken, bara för att 300 00:12:12,340 --> 00:12:13,520 saker lite snyggare. 301 00:12:13,520 --> 00:12:15,410 Men istället vad jag får är det. 302 00:12:15,410 --> 00:12:19,590 Så låt mig göra klang buggy2.c, Enter. 303 00:12:19,590 --> 00:12:21,790 Nu är det åter kallas a.out. 304 00:12:21,790 --> 00:12:23,130 Enter. 305 00:12:23,130 --> 00:12:26,900 Jag ser bara en ny rad, bara det allra sista nya linje som 306 00:12:26,900 --> 00:12:29,370 flyttar min uppmaning till nästa rad. 307 00:12:29,370 --> 00:12:32,660 Och ändå klart jag har utskrift *, sedan en ny linje, 308 00:12:32,660 --> 00:12:33,990 *, Sedan en ny rad. 309 00:12:33,990 --> 00:12:35,490 Men vad är felet här? 310 00:12:35,490 --> 00:12:35,974 Ja? 311 00:12:35,974 --> 00:12:37,224 PUBLIK: [OHÖRBAR]. 312 00:12:39,850 --> 00:12:40,470 >> David J. MALAN: Exakt. 313 00:12:40,470 --> 00:12:44,110 Så till skillnad från vissa språk, t.ex. Python, där indrag 314 00:12:44,110 --> 00:12:46,030 faktiskt har funktionell betydelse, i ett 315 00:12:46,030 --> 00:12:47,150 språk som C - 316 00:12:47,150 --> 00:12:49,140 som vi ser, PHP, Javascript - 317 00:12:49,140 --> 00:12:51,940 fördjupningen är egentligen bara för människans nytta. 318 00:12:51,940 --> 00:12:55,690 Så det faktum att jag har indragen rad 16 och 17 ser bra ut, 319 00:12:55,690 --> 00:12:57,530 men det har ingen funktionell betydelse här. 320 00:12:57,530 --> 00:13:00,700 Om jag vill båda linjerna att utföra som en del av för 321 00:13:00,700 --> 00:13:05,140 slinga, så måste jag bifoga dem i klammerparenteser genom att göra detta. 322 00:13:05,140 --> 00:13:08,540 Du kan bara klippa det hörnet och utelämna klammerparenteser om 323 00:13:08,540 --> 00:13:10,036 vad är fallet? 324 00:13:10,036 --> 00:13:10,410 PUBLIK: Bara en rad. 325 00:13:10,410 --> 00:13:11,130 David J. MALAN: Bara en rad. 326 00:13:11,130 --> 00:13:15,280 Så det är bara typ av en trevlig sorts syntax detalj så att 327 00:13:15,280 --> 00:13:17,900 du slösar inte tid på att skriva tre rader, två av dessa är 328 00:13:17,900 --> 00:13:20,040 klammerparenteser, bara för att skriva en enda rad kod. 329 00:13:20,040 --> 00:13:21,650 Men om du har två eller flera linjer, vi 330 00:13:21,650 --> 00:13:22,860 verkligen behöver göra detta. 331 00:13:22,860 --> 00:13:24,210 >> Så nu låt mig spara den här. 332 00:13:24,210 --> 00:13:27,140 Låt mig gå vidare och köra klang. 333 00:13:27,140 --> 00:13:31,375 Låt mig köra a.out och nu får jag dem en per rad. 334 00:13:31,375 --> 00:13:33,670 Nu är a.out återigen slags dum namn för ett program. 335 00:13:33,670 --> 00:13:37,500 Hur vet jag klang att faktiskt ge mig ett filnamn 336 00:13:37,500 --> 00:13:39,820 det är mer användarvänligt, liksom buggy2 själv? 337 00:13:43,200 --> 00:13:44,466 Lite tydligare? 338 00:13:44,466 --> 00:13:45,220 PUBLIK: [OHÖRBAR]. 339 00:13:45,220 --> 00:13:47,810 David J. MALAN: OK, så jag kan faktiskt ta mycket 340 00:13:47,810 --> 00:13:51,000 användarvänliga genväg och bara skriva att buggy2. 341 00:13:51,000 --> 00:13:53,840 Jag inte anger. C. i detta fall, och tryck på Retur. 342 00:13:53,840 --> 00:13:58,530 Och vad gör gör det sammanställer buggy2.c för mig av 343 00:13:58,530 --> 00:14:00,260 be klang att göra det. 344 00:14:00,260 --> 00:14:05,100 Specifikt kallar det klang, kör det klang med mycket mer 345 00:14:05,100 --> 00:14:08,540 kommandoradsargument eller växlar än jag faktiskt behöver. 346 00:14:08,540 --> 00:14:11,270 Med tiden kommer vi att komma tillbaka till vad alla dessa olika 347 00:14:11,270 --> 00:14:13,810 kryptiska bindestreck uttryck betyder. 348 00:14:13,810 --> 00:14:16,910 Men för tillfället är att rädda mig bara besväret att 349 00:14:16,910 --> 00:14:19,600 behöva komma ihåg och med skriva ut alla dessa 350 00:14:19,600 --> 00:14:21,150 olika bindestreck uttryck. 351 00:14:21,150 --> 00:14:23,240 Och uppåtsidan av det är ytterst 352 00:14:23,240 --> 00:14:25,900 att nu har jag buggy2. 353 00:14:25,900 --> 00:14:27,480 Om jag vill göra detta manuellt, men jag 354 00:14:27,480 --> 00:14:28,775 kan istället göra detta - 355 00:14:28,775 --> 00:14:34,110 klang-o buggy2 och buggy2.c. 356 00:14:34,110 --> 00:14:37,980 Och det kommer liknande ge mig en fil som heter buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Så kort sagt, är klang kompilatorn. 358 00:14:39,710 --> 00:14:43,080 Gör bara ett användarvänligt verktyg som vi kommer att använda mer 359 00:14:43,080 --> 00:14:44,420 och mer, eftersom det börjar bara 360 00:14:44,420 --> 00:14:47,330 förenkla saker för oss. 361 00:14:47,330 --> 00:14:49,430 Och vi återvänder 0 slutligen. 362 00:14:49,430 --> 00:14:51,890 För nu, bara för att, men vi börjar reta den del 363 00:14:51,890 --> 00:14:52,930 idag och på onsdag. 364 00:14:52,930 --> 00:14:55,560 Eventuella frågor om något av detta? 365 00:14:55,560 --> 00:14:56,450 Ja? 366 00:14:56,450 --> 00:14:58,234 PUBLIK: [OHÖRBAR] 367 00:14:58,234 --> 00:15:00,020 Är i citat där? 368 00:15:00,020 --> 00:15:01,710 David J. MALAN: OK. 369 00:15:01,710 --> 00:15:05,880 När jag skrev ls i citat, som jag gör några magiska 370 00:15:05,880 --> 00:15:07,160 bakom kulisserna för att fixa en bugg. 371 00:15:07,160 --> 00:15:09,370 Jag glömde, som vi har talat många av er på 372 00:15:09,370 --> 00:15:11,600 diskussionsforum, att göra - 373 00:15:11,600 --> 00:15:17,220 Vi ska göra det här nu - sudo yum-y update appliance50. 374 00:15:17,220 --> 00:15:19,790 Hoppsan, det som är stavat rätt. 375 00:15:19,790 --> 00:15:23,240 Så apparaten är som ett operativsystem. 376 00:15:23,240 --> 00:15:25,650 Det kör denna operativsystem kallat Fedora. 377 00:15:25,650 --> 00:15:27,450 Och nu på grund av min långsam Internetanslutning, jag har 378 00:15:27,450 --> 00:15:28,260 verkligen spolas det. 379 00:15:28,260 --> 00:15:31,620 Så kör sudo yum update, som vi säger att du ska göra i 380 00:15:31,620 --> 00:15:34,080 problembild, är som i huvudsak kör automatiska uppdateringar 381 00:15:34,080 --> 00:15:35,420 i Mac OS eller Windows. 382 00:15:35,420 --> 00:15:37,280 Och anledningen till att köra detta i början av 383 00:15:37,280 --> 00:15:39,640 problem är att när vi skapade apparaten, jag 384 00:15:39,640 --> 00:15:42,480 trasslat till, och jag av misstag gjort alla dina program ser 385 00:15:42,480 --> 00:15:45,210 svart på en svart skärm, vilket är varför du inte ser dem 386 00:15:45,210 --> 00:15:45,860 som standard. 387 00:15:45,860 --> 00:15:48,020 Men den senaste versionen av apparaten fixar detta. 388 00:15:48,020 --> 00:15:50,500 Och jag ska fixa det under paus när jag har Internet 389 00:15:50,500 --> 00:15:51,280 anslutning. 390 00:15:51,280 --> 00:15:54,630 >> Så citat döljer bara min misstag, mycket diskret, 391 00:15:54,630 --> 00:15:55,730 tydligen. 392 00:15:55,730 --> 00:15:56,980 Övriga frågor? 393 00:15:59,750 --> 00:16:00,668 Ja? 394 00:16:00,668 --> 00:16:02,012 PUBLIK: Var gör ifrån? 395 00:16:02,012 --> 00:16:03,810 [OHÖRBAR] 396 00:16:03,810 --> 00:16:04,280 David J. MALAN: Bra fråga. 397 00:16:04,280 --> 00:16:05,460 Var gör ifrån? 398 00:16:05,460 --> 00:16:09,390 Det är ett Linux-program som har funnits i många år, långt 399 00:16:09,390 --> 00:16:10,570 före CS50. 400 00:16:10,570 --> 00:16:12,930 Och det kommer med ett operativsystem som Fedora. 401 00:16:12,930 --> 00:16:14,830 Den kommer inte från CS50 biblioteket. 402 00:16:14,830 --> 00:16:17,560 I själva verket det enda som kommer från CS50 biblioteket 403 00:16:17,560 --> 00:16:20,470 hittills, att vi har sett, är GetString, getInt, alla 404 00:16:20,470 --> 00:16:25,550 de Få funktioner, och ordet strängen, och i viss 405 00:16:25,550 --> 00:16:26,575 utsträckning, ordet BOOL. 406 00:16:26,575 --> 00:16:29,180 Men vi reta att förutom när vi dyka in i CS50 407 00:16:29,180 --> 00:16:30,580 själva apparaten. 408 00:16:30,580 --> 00:16:32,820 >> Så ja, en ytterligare fråga här. 409 00:16:32,820 --> 00:16:36,636 PUBLIK: När du sa ringa och sedan buggig, hur 410 00:16:36,636 --> 00:16:39,980 Datorn känner [OHÖRBAR]? 411 00:16:39,980 --> 00:16:40,520 David J. MALAN: Bra fråga. 412 00:16:40,520 --> 00:16:43,830 Så när du bara kör make buggy1 eller göra buggy2, hur 413 00:16:43,830 --> 00:16:45,220 gör det? 414 00:16:45,220 --> 00:16:49,900 Så som standard, om du skriver göra buggy1, göra letar efter en 415 00:16:49,900 --> 00:16:52,330 fil som heter buggy1.c. 416 00:16:52,330 --> 00:16:55,570 Och då kör rätt klang kommandon, 417 00:16:55,570 --> 00:17:00,380 vilket åsidosätter filen förvalda heter a.out. 418 00:17:00,380 --> 00:17:03,670 Faktum är att om vi tittar på vad som gör, vad - 419 00:17:03,670 --> 00:17:04,839 låt oss avsluta det här. 420 00:17:04,839 --> 00:17:09,530 Om vi ​​tittar på vad som gör faktiskt gör, gör buggy2, 421 00:17:09,530 --> 00:17:10,470 det är redan aktuell. 422 00:17:10,470 --> 00:17:13,020 Så låt mig ta bort rm kommandot, 423 00:17:13,020 --> 00:17:14,319 program jag skrev innan. 424 00:17:14,319 --> 00:17:17,319 Skriva Y-E-S för att bekräfta att jag vill ta bort den. 425 00:17:17,319 --> 00:17:20,480 Om jag nu gör göra, märker att i denna mycket lång rad, 426 00:17:20,480 --> 00:17:22,980 Det är detta sista här,-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Alla gör gör passerar detta argument så att säga, att 428 00:17:26,959 --> 00:17:29,665 Klang, så att jag inte behöver skriva det själv. 429 00:17:29,665 --> 00:17:32,660 >> Okej, så en snabb par administrativa 430 00:17:32,660 --> 00:17:33,470 meddelanden. 431 00:17:33,470 --> 00:17:36,940 Så för sektioner, började som officiellt denna kommande 432 00:17:36,940 --> 00:17:38,970 Söndag, du vill alltid ta, om 433 00:17:38,970 --> 00:17:40,120 du har en, en bärbar dator. 434 00:17:40,120 --> 00:17:42,570 Om du inte har en bärbar dator, når ut till mig av 435 00:17:42,570 --> 00:17:43,580 släppa mig ett mail. 436 00:17:43,580 --> 00:17:44,810 Och vi kommer räkna ut ett arbetsflöde. 437 00:17:44,810 --> 00:17:47,100 Vad som allmänt du hittar i avsnittet är att de är en del 438 00:17:47,100 --> 00:17:48,770 begreppsmässig, del praktisk. 439 00:17:48,770 --> 00:17:52,190 Vi kommer särskilt att använda den del av frågor, en del av 440 00:17:52,190 --> 00:17:54,110 veckans problembild, att gå igenom några av de 441 00:17:54,110 --> 00:17:55,820 konceptuella material från föreläsning. 442 00:17:55,820 --> 00:17:57,480 Och det är alla i det aktuella problemet set. 443 00:17:57,480 --> 00:18:00,010 Och vi kommer också dyka in några praktiska aktiviteter, ibland 444 00:18:00,010 --> 00:18:02,190 av dem kommer att krävas in, ibland i 445 00:18:02,190 --> 00:18:02,830 som inte kommer. 446 00:18:02,830 --> 00:18:04,630 Till exempel den här första veckan, de är tänkt bara som en 447 00:18:04,630 --> 00:18:05,780 uppvärmning övning. 448 00:18:05,780 --> 00:18:07,800 Och du kommer att upptäcka att dessa problem är egentligen bara det. 449 00:18:07,800 --> 00:18:10,220 De är avsedda att vara ganska liten, men inte nödvändigtvis 450 00:18:10,220 --> 00:18:13,100 triviala program för att skriva, som inte nödvändigtvis 451 00:18:13,100 --> 00:18:16,230 spännande i sig, men finns goda möjligheter att 452 00:18:16,230 --> 00:18:19,620 öva med syntax, med nya funktioner, hemma i en 453 00:18:19,620 --> 00:18:21,900 där du har några av dina klasskamrater närvarande som 454 00:18:21,900 --> 00:18:22,870 samt din TF. 455 00:18:22,870 --> 00:18:26,210 >> Och vad vi ska göra under tiden är att använda ett verktyg som heter CS50 utrymmen, 456 00:18:26,210 --> 00:18:28,940 varigenom istället för att bara använda CS50 Appliance, du kommer 457 00:18:28,940 --> 00:18:32,450 istället gå till en webbsida i en webbläsare, där du kommer att kunna 458 00:18:32,450 --> 00:18:35,610 att skriva kod i ett webbläsarfönster under sektion. 459 00:18:35,610 --> 00:18:38,240 Och sedan om du väljer in kan din undervisning karl visar sedan 460 00:18:38,240 --> 00:18:40,980 vad det är du skriver på skärmen i din webbläsare 461 00:18:40,980 --> 00:18:43,930 fönster upp på framsidan av klassen, oavsett anonymt eller 462 00:18:43,930 --> 00:18:47,250 offentligt, så att han eller hon kan sedan gå igenom med 463 00:18:47,250 --> 00:18:50,080 dina klasskamrater vad du gjorde bra, vad du inte gjorde bra. 464 00:18:50,080 --> 00:18:52,750 Och återigen, försäkrade vila allt detta fint kan anonymiseras. 465 00:18:52,750 --> 00:18:54,410 Men det blir en fin möjlighet för mycket mer 466 00:18:54,410 --> 00:18:56,810 interaktivitet än något liknande föreläsning tillåter. 467 00:18:56,810 --> 00:18:58,910 >> Under tiden kommer vi att ha dessa saker som kallas super 468 00:18:58,910 --> 00:19:01,610 sektioner, som är frivillig, men är öppna för alla i 469 00:19:01,610 --> 00:19:04,030 klassen, så att du kan göra detta mer kollektivt för 470 00:19:04,030 --> 00:19:05,190 Problemet som en. 471 00:19:05,190 --> 00:19:06,010 Här är schemat. 472 00:19:06,010 --> 00:19:08,870 Detta är också publiceras på hemsidan cs50.net. 473 00:19:08,870 --> 00:19:10,850 Observera att det blir en hacker-specifik 474 00:19:10,850 --> 00:19:12,430 en morgon eftermiddag. 475 00:19:12,430 --> 00:19:15,460 Och vi kommer att filma en dag och en i morgon och lägga dem 476 00:19:15,460 --> 00:19:16,720 nätet inom 24 timmar. 477 00:19:16,720 --> 00:19:19,370 Så om du inte kan göra något av dessa tillfällen, inte oroa dig. 478 00:19:19,370 --> 00:19:22,720 Och återigen är schemat på nätet nu på cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> När det gäller sektionering själv, bör du ha fått en 480 00:19:25,350 --> 00:19:28,520 e-post som uppmanar dig att gå till kursens hemsida för att hitta 481 00:19:28,520 --> 00:19:29,610 ut din avdelning. 482 00:19:29,610 --> 00:19:32,890 Om livet har förändrats och du behöver ändra din sektion, 483 00:19:32,890 --> 00:19:33,560 inte ett problem. 484 00:19:33,560 --> 00:19:37,900 Gå tillbaka till samma webbadress, cs50.net/section, singularis, 485 00:19:37,900 --> 00:19:40,090 och du fylla i liknande form så att du kan 486 00:19:40,090 --> 00:19:41,260 sedan ge oss dina preferenser. 487 00:19:41,260 --> 00:19:43,360 Och vi kommer att följa upp med veckans slut vad vi kan 488 00:19:43,360 --> 00:19:44,240 rymma. 489 00:19:44,240 --> 00:19:49,530 Förra veckan, påminna om att vi föreslog med CS50 diskutera, 490 00:19:49,530 --> 00:19:51,370 kursens diskussion verktyg i föreläsning. 491 00:19:51,370 --> 00:19:53,680 Så vi hade 40 frågor som ställdes och 492 00:19:53,680 --> 00:19:54,720 besvaras under föreläsningen. 493 00:19:54,720 --> 00:19:56,280 Så det verkade fungera bra, så vi kommer att fortsätta 494 00:19:56,280 --> 00:19:57,180 försöker göra det. 495 00:19:57,180 --> 00:19:59,600 Om det under föreläsning, behöver du inte bara känner dig bekväm höjning 496 00:19:59,600 --> 00:20:00,780 din hand, inte ett problem. 497 00:20:00,780 --> 00:20:04,640 Gå till cs50.net/discuss, posta där, och en av vår undervisning 498 00:20:04,640 --> 00:20:07,270 stipendiaterna antingen svara elektroniskt eller höja sin 499 00:20:07,270 --> 00:20:10,620 handen för din räkning anonymt fråga, beroende 500 00:20:10,620 --> 00:20:12,470 på vilken typ av fråga. 501 00:20:12,470 --> 00:20:15,000 Och i termer av återkoppling, kommer i allmänhet att vara psets 502 00:20:15,000 --> 00:20:16,760 tillbaka inom en vecka. 503 00:20:16,760 --> 00:20:19,080 Eftersom det tar en liten stund för avsnitt för att uppnå 504 00:20:19,080 --> 00:20:22,430 jämvikt, kommer den första pset, 0 och 1, vara lite 505 00:20:22,430 --> 00:20:24,130 försenas saker bosätta sig. 506 00:20:24,130 --> 00:20:27,130 Men håll ögonen öppna för att de kommande veckorna. 507 00:20:27,130 --> 00:20:29,750 >> Okej, så låt mig sätta på min allvarliga 508 00:20:29,750 --> 00:20:31,040 röst för ett ögonblick. 509 00:20:31,040 --> 00:20:32,690 Så detta är faktiskt en intressant klimat som 510 00:20:32,690 --> 00:20:35,210 denna diskussion, vad med alla de andra saker 511 00:20:35,210 --> 00:20:37,310 pågår på campus relaterade därtill. 512 00:20:37,310 --> 00:20:40,220 Men CS50 har verkligen haft sin historia denna 513 00:20:40,220 --> 00:20:43,360 ämne, i så mycket som varje år, den här kursen, för många 514 00:20:43,360 --> 00:20:46,910 år, Ad-styrelserna ungefär 3% av klassen. 515 00:20:46,910 --> 00:20:51,620 Detta det senaste året, 2011, CS50 Ad-Boarded 35 studenter. 516 00:20:51,620 --> 00:20:54,120 Detta är inte, tror jag, på grund av bristande tydlighet. 517 00:20:54,120 --> 00:20:56,760 Inser att i kursens kursplan, finns en sida av 518 00:20:56,760 --> 00:20:59,020 redogörelse där linjerna är. 519 00:20:59,020 --> 00:21:01,350 Samma uttalande upprepas på var och en av de 520 00:21:01,350 --> 00:21:03,070 Problemet sätter på sidan ett. 521 00:21:03,070 --> 00:21:05,760 >> Så jag nämner detta i dag egentligen bara att göra 522 00:21:05,760 --> 00:21:07,030 folk uppmärksamma på detta. 523 00:21:07,030 --> 00:21:08,080 Och vi har provat olika saker. 524 00:21:08,080 --> 00:21:10,630 Och vad jag trodde att vi skulle göra idag är att ta bara ett ögonblick att 525 00:21:10,630 --> 00:21:13,830 faktiskt titta på några av tidigare fall som har kommit upp. 526 00:21:13,830 --> 00:21:16,160 Hellre än att hålla dessa så smutsiga små hemligheter, faktiskt 527 00:21:16,160 --> 00:21:19,170 peka på vad eleverna har gjort och hur vi har upptäckt 528 00:21:19,170 --> 00:21:21,630 den och verkligen vad den övergripande motivationen är för 529 00:21:21,630 --> 00:21:23,950 även med det här samtalet. 530 00:21:23,950 --> 00:21:27,060 Så med det sagt, är den linje i huvudsak detta - 531 00:21:27,060 --> 00:21:29,200 per kursplanen, du välkommen, du uppmuntras att 532 00:21:29,200 --> 00:21:30,210 prata med klasskamrater. 533 00:21:30,210 --> 00:21:31,910 Det är hela syftet med att ha dessa samarbetsprojekt 534 00:21:31,910 --> 00:21:34,470 kontorstid i Annenberg och uppmuntra människor för 535 00:21:34,470 --> 00:21:35,755 slutprojekt att arbeta tillsammans. 536 00:21:35,755 --> 00:21:38,590 Men linje dras när det blir dags att faktiskt skriva 537 00:21:38,590 --> 00:21:39,790 din slutliga lösning. 538 00:21:39,790 --> 00:21:42,590 Talar engelska, helt bra, talade i pseudokod, 539 00:21:42,590 --> 00:21:43,400 helt bra. 540 00:21:43,400 --> 00:21:46,340 E-posta en klasskamrat din pset, låta dem se över 541 00:21:46,340 --> 00:21:48,610 skärmen som händer fortsätta skriva, 542 00:21:48,610 --> 00:21:50,110 över linjen också. 543 00:21:50,110 --> 00:21:52,250 Ser till kursplanen för de särskilda linjerna. 544 00:21:52,250 --> 00:21:55,850 >> Men bara för att måla en bild av hur det är tyvärr en 545 00:21:55,850 --> 00:21:58,370 verkligheten, inse att det finns webbplatser där ute som 546 00:21:58,370 --> 00:22:01,490 har lösningar från denna klass och många andra klasser. 547 00:22:01,490 --> 00:22:04,940 Det faktum att du eller någon 3% av er vet att det finns 548 00:22:04,940 --> 00:22:07,240 innebär att vi vet att detta existerar. 549 00:22:07,240 --> 00:22:09,340 Det faktum att det finns webbplatser som denna där du 550 00:22:09,340 --> 00:22:11,540 kan betala någon för att faktiskt göra dina problemområden uppsättningar - detta var 551 00:22:11,540 --> 00:22:13,450 ett verkligt fall som kom upp förra året. 552 00:22:13,450 --> 00:22:15,790 Detta är en hemsida som heter odesk.com. 553 00:22:15,790 --> 00:22:20,090 Och Tim var namnet på den person här som var utstationering på 554 00:22:20,090 --> 00:22:24,580 denna webbplats och frågade någon att göra sin pset 7 i 555 00:22:24,580 --> 00:22:25,570 detta fall. 556 00:22:25,570 --> 00:22:28,350 Tja, är odesk.com mycket Google-stånd, och även vi är 557 00:22:28,350 --> 00:22:30,310 mycket bra på att googla. 558 00:22:30,310 --> 00:22:32,360 Även här finns det platser - och detta en är ganska 559 00:22:32,360 --> 00:22:34,234 avskyvärda, uppriktigt sagt. 560 00:22:34,234 --> 00:22:38,050 [Skratt] 561 00:22:38,050 --> 00:22:39,610 David J. MALAN: Det roliga här webbplatsen är om 562 00:22:39,610 --> 00:22:41,970 man läser om sidan talar de om deras företags 563 00:22:41,970 --> 00:22:44,390 kultur och hur kundservice är deras nummer ett 564 00:22:44,390 --> 00:22:46,190 prioritet att se till att dina uppdrag får 565 00:22:46,190 --> 00:22:47,890 vände i tid. 566 00:22:47,890 --> 00:22:50,580 >> Men på fullt allvar, igen, det faktum att dessa platser 567 00:22:50,580 --> 00:22:52,910 finns inser vi också är medvetna om 568 00:22:52,910 --> 00:22:53,730 dessa typer av platser. 569 00:22:53,730 --> 00:22:55,890 Och för att ge dig en känsla för vad som utgör detta i allmänhet 570 00:22:55,890 --> 00:22:58,570 tar, vi vanligtvis inte har stora skandaler där människor 571 00:22:58,570 --> 00:23:01,080 samarbetar på alla typer av massiv skala, utan snarare 572 00:23:01,080 --> 00:23:04,540 Det är dessa sena stunder av svaghet, där du har så 573 00:23:04,540 --> 00:23:07,550 mycket att göra, det är 4:00, du utmattad och du 574 00:23:07,550 --> 00:23:09,770 tror på dig själv, ja, låt mig bara ta en titt på min 575 00:23:09,770 --> 00:23:11,770 rumskompis eller min vän kod eller liknande. 576 00:23:11,770 --> 00:23:14,800 Och manifestationer av detta innebär tyvärr Student 577 00:23:14,800 --> 00:23:17,640 Ett lämnar något sådant och Student B inlämnande 578 00:23:17,640 --> 00:23:20,370 något sådant, som verkligen, i en dator 579 00:23:20,370 --> 00:23:23,830 vetenskap klass, är förvånansvärt lätt för datavetare 580 00:23:23,830 --> 00:23:25,690 att detektera med programvara. 581 00:23:25,690 --> 00:23:28,410 Detta är en annan vanlig paradigm, där du har typ av 582 00:23:28,410 --> 00:23:31,010 arbetat vid sidan av någon, kanske talar i 583 00:23:31,010 --> 00:23:32,360 Engelska, bara bra, pseudokod. 584 00:23:32,360 --> 00:23:35,080 Men sedan det blir dags att faktiskt lämna och psets 585 00:23:35,080 --> 00:23:37,910 bara få utbyts via e-post eller Dropbox eller liknande. 586 00:23:37,910 --> 00:23:41,120 Men i ett försök att göra det mindre uppenbart att detta är 587 00:23:41,120 --> 00:23:44,830 vad som hänt, så är det som lämnas in. 588 00:23:44,830 --> 00:23:47,880 Även detta inte resa upp välskrivna bitar av 589 00:23:47,880 --> 00:23:50,360 programvara som vi måste faktiskt upptäcka 590 00:23:50,360 --> 00:23:51,280 dessa typer av saker. 591 00:23:51,280 --> 00:23:53,760 Och faktiskt det vi gör är köra programvara som jämför alla 592 00:23:53,760 --> 00:23:55,540 årets bidrag mot alla tidigare år 593 00:23:55,540 --> 00:23:57,380 inlagor, mot allt vi finns på 594 00:23:57,380 --> 00:24:00,060 Internet mot varje jobb webbplats där ute. 595 00:24:00,060 --> 00:24:01,710 Det är alla mycket automatiserad. 596 00:24:01,710 --> 00:24:05,665 Och så gör vi det verkligen bra rättvisans namn till 97% som 597 00:24:05,665 --> 00:24:07,760 verkligen arbetar häcken av sig i detta och i andra 598 00:24:07,760 --> 00:24:11,530 klasser och sätta i allt det arbete, så att arbetet 599 00:24:11,530 --> 00:24:13,030 de lämnar in slutändan är deras eget. 600 00:24:13,030 --> 00:24:14,220 Och jag kan gå på för åldrar. 601 00:24:14,220 --> 00:24:16,030 >> Dessa är bara en handfull av förra årets fall. 602 00:24:16,030 --> 00:24:19,350 Några elever lämnade dessa filer på samma sätt för pset 2, 603 00:24:19,350 --> 00:24:22,460 pset 3, 4 pset, 5 pset, 6 pset, pset 9. 604 00:24:22,460 --> 00:24:26,360 I detta fall var det frågesport 0 och i fjol, där två 605 00:24:26,360 --> 00:24:29,570 eleverna lämnade identiskt denna mening bland många 606 00:24:29,570 --> 00:24:32,210 andra "Begäran av typ -" punkt, punkt, punkt. 607 00:24:32,210 --> 00:24:34,530 Så även i en klass för 600 har vi upptäcker detta 608 00:24:34,530 --> 00:24:36,310 på in frågesporter. 609 00:24:36,310 --> 00:24:39,080 Så kort sagt, detta - ärligt talat, jag hatar att ha denna typ av 610 00:24:39,080 --> 00:24:41,300 konversation - men detta är verkligen en medveten ansträngning 611 00:24:41,300 --> 00:24:43,540 i år för att försöka pressa ner det numret. 612 00:24:43,540 --> 00:24:45,650 För även om vi säger sådana här saker varje 613 00:24:45,650 --> 00:24:48,100 år, jag tror verkligheten för att ha uppehöll på den för ett par 614 00:24:48,100 --> 00:24:50,800 fler sekunder än vanligt och faktiskt bara påpeka 615 00:24:50,800 --> 00:24:53,600 att det kan tyckas, va inte så stor roll, åtminstone 616 00:24:53,600 --> 00:24:56,390 tänker tillbaka på detta ögonblick, både i rättvisans namn till 617 00:24:56,390 --> 00:25:00,100 dig själv och dina klasskamrater här. 618 00:25:00,100 --> 00:25:02,480 Så om du har någonsin några frågor om var linjen 619 00:25:02,480 --> 00:25:04,290 är snälla, bara nå ut till mig personligen. 620 00:25:04,290 --> 00:25:07,190 Men svaret är alltid helt betonade vid 621 00:25:07,190 --> 00:25:09,090 sista minuten, kontanter i en sen dag. 622 00:25:09,090 --> 00:25:11,080 Eller om det är en fråga om att inte ha några sena dagar, 623 00:25:11,080 --> 00:25:12,900 ärligt, maila mig personligen. 624 00:25:12,900 --> 00:25:14,110 Vi kommer pĺ nĺgot. 625 00:25:14,110 --> 00:25:17,480 Vänligen inte sätta din tid här på Harvard i riskzonen. 626 00:25:17,480 --> 00:25:18,570 >> Nu tänkte jag att vi skulle lätta upp stämningen, så jag 627 00:25:18,570 --> 00:25:20,264 ingår detta som nästa bild. 628 00:25:20,264 --> 00:25:22,770 [Skratt] 629 00:25:22,770 --> 00:25:23,630 David J. MALAN: Denna webbplats var stor. 630 00:25:23,630 --> 00:25:24,820 Jag fick faktiskt lite distraherad. 631 00:25:24,820 --> 00:25:26,330 Det är den här. 632 00:25:26,330 --> 00:25:29,590 Och så här var fantastisk. 633 00:25:29,590 --> 00:25:35,190 Okej, så tänk på att kattungen sent på natten när du gör 634 00:25:35,190 --> 00:25:36,040 dessa beslut. 635 00:25:36,040 --> 00:25:40,110 Okej, så tillbaka till roligare och mindre allvarlig saker, som 636 00:25:40,110 --> 00:25:40,780 förhållanden. 637 00:25:40,780 --> 00:25:43,900 >> Okej, så vi pratade kortfattat om dessa. 638 00:25:43,900 --> 00:25:46,080 Detta är något som är nog ganska bekant från 639 00:25:46,080 --> 00:25:47,260 värld Scratch. 640 00:25:47,260 --> 00:25:49,860 Och i en värld av Scratch har vi detta behov ibland 641 00:25:49,860 --> 00:25:51,110 gå att gafflarna i vägen. 642 00:25:51,110 --> 00:25:54,840 Antingen göra det eller det eller det andra sak här. 643 00:25:54,840 --> 00:25:58,990 Och när vi vill göra detta kan vi använda i C nu, detta om 644 00:25:58,990 --> 00:26:00,860 annars konstruera. 645 00:26:00,860 --> 00:26:06,420 Och så här har vi booleska uttryck. 646 00:26:06,420 --> 00:26:09,260 Till exempel booleska uttryck här kan vi eller 647 00:26:09,260 --> 00:26:12,260 dem tillsammans, i den meningen att vi har detta villkor ELLER 648 00:26:12,260 --> 00:26:13,200 detta villkor. 649 00:26:13,200 --> 00:26:15,100 Vi kan och dem tillsammans, i den meningen att vi vill 650 00:26:15,100 --> 00:26:17,710 kontrollera detta villkor och detta villkor. 651 00:26:17,710 --> 00:26:22,440 Och här har vi en switch-sats nu, vilket inte är så 652 00:26:22,440 --> 00:26:26,040 liknande syntaktiskt till dessa typer av villkor, men det 653 00:26:26,040 --> 00:26:30,160 tillåter oss att göra motsvarande om else if, annars om, annars 654 00:26:30,160 --> 00:26:34,990 om, och liknande genom att helt enkelt räkna dem från fall till fall 655 00:26:34,990 --> 00:26:36,670 från fall till fall till fall. 656 00:26:36,670 --> 00:26:38,370 Så vi såg dem förra gången. 657 00:26:38,370 --> 00:26:40,430 Och då började vi röra på saker som slingor. 658 00:26:40,430 --> 00:26:42,070 Vi såg en av dessa nyss. 659 00:26:42,070 --> 00:26:44,180 Men det är dessa andra looping konstruktioner. 660 00:26:44,180 --> 00:26:46,370 >> Till exempel den här här. 661 00:26:46,370 --> 00:26:50,140 Så medan (villkor), gör det här och om igen. 662 00:26:50,140 --> 00:26:53,070 Så i grunden verkar det som att vara olika mellan detta 663 00:26:53,070 --> 00:26:55,760 för slinga och detta samtidigt slinga här? 664 00:27:00,810 --> 00:27:05,045 Detta för slinga och detta samtidigt slinga. 665 00:27:05,045 --> 00:27:07,840 Ja? 666 00:27:07,840 --> 00:27:08,800 Vad är det? 667 00:27:08,800 --> 00:27:10,050 PUBLIK: [OHÖRBAR]. 668 00:27:14,632 --> 00:27:15,120 David J. MALAN: Bra. 669 00:27:15,120 --> 00:27:17,130 Så medan for-slingan tillstånd, det finns helt klart 670 00:27:17,130 --> 00:27:17,940 mer syntax. 671 00:27:17,940 --> 00:27:20,560 Det är detta initiering, det finns den här uppdateringen. 672 00:27:20,560 --> 00:27:23,820 I en while-slinga, det finns bara detta villkor. 673 00:27:23,820 --> 00:27:26,630 Så det verkar som det är lite avskalad jämfört med för 674 00:27:26,630 --> 00:27:28,770 slinga, vilket innebär om vi vill ha variabler och vi vill 675 00:27:28,770 --> 00:27:30,800 att ha inkrementering har vi faktiskt 676 00:27:30,800 --> 00:27:32,500 göra det här själva. 677 00:27:32,500 --> 00:27:34,420 >> Så låt mig gå vidare och öppna upp gedit. 678 00:27:34,420 --> 00:27:36,320 Låt mig övergå till apparaten. 679 00:27:36,320 --> 00:27:38,110 Och låt oss göra bara en snabb liten exempel som 680 00:27:38,110 --> 00:27:40,550 skiljer ett av dessa från andra. 681 00:27:40,550 --> 00:27:42,490 Och i bakhuvudet här skulle jag säga en sak. 682 00:27:42,490 --> 00:27:44,120 Jag nämnde specifikt namn Tim. 683 00:27:44,120 --> 00:27:47,740 Tim var faktiskt någon som en student försökt hitta göra 684 00:27:47,740 --> 00:27:48,680 sina läxor för dem. 685 00:27:48,680 --> 00:27:51,280 Vi hade ingen Tim i just den delen. 686 00:27:51,280 --> 00:27:53,690 Så inser, så att jag beskriver en elev, det var inte en student. 687 00:27:53,690 --> 00:27:55,720 Det var en slumpmässig person på Internet att göra saker 688 00:27:55,720 --> 00:27:57,180 genom ombud förra året. 689 00:27:57,180 --> 00:27:58,670 Så finner vi det också. 690 00:27:58,670 --> 00:28:00,630 Så i detta fall här, låt mig gå vidare och 691 00:28:00,630 --> 00:28:02,810 öppna upp en ny fil. 692 00:28:02,810 --> 00:28:04,800 Arkiv, Nytt. 693 00:28:04,800 --> 00:28:06,050 Det ger mig en flik här. 694 00:28:06,050 --> 00:28:09,940 Låt mig gå vidare och spara det som loop.c. 695 00:28:09,940 --> 00:28:11,810 Låt mig gå och klicka på Spara. 696 00:28:11,810 --> 00:28:15,340 Och sedan ner hit, låt oss gå vidare och börja skriva 697 00:28:15,340 --> 00:28:16,605 # Include . 698 00:28:19,116 --> 00:28:20,520 Låt mig zooma in 699 00:28:20,520 --> 00:28:23,410 Nu ska vi göra int main (void). 700 00:28:23,410 --> 00:28:30,020 Låt mig gå vidare och göra for (int i = 0; I < 701 00:28:30,020 --> 00:28:33,480 åh, 10, i + +). 702 00:28:33,480 --> 00:28:36,620 Och nu ska jag gå vidare och göra ut stjärnan som jag 703 00:28:36,620 --> 00:28:37,890 gjorde tidigare. 704 00:28:37,890 --> 00:28:39,390 Och sedan i slutet av detta program kommer vi bara att 705 00:28:39,390 --> 00:28:41,130 skriva ut en ny linje, bara så att min snabba 706 00:28:41,130 --> 00:28:42,470 ser inte alla rörigt. 707 00:28:42,470 --> 00:28:45,170 tillbaka 0. 708 00:28:45,170 --> 00:28:47,610 Verkar syntaktiskt korrekt? 709 00:28:47,610 --> 00:28:48,040 Hittills. 710 00:28:48,040 --> 00:28:48,560 Så låt oss se. 711 00:28:48,560 --> 00:28:51,290 >> Så låt mig zooma ut, gå in i min terminalfönster. 712 00:28:51,290 --> 00:28:54,570 Och låt mig gå vidare och köra slinga, eftersom jag kallade detta 713 00:28:54,570 --> 00:28:55,690 sak loop.c. 714 00:28:55,690 --> 00:28:56,780 Så gör loop. 715 00:28:56,780 --> 00:28:57,840 Verkar kompilera på OK. 716 00:28:57,840 --> 00:29:00,210 Låt mig köra slinga, och nu på Enter. 717 00:29:00,210 --> 00:29:01,820 Och det verkar ha tryckt 10 stjärnor. 718 00:29:01,820 --> 00:29:03,780 Så låt oss bara konvertera detta till en while-slinga och se vad 719 00:29:03,780 --> 00:29:05,220 typer av frågor som vi snubbla över. 720 00:29:05,220 --> 00:29:11,290 Så i stället för denna, låt mig gå in här och säga när jag är 721 00:29:11,290 --> 00:29:12,760 mindre än 10 - 722 00:29:12,760 --> 00:29:14,910 Låt mig bli av med for-slingan. 723 00:29:14,910 --> 00:29:17,170 OK, så vi har ett par problem redan. 724 00:29:17,170 --> 00:29:21,110 Så tillståndet är densamma, men jag uppenbarligen saknas 725 00:29:21,110 --> 00:29:21,680 initiering. 726 00:29:21,680 --> 00:29:23,840 Jag saknar inkrementering. 727 00:29:23,840 --> 00:29:28,020 Så vad ska kompilatorn säger sannolikt mig när jag försöker 728 00:29:28,020 --> 00:29:29,170 sammanställa detta program? 729 00:29:29,170 --> 00:29:29,666 Ja? 730 00:29:29,666 --> 00:29:31,154 PUBLIK: [OHÖRBAR]. 731 00:29:31,154 --> 00:29:31,650 >> David J. MALAN: Bra. 732 00:29:31,650 --> 00:29:34,180 Så det kommer att säga något i stil svart - i detta 733 00:29:34,180 --> 00:29:35,280 fall, variabel jag. 734 00:29:35,280 --> 00:29:37,980 Och faktiskt, användning av svart identifierare i.. 735 00:29:37,980 --> 00:29:40,960 Och så detta är i kontrast med språk som PHP och 736 00:29:40,960 --> 00:29:43,120 Python och Ruby, som några av er kanske känner, 737 00:29:43,120 --> 00:29:44,820 där du kan bara typ av start med hjälp av variabler 738 00:29:44,820 --> 00:29:47,420 mot sin vilja och inte behöver oroa sig för att förklara dem 739 00:29:47,420 --> 00:29:48,560 explicit alltid. 740 00:29:48,560 --> 00:29:51,770 I C och i språk som Java och C + +, måste du vara 741 00:29:51,770 --> 00:29:53,020 Super explicit. 742 00:29:53,020 --> 00:29:55,760 Och om du vill ha en variabel som heter jag, måste du berätta för mig 743 00:29:55,760 --> 00:29:57,360 vilken typ av variabel det är. 744 00:29:57,360 --> 00:29:59,360 Så vi kommer att behöva för att fixa detta på följande sätt. 745 00:29:59,360 --> 00:30:05,510 Jag kommer att behöva gå upp här och skriver int i, därför 746 00:30:05,510 --> 00:30:07,860 Jag har förklarat en variabel som heter jag. 747 00:30:07,860 --> 00:30:09,180 Nu har jag hoppade ett steg. 748 00:30:09,180 --> 00:30:11,340 Jag har naturligtvis inte initierats, men låt oss se om det vid 749 00:30:11,340 --> 00:30:13,650 Minst fabrikat klang sluta klaga. 750 00:30:13,650 --> 00:30:15,770 Så låt mig göra om detta program. 751 00:30:15,770 --> 00:30:16,770 >> Okej, nu är det bara klaga 752 00:30:16,770 --> 00:30:17,870 av ett annat skäl. 753 00:30:17,870 --> 00:30:21,130 "Variabel" i "oinitierad när de används här." Okej, så 754 00:30:21,130 --> 00:30:22,340 det är ganska tydligt. 755 00:30:22,340 --> 00:30:25,510 Initierat betyder bara ställa in den lika med ett värde. 756 00:30:25,510 --> 00:30:30,820 Och vi har inte gjort det, så låt mig försöka lika med 0. 757 00:30:30,820 --> 00:30:35,030 Nu ska vi prova det här igen och köra klang. 758 00:30:35,030 --> 00:30:36,140 Sammanställt denna gång. 759 00:30:36,140 --> 00:30:37,210 Och jag är på väg att köra den. 760 00:30:37,210 --> 00:30:43,120 Men stora gamla oändlig slinga, eftersom jag har gjort 761 00:30:43,120 --> 00:30:45,530 initiering, jag har gjort tillståndet, men jag har aldrig gjort 762 00:30:45,530 --> 00:30:47,030 någon form av inkrementering. 763 00:30:47,030 --> 00:30:48,780 Så hur kan jag göra inkrementering? 764 00:30:48,780 --> 00:30:51,170 Tja, i en while-slinga, det känns som jag ska ha 765 00:30:51,170 --> 00:30:54,180 att göra det insidan av slingan, eftersom mycket som den första 766 00:30:54,180 --> 00:30:56,570 veckans exempel på att göra looping konstruktioner, som med 767 00:30:56,570 --> 00:30:59,040 strumpor och med själv-räkning, hade vi att göra 768 00:30:59,040 --> 00:31:01,550 något i slutet, vilja gå tillbaka till nästa rad. 769 00:31:01,550 --> 00:31:05,040 Vad händer om jag gå vidare och göra det jag + + här? 770 00:31:05,040 --> 00:31:06,030 Låt oss inte ens sammanställa denna. 771 00:31:06,030 --> 00:31:06,890 Fånga mig redan. 772 00:31:06,890 --> 00:31:09,704 Vad är det för fel här? 773 00:31:09,704 --> 00:31:10,690 PUBLIK: [OHÖRBAR]. 774 00:31:10,690 --> 00:31:11,770 >> David J. MALAN: Så det är definitivt inte int. 775 00:31:11,770 --> 00:31:13,080 Det är jag. 776 00:31:13,080 --> 00:31:15,110 Och klammerparenteser, som tidigare, 777 00:31:15,110 --> 00:31:16,800 indrag räcker inte. 778 00:31:16,800 --> 00:31:18,410 Så nu har jag bygga detta. 779 00:31:18,410 --> 00:31:21,780 Så medan jag är mindre än 10, ut en stjärna, 780 00:31:21,780 --> 00:31:23,220 sedan öka i.. 781 00:31:23,220 --> 00:31:25,680 Och hur en while-slinga fungerar är att så fort du träffar 782 00:31:25,680 --> 00:31:29,630 botten av slingan, som i detta fall ser ut som linje 10, 783 00:31:29,630 --> 00:31:32,880 det kommer att gå tillbaka till linje 6, vid vilken punkt 784 00:31:32,880 --> 00:31:34,400 villkor kommer att kontrolleras på nytt. 785 00:31:34,400 --> 00:31:37,500 Och om jag fortfarande är mindre än 10, ska vi göra linjerna 8 och 786 00:31:37,500 --> 00:31:41,250 då 9, då vi kommer hit 10, och gå tillbaka till 6, igen och 787 00:31:41,250 --> 00:31:45,580 igen och igen och igen, så länge som i är mindre än 10. 788 00:31:45,580 --> 00:31:47,860 Så låt oss köra göra här. 789 00:31:47,860 --> 00:31:48,940 >> Okej, vi har sammanställt okej. 790 00:31:48,940 --> 00:31:50,300 Låt mig repris slinga. 791 00:31:50,300 --> 00:31:52,620 Och nu verkar det faktiskt fungera. 792 00:31:52,620 --> 00:31:55,100 Så plus och minus här? 793 00:31:55,100 --> 00:31:58,910 Tja, så länge det finns faktiskt inte en helhet PLO - 794 00:31:58,910 --> 00:31:59,420 så söt. 795 00:31:59,420 --> 00:32:01,870 Okej, det var en - ah, det var en olycka. 796 00:32:01,870 --> 00:32:05,200 Okej, så låt oss gå tillbaka till for-slingan. 797 00:32:05,200 --> 00:32:07,530 Så för slingor är trevligt eftersom de är super tydlig. 798 00:32:07,530 --> 00:32:09,720 Och trots att de är lite otymplig att skriva, det är 799 00:32:09,720 --> 00:32:11,500 mycket kraftfull och det tillåter dig att göra 800 00:32:11,500 --> 00:32:12,980 flera saker samtidigt. 801 00:32:12,980 --> 00:32:16,240 Medan slingor verkar inte ha en stor mängd av värde bara 802 00:32:16,240 --> 00:32:18,500 ännu, eftersom det känns som om vi bara måste göra mer arbete. 803 00:32:18,500 --> 00:32:20,670 Vi måste sätta initieringen upp här, 804 00:32:20,670 --> 00:32:23,480 uppdatera här nere, och vi måste komma ihåg att göra allt detta. 805 00:32:23,480 --> 00:32:26,260 Så vi får se med tiden att medan slingor faktiskt låna 806 00:32:26,260 --> 00:32:29,380 sig bara olika sammanhang, olika data 807 00:32:29,380 --> 00:32:33,900 strukturer som listor och hashtabeller, saker vi kommer till 808 00:32:33,900 --> 00:32:34,970 mitten termin. 809 00:32:34,970 --> 00:32:37,900 Men nu, vet att det finns denna tredje typ som kallas en gör- 810 00:32:37,900 --> 00:32:38,480 while-slinga. 811 00:32:38,480 --> 00:32:39,540 Och vi har sett detta kort. 812 00:32:39,540 --> 00:32:41,830 Och detta kan vara super bra med pset 1. 813 00:32:41,830 --> 00:32:45,570 Varje gång du vill göra något och sedan kontrollera om 814 00:32:45,570 --> 00:32:48,940 användaren samarbetade, och om de inte gjorde det, göra det igen, en gör- 815 00:32:48,940 --> 00:32:51,460 medan slingan lämpar sig för denna typ av logik. 816 00:32:51,460 --> 00:32:55,640 För som beställning från toppen till botten här antyder, 817 00:32:55,640 --> 00:32:57,750 gör bokstavligen betyder gör detta. 818 00:32:57,750 --> 00:32:59,830 Och göra det om och om igen, vad kan det vara? 819 00:32:59,830 --> 00:33:03,000 Kanske det betyder att ringa getInt eller GetString och sedan 820 00:33:03,000 --> 00:33:05,830 kontrollera värdet av getInt eller GetString och sedan skrika 821 00:33:05,830 --> 00:33:08,260 på användaren om de inte har samarbetat genom att be dem 822 00:33:08,260 --> 00:33:10,100 igen och igen och igen. 823 00:33:10,100 --> 00:33:11,730 Där du vill göra något en gång, 824 00:33:11,730 --> 00:33:13,210 kontrollera sedan något villkor. 825 00:33:13,210 --> 00:33:14,110 >> Så låt oss prova det här. 826 00:33:14,110 --> 00:33:17,130 Låt mig faktiskt ändra detta nu till en gör-while-slinga. 827 00:33:17,130 --> 00:33:18,830 Och jag kommer att gå vidare och gör följande. 828 00:33:18,830 --> 00:33:21,830 Så gör följande. 829 00:33:21,830 --> 00:33:26,870 Låt oss göra int i = getInt (), men låt oss först tala om för användaren 830 00:33:26,870 --> 00:33:27,410 vad de ska göra. 831 00:33:27,410 --> 00:33:29,050 Så lite annorlunda den här gången. 832 00:33:29,050 --> 00:33:31,270 "Ge mig en int". 833 00:33:31,270 --> 00:33:32,910 Så jag kommer att använda printf för det. 834 00:33:32,910 --> 00:33:35,740 Och nu ska jag gå ner här, och jag kommer att göra detta 835 00:33:35,740 --> 00:33:41,520 medan jag är, låt oss säga, mer än - 836 00:33:41,520 --> 00:33:47,540 låt oss se, är jag, låt oss säga, mindre än 0, eller i är 837 00:33:47,540 --> 00:33:48,730 större än 10. 838 00:33:48,730 --> 00:33:51,810 Med andra ord, jag vill ha en siffra från 1 till 9 bara 839 00:33:51,810 --> 00:33:52,720 godtyckligt. 840 00:33:52,720 --> 00:33:55,290 Så jag använder en kombinerad booleskt uttryck här 841 00:33:55,290 --> 00:33:59,930 se till att i är mindre än 0 eller större än 10, i vilken 842 00:33:59,930 --> 00:34:02,530 fall jag kommer att göra denna slinga här igen. 843 00:34:02,530 --> 00:34:04,400 Så återigen, gör detta - 844 00:34:04,400 --> 00:34:08,480 medan i är mindre än 0 eller i är större än 10. 845 00:34:08,480 --> 00:34:11,440 >> Så låt oss nu gå vidare och göra det när vi har gjort det. 846 00:34:11,440 --> 00:34:13,270 Låt oss bara göra en snabb sanity check. 847 00:34:13,270 --> 00:34:18,929 printf ("Tack, är jag% d", i). 848 00:34:18,929 --> 00:34:21,350 Så denna enkla programmet frågar användaren för en int, 849 00:34:21,350 --> 00:34:24,000 gör att det är inom vissa intervall, 1 och 9, 850 00:34:24,000 --> 00:34:26,280 och sedan tackar användaren genom att påminna dem vad de bara 851 00:34:26,280 --> 00:34:27,940 skrivs in, precis som en liten sanity check. 852 00:34:27,940 --> 00:34:30,659 Men låt oss se om detta fungerar som det är tänkt. 853 00:34:30,659 --> 00:34:34,533 Låt mig gå head hit och köra göra slinga. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "Användning av odeklarerat identifierare" i "". Det är konstigt. 856 00:34:38,600 --> 00:34:41,509 Jag trodde att vi löst det. 857 00:34:45,489 --> 00:34:47,560 Samma symptom men olika kod. 858 00:34:47,560 --> 00:34:47,899 Ja? 859 00:34:47,899 --> 00:34:50,191 PUBLIK: [OHÖRBAR] inuti två, vi måste 860 00:34:50,191 --> 00:34:52,639 [OHÖRBAR]. 861 00:34:52,639 --> 00:34:53,260 >> David J. MALAN: Exakt. 862 00:34:53,260 --> 00:34:55,989 Så detta leder oss faktiskt till ett ämne som kallas omfattning. 863 00:34:55,989 --> 00:34:59,350 Det visar sig att C, återigen, det verkligen tar du bokstavligen. 864 00:34:59,350 --> 00:35:02,970 Och om du gör något liknande där du deklarerar en int 865 00:35:02,970 --> 00:35:06,120 och tilldela den ett visst värde, men du gör det inne i en 866 00:35:06,120 --> 00:35:09,840 par klammerparenteser, vad C gör det förutsätter att du 867 00:35:09,840 --> 00:35:14,800 bara vill de 32 bitar som kallas jag att existera inom 868 00:35:14,800 --> 00:35:18,200 samband med dessa klammerparenteser, inom ramen för linjer 869 00:35:18,200 --> 00:35:22,420 6 till 9. Så jag deklareras, och det är tilldelad en 870 00:35:22,420 --> 00:35:26,530 värde i linje 8, men så snart du får utanför 871 00:35:26,530 --> 00:35:30,270 linje 9 under klammerparentes är jag inte längre i 872 00:35:30,270 --> 00:35:31,910 omfattning, så att säga. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Det är inte längre i rätt sammanhang. 874 00:35:35,030 --> 00:35:37,940 Så nu finns det ingen i, så det är som om vi hade inte ens 875 00:35:37,940 --> 00:35:38,770 förklarade det alls. 876 00:35:38,770 --> 00:35:41,520 >> Så vad är en fix sedan för något sådant, om 877 00:35:41,520 --> 00:35:44,300 Anledningen är att jag har avgetts inom klammerparenteser, som 878 00:35:44,300 --> 00:35:45,120 är tydligen dåligt? 879 00:35:45,120 --> 00:35:45,410 Här? 880 00:35:45,410 --> 00:35:46,820 PUBLIK: [OHÖRBAR]. 881 00:35:46,820 --> 00:35:47,150 David J. MALAN: Ja. 882 00:35:47,150 --> 00:35:48,710 Så vi kan initiera det utanför. 883 00:35:48,710 --> 00:35:53,530 Så låt mig gå vidare och ta bort förklaringen delar varigenom 884 00:35:53,530 --> 00:35:55,820 Jag anger vilken typ, och låt mig göra det här. 885 00:35:55,820 --> 00:36:00,220 Så i linje 5, står det nu "Ge mig en int." Kalla det jag. 886 00:36:00,220 --> 00:36:03,400 Kallelse i linje 9, jag vill inte göra det här, eftersom jag 887 00:36:03,400 --> 00:36:04,830 redan har de 32 bitarna. 888 00:36:04,830 --> 00:36:06,140 Jag vill inte be datorn för en 889 00:36:06,140 --> 00:36:07,630 olika 32 bitar. 890 00:36:07,630 --> 00:36:09,850 Jag vill använda samma 32 bitar. 891 00:36:09,850 --> 00:36:13,190 Och nu eftersom jag är deklarerad på rad 5, det är fortfarande legit 892 00:36:13,190 --> 00:36:16,550 att använda den i ledningen 11 och ledningen 12. 893 00:36:16,550 --> 00:36:19,310 >> Så låt mig försöka kompilera detta och se 894 00:36:19,310 --> 00:36:20,490 Om klang slutar skrika. 895 00:36:20,490 --> 00:36:22,380 göra slinga. 896 00:36:22,380 --> 00:36:25,470 Så nu är det "implicit deklaration av funktionen 897 00:36:25,470 --> 00:36:29,880 "GetInt" är ogiltigt i C99. "Vad är det? 898 00:36:29,880 --> 00:36:30,400 Ja? 899 00:36:30,400 --> 00:36:32,330 PUBLIK: [OHÖRBAR]. 900 00:36:32,330 --> 00:36:32,690 David J. MALAN: Ja. 901 00:36:32,690 --> 00:36:35,520 Så nu att jag faktiskt är med getInt, är detta inte något 902 00:36:35,520 --> 00:36:38,190 som kommer bara med C. Detta kommer från CS50. 903 00:36:38,190 --> 00:36:39,890 Så vi behöver det här. 904 00:36:39,890 --> 00:36:41,450 Och låt mig gå tillbaka till prompten ner 905 00:36:41,450 --> 00:36:43,500 här och köra göra. 906 00:36:43,500 --> 00:36:44,160 Okej, äntligen. 907 00:36:44,160 --> 00:36:46,270 Nu har vi löst det och det andra felet. 908 00:36:46,270 --> 00:36:48,930 Låt mig nu kör slingan och se vad som händer. 909 00:36:48,930 --> 00:36:51,740 "Ge mig en int." Jag ska ge det 11. 910 00:36:51,740 --> 00:36:53,100 Jag ska ge det -1. 911 00:36:53,100 --> 00:36:54,470 Jag ska ge det foo. 912 00:36:54,470 --> 00:36:56,080 Jag ska ge det 5. 913 00:36:56,080 --> 00:36:57,450 Och nu fungerar faktiskt. 914 00:36:57,450 --> 00:36:59,410 Men prompten ändras för en anledning här. 915 00:36:59,410 --> 00:37:02,800 Varför stod det försök en av dessa gånger men ge mig en 916 00:37:02,800 --> 00:37:03,920 int de övriga tre gånger? 917 00:37:03,920 --> 00:37:05,500 Varför är det beteende annorlunda? 918 00:37:05,500 --> 00:37:06,980 PUBLIK: Gav det en sträng. 919 00:37:06,980 --> 00:37:07,830 David J. MALAN: Ursäkta? 920 00:37:07,830 --> 00:37:08,570 Målgrupp: Du gav det en sträng. 921 00:37:08,570 --> 00:37:08,990 David J. MALAN: Ja. 922 00:37:08,990 --> 00:37:11,450 Så vi gav det en sträng i tredje försöket, 923 00:37:11,450 --> 00:37:12,490 när jag skrev foo. 924 00:37:12,490 --> 00:37:13,200 Foo är en sträng. 925 00:37:13,200 --> 00:37:14,340 Det är naturligtvis inte en int. 926 00:37:14,340 --> 00:37:17,500 Och sättet att CS50 har genomfört getInt är att vi 927 00:37:17,500 --> 00:37:20,330 kollar inte om något är mindre än 0 eller större än 10 928 00:37:20,330 --> 00:37:22,260 för er, för hur vet vi i förväg vilken typ av 929 00:37:22,260 --> 00:37:23,130 int du vill ha? 930 00:37:23,130 --> 00:37:25,880 Men vi kan minimalt kontrollera dig, gjorde användaren åtminstone 931 00:37:25,880 --> 00:37:26,730 Skriv ett heltal? 932 00:37:26,730 --> 00:37:30,500 Och om de inte gjorde det, skrika vi på användaren genom att skriva "retry" på 933 00:37:30,500 --> 00:37:31,440 skärmen. 934 00:37:31,440 --> 00:37:34,210 >> Så nu har vi ett program som är looping. Okej. 935 00:37:34,210 --> 00:37:37,070 Nu är vilka av dessa slags bättre konstruktionen? 936 00:37:37,070 --> 00:37:39,060 Så det är här det börjar bli lite rörigt, det 937 00:37:39,060 --> 00:37:42,360 faktum att du måste komma ihåg att deklarera en variabel upp här 938 00:37:42,360 --> 00:37:44,630 Om du vill använda den i vissa 939 00:37:44,630 --> 00:37:46,460 klammerparenteser och utanför. 940 00:37:46,460 --> 00:37:48,490 Men även om det ser lite kryptiskt vid första 941 00:37:48,490 --> 00:37:50,750 blick, bara en gång, kom ihåg den enkla logik. 942 00:37:50,750 --> 00:37:54,630 För att kunna använda något i C, om det är en funktion eller 943 00:37:54,630 --> 00:37:57,680 Det är en variabel, måste du inkludera den om det är en funktion 944 00:37:57,680 --> 00:37:59,770 i någon bibliotek, eller om du behöver förklara den. 945 00:37:59,770 --> 00:38:02,405 Men nu måste du vara extra uppmärksam på det faktum att 946 00:38:02,405 --> 00:38:04,940 du förklara det på rätt omfattning. 947 00:38:04,940 --> 00:38:08,150 Du är inte att sätta det för hårt inuti parenteser. 948 00:38:08,150 --> 00:38:09,410 >> Så låt mig faktiskt rulla tillbaka. 949 00:38:09,410 --> 00:38:12,660 Om vi ​​går tillbaka till vår exempel från tidigare, och jag går 950 00:38:12,660 --> 00:38:19,245 tillbaka till för int, int i = 0; i <10, i + +, och jag 951 00:38:19,245 --> 00:38:26,370 göra printf stjärnor, så här, och stäng sedan Paren, och nu 952 00:38:26,370 --> 00:38:30,410 printf i är nu - 953 00:38:30,410 --> 00:38:33,500 enligt samma logik, vad kommer att hända när jag försöker 954 00:38:33,500 --> 00:38:35,500 sammanställa detta program? 955 00:38:35,500 --> 00:38:36,790 Publiken: Ogiltig identifierare. 956 00:38:36,790 --> 00:38:38,560 David J. MALAN: Så det är en annan ogiltig identifierare, 957 00:38:38,560 --> 00:38:39,470 odeklarerat identifierare. 958 00:38:39,470 --> 00:38:41,810 Nu är anledningen lite annorlunda. 959 00:38:41,810 --> 00:38:44,370 Det finns uppenbarligen ingen klammerparenteser här, men samma 960 00:38:44,370 --> 00:38:46,790 idé, gäller samma historia omfattning. 961 00:38:46,790 --> 00:38:50,340 Om du har deklarerat en variabel som jag inne i en 962 00:38:50,340 --> 00:38:53,960 for-slingan, även om du inte uttryckligen skrivit lockigt 963 00:38:53,960 --> 00:38:56,980 hängslen, tänk på dem mentalt fortfarande är där, där 964 00:38:56,980 --> 00:39:00,310 fall jag är endast giltig inuti for-slingan. 965 00:39:00,310 --> 00:39:03,080 Det är inte giltigt när du kommer till nästa rad, som i 966 00:39:03,080 --> 00:39:05,090 detta fall är nu 10. 967 00:39:05,090 --> 00:39:09,060 Så några frågor om omfattning och liknande. 968 00:39:09,060 --> 00:39:12,620 Okej, några frågor? 969 00:39:12,620 --> 00:39:15,310 >> Okej, så detta är typ av en trivial litet program, 970 00:39:15,310 --> 00:39:17,450 skriva bara små stjärnor. 971 00:39:17,450 --> 00:39:20,400 Men låt oss se om du kommer ihåg den här låten här. 972 00:39:20,400 --> 00:39:22,530 Detta är en otroligt irriterande låt barnen skulle sjunga på 973 00:39:22,530 --> 00:39:23,550 skolbussen och liknande. 974 00:39:23,550 --> 00:39:25,990 Men vad är trevligt om det är att det har denna Konjunkturberoende, 975 00:39:25,990 --> 00:39:27,910 varigenom det är "99 flaskor öl på väggen, 976 00:39:27,910 --> 00:39:28,520 99 flaskor öl. 977 00:39:28,520 --> 00:39:31,030 Ta en ner, passera runt, 98 flaskor öl på 978 00:39:31,030 --> 00:39:34,330 vägg. "Och sedan sången upprepar 97, sedan 96, sedan 979 00:39:34,330 --> 00:39:38,040 95, därefter 94, hela vägen ner till 0 om du verkligen fick det 980 00:39:38,040 --> 00:39:38,920 långt på bussen. 981 00:39:38,920 --> 00:39:41,960 Så detta är ett trevligt program för att sortera om redskapet, eftersom min 982 00:39:41,960 --> 00:39:43,650 Gud, om du bara kunde genomföra detta med några 983 00:39:43,650 --> 00:39:46,660 rader kod, kan du spotta ut hela texterna till denna 984 00:39:46,660 --> 00:39:48,240 låt ganska snabbt. 985 00:39:48,240 --> 00:39:50,420 Men längs vägen, kan vi börja nu retas isär några 986 00:39:50,420 --> 00:39:52,460 av dessa grundläggande looping konstruktioner och nu även 987 00:39:52,460 --> 00:39:55,830 införa funktioner som vi skriver själva, returnera värden 988 00:39:55,830 --> 00:39:57,020 vi passerar runt. 989 00:39:57,020 --> 00:39:58,910 Men först, varför inte vi gå vidare och ta våra fem minuter 990 00:39:58,910 --> 00:39:59,320 bryta här? 991 00:39:59,320 --> 00:40:01,480 Och när vi kommer tillbaka, kommer vi sjunga den här låten. 992 00:40:05,680 --> 00:40:08,760 >> Okej, så vi är tillbaka. 993 00:40:08,760 --> 00:40:11,850 Och när jag säger att vi nu kommer att sjunga den här låten, jag menar 994 00:40:11,850 --> 00:40:13,250 programmatiskt, inte verbalt. 995 00:40:13,250 --> 00:40:19,370 Så här har vi beer1.c, vilket är en implementering av detta 996 00:40:19,370 --> 00:40:20,580 viss låt. 997 00:40:20,580 --> 00:40:23,110 Och bara för att vara tydlig, för dem obekanta med vad 998 00:40:23,110 --> 00:40:24,460 denna sak ser ut, låt mig gå vidare 999 00:40:24,460 --> 00:40:27,070 och göra beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Låt mig springa beer1, och vad vi får se - hur många flaskor 1001 00:40:30,400 --> 00:40:31,140 öl blir det? 1002 00:40:31,140 --> 00:40:33,240 Jag skriver under 99, liksom sången säger. 1003 00:40:33,240 --> 00:40:34,040 Enter. 1004 00:40:34,040 --> 00:40:35,650 Och nu när vi bläddrar igenom - 1005 00:40:35,650 --> 00:40:38,280 oops - om vi bläddrar igenom allt detta kommer vi se att 1006 00:40:38,280 --> 00:40:41,350 detta har faktiskt sjunga hela låten. 1007 00:40:44,050 --> 00:40:44,540 Vänta lite. 1008 00:40:44,540 --> 00:40:46,240 Min rullningslisten är lite trasslat till. 1009 00:40:46,240 --> 00:40:47,940 Låt oss använda större fönstret. 1010 00:40:47,940 --> 00:40:53,500 Så beer1, 99, där vi går. 1011 00:40:53,500 --> 00:40:56,420 Så här har vi hela låten, sjungit mycket snabbare med 1012 00:40:56,420 --> 00:40:58,450 dator än den kunde ha varit av oss. 1013 00:40:58,450 --> 00:41:00,340 Så märker dock den cykliska naturen här. 1014 00:41:00,340 --> 00:41:03,380 Det säger 99, sedan 99, sedan "ta en ner, passera den 1015 00:41:03,380 --> 00:41:04,740 runt "och sedan 98. 1016 00:41:04,740 --> 00:41:06,640 Och nu upprepar om och om igen. 1017 00:41:06,640 --> 00:41:08,840 >> Så detta är faktiskt ett perfekt tillfälle för någon form av 1018 00:41:08,840 --> 00:41:10,400 looping konstruera. 1019 00:41:10,400 --> 00:41:12,950 Observera att jag är typ att skära ett hörn här. 1020 00:41:12,950 --> 00:41:15,960 Observera att jag säger "98 flaskor öl på väggen, 1021 00:41:15,960 --> 00:41:19,010 97 flaskor öl på väggen, "och det var bara så 1022 00:41:19,010 --> 00:41:21,640 att när vi kommer till en flaskor öl, jag har inte 1023 00:41:21,640 --> 00:41:23,300 att oroa sig för engelsk grammatik. 1024 00:41:23,300 --> 00:41:25,790 Men vi kan också fixa detta med en liten bit av en om 1025 00:41:25,790 --> 00:41:26,910 tillstånd, kanske. 1026 00:41:26,910 --> 00:41:30,110 Om detta antal är singularis, gå vidare och säga "flaska", 1027 00:41:30,110 --> 00:41:31,840 annars om det är plural, säger "flaskor". 1028 00:41:31,840 --> 00:41:34,150 Men för nu, jag skär helt det hörnet. 1029 00:41:34,150 --> 00:41:35,520 Så låt oss se vad vi har här. 1030 00:41:35,520 --> 00:41:37,150 Så vi har fått några kommentarer i toppen. 1031 00:41:37,150 --> 00:41:39,450 Jag inklusive dessa två bibliotek, som 1032 00:41:39,450 --> 00:41:41,140 Vi har ofta varit. 1033 00:41:41,140 --> 00:41:43,610 Och låt mig nu bläddra ner till den första 1034 00:41:43,610 --> 00:41:44,990 faktiska kodrader. 1035 00:41:44,990 --> 00:41:47,020 Linje 17 startar viktigaste. 1036 00:41:47,020 --> 00:41:50,610 Linje 21 och 20 har hur många flaskor öl kommer det att finnas? 1037 00:41:50,610 --> 00:41:52,060 Och då kallar jag getInt. 1038 00:41:52,060 --> 00:41:53,800 Och nu har jag lite av en sanity check. 1039 00:41:53,800 --> 00:41:57,030 >> Så detta är en konvention som vi nu börjar anta att 1040 00:41:57,030 --> 00:41:59,620 mer rigoröst kontrollera användarens input. 1041 00:41:59,620 --> 00:42:01,710 Ibland kan du bara inte vill få dem igen 1042 00:42:01,710 --> 00:42:02,630 och igen och igen. 1043 00:42:02,630 --> 00:42:05,620 Om användaren skruvar upp och inte samarbetar bra. 1044 00:42:05,620 --> 00:42:07,430 Avsluta och bara inte ta itu med dem. 1045 00:42:07,430 --> 00:42:08,990 Och så det är vad jag gör här. 1046 00:42:08,990 --> 00:42:12,520 Om n är mindre än 1, jag ska bara skrika på användaren, 1047 00:42:12,520 --> 00:42:14,330 "Tyvärr, gör att ingen mening." Och då ska jag 1048 00:42:14,330 --> 00:42:16,650 godtyckligt tillbaka 1. 1049 00:42:16,650 --> 00:42:18,550 Så återigen, detta är bara en konvention att vänja sig. 1050 00:42:18,550 --> 00:42:19,850 För nu, ta det på tro. 1051 00:42:19,850 --> 00:42:22,700 Men fram till nu har vi alltid varit tillbaka 0, eftersom 1052 00:42:22,700 --> 00:42:25,204 Vi har sagt återvänder 0 betecknar vad? 1053 00:42:25,204 --> 00:42:26,000 Publiken: framgång. 1054 00:42:26,000 --> 00:42:27,320 David J. MALAN: Framgång, det är allt. 1055 00:42:27,320 --> 00:42:29,740 Så nu när vi äntligen har börjat tänka på 1056 00:42:29,740 --> 00:42:31,330 icke-framgångar - 1057 00:42:31,330 --> 00:42:33,760 med andra ord, fall hörn, feltillstånd - 1058 00:42:33,760 --> 00:42:37,520 nu har jag ett oändligt utbud, eller åtminstone 4 miljarder 1059 00:42:37,520 --> 00:42:39,790 möjliga saker som kan gå fel i mina program. 1060 00:42:39,790 --> 00:42:42,300 Och jag kan börja ge dem individuella nummer. 1061 00:42:42,300 --> 00:42:44,340 Nu, i allmänhet räcker det att bara återvända 1062 00:42:44,340 --> 00:42:45,730 något annat än 0. 1063 00:42:45,730 --> 00:42:48,040 Så vi ska bara tillbaka 1 för nu. 1064 00:42:48,040 --> 00:42:51,440 Men anledningen för återvändande 1 är att så fort du återvänder 1065 00:42:51,440 --> 00:42:55,110 1, gissa vad som händer med resten av programmet? 1066 00:42:55,110 --> 00:42:55,720 Den stannar. 1067 00:42:55,720 --> 00:42:56,560 Det var allt. 1068 00:42:56,560 --> 00:42:59,150 Så det faktum att jag återvänder 1 är effektivt 1069 00:42:59,150 --> 00:43:02,950 kortsluter detta program avrättning så 1070 00:43:02,950 --> 00:43:06,780 ingenting under linjen 27 fortsätter köra. 1071 00:43:06,780 --> 00:43:09,210 Så snart huvudsakliga avkastning, är det det. 1072 00:43:09,210 --> 00:43:13,160 >> Okej, så om användaren gör samarbeta och vi når linjen 30 1073 00:43:13,160 --> 00:43:15,680 eftersom de skriver i en legitim nummer, här är min 1074 00:43:15,680 --> 00:43:16,990 genomförandet av den här låten. 1075 00:43:16,990 --> 00:43:19,050 Så jag skriva först ut ett nyradstecken, bara för 1076 00:43:19,050 --> 00:43:19,880 estetik. 1077 00:43:19,880 --> 00:43:21,500 Jag har nu en for-slinga. 1078 00:43:21,500 --> 00:43:22,930 Och märker att jag gör saker i lite 1079 00:43:22,930 --> 00:43:23,880 av en annan riktning. 1080 00:43:23,880 --> 00:43:26,210 Jag behöver inte göra mindre än, jag har inte att göra + +. 1081 00:43:26,210 --> 00:43:30,660 Jag kan istället säga initiera en variabel i, ställa in den lika med 1082 00:43:30,660 --> 00:43:35,080 n, antalet användaren har skrivit in, gör följande, så 1083 00:43:35,080 --> 00:43:39,590 länge jag är större än 0, då jag - 1084 00:43:39,590 --> 00:43:42,070 när du är klar en variant av denna slinga. 1085 00:43:42,070 --> 00:43:44,310 Så vi kan räkna ner med hjälp av en for-slinga också. 1086 00:43:44,310 --> 00:43:47,520 Nu är det ganska mycket veckan en grejer nu, med printf. 1087 00:43:47,520 --> 00:43:51,770 Så ut "% d flaskor öl på väggen." Print "% d 1088 00:43:51,770 --> 00:43:54,990 flaskor öl. "" Ta en ner, skicka runt. "Skriv ut 1089 00:43:54,990 --> 00:43:58,880 "% D flaskor öl på väggen." Så det är fortfarande% d, men 1090 00:43:58,880 --> 00:44:02,770 märker att argumentet printf till förändras. 1091 00:44:02,770 --> 00:44:05,840 Efter kommatecknet, jag har jag, för att jag vill säga 99. 1092 00:44:05,840 --> 00:44:08,590 Efter denna kommatecken, jag har jag, för att jag vill säga 99. 1093 00:44:08,590 --> 00:44:14,030 Efter denna kommatecken, jag har i - 1, för jag vill säga 98 i 1094 00:44:14,030 --> 00:44:16,260 denna första iteration, och så vidare. 1095 00:44:16,260 --> 00:44:18,520 Och nu här nere, jag har bara några dumma lilla anmärkning. 1096 00:44:18,520 --> 00:44:22,270 Och sedan linjen 42, återvänder jag 0 av konvention, vilket innebär att 1097 00:44:22,270 --> 00:44:23,650 allt är okej. 1098 00:44:23,650 --> 00:44:24,490 >> Så vad händer om jag goofed? 1099 00:44:24,490 --> 00:44:26,350 Vad kan ett vanligt misstag här vara? 1100 00:44:26,350 --> 00:44:29,200 Tja, tänk om jag av misstag sagt ja, jag vill räkna 1101 00:44:29,200 --> 00:44:31,640 ner till 0, jag vill 0 flaskor öl på väggen? 1102 00:44:31,640 --> 00:44:34,620 Så jag säger, jag är större än eller lika med 0. 1103 00:44:34,620 --> 00:44:38,920 Vad kommer att bli det symptom som jag nu se om jag kompilerar 1104 00:44:38,920 --> 00:44:41,173 beer1 och kör den? 1105 00:44:41,173 --> 00:44:42,120 Publiken: Negativ. 1106 00:44:42,120 --> 00:44:43,590 David J. MALAN: Ja, det kommer gå negativt. 1107 00:44:43,590 --> 00:44:45,950 Detta är en off-för-ett fel, en otroligt 1108 00:44:45,950 --> 00:44:47,270 vanligt misstag att göra. 1109 00:44:47,270 --> 00:44:48,960 Vi går faktiskt tillbaka till terminalfönster och göra det 1110 00:44:48,960 --> 00:44:50,620 här, så att vi kan se mer på en gång. 1111 00:44:50,620 --> 00:44:53,280 Enter, 99 flaskor öl. 1112 00:44:53,280 --> 00:44:56,580 Nära, men vi gick aldrig så lite för långt. 1113 00:44:56,580 --> 00:45:00,500 Vi sjöng sången för långt ner, så att vi nu träffar 1114 00:45:00,500 --> 00:45:01,510 negativt tal. 1115 00:45:01,510 --> 00:45:03,680 Så det fungerar inte riktigt. 1116 00:45:03,680 --> 00:45:06,450 >> Okej, så vi kan lätt fixa det genom att gå tillbaka till 1117 00:45:06,450 --> 00:45:07,650 hur det var en gång. 1118 00:45:07,650 --> 00:45:10,360 Men vad är några möjligheter nu 1119 00:45:10,360 --> 00:45:11,190 förbättring? 1120 00:45:11,190 --> 00:45:17,200 Nåväl, låt mig öppna beer2.c och rulla ner hit och ta en 1121 00:45:17,200 --> 00:45:19,310 titta på denna version. 1122 00:45:19,310 --> 00:45:21,370 Vad är det första som hoppar ut på dig som olika 1123 00:45:21,370 --> 00:45:23,715 i denna version här? 1124 00:45:23,715 --> 00:45:24,190 PUBLIK: [OHÖRBAR]. 1125 00:45:24,190 --> 00:45:26,510 David J. MALAN: Ja, så ingen mer jag, eftersom det förekommit att 1126 00:45:26,510 --> 00:45:29,350 mig att du vet vad, jag ber användaren för n, och så är jag 1127 00:45:29,350 --> 00:45:33,580 inställning i lika med n, och sedan jag ändra i, men jag är aldrig 1128 00:45:33,580 --> 00:45:34,590 vidrör n igen. 1129 00:45:34,590 --> 00:45:37,390 Så vad sjutton var poängen med er fördela ytterligare 32 1130 00:45:37,390 --> 00:45:45,210 bitar kallade jag bara så att jag kan ha en annan variabel? 1131 00:45:45,210 --> 00:45:47,960 Så i det här fallet, jag slags insett att onödiga 1132 00:45:47,960 --> 00:45:49,190 designelement. 1133 00:45:49,190 --> 00:45:52,730 Och jag kommer nu att säga när n är större än 0, gå 1134 00:45:52,730 --> 00:45:56,180 framåt och skriva samma låt, passerar en n till printf som 1135 00:45:56,180 --> 00:46:00,210 andra argumentet, och n - 1 som det andra argumentet här nere. 1136 00:46:00,210 --> 00:46:02,930 Och sedan på varje iteration av denna slinga, gå vidare och bara 1137 00:46:02,930 --> 00:46:05,080 dekrementera n själv. 1138 00:46:05,080 --> 00:46:06,960 Nu funktionellt, det här programmet 1139 00:46:06,960 --> 00:46:08,010 kommer att vara identiska. 1140 00:46:08,010 --> 00:46:10,730 Om jag skriver under 99, börjar n vid 99. 1141 00:46:10,730 --> 00:46:12,890 Jag förminskningsvärde minskning, minskning, minskning. 1142 00:46:12,890 --> 00:46:15,875 Jag kommer att få hela vägen ner till "En flaska öl på 1143 00:46:15,875 --> 00:46:16,740 väggen, en flaska öl. 1144 00:46:16,740 --> 00:46:18,020 Ta en ner, skicka runt. 1145 00:46:18,020 --> 00:46:21,480 0 flaskor öl på väggen. "Slutet, eftersom jag gjorde 1146 00:46:21,480 --> 00:46:23,200 få tillståndet korrekt. 1147 00:46:23,200 --> 00:46:24,280 Det är större än 0. 1148 00:46:24,280 --> 00:46:26,220 Jag gjorde inte detta misstag. 1149 00:46:26,220 --> 00:46:28,470 >> Så vilket är bättre, version ett eller version två? 1150 00:46:31,380 --> 00:46:33,480 Jag hörde en massa knot för två. 1151 00:46:33,480 --> 00:46:34,730 Varför två? 1152 00:46:37,210 --> 00:46:38,225 Vad är det? 1153 00:46:38,225 --> 00:46:39,215 PUBLIK: [OHÖRBAR]. 1154 00:46:39,215 --> 00:46:40,070 David J. MALAN: Åh, okej. 1155 00:46:40,070 --> 00:46:42,870 Så det kommer inte att gå under 0, men kom ihåg, i version ett, 1156 00:46:42,870 --> 00:46:45,870 ursprungliga rätt version inte gå under 0 heller. 1157 00:46:45,870 --> 00:46:48,340 Så kom ihåg att detta är rätt version. 1158 00:46:48,340 --> 00:46:51,630 Så låt oss åtminstone jämföra de två rätt versioner. 1159 00:46:51,630 --> 00:46:53,300 Vad är ett argument till förmån för version 1160 00:46:53,300 --> 00:46:55,146 två är, mmm, bättre? 1161 00:46:55,146 --> 00:46:55,642 Ja? 1162 00:46:55,642 --> 00:46:57,630 Målgrupp: Den använder mindre utrymme. 1163 00:46:57,630 --> 00:46:59,530 David J. MALAN: Okej, så det tar mindre plats, eller hur? 1164 00:46:59,530 --> 00:47:02,900 Medan version som används 32 bitar för N, och sedan en annan 1165 00:47:02,900 --> 00:47:07,680 32 bitar för jag. 1166 00:47:07,680 --> 00:47:10,060 Version två bara använder 32 bitar för n, så att 1167 00:47:10,060 --> 00:47:11,700 verkar vara ett plus. 1168 00:47:11,700 --> 00:47:12,950 Andra tankar? 1169 00:47:18,070 --> 00:47:21,520 Vill någon att argumentera för en? 1170 00:47:21,520 --> 00:47:22,070 Ja? 1171 00:47:22,070 --> 00:47:25,240 Målgrupp: Du måste använda extra kodrad för n -. 1172 00:47:25,240 --> 00:47:26,090 >> David J. MALAN: Okej, visst. 1173 00:47:26,090 --> 00:47:26,960 Så det är rättvist. 1174 00:47:26,960 --> 00:47:29,040 Så det här bara, åtminstone för mig - 1175 00:47:29,040 --> 00:47:31,940 Jag menar, det känns faktiskt lite stökigare, det faktum att 1176 00:47:31,940 --> 00:47:35,120 Jag kan inte sortera om inkapslar alla mina logik i en 1177 00:47:35,120 --> 00:47:38,030 vacker linje, for-slingan, som for-slingan kan. 1178 00:47:38,030 --> 00:47:40,240 Här har jag slags måste tack på detta n - 1179 00:47:40,240 --> 00:47:41,120 vid slutet av slingan, eftersom 1180 00:47:41,120 --> 00:47:42,550 Det är logiskt nödvändigt. 1181 00:47:42,550 --> 00:47:45,190 Men det slags gnuggar mig på fel sätt, bara för att det 1182 00:47:45,190 --> 00:47:48,260 verkar separat från logik här uppe, även om 1183 00:47:48,260 --> 00:47:49,430 igen, det är nödvändigt. 1184 00:47:49,430 --> 00:47:50,990 Andra tankar? 1185 00:47:50,990 --> 00:47:51,490 Ja? 1186 00:47:51,490 --> 00:47:52,740 PUBLIK: [OHÖRBAR]. 1187 00:47:57,990 --> 00:47:58,350 >> David J. MALAN: Ja. 1188 00:47:58,350 --> 00:48:00,730 Så vad händer om du istället i slutet av låten, ville 1189 00:48:00,730 --> 00:48:02,950 skriva ut igen namnet på låten? 1190 00:48:02,950 --> 00:48:05,660 Som "Tack för att spela 99 flaskor öl", eller något 1191 00:48:05,660 --> 00:48:06,690 dumt som det? 1192 00:48:06,690 --> 00:48:09,750 Men poängen är, ville du tillgång till det ursprungliga värdet. 1193 00:48:09,750 --> 00:48:13,180 Det faktum att du har muterat eller ändrade n på varje 1194 00:48:13,180 --> 00:48:16,330 iteration och därför har förstört sitt ursprungliga värde 1195 00:48:16,330 --> 00:48:18,650 innebär att du bara inte kan göra det på slutet. 1196 00:48:18,650 --> 00:48:20,660 Nu, utan tvekan, vi uppenbarligen inte vill göra 1197 00:48:20,660 --> 00:48:21,450 att i detta program. 1198 00:48:21,450 --> 00:48:22,350 Så vem bryr sig? 1199 00:48:22,350 --> 00:48:23,630 Men det är en mycket bra plats. 1200 00:48:23,630 --> 00:48:25,520 Och för att vara ärlig, det är verkligen ingen 1201 00:48:25,520 --> 00:48:26,630 rätt svar här. 1202 00:48:26,630 --> 00:48:28,740 De är båda lika rätt. 1203 00:48:28,740 --> 00:48:30,210 Jag kunde övertygas båda hållen. 1204 00:48:30,210 --> 00:48:33,310 Jag kommer att säga att i allmänhet är det en bra princip om man 1205 00:48:33,310 --> 00:48:36,030 frågade användaren något värde och du lagrat i en variabel 1206 00:48:36,030 --> 00:48:38,730 såsom N, bara typ av principiellt, är det förmodligen bra 1207 00:48:38,730 --> 00:48:40,160 att hålla den runt. 1208 00:48:40,160 --> 00:48:43,400 Och alla data som du vill att mutera och om igen, bara 1209 00:48:43,400 --> 00:48:46,030 ge dig själv en kopia av den variabeln, bara så att du 1210 00:48:46,030 --> 00:48:47,830 har tillgång till den ursprungliga. 1211 00:48:47,830 --> 00:48:51,040 Du spenderar 32 fler bitar, men verkligheten är detta 1212 00:48:51,040 --> 00:48:53,490 datorn har liknande, två gigabyte RAM dessa dagar, 1213 00:48:53,490 --> 00:48:55,310 och vi hårklyverier över 32 bitar? 1214 00:48:55,310 --> 00:48:56,320 Verkligen inte en så stor sak. 1215 00:48:56,320 --> 00:48:58,550 Och även på den här enheten här, med en halv en spelning eller en 1216 00:48:58,550 --> 00:49:01,700 gigabyte RAM, 32 bitar kontra 64 bitar, 1217 00:49:01,700 --> 00:49:02,920 inte så stor roll. 1218 00:49:02,920 --> 00:49:05,890 Visst idag, det kommer att bli så överväldigad av storleken 1219 00:49:05,890 --> 00:49:08,400 av själva programmet, vilket kommer att bli flera hundra 1220 00:49:08,400 --> 00:49:10,890 kilobyte, om inte några megabyte, dessa dagar. 1221 00:49:10,890 --> 00:49:13,550 >> Så rimliga oro, ingen rätt svar. 1222 00:49:13,550 --> 00:49:15,490 Men åtminstone det är de tankar som ska börja 1223 00:49:15,490 --> 00:49:16,790 gå igenom ditt sinne? 1224 00:49:16,790 --> 00:49:19,600 För i pset 0, trots att vi egentligen bara väntat 1225 00:49:19,600 --> 00:49:22,340 korrekthet, eller åtminstone avstå olika buggar som 1226 00:49:22,340 --> 00:49:25,440 du kanske har stött på, när vi går framåt, är designen 1227 00:49:25,440 --> 00:49:27,910 kommer att vara en annan viktig aspekt, både att skriva kod 1228 00:49:27,910 --> 00:49:29,770 och även vår utvärdering kod. 1229 00:49:29,770 --> 00:49:32,310 Och så åtminstone ge tros sånt här. 1230 00:49:32,310 --> 00:49:35,590 Och bara för att något fungerar betyder inte att det är bra, 1231 00:49:35,590 --> 00:49:37,130 betyder inte att det är väl utformat. 1232 00:49:37,130 --> 00:49:38,820 Och det är en av de saker de pedagogiska kamrater och 1233 00:49:38,820 --> 00:49:41,990 problem uppsättningar kommer att hjälpa oss retas del över tiden. 1234 00:49:41,990 --> 00:49:45,020 >> Nå, hur är det med, låt oss säga, denna version här? 1235 00:49:45,020 --> 00:49:49,090 Låt mig göra något lite sexigt här på ett ögonblick. 1236 00:49:49,090 --> 00:49:50,740 Låt mig först bli av med detta. 1237 00:49:50,740 --> 00:49:54,120 Och nu ska vi fixa det här grammatiska problem. 1238 00:49:54,120 --> 00:49:58,780 Så i den här versionen, jag vill fixa grammatik så att, 1239 00:49:58,780 --> 00:50:02,460 snarare än bara säga parentes s, som "flaska" 1240 00:50:02,460 --> 00:50:03,360 eller "flaskor" - 1241 00:50:03,360 --> 00:50:04,900 Jag vill inte klippa det hörnet - 1242 00:50:04,900 --> 00:50:08,350 Jag vill också dynamiskt skriva ut ordet "flaskor" 1243 00:50:08,350 --> 00:50:12,820 eller "flaska", vilket med hjälp av dessa% s platshållare idag. 1244 00:50:12,820 --> 00:50:16,550 Så jag behöver villkorligt kolla vad är värdet av jag. 1245 00:50:16,550 --> 00:50:19,590 Och om det är 1, vill jag säga "flaska", och om det är något 1246 00:50:19,590 --> 00:50:23,115 annars vill jag säga "flaskor". Så låt oss försöka att göra detta. 1247 00:50:23,115 --> 00:50:31,340 Så om jag == 1, låt mig gå vidare och förklara - 1248 00:50:31,340 --> 00:50:34,080 Jag behöver en sträng, så låt mig göra string s1, eftersom det är 1249 00:50:34,080 --> 00:50:36,070 första strängen jag bryr mig om just nu. 1250 00:50:36,070 --> 00:50:40,980 Jag kommer att säga "flaska". Och sedan ska vi se, sträng 1251 00:50:40,980 --> 00:50:43,110 s2 - och jag ska förklara vart jag ska om en stund - 1252 00:50:43,110 --> 00:50:47,650 "Flaskor". Så erinra om att i den här låten, vi behöver kunna 1253 00:50:47,650 --> 00:50:50,580 för att skriva ut saker, två olika ord potentiellt. 1254 00:50:50,580 --> 00:50:53,590 Så om vi ser tillbaka, märker att när vi kommer till 1255 00:50:53,590 --> 00:50:56,440 detta exempel här "två flaskor öl på väggen, 1256 00:50:56,440 --> 00:50:59,490 två flaskor öl, ta en ner, passera runt ", jag vill ha 1257 00:50:59,490 --> 00:51:02,380 denna fjärde raden att nu säga "en flaska öl på 1258 00:51:02,380 --> 00:51:04,900 vägg ". Jag måste bestämma, jag vill säga" flaskor "eller 1259 00:51:04,900 --> 00:51:07,780 "Flaska"? Så jag ska godtyckligt säga, okej, 1260 00:51:07,780 --> 00:51:10,530 Jag ska nu förklara en variabel som heter S1, sträng 1261 00:51:10,530 --> 00:51:13,830 en, det är kommer att få inkopplad här och även här, 1262 00:51:13,830 --> 00:51:16,070 eftersom dessa ord är alltid identiska, bara på grund av den 1263 00:51:16,070 --> 00:51:17,290 natur låten. 1264 00:51:17,290 --> 00:51:20,100 Och jag kommer att kalla s2 vad ord vill jag 1265 00:51:20,100 --> 00:51:21,560 småningom synas här nere. 1266 00:51:21,560 --> 00:51:25,530 Nu, bokstavligen, 99 gånger av 100, det kommer att vara 1267 00:51:25,530 --> 00:51:28,820 samma i båda dessa fall, eftersom 3 är plural, är 2 1268 00:51:28,820 --> 00:51:30,200 plural, är 4 plural. 1269 00:51:30,200 --> 00:51:34,640 Men i detta hörn fall, där vi får 2 och sedan 1, eller 1270 00:51:34,640 --> 00:51:37,250 även 1 och sedan 0, jag behöver denna logik. 1271 00:51:37,250 --> 00:51:41,020 Så jag har att spendera lite tid i min kod få denna rätt. 1272 00:51:41,020 --> 00:51:47,530 Så om jag gör det, om jag == 1, ställ sedan in S1 lika med "flaska" 1273 00:51:47,530 --> 00:51:52,010 och s2 lika med "flaskor", eftersom detta kommer att vara 1 1274 00:51:52,010 --> 00:51:56,340 flaska, och det kommer att vara för 0 flaskor. 1275 00:51:56,340 --> 00:51:58,250 Och det här, vad står? 1276 00:51:58,250 --> 00:51:59,780 Bara för att vara tydlig. 1277 00:51:59,780 --> 00:52:00,620 Detta är bara en kommentar. 1278 00:52:00,620 --> 00:52:03,730 Så det faktum att du kan ha enradiga kommentarer innebär att du 1279 00:52:03,730 --> 00:52:06,110 kan kommentera din kod så här, men en annan vanlig 1280 00:52:06,110 --> 00:52:09,050 paradigm är också att om du har en super-kort fras som 1281 00:52:09,050 --> 00:52:11,410 du vill sätta dig och det är bara mer lättläst för att sätta 1282 00:52:11,410 --> 00:52:13,270 det rätt i slutet av raden av kod, kan du 1283 00:52:13,270 --> 00:52:15,230 absolut göra något liknande. 1284 00:52:15,230 --> 00:52:20,150 >> Så nu vad händer om jag gör det? Annars om jag inte är lika med 1. 1285 00:52:20,150 --> 00:52:21,620 Så bang lika - 1286 00:52:21,620 --> 00:52:23,150 utropstecken är känd som "bang". 1287 00:52:23,150 --> 00:52:25,080 Så Bang = 1. 1288 00:52:25,080 --> 00:52:28,530 Så om jag inte är lika med 1, vad jag vill i stället göra? 1289 00:52:28,530 --> 00:52:31,700 Tja, det första ordet jag vill vara vad? 1290 00:52:34,620 --> 00:52:40,030 Så sträng 1 vara "flaskor" för flera flaskor, 1291 00:52:40,030 --> 00:52:42,440 och då detta kommer att vara flera "flaskor" också, för nu. 1292 00:52:42,440 --> 00:52:43,800 Och vi får se om det faktiskt får oss att 1293 00:52:43,800 --> 00:52:44,870 där vi vill gå. 1294 00:52:44,870 --> 00:52:47,680 Så nu om jag bläddra ner hit, märker att jag ansluta 1295 00:52:47,680 --> 00:52:50,170 inte bara jag, utan S1. 1296 00:52:50,170 --> 00:52:51,860 Jag ansluter i och S1. 1297 00:52:51,860 --> 00:52:54,440 Och sedan ner här, jag minus 1, vilket är detsamma som 1298 00:52:54,440 --> 00:52:55,920 tidigare, men S2. 1299 00:52:55,920 --> 00:52:58,730 Med andra ord vill jag det engelska ordet för förändring som bygger 1300 00:52:58,730 --> 00:52:59,930 på denna logik. 1301 00:52:59,930 --> 00:53:03,310 Nu finns det redan en del problem i denna kod. 1302 00:53:03,310 --> 00:53:08,460 Vad bryts redan ut ur porten här? 1303 00:53:08,460 --> 00:53:10,796 Ja? 1304 00:53:10,796 --> 00:53:13,210 PUBLIK: [OHÖRBAR]. 1305 00:53:13,210 --> 00:53:13,800 >> David J. MALAN: Exakt. 1306 00:53:13,800 --> 00:53:16,030 Så jag har redan brutit lektionen utrymme. 1307 00:53:16,030 --> 00:53:19,610 Så jag har förklarat S1 och S2, men jag har gjort det inuti 1308 00:53:19,610 --> 00:53:22,980 klammerparenteser, vilket innebär ja, kommer denna kod att arbeta upp 1309 00:53:22,980 --> 00:53:27,430 tills linjen 42, men så fort jag slog linjen 43, gissa vad ingen 1310 00:53:27,430 --> 00:53:28,900 längre existerar? 1311 00:53:28,900 --> 00:53:32,600 Ja, gissa vad är inte längre i omfattning - varken S1 eller S2. 1312 00:53:32,600 --> 00:53:33,780 Så vi måste fixa det här. 1313 00:53:33,780 --> 00:53:36,180 Så låt mig ta deklarationerna. 1314 00:53:36,180 --> 00:53:39,320 Och jag lämnar variabelnamn och radera detta här 1315 00:53:39,320 --> 00:53:40,120 och ta bort det här. 1316 00:53:40,120 --> 00:53:43,557 Och i vilka linjer ska jag deklarera verkligen dessa saker? 1317 00:53:43,557 --> 00:53:44,960 PUBLIK: [OHÖRBAR]. 1318 00:53:44,960 --> 00:53:45,410 David J. MALAN: Ja, så antagligen 1319 00:53:45,410 --> 00:53:46,850 ända hit, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Så sträng s1 och sedan sträng s2. 1321 00:53:50,670 --> 00:53:51,950 Och det visar sig, kan jag göra det. 1322 00:53:51,950 --> 00:53:54,260 Om du förklara två variabler av samma typ, 1323 00:53:54,260 --> 00:53:57,420 kan du faktiskt bara använda ett kommatecken och göra det i C. Alla 1324 00:53:57,420 --> 00:53:58,970 rätt, så nu har jag två variabler - 1325 00:53:58,970 --> 00:53:59,860 s1 och s2. 1326 00:53:59,860 --> 00:54:02,000 Jag tilldela dem värden i dessa 1327 00:54:02,000 --> 00:54:04,210 villkor här, eller här. 1328 00:54:04,210 --> 00:54:06,690 Och då jag använder dem nedan. 1329 00:54:06,690 --> 00:54:10,960 Hur väl kommer detta nu att fungera? 1330 00:54:10,960 --> 00:54:12,740 >> Tja, det är fortfarande lite buggig, men låt oss åtminstone se 1331 00:54:12,740 --> 00:54:13,730 hur långt vi har kommit. 1332 00:54:13,730 --> 00:54:16,500 Så låt mig gå vidare och göra beer3. 1333 00:54:16,500 --> 00:54:17,695 Är detta beer3? 1334 00:54:17,695 --> 00:54:19,410 Japp, det här beer3. 1335 00:54:19,410 --> 00:54:21,510 Och låt mig nu gå vidare och köra beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Vi kan nog hoppa de flesta av dem. 1338 00:54:25,840 --> 00:54:29,100 Och här nere, titta på det. 1339 00:54:29,100 --> 00:54:31,110 "En flaska öl på väggen, en flaska öl, ta 1340 00:54:31,110 --> 00:54:34,306 en nedåt, passera runt, 0 flaskor öl på väggen. " 1341 00:54:34,306 --> 00:54:37,570 Men jag fästa er uppmärksamhet på bara halva lösningen. 1342 00:54:37,570 --> 00:54:39,620 Typ av skruvas upp här. 1343 00:54:39,620 --> 00:54:43,030 Så det verkar som om hörnet fallen uppstår när jag är lika vad 1344 00:54:43,030 --> 00:54:44,030 två värden? 1345 00:54:44,030 --> 00:54:45,020 Publik: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 David J. MALAN: 2 och 1. 1347 00:54:46,190 --> 00:54:48,180 Det är inte 1 och inte 1. 1348 00:54:48,180 --> 00:54:51,890 Det är verkligen bara dessa sista två strofer av den här låten. 1349 00:54:51,890 --> 00:54:53,890 Så vad vill jag istället göra? 1350 00:54:53,890 --> 00:54:58,890 Så jag verkar ha fångat fall om jag är == till 1, 1351 00:54:58,890 --> 00:55:02,240 då det första ordet är "flaska", men det andra ordet 1352 00:55:02,240 --> 00:55:07,230 är "flaskor". Men här vill jag ändra detta är == 2. 1353 00:55:07,230 --> 00:55:08,570 Och om så är fallet, vad jag vill 1354 00:55:08,570 --> 00:55:09,620 första ordet vara? 1355 00:55:09,620 --> 00:55:10,430 Publik: "Flaskor". 1356 00:55:10,430 --> 00:55:12,890 David J. MALAN: "flaskor", så för två flaskor. 1357 00:55:12,890 --> 00:55:14,690 Och sedan detta ord här bör vara - 1358 00:55:14,690 --> 00:55:15,340 PUBLIK: "Bottle". 1359 00:55:15,340 --> 00:55:17,316 David J. MALAN: "Bottle", singular. 1360 00:55:20,430 --> 00:55:25,160 >> Okej, låt oss zooma ut, gå tillbaka hit, repris göra, 1361 00:55:25,160 --> 00:55:28,590 repris beer3, typ 99 igen. 1362 00:55:28,590 --> 00:55:30,710 Okej, "segmenteringsfel (core dumpad)." 1363 00:55:30,710 --> 00:55:32,780 Vad har jag gjort för fel? 1364 00:55:36,050 --> 00:55:38,722 Målgrupp: Du behöver inte ha ett värde [OHÖRBAR]. 1365 00:55:38,722 --> 00:55:40,480 David J. MALAN: Ah, utmärkt punkt. 1366 00:55:40,480 --> 00:55:43,310 Okej, så vad är det för fel här? 1367 00:55:43,310 --> 00:55:45,450 Så segmenteringsfel, och vi faktiskt kommer att se 1368 00:55:45,450 --> 00:55:49,020 detta ganska många gånger i framtiden, medvetet. 1369 00:55:49,020 --> 00:55:51,030 Men nu, vad betyder egentligen? 1370 00:55:51,030 --> 00:55:53,620 En segmenteringsfel nästan alltid innebär att du har 1371 00:55:53,620 --> 00:55:56,760 på något sätt försökt att få tillgång till minnet, RAM i din dator, 1372 00:55:56,760 --> 00:56:00,600 att du inte äger, att du inte har faktiskt bett 1373 00:56:00,600 --> 00:56:02,050 operativsystem för. 1374 00:56:02,050 --> 00:56:04,440 Så i det här fallet, märker vad jag har gjort, vilket är 1375 00:56:04,440 --> 00:56:05,870 bristfällig i min logik. 1376 00:56:05,870 --> 00:56:09,500 Jag har tilldelat S1 och S2 ett värde om jag är lika med 1. 1377 00:56:09,500 --> 00:56:11,590 Jag har också gjort det om jag är lika 2. 1378 00:56:11,590 --> 00:56:13,710 Men jag har inte gjort det i oändligt många andra 1379 00:56:13,710 --> 00:56:14,690 möjligheter - 1380 00:56:14,690 --> 00:56:17,940 särskilt 3 eller 4 eller punkt, punkt, punkt, 99. 1381 00:56:17,940 --> 00:56:20,100 Så en fix för detta kan bara vara låt oss 1382 00:56:20,100 --> 00:56:22,190 har en annan tillstånd. 1383 00:56:22,190 --> 00:56:26,780 Och låt mig gå in här och säga S1 lika - 1384 00:56:26,780 --> 00:56:28,180 vad ska det vara här? 1385 00:56:28,180 --> 00:56:28,750 PUBLIK: [OHÖRBAR]. 1386 00:56:28,750 --> 00:56:30,460 >> David J. MALAN: "Flaskor", eftersom det i det vanliga fallet, 1387 00:56:30,460 --> 00:56:32,020 Det är precis samma sak. 1388 00:56:32,020 --> 00:56:35,580 Så lika citat, citat, "flaskor". Så för plural 1389 00:56:35,580 --> 00:56:41,010 flaskor, och sedan upp här, för flera flaskor. 1390 00:56:41,010 --> 00:56:44,580 Okej, så låt mig nu gå tillbaka till min terminalfönster, 1391 00:56:44,580 --> 00:56:47,200 kompilera, repris den. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Puh. 1394 00:56:49,150 --> 00:56:50,610 Och låt oss göra en snabb sanity check. 1395 00:56:50,610 --> 00:56:52,400 Tekniskt sett skulle vi vilja läsa alla dessa för att se 1396 00:56:52,400 --> 00:56:53,370 de är korrekt, men låt oss titta på 1397 00:56:53,370 --> 00:56:54,640 minst de kända syndarna. 1398 00:56:54,640 --> 00:56:57,370 3 flaskor, 2 flaskor, 2 flaskor, 1 1399 00:56:57,370 --> 00:57:00,380 flaska, 1 flaska, 0 flaskor. 1400 00:57:00,380 --> 00:57:03,080 Vi tycks ha åtminstone fast det för nu. 1401 00:57:03,080 --> 00:57:06,010 Men fångsten här är att vad en Guds fruktansvärda röra detta är 1402 00:57:06,010 --> 00:57:07,470 bara för att lösa en dum 1403 00:57:07,470 --> 00:57:09,540 ett tecken grammatisk detalj. 1404 00:57:09,540 --> 00:57:11,150 Så det är lite av en anledning som jag skär detta hörn 1405 00:57:11,150 --> 00:57:14,090 tidigare, eftersom det är bara helt irriterande måste 1406 00:57:14,090 --> 00:57:15,020 skriva denna kod mycket. 1407 00:57:15,020 --> 00:57:17,530 Men det visar sig att det finns något mer elegant sätt 1408 00:57:17,530 --> 00:57:20,110 uttrycker exakt samma sak. 1409 00:57:20,110 --> 00:57:22,040 Och vi kan göra detta på följande sätt. 1410 00:57:22,040 --> 00:57:23,890 >> Låt mig lämna detta på skärmen en stund och 1411 00:57:23,890 --> 00:57:27,320 införa något som kallas en ternär operatör. 1412 00:57:27,320 --> 00:57:29,600 Detta är lite av en one-liner som bara är tänkt att göra vår 1413 00:57:29,600 --> 00:57:31,880 lever lite sexigare, som utlovat. 1414 00:57:31,880 --> 00:57:33,130 Och jag kommer att göra detta på följande sätt. 1415 00:57:33,130 --> 00:57:35,810 Ge mig en sträng som heter s1, och låt mig 1416 00:57:35,810 --> 00:57:37,200 tilldela den som följer. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Flaska", annars "flaskor". String s2 får (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Flaska", annars "flaskor". 1420 00:57:52,670 --> 00:57:57,050 Så vad är då skillnaden här? 1421 00:57:57,050 --> 00:57:59,370 Dessa två rader kod, hävdar jag, kan 1422 00:57:59,370 --> 00:58:02,200 ersätta hela den här röran. 1423 00:58:02,200 --> 00:58:04,280 Så jag kallar det en enda röra, bara för att det slags gnuggar mig 1424 00:58:04,280 --> 00:58:05,940 fel sätt att det är så många rader kod. 1425 00:58:05,940 --> 00:58:06,650 Inte fel. 1426 00:58:06,650 --> 00:58:07,700 Det är inte dålig design. 1427 00:58:07,700 --> 00:58:10,140 Liksom, det är helt korrekt och perfekt fina. 1428 00:58:10,140 --> 00:58:12,970 Men kodning blir tråkig om du måste uttrycka dig så 1429 00:58:12,970 --> 00:58:15,530 fan specifikt igen och igen och igen med en enkel 1430 00:58:15,530 --> 00:58:16,620 scenario så här. 1431 00:58:16,620 --> 00:58:19,470 Så C har vissa genvägar, så här. 1432 00:58:19,470 --> 00:58:24,270 Så detta främst säger förklara en sträng som heter S1 och 1433 00:58:24,270 --> 00:58:32,610 tilldela det antingen detta värde eller detta värde om jag är == - 1434 00:58:32,610 --> 00:58:35,290 ledsen, skulle jag säga detta tydligare. 1435 00:58:35,290 --> 00:58:41,680 Deklarera en variabel s1, tilldela den detta värde om detta är sant. 1436 00:58:41,680 --> 00:58:44,280 Annars tilldela den detta värde. 1437 00:58:44,280 --> 00:58:47,220 Så med andra ord är denna typ av en-line sätt 1438 00:58:47,220 --> 00:58:51,490 säger om annat än att göra ett uppdrag på vägen. 1439 00:58:51,490 --> 00:58:55,540 Så om jag är 1, sedan gå vidare och kallar detta "flaska". Och 1440 00:58:55,540 --> 00:58:59,830 då detta annars, kalla det "flaskor". Samtidigt S2 1441 00:58:59,830 --> 00:59:04,060 andra ordet som vi måste definiera, om jag är lika med 2, vi 1442 00:59:04,060 --> 00:59:08,350 uppsättningen S2 till "flaska". Annars, ställ in "flaskor". Och vad 1443 00:59:08,350 --> 00:59:11,460 Detta innebär nu kan jag gå igenom detta och ta bort alla 1444 00:59:11,460 --> 00:59:12,860 de kodrader. 1445 00:59:12,860 --> 00:59:17,220 Och när jag säger, något löjligt, att detta nu 1446 00:59:17,220 --> 00:59:20,060 sexigare är det sexigare i den typ av stilistisk känsla. 1447 00:59:20,060 --> 00:59:22,660 Att funktionellt är denna kod faktiskt kommer att 1448 00:59:22,660 --> 00:59:24,610 göra exakt samma sak. 1449 00:59:24,610 --> 00:59:26,890 Och även om det kan se lite kryptisk först 1450 00:59:26,890 --> 00:59:29,250 blick, eftersom vi inte har sett denna konstruktion tidigare, skulle jag 1451 00:59:29,250 --> 00:59:31,850 hävdar att det i slutändan kommer att bli så mycket mer 1452 00:59:31,850 --> 00:59:34,820 läsbar och så mycket lättare för vi människor att sortera på 1453 00:59:34,820 --> 00:59:36,830 förstår, för nu kan du bara läsa 1454 00:59:36,830 --> 00:59:38,830 kod på en rad. 1455 00:59:38,830 --> 00:59:41,550 Det är fortfarande likadana i andemening som ett om, om det är den 1456 00:59:41,550 --> 00:59:44,920 tillstånd och då är vad som finns inuti om och detta 1457 00:59:44,920 --> 00:59:46,480 är vad som finns inne i annat. 1458 00:59:46,480 --> 00:59:49,450 Men vi kan göra detta bara mycket mer elegant. 1459 00:59:49,450 --> 00:59:52,650 >> Och om jag nu går tillbaka till min terminal, efter att ha bort alla 1460 00:59:52,650 --> 00:59:55,530 av dessa linjer och ersatte dem med bara de två, 1461 00:59:55,530 --> 01:00:00,150 kompilera, köra flaskor öl med 99, märker att min 1462 01:00:00,150 --> 01:00:03,350 grammatik är i själva verket fortfarande är korrekt. 1463 01:00:03,350 --> 01:00:06,160 Så återigen, något att starta. 1464 01:00:06,160 --> 01:00:08,840 2 flaskor öl, 1 flaska öl. 1465 01:00:08,840 --> 01:00:09,370 Ser rätt. 1466 01:00:09,370 --> 01:00:10,100 Ja. 1467 01:00:10,100 --> 01:00:13,900 Så där har vi en mycket mer kortfattad lösning. 1468 01:00:13,900 --> 01:00:16,020 Så det här också, som du får mer bekväm med C, inte 1469 01:00:16,020 --> 01:00:18,630 nödvändigtvis med den första pset eller andra, men 1470 01:00:18,630 --> 01:00:21,170 inse att dessa konstruktioner kan tillåta oss att göra saker som någonsin 1471 01:00:21,170 --> 01:00:22,810 mer elegant. 1472 01:00:22,810 --> 01:00:25,200 Nu ska vi göra en annan sak här. 1473 01:00:25,200 --> 01:00:31,460 Låt mig gå vidare och öppna upp return1.c. 1474 01:00:31,460 --> 01:00:34,340 Nu ska vi börja att lösa ett annat problem på ett sätt som 1475 01:00:34,340 --> 01:00:37,140 tillåter oss att skriva mer sofistikerad kod. 1476 01:00:37,140 --> 01:00:39,960 >> Så här är ett enkelt litet program vars syfte i livet 1477 01:00:39,960 --> 01:00:41,870 är att inkrementera värden. 1478 01:00:41,870 --> 01:00:43,100 Och faktiskt, låt oss ta ett steg tillbaka. 1479 01:00:43,100 --> 01:00:44,400 Låt mig göra det manuellt. 1480 01:00:44,400 --> 01:00:52,200 Låt mig göra inkludera och int main (void). 1481 01:00:52,200 --> 01:00:53,450 Och låt mig kalla denna increment.c. 1482 01:00:57,150 --> 01:00:58,570 Och vad vill jag göra? 1483 01:00:58,570 --> 01:01:02,240 Jag ska gå vidare och säga något i stil - 1484 01:01:02,240 --> 01:01:04,280 kommer vi att ringa numren samma - 1485 01:01:04,280 --> 01:01:04,980 int X. 1486 01:01:04,980 --> 01:01:13,670 Så int x får 2, printf x är% d, ny rad, x. 1487 01:01:13,670 --> 01:01:16,780 Så jag skriver snabbt, men sorts familjära saker nu. 1488 01:01:16,780 --> 01:01:18,830 Sen ska jag göra X + +. 1489 01:01:18,830 --> 01:01:21,710 Sen ska jag skriva ut samma mening igen. 1490 01:01:21,710 --> 01:01:24,550 Och då ska jag återgå 0 bara för att avsluta programmet. 1491 01:01:24,550 --> 01:01:25,960 Okej, så detta är ett program som 1492 01:01:25,960 --> 01:01:26,960 steg ett nummer. 1493 01:01:26,960 --> 01:01:29,830 Det först gå att initiera något till 2, och då är det 1494 01:01:29,830 --> 01:01:33,470 kommer att öka den och skriva ut den på nytt. 1495 01:01:33,470 --> 01:01:36,930 >> Så låt oss köra steg, otroligt enkelt program. 1496 01:01:36,930 --> 01:01:40,940 Men anta nu att jag vill kub värdet, så gör 1497 01:01:40,940 --> 01:01:42,490 något något godtyckliga. 1498 01:01:42,490 --> 01:01:45,140 Och jag vill verkligen göra X får kuben av det. 1499 01:01:45,140 --> 01:01:47,570 Så jag kunde använda vad som kallas pow funktion, men det gör jag inte 1500 01:01:47,570 --> 01:01:48,650 verkligen vet var det är ännu. 1501 01:01:48,650 --> 01:01:50,580 Så jag ska göra detta gammaldags sätt. 1502 01:01:50,580 --> 01:01:54,550 x gånger detta lika x ggr x gånger x. 1503 01:01:54,550 --> 01:01:56,880 Så jag cubing värdet multipliceras med sig själv igen 1504 01:01:56,880 --> 01:02:00,440 och igen och igen, så att vi får makten 1505 01:02:00,440 --> 01:02:02,050 av 3 i det här fallet. 1506 01:02:02,050 --> 01:02:06,000 Så nu de siffror jag skulle skriva ut bör, som vi ska se 1507 01:02:06,000 --> 01:02:08,450 här - att göra steg, så det är faktiskt inte riktigt öka 1508 01:02:08,450 --> 01:02:10,260 längre, men vi lämnar namnet ensam - 1509 01:02:10,260 --> 01:02:11,590 2 och därefter 8. 1510 01:02:11,590 --> 01:02:17,670 Nu har vi början till en möjlighet till förbättring 1511 01:02:17,670 --> 01:02:21,570 Här, där det cubing sak multiplicera ett antal 1512 01:02:21,570 --> 01:02:24,680 i sig själv av sig själv känns detta kan bara vara 1513 01:02:24,680 --> 01:02:27,920 bra att ha som en funktion, ungefär som någon beslutat 1514 01:02:27,920 --> 01:02:30,430 år sedan - ni vet, typ av användbar om en av oss sätter sig 1515 01:02:30,430 --> 01:02:33,120 och skriver printf så att resten av världen kan använda det, 1516 01:02:33,120 --> 01:02:36,160 varför vi inte sitta ner och skriva en funktion som kallas kub 1517 01:02:36,160 --> 01:02:39,250 som gör detta cubing för oss så vi behöver inte manuellt 1518 01:02:39,250 --> 01:02:41,500 genomföra begreppet cubing värden här? 1519 01:02:41,500 --> 01:02:44,040 >> Så ett enkelt exempel, men låt oss gå vidare och använda detta som en 1520 01:02:44,040 --> 01:02:46,280 möjlighet att skriva vår egen funktion. 1521 01:02:46,280 --> 01:02:49,110 Så hittills har vi endast huvud, och vi har använt andra 1522 01:02:49,110 --> 01:02:51,780 människors funktioner, men vi har inte skrivit våra egna. 1523 01:02:51,780 --> 01:02:52,650 Så här går vi. 1524 01:02:52,650 --> 01:02:56,330 Jag ska gå vidare och skriva en funktion som kallas kub. 1525 01:02:56,330 --> 01:02:58,490 Och jag kommer att få det ta en ingång. 1526 01:02:58,490 --> 01:03:02,070 Så dess ingång kommer att bli ett heltal. 1527 01:03:02,070 --> 01:03:03,570 Och vad kommer det att göra? 1528 01:03:03,570 --> 01:03:08,500 Det kommer att förklara int utgång = ingång gånger ingång 1529 01:03:08,500 --> 01:03:09,880 gånger ingång. 1530 01:03:09,880 --> 01:03:12,190 Och sedan kommer att återvända som utgång. 1531 01:03:12,190 --> 01:03:14,500 Och då måste jag vara specifik nu. 1532 01:03:14,500 --> 01:03:16,820 Denna funktion kommer att returnera en int. 1533 01:03:16,820 --> 01:03:19,130 Så här är då hur man skulle skriva egna funktioner. 1534 01:03:19,130 --> 01:03:20,850 Du bestämmer först vad är namnet på din 1535 01:03:20,850 --> 01:03:21,720 funktion kommer att bli. 1536 01:03:21,720 --> 01:03:23,964 Och generellt är något förklarande bra, så jag ska 1537 01:03:23,964 --> 01:03:25,060 kalla det kub. 1538 01:03:25,060 --> 01:03:27,180 Då måste man specificera vad det kommer att återvända, är det 1539 01:03:27,180 --> 01:03:28,240 sin produktion kommer att bli. 1540 01:03:28,240 --> 01:03:29,595 Och vi har inte så många alternativ ännu. 1541 01:03:29,595 --> 01:03:32,260 Int, röding, flyta, BOOL, sträng. 1542 01:03:32,260 --> 01:03:34,260 För nu, kommer jag att hålla fast vid en int, eftersom jag vill att det 1543 01:03:34,260 --> 01:03:35,880 tillbaka ett heltal. 1544 01:03:35,880 --> 01:03:38,770 Då måste man ange vad dess ingångar, om sådana finns, är. 1545 01:03:38,770 --> 01:03:41,570 Och om kub tar ett argument, tar något mellan 1546 01:03:41,570 --> 01:03:44,970 parenteser, måste du ge det argumentet ett namn så att 1547 01:03:44,970 --> 01:03:47,860 du kan kalla det något som du är att genomföra eller skriva 1548 01:03:47,860 --> 01:03:50,550 denna funktion och du måste ge det en typ, som i detta 1549 01:03:50,550 --> 01:03:51,810 fall kommer att vara int. 1550 01:03:51,810 --> 01:03:54,690 Så kort sagt, är kub en funktion som tar ett heltal 1551 01:03:54,690 --> 01:03:57,560 som inmatning och returnerar ett heltal som utsignal. 1552 01:03:57,560 --> 01:03:59,240 >> Så vad gör det med den ingången? 1553 01:03:59,240 --> 01:04:03,710 Tja, i linje 14, förklarar jag en variabel som heter utgång, och jag 1554 01:04:03,710 --> 01:04:07,410 tilldela det värdet, ingång gånger ingång gånger ingång. 1555 01:04:07,410 --> 01:04:11,490 Och då jag återvänder utgång. 1556 01:04:11,490 --> 01:04:14,890 Så hur använder jag det då? 1557 01:04:14,890 --> 01:04:19,210 Vad ändrar jag dessa markerade tecknen på nätet 1558 01:04:19,210 --> 01:04:21,006 7 att, tror du? 1559 01:04:21,006 --> 01:04:21,800 PUBLIK: [OHÖRBAR]. 1560 01:04:21,800 --> 01:04:25,570 David J. MALAN: Ja, så kuben av X. 1561 01:04:25,570 --> 01:04:28,290 SO x är en variabel, vilket betyder att det har något värde. 1562 01:04:28,290 --> 01:04:30,190 Lyckligtvis är det av typen heltal. 1563 01:04:30,190 --> 01:04:34,280 Och eftersom x är en int, innebär att jag kan ge det till kuben. 1564 01:04:34,280 --> 01:04:39,500 Och även om jag åsidosätta värdet på x med värdet 1565 01:04:39,500 --> 01:04:42,780 av kub x, har som varit fallet hittills, när du 1566 01:04:42,780 --> 01:04:46,150 har samma tecken och en kodrad, grejer till höger 1567 01:04:46,150 --> 01:04:49,090 blir avrättade och sedan blir tilldelad 1568 01:04:49,090 --> 01:04:50,150 värde till vänster. 1569 01:04:50,150 --> 01:04:52,950 Så ordningen av verksamheten är som vi hoppas. 1570 01:04:52,950 --> 01:04:56,620 Så fungerar det här? 1571 01:04:56,620 --> 01:04:58,410 Nåväl, låt mig gå hit. 1572 01:04:58,410 --> 01:04:59,970 Låt mig öppna min terminalfönster. 1573 01:04:59,970 --> 01:05:03,610 Låt mig gör steg, Enter. 1574 01:05:03,610 --> 01:05:07,140 "Implicit deklaration av funktionen" kub "är ogiltigt i 1575 01:05:07,140 --> 01:05:13,700 C99. "Inom parentes hänvisar C99 till det språk C som det var 1576 01:05:13,700 --> 01:05:16,790 definieras i 1999, var som en uppdatering över versionen från 1577 01:05:16,790 --> 01:05:19,360 1989, vilket är en uppdatering över originalet. 1578 01:05:19,360 --> 01:05:21,740 Så det är allt som betyder. 1579 01:05:21,740 --> 01:05:24,250 >> Så vad betyder det att "implicit deklaration av 1580 01:05:24,250 --> 01:05:26,790 funktion "kub" är ogiltig? "Det är här. 1581 01:05:26,790 --> 01:05:28,430 Det är just där i linje 12. 1582 01:05:28,430 --> 01:05:30,460 PUBLIK: [OHÖRBAR]. 1583 01:05:30,460 --> 01:05:30,730 David J. MALAN: Vad är det? 1584 01:05:30,730 --> 01:05:32,470 PUBLIK: Det är inte förr. 1585 01:05:32,470 --> 01:05:33,540 David J. MALAN: Det är inte förr. 1586 01:05:33,540 --> 01:05:34,740 Så detta är en sak. 1587 01:05:34,740 --> 01:05:38,190 C är typ av dumt, eller C-kompilatorer är typ av dumma. 1588 01:05:38,190 --> 01:05:41,060 De verkligen bara göra vad du säger till dem att göra. 1589 01:05:41,060 --> 01:05:44,770 Och de, i synnerhet bara läsa din kod uppifrån och ned, 1590 01:05:44,770 --> 01:05:45,620 vänster till höger. 1591 01:05:45,620 --> 01:05:49,140 Så om kompilatorn, klang, läser din kod, linje 1, den 1592 01:05:49,140 --> 01:05:50,120 räknar ut hur man gör detta. 1593 01:05:50,120 --> 01:05:50,940 Åh, här kommer huvud. 1594 01:05:50,940 --> 01:05:53,000 Okej, låt mig gå vidare och förklara en variabel x. 1595 01:05:53,000 --> 01:05:54,160 Låt mig skriva ut något. 1596 01:05:54,160 --> 01:05:55,890 Linje 7, vad sjutton är kuben? 1597 01:05:55,890 --> 01:05:58,230 Det är inte deklarerats i stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Den kommer inte med C. Jag har ingen aning vad jag ska göra. 1599 01:06:00,950 --> 01:06:03,960 Och så clang BAILS rättvis och avslutas med att felmeddelandet. 1600 01:06:03,960 --> 01:06:05,850 Så vi kan fixa det här på ett par olika sätt. 1601 01:06:05,850 --> 01:06:10,530 Vi kan lära klang vilken kub är genom att bara flytta om 1602 01:06:10,530 --> 01:06:11,820 deklaration är. 1603 01:06:11,820 --> 01:06:14,640 Så jag klippt ut och klistrat den ovanpå viktigaste. 1604 01:06:14,640 --> 01:06:17,770 Nu inser att bara för att stora inte längre först, är det 1605 01:06:17,770 --> 01:06:19,150 fortfarande körs som standard. 1606 01:06:19,150 --> 01:06:20,060 Main är främsta. 1607 01:06:20,060 --> 01:06:21,022 Det är den förvalda funktionen namn. 1608 01:06:21,022 --> 01:06:22,930 Det spelar ingen roll om det är i en fil. 1609 01:06:22,930 --> 01:06:26,910 Men åtminstone nu klang har sett kub innan jag använder den. 1610 01:06:26,910 --> 01:06:28,500 Så låt oss se om klang är lyckligare nu. 1611 01:06:28,500 --> 01:06:31,410 Gör steg, det sammanställa denna gång. 1612 01:06:31,410 --> 01:06:33,060 >> Låt mig köra steg. 1613 01:06:33,060 --> 01:06:34,810 Och mycket riktigt, det verkar fungera. 1614 01:06:34,810 --> 01:06:36,810 Nu kan du komma med scenarier småningom när 1615 01:06:36,810 --> 01:06:38,650 Det är inte möjligt att sätta alla funktioner 1616 01:06:38,650 --> 01:06:39,740 över alla andra funktioner. 1617 01:06:39,740 --> 01:06:42,140 Du kommer att fastna i denna oändlig slinga i verkligheten, 1618 01:06:42,140 --> 01:06:43,480 där denna kille vill vara här, men detta 1619 01:06:43,480 --> 01:06:44,390 kille måste vara där. 1620 01:06:44,390 --> 01:06:45,830 Så det fungerar inte alltid. 1621 01:06:45,830 --> 01:06:49,020 Så tack och lov, har C en mer elegant lösning. 1622 01:06:49,020 --> 01:06:50,790 Jag ska sätta detta tillbaka där den var, bara för att jag 1623 01:06:50,790 --> 01:06:53,390 föredrar, som i princip att största alltid 1624 01:06:53,390 --> 01:06:55,550 på toppen, eftersom det är bara trevligt att se vad det här programmet 1625 01:06:55,550 --> 01:06:56,920 gör som standard. 1626 01:06:56,920 --> 01:06:58,950 Och vad jag ska göra här uppe är förklara vad som kallas 1627 01:06:58,950 --> 01:07:00,250 en prototyp. 1628 01:07:00,250 --> 01:07:05,730 Jag ska åter förkunna mitt kub funktion genom att bokstavligen 1629 01:07:05,730 --> 01:07:07,180 kopiera och klistra in. 1630 01:07:07,180 --> 01:07:08,290 Egentligen, det är inte bokstavligen. 1631 01:07:08,290 --> 01:07:13,060 Så bokstavligen kopiera och klistra in linjen 15 1632 01:07:13,060 --> 01:07:15,160 upp över linjen 6. 1633 01:07:15,160 --> 01:07:17,010 Det spelar ingen roll vilken linje det hamnar på. 1634 01:07:17,010 --> 01:07:18,380 Det råkar vara på linje 4. 1635 01:07:18,380 --> 01:07:19,950 Men det måste vara innan huvud. 1636 01:07:19,950 --> 01:07:21,150 Men märker skillnaden. 1637 01:07:21,150 --> 01:07:24,100 Linje 4 slutar med ett semikolon, vilket innebär hey, 1638 01:07:24,100 --> 01:07:27,510 Klang, ta mitt ord för det att det finns en funktion 1639 01:07:27,510 --> 01:07:31,350 kallas kub som tar en int och returnerar en int. 1640 01:07:31,350 --> 01:07:33,020 Men jag tänker inte berätta vad det är ännu. 1641 01:07:33,020 --> 01:07:35,180 Vet bara att jag lovar att berätta så småningom. 1642 01:07:35,180 --> 01:07:38,490 Och mycket riktigt, nu är det okej att det är nere. 1643 01:07:38,490 --> 01:07:41,275 >> Så detta är i allmänhet bättre, för då på toppen av 1644 01:07:41,275 --> 01:07:44,240 filen kan du skramla strax utanför, blixtsnabb, en rad 1645 01:07:44,240 --> 01:07:46,470 varje, vad namnen på dina funktioner, vad deras 1646 01:07:46,470 --> 01:07:49,120 ingångar är, vad deras resultat är. 1647 01:07:49,120 --> 01:07:52,210 Och för att vara mer tydlig, betyder ingång allmänhet argument eller 1648 01:07:52,210 --> 01:07:54,110 parametern, synonyma. 1649 01:07:54,110 --> 01:07:56,890 Utgång betyder returvärdet, vad gör det 1650 01:07:56,890 --> 01:07:58,700 handen tillbaka till mig. 1651 01:07:58,700 --> 01:08:03,420 Så i detta fallet här, har kub förklarats i toppen, men 1652 01:08:03,420 --> 01:08:06,940 definierade, annars känd som genomförs vid botten. 1653 01:08:06,940 --> 01:08:09,620 Så låt oss nu gå tillbaka hit och köra det. 1654 01:08:09,620 --> 01:08:13,430 Så nu låt mig gå vidare och köra göra, köra steg. 1655 01:08:13,430 --> 01:08:16,500 Och det verkar nu fungera bra. 1656 01:08:16,500 --> 01:08:19,450 Så nu kan vi gå vidare och räkna ut något liknande 1657 01:08:19,450 --> 01:08:23,720 öl exempel i denna fjärde versionen. 1658 01:08:23,720 --> 01:08:25,590 Så låt mig rulla ner här. 1659 01:08:25,590 --> 01:08:28,149 Och märker att jag typ av tog den här lektionen till sig just nu. 1660 01:08:28,149 --> 01:08:31,140 Det faktum att jag sjöng samma strof igen och 1661 01:08:31,140 --> 01:08:34,130 om och om igen, samma Chorus Line i låten, kände 1662 01:08:34,130 --> 01:08:36,439 som varför inte jag faktor som ut i en funktion? 1663 01:08:36,439 --> 01:08:38,470 Och faktiskt, bör detta vara ett av motiven. 1664 01:08:38,470 --> 01:08:40,960 Förutom det faktum att någon annan i världen kanske vill 1665 01:08:40,960 --> 01:08:42,390 att använda en kub funktion - 1666 01:08:42,390 --> 01:08:44,560 Det är en bra anledning till faktor något och skriv 1667 01:08:44,560 --> 01:08:45,720 egen anpassad funktion - 1668 01:08:45,720 --> 01:08:48,720 om det finns en bit av kod i ditt program som bara gör 1669 01:08:48,720 --> 01:08:51,370 begreppsmässig mening, att du typ av vill ge det en 1670 01:08:51,370 --> 01:08:53,740 namn - som i detta fall, kör - 1671 01:08:53,740 --> 01:08:57,380 då kan du på samma sätt skriva det som en separat funktion. 1672 01:08:57,380 --> 01:08:59,560 Du behöver inte skriva allt i huvud om det bara 1673 01:08:59,560 --> 01:09:02,609 känns renare att skilja ut och ge den ett namn. 1674 01:09:02,609 --> 01:09:05,529 >> Så i detta fall här, märker att jag har en kommentar ovanpå 1675 01:09:05,529 --> 01:09:06,859 denna funktion som bara sjunger om 1676 01:09:06,859 --> 01:09:08,630 specificerade antal flaskor. 1677 01:09:08,630 --> 01:09:10,609 Notera här att jag inte behöver ringa dessa 1678 01:09:10,609 --> 01:09:12,520 Saker ingång och utgång. 1679 01:09:12,520 --> 01:09:16,090 I själva verket, den här gången jag ringde bara min ingång B för flaska. 1680 01:09:16,090 --> 01:09:19,960 Och märker här föreslår ogiltig vad? 1681 01:09:19,960 --> 01:09:21,309 Det kör - 1682 01:09:21,309 --> 01:09:22,660 PUBLIK: inte tillbaka det. 1683 01:09:22,660 --> 01:09:23,870 David J. MALAN: returnerar inte ett värde. 1684 01:09:23,870 --> 01:09:26,800 Och faktiskt, behöver uppgifter inte återvända värden. 1685 01:09:26,800 --> 01:09:28,060 De kan bara göra något. 1686 01:09:28,060 --> 01:09:30,270 De kan ha så kallade biverkningar, som i detta 1687 01:09:30,270 --> 01:09:33,109 fall är bara en massa utskrift på skärmen. 1688 01:09:33,109 --> 01:09:36,580 Så märker att den här koden här, jag bokstavligen bara stal från 1689 01:09:36,580 --> 01:09:37,680 det tidigare exemplet. 1690 01:09:37,680 --> 01:09:39,930 Den enda skillnaden är istället för att använda i som min 1691 01:09:39,930 --> 01:09:42,890 variabel, jag använder nu B som min variabel. 1692 01:09:42,890 --> 01:09:45,880 Så jag har b här nere, jag har b här nere, jag har b 1693 01:09:45,880 --> 01:09:47,109 minus 1 här nere. 1694 01:09:47,109 --> 01:09:49,279 Men koden är exakt densamma. 1695 01:09:49,279 --> 01:09:52,529 Men bara för att visa dig nu hur vi kan använda detta, låt mig gå 1696 01:09:52,529 --> 01:09:56,780 framåt och faktiskt ändra detta är en for-slinga. 1697 01:09:56,780 --> 01:10:03,850 for (int i = n, i> n, i -). 1698 01:10:03,850 --> 01:10:06,230 >> Så jag har stulit det från våra tidigare exempel. 1699 01:10:06,230 --> 01:10:08,970 Tidigare är det i linje 37 som jag skulle ha börjat 1700 01:10:08,970 --> 01:10:10,640 sjunger detta irriterande låt. 1701 01:10:10,640 --> 01:10:15,810 Men istället, jag ska bara nu kallar kör av i. 1702 01:10:15,810 --> 01:10:16,870 Klar. 1703 01:10:16,870 --> 01:10:20,260 Så nu i varje iteration av denna slinga, kallar jag detta andra 1704 01:10:20,260 --> 01:10:22,220 funktion, kör, som jag råkade skriva. 1705 01:10:22,220 --> 01:10:24,110 Det var inte skriven av någon annan år sedan. 1706 01:10:24,110 --> 01:10:27,930 Men kör, under tiden, använder printf för att skriva ut 1707 01:10:27,930 --> 01:10:29,840 ut dessa fyra rader. 1708 01:10:29,840 --> 01:10:32,720 Men det faktum att jag ringer kör om och om igen i en 1709 01:10:32,720 --> 01:10:35,900 loop innebär att jag kommer att få, alldeles slut, 1710 01:10:35,900 --> 01:10:39,310 exakt samma låt som jag har hittills. 1711 01:10:39,310 --> 01:10:42,130 Så kort sagt, nu om jag ser tillbaka på min kod, även om 1712 01:10:42,130 --> 01:10:44,240 funktionellt motsvarar detta, märker att det är 1713 01:10:44,240 --> 01:10:46,020 börjar bli ännu mer lättläst. 1714 01:10:46,020 --> 01:10:48,410 Jag vet inte exakt hur getInt 1715 01:10:48,410 --> 01:10:49,250 genomförs. 1716 01:10:49,250 --> 01:10:52,050 Ärligt talat, jag vet inte hur kör genomförs. 1717 01:10:52,050 --> 01:10:52,970 Men det spelar ingen roll för mig. 1718 01:10:52,970 --> 01:10:55,620 Jag bryr mig inte, för nu kan jag sortera om, som människa, läs 1719 01:10:55,620 --> 01:10:57,050 detta från topp till botten. 1720 01:10:57,050 --> 01:10:59,950 Och eftersom funktionerna är namngivna enligt vad de 1721 01:10:59,950 --> 01:11:02,910 göra, är min kod alltmer läsbar. 1722 01:11:02,910 --> 01:11:05,190 Och som våra program får mycket mer komplex - 1723 01:11:05,190 --> 01:11:07,220 av terminen slut kommer du att skriva hundratals rader 1724 01:11:07,220 --> 01:11:10,970 kod i språk som PHP och Javascript och liknande - 1725 01:11:10,970 --> 01:11:13,550 du kommer att upptäcka att det är så mycket lättare än att hålla reda på 1726 01:11:13,550 --> 01:11:14,080 vad du har gjort. 1727 01:11:14,080 --> 01:11:15,810 Och när du börjar samarbeta med vänner eller 1728 01:11:15,810 --> 01:11:19,010 partners eller kollegor, kommer du att kunna skriva mycket mer 1729 01:11:19,010 --> 01:11:22,910 massiva program genom att börja träna dessa grundläggande 1730 01:11:22,910 --> 01:11:23,990 byggstenar. 1731 01:11:23,990 --> 01:11:25,550 >> Så med det sagt, varför inte vi kallar det en dag? 1732 01:11:25,550 --> 01:11:27,190 Och vi kommer att se dig på onsdag. 1733 01:11:27,190 --> 01:11:33,611 [Applåder]