1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] David J. Malan: Ok, er CS50, og det er 2 00:00:11,630 --> 00:00:14,790 start af uge to. 3 00:00:14,790 --> 00:00:16,300 Tak. 4 00:00:16,300 --> 00:00:19,000 Lad os begynde her med et telefonopkald. 5 00:00:19,000 --> 00:00:30,005 Jeg er ved at ringe 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Dette er CS50. 7 00:00:31,230 --> 00:00:33,930 For Shuttle Boy Tryk på 1. 8 00:00:33,930 --> 00:00:36,660 Til at starte forfra, skal du trykke 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. Malan: Så sagde han til Shuttle Boy Tryk på 1. 10 00:00:38,180 --> 00:00:41,560 Så vi kommer til at trykke på 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Hvad er din oprindelse? 12 00:00:43,230 --> 00:00:45,340 For quad Tryk på 1. 13 00:00:45,340 --> 00:00:47,080 Mather, tryk 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, trykke på 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, tryk 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall Tryk på 5. 17 00:00:53,210 --> 00:00:55,660 Til at starte forfra, tryk 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. Malan: Vi vil trykke 1 for quad. 19 00:00:59,590 --> 00:01:03,610 CS50: Næste rumfærgen blade dette øjeblik ved 1:10 PM, og 20 00:01:03,610 --> 00:01:09,820 derefter at 1:20 PM. 01:30, 13:40 21 00:01:09,820 --> 00:01:12,030 Det er CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. Malan: Så dette er CS50 stemme. 23 00:01:15,570 --> 00:01:18,030 Og det er et eksempel på den slags afsluttende projekter, 24 00:01:18,030 --> 00:01:19,500 Du kan f.eks bide mod 25 00:01:19,500 --> 00:01:20,600 I slutningen af ​​semesteret. 26 00:01:20,600 --> 00:01:23,840 For eksempel findes der shuttleboy.cs50.net - 27 00:01:23,840 --> 00:01:28,200 faktisk et projekt, som jeg først skrev efter at have taget CS51 28 00:01:28,200 --> 00:01:29,740 tilbage, da jeg var en undergraduate. 29 00:01:29,740 --> 00:01:32,250 Og inspirationen her var dengang, alle de havde var 30 00:01:32,250 --> 00:01:34,320 de trykte shuttle bus tidsplaner, og der var ingen 31 00:01:34,320 --> 00:01:35,970 begrebet kigge tingene op online. 32 00:01:35,970 --> 00:01:38,730 Og så jeg slags due i en weekend, hældes gennem 33 00:01:38,730 --> 00:01:41,460 trykt tidsplan, og porterede den til et edb-program. 34 00:01:41,460 --> 00:01:43,790 Dengang skete det computerprogram, der skal skrives 35 00:01:43,790 --> 00:01:47,110 i C. Og du faktisk kørte det ved at skrive Shuttle Boy på en 36 00:01:47,110 --> 00:01:48,600 blinkende bede ligesom vi har gjort hidtil. 37 00:01:48,600 --> 00:01:50,450 Men i årenes løb, er det udviklet sig til en øjeblikkelig 38 00:01:50,450 --> 00:01:51,390 messaging bot. 39 00:01:51,390 --> 00:01:53,970 Det er udviklet for nylig på denne hjemmeside, i en 40 00:01:53,970 --> 00:01:57,720 SMS-baseret værktøj, samt i denne stemme-baseret værktøj. 41 00:01:57,720 --> 00:02:00,170 Og det er at antyde den slags ting, som du kan 42 00:02:00,170 --> 00:02:02,380 gøre for dig selv ved semesters afslutning. 43 00:02:02,380 --> 00:02:05,490 >> For eksempel, der SMS version af Shuttle Boy sker 44 00:02:05,490 --> 00:02:06,510 til at fungere som følger. 45 00:02:06,510 --> 00:02:10,880 Hvis det på din mobiltelefon, kan du sende en SMS til 41.411 og 46 00:02:10,880 --> 00:02:14,300 derefter sende den særlige symbol sboy, for Shuttle Boy, 47 00:02:14,300 --> 00:02:18,350 efterfulgt af A og B, hvor A er en oprindelse og B er en 48 00:02:18,350 --> 00:02:19,070 destination - 49 00:02:19,070 --> 00:02:21,030 for eksempel Boylston Space Quad - 50 00:02:21,030 --> 00:02:23,330 hvad du skal komme tilbage inden for få sekunder er en tekst 51 00:02:23,330 --> 00:02:25,820 besked fra Shuttle Boy fortæller dig præcis, hvornår den 52 00:02:25,820 --> 00:02:28,990 næste par pendulkørsler er, fra dette punkt A går til at 53 00:02:28,990 --> 00:02:29,640 punkt B. 54 00:02:29,640 --> 00:02:32,510 Og det er en mere generel eksempel på, hvad der er kendt som 55 00:02:32,510 --> 00:02:33,920 hjælp af en API. 56 00:02:33,920 --> 00:02:36,930 >> Så for eksempel, er dette her bare shuttleboy.cs50.net, den 57 00:02:36,930 --> 00:02:39,300 egentlig webbaseret inkarnation af dette. 58 00:02:39,300 --> 00:02:42,480 Men de data, der understreger dette og andre programmer, der CS50 59 00:02:42,480 --> 00:02:45,560 har udviklet er alle udsat for alle her i form 60 00:02:45,560 --> 00:02:49,340 af API'er. application programming interfaces 61 00:02:49,340 --> 00:02:52,220 Og det er bare en fancy måde at sige, at folk kan lide vi på 62 00:02:52,220 --> 00:02:56,010 Internettet og andre har brugt en del tid på at oprette 63 00:02:56,010 --> 00:02:59,970 software, som du kan bruge for at få fat i data fra os og 64 00:02:59,970 --> 00:03:02,510 derefter bygge dine egne programmer på toppen 65 00:03:02,510 --> 00:03:03,840 af det pågældende datasæt. 66 00:03:03,840 --> 00:03:06,610 Så for eksempel, denne Shuttle Boy API side her, som 67 00:03:06,610 --> 00:03:09,390 sker for at være i CS50 manual det væsentlige dokumenter 68 00:03:09,390 --> 00:03:13,080 hvordan du kan gå om at spørge CS50 servere til data. 69 00:03:13,080 --> 00:03:16,240 For eksempel, hvis du er fortrolig med CSV-filer, komma 70 00:03:16,240 --> 00:03:18,940 separeret værdier, er disse lige slags hurtig og beskidt 71 00:03:18,940 --> 00:03:20,310 Excel-lignende filer. 72 00:03:20,310 --> 00:03:23,110 Så du kan bede Shuttle Boy til alle data om alle de 73 00:03:23,110 --> 00:03:25,090 huse og deres GPS-koordinater, og du får 74 00:03:25,090 --> 00:03:27,300 tilbage i det væsentlige et regneark som det at 75 00:03:27,300 --> 00:03:30,820 du kan så læse i et program på din egen og derefter 76 00:03:30,820 --> 00:03:33,250 generere resultater, ligesom Shuttle Boy selv 77 00:03:33,250 --> 00:03:34,160 sker at gøre. 78 00:03:34,160 --> 00:03:37,030 For de mere velkendte, mere moderne datarepræsentationer 79 00:03:37,030 --> 00:03:39,420 omfatte JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Noget vil komme tilbage til dig mod 81 00:03:40,620 --> 00:03:41,720 I slutningen af ​​semesteret. 82 00:03:41,720 --> 00:03:45,440 >> Men igen, dette er blot et af flere af CS50 egen API'er. 83 00:03:45,440 --> 00:03:48,320 Og det spændende er nu, i disse dage, Facebook og 84 00:03:48,320 --> 00:03:51,110 Twitter og Google og stort set hver populære websted ud 85 00:03:51,110 --> 00:03:54,130 der har en form for API, hvilket betyder, at hvis du læser 86 00:03:54,130 --> 00:03:56,620 dokumentation på deres hjemmeside, du tilmelder dig en 87 00:03:56,620 --> 00:03:59,980 konto, kan du så begynde at skrive software på toppen af 88 00:03:59,980 --> 00:04:03,680 de redskaber eller data, som selskab der giver. 89 00:04:03,680 --> 00:04:06,210 Og så en af ​​vores egne undervisning stipendiater et par år tilbage 90 00:04:06,210 --> 00:04:07,620 skrev en Mac-version af dette. 91 00:04:07,620 --> 00:04:10,990 Så på på linket Mac her øverst til venstre, kan du faktisk 92 00:04:10,990 --> 00:04:13,940 downloade en Mac OS widget, der kører på din egen Mac til at gøre det 93 00:04:13,940 --> 00:04:15,040 samme slags ting. 94 00:04:15,040 --> 00:04:17,970 Så det handler om at bygge oven på datasæt som disse. 95 00:04:17,970 --> 00:04:21,839 Men mere om det i slutningen af ​​semestret. 96 00:04:21,839 --> 00:04:25,780 >> Så lad os dykke i virkelig hurtig til en fejl, bare for at slags får 97 00:04:25,780 --> 00:04:27,990 tingene varmes op i dag, og tænker tilbage på nogle af de 98 00:04:27,990 --> 00:04:29,660 ting, vi så på i sidste uge. 99 00:04:29,660 --> 00:04:32,840 Især lad mig gå videre og trække op, sige, 100 00:04:32,840 --> 00:04:34,080 dette eksempel. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, det er tilgængeligt på kursets hjemmeside, hvis du vil 102 00:04:37,500 --> 00:04:40,250 gerne hente det og stikke omkring dig selv. 103 00:04:40,250 --> 00:04:43,520 Men lad os zoome ind her på dette forholdsvis korte program, og bare 104 00:04:43,520 --> 00:04:46,550 en super-hurtig resumé af nogle af de grundlæggende byggesten, 105 00:04:46,550 --> 00:04:48,880 vi virkelig vil bare begynde at tage for givet. 106 00:04:48,880 --> 00:04:51,860 >> Så den blå ting, i linjerne 1 til 9 er bare 107 00:04:51,860 --> 00:04:53,670 softball spørgsmål. 108 00:04:53,670 --> 00:04:54,590 Så dette er blot kommentarer. 109 00:04:54,590 --> 00:04:56,230 De har ingen funktionel betydning. 110 00:04:56,230 --> 00:04:58,460 Men de er kommentarer i den forstand, at de er bemærker, at 111 00:04:58,460 --> 00:05:02,010 I, det menneskelige, til mig selv, så i foredrag og efter 112 00:05:02,010 --> 00:05:04,340 foredrag, kan jeg faktisk huske, hvad dette program 113 00:05:04,340 --> 00:05:07,120 gør uden at skulle læse igennem den linje for linje og 114 00:05:07,120 --> 00:05:08,990 genskabe historien i mit sind. 115 00:05:08,990 --> 00:05:11,000 Desuden, hvis jeg aflevere dette program til en anden lignende 116 00:05:11,000 --> 00:05:14,420 dig, er det meget klarere for dig, på grund af kommentarer som denne, 117 00:05:14,420 --> 00:05:16,680 hvad programmet er faktisk laver, eller i det mindste hvad 118 00:05:16,680 --> 00:05:18,210 Programmet er meningen at gøre. 119 00:05:18,210 --> 00:05:20,760 Hvorvidt det er korrekt, er en helt anden sag. 120 00:05:20,760 --> 00:05:25,040 Nu, i C, med flere linjer kommentarer, minde om, at på linje 121 00:05:25,040 --> 00:05:27,880 en her er det magiske symbol, / *. 122 00:05:27,880 --> 00:05:30,380 Det betyder her kommer starten på en kommentar. 123 00:05:30,380 --> 00:05:34,560 Og intet andet spørgsmål, indtil du når til slutningen terminator, 124 00:05:34,560 --> 00:05:36,700 som er * /, det modsatte. 125 00:05:36,700 --> 00:05:39,120 Så det faktum, at jeg har 80-nogle underlige stjerner her fra 126 00:05:39,120 --> 00:05:41,550 venstre til højre er egentlig bare en æstetisk detalje. 127 00:05:41,550 --> 00:05:43,370 Det ikke har nogen funktionel betydning. 128 00:05:43,370 --> 00:05:44,490 >> Nu hvor omkring linje 11? 129 00:05:44,490 --> 00:05:46,940 Hvad betyder dette gøre i lægmandssprog? 130 00:05:51,560 --> 00:05:52,540 Hvad er det? 131 00:05:52,540 --> 00:05:54,280 PUBLIKUM: Omfatter standard. 132 00:05:54,280 --> 00:05:54,740 DAVID J. Malan: OK, godt. 133 00:05:54,740 --> 00:05:57,500 Således er den stdio.h bibliotek. 134 00:05:57,500 --> 00:05:58,230 Så hvad betyder det? 135 00:05:58,230 --> 00:06:01,570 Nå, indeni, fil, stdio.h, er en hel bunke af 136 00:06:01,570 --> 00:06:03,320 funktionserklæringer - 137 00:06:03,320 --> 00:06:05,290 det vil sige, kode, som en anden skrev. 138 00:06:05,290 --> 00:06:08,160 Og et perfekt eksempel på en funktion, der er angivet i 139 00:06:08,160 --> 00:06:10,250 stdio.h er - 140 00:06:10,250 --> 00:06:11,980 som favorit ved nu? 141 00:06:11,980 --> 00:06:14,300 Så printf, en af ​​de mest almindelige brug, bestemt 142 00:06:14,300 --> 00:06:15,840 tidligt, fra at biblioteket er der. 143 00:06:15,840 --> 00:06:19,290 Hvis jeg udelukker, at linje kode, der Dunk vil råbe 144 00:06:19,290 --> 00:06:22,550 på mig noget om at bruge en sort symbol. 145 00:06:22,550 --> 00:06:24,930 Sort Noget er nok nøgleordet, fordi 146 00:06:24,930 --> 00:06:27,770 Vi har ikke informeret compiler hvad printf ser 147 00:06:27,770 --> 00:06:29,230 gerne medmindre vi medtage denne linje. 148 00:06:29,230 --> 00:06:31,830 Og mere ned på jorden, virkelig, hvad denne linje siger, er 149 00:06:31,830 --> 00:06:34,890 åbne denne fil, stdio.h, hvor det er på serverens 150 00:06:34,890 --> 00:06:38,200 harddisk eller apparatets harddisk, og copy-paste det 151 00:06:38,200 --> 00:06:40,240 lige der i min fil, uden at jeg 152 00:06:40,240 --> 00:06:41,730 at skulle gøre det manuelt. 153 00:06:41,730 --> 00:06:44,420 >> Nu, når vi kommer herned til main, vi inden længe vil begynde 154 00:06:44,420 --> 00:06:46,900 drilleri fra hinanden hvad int og hvilke hulrum er. 155 00:06:46,900 --> 00:06:48,430 Men for nu, lad os se på de tre linjer 156 00:06:48,430 --> 00:06:50,350 inden for 15 til 17. 157 00:06:50,350 --> 00:06:52,250 Det her jeg krav på som buggy. 158 00:06:52,250 --> 00:06:54,900 Linje 7 i mine kommentarer, siger "Bør udskrive 10 159 00:06:54,900 --> 00:06:59,410 asterisker men ikke. "Hvorfor dette ikke udskrives, i virkeligheden, 160 00:06:59,410 --> 00:07:01,097 10 sådanne stjerner? 161 00:07:01,097 --> 00:07:02,347 PUBLIKUM: [uhørlig]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. Malan: Præcis. 163 00:07:05,800 --> 00:07:08,720 Så bemærke, at vi er begyndt at tælle fra 0. 164 00:07:08,720 --> 00:07:10,780 Og det er faktisk en konvention i programmering og 165 00:07:10,780 --> 00:07:13,230 datalogi mere generelt begynder at tælle 166 00:07:13,230 --> 00:07:14,610 fra 0 i stedet for 1. 167 00:07:14,610 --> 00:07:16,690 Og det er virkelig bare skyldes, at der for 168 00:07:16,690 --> 00:07:18,940 Fx når vi havde otte mennesker op på scenen, når 169 00:07:18,940 --> 00:07:20,680 der var ingen, hæve deres hånd, var de 170 00:07:20,680 --> 00:07:22,340 alle effektivt nuller. 171 00:07:22,340 --> 00:07:24,260 Og så er det bare sådan en computer konvention, så, 172 00:07:24,260 --> 00:07:26,030 derfor, at begynde at tælle fra 0. 173 00:07:26,030 --> 00:07:29,130 Hvis det er det laveste antal, du kan repræsentere i binær. 174 00:07:29,130 --> 00:07:32,270 >> Så her har vi begyndt at initialisere i til 0. 175 00:07:32,270 --> 00:07:34,230 Vi har sat i lig med 0. 176 00:07:34,230 --> 00:07:37,780 Men da jeg lavede denne fejl her, siger jeg er mindre end eller 177 00:07:37,780 --> 00:07:38,820 lig med 10. 178 00:07:38,820 --> 00:07:41,700 Men hvis du tror, ​​igennem, hvis jeg starter på 0 og derefter går jeg 179 00:07:41,700 --> 00:07:46,410 op til 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, jeg faktisk går til 180 00:07:46,410 --> 00:07:49,980 udskrive 11 stjerner til skærmen, fordi jeg har gået op 181 00:07:49,980 --> 00:07:52,410 til og lig med 10. 182 00:07:52,410 --> 00:07:55,090 Så den nemme løsning her derefter er hvad? 183 00:07:55,090 --> 00:07:56,070 PUBLIKUM: [uhørlig]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. Malan: Bare ændre den til mindre end. 185 00:07:57,350 --> 00:07:59,700 Hvis du virkelig vil, kan du gøre det her. 186 00:07:59,700 --> 00:08:01,370 Men generelt er det ildeset. 187 00:08:01,370 --> 00:08:04,020 Og så begynder at tælle fra 0 er bare noget du bør 188 00:08:04,020 --> 00:08:05,510 typisk vænne sig til. 189 00:08:05,510 --> 00:08:07,810 Nu, hvad hele denne konstruktion i sig selv? 190 00:08:07,810 --> 00:08:10,640 Denne linje 15 demarks en for-løkke. 191 00:08:10,640 --> 00:08:12,510 Så for er ikke en funktion. 192 00:08:12,510 --> 00:08:13,640 Det er bare en erklæring. 193 00:08:13,640 --> 00:08:16,180 Det er en looping konstruktion, ligesom vi så det i Scratch. 194 00:08:16,180 --> 00:08:17,600 Og det har tre dele. 195 00:08:17,600 --> 00:08:19,740 Bemærk, at der er den første del til 196 00:08:19,740 --> 00:08:21,350 til venstre semikolon. 197 00:08:21,350 --> 00:08:24,200 Der er den midterste del mellem de to semikoloner. 198 00:08:24,200 --> 00:08:26,250 Og så er der den højre del til højre 199 00:08:26,250 --> 00:08:27,640 i den anden semikolon. 200 00:08:27,640 --> 00:08:31,822 Nu er den første af disse gør hvad? 201 00:08:31,822 --> 00:08:33,679 PUBLIKUM: [uhørlig]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. Malan: Tilbage er der? 203 00:08:34,270 --> 00:08:34,816 Ja? 204 00:08:34,816 --> 00:08:35,980 PUBLIKUM: Initialisering. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. Malan: Initialisering. 206 00:08:36,850 --> 00:08:37,840 Så hvad betyder dette? 207 00:08:37,840 --> 00:08:40,690 Vi har erklæret en variabel kaldet i. 208 00:08:40,690 --> 00:08:43,840 Det er af typen int, fordi jeg har angivet int i. 209 00:08:43,840 --> 00:08:46,470 Og jeg initialisering i til værdien 0. 210 00:08:46,470 --> 00:08:47,730 Så hvad er det egentlig sige? 211 00:08:47,730 --> 00:08:50,680 Det er effektivt at sige til computeren hey, giv mig nok 212 00:08:50,680 --> 00:08:53,660 hukommelse, nok RAM, til at passe et nummer, og derefter sætte 213 00:08:53,660 --> 00:08:56,130 nummer 0 i denne bid af RAM. 214 00:08:56,130 --> 00:08:59,100 Og som en sidebemærkning, er hvor stor en int typisk, i det mindste indenfor 215 00:08:59,100 --> 00:09:00,280 af apparatet? 216 00:09:00,280 --> 00:09:01,000 PUBLIKUM: 32 bit. 217 00:09:01,000 --> 00:09:01,670 David J. Malan: 32 bit. 218 00:09:01,670 --> 00:09:04,890 Så det betyder at give mig 32 bits, ellers kendt som 4 byte, 219 00:09:04,890 --> 00:09:07,250 og sætte værdien 0 i det, som er temmelig let, fordi 220 00:09:07,250 --> 00:09:09,110 Det betyder blot indstille alle bits til 0. 221 00:09:09,110 --> 00:09:11,690 >> Så nu, den anden del her er betingelsen. 222 00:09:11,690 --> 00:09:14,590 Og tilstanden, som navnet antyder, er hvad der kontrolleres 223 00:09:14,590 --> 00:09:18,100 igen og igen og igen, om det er sandt eller falsk. 224 00:09:18,100 --> 00:09:21,410 Så dette er bare at sige gøre følgende linjer kode - 225 00:09:21,410 --> 00:09:23,950 nemlig linje 16, fordi det er den eneste indrykket en 226 00:09:23,950 --> 00:09:24,820 nedenunder - 227 00:09:24,820 --> 00:09:26,980 så længe i er mindre end 10. 228 00:09:26,980 --> 00:09:30,520 Og efter hver iteration gennem denne løkke, skal du gøre 229 00:09:30,520 --> 00:09:33,840 optælling, som i dette tilfælde er i + +. 230 00:09:33,840 --> 00:09:35,580 Nu, behøver det ikke at være i + +. 231 00:09:35,580 --> 00:09:37,610 Det kunne være i -. 232 00:09:37,610 --> 00:09:39,860 Men hvis jeg gjorde det, hvad den adfærd går 233 00:09:39,860 --> 00:09:41,370 være af dette program? 234 00:09:41,370 --> 00:09:42,290 PUBLIKUM: Det kommer til at være en uendelig løkke. 235 00:09:42,290 --> 00:09:44,060 DAVID J. Malan: Det kommer til at være en slags uendelig løkke, 236 00:09:44,060 --> 00:09:47,720 medmindre vi får heldige efter negativ 2 mia eller deromkring. 237 00:09:47,720 --> 00:09:51,320 Måske tingene skal ombrydes, blot i kraft af den begrænsede 238 00:09:51,320 --> 00:09:53,930 Antallet af bit, som vi har tildelt til en int. 239 00:09:53,930 --> 00:09:56,270 Men det er helt sikkert kommer til at gentage langt mere end 10 og 240 00:09:56,270 --> 00:09:58,630 sikkert mere end 11 gange her. 241 00:09:58,630 --> 00:10:02,240 >> Og nu, lige som en sidebemærkning, indse, at jeg + + og i - 242 00:10:02,240 --> 00:10:04,420 er virkelig bare syntaktisk sukker. 243 00:10:04,420 --> 00:10:07,210 Det er bare stenografi notation for, hvad der er lidt mere 244 00:10:07,210 --> 00:10:08,720 udtrykkeligt er skrevet som følger: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Som er identisk med i + +. 247 00:10:13,460 --> 00:10:15,860 Det bare slags ser pænere at sige jeg + +. 248 00:10:15,860 --> 00:10:17,490 Det er mere kortfattet, mere læsbar. 249 00:10:17,490 --> 00:10:19,030 Og så de fleste mennesker gøre det i stedet. 250 00:10:19,030 --> 00:10:21,840 Men dette er identiske funktionelt til 251 00:10:21,840 --> 00:10:22,900 hvad vi lige har set. 252 00:10:22,900 --> 00:10:27,770 Så kort sagt, er den nemme løsning her bare for at sige gentage i 253 00:10:27,770 --> 00:10:30,690 fra 0 hele vejen op til mindre end 10. 254 00:10:30,690 --> 00:10:32,700 Og så vil vi faktisk få 10 stjerner. 255 00:10:32,700 --> 00:10:33,430 >> Så lad os prøve dette. 256 00:10:33,430 --> 00:10:35,310 Jeg vil åbne terminalen i bunden. 257 00:10:35,310 --> 00:10:37,420 Lad mig gå ind i den mappe, at dette er i. 258 00:10:37,420 --> 00:10:40,030 Og jeg har tænkt mig at kompilere den manuelt med Dunk for nu. 259 00:10:40,030 --> 00:10:44,880 Og jeg har tænkt mig at kompilere dette som buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 Og nu buggy1, hvorfor er der ingen sådan fil eller mappe 261 00:10:50,280 --> 00:10:52,026 kaldet buggy1? 262 00:10:52,026 --> 00:10:53,850 PUBLIKUM: [uhørlig]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. Malan: Yeah. 264 00:10:54,240 --> 00:10:55,420 Så det er faktisk kaldt a.out. 265 00:10:55,420 --> 00:10:57,480 Så huske, hvis du bare køre Dunk, hvor Dunk er det 266 00:10:57,480 --> 00:11:00,420 compiler, og du ikke angiver det navn, du vil 267 00:11:00,420 --> 00:11:03,550 give dit program, går det til standard at a.out. 268 00:11:03,550 --> 00:11:05,030 Så ja, hvis jeg gør ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 Og jeg didn't - den sort-hvide emne nogle af 271 00:11:07,680 --> 00:11:08,840 du står er blevet rettet. 272 00:11:08,840 --> 00:11:10,670 Men lad mig gøre det. 273 00:11:10,670 --> 00:11:14,570 Der har vi a.out på venstre side der. 274 00:11:14,570 --> 00:11:17,360 Så vi er nødt til at køre a.out stedet for buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Så lad mig gå videre og gøre det. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Enter. 277 00:11:22,840 --> 00:11:26,160 Og jeg tilsyneladende ikke gøre hvad? 278 00:11:26,160 --> 00:11:26,620 PUBLIKUM: Gem. 279 00:11:26,620 --> 00:11:27,390 DAVID J. Malan: Gem mit fil. 280 00:11:27,390 --> 00:11:31,520 Så det er let løses ved at trykke Control S, eller gå til 281 00:11:31,520 --> 00:11:33,450 Filer, Gem, ligesom i de fleste programmer. 282 00:11:33,450 --> 00:11:36,360 Lad mig gå ned her, rydde skærmen, kør den igen. 283 00:11:36,360 --> 00:11:37,960 Og der er stadig en fejl. 284 00:11:37,960 --> 00:11:41,618 Så hvad der foregår - 285 00:11:41,618 --> 00:11:42,980 PUBLIKUM: Du har ikke kompilere. 286 00:11:42,980 --> 00:11:44,040 DAVID J. Malan: Ah, godt. 287 00:11:44,040 --> 00:11:45,010 Jeg har ikke kompilere det. 288 00:11:45,010 --> 00:11:47,250 Ligesom en idiot, jeg ser på koden for at se, hvad der er galt. 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 Og Pyha, gemt. 291 00:11:52,640 --> 00:11:55,090 >> Så det ser lidt grimt, fordi der ikke er nogen ny linje 292 00:11:55,090 --> 00:11:55,970 hvor som helst i programmet. 293 00:11:55,970 --> 00:11:57,390 Men igen, det er bare en æstetisk detalje. 294 00:11:57,390 --> 00:11:59,430 Og i hvert fald hvis vi tæller dem ud, bør vi 295 00:11:59,430 --> 00:12:01,160 nu se 10 sådanne stjerner. 296 00:12:01,160 --> 00:12:03,260 Nå, hvad med dette andet warm-up eksempel? 297 00:12:03,260 --> 00:12:07,750 Så i buggy2, hævder jeg, at denne version også vil udskrive 298 00:12:07,750 --> 00:12:10,110 10 stjerner, én pr linje. 299 00:12:10,110 --> 00:12:12,340 Så denne gang har jeg en ny linje, bare for at gøre 300 00:12:12,340 --> 00:12:13,520 tingene lidt pænere. 301 00:12:13,520 --> 00:12:15,410 Men i stedet, hvad jeg får, er dette. 302 00:12:15,410 --> 00:12:19,590 Så lad mig gøre klang buggy2.c, Enter. 303 00:12:19,590 --> 00:12:21,790 Nu er det igen hedder a.out. 304 00:12:21,790 --> 00:12:23,130 Enter. 305 00:12:23,130 --> 00:12:26,900 Jeg ser kun én ny linje, er kun det allersidste nye linje, 306 00:12:26,900 --> 00:12:29,370 flytter min prompt til den næste linje. 307 00:12:29,370 --> 00:12:32,660 Og alligevel tydeligt har jeg udskrivning *, så en ny linje, 308 00:12:32,660 --> 00:12:33,990 *, Så en ny linje. 309 00:12:33,990 --> 00:12:35,490 Men hvad er fejlen her? 310 00:12:35,490 --> 00:12:35,974 Ja? 311 00:12:35,974 --> 00:12:37,224 PUBLIKUM: [uhørlig]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. Malan: Præcis. 313 00:12:40,470 --> 00:12:44,110 Så i modsætning til nogle sprog, som Python, hvor indrykning 314 00:12:44,110 --> 00:12:46,030 faktisk har funktionel betydning, i et 315 00:12:46,030 --> 00:12:47,150 sprog som C - 316 00:12:47,150 --> 00:12:49,140 som vi vil se, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 indrykningen er virkelig bare for mennesker 'fordel. 318 00:12:51,940 --> 00:12:55,690 Så det faktum, at jeg har indrykket linie 16 og 17 ser flot ud, 319 00:12:55,690 --> 00:12:57,530 men det har ingen funktionel betydning her. 320 00:12:57,530 --> 00:13:00,700 Hvis jeg vil begge linier at udføre som en del af for 321 00:13:00,700 --> 00:13:05,140 loop, så jeg skal vedlægge dem i krøllede parenteser ved at gøre dette. 322 00:13:05,140 --> 00:13:08,540 Du kan kun klippe det hjørne og udelade de krøllede parenteser, hvis 323 00:13:08,540 --> 00:13:10,036 hvad er tilfældet? 324 00:13:10,036 --> 00:13:10,410 PUBLIKUM: Blot én linje. 325 00:13:10,410 --> 00:13:11,130 DAVID J. Malan: Bare én linje. 326 00:13:11,130 --> 00:13:15,280 Så det er bare en slags pæn slags syntaks detaljer, så 327 00:13:15,280 --> 00:13:17,900 at du ikke spilder tid på at skrive tre linjer, hvoraf to er 328 00:13:17,900 --> 00:13:20,040 krøllede parenteser, bare for at skrive en eneste linje kode. 329 00:13:20,040 --> 00:13:21,650 Men hvis du har to eller flere linjer, vi 330 00:13:21,650 --> 00:13:22,860 faktisk nødt til at gøre dette. 331 00:13:22,860 --> 00:13:24,210 >> Så nu lad mig gemme dette. 332 00:13:24,210 --> 00:13:27,140 Lad mig gå videre og igen køre Dunk. 333 00:13:27,140 --> 00:13:31,375 Så lad mig køre a.out, og nu får jeg dem én pr linje. 334 00:13:31,375 --> 00:13:33,670 Nu a.out igen er sådan en dum navn til et program. 335 00:13:33,670 --> 00:13:37,500 Hvordan kan jeg fortælle Dunk til rent faktisk at give mig et filnavn 336 00:13:37,500 --> 00:13:39,820 der er mere brugervenlig, ligesom buggy2 selv? 337 00:13:43,200 --> 00:13:44,466 Lidt mere klart? 338 00:13:44,466 --> 00:13:45,220 PUBLIKUM: [uhørlig]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. Malan: OK, så jeg kan faktisk tage det meget 340 00:13:47,810 --> 00:13:51,000 brugervenlig genvej og bare skrive lave buggy2. 341 00:13:51,000 --> 00:13:53,840 Jeg kan ikke specificere. C. i denne sag, og tryk på Enter. 342 00:13:53,840 --> 00:13:58,530 Og hvad gør gør, er det kompilerer buggy2.c for mig af 343 00:13:58,530 --> 00:14:00,260 beder Dunk at gøre det. 344 00:14:00,260 --> 00:14:05,100 Specifikt er det kalder Dunk, det kører Dunk hjælp måde mere 345 00:14:05,100 --> 00:14:08,540 kommandolinjeargumenter eller kontakter end jeg egentlig har brug for. 346 00:14:08,540 --> 00:14:11,270 Med tiden vil vi vende tilbage til, hvad alle disse forskellige 347 00:14:11,270 --> 00:14:13,810 kryptiske sammensatte udtryk betyder. 348 00:14:13,810 --> 00:14:16,910 Men for nu, er der bare gemme mig for besværet med 349 00:14:16,910 --> 00:14:19,600 skulle huske og skulle skrive ud alle dem 350 00:14:19,600 --> 00:14:21,150 forskellige bindestreg udtryk. 351 00:14:21,150 --> 00:14:23,240 Og opadrettede af det i sidste ende er 352 00:14:23,240 --> 00:14:25,900 at nu har jeg buggy2. 353 00:14:25,900 --> 00:14:27,480 Hvis jeg ønsker at gøre det manuelt, selv om, jeg 354 00:14:27,480 --> 00:14:28,775 kan i stedet gøre det - 355 00:14:28,775 --> 00:14:34,110 klang-o buggy2 og derefter buggy2.c. 356 00:14:34,110 --> 00:14:37,980 Og det vil ligeledes give mig en fil kaldet buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Så kort sagt, er Dunk compileren. 358 00:14:39,710 --> 00:14:43,080 Lav er blot et brugervenligt værktøj, som vi vil bruge mere 359 00:14:43,080 --> 00:14:44,420 og mere, fordi det bare begynder at 360 00:14:44,420 --> 00:14:47,330 forenkle tingene for os. 361 00:14:47,330 --> 00:14:49,430 Og vi returnere 0 endelig. 362 00:14:49,430 --> 00:14:51,890 For nu, for bare, men vi vil begynde at drille den del 363 00:14:51,890 --> 00:14:52,930 dag og på onsdag. 364 00:14:52,930 --> 00:14:55,560 Eventuelle spørgsmål om noget af dette? 365 00:14:55,560 --> 00:14:56,450 Ja? 366 00:14:56,450 --> 00:14:58,234 PUBLIKUM: [uhørligt] 367 00:14:58,234 --> 00:15:00,020 ls i anførselstegn der? 368 00:15:00,020 --> 00:15:01,710 DAVID J. Malan: OK. 369 00:15:01,710 --> 00:15:05,880 Når jeg maskinskrevne ls i anførselstegn, det var mig laver nogle magi 370 00:15:05,880 --> 00:15:07,160 bag kulisserne for at rette en fejl. 371 00:15:07,160 --> 00:15:09,370 Jeg glemte, ligesom vi har fortalt mange af jer på 372 00:15:09,370 --> 00:15:11,600 diskussionsfora, at gøre - 373 00:15:11,600 --> 00:15:17,220 vi vil gøre det nu - sudo yum-y update appliance50. 374 00:15:17,220 --> 00:15:19,790 Whoops, at det er stavet rigtigt. 375 00:15:19,790 --> 00:15:23,240 Så apparatet er som et operativsystem. 376 00:15:23,240 --> 00:15:25,650 Det kører dette operativsystem kaldet Fedora. 377 00:15:25,650 --> 00:15:27,450 Og nu på grund af min langsom internetforbindelse, har jeg 378 00:15:27,450 --> 00:15:28,260 virkelig spules det. 379 00:15:28,260 --> 00:15:31,620 Så kører sudo yum update, som vi fortæller jer at gøre i 380 00:15:31,620 --> 00:15:34,080 problem sæt, i det væsentlige kan lide at køre automatiske opdateringer 381 00:15:34,080 --> 00:15:35,420 i Mac OS eller Windows. 382 00:15:35,420 --> 00:15:37,280 Og årsagen til at køre dette ved selve starten af 383 00:15:37,280 --> 00:15:39,640 problem sæt er fordi da vi skabte apparatet, jeg 384 00:15:39,640 --> 00:15:42,480 rodet op, og jeg ved et uheld lavet alle dine programmer ser 385 00:15:42,480 --> 00:15:45,210 sort på en sort skærm, hvilket er grunden til du ikke kan se dem 386 00:15:45,210 --> 00:15:45,860 som standard. 387 00:15:45,860 --> 00:15:48,020 Men den nyeste version af apparatet løser dette. 388 00:15:48,020 --> 00:15:50,500 Og jeg ordner i løbet af pause, når jeg har internet 389 00:15:50,500 --> 00:15:51,280 tilslutningsmuligheder. 390 00:15:51,280 --> 00:15:54,630 >> Så de citater bare skjuler min fejl, meget diskret, 391 00:15:54,630 --> 00:15:55,730 tilsyneladende. 392 00:15:55,730 --> 00:15:56,980 Andre spørgsmål? 393 00:15:59,750 --> 00:16:00,668 Ja? 394 00:16:00,668 --> 00:16:02,012 PUBLIKUM: Hvor gør komme fra? 395 00:16:02,012 --> 00:16:03,810 [Uhørlig] 396 00:16:03,810 --> 00:16:04,280 DAVID J. Malan: Godt spørgsmål. 397 00:16:04,280 --> 00:16:05,460 Hvor gør komme fra? 398 00:16:05,460 --> 00:16:09,390 Det er et Linux-program, der har eksisteret i mange år, lang 399 00:16:09,390 --> 00:16:10,570 før CS50. 400 00:16:10,570 --> 00:16:12,930 Og det kommer med et operativsystem som Fedora. 401 00:16:12,930 --> 00:16:14,830 Den kommer ikke fra CS50 biblioteket. 402 00:16:14,830 --> 00:16:17,560 Faktisk er de eneste ting, der kommer fra CS50 biblioteket 403 00:16:17,560 --> 00:16:20,470 hidtil, at vi har set, er GetString, GetInt, som alle 404 00:16:20,470 --> 00:16:25,550 dem Få funktioner, og ordet streng, og til en vis 405 00:16:25,550 --> 00:16:26,575 grad ordet bool. 406 00:16:26,575 --> 00:16:29,180 Men vi vil drille at bortset når vi dykke ned i CS50 407 00:16:29,180 --> 00:16:30,580 selve apparatet. 408 00:16:30,580 --> 00:16:32,820 >> Så ja, endnu et spørgsmål her. 409 00:16:32,820 --> 00:16:36,636 PUBLIKUM: Når du sagde gøre, og derefter buggy, hvordan fungerer det 410 00:16:36,636 --> 00:16:39,980 computer vide [uhørligt]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. Malan: Godt spørgsmål. 412 00:16:40,520 --> 00:16:43,830 Så når du bare køre make buggy1 eller gøre buggy2, hvordan 413 00:16:43,830 --> 00:16:45,220 gør det? 414 00:16:45,220 --> 00:16:49,900 Så som standard, hvis du skriver lave buggy1, lave ser for en 415 00:16:49,900 --> 00:16:52,330 fil kaldet buggy1.c. 416 00:16:52,330 --> 00:16:55,570 Og så udfører de passende klang kommandoer, 417 00:16:55,570 --> 00:17:00,380 derved tilsidesætte standard output fil kaldet a.out. 418 00:17:00,380 --> 00:17:03,670 Faktisk, hvis vi ser på det, der gør, hvad - 419 00:17:03,670 --> 00:17:04,839 lad os afslutte dette. 420 00:17:04,839 --> 00:17:09,530 Hvis vi ser på, hvad gør faktisk gør, gør buggy2, 421 00:17:09,530 --> 00:17:10,470 det er allerede ajour. 422 00:17:10,470 --> 00:17:13,020 Så lad mig fjerne rm kommandoen, 423 00:17:13,020 --> 00:17:14,319 program jeg skrev før. 424 00:17:14,319 --> 00:17:17,319 Typing Y-E-S for at bekræfte, at jeg ønsker at fjerne det. 425 00:17:17,319 --> 00:17:20,480 Hvis jeg nu gør, bemærke, at i denne meget lange linje, 426 00:17:20,480 --> 00:17:22,980 der er denne sidste ting her,-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Alle gøre gør passerer dette argument, så at sige, at 428 00:17:26,959 --> 00:17:29,665 Klang, så jeg ikke behøver at skrive det selv. 429 00:17:29,665 --> 00:17:32,660 >> Okay, så en hurtig par administrative 430 00:17:32,660 --> 00:17:33,470 annonceringer. 431 00:17:33,470 --> 00:17:36,940 Så for sektioner, der officielt begyndte i det kommende 432 00:17:36,940 --> 00:17:38,970 Søndag, vil du altid vil bringe, hvis 433 00:17:38,970 --> 00:17:40,120 du har en, en bærbar computer. 434 00:17:40,120 --> 00:17:42,570 Hvis du ikke har en bærbar computer, skal du nå ud til mig af 435 00:17:42,570 --> 00:17:43,580 slippe mig en e-mail. 436 00:17:43,580 --> 00:17:44,810 Og vi vil finde ud af en arbejdsproces. 437 00:17:44,810 --> 00:17:47,100 Hvad generelt finder du i afsnit er, at de er en del 438 00:17:47,100 --> 00:17:48,770 konceptuelle, del hands-on. 439 00:17:48,770 --> 00:17:52,190 Vi vil specifikt bruge afsnit med spørgsmål, en del af 440 00:17:52,190 --> 00:17:54,110 ugens problem sæt, til at gå gennem nogle af de 441 00:17:54,110 --> 00:17:55,820 konceptuelle materiale fra forelæsning. 442 00:17:55,820 --> 00:17:57,480 Og det er alt i det aktuelle problem sæt. 443 00:17:57,480 --> 00:18:00,010 Og vi vil også dykke ned i nogle hands-on aktiviteter, undertiden 444 00:18:00,010 --> 00:18:02,190 som vil være forpligtet til at blive forelagt, til tider af 445 00:18:02,190 --> 00:18:02,830 som ikke vil. 446 00:18:02,830 --> 00:18:04,630 For eksempel, den første uge er de ment kun som en 447 00:18:04,630 --> 00:18:05,780 opvarmning motion. 448 00:18:05,780 --> 00:18:07,800 Og du vil opdage, at disse problemer er virkelig bare det. 449 00:18:07,800 --> 00:18:10,220 De er beregnet til at være temmelig lille, men ikke nødvendigvis 450 00:18:10,220 --> 00:18:13,100 trivielle programmer til at skrive, som ikke nødvendigvis er 451 00:18:13,100 --> 00:18:16,230 spændende i sig selv, men er gode muligheder for at 452 00:18:16,230 --> 00:18:19,620 øve med syntaks, med nye funktioner, i komfort af en 453 00:18:19,620 --> 00:18:21,900 sektion, hvor du har et par af dine klassekammerater til stede som 454 00:18:21,900 --> 00:18:22,870 såvel som din TF. 455 00:18:22,870 --> 00:18:26,210 >> Og hvad vi vil gøre med tiden er at bruge et værktøj kaldet CS50 Spaces, 456 00:18:26,210 --> 00:18:28,940 hvorved i stedet for bare at bruge CS50 Appliance, vil du 457 00:18:28,940 --> 00:18:32,450 i stedet gå til en webside i en browser, hvor du vil være i stand 458 00:18:32,450 --> 00:18:35,610 at skrive kode i et browservindue under sektion. 459 00:18:35,610 --> 00:18:38,240 Og så hvis du vælger, kan din undervisning fyr derefter vise 460 00:18:38,240 --> 00:18:40,980 uanset hvad det er du skriver på din skærm i din browser 461 00:18:40,980 --> 00:18:43,930 Vinduet op foran klassen, hvad enten anonymt eller 462 00:18:43,930 --> 00:18:47,250 offentligt, så han eller hun så kan gå igennem med 463 00:18:47,250 --> 00:18:50,080 dine klassekammerater hvad du gjorde godt, hvad du ikke gjorde godt. 464 00:18:50,080 --> 00:18:52,750 Og igen, være sikker på alt dette kan være pænt anonymiseret. 465 00:18:52,750 --> 00:18:54,410 Men det vil være en god mulighed for meget mere 466 00:18:54,410 --> 00:18:56,810 interaktivitet end noget lignende foredrag tillader. 467 00:18:56,810 --> 00:18:58,910 >> I mellemtiden vil vi have disse ting kaldet super 468 00:18:58,910 --> 00:19:01,610 sektioner, som er frivillig, men er åbne for alle i 469 00:19:01,610 --> 00:19:04,030 klassen, så du kan gøre dette mere kollektivt for 470 00:19:04,030 --> 00:19:05,190 problem angive én. 471 00:19:05,190 --> 00:19:06,010 Her er tidsplanen. 472 00:19:06,010 --> 00:19:08,870 Dette er også lagt ud på hjemmesiden på cs50.net. 473 00:19:08,870 --> 00:19:10,850 Bemærk, at der vil være en hacker-specifik 474 00:19:10,850 --> 00:19:12,430 i morgen eftermiddag. 475 00:19:12,430 --> 00:19:15,460 Og vi vil filme en dag og i morgen og sende dem 476 00:19:15,460 --> 00:19:16,720 online inden for 24 timer. 477 00:19:16,720 --> 00:19:19,370 Så hvis du ikke kan gøre nogen af ​​disse tider, ikke at bekymre dig. 478 00:19:19,370 --> 00:19:22,720 Og igen, tidsplanen er online nu på cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> Med hensyn til sektionering selv, bør du have fået en 480 00:19:25,350 --> 00:19:28,520 e-mail instruere dig at gå til kursets hjemmeside for at finde 481 00:19:28,520 --> 00:19:29,610 ud af din afdeling. 482 00:19:29,610 --> 00:19:32,890 Hvis livet har ændret sig, og du skal ændre din afdeling, 483 00:19:32,890 --> 00:19:33,560 ikke et problem. 484 00:19:33,560 --> 00:19:37,900 Gå tilbage til den samme webadresse, cs50.net/section, ental, 485 00:19:37,900 --> 00:19:40,090 og du vil udfylde lignende form, så du kan 486 00:19:40,090 --> 00:19:41,260 derefter give os dine præferencer. 487 00:19:41,260 --> 00:19:43,360 Og vi vil følge op ved ugens udgang, hvad vi kan 488 00:19:43,360 --> 00:19:44,240 plads. 489 00:19:44,240 --> 00:19:49,530 Sidste uge, minde om, at vi foreslået at bruge CS50 diskutere, 490 00:19:49,530 --> 00:19:51,370 kursets diskussion værktøj, i foredrag. 491 00:19:51,370 --> 00:19:53,680 Så havde vi 40 spørgsmål, der blev stillet, og 492 00:19:53,680 --> 00:19:54,720 besvares under forelæsning. 493 00:19:54,720 --> 00:19:56,280 Så det syntes at fungere godt, så vi vil fortsætte 494 00:19:56,280 --> 00:19:57,180 forsøger at gøre dette. 495 00:19:57,180 --> 00:19:59,600 Hvis det under foredrag, behøver du ikke bare føler sig trygge forhøjelse 496 00:19:59,600 --> 00:20:00,780 hånden, ikke et problem. 497 00:20:00,780 --> 00:20:04,640 Gå til cs50.net/discuss, postere der, og en af ​​vores undervisning 498 00:20:04,640 --> 00:20:07,270 stipendiaterne vil enten besvare det elektronisk eller øge deres 499 00:20:07,270 --> 00:20:10,620 hånd på dine vegne anonymt at spørge, afhængigt 500 00:20:10,620 --> 00:20:12,470 af arten af ​​spørgsmålet. 501 00:20:12,470 --> 00:20:15,000 Og i form af tilbagekobling, vil generelt psets være 502 00:20:15,000 --> 00:20:16,760 returneres inden for en uge. 503 00:20:16,760 --> 00:20:19,080 Fordi det tager lidt tid for sektioner for at opnå 504 00:20:19,080 --> 00:20:22,430 ligevægt vil den første Pset, 0 og 1, være lidt 505 00:20:22,430 --> 00:20:24,130 forsinket, da tingene falde til ro. 506 00:20:24,130 --> 00:20:27,130 Men stay tuned for, at der i de kommende uger. 507 00:20:27,130 --> 00:20:29,750 >> Okay, så lad mig sige på min alvorlig 508 00:20:29,750 --> 00:20:31,040 stemme for bare et øjeblik. 509 00:20:31,040 --> 00:20:32,690 Så det er faktisk en interessant klima til at være 510 00:20:32,690 --> 00:20:35,210 har denne diskussion, hvad med alle de andre ting 511 00:20:35,210 --> 00:20:37,310 foregår på campus i forbindelse hermed. 512 00:20:37,310 --> 00:20:40,220 Men CS50 har helt sikkert haft sin historie af dette særlige 513 00:20:40,220 --> 00:20:43,360 emnet, for så vidt som hvert år, dette naturligvis for mange 514 00:20:43,360 --> 00:20:46,910 år, Ad-Boards omtrent 3% af klassen. 515 00:20:46,910 --> 00:20:51,620 Denne seneste år, 2011, CS50 Ad-profilering 35 studerende. 516 00:20:51,620 --> 00:20:54,120 Det er ikke, tror jeg, på grund af manglende klarhed. 517 00:20:54,120 --> 00:20:56,760 Indse, at i løbet pensum, der er en side af 518 00:20:56,760 --> 00:20:59,020 redegørelse, hvor linjerne er. 519 00:20:59,020 --> 00:21:01,350 Samme erklæring gentages på hver enkelt af de 520 00:21:01,350 --> 00:21:03,070 Problemet sætter på side et. 521 00:21:03,070 --> 00:21:05,760 >> Så jeg nævner denne dag virkelig bare for at gøre 522 00:21:05,760 --> 00:21:07,030 folk opmærksomme på dette. 523 00:21:07,030 --> 00:21:08,080 Og vi har prøvet forskellige ting. 524 00:21:08,080 --> 00:21:10,630 Og hvad jeg troede, vi ville gøre i dag er bare tage et øjeblik til 525 00:21:10,630 --> 00:21:13,830 faktisk se på nogle af tidligere sager, der er kommet op. 526 00:21:13,830 --> 00:21:16,160 Snarere end at holde disse som små beskidte hemmeligheder, faktisk 527 00:21:16,160 --> 00:21:19,170 påpege, hvad de studerende har gjort, og hvordan vi har opdaget 528 00:21:19,170 --> 00:21:21,630 det og virkelig hvad den overordnede motivation er for 529 00:21:21,630 --> 00:21:23,950 selv have denne samtale. 530 00:21:23,950 --> 00:21:27,060 Så med det sagt, linjen væsentlige er dette - 531 00:21:27,060 --> 00:21:29,200 pr pensum, er du velkommen, du opfordres til at 532 00:21:29,200 --> 00:21:30,210 tale med klassekammerater. 533 00:21:30,210 --> 00:21:31,910 Det er hele formålet med at have disse kollaborative 534 00:21:31,910 --> 00:21:34,470 kontortid i Annenberg og tilskynde folk til 535 00:21:34,470 --> 00:21:35,755 afgangsprojekt at arbejde sammen. 536 00:21:35,755 --> 00:21:38,590 Men linje tegnes når det drejer sig tid til rent faktisk at skrive 537 00:21:38,590 --> 00:21:39,790 din endelige løsning. 538 00:21:39,790 --> 00:21:42,590 Taler på engelsk, helt fint, taler i pseudo-kode, 539 00:21:42,590 --> 00:21:43,400 helt fint. 540 00:21:43,400 --> 00:21:46,340 Emailing en klassekammerat din Pset, lade dem se over 541 00:21:46,340 --> 00:21:48,610 skærmen som hænderne fortsætte med at skrive, 542 00:21:48,610 --> 00:21:50,110 over linje. 543 00:21:50,110 --> 00:21:52,250 Må se til pensum for de særlige linjer. 544 00:21:52,250 --> 00:21:55,850 >> Men bare for at male et billede af, hvordan det er desværre et 545 00:21:55,850 --> 00:21:58,370 virkeligheden, indse, at der er hjemmesider derude, der 546 00:21:58,370 --> 00:22:01,490 have løsninger fra denne klasse og mange andre klasser. 547 00:22:01,490 --> 00:22:04,940 Det faktum, at du eller omkring 3% af jer ved, at dette eksisterer 548 00:22:04,940 --> 00:22:07,240 betyder, at vi ved, at dette eksisterer. 549 00:22:07,240 --> 00:22:09,340 Det faktum, at der er hjemmesider som denne, hvor du 550 00:22:09,340 --> 00:22:11,540 kan betale nogen til rent faktisk at gøre dit problem sæt - det var 551 00:22:11,540 --> 00:22:13,450 en aktuel sag, der kom op sidste år. 552 00:22:13,450 --> 00:22:15,790 Dette er en hjemmeside kaldet odesk.com. 553 00:22:15,790 --> 00:22:20,090 Og Tim var navnet på den person her, der var udstationering på 554 00:22:20,090 --> 00:22:24,580 denne hjemmeside og spurgte en person til at gøre sit Pset 7 i 555 00:22:24,580 --> 00:22:25,570 dette særlige tilfælde. 556 00:22:25,570 --> 00:22:28,350 Nå, odesk.com er meget Google-stand, og vi også er 557 00:22:28,350 --> 00:22:30,310 meget god til at google. 558 00:22:30,310 --> 00:22:32,360 Også her er der steder - og denne her er snarere 559 00:22:32,360 --> 00:22:34,234 grusomme, helt ærligt. 560 00:22:34,234 --> 00:22:38,050 [Latter] 561 00:22:38,050 --> 00:22:39,610 DAVID J. Malan: Det sjove ved dette site er, hvis 562 00:22:39,610 --> 00:22:41,970 du læser om side, de taler om deres corporate 563 00:22:41,970 --> 00:22:44,390 kultur og hvordan kundeservice er deres nummer et 564 00:22:44,390 --> 00:22:46,190 prioritet, at sikre, at dine opgaver bliver 565 00:22:46,190 --> 00:22:47,890 slået i til tiden. 566 00:22:47,890 --> 00:22:50,580 >> Men i alle alvor, igen, det forhold, at disse websteder 567 00:22:50,580 --> 00:22:52,910 eksistere, indser vi også er bevidste om 568 00:22:52,910 --> 00:22:53,730 den slags steder. 569 00:22:53,730 --> 00:22:55,890 Og for at give dig en fornemmelse af, hvilke former dette generelt 570 00:22:55,890 --> 00:22:58,570 tager vi generelt ikke har store skandaler, hvor folk 571 00:22:58,570 --> 00:23:01,080 samarbejder om nogen form for massiv, men snarere 572 00:23:01,080 --> 00:23:04,540 det er disse sene øjeblikke af svaghed, hvor du har så 573 00:23:04,540 --> 00:23:07,550 meget at gøre, det er 4:00, er du udmattet, og du 574 00:23:07,550 --> 00:23:09,770 tænke på dig selv, ja, lad mig bare tage et kig på min 575 00:23:09,770 --> 00:23:11,770 roommate-eller min ven kode eller lignende. 576 00:23:11,770 --> 00:23:14,800 Og manifestationer af dette desværre involvere Student 577 00:23:14,800 --> 00:23:17,640 En indsender noget som dette og Student B indsendelse 578 00:23:17,640 --> 00:23:20,370 noget som dette, som helt sikkert, i en computer 579 00:23:20,370 --> 00:23:23,830 videnskab klasse, er bemærkelsesværdigt nemt for dataloger 580 00:23:23,830 --> 00:23:25,690 at opdage med software. 581 00:23:25,690 --> 00:23:28,410 Dette er en anden almindelig paradigme, hvor du har slags 582 00:23:28,410 --> 00:23:31,010 arbejdet sammen med nogen, måske taler i 583 00:23:31,010 --> 00:23:32,360 Engelsk, bare fint, pseudokode. 584 00:23:32,360 --> 00:23:35,080 Men så kommer det tid til rent faktisk at indsende, og psets 585 00:23:35,080 --> 00:23:37,910 bare få udvekslet via e-mail eller Dropbox eller lignende. 586 00:23:37,910 --> 00:23:41,120 Men i et forsøg på at gøre det mindre klart, at det er 587 00:23:41,120 --> 00:23:44,830 hvad der er sket, så er det, hvad der er indsendt. 588 00:23:44,830 --> 00:23:47,880 Også dette ikke tur op velskrevne stykker 589 00:23:47,880 --> 00:23:50,360 software som vi er nødt til rent faktisk at opdage 590 00:23:50,360 --> 00:23:51,280 den slags ting. 591 00:23:51,280 --> 00:23:53,760 Og faktisk, hvad vi gør, er run software, der sammenligner alle 592 00:23:53,760 --> 00:23:55,540 dette års indlæg mod alle tidligere års 593 00:23:55,540 --> 00:23:57,380 indlæg, mod alt, hvad vi fandt på 594 00:23:57,380 --> 00:24:00,060 Internet, mod alle job hjemmesiden derude. 595 00:24:00,060 --> 00:24:01,710 Det er alt sammen meget automatiseret. 596 00:24:01,710 --> 00:24:05,665 Og så gør vi det virkelig i stor retfærdighed til de 97%, der 597 00:24:05,665 --> 00:24:07,760 virkelig arbejder deres røven ud af bukserne i denne og i andre 598 00:24:07,760 --> 00:24:11,530 klasser og sætte i alle disse bestræbelser, således at arbejdet 599 00:24:11,530 --> 00:24:13,030 de i sidste ende er deres egne. 600 00:24:13,030 --> 00:24:14,220 Og jeg kan gå på i aldre. 601 00:24:14,220 --> 00:24:16,030 >> Dette er blot en håndfuld af sidste års sager. 602 00:24:16,030 --> 00:24:19,350 Et par elever forelagt disse filer identisk for Pset 2, 603 00:24:19,350 --> 00:24:22,460 Pset 3, Pset 4, Pset 5, Pset 6, Pset 9. 604 00:24:22,460 --> 00:24:26,360 I dette tilfælde var denne quiz 0 og i sidste år, hvor to 605 00:24:26,360 --> 00:24:29,570 studerende indsendt ens denne sætning blandt mange 606 00:24:29,570 --> 00:24:32,210 andre, "Anmodningen om type -" prik, prik, prik. 607 00:24:32,210 --> 00:24:34,530 Så selv i en klasse på 600 gjorde vi opdage dette 608 00:24:34,530 --> 00:24:36,310 på indsendt quizzer. 609 00:24:36,310 --> 00:24:39,080 Så kort sagt, dette - helt ærligt, jeg hader at have denne form for 610 00:24:39,080 --> 00:24:41,300 samtale - men dette er virkelig en bevidst indsats 611 00:24:41,300 --> 00:24:43,540 i år at forsøge at køre ned dette nummer. 612 00:24:43,540 --> 00:24:45,650 For selvom vi siger den slags ting hver 613 00:24:45,650 --> 00:24:48,100 år, jeg tror den virkelighed at have dvælet ved det for et par 614 00:24:48,100 --> 00:24:50,800 sekunder mere end normalt og faktisk lige påpege 615 00:24:50,800 --> 00:24:53,600 at hvad der kan synes som, eh, ikke sådan en big deal, i det mindste 616 00:24:53,600 --> 00:24:56,390 tænker tilbage på denne særlige øjeblik, både i retfærdighed til 617 00:24:56,390 --> 00:25:00,100 dig selv og dine klassekammerater her. 618 00:25:00,100 --> 00:25:02,480 Så hvis du nogensinde har spørgsmål om, hvor grænsen 619 00:25:02,480 --> 00:25:04,290 er, skal du bare nå ud til mig personligt. 620 00:25:04,290 --> 00:25:07,190 Men svaret er altid, helt understregede i 621 00:25:07,190 --> 00:25:09,090 sidste øjeblik, kontanter i en sen dag. 622 00:25:09,090 --> 00:25:11,080 Eller hvis det er et spørgsmål om ikke at have nogen sene dage, 623 00:25:11,080 --> 00:25:12,900 ærligt, email mig personligt. 624 00:25:12,900 --> 00:25:14,110 Vi finder ud af noget. 625 00:25:14,110 --> 00:25:17,480 Vær venlig ikke at sætte din tid her på Harvard i fare. 626 00:25:17,480 --> 00:25:18,570 >> Nu, jeg troede vi skulle lette stemningen, så jeg 627 00:25:18,570 --> 00:25:20,264 medtaget dette som det næste dias. 628 00:25:20,264 --> 00:25:22,770 [Latter] 629 00:25:22,770 --> 00:25:23,630 DAVID J. Malan: Denne hjemmeside var stor. 630 00:25:23,630 --> 00:25:24,820 Jeg fik faktisk lidt distraheret. 631 00:25:24,820 --> 00:25:26,330 Der er denne ene. 632 00:25:26,330 --> 00:25:29,590 Og så dette var forbløffende. 633 00:25:29,590 --> 00:25:35,190 Okay, så tænk på, at killingen sent på aftenen, når de foretager 634 00:25:35,190 --> 00:25:36,040 disse beslutninger. 635 00:25:36,040 --> 00:25:40,110 Okay, så tilbage til mere sjov og mindre alvorlige ting, som 636 00:25:40,110 --> 00:25:40,780 betingelser. 637 00:25:40,780 --> 00:25:43,900 >> Okay, så vi talte kort om disse. 638 00:25:43,900 --> 00:25:46,080 Det er noget, det er nok helt bekendt fra 639 00:25:46,080 --> 00:25:47,260 en verden af ​​Scratch. 640 00:25:47,260 --> 00:25:49,860 Og i en verden af ​​Scratch, har vi dette behov undertiden 641 00:25:49,860 --> 00:25:51,110 gå gøre gafler i vejen. 642 00:25:51,110 --> 00:25:54,840 Enten gøre dette eller hint eller dette andet ting her. 643 00:25:54,840 --> 00:25:58,990 Og når vi ønsker at gøre dette, kan vi bruge, i C nu, dette, hvis 644 00:25:58,990 --> 00:26:00,860 ellers konstruere. 645 00:26:00,860 --> 00:26:06,420 Og så har vi her booleske udtryk. 646 00:26:06,420 --> 00:26:09,260 For eksempel, boolske udtryk her kan vi ELLER 647 00:26:09,260 --> 00:26:12,260 dem sammen i den forstand, at vi har denne tilstand eller 648 00:26:12,260 --> 00:26:13,200 denne betingelse. 649 00:26:13,200 --> 00:26:15,100 Vi kan og dem sammen, i den forstand, at vi ønsker at 650 00:26:15,100 --> 00:26:17,710 tjek denne tilstand og denne betingelse. 651 00:26:17,710 --> 00:26:22,440 Og her har vi en switch-statement nu, som ikke er så 652 00:26:22,440 --> 00:26:26,040 ligner syntaktisk til den slags betingelser, men det 653 00:26:26,040 --> 00:26:30,160 giver os mulighed for at gøre hvad der svarer til, hvis ellers hvis ellers hvis ellers 654 00:26:30,160 --> 00:26:34,990 hvis og lignende ved at optælle dem fra sag til sag 655 00:26:34,990 --> 00:26:36,670 ved hvert enkelt tilfælde. 656 00:26:36,670 --> 00:26:38,370 Så vi oplevede dem sidste gang. 657 00:26:38,370 --> 00:26:40,430 Og så begyndte vi at røre ved ting som sløjfer. 658 00:26:40,430 --> 00:26:42,070 Vi oplevede en af ​​disse bare for et øjeblik siden. 659 00:26:42,070 --> 00:26:44,180 Men der er disse andre looping konstruktioner. 660 00:26:44,180 --> 00:26:46,370 >> For eksempel. Denne her 661 00:26:46,370 --> 00:26:50,140 Så while (betingelse), skal du gøre det her igen og igen. 662 00:26:50,140 --> 00:26:53,070 Så fundamentalt, hvad der synes at være forskellige mellem denne 663 00:26:53,070 --> 00:26:55,760 for løkke og denne while-løkken her? 664 00:27:00,810 --> 00:27:05,045 Dette for-løkke, og denne while-løkke. 665 00:27:05,045 --> 00:27:07,840 Ja? 666 00:27:07,840 --> 00:27:08,800 Hvad er det? 667 00:27:08,800 --> 00:27:10,050 PUBLIKUM: [uhørlig]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. Malan: Good. 669 00:27:15,120 --> 00:27:17,130 Så mens det i for-løkken tilstand, er der klart 670 00:27:17,130 --> 00:27:17,940 mere syntaks. 671 00:27:17,940 --> 00:27:20,560 Der er denne initialisering, der er denne opdatering. 672 00:27:20,560 --> 00:27:23,820 I en while-løkke, er der bare denne betingelse. 673 00:27:23,820 --> 00:27:26,630 Så det lader til, at det er lidt skåret ned i forhold til den for 674 00:27:26,630 --> 00:27:28,770 loop, hvilket betyder, hvis vi ønsker at have variabler, og vi ønsker 675 00:27:28,770 --> 00:27:30,800 at have optælling, vi faktisk er nødt til at 676 00:27:30,800 --> 00:27:32,500 gøre dette selv. 677 00:27:32,500 --> 00:27:34,420 >> Så lad mig gå videre og åbne op gedit. 678 00:27:34,420 --> 00:27:36,320 Lad mig skifte over til apparatet. 679 00:27:36,320 --> 00:27:38,110 Og lad os bare gøre en hurtig lille eksempel på, at 680 00:27:38,110 --> 00:27:40,550 skelner en af ​​disse fra den anden. 681 00:27:40,550 --> 00:27:42,490 Og på bagsiden af ​​mit sind her, vil jeg sige én ting. 682 00:27:42,490 --> 00:27:44,120 Jeg specifikt nævnt navnet Tim. 683 00:27:44,120 --> 00:27:47,740 Tim var faktisk nogen, at en elev har forsøgt at finde at gøre 684 00:27:47,740 --> 00:27:48,680 deres hjemmearbejde for dem. 685 00:27:48,680 --> 00:27:51,280 Vi havde ingen Tim i den pågældende sektion. 686 00:27:51,280 --> 00:27:53,690 Så indse, at jeg ikke skal afsløres en elev, var det ikke en elev. 687 00:27:53,690 --> 00:27:55,720 Det var en tilfældig person på internettet at gøre tingene 688 00:27:55,720 --> 00:27:57,180 ved fuldmagt sidste år. 689 00:27:57,180 --> 00:27:58,670 Så vi finder det, også. 690 00:27:58,670 --> 00:28:00,630 Så i dette tilfælde her, lad mig gå videre og 691 00:28:00,630 --> 00:28:02,810 åbne en ny fil. 692 00:28:02,810 --> 00:28:04,800 Filer, Ny. 693 00:28:04,800 --> 00:28:06,050 Dette giver mig en fane her. 694 00:28:06,050 --> 00:28:09,940 Lad mig gå videre og gemme det som loop.c. 695 00:28:09,940 --> 00:28:11,810 Lad mig gå hen og klik på Gem. 696 00:28:11,810 --> 00:28:15,340 Og derefter ned her, så lad os gå videre og begynde at skrive 697 00:28:15,340 --> 00:28:16,605 # Include . 698 00:28:19,116 --> 00:28:20,520 Lad mig zoome ind 699 00:28:20,520 --> 00:28:23,410 Nu vil vi gøre int main (void). 700 00:28:23,410 --> 00:28:30,020 Lad mig nu gå videre og gøre for (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10; i + +). 702 00:28:33,480 --> 00:28:36,620 Og nu jeg har tænkt mig at gå videre og gøre udskrive stjernen, at jeg 703 00:28:36,620 --> 00:28:37,890 gjorde tidligere. 704 00:28:37,890 --> 00:28:39,390 Og så i slutningen af ​​dette program, vil vi bare til 705 00:28:39,390 --> 00:28:41,130 udskrive en ny linje, bare så min prompt 706 00:28:41,130 --> 00:28:42,470 ser ikke alt rodet. 707 00:28:42,470 --> 00:28:45,170 returnere 0. 708 00:28:45,170 --> 00:28:47,610 Seem syntaktisk korrekt? 709 00:28:47,610 --> 00:28:48,040 Indtil videre. 710 00:28:48,040 --> 00:28:48,560 Så lad os se. 711 00:28:48,560 --> 00:28:51,290 >> Så lad mig zoome ud, skal du gå ind i min terminal vindue. 712 00:28:51,290 --> 00:28:54,570 Og lad mig gå videre og køre loop, fordi jeg kaldt dette 713 00:28:54,570 --> 00:28:55,690 ting loop.c. 714 00:28:55,690 --> 00:28:56,780 Så gør løkke. 715 00:28:56,780 --> 00:28:57,840 Synes at kompilere OK. 716 00:28:57,840 --> 00:29:00,210 Lad mig løbe loop, og nu Enter. 717 00:29:00,210 --> 00:29:01,820 Og det synes at have udskrevet 10 stjerner. 718 00:29:01,820 --> 00:29:03,780 Så lad os bare konvertere dette til en while-løkke og se, hvad 719 00:29:03,780 --> 00:29:05,220 slags spørgsmål, vi falde over. 720 00:29:05,220 --> 00:29:11,290 Så i stedet for dette, lad mig komme ind her og sige, mens jeg er 721 00:29:11,290 --> 00:29:12,760 mindre end 10 - 722 00:29:12,760 --> 00:29:14,910 lad mig slippe af for-løkken. 723 00:29:14,910 --> 00:29:17,170 OK, så vi har et par problemer allerede. 724 00:29:17,170 --> 00:29:21,110 Så betingelse er den samme, men jeg er selvfølgelig mangler 725 00:29:21,110 --> 00:29:21,680 initialisering. 726 00:29:21,680 --> 00:29:23,840 Jeg mangler den optælling. 727 00:29:23,840 --> 00:29:28,020 Så hvad skal compileren sandsynligvis fortælle mig når jeg forsøger at 728 00:29:28,020 --> 00:29:29,170 kompilere dette program? 729 00:29:29,170 --> 00:29:29,666 Ja? 730 00:29:29,666 --> 00:29:31,154 PUBLIKUM: [uhørlig]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. Malan: Good. 732 00:29:31,650 --> 00:29:34,180 Så det kommer til at sige noget lignende sort - i dette 733 00:29:34,180 --> 00:29:35,280 tilfælde, variablen i. 734 00:29:35,280 --> 00:29:37,980 Og ja, brug af sort identifikator i. 735 00:29:37,980 --> 00:29:40,960 Og så dette er i modsætning til sprog som PHP og 736 00:29:40,960 --> 00:29:43,120 Python og Ruby, som nogle af jer måske være bekendt, 737 00:29:43,120 --> 00:29:44,820 hvor du kan bare lidt af start ved at bruge variabler 738 00:29:44,820 --> 00:29:47,420 forgodtbefindende og ikke behøver at bekymre dig om at erklære dem 739 00:29:47,420 --> 00:29:48,560 eksplicit altid. 740 00:29:48,560 --> 00:29:51,770 I C og i sprog som Java og C + +, skal du være 741 00:29:51,770 --> 00:29:53,020 super eksplicit. 742 00:29:53,020 --> 00:29:55,760 Og hvis du ønsker en variabel kaldet jeg, er du nødt til at fortælle mig 743 00:29:55,760 --> 00:29:57,360 hvilken variabel det. 744 00:29:57,360 --> 00:29:59,360 Så vi bliver nødt til at løse dette på følgende måde. 745 00:29:59,360 --> 00:30:05,510 Jeg har tænkt mig at have til at gå op her og skrive int i, og derfor 746 00:30:05,510 --> 00:30:07,860 Jeg har erklæret en variabel kaldet i. 747 00:30:07,860 --> 00:30:09,180 Nu har jeg sprunget et trin. 748 00:30:09,180 --> 00:30:11,340 Jeg har naturligvis ikke initialiseret det, men lad os se om, at der på 749 00:30:11,340 --> 00:30:13,650 mindst mærker Dunk stoppe klager. 750 00:30:13,650 --> 00:30:15,770 Så lad mig genindspilning dette program. 751 00:30:15,770 --> 00:30:16,770 >> Okay, nu er det bare klagende 752 00:30:16,770 --> 00:30:17,870 af en anden grund. 753 00:30:17,870 --> 00:30:21,130 "Variabel 'jeg' er uden startværdi når de bruges her." Okay, så 754 00:30:21,130 --> 00:30:22,340 det er temmelig eksplicit. 755 00:30:22,340 --> 00:30:25,510 Initialiseret betyder blot sætte det lig med en værdi. 756 00:30:25,510 --> 00:30:30,820 Og vi har ikke gjort det, så lad mig prøve lig 0. 757 00:30:30,820 --> 00:30:35,030 Lad os prøve det igen og igen køre Dunk. 758 00:30:35,030 --> 00:30:36,140 Kompileret denne gang. 759 00:30:36,140 --> 00:30:37,210 Og jeg er ved at køre den. 760 00:30:37,210 --> 00:30:43,120 Men store gamle uendelig løkke, fordi jeg har gjort det 761 00:30:43,120 --> 00:30:45,530 initialisering, jeg har gjort den betingelse, men jeg har aldrig gjort 762 00:30:45,530 --> 00:30:47,030 enhver form for optælling. 763 00:30:47,030 --> 00:30:48,780 Så hvordan kan jeg gøre det optælling? 764 00:30:48,780 --> 00:30:51,170 Tja, i en while-løkke, føles det som om jeg har tænkt mig at have 765 00:30:51,170 --> 00:30:54,180 at gøre det indre af sløjfen, da ligesom den første 766 00:30:54,180 --> 00:30:56,570 uges eksempler på at gøre looping konstruktioner, ligesom med 767 00:30:56,570 --> 00:30:59,040 sokkerne og med den selvstændige optælling havde vi at gøre 768 00:30:59,040 --> 00:31:01,550 noget til allersidst, gerne gå tilbage til den næste linje. 769 00:31:01,550 --> 00:31:05,040 Hvad hvis jeg gå videre og gøre det i + + her? 770 00:31:05,040 --> 00:31:06,030 Lad os ikke engang kompilere dette. 771 00:31:06,030 --> 00:31:06,890 Fang mig allerede. 772 00:31:06,890 --> 00:31:09,704 Hvad er der galt her? 773 00:31:09,704 --> 00:31:10,690 PUBLIKUM: [uhørlig]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. Malan: Så det er bestemt ikke int. 775 00:31:11,770 --> 00:31:13,080 Det er i. 776 00:31:13,080 --> 00:31:15,110 Og de krøllede parenteser, som før, 777 00:31:15,110 --> 00:31:16,800 indrykning er ikke nok. 778 00:31:16,800 --> 00:31:18,410 Så nu har jeg denne konstruktion. 779 00:31:18,410 --> 00:31:21,780 Så mens jeg er mindre end 10, skal du udskrive en stjerne, 780 00:31:21,780 --> 00:31:23,220 derefter tilvækst i. 781 00:31:23,220 --> 00:31:25,680 Og den måde en while-løkke værker er, at så snart du trykker på 782 00:31:25,680 --> 00:31:29,630 bunden af ​​sløjfen, som i dette tilfælde ligner linje 10, 783 00:31:29,630 --> 00:31:32,880 det kommer til at gå tilbage til linje 6, på hvilket tidspunkt 784 00:31:32,880 --> 00:31:34,400 betingelse vil blive kontrolleret igen. 785 00:31:34,400 --> 00:31:37,500 Og hvis jeg er stadig mindre end 10, vil vi gøre linjerne 8 og 786 00:31:37,500 --> 00:31:41,250 derefter på 9, så vil vi ramt 10, og gå tilbage til 6, igen og 787 00:31:41,250 --> 00:31:45,580 igen og igen og igen, så længe jeg er mindre end 10. 788 00:31:45,580 --> 00:31:47,860 Så lad os re-run gøre her. 789 00:31:47,860 --> 00:31:48,940 >> Okay, vi har kompileret okay. 790 00:31:48,940 --> 00:31:50,300 Lad mig omvalg loop. 791 00:31:50,300 --> 00:31:52,620 Og nu er det faktisk ser ud til at virke. 792 00:31:52,620 --> 00:31:55,100 Så plusser og minusser her? 793 00:31:55,100 --> 00:31:58,910 Nå, så langt er der faktisk ikke en helhed af PLO - 794 00:31:58,910 --> 00:31:59,420 så søde. 795 00:31:59,420 --> 00:32:01,870 Okay, det var en - ah, det var et uheld. 796 00:32:01,870 --> 00:32:05,200 Okay, så lad os gå tilbage til for-løkken. 797 00:32:05,200 --> 00:32:07,530 Så for løkker er rart, fordi de er super eksplicit. 798 00:32:07,530 --> 00:32:09,720 Og selv om de er lidt klodset at skrive, det er 799 00:32:09,720 --> 00:32:11,500 meget magtfulde og det giver dig mulighed for at gøre 800 00:32:11,500 --> 00:32:12,980 flere ting på én gang. 801 00:32:12,980 --> 00:32:16,240 Selvom sløjfer ikke synes at have en enorm mængde af værdi lige 802 00:32:16,240 --> 00:32:18,500 endnu, fordi det føles som om vi bare nødt til at gøre mere arbejde. 803 00:32:18,500 --> 00:32:20,670 Vi er nødt til at sætte initialiseringen op her, 804 00:32:20,670 --> 00:32:23,480 opdatere hernede, og vi er nødt til at huske at gøre alt det der. 805 00:32:23,480 --> 00:32:26,260 Så vi vil se i tide at mens sløjfer faktisk låne 806 00:32:26,260 --> 00:32:29,380 sig til kun forskellige sammenhænge, ​​forskellige data 807 00:32:29,380 --> 00:32:33,900 strukturer som lister og hash-tabeller, ting, vi vil komme til 808 00:32:33,900 --> 00:32:34,970 mid-semester. 809 00:32:34,970 --> 00:32:37,900 Men for nu, ved, at der er denne tredje type er kendt som en gør- 810 00:32:37,900 --> 00:32:38,480 while-løkke. 811 00:32:38,480 --> 00:32:39,540 Og vi har set dette kort. 812 00:32:39,540 --> 00:32:41,830 Og det kan være super nyttige med Pset 1. 813 00:32:41,830 --> 00:32:45,570 Hver gang du ønsker at gøre noget, og derefter kontrollere, om 814 00:32:45,570 --> 00:32:48,940 den bruger, der samarbejdede, og hvis de ikke gjorde det, så gør det igen, en gør- 815 00:32:48,940 --> 00:32:51,460 while-løkke egner sig til den slags logik. 816 00:32:51,460 --> 00:32:55,640 Fordi som bestilling fra top til bund her antyder, 817 00:32:55,640 --> 00:32:57,750 gør bogstaveligt betyder at gøre dette. 818 00:32:57,750 --> 00:32:59,830 Og gøre det igen og igen, hvad kunne det være? 819 00:32:59,830 --> 00:33:03,000 Måske betyder det ringer GetInt eller GetString og derefter 820 00:33:03,000 --> 00:33:05,830 at kontrollere værdien af ​​GetInt eller GetString og derefter råben 821 00:33:05,830 --> 00:33:08,260 på brugeren, hvis de ikke har samarbejdet ved at bede dem 822 00:33:08,260 --> 00:33:10,100 igen og igen og igen. 823 00:33:10,100 --> 00:33:11,730 Hvor du ønsker at gøre noget en gang, 824 00:33:11,730 --> 00:33:13,210 så tjek nogle betingelse. 825 00:33:13,210 --> 00:33:14,110 >> Så lad os prøve dette. 826 00:33:14,110 --> 00:33:17,130 Lad mig faktisk ændre dette nu til en gør-while-løkke. 827 00:33:17,130 --> 00:33:18,830 Og jeg har tænkt mig at gå videre og gøre følgende. 828 00:33:18,830 --> 00:33:21,830 Så skal du gøre følgende. 829 00:33:21,830 --> 00:33:26,870 Lad os gøre int i = GetInt (); men lad os først fortælle brugeren 830 00:33:26,870 --> 00:33:27,410 hvad de skal gøre. 831 00:33:27,410 --> 00:33:29,050 Så en lidt anderledes denne gang. 832 00:33:29,050 --> 00:33:31,270 "Giv mig en int". 833 00:33:31,270 --> 00:33:32,910 Så jeg vil bruge printf for. 834 00:33:32,910 --> 00:33:35,740 Og nu jeg har tænkt mig at gå ned her, og jeg har tænkt mig at gøre dette 835 00:33:35,740 --> 00:33:41,520 mens jeg er, lad os sige, større end - 836 00:33:41,520 --> 00:33:47,540 lad os se, i er, lad os sige, mindre end 0, eller i er 837 00:33:47,540 --> 00:33:48,730 større end 10. 838 00:33:48,730 --> 00:33:51,810 Med andre ord ønsker jeg et tal fra 1 til 9, bare 839 00:33:51,810 --> 00:33:52,720 vilkårligt. 840 00:33:52,720 --> 00:33:55,290 Så jeg bruger en kombineret Boolesk udtryk her 841 00:33:55,290 --> 00:33:59,930 sørge for, at i er mindre end 0 eller større end 10, hvor 842 00:33:59,930 --> 00:34:02,530 tilfælde vil jeg gøre dette loop her igen. 843 00:34:02,530 --> 00:34:04,400 Så igen, skal du gøre dette - 844 00:34:04,400 --> 00:34:08,480 medens i er mindre end 0, eller i er større end 10. 845 00:34:08,480 --> 00:34:11,440 >> Så lad os nu gå videre og gøre det, når vi har gjort det. 846 00:34:11,440 --> 00:34:13,270 Lad os bare gøre en hurtig tilregnelighed check. 847 00:34:13,270 --> 00:34:18,929 printf ("Tak, jeg er% d", i). 848 00:34:18,929 --> 00:34:21,350 Så denne simple program beder brugeren om en int, 849 00:34:21,350 --> 00:34:24,000 gør sikker på det er inden for nogle interval, 1 til 9 inklusive, 850 00:34:24,000 --> 00:34:26,280 og derefter takker brugeren ved at minde dem om, hvad de lige 851 00:34:26,280 --> 00:34:27,940 indtastet, ligesom en lille tilregnelighed check. 852 00:34:27,940 --> 00:34:30,659 Men lad os se om det virker efter hensigten. 853 00:34:30,659 --> 00:34:34,533 Lad mig gå hovedet ned her og re-run gøre loop. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "Brug af kaldenavn 'i'". Det er underligt. 856 00:34:38,600 --> 00:34:41,509 Jeg troede, vi løst det. 857 00:34:45,489 --> 00:34:47,560 Samme symptom men anden kode. 858 00:34:47,560 --> 00:34:47,899 Ja? 859 00:34:47,899 --> 00:34:50,191 PUBLIKUM: [uhørlig] inde i to, vi er nødt til at 860 00:34:50,191 --> 00:34:52,639 [Uhørlig]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. Malan: Præcis. 862 00:34:53,260 --> 00:34:55,989 Så dette faktisk fører os til et emne kaldet rækkevidde. 863 00:34:55,989 --> 00:34:59,350 Det viser sig, at C, igen, det virkelig tager dig bogstaveligt. 864 00:34:59,350 --> 00:35:02,970 Og hvis du gør noget som dette, hvor du erklærer en int 865 00:35:02,970 --> 00:35:06,120 og derefter tildele det en vis værdi, men du gør det inde i en 866 00:35:06,120 --> 00:35:09,840 par krøllede parenteser, hvad C gør, er det forudsætter, at du 867 00:35:09,840 --> 00:35:14,800 kun ønsker disse 32 bits kendt som I at eksistere inden for 868 00:35:14,800 --> 00:35:18,200 led i disse krøllede parenteser, inden for rammerne af linjer 869 00:35:18,200 --> 00:35:22,420 6 til 9. Så jeg er erklæret, og den er tildelt en 870 00:35:22,420 --> 00:35:26,530 værdi i linje 8, men så snart du kommer udenfor 871 00:35:26,530 --> 00:35:30,270 ledning 9 under klammeparentes, i er ikke længere i 872 00:35:30,270 --> 00:35:31,910 rækkevidde, så at sige. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Det er ikke længere i den rette kontekst. 874 00:35:35,030 --> 00:35:37,940 Så nu er der ingen i, så det er som om vi havde ikke engang 875 00:35:37,940 --> 00:35:38,770 erklærede det overhovedet. 876 00:35:38,770 --> 00:35:41,520 >> Så hvad er en rettelse så for noget som dette, hvis det 877 00:35:41,520 --> 00:35:44,300 Grunden er, at jeg er erklæret i de krøllede parenteser, som 878 00:35:44,300 --> 00:35:45,120 er tilsyneladende slemt? 879 00:35:45,120 --> 00:35:45,410 Her? 880 00:35:45,410 --> 00:35:46,820 PUBLIKUM: [uhørlig]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. Malan: Yeah. 882 00:35:47,150 --> 00:35:48,710 Så vi kan initialisere den udenfor. 883 00:35:48,710 --> 00:35:53,530 Så lad mig gå videre og slette erklæringen dele, hvorved 884 00:35:53,530 --> 00:35:55,820 Jeg angive, hvilken type, og lad mig gøre det op her. 885 00:35:55,820 --> 00:36:00,220 Så i linje 5, er det nu siger "Giv mig en int." Kald det i. 886 00:36:00,220 --> 00:36:03,400 Meddelelse i linje 9, jeg ikke ønsker at gøre dette, fordi jeg 887 00:36:03,400 --> 00:36:04,830 allerede har de 32 bits. 888 00:36:04,830 --> 00:36:06,140 Jeg ønsker ikke at bede computeren for en 889 00:36:06,140 --> 00:36:07,630 forskellige 32 bits. 890 00:36:07,630 --> 00:36:09,850 Jeg vil bruge de samme 32 bit. 891 00:36:09,850 --> 00:36:13,190 Og nu, fordi jeg er erklæret i linje 5, er det stadig legit 892 00:36:13,190 --> 00:36:16,550 at bruge det i linie 11 og linie 12. 893 00:36:16,550 --> 00:36:19,310 >> Så lad mig prøve at genoversætte dette og se 894 00:36:19,310 --> 00:36:20,490 hvis Dunk stopper råben. 895 00:36:20,490 --> 00:36:22,380 gøre løkken. 896 00:36:22,380 --> 00:36:25,470 Så nu er det "underforstået erklæring af funktionen 897 00:36:25,470 --> 00:36:29,880 »GetInt 'er ugyldig i C99." Hvad er det? 898 00:36:29,880 --> 00:36:30,400 Ja? 899 00:36:30,400 --> 00:36:32,330 PUBLIKUM: [uhørlig]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. Malan: Yeah. 901 00:36:32,690 --> 00:36:35,520 Så nu, at jeg faktisk bruger GetInt, det er ikke noget 902 00:36:35,520 --> 00:36:38,190 der bare kommer med C. Dette kommer fra CS50. 903 00:36:38,190 --> 00:36:39,890 Så vi har brug for denne her. 904 00:36:39,890 --> 00:36:41,450 Og lad mig gå tilbage til prompten ned 905 00:36:41,450 --> 00:36:43,500 her og re-run gøre. 906 00:36:43,500 --> 00:36:44,160 Okay, endelig. 907 00:36:44,160 --> 00:36:46,270 Nu har vi besluttet, og den anden fejl. 908 00:36:46,270 --> 00:36:48,930 Lad mig nu køre loop og se hvad der sker. 909 00:36:48,930 --> 00:36:51,740 "Giv mig en int." Jeg vil give det 11. 910 00:36:51,740 --> 00:36:53,100 Jeg vil give det -1. 911 00:36:53,100 --> 00:36:54,470 Jeg vil give det foo. 912 00:36:54,470 --> 00:36:56,080 Jeg vil give det 5. 913 00:36:56,080 --> 00:36:57,450 Og nu er det faktisk virker. 914 00:36:57,450 --> 00:36:59,410 Men prompten ændres for en grund her. 915 00:36:59,410 --> 00:37:02,800 Hvorfor skulle det sige retry en af ​​disse gange, men giv mig en 916 00:37:02,800 --> 00:37:03,920 int de andre tre gange? 917 00:37:03,920 --> 00:37:05,500 Hvorfor er det adfærd anderledes? 918 00:37:05,500 --> 00:37:06,980 PUBLIKUM: Gav det en streng. 919 00:37:06,980 --> 00:37:07,830 DAVID J. Malan: Undskyld? 920 00:37:07,830 --> 00:37:08,570 PUBLIKUM: Du gav det en streng. 921 00:37:08,570 --> 00:37:08,990 DAVID J. Malan: Yeah. 922 00:37:08,990 --> 00:37:11,450 Så vi gav det en streng i dette tredje forsøg, 923 00:37:11,450 --> 00:37:12,490 når jeg har skrevet foo. 924 00:37:12,490 --> 00:37:13,200 Foo er en streng. 925 00:37:13,200 --> 00:37:14,340 Det er naturligvis ikke en int. 926 00:37:14,340 --> 00:37:17,500 Og den måde, CS50 har implementeret GetInt er, at vi 927 00:37:17,500 --> 00:37:20,330 ikke kontrollere, om noget er mindre end 0 eller større end 10 928 00:37:20,330 --> 00:37:22,260 for dig, for hvordan kan vi vide på forhånd, hvad slags 929 00:37:22,260 --> 00:37:23,130 int du ønsker? 930 00:37:23,130 --> 00:37:25,880 Men vi kan minimalt tjekke for dig, har brugeren i det mindste 931 00:37:25,880 --> 00:37:26,730 skrive et heltal? 932 00:37:26,730 --> 00:37:30,500 Og hvis de ikke gjorde det, vi råber på, at brugeren ved at skrive "prøv igen" 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 et program, der er looping. Okay. 935 00:37:34,210 --> 00:37:37,070 Nu, hvilke af disse er en slags bedre konstruktion? 936 00:37:37,070 --> 00:37:39,060 Så det er her tingene begynder at blive lidt rodet, den 937 00:37:39,060 --> 00:37:42,360 faktum, at du skal huske at erklære en variabel op her 938 00:37:42,360 --> 00:37:44,630 hvis du ønsker at bruge det inde i nogle 939 00:37:44,630 --> 00:37:46,460 krøllede parenteser og udenfor. 940 00:37:46,460 --> 00:37:48,490 Men selv hvis dette ser lidt kryptisk ved første 941 00:37:48,490 --> 00:37:50,750 blik, bare igen, husker den enkle logik. 942 00:37:50,750 --> 00:37:54,630 For at kunne bruge noget i C, uanset om det er en funktion eller 943 00:37:54,630 --> 00:37:57,680 Det er en variabel, skal du angive den, hvis det er en funktion 944 00:37:57,680 --> 00:37:59,770 i nogle bibliotek, du eller har brug for at erklære den. 945 00:37:59,770 --> 00:38:02,405 Men nu er du nødt til at være ekstra opmærksom på det faktum, at 946 00:38:02,405 --> 00:38:04,940 du erklære den i den rigtige omfang. 947 00:38:04,940 --> 00:38:08,150 Du er ikke at lægge det for stramt inde i parenteser. 948 00:38:08,150 --> 00:38:09,410 >> Så lad mig faktisk rulle tilbage. 949 00:38:09,410 --> 00:38:12,660 Hvis vi går tilbage til vores for eksempel fra tidligere, og jeg går 950 00:38:12,660 --> 00:38:19,245 tilbage til for int, int i = 0; i <10; i + +, og jeg 951 00:38:19,245 --> 00:38:26,370 gøre printf stjerner, som denne, og derefter lukke parentes, og nu 952 00:38:26,370 --> 00:38:30,410 printf i er nu - 953 00:38:30,410 --> 00:38:33,500 efter samme logik, hvad der vil ske, når jeg forsøger at 954 00:38:33,500 --> 00:38:35,500 kompilere dette program? 955 00:38:35,500 --> 00:38:36,790 PUBLIKUM: Ugyldig id. 956 00:38:36,790 --> 00:38:38,560 DAVID J. Malan: Så det er en anden ugyldig identifikator, 957 00:38:38,560 --> 00:38:39,470 kaldenavn. 958 00:38:39,470 --> 00:38:41,810 Nu er grunden er lidt anderledes. 959 00:38:41,810 --> 00:38:44,370 Der er tydeligvis ingen krøllede parenteser her, men det samme 960 00:38:44,370 --> 00:38:46,790 idé, den samme historie af anvendelsesområdet gælder. 961 00:38:46,790 --> 00:38:50,340 Hvis du har erklæret en variabel ligesom jeg inde i en 962 00:38:50,340 --> 00:38:53,960 for-løkke, dig selv, hvis der ikke udtrykkeligt skrevet den krøllede 963 00:38:53,960 --> 00:38:56,980 seler, så tænk på dem mentalt stadig være der, hvor 964 00:38:56,980 --> 00:39:00,310 tilfælde jeg er kun gyldig inde i for-løkken. 965 00:39:00,310 --> 00:39:03,080 Det er ikke gyldig, når du kommer til den næste linje, som i 966 00:39:03,080 --> 00:39:05,090 denne sag er nu 10. 967 00:39:05,090 --> 00:39:09,060 Så bare et par spørgsmål om omfang og lignende. 968 00:39:09,060 --> 00:39:12,620 Okay, nogen spørgsmål? 969 00:39:12,620 --> 00:39:15,310 >> Okay, så det er lidt af en triviel lille program, 970 00:39:15,310 --> 00:39:17,450 udskrivning blot små stjerner. 971 00:39:17,450 --> 00:39:20,400 Men lad os se om du kan huske den sang her. 972 00:39:20,400 --> 00:39:22,530 Dette er en utroligt irriterende sang børnene ville synge på 973 00:39:22,530 --> 00:39:23,550 skolebussen og lignende. 974 00:39:23,550 --> 00:39:25,990 Men hvad er rart om det er, at det har denne cyclicity, 975 00:39:25,990 --> 00:39:27,910 hvorved det er "99 flasker øl på væggen, 976 00:39:27,910 --> 00:39:28,520 99 flasker øl. 977 00:39:28,520 --> 00:39:31,030 Tag en ned, passerer den rundt, 98 flasker øl om 978 00:39:31,030 --> 00:39:34,330 væg. "Og så sangen gentager 97, så 96, så 979 00:39:34,330 --> 00:39:38,040 95, så 94, hele vejen ned til 0, hvis du rent faktisk fik at 980 00:39:38,040 --> 00:39:38,920 langt på bussen. 981 00:39:38,920 --> 00:39:41,960 Så dette er et godt program til at sortere i redskabet, fordi min 982 00:39:41,960 --> 00:39:43,650 Gud, hvis du bare kunne gennemføre denne med et par 983 00:39:43,650 --> 00:39:46,660 linjer kode, kan du spytte ud hele lyrics til dette 984 00:39:46,660 --> 00:39:48,240 sang ganske hurtigt. 985 00:39:48,240 --> 00:39:50,420 Men hen ad vejen, kan vi begynde at nu drille hinanden nogle 986 00:39:50,420 --> 00:39:52,460 af disse grundlæggende looping konstruktioner og nu også 987 00:39:52,460 --> 00:39:55,830 introducere funktioner, som vi skriver os selv, returnere værdier 988 00:39:55,830 --> 00:39:57,020 vi passerer rundt. 989 00:39:57,020 --> 00:39:58,910 Men først, hvorfor vi ikke gå videre og tage vores fem-minutters 990 00:39:58,910 --> 00:39:59,320 pause her? 991 00:39:59,320 --> 00:40:01,480 Og når vi kommer tilbage, vil vi synge denne sang. 992 00:40:05,680 --> 00:40:08,760 >> Okay, så er vi tilbage. 993 00:40:08,760 --> 00:40:11,850 Og når jeg siger, at vi nu vil synge denne sang, jeg mener 994 00:40:11,850 --> 00:40:13,250 programmeringsmæssigt, ikke verbalt. 995 00:40:13,250 --> 00:40:19,370 Så her har vi beer1.c, som er en implementering af dette 996 00:40:19,370 --> 00:40:20,580 bestemt sang. 997 00:40:20,580 --> 00:40:23,110 Og bare for at være klar, for dem bekendt med, hvad 998 00:40:23,110 --> 00:40:24,460 denne ting ser ud, lad mig gå videre 999 00:40:24,460 --> 00:40:27,070 og gøre beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Lad mig løbe beer1, og hvad vi vil se - hvor mange flasker 1001 00:40:30,400 --> 00:40:31,140 af øl vil der være? 1002 00:40:31,140 --> 00:40:33,240 Jeg vil skrive i 99, ligesom sangen siger. 1003 00:40:33,240 --> 00:40:34,040 Enter. 1004 00:40:34,040 --> 00:40:35,650 Og nu, hvis vi ruller gennem - 1005 00:40:35,650 --> 00:40:38,280 oops - hvis vi ruller gennem alt dette, vil vi se, at 1006 00:40:38,280 --> 00:40:41,350 Dette har faktisk synge hele sangen. 1007 00:40:44,050 --> 00:40:44,540 Vent et øjeblik. 1008 00:40:44,540 --> 00:40:46,240 Min rullepanel er lidt rodet op. 1009 00:40:46,240 --> 00:40:47,940 Lad os bruge større vindue. 1010 00:40:47,940 --> 00:40:53,500 Så beer1, 99, vi der gå. 1011 00:40:53,500 --> 00:40:56,420 Så her har vi hele sangen, sunget meget hurtigere af 1012 00:40:56,420 --> 00:40:58,450 computer end det kunne have været med os. 1013 00:40:58,450 --> 00:41:00,340 Så bemærker dog, den cykliske karakter her. 1014 00:41:00,340 --> 00:41:03,380 Det siger 99, så 99, så "tage en ned, give det 1015 00:41:03,380 --> 00:41:04,740 rundt "og derefter 98. 1016 00:41:04,740 --> 00:41:06,640 Og nu er det gentager igen og igen. 1017 00:41:06,640 --> 00:41:08,840 >> Så dette er faktisk en perfekt mulighed for en slags 1018 00:41:08,840 --> 00:41:10,400 looping konstruktion. 1019 00:41:10,400 --> 00:41:12,950 Bemærk, at jeg er lidt skære et hjørne her. 1020 00:41:12,950 --> 00:41:15,960 Bemærk, at jeg siger "98 flasker øl på væggen, 1021 00:41:15,960 --> 00:41:19,010 97 flasker øl på væggen ", og det var lige så 1022 00:41:19,010 --> 00:41:21,640 at når vi kommer til en flasker øl, jeg har ikke 1023 00:41:21,640 --> 00:41:23,300 at bekymre sig om den engelske grammatik. 1024 00:41:23,300 --> 00:41:25,790 Men vi kan også løse dette med en lille smule af en hvis 1025 00:41:25,790 --> 00:41:26,910 betingelse, måske. 1026 00:41:26,910 --> 00:41:30,110 Hvis dette tal er ental, gå videre og sige "flaske", 1027 00:41:30,110 --> 00:41:31,840 ellers hvis det er flertal, siger "flasker". 1028 00:41:31,840 --> 00:41:34,150 Men for nu, jeg er helt skære dette hjørne. 1029 00:41:34,150 --> 00:41:35,520 Så lad os se, hvad vi har her. 1030 00:41:35,520 --> 00:41:37,150 Så vi har fået nogle kommentarer på toppen. 1031 00:41:37,150 --> 00:41:39,450 Jeg herunder disse to biblioteker, som 1032 00:41:39,450 --> 00:41:41,140 vi har ofte været. 1033 00:41:41,140 --> 00:41:43,610 Og lad mig rulle ned til den første 1034 00:41:43,610 --> 00:41:44,990 faktiske linjer kode. 1035 00:41:44,990 --> 00:41:47,020 Linje 17 starter main. 1036 00:41:47,020 --> 00:41:50,610 Linje 21 og 20 har, hvor mange flasker øl vil der være? 1037 00:41:50,610 --> 00:41:52,060 Og så kalder jeg GetInt. 1038 00:41:52,060 --> 00:41:53,800 Og nu har jeg lidt af en tilregnelighed check. 1039 00:41:53,800 --> 00:41:57,030 >> Så dette er en konvention, at vi nu vil begynde at vedtage at 1040 00:41:57,030 --> 00:41:59,620 mere stringent kontrollere brugerens input. 1041 00:41:59,620 --> 00:42:01,710 Nogle gange er du bare ikke ønsker at bede dem igen 1042 00:42:01,710 --> 00:42:02,630 og igen og igen. 1043 00:42:02,630 --> 00:42:05,620 Hvis brugeren skruer op og ikke samarbejder, fint. 1044 00:42:05,620 --> 00:42:07,430 Afslut og bare ikke håndtere dem. 1045 00:42:07,430 --> 00:42:08,990 Og så det er hvad jeg laver her. 1046 00:42:08,990 --> 00:42:12,520 Hvis n er mindre end 1, vil jeg bare råbe på brugeren, 1047 00:42:12,520 --> 00:42:14,330 "Beklager, det giver ingen mening." Og så jeg har tænkt mig at 1048 00:42:14,330 --> 00:42:16,650 vilkårligt returnere 1. 1049 00:42:16,650 --> 00:42:18,550 Så igen, det er bare en konvention at vænne sig til. 1050 00:42:18,550 --> 00:42:19,850 For nu at tage det på tro. 1051 00:42:19,850 --> 00:42:22,700 Men indtil nu har vi altid været tilbage 0, fordi 1052 00:42:22,700 --> 00:42:25,204 vi har sagt returnere 0 betegner hvad? 1053 00:42:25,204 --> 00:42:26,000 PUBLIKUM: Succes. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. Malan: Succes, det er alt. 1055 00:42:27,320 --> 00:42:29,740 Så nu hvor vi endelig er begyndt at tænke 1056 00:42:29,740 --> 00:42:31,330 ikke-succeser - 1057 00:42:31,330 --> 00:42:33,760 med andre ord, hjørne tilfælde, fejltilstande - 1058 00:42:33,760 --> 00:42:37,520 nu har jeg en uendelig forsyning, eller mindst 4 milliarder 1059 00:42:37,520 --> 00:42:39,790 mulige ting, der kan gå galt i mine programmer. 1060 00:42:39,790 --> 00:42:42,300 Og jeg kan begynde at tildele dem individuelle numre. 1061 00:42:42,300 --> 00:42:44,340 Nu generelt er det tilstrækkeligt at bare returnere 1062 00:42:44,340 --> 00:42:45,730 noget andet end 0. 1063 00:42:45,730 --> 00:42:48,040 Så vi kommer til at blot returnere 1 for nu. 1064 00:42:48,040 --> 00:42:51,440 Men grunden til returnering 1 er, at så snart du vender tilbage 1065 00:42:51,440 --> 00:42:55,110 1, gæt hvad der sker med resten af ​​programmet? 1066 00:42:55,110 --> 00:42:55,720 Det stopper. 1067 00:42:55,720 --> 00:42:56,560 Det er det. 1068 00:42:56,560 --> 00:42:59,150 Så det faktum, at jeg vender tilbage 1 er effektivt 1069 00:42:59,150 --> 00:43:02,950 kortslutte dette program henrettelse, så 1070 00:43:02,950 --> 00:43:06,780 intet nedenfor linie 27 vil fortsætte udførelsen. 1071 00:43:06,780 --> 00:43:09,210 Så snart hovedsagen vender tilbage, er, at den. 1072 00:43:09,210 --> 00:43:13,160 >> Okay, så hvis brugeren ikke samarbejder, og vi når linje 30 1073 00:43:13,160 --> 00:43:15,680 fordi de har skrevet i en legitim tal, her er mit 1074 00:43:15,680 --> 00:43:16,990 gennemførelsen af ​​denne sang. 1075 00:43:16,990 --> 00:43:19,050 Så jeg først udskrive en ny linje, bare for 1076 00:43:19,050 --> 00:43:19,880 æstetik. 1077 00:43:19,880 --> 00:43:21,500 Jeg har nu en for-løkke. 1078 00:43:21,500 --> 00:43:22,930 Og mærke jeg gør tingene på en lidt 1079 00:43:22,930 --> 00:43:23,880 i en anden retning. 1080 00:43:23,880 --> 00:43:26,210 Jeg behøver ikke at gøre mindre end, jeg har ikke nødt til at gøre + +. 1081 00:43:26,210 --> 00:43:30,660 Jeg kan i stedet sige initialisere en variabel i, sæt den lig 1082 00:43:30,660 --> 00:43:35,080 n er antallet brugeren har indtastet i, skal du gøre følgende, så 1083 00:43:35,080 --> 00:43:39,590 længe jeg er større end 0, så jeg - 1084 00:43:39,590 --> 00:43:42,070 når du er færdig gentagelsen af ​​denne løkke. 1085 00:43:42,070 --> 00:43:44,310 Så vi kan tælle ned med en for-løkke så godt. 1086 00:43:44,310 --> 00:43:47,520 Nu, dette er temmelig meget uge en ting nu, med printf. 1087 00:43:47,520 --> 00:43:51,770 Så print "% d flasker øl på væggen." Print "% d 1088 00:43:51,770 --> 00:43:54,990 flasker øl. "" Tag én ned, passerer den rundt. "Print 1089 00:43:54,990 --> 00:43:58,880 "% D flasker øl på væggen." Så det er stadig% d, men 1090 00:43:58,880 --> 00:44:02,770 bemærke, at argumentet printf til at ændre sig. 1091 00:44:02,770 --> 00:44:05,840 Efter komma, har jeg i, fordi jeg ønsker at sige 99. 1092 00:44:05,840 --> 00:44:08,590 Efter denne komma, har jeg i, fordi jeg ønsker at sige 99. 1093 00:44:08,590 --> 00:44:14,030 Efter denne komma, har jeg i - 1, fordi jeg ønsker at sige 98 i 1094 00:44:14,030 --> 00:44:16,260 denne første iteration, og så videre. 1095 00:44:16,260 --> 00:44:18,520 Og nu hernede, jeg bare har en dum lille bemærkning. 1096 00:44:18,520 --> 00:44:22,270 Og så linje 42, jeg returnere 0 ved konvention, som betyder, at 1097 00:44:22,270 --> 00:44:23,650 alt er okay. 1098 00:44:23,650 --> 00:44:24,490 >> Så hvad hvis jeg goofed? 1099 00:44:24,490 --> 00:44:26,350 Hvad kan en almindelig fejl her være? 1100 00:44:26,350 --> 00:44:29,200 Nå, hvad hvis jeg ved et uheld sagde godt, ønsker jeg at tælle 1101 00:44:29,200 --> 00:44:31,640 ned til 0, vil jeg 0 flasker øl på væggen? 1102 00:44:31,640 --> 00:44:34,620 Så jeg siger, jeg er større end eller lig med 0. 1103 00:44:34,620 --> 00:44:38,920 Hvad vil være det symptom, at jeg nu se, om jeg kompilere 1104 00:44:38,920 --> 00:44:41,173 beer1 og køre det? 1105 00:44:41,173 --> 00:44:42,120 PUBLIKUM: Negativ. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. Malan: Ja, det er gonna blive negativ. 1107 00:44:43,590 --> 00:44:45,950 Dette er en forskudt med en fejl, en utrolig 1108 00:44:45,950 --> 00:44:47,270 almindelig fejl at gøre. 1109 00:44:47,270 --> 00:44:48,960 Lad os faktisk gå tilbage til terminalvinduet og gøre det 1110 00:44:48,960 --> 00:44:50,620 her, så vi kan se mere på et tidspunkt. 1111 00:44:50,620 --> 00:44:53,280 Enter, 99 flasker øl. 1112 00:44:53,280 --> 00:44:56,580 Tæt på, men vi gik nogensinde så lidt for langt. 1113 00:44:56,580 --> 00:45:00,500 Vi sang sangen for langt ned, sådan at vi nu ramt 1114 00:45:00,500 --> 00:45:01,510 negativt tal. 1115 00:45:01,510 --> 00:45:03,680 Så det ikke helt virker. 1116 00:45:03,680 --> 00:45:06,450 >> Okay, så vi nemt kan ordne det ved at gå tilbage til 1117 00:45:06,450 --> 00:45:07,650 måde det var engang. 1118 00:45:07,650 --> 00:45:10,360 Men hvad er nogle muligheder nu for 1119 00:45:10,360 --> 00:45:11,190 forbedring? 1120 00:45:11,190 --> 00:45:17,200 Nå, lad mig åbne beer2.c og rulle ned her og tage et 1121 00:45:17,200 --> 00:45:19,310 se på denne version. 1122 00:45:19,310 --> 00:45:21,370 Hvad er den første ting, der springer ud på dig som forskellige 1123 00:45:21,370 --> 00:45:23,715 i denne version her? 1124 00:45:23,715 --> 00:45:24,190 PUBLIKUM: [uhørlig]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. Malan: Yeah, så ikke mere i, fordi det gik op for 1126 00:45:26,510 --> 00:45:29,350 mig ved du hvad, jeg beder brugeren om n, og så er jeg 1127 00:45:29,350 --> 00:45:33,580 indstilling i lig med n, og så er jeg ændre i, men jeg er aldrig 1128 00:45:33,580 --> 00:45:34,590 røre n igen. 1129 00:45:34,590 --> 00:45:37,390 Så hvad dælen var det punkt, du tildele en anden 32 1130 00:45:37,390 --> 00:45:45,210 bits kaldte jeg bare så jeg kan få en anden variabel? 1131 00:45:45,210 --> 00:45:47,960 Så i dette tilfælde, jeg slags anerkendt, at unødvendige 1132 00:45:47,960 --> 00:45:49,190 design funktion. 1133 00:45:49,190 --> 00:45:52,730 Og jeg vil nu sige, mens n er større end 0, skal du gå 1134 00:45:52,730 --> 00:45:56,180 fremad og udskrive den samme sang, der passerer et n til printf som 1135 00:45:56,180 --> 00:46:00,210 andet argument, og n - 1 som det andet argument hernede. 1136 00:46:00,210 --> 00:46:02,930 Og så på hver gentagelse af denne løkke, gå videre og blot 1137 00:46:02,930 --> 00:46:05,080 dekrementere n selv. 1138 00:46:05,080 --> 00:46:06,960 Nu, funktionelt, dette program 1139 00:46:06,960 --> 00:46:08,010 vil være identiske. 1140 00:46:08,010 --> 00:46:10,730 Hvis jeg skriver i 99, n starter kl 99. 1141 00:46:10,730 --> 00:46:12,890 Jeg decrement, decrement, decrement, dekrement. 1142 00:46:12,890 --> 00:46:15,875 Jeg har tænkt mig at komme hele vejen ned til "En flaske øl på 1143 00:46:15,875 --> 00:46:16,740 muren, en flaske øl. 1144 00:46:16,740 --> 00:46:18,020 Tag en ned, passerer det rundt. 1145 00:46:18,020 --> 00:46:21,480 0 flasker øl på væggen. "Sidste ende, fordi jeg gjorde 1146 00:46:21,480 --> 00:46:23,200 får den betingelse korrekt. 1147 00:46:23,200 --> 00:46:24,280 Det er større end 0. 1148 00:46:24,280 --> 00:46:26,220 Jeg har ikke gøre denne fejl. 1149 00:46:26,220 --> 00:46:28,470 >> Så der er bedre, version én eller version to? 1150 00:46:31,380 --> 00:46:33,480 Så hørte jeg en masse murren til to. 1151 00:46:33,480 --> 00:46:34,730 Hvorfor to? 1152 00:46:37,210 --> 00:46:38,225 Hvad er det? 1153 00:46:38,225 --> 00:46:39,215 PUBLIKUM: [uhørlig]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. Malan: Oh, okay. 1155 00:46:40,070 --> 00:46:42,870 Så det vil ikke gå under 0, men husk, i version One, 1156 00:46:42,870 --> 00:46:45,870 original korrekte version ikke gå under 0 enten. 1157 00:46:45,870 --> 00:46:48,340 Så husk, at dette er den korrekte version. 1158 00:46:48,340 --> 00:46:51,630 Så lad os i det mindste sammenligne de to korrekte versioner. 1159 00:46:51,630 --> 00:46:53,300 Hvad er et argument af version 1160 00:46:53,300 --> 00:46:55,146 to er, mmm, bedre? 1161 00:46:55,146 --> 00:46:55,642 Ja? 1162 00:46:55,642 --> 00:46:57,630 PUBLIKUM: Den bruger mindre plads. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. Malan: Okay, så det bruger mindre plads, ikke? 1164 00:46:59,530 --> 00:47:02,900 Betragtninger versionen der bruges 32 bit til n, og derefter en anden 1165 00:47:02,900 --> 00:47:07,680 32 bit for jeg. 1166 00:47:07,680 --> 00:47:10,060 Version to bruger kun 32 bit for n, således at 1167 00:47:10,060 --> 00:47:11,700 synes at være en plus. 1168 00:47:11,700 --> 00:47:12,950 Andre tanker? 1169 00:47:18,070 --> 00:47:21,520 Er der nogen ønsker at argumentere for en? 1170 00:47:21,520 --> 00:47:22,070 Ja? 1171 00:47:22,070 --> 00:47:25,240 PUBLIKUM: Du er nødt til at bruge ekstra linje kode for n -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. Malan: Okay, helt sikkert. 1173 00:47:26,090 --> 00:47:26,960 Så det er fair. 1174 00:47:26,960 --> 00:47:29,040 Så dette bare det mindste for mig - 1175 00:47:29,040 --> 00:47:31,940 Jeg mener, dette faktisk føles lidt Messier, den omstændighed, at 1176 00:47:31,940 --> 00:47:35,120 Jeg kan ikke sortere af indkapsler hele min logik i én 1177 00:47:35,120 --> 00:47:38,030 smuk linje, for-løkken, som for-løkken kan. 1178 00:47:38,030 --> 00:47:40,240 Her vil jeg slags nødt til at hæfte på denne n - 1179 00:47:40,240 --> 00:47:41,120 ved slutningen af ​​sløjfen, da 1180 00:47:41,120 --> 00:47:42,550 Det er logisk nødvendig. 1181 00:47:42,550 --> 00:47:45,190 Men den slags gnider mig den forkerte vej, bare fordi det 1182 00:47:45,190 --> 00:47:48,260 synes adskilt fra logikken i op her, selv om 1183 00:47:48,260 --> 00:47:49,430 igen, det er nødvendigt. 1184 00:47:49,430 --> 00:47:50,990 Andre tanker? 1185 00:47:50,990 --> 00:47:51,490 Ja? 1186 00:47:51,490 --> 00:47:52,740 PUBLIKUM: [uhørlig]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. Malan: Yeah. 1188 00:47:58,350 --> 00:48:00,730 Så hvad nu hvis du i stedet, i slutningen af ​​sangen, ønskede at 1189 00:48:00,730 --> 00:48:02,950 udskrive igen navnet på den sang? 1190 00:48:02,950 --> 00:48:05,660 Ligesom "Tak for at spille 99 flasker øl", noget eller 1191 00:48:05,660 --> 00:48:06,690 fjollet sådan? 1192 00:48:06,690 --> 00:48:09,750 Men pointen er, du ville få adgang til den oprindelige værdi. 1193 00:48:09,750 --> 00:48:13,180 Det faktum, at du har muteret eller ændrede n på hver 1194 00:48:13,180 --> 00:48:16,330 iteration og derfor har ødelagt sin oprindelige værdi 1195 00:48:16,330 --> 00:48:18,650 betyder, at du kan bare ikke gøre det i slutningen. 1196 00:48:18,650 --> 00:48:20,660 Nu, velsagtens, vi tydeligvis ikke ønsker at gøre 1197 00:48:20,660 --> 00:48:21,450 at i dette program. 1198 00:48:21,450 --> 00:48:22,350 Så hvem bekymrer sig? 1199 00:48:22,350 --> 00:48:23,630 Men det er et meget gyldigt punkt. 1200 00:48:23,630 --> 00:48:25,520 Og for at være ærlig, er der virkelig ingen 1201 00:48:25,520 --> 00:48:26,630 rigtige svar her. 1202 00:48:26,630 --> 00:48:28,740 De er begge lige korrekte. 1203 00:48:28,740 --> 00:48:30,210 Jeg kunne blive overbevist enten måde. 1204 00:48:30,210 --> 00:48:33,310 Jeg vil sige, at der generelt, det er et godt princip, hvis du 1205 00:48:33,310 --> 00:48:36,030 spurgte brugeren for en vis værdi, og du har gemt i en variabel 1206 00:48:36,030 --> 00:48:38,730 ligesom n, en slags på princippet lige, er det sikkert godt 1207 00:48:38,730 --> 00:48:40,160 at holde det omkring. 1208 00:48:40,160 --> 00:48:43,400 Og alle data, du ønsker at mutere igen og igen, bare 1209 00:48:43,400 --> 00:48:46,030 give dig selv en kopi af denne variabel, bare så du 1210 00:48:46,030 --> 00:48:47,830 har adgang til den oprindelige. 1211 00:48:47,830 --> 00:48:51,040 Du bruger 32 flere bit, men virkeligheden er dette 1212 00:48:51,040 --> 00:48:53,490 computer har, ligesom, to gigabyte RAM i disse dage, 1213 00:48:53,490 --> 00:48:55,310 og vi ordkløveri over 32 bits? 1214 00:48:55,310 --> 00:48:56,320 Virkelig ikke sådan en big deal. 1215 00:48:56,320 --> 00:48:58,550 Og selv om denne enhed her, med en halv koncert eller en 1216 00:48:58,550 --> 00:49:01,700 gigabyte RAM, 32 bits versus 64 bit, 1217 00:49:01,700 --> 00:49:02,920 ikke sådan en big deal. 1218 00:49:02,920 --> 00:49:05,890 Bestemt i dag, det vil være måde overvældet af størrelsen 1219 00:49:05,890 --> 00:49:08,400 af selve programmet, er der vil være flere hundrede 1220 00:49:08,400 --> 00:49:10,890 kilobyte, hvis ikke et par megabyte, i disse dage. 1221 00:49:10,890 --> 00:49:13,550 >> Så rimelige bekymringer, ingen rigtige svar. 1222 00:49:13,550 --> 00:49:15,490 Men i det mindste det er de tanker, der bør begynde at 1223 00:49:15,490 --> 00:49:16,790 gå gennem dit sind? 1224 00:49:16,790 --> 00:49:19,600 Fordi der i Pset 0, selvom vi egentlig kun forventet 1225 00:49:19,600 --> 00:49:22,340 korrekthed, eller i det mindste fraskrivelse forskellige fejl, der 1226 00:49:22,340 --> 00:49:25,440 du måske har stødt på, som vi bevæger os fremad, design er 1227 00:49:25,440 --> 00:49:27,910 vil være et andet centralt aspekt, som begge skrive kode 1228 00:49:27,910 --> 00:49:29,770 og også vores vurdering kode. 1229 00:49:29,770 --> 00:49:32,310 Og så i det mindste give menes at ting som dette. 1230 00:49:32,310 --> 00:49:35,590 Og bare fordi noget virker, betyder ikke, det er godt, 1231 00:49:35,590 --> 00:49:37,130 betyder ikke, det er godt udformet. 1232 00:49:37,130 --> 00:49:38,820 Og det er en af ​​de ting de undervisningsmæssige fellows og 1233 00:49:38,820 --> 00:49:41,990 problemområder sæt vil hjælpe os med at drille en del over tid. 1234 00:49:41,990 --> 00:49:45,020 >> Nå, hvad med, lad os sige, denne version her? 1235 00:49:45,020 --> 00:49:49,090 Lad mig gøre noget lidt sexet her om et øjeblik. 1236 00:49:49,090 --> 00:49:50,740 Først lad mig slippe af med dette. 1237 00:49:50,740 --> 00:49:54,120 Og lad os nu løse dette grammatisk problem. 1238 00:49:54,120 --> 00:49:58,780 Så i denne version, vil jeg gerne rette grammatik, således at 1239 00:49:58,780 --> 00:50:02,460 snarere end blot sige parentetiske s, som "flaske" 1240 00:50:02,460 --> 00:50:03,360 eller "flasker" - 1241 00:50:03,360 --> 00:50:04,900 Jeg ønsker ikke at skære den hjørne - 1242 00:50:04,900 --> 00:50:08,350 Jeg vil også gerne dynamisk udskrive ordet "flasker" 1243 00:50:08,350 --> 00:50:12,820 eller "flaske" og derved anvende disse% s pladsholdere i dag. 1244 00:50:12,820 --> 00:50:16,550 Så jeg er nødt til at betinget kontrollere, hvad er værdien af ​​i. 1245 00:50:16,550 --> 00:50:19,590 Og hvis det er 1, jeg ønsker at sige "flaske", og hvis det er noget 1246 00:50:19,590 --> 00:50:23,115 ellers vil jeg sige "flasker". Så lad os prøve at gøre dette. 1247 00:50:23,115 --> 00:50:31,340 Så hvis jeg == 1, så lad mig gå videre og erklære - 1248 00:50:31,340 --> 00:50:34,080 Jeg har brug for en snor, så lad mig gøre string s1, fordi det er 1249 00:50:34,080 --> 00:50:36,070 første streng jeg ligeglad med lige nu. 1250 00:50:36,070 --> 00:50:40,980 Jeg har tænkt mig at sige "flaske". Og så, lad os se, string 1251 00:50:40,980 --> 00:50:43,110 s2 - og jeg vil forklare, hvor jeg har tænkt mig om et øjeblik - 1252 00:50:43,110 --> 00:50:47,650 "Flasker". Så huske, at i denne sang, er vi nødt til at kunne 1253 00:50:47,650 --> 00:50:50,580 at udskrive ting, to forskellige ord potentielt. 1254 00:50:50,580 --> 00:50:53,590 Så hvis vi ser tilbage her, bemærke, at når vi kommer til 1255 00:50:53,590 --> 00:50:56,440 dette eksempel her, "to flasker øl på væggen, 1256 00:50:56,440 --> 00:50:59,490 to flasker øl, tage en ned, passerer det rundt ", jeg ønsker 1257 00:50:59,490 --> 00:51:02,380 denne fjerde linie til nu sige "en flaske øl på 1258 00:51:02,380 --> 00:51:04,900 væggen ". Så jeg er nødt til at beslutte, ønsker jeg at sige" flasker "eller 1259 00:51:04,900 --> 00:51:07,780 "Flaske"? Så jeg har tænkt mig at vilkårligt at sige, okay, 1260 00:51:07,780 --> 00:51:10,530 Jeg har tænkt mig at nu erklære en variabel kaldet s1, string 1261 00:51:10,530 --> 00:51:13,830 én, er at gå for at få sat ind her, og også her, 1262 00:51:13,830 --> 00:51:16,070 fordi disse ord er altid identisk, blot på grund af 1263 00:51:16,070 --> 00:51:17,290 karakter af sangen. 1264 00:51:17,290 --> 00:51:20,100 Og jeg har tænkt mig at kalde S2 hvad ord jeg vil 1265 00:51:20,100 --> 00:51:21,560 sidst vises hernede. 1266 00:51:21,560 --> 00:51:25,530 Nu, bogstaveligt talt, 99 gange ud af 100, det vil være den 1267 00:51:25,530 --> 00:51:28,820 samme i begge disse sager, fordi 3 er flertal, 2 er 1268 00:51:28,820 --> 00:51:30,200 flertal, 4 er flertal. 1269 00:51:30,200 --> 00:51:34,640 Men i dette hjørne tilfælde, hvor vi kommer til 2 og derefter 1, eller 1270 00:51:34,640 --> 00:51:37,250 selv 1 og derefter 0, jeg har brug for denne logik. 1271 00:51:37,250 --> 00:51:41,020 Så jeg er nødt til at tilbringe noget tid i min kode at få denne ret. 1272 00:51:41,020 --> 00:51:47,530 Så hvis jeg gør det, hvis jeg == 1, så der s1 er lig med "flaske" 1273 00:51:47,530 --> 00:51:52,010 og s2 er lig med "flasker", fordi det vil være for 1 1274 00:51:52,010 --> 00:51:56,340 flaske, og dette vil være på 0 flasker. 1275 00:51:56,340 --> 00:51:58,250 Og dette her, hvad det repræsenterer? 1276 00:51:58,250 --> 00:51:59,780 Bare for at være klar. 1277 00:51:59,780 --> 00:52:00,620 Dette er blot en kommentar. 1278 00:52:00,620 --> 00:52:03,730 Så det faktum, at du kan have single-line kommentarer betyder, at du 1279 00:52:03,730 --> 00:52:06,110 kan kommentere din kode som denne, men en anden fælles 1280 00:52:06,110 --> 00:52:09,050 paradigme, også er, at hvis du har en super-kort sætning, at 1281 00:52:09,050 --> 00:52:11,410 du ønsker at sætte dig selv og det er bare lettere at læse for at sætte 1282 00:52:11,410 --> 00:52:13,270 det lige for enden af ​​den linje kode, kan du 1283 00:52:13,270 --> 00:52:15,230 absolut gøre noget som dette. 1284 00:52:15,230 --> 00:52:20,150 >> Så hvad nu hvis jeg gør dette? Else hvis jeg ikke er lig med 1. 1285 00:52:20,150 --> 00:52:21,620 Så bang lig - 1286 00:52:21,620 --> 00:52:23,150 udråbstegn er kendt som "bang". 1287 00:52:23,150 --> 00:52:25,080 Så bang = 1. 1288 00:52:25,080 --> 00:52:28,530 Så hvis jeg ikke er lig med 1, hvad skal jeg i stedet ønsker at gøre? 1289 00:52:28,530 --> 00:52:31,700 Nå, det første ord jeg ønsker at være, hvad? 1290 00:52:34,620 --> 00:52:40,030 Så streng 1 bør være "flasker" for pluralistiske flasker, 1291 00:52:40,030 --> 00:52:42,440 og så vil det være flertal "flasker" så godt, for nu. 1292 00:52:42,440 --> 00:52:43,800 Og vi vil se, om det rent faktisk får os til 1293 00:52:43,800 --> 00:52:44,870 hvor vi vil hen. 1294 00:52:44,870 --> 00:52:47,680 Så nu hvis jeg rulle ned her mærke til, at jeg sætter stikket i 1295 00:52:47,680 --> 00:52:50,170 ikke kun jeg, men S1. 1296 00:52:50,170 --> 00:52:51,860 Jeg tilslutte i og s1. 1297 00:52:51,860 --> 00:52:54,440 Og derefter ned her, jeg er minus 1, hvilket er det samme som 1298 00:52:54,440 --> 00:52:55,920 før, men s2. 1299 00:52:55,920 --> 00:52:58,730 Med andre ord ønsker jeg det engelske ord for at ændre baseret 1300 00:52:58,730 --> 00:52:59,930 på denne logik. 1301 00:52:59,930 --> 00:53:03,310 Nu er der allerede nogle problemer i denne kode. 1302 00:53:03,310 --> 00:53:08,460 Hvad er brudt allerede ud af porten her? 1303 00:53:08,460 --> 00:53:10,796 Ja? 1304 00:53:10,796 --> 00:53:13,210 PUBLIKUM: [uhørlig]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. Malan: Præcis. 1306 00:53:13,800 --> 00:53:16,030 Så jeg har allerede overtrådt den lektie af anvendelsesområdet. 1307 00:53:16,030 --> 00:53:19,610 Så jeg har erklæret S1 og S2, men jeg har gjort det inde i 1308 00:53:19,610 --> 00:53:22,980 krøllede parenteser, hvilket betyder yeah, vil denne kode arbejde op 1309 00:53:22,980 --> 00:53:27,430 indtil linje 42, så snart jeg ramte linie 43, men gæt hvad ingen 1310 00:53:27,430 --> 00:53:28,900 længere eksisterer? 1311 00:53:28,900 --> 00:53:32,600 Nå, gætte, hvad er ikke længere i omfang - hverken s1 eller s2. 1312 00:53:32,600 --> 00:53:33,780 Så vi er nødt til at løse dette. 1313 00:53:33,780 --> 00:53:36,180 Så lad mig slette erklæringerne. 1314 00:53:36,180 --> 00:53:39,320 Og jeg vil overlade de variable navne og slette denne her 1315 00:53:39,320 --> 00:53:40,120 og slet denne her. 1316 00:53:40,120 --> 00:53:43,557 Og på hvilken linjer bør jeg virkelig erklære disse ting? 1317 00:53:43,557 --> 00:53:44,960 PUBLIKUM: [uhørlig]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. Malan: Yeah, så sandsynligvis 1319 00:53:45,410 --> 00:53:46,850 lige heroppe, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Så streng s1 og derefter streng s2. 1321 00:53:50,670 --> 00:53:51,950 Og det viser sig, kan jeg gøre det. 1322 00:53:51,950 --> 00:53:54,260 Hvis du erklære to variabler af samme type, 1323 00:53:54,260 --> 00:53:57,420 du kan faktisk bare bruge et komma og gøre det i C. Alle 1324 00:53:57,420 --> 00:53:58,970 højre, så nu har jeg to variable - 1325 00:53:58,970 --> 00:53:59,860 s1 og s2. 1326 00:53:59,860 --> 00:54:02,000 Jeg tildele dem værdier i disse 1327 00:54:02,000 --> 00:54:04,210 forholdene her, eller herinde. 1328 00:54:04,210 --> 00:54:06,690 Og så jeg bruger dem dernede. 1329 00:54:06,690 --> 00:54:10,960 Hvor godt er det nu kommer til at arbejde? 1330 00:54:10,960 --> 00:54:12,740 >> Tja, det er stadig lidt buggy, men lad os i det mindste se 1331 00:54:12,740 --> 00:54:13,730 hvor langt vi har fået. 1332 00:54:13,730 --> 00:54:16,500 Så lad mig gå videre og gøre beer3. 1333 00:54:16,500 --> 00:54:17,695 Er dette beer3? 1334 00:54:17,695 --> 00:54:19,410 Yep, det er beer3. 1335 00:54:19,410 --> 00:54:21,510 Og lad mig nu gå videre og køre beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Vi kan sandsynligvis springe de fleste af dem. 1338 00:54:25,840 --> 00:54:29,100 Og hernede, se på det. 1339 00:54:29,100 --> 00:54:31,110 "En flaske øl på væggen, en flaske øl, tage 1340 00:54:31,110 --> 00:54:34,306 én ned, passerer den rundt, 0 flasker øl på væggen. " 1341 00:54:34,306 --> 00:54:37,570 Men jeg henlede Deres opmærksomhed på kun halvdelen af ​​løsningen. 1342 00:54:37,570 --> 00:54:39,620 Kind of skruet op her. 1343 00:54:39,620 --> 00:54:43,030 Så det lader til, at hjørne sager opstår, når jeg lig hvad 1344 00:54:43,030 --> 00:54:44,030 to værdier? 1345 00:54:44,030 --> 00:54:45,020 PUBLIKUM: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 David J. Malan: 2 og 1. 1347 00:54:46,190 --> 00:54:48,180 Det er ikke 1 og ikke 1. 1348 00:54:48,180 --> 00:54:51,890 Det er virkelig bare de to sidste strofer af denne sang. 1349 00:54:51,890 --> 00:54:53,890 Så hvad gør jeg i stedet ønsker at gøre? 1350 00:54:53,890 --> 00:54:58,890 Så jeg synes at have fanget det tilfælde, hvor hvis jeg er == til 1, 1351 00:54:58,890 --> 00:55:02,240 derefter det første ord er "flaske", men det andet ord 1352 00:55:02,240 --> 00:55:07,230 er "flasker". Men her, jeg ønsker at ændre dette for at være == 2. 1353 00:55:07,230 --> 00:55:08,570 Og hvis dette er tilfældet, hvad jeg vil have det 1354 00:55:08,570 --> 00:55:09,620 første ord at være? 1355 00:55:09,620 --> 00:55:10,430 Publikum: "flasker". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. Malan: "flasker", så for to flasker. 1357 00:55:12,890 --> 00:55:14,690 Og så dette ord her bør være - 1358 00:55:14,690 --> 00:55:15,340 Publikum: "Bottle". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. Malan: "Bottle", ental. 1360 00:55:20,430 --> 00:55:25,160 >> Okay, lad os zoome ud, gå tilbage herovre, re-run gøre, 1361 00:55:25,160 --> 00:55:28,590 omvalg beer3, type 99 igen. 1362 00:55:28,590 --> 00:55:30,710 Okay, "Segmentation fault (core dumpet)." 1363 00:55:30,710 --> 00:55:32,780 Hvad har jeg gjort forkert? 1364 00:55:36,050 --> 00:55:38,722 PUBLIKUM: Du behøver ikke have en værdi [uhørlig]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. Malan: Ah, excellent punkt. 1366 00:55:40,480 --> 00:55:43,310 Okay, så hvad er der galt her? 1367 00:55:43,310 --> 00:55:45,450 Så segmenteringsfejl, og vi faktisk kommer til at se 1368 00:55:45,450 --> 00:55:49,020 dette helt et par gange i fremtiden, bevidst. 1369 00:55:49,020 --> 00:55:51,030 Men for nu, hvad betyder det egentlig? 1370 00:55:51,030 --> 00:55:53,620 En segmentering fejl næsten altid betyder, at du har 1371 00:55:53,620 --> 00:55:56,760 en eller anden måde forsøgt at få adgang hukommelse, RAM i din computer, 1372 00:55:56,760 --> 00:56:00,600 at du ikke ejer, at du faktisk ikke har anmodet 1373 00:56:00,600 --> 00:56:02,050 operativsystem til. 1374 00:56:02,050 --> 00:56:04,440 Så i dette tilfælde, mærke til, hvad jeg har gjort, som er 1375 00:56:04,440 --> 00:56:05,870 behæftet med fejl i min logik. 1376 00:56:05,870 --> 00:56:09,500 Jeg har tildelt s1 og s2 en værdi, hvis jeg er lig med 1. 1377 00:56:09,500 --> 00:56:11,590 Jeg har også gjort det, hvis jeg er lig 2. 1378 00:56:11,590 --> 00:56:13,710 Men jeg har ikke gjort det i det uendelige antal af andre 1379 00:56:13,710 --> 00:56:14,690 muligheder - 1380 00:56:14,690 --> 00:56:17,940 i særdeleshed. 3 eller 4 eller prik, prik, prik, 99 1381 00:56:17,940 --> 00:56:20,100 Så en rettelse til dette kunne bare være lad os 1382 00:56:20,100 --> 00:56:22,190 have en anden tilstand. 1383 00:56:22,190 --> 00:56:26,780 Og lad mig gå ind her og sige s1 lig - 1384 00:56:26,780 --> 00:56:28,180 hvad skulle det være her? 1385 00:56:28,180 --> 00:56:28,750 PUBLIKUM: [uhørlig]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. Malan: "flasker", fordi der i den fælles sag, 1387 00:56:30,460 --> 00:56:32,020 det er bare det samme. 1388 00:56:32,020 --> 00:56:35,580 Så lig citerer, citat slut, "flasker". Så for flertalsformen 1389 00:56:35,580 --> 00:56:41,010 flasker, og derefter op her, for flertalsformer flasker. 1390 00:56:41,010 --> 00:56:44,580 Okay, så lad mig vende tilbage til mit terminalvindue, 1391 00:56:44,580 --> 00:56:47,200 rekompilere, re-køre den. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Puha. 1394 00:56:49,150 --> 00:56:50,610 Og lad os gøre en hurtig tilregnelighed check. 1395 00:56:50,610 --> 00:56:52,400 Teknisk set ville vi ønsker at læse alle disse for at sikre 1396 00:56:52,400 --> 00:56:53,370 de er korrekte, men lad os se på 1397 00:56:53,370 --> 00:56:54,640 mindst de kendte syndere. 1398 00:56:54,640 --> 00:56:57,370 3 flasker, 2 flasker, 2 flasker, 1 1399 00:56:57,370 --> 00:57:00,380 flaske, 1 flaske, 0 flasker. 1400 00:57:00,380 --> 00:57:03,080 Vi synes at have i det mindste fastsættes det for nu. 1401 00:57:03,080 --> 00:57:06,010 Men fangsten her er, at hvad en Gud forfærdelige rod dette er 1402 00:57:06,010 --> 00:57:07,470 bare for at løse en dum 1403 00:57:07,470 --> 00:57:09,540 ét tegn grammatiske detaljer. 1404 00:57:09,540 --> 00:57:11,150 Så der er lidt af en grund, at jeg skar dette hjørne 1405 00:57:11,150 --> 00:57:14,090 tidligere, at fordi det er bare helt irriterende nødt til at 1406 00:57:14,090 --> 00:57:15,020 skrive så meget kode. 1407 00:57:15,020 --> 00:57:17,530 Men det viser sig, at der er lidt mere elegante måder 1408 00:57:17,530 --> 00:57:20,110 udtrykker præcis det samme. 1409 00:57:20,110 --> 00:57:22,040 Og vi kan gøre det på følgende måde. 1410 00:57:22,040 --> 00:57:23,890 >> Lad mig forlade dette på skærmen et øjeblik og 1411 00:57:23,890 --> 00:57:27,320 introducere noget kendt som en ternær operatør. 1412 00:57:27,320 --> 00:57:29,600 Det er lidt af en one-liner, der er blot ment til at gøre vores 1413 00:57:29,600 --> 00:57:31,880 bor en lidt mere sexet, som lovet. 1414 00:57:31,880 --> 00:57:33,130 Og jeg har tænkt mig at gøre det som følger. 1415 00:57:33,130 --> 00:57:35,810 Giv mig en streng kaldet s1, og lad mig 1416 00:57:35,810 --> 00:57:37,200 tildele det som følger. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Flaske", ellers "flasker". String s2 får (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Flaske", ellers "flasker". 1420 00:57:52,670 --> 00:57:57,050 Så hvad er så forskellen her? 1421 00:57:57,050 --> 00:57:59,370 Disse to linjer kode, jeg argumentere, kan 1422 00:57:59,370 --> 00:58:02,200 erstatte hele denne rod. 1423 00:58:02,200 --> 00:58:04,280 Så jeg kalder det noget rod, bare fordi det slags gnider mig 1424 00:58:04,280 --> 00:58:05,940 forkert måde, at det er så mange linjer kode. 1425 00:58:05,940 --> 00:58:06,650 Ikke forkert. 1426 00:58:06,650 --> 00:58:07,700 Det er ikke dårligt design. 1427 00:58:07,700 --> 00:58:10,140 Ligesom, det er helt korrekt og helt fint. 1428 00:58:10,140 --> 00:58:12,970 Men kodning bliver kedelig, hvis du er nødt til at udtrykke dig så 1429 00:58:12,970 --> 00:58:15,530 pokkers specifikt igen og igen og igen med en enkel 1430 00:58:15,530 --> 00:58:16,620 scenarie som dette. 1431 00:58:16,620 --> 00:58:19,470 Så C har nogle genveje, som denne. 1432 00:58:19,470 --> 00:58:24,270 Så dette væsentlige siger erklære en streng kaldet s1 og 1433 00:58:24,270 --> 00:58:32,610 tildele det enten denne værdi eller denne værdi, hvis jeg er == - 1434 00:58:32,610 --> 00:58:35,290 Undskyld, skal jeg sige det mere tydeligt. 1435 00:58:35,290 --> 00:58:41,680 Erklær en variabel s1, tildele det denne værdi, hvis dette er sandt. 1436 00:58:41,680 --> 00:58:44,280 Ellers tildele det denne værdi. 1437 00:58:44,280 --> 00:58:47,220 Så med andre ord, er denne form for en linie måde 1438 00:58:47,220 --> 00:58:51,490 siger, hvis ellers men laver en opgave undervejs. 1439 00:58:51,490 --> 00:58:55,540 Så hvis jeg er 1, derefter gå videre og kalde det "flaske". Og 1440 00:58:55,540 --> 00:58:59,830 så er dette andet, kalder det "flasker". I mellemtiden s2, at 1441 00:58:59,830 --> 00:59:04,060 andet ord, som vi er nødt til at definere, hvis jeg er lig med 2, vil vi 1442 00:59:04,060 --> 00:59:08,350 mængden S2 til "flaske". Ellers sæt den til "flasker". Og hvad 1443 00:59:08,350 --> 00:59:11,460 Dette betyder nu, er jeg kan gå igennem dette og slette alle 1444 00:59:11,460 --> 00:59:12,860 disse linjer kode. 1445 00:59:12,860 --> 00:59:17,220 Og når jeg siger, noget latterligt, at dette nu er 1446 00:59:17,220 --> 00:59:20,060 sexier, det er mere sexet i den slags stilistiske fornuft. 1447 00:59:20,060 --> 00:59:22,660 Det faktum, at funktionelt, er denne kode der faktisk går til 1448 00:59:22,660 --> 00:59:24,610 gøre præcis de samme ting. 1449 00:59:24,610 --> 00:59:26,890 Og selvom det måske ser lidt kryptisk ved første 1450 00:59:26,890 --> 00:59:29,250 blik, fordi vi ikke har set denne konstruktion før, jeg havde 1451 00:59:29,250 --> 00:59:31,850 hævder, at det i sidste ende kommer til at være så meget mere 1452 00:59:31,850 --> 00:59:34,820 læsbar og så meget lettere for vi mennesker at sortere i 1453 00:59:34,820 --> 00:59:36,830 forstå, fordi nu kan du bare læse 1454 00:59:36,830 --> 00:59:38,830 kode på én linje. 1455 00:59:38,830 --> 00:59:41,550 Det er stadig samme ånd til en hvis det, hvor det er 1456 00:59:41,550 --> 00:59:44,920 tilstand og derefter dette er hvad der er inde i if, og dette 1457 00:59:44,920 --> 00:59:46,480 er, hvad der er inde i andet. 1458 00:59:46,480 --> 00:59:49,450 Men vi kan gøre det lige meget mere elegant. 1459 00:59:49,450 --> 00:59:52,650 >> Og hvis jeg nu gå tilbage til min terminal, efter at have slettet alle 1460 00:59:52,650 --> 00:59:55,530 af disse linjer og erstattet dem med bare de to, 1461 00:59:55,530 --> 01:00:00,150 rekompilere, re-run flasker øl med 99, meddelelse om, at min 1462 01:00:00,150 --> 01:00:03,350 grammatik er faktisk stadig korrekt. 1463 01:00:03,350 --> 01:00:06,160 Så igen, noget at starte. 1464 01:00:06,160 --> 01:00:08,840 2 flasker øl, 1 flaske øl. 1465 01:00:08,840 --> 01:00:09,370 Ser ret. 1466 01:00:09,370 --> 01:00:10,100 Yeah. 1467 01:00:10,100 --> 01:00:13,900 Så der har vi en langt mere kortfattet løsning. 1468 01:00:13,900 --> 01:00:16,020 Så det også, som du får mere komfortabel med C, ikke 1469 01:00:16,020 --> 01:00:18,630 nødvendigvis med den første Pset eller endog sekunder, men 1470 01:00:18,630 --> 01:00:21,170 indse, at disse konstruktioner kan tillade os at gøre tingene nogensinde 1471 01:00:21,170 --> 01:00:22,810 mere elegant. 1472 01:00:22,810 --> 01:00:25,200 Nu lad os gøre en anden ting her. 1473 01:00:25,200 --> 01:00:31,460 Lad mig gå videre og åbne op return1.c. 1474 01:00:31,460 --> 01:00:34,340 Lad os nu begynde at løse et andet problem på en måde, 1475 01:00:34,340 --> 01:00:37,140 giver os mulighed for at skrive mere sofistikerede kode. 1476 01:00:37,140 --> 01:00:39,960 >> Så her er en simpel lille program, hvis formål i livet 1477 01:00:39,960 --> 01:00:41,870 at inkrementere værdier. 1478 01:00:41,870 --> 01:00:43,100 Og faktisk, lad os tage et skridt tilbage. 1479 01:00:43,100 --> 01:00:44,400 Lad mig gøre det manuelt. 1480 01:00:44,400 --> 01:00:52,200 Lad mig gøre inkludere og int main (void). 1481 01:00:52,200 --> 01:00:53,450 Og lad mig kalde denne increment.c. 1482 01:00:57,150 --> 01:00:58,570 Og hvad vil jeg gøre? 1483 01:00:58,570 --> 01:01:02,240 Jeg har tænkt mig at gå videre og sige noget lignende - 1484 01:01:02,240 --> 01:01:04,280 vil vi kalde tallene det samme - 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 er% d, ny linje, x. 1487 01:01:13,670 --> 01:01:16,780 Så jeg skriver hurtigt, men slags velkendte ting nu. 1488 01:01:16,780 --> 01:01:18,830 Så jeg har tænkt mig at gøre x + +. 1489 01:01:18,830 --> 01:01:21,710 Så jeg har tænkt mig at udskrive den samme sætning igen. 1490 01:01:21,710 --> 01:01:24,550 Og så jeg har tænkt mig at vende tilbage 0 bare for at afslutte programmet. 1491 01:01:24,550 --> 01:01:25,960 Okay, så dette er et program, 1492 01:01:25,960 --> 01:01:26,960 inkrementer et tal. 1493 01:01:26,960 --> 01:01:29,830 Det er først at gå til initialisere noget til 2, og så er det 1494 01:01:29,830 --> 01:01:33,470 kommer til at forøge den og udskrive den igen. 1495 01:01:33,470 --> 01:01:36,930 >> Så lad os køre tilvækst, utroligt simpelt program. 1496 01:01:36,930 --> 01:01:40,940 Men formoder nu, at jeg ønsker at terning værdien, så gør 1497 01:01:40,940 --> 01:01:42,490 noget noget arbitrær. 1498 01:01:42,490 --> 01:01:45,140 Og jeg vil faktisk gerne gøre x får terning af det. 1499 01:01:45,140 --> 01:01:47,570 Så jeg kunne bruge det, der kaldes pow-funktionen, men jeg gør ikke 1500 01:01:47,570 --> 01:01:48,650 virkelig ved, hvor det er endnu. 1501 01:01:48,650 --> 01:01:50,580 Så jeg har tænkt mig at gøre det på den gammeldags måde. 1502 01:01:50,580 --> 01:01:54,550 x gange svarer dette til x gange x gange x. 1503 01:01:54,550 --> 01:01:56,880 Så jeg Cubing værdien multiplicere det af sig selv igen 1504 01:01:56,880 --> 01:02:00,440 og igen og igen, så vi får magt 1505 01:02:00,440 --> 01:02:02,050 af 3 i dette tilfælde. 1506 01:02:02,050 --> 01:02:06,000 Så nu de tal, jeg skulle udskrive burde være, som vi vil se 1507 01:02:06,000 --> 01:02:08,450 her - gøre tilvækst, så det er faktisk ikke rigtig tilvækst 1508 01:02:08,450 --> 01:02:10,260 længere, men vi vil forlade navn alene - 1509 01:02:10,260 --> 01:02:11,590 2 og derefter 8. 1510 01:02:11,590 --> 01:02:17,670 Nu har vi begyndelsen til en mulighed for raffinement 1511 01:02:17,670 --> 01:02:21,570 her, hvorved denne Cubing ting om at multiplicere et tal 1512 01:02:21,570 --> 01:02:24,680 af sig selv af sig selv i sig selv føles som dette kan bare være 1513 01:02:24,680 --> 01:02:27,920 nyttigt at have som en funktion, ligesom nogen besluttede 1514 01:02:27,920 --> 01:02:30,430 år siden - du ved, sådan nyttig, hvis en af ​​os sidder ned 1515 01:02:30,430 --> 01:02:33,120 og skriver printf så resten af ​​verden kan bruge det, 1516 01:02:33,120 --> 01:02:36,160 hvorfor gør vi ikke sidde ned og skrive en funktion kaldet terning 1517 01:02:36,160 --> 01:02:39,250 der gør dette Cubing for os, så vi ikke behøver at manuelt 1518 01:02:39,250 --> 01:02:41,500 implementere begrebet Cubing værdier her? 1519 01:02:41,500 --> 01:02:44,040 >> Så et simpelt eksempel, men lad os gå videre og bruge dette som en 1520 01:02:44,040 --> 01:02:46,280 mulighed for at skrive vores egen funktion. 1521 01:02:46,280 --> 01:02:49,110 Indtil hidtil har vi kun brugt vigtigste, og vi har brugt andre 1522 01:02:49,110 --> 01:02:51,780 folks funktioner, men vi har ikke skrevet vores egen. 1523 01:02:51,780 --> 01:02:52,650 Så her går vi. 1524 01:02:52,650 --> 01:02:56,330 Jeg har tænkt mig at gå videre og skrive en funktion kaldet terning. 1525 01:02:56,330 --> 01:02:58,490 Og jeg har tænkt mig at få det tage en indgang. 1526 01:02:58,490 --> 01:03:02,070 Så sin indgang vil være et heltal. 1527 01:03:02,070 --> 01:03:03,570 Og hvad er det tænkt sig at gøre? 1528 01:03:03,570 --> 01:03:08,500 Det kommer til at erklære int output = input gange input 1529 01:03:08,500 --> 01:03:09,880 gange input. 1530 01:03:09,880 --> 01:03:12,190 Og så det kommer til at vende tilbage, at output. 1531 01:03:12,190 --> 01:03:14,500 Og så er jeg nødt til at være specifik nu. 1532 01:03:14,500 --> 01:03:16,820 Denne funktion vil returnere en int. 1533 01:03:16,820 --> 01:03:19,130 Så her er så, hvordan du ville skrive dine egne funktioner. 1534 01:03:19,130 --> 01:03:20,850 Du skal først beslutte, hvad er navnet på din 1535 01:03:20,850 --> 01:03:21,720 funktion vil være. 1536 01:03:21,720 --> 01:03:23,964 Og generelt, noget forklarende er god, så jeg vil 1537 01:03:23,964 --> 01:03:25,060 kalder det terning. 1538 01:03:25,060 --> 01:03:27,180 Så er du nødt til at specificere, hvad det kommer til at vende tilbage, hvad er 1539 01:03:27,180 --> 01:03:28,240 sin produktion vil være. 1540 01:03:28,240 --> 01:03:29,595 Og vi har ikke så mange muligheder endnu. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 For nu, vil jeg holde fast i en int, fordi jeg ønsker det 1543 01:03:34,260 --> 01:03:35,880 at returnere et heltal. 1544 01:03:35,880 --> 01:03:38,770 Så er du nødt til at præcisere, hvad dens indgange, hvis nogen, er. 1545 01:03:38,770 --> 01:03:41,570 Og hvis terning tager et argument, tager noget mellem 1546 01:03:41,570 --> 01:03:44,970 parenteser, du har at give dette argument et navn, så 1547 01:03:44,970 --> 01:03:47,860 man kan kalde det noget som du gennemfører eller skriver 1548 01:03:47,860 --> 01:03:50,550 denne funktion, og du er nødt til at give det en type, som i dette 1549 01:03:50,550 --> 01:03:51,810 tilfælde vil være int. 1550 01:03:51,810 --> 01:03:54,690 Så kort sagt, er terning en funktion, der tager et heltal 1551 01:03:54,690 --> 01:03:57,560 som input og returnerer et heltal som output. 1552 01:03:57,560 --> 01:03:59,240 >> Så hvad betyder det gøre med, at input? 1553 01:03:59,240 --> 01:04:03,710 Tja, i linje 14, erklærer jeg en variabel kaldet output, og jeg 1554 01:04:03,710 --> 01:04:07,410 tildele den værdien, input gange input gange input. 1555 01:04:07,410 --> 01:04:11,490 Og så vender jeg tilbage output. 1556 01:04:11,490 --> 01:04:14,890 Så hvordan bruger jeg dette så? 1557 01:04:14,890 --> 01:04:19,210 Hvad skal jeg ændre disse fremhævede tegn på linje 1558 01:04:19,210 --> 01:04:21,006 7, der skal, tror du? 1559 01:04:21,006 --> 01:04:21,800 PUBLIKUM: [uhørlig]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. Malan: Ja, så terning af x. 1561 01:04:25,570 --> 01:04:28,290 Så x er en variabel, hvilket betyder, at det besidder en vis værdi. 1562 01:04:28,290 --> 01:04:30,190 Heldigvis er det af typen heltal. 1563 01:04:30,190 --> 01:04:34,280 Og fordi x er en int, der betyder, at jeg kan give det til terning. 1564 01:04:34,280 --> 01:04:39,500 Og selvom jeg tvingende værdien af ​​x med den værdi 1565 01:04:39,500 --> 01:04:42,780 af kube x, som det har været tilfældet hidtil, hver gang du 1566 01:04:42,780 --> 01:04:46,150 har lighedstegn og en linje kode, de ting på den rigtige 1567 01:04:46,150 --> 01:04:49,090 bliver henrettet, og bliver tildelt 1568 01:04:49,090 --> 01:04:50,150 værdien til venstre. 1569 01:04:50,150 --> 01:04:52,950 Så rækkefølgen af ​​operationer er, som vi kunne håbe. 1570 01:04:52,950 --> 01:04:56,620 Så fungerer det? 1571 01:04:56,620 --> 01:04:58,410 Nå, lad mig gå ned her. 1572 01:04:58,410 --> 01:04:59,970 Lad mig åbne mit terminalvindue. 1573 01:04:59,970 --> 01:05:03,610 Lad mig gør tilvækst, Enter. 1574 01:05:03,610 --> 01:05:07,140 "Implicit erklæring af funktionen 'terning' er ugyldig i 1575 01:05:07,140 --> 01:05:13,700 C99 ". Som en sidebemærkning C99 refererer til sproget C, som det var 1576 01:05:13,700 --> 01:05:16,790 fastlagt i 1999, hvilket var en opdatering over version fra 1577 01:05:16,790 --> 01:05:19,360 1989, hvilket er en opdatering i den oprindelige. 1578 01:05:19,360 --> 01:05:21,740 Så det er alt der betyder. 1579 01:05:21,740 --> 01:05:24,250 >> Så hvad betyder det, at "der er 1580 01:05:24,250 --> 01:05:26,790 funktionen 'terning' er ugyldig? "Det er lige her. 1581 01:05:26,790 --> 01:05:28,430 Det er lige der på linje 12. 1582 01:05:28,430 --> 01:05:30,460 PUBLIKUM: [uhørlig]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. Malan: Hvad er det? 1584 01:05:30,730 --> 01:05:32,470 PUBLIKUM: Det er ikke før. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. Malan: Det er ikke før. 1586 01:05:33,540 --> 01:05:34,740 Så dette er den ting. 1587 01:05:34,740 --> 01:05:38,190 C er en slags dum, eller C-compilere er lidt dum. 1588 01:05:38,190 --> 01:05:41,060 De virkelig kun gøre, hvad du fortæller dem at gøre. 1589 01:05:41,060 --> 01:05:44,770 Og de bl.a. læse kun din kode top til bund, 1590 01:05:44,770 --> 01:05:45,620 venstre til højre. 1591 01:05:45,620 --> 01:05:49,140 Så hvis compileren, Dunk, læser din kode, linje 1, det 1592 01:05:49,140 --> 01:05:50,120 tal ud af hvordan du gør dette. 1593 01:05:50,120 --> 01:05:50,940 Åh, her kommer main. 1594 01:05:50,940 --> 01:05:53,000 Okay, lad mig gå videre og erklære en variabel x. 1595 01:05:53,000 --> 01:05:54,160 Lad mig udskrive noget. 1596 01:05:54,160 --> 01:05:55,890 Linje 7, hvad dælen er terning? 1597 01:05:55,890 --> 01:05:58,230 Det er ikke erklæret i stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Det kommer ikke med C. Jeg har ingen idé om hvad de skal gøre. 1599 01:06:00,950 --> 01:06:03,960 Og så Dunk bare bails og afsluttes med denne fejlmeddelelse. 1600 01:06:03,960 --> 01:06:05,850 Så vi kan løse dette på et par forskellige måder. 1601 01:06:05,850 --> 01:06:10,530 Vi kan undervise Dunk hvilken terning er ved blot at flytte, når 1602 01:06:10,530 --> 01:06:11,820 erklæring er. 1603 01:06:11,820 --> 01:06:14,640 Så jeg klippet og klistret det oven main. 1604 01:06:14,640 --> 01:06:17,770 Nu indse, at bare fordi main er ikke længere først, det er 1605 01:06:17,770 --> 01:06:19,150 stadig henrettet som standard. 1606 01:06:19,150 --> 01:06:20,060 Main er main. 1607 01:06:20,060 --> 01:06:21,022 Det er standard funktion navn. 1608 01:06:21,022 --> 01:06:22,930 Det betyder ikke noget, hvor det er i en fil. 1609 01:06:22,930 --> 01:06:26,910 Men i det mindste nu Dunk har set terning før jeg bruger det. 1610 01:06:26,910 --> 01:06:28,500 Så lad os se om Dunk er gladere nu. 1611 01:06:28,500 --> 01:06:31,410 Gør tilvækst, gjorde det kompilere denne gang. 1612 01:06:31,410 --> 01:06:33,060 >> Lad mig løbe tilvækst. 1613 01:06:33,060 --> 01:06:34,810 Og ja, det synes at virke. 1614 01:06:34,810 --> 01:06:36,810 Nu kan du komme op med scenarier til sidst hvor 1615 01:06:36,810 --> 01:06:38,650 det er ikke muligt at sætte enhver funktion 1616 01:06:38,650 --> 01:06:39,740 over hver anden funktion. 1617 01:06:39,740 --> 01:06:42,140 Du vil sidde fast i denne uendelig løkke i virkeligheden, 1618 01:06:42,140 --> 01:06:43,480 hvor denne fyr ønsker at være her, men dette 1619 01:06:43,480 --> 01:06:44,390 fyr skal være der. 1620 01:06:44,390 --> 01:06:45,830 Så det fungerer ikke altid. 1621 01:06:45,830 --> 01:06:49,020 Så heldigvis, C har en mere elegant løsning. 1622 01:06:49,020 --> 01:06:50,790 Jeg har tænkt mig at sætte dette tilbage, hvor det var, bare fordi jeg 1623 01:06:50,790 --> 01:06:53,390 foretrækker, som en principsag, at main altid være 1624 01:06:53,390 --> 01:06:55,550 i toppen, fordi er bare rart at se, hvad dette program 1625 01:06:55,550 --> 01:06:56,920 gør som standard. 1626 01:06:56,920 --> 01:06:58,950 Og hvad jeg har tænkt mig at gøre heroppe er erklære, hvad der kaldes 1627 01:06:58,950 --> 01:07:00,250 en prototype. 1628 01:07:00,250 --> 01:07:05,730 Jeg har tænkt mig at re-erklære min terning funktion ved bogstaveligt 1629 01:07:05,730 --> 01:07:07,180 kopiere og indsætte. 1630 01:07:07,180 --> 01:07:08,290 Faktisk er det ikke bogstaveligt. 1631 01:07:08,290 --> 01:07:13,060 Så bogstaveligt kopiere og indsætte linie 15 1632 01:07:13,060 --> 01:07:15,160 op over linjen 6. 1633 01:07:15,160 --> 01:07:17,010 Det er ligegyldigt, hvilken linje dette ender på. 1634 01:07:17,010 --> 01:07:18,380 Det sker for at være på linie 4. 1635 01:07:18,380 --> 01:07:19,950 Men det behøver at være før main. 1636 01:07:19,950 --> 01:07:21,150 Men læg mærke forskellen. 1637 01:07:21,150 --> 01:07:24,100 Linje 4 ender med et semikolon, hvilket betyder hey, 1638 01:07:24,100 --> 01:07:27,510 Klang, tage mit ord for det, at der findes en funktion 1639 01:07:27,510 --> 01:07:31,350 kaldet terning, der tager en int og returnerer en int. 1640 01:07:31,350 --> 01:07:33,020 Men jeg vil ikke fortælle dig, hvad det er endnu. 1641 01:07:33,020 --> 01:07:35,180 Bare vide, at jeg lover at fortælle dig i sidste ende. 1642 01:07:35,180 --> 01:07:38,490 Og ja, nu er det okay, at dette er dernede. 1643 01:07:38,490 --> 01:07:41,275 >> Så dette er generelt bedre, for så i toppen af 1644 01:07:41,275 --> 01:07:44,240 din fil, kan du bare aflire, hurtige brand, en linje 1645 01:07:44,240 --> 01:07:46,470 hver, hvad navnene på dine funktioner er, hvad deres 1646 01:07:46,470 --> 01:07:49,120 indgange er, hvad deres udgange er. 1647 01:07:49,120 --> 01:07:52,210 Og for at være mere klar, input betyder generelt argument eller 1648 01:07:52,210 --> 01:07:54,110 parameter, synonyme. 1649 01:07:54,110 --> 01:07:56,890 Output betyder returværdi, hvad betyder det 1650 01:07:56,890 --> 01:07:58,700 hånd tilbage til mig. 1651 01:07:58,700 --> 01:08:03,420 Så i dette tilfælde her, er terning blevet erklæret i toppen, men 1652 01:08:03,420 --> 01:08:06,940 defineret, også kendt som implementeres, i bunden. 1653 01:08:06,940 --> 01:08:09,620 Så lad os nu gå tilbage her og returnerer til dette. 1654 01:08:09,620 --> 01:08:13,430 Så nu lad mig gå videre og igen køre make, re-run tilvækst. 1655 01:08:13,430 --> 01:08:16,500 Og det ser nu ud til at virke fint. 1656 01:08:16,500 --> 01:08:19,450 Så nu kan vi gå videre og faktor ud af noget som 1657 01:08:19,450 --> 01:08:23,720 øl eksempel i denne fjerde udgave. 1658 01:08:23,720 --> 01:08:25,590 Så lad mig rulle ned her. 1659 01:08:25,590 --> 01:08:28,149 Og bemærke, at jeg slags tog denne lektion til hjertet lige nu. 1660 01:08:28,149 --> 01:08:31,140 Det faktum, at jeg var synger den samme strofe igen og 1661 01:08:31,140 --> 01:08:34,130 igen og igen, det samme kor linje i sangen, følte 1662 01:08:34,130 --> 01:08:36,439 ligesom hvorfor gør jeg ikke faktor, ud i en funktion? 1663 01:08:36,439 --> 01:08:38,470 Og ja, bør dette være et af motiverne. 1664 01:08:38,470 --> 01:08:40,960 Ud over det faktum, at nogen andre i verden vil måske 1665 01:08:40,960 --> 01:08:42,390 at anvende en terning funktion - 1666 01:08:42,390 --> 01:08:44,560 der er en god grund til faktor noget ud og skriv din 1667 01:08:44,560 --> 01:08:45,720 egne brugerdefinerede funktion - 1668 01:08:45,720 --> 01:08:48,720 hvis der er et stykke kode i dit program, der bare gør 1669 01:08:48,720 --> 01:08:51,370 begrebsmæssig forstand, at du slags ønsker at give det en 1670 01:08:51,370 --> 01:08:53,740 navn - som i dette tilfælde, kor - 1671 01:08:53,740 --> 01:08:57,380 så kan du ligeledes skrive det som en separat funktion. 1672 01:08:57,380 --> 01:08:59,560 Du behøver ikke at skrive alt i main hvis det bare 1673 01:08:59,560 --> 01:09:02,609 føles renere at adskille det, og giv den et navn. 1674 01:09:02,609 --> 01:09:05,529 >> Så i dette tilfælde her, bemærke, at jeg har en kommentar oven 1675 01:09:05,529 --> 01:09:06,859 denne funktion, som kun synger om 1676 01:09:06,859 --> 01:09:08,630 angivne antal flasker. 1677 01:09:08,630 --> 01:09:10,609 Bemærk her, at jeg ikke behøver at kalde disse 1678 01:09:10,609 --> 01:09:12,520 ting input og output. 1679 01:09:12,520 --> 01:09:16,090 Faktisk jeg denne gang har lige ringet min indgang B til flaske. 1680 01:09:16,090 --> 01:09:19,960 Og mærke her, ugyldig antyder, hvad? 1681 01:09:19,960 --> 01:09:21,309 Denne kor - 1682 01:09:21,309 --> 01:09:22,660 PUBLIKUM: Har ikke returnere den. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. Malan: returnerer ikke en værdi. 1684 01:09:23,870 --> 01:09:26,800 Og ja, behøver funktioner ikke behøver at vende tilbage værdier. 1685 01:09:26,800 --> 01:09:28,060 De kan bare gøre noget. 1686 01:09:28,060 --> 01:09:30,270 De kan have såkaldte bivirkninger, som i dette 1687 01:09:30,270 --> 01:09:33,109 Sagen er bare en hel bunke af udskrivning på skærmen. 1688 01:09:33,109 --> 01:09:36,580 Så bemærke, at denne kode, jeg bogstaveligt talt bare stjal fra 1689 01:09:36,580 --> 01:09:37,680 det foregående eksempel. 1690 01:09:37,680 --> 01:09:39,930 Den eneste forskel er i stedet for at bruge i som min 1691 01:09:39,930 --> 01:09:42,890 variable, jeg nu bruger b som min variabel. 1692 01:09:42,890 --> 01:09:45,880 Så jeg har b hernede, jeg har b hernede, jeg har b 1693 01:09:45,880 --> 01:09:47,109 minus 1 ned her. 1694 01:09:47,109 --> 01:09:49,279 Men koden er nøjagtig den samme. 1695 01:09:49,279 --> 01:09:52,529 Men bare for at vise dig nu, hvordan vi kan bruge dette, så lad mig gå 1696 01:09:52,529 --> 01:09:56,780 fremad og faktisk ændre dette for at være en for-løkke. 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å jeg har stjålet den fra vores tidligere eksempel. 1699 01:10:06,230 --> 01:10:08,970 Tidligere er det på linje 37, at jeg ville have startet 1700 01:10:08,970 --> 01:10:10,640 synge denne irriterende sang. 1701 01:10:10,640 --> 01:10:15,810 Men i stedet, jeg bare nu kalder koret af i. 1702 01:10:15,810 --> 01:10:16,870 Udført. 1703 01:10:16,870 --> 01:10:20,260 Så nu i hver iteration af denne løkke, kalder jeg denne anden 1704 01:10:20,260 --> 01:10:22,220 funktion, kor, som jeg tilfældigvis at skrive. 1705 01:10:22,220 --> 01:10:24,110 Det blev ikke skrevet af en anden år siden. 1706 01:10:24,110 --> 01:10:27,930 Men kor, i mellemtiden, bruger printf at udskrive 1707 01:10:27,930 --> 01:10:29,840 af disse fire linjer. 1708 01:10:29,840 --> 01:10:32,720 Men det faktum, at jeg ringer kor igen og igen i en 1709 01:10:32,720 --> 01:10:35,900 løkke betyder, at jeg har tænkt mig at få, til allersidst, det 1710 01:10:35,900 --> 01:10:39,310 nøjagtig samme sang, som jeg har hidtil. 1711 01:10:39,310 --> 01:10:42,130 Så kort sagt, nu, hvis jeg ser tilbage på min kode, selvom 1712 01:10:42,130 --> 01:10:44,240 funktionelt dette er ækvivalent, bemærke, at det er 1713 01:10:44,240 --> 01:10:46,020 begyndt at få endnu mere læsevenlig. 1714 01:10:46,020 --> 01:10:48,410 Jeg ved ikke præcis, hvordan GetInt 1715 01:10:48,410 --> 01:10:49,250 er implementeret. 1716 01:10:49,250 --> 01:10:52,050 Helt ærligt, jeg ved ikke, hvordan kor er implementeret. 1717 01:10:52,050 --> 01:10:52,970 Men det betyder ikke noget for mig. 1718 01:10:52,970 --> 01:10:55,620 Jeg er ligeglad, fordi jeg nu kan sortere i, som et menneske, læse 1719 01:10:55,620 --> 01:10:57,050 dette fra top til bund. 1720 01:10:57,050 --> 01:10:59,950 Og fordi funktionerne er navngivet efter, hvad de 1721 01:10:59,950 --> 01:11:02,910 gør, min kode bliver stadig læses. 1722 01:11:02,910 --> 01:11:05,190 Og da vores programmer får meget mere kompleks - 1723 01:11:05,190 --> 01:11:07,220 ved semestrets afslutning, vil du skrive hundredvis af linjer 1724 01:11:07,220 --> 01:11:10,970 af kode i sprog som PHP og JavaScript og lignende - 1725 01:11:10,970 --> 01:11:13,550 vil du opdage, at det er så meget nemmere end at holde styr på 1726 01:11:13,550 --> 01:11:14,080 hvad du har gjort. 1727 01:11:14,080 --> 01:11:15,810 Og når du begynder at samarbejde med venner eller 1728 01:11:15,810 --> 01:11:19,010 partnere eller kolleger, vil du være i stand til at skrive meget mere 1729 01:11:19,010 --> 01:11:22,910 massive programmer ved at begynde at udøve disse grundlæggende 1730 01:11:22,910 --> 01:11:23,990 byggesten. 1731 01:11:23,990 --> 01:11:25,550 >> Så med det sagt, hvorfor vi ikke kalde det en dag? 1732 01:11:25,550 --> 01:11:27,190 Og vi vil se dig på onsdag. 1733 01:11:27,190 --> 01:11:33,611 [Bifald]