1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] DAVID J. Malan: Okay, det er CS50, og det er 2 00:00:09,920 --> 00:00:15,250 slutningen af ​​uge 1, så undersøgelse kort er i og det samlede antal 3 00:00:15,250 --> 00:00:18,640 klassekammerater, at du har dette år er 745. 4 00:00:18,640 --> 00:00:20,920 Og vi er så glade for at have så mange af jer i løbet 5 00:00:20,920 --> 00:00:23,680 dette semester, men selvom dette kursus er så stort, 6 00:00:23,680 --> 00:00:26,090 indse, at det er disse ting som fredag ​​frokoster, ligesom 7 00:00:26,090 --> 00:00:29,020 kontortid, 15-personers sektioner og så videre, at 8 00:00:29,020 --> 00:00:30,590 er virkelig meningen at skabe denne mere intime 9 00:00:30,590 --> 00:00:31,140 miljø. 10 00:00:31,140 --> 00:00:34,070 Så selv om vi måske samle en gang eller to gange om ugen, her i 11 00:00:34,070 --> 00:00:36,420 Sanders, ved, at meget af din erfaring på dette kursus 12 00:00:36,420 --> 00:00:39,330 vil meget være hands-on på siden af ​​dine klassekammerater 13 00:00:39,330 --> 00:00:40,730 og underviserne. 14 00:00:40,730 --> 00:00:43,960 >> Så her vi går, Fall 2012. 15 00:00:43,960 --> 00:00:47,530 Så minde om, at sidste gang, vi endte på et notat af 16 00:00:47,530 --> 00:00:50,460 upræcist, taler om repræsentation af tal. 17 00:00:50,460 --> 00:00:52,950 Og vi kiggede på en af ​​de fejl, der skete i 18 00:00:52,950 --> 00:00:54,920 virkelige verden, når det kom til misforståelse 19 00:00:54,920 --> 00:00:55,890 hvordan computere fungerer. 20 00:00:55,890 --> 00:00:58,590 Nå, i dag vil vi gense en anden af ​​disse ideer 21 00:00:58,590 --> 00:01:01,410 samt fortsætte vores diskussion af CS50 klient 22 00:01:01,410 --> 00:01:04,090 og C og hvad det betyder egentlig at programmere. 23 00:01:04,090 --> 00:01:06,430 Men først lige et par hvirvelvind annonceringer. 24 00:01:06,430 --> 00:01:08,930 >> Sektioner begynder denne søndag, og den første uge er altid en 25 00:01:08,930 --> 00:01:11,030 lidt af en hurtig start, fordi vi har lige fået i 26 00:01:11,030 --> 00:01:12,620 din afdeling formularer. 27 00:01:12,620 --> 00:01:14,450 Vi gør det samme, nu med undervisningen stipendiater, nu 28 00:01:14,450 --> 00:01:16,410 at de kender deres tidsplaner, så vi sigter, ved 29 00:01:16,410 --> 00:01:19,380 Lørdag morgen, for at følge op med dig med din afdeling 30 00:01:19,380 --> 00:01:20,760 opgave og TF. 31 00:01:20,760 --> 00:01:22,770 Erkend, at de vil starte næste dag, søndag 32 00:01:22,770 --> 00:01:24,510 eller mandag eller tirsdag. 33 00:01:24,510 --> 00:01:27,730 Og så vil vi rumme afsnit ændringer, som de opstår 34 00:01:27,730 --> 00:01:28,690 i de kommende dage. 35 00:01:28,690 --> 00:01:31,590 Kontortid, i mellemtiden, er, igen, i aften, 8 PM til 11, 36 00:01:31,590 --> 00:01:33,740 Annenberg, samt i morgen aften. 37 00:01:33,740 --> 00:01:36,150 Selvom problemet sæt skyldes generelt om torsdagen 38 00:01:36,150 --> 00:01:39,020 ved middagstid, indser du har op til fem sene dage at tilbringe, 39 00:01:39,020 --> 00:01:42,430 dermed tilgængeligheden for kontortid om torsdagen, hvis 40 00:01:42,430 --> 00:01:45,930 du kontanter i en af ​​disse sene dage og dermed indsende 41 00:01:45,930 --> 00:01:47,070 noget på fredag. 42 00:01:47,070 --> 00:01:50,850 Lad mig foreslå, at Scratch er blandt de sjovere, blandt 43 00:01:50,850 --> 00:01:52,390 mere lav centrale problem sæt. 44 00:01:52,390 --> 00:01:55,160 Og jeg vil hænge på de sene dage, strategisk, bare 45 00:01:55,160 --> 00:01:57,380 til senere i det semester, hvor livet begynder at komme i vejen 46 00:01:57,380 --> 00:01:59,470 med midterms og andre klasser. 47 00:01:59,470 --> 00:02:01,580 Problem Set 1, i mellemtiden ville blive lagt ud på kursets 48 00:02:01,580 --> 00:02:06,080 website denne fredag, som det vil være på kurset gang 49 00:02:06,080 --> 00:02:08,789 gennem video, som vil blive filmet på 2:30 PM på fredag 50 00:02:08,789 --> 00:02:11,890 og derefter lagt online ved den næste dag. 51 00:02:11,890 --> 00:02:13,880 >> Så vi endte på mandag. 52 00:02:13,880 --> 00:02:15,450 Jeg vil gerne - faktisk, man bemærke her. 53 00:02:15,450 --> 00:02:18,870 Fordi klasser - fordi Sanders ikke ligefrem egner 54 00:02:18,870 --> 00:02:22,220 sig til afslappet Q & A frem og tilbage frygtelig godt, vi er 55 00:02:22,220 --> 00:02:24,030 vil prøve noget lidt nyt i år, hvorved 56 00:02:24,030 --> 00:02:26,160 hvis du ikke er behageligt at hæve din hånd, eller du bare 57 00:02:26,160 --> 00:02:28,800 ville hellere ikke hæve din hånd i et rum som dette, 58 00:02:28,800 --> 00:02:30,710 vi skal have nogle af de pædagogiske stipendiater og CA 59 00:02:30,710 --> 00:02:33,260 bemanding cs50.net/discuss under forelæsning. 60 00:02:33,260 --> 00:02:35,440 Så hvis du har et spørgsmål, fordi jeg var helt 61 00:02:35,440 --> 00:02:37,510 uklart om noget eller du er nysgerrig om nogle 62 00:02:37,510 --> 00:02:39,640 emne, kan du prøve udstationering det der. 63 00:02:39,640 --> 00:02:42,670 Tag den med en etiket af Forelæsning, og vi vil gøre vores bedste 64 00:02:42,670 --> 00:02:45,430 i dag og i næste uge - we'll prøve dette - at området det 65 00:02:45,430 --> 00:02:47,990 enten elektronisk, online, eller hvis det føles som om vi skulle 66 00:02:47,990 --> 00:02:50,430 virkelig behandle det i massevis, en af ​​de pædagogiske stipendiater eller 67 00:02:50,430 --> 00:02:52,080 CA'er vil hæve deres hånd og bede 68 00:02:52,080 --> 00:02:53,480 anonymt på dine vegne. 69 00:02:53,480 --> 00:02:55,650 Så vi vil give det en chance og se, hvor godt det virker. 70 00:02:55,650 --> 00:02:58,540 Men, med alle midler, fortsætte med at hæve hænder, som du ønsker. 71 00:02:58,540 --> 00:03:11,420 >> Så sidste gang vi viste, at 10% eller en tiendedel ikke er i 72 00:03:11,420 --> 00:03:13,840 kendsgerning, 0,1, ligesom du er blevet instrueret mange år siden. 73 00:03:13,840 --> 00:03:15,390 Det er i virkeligheden en værdi som dette. 74 00:03:15,390 --> 00:03:16,970 Men det er ikke helt sandt, ikke? 75 00:03:16,970 --> 00:03:19,585 Vi har bare denne begrænsning i computere, hvorved, hvis du 76 00:03:19,585 --> 00:03:22,450 har kun en begrænset mængde hukommelse, RAM eller flere 77 00:03:22,450 --> 00:03:25,220 specifikt bits, ja, der er kun et begrænset antal 78 00:03:25,220 --> 00:03:26,980 af ting, du kan repræsentere. 79 00:03:26,980 --> 00:03:29,780 For eksempel har vi, hvis vi har tallet nul, og ønsker at 80 00:03:29,780 --> 00:03:32,790 repræsenterer i binær under anvendelse af otte bits, hvis en smule, 81 00:03:32,790 --> 00:03:34,710 igen, er et nul eller én, vi måske 82 00:03:34,710 --> 00:03:39,240 repræsentere det som 00000000. 83 00:03:39,240 --> 00:03:41,160 Og det er lidt unødigt detaljeret. 84 00:03:41,160 --> 00:03:43,700 Ligesom i den decimal system i den virkelige verden, 85 00:03:43,700 --> 00:03:47,040 generelt, hvis du ønsker at skrive nummeret 123, vi 86 00:03:47,040 --> 00:03:52,240 mennesker sandsynligvis ikke skrive 00000123, selv om 87 00:03:52,240 --> 00:03:53,940 funktionelt, det er nøjagtig samme nummer. 88 00:03:53,940 --> 00:03:56,580 Vi har lige droppe nuller, så at sige. 89 00:03:56,580 --> 00:03:58,270 >> I binær, kan vi gøre det samme. 90 00:03:58,270 --> 00:04:01,440 Binær og nul, nul og binære er bare nul. 91 00:04:01,440 --> 00:04:02,870 Du behøver kun en enkelt bit. 92 00:04:02,870 --> 00:04:05,020 Men igen, den mest almindelige måleenhed i verden 93 00:04:05,020 --> 00:04:07,820 af computing er bytes, otte bits. 94 00:04:07,820 --> 00:04:09,720 Bare fordi en bit, temmelig ubrugelig. 95 00:04:09,720 --> 00:04:12,020 Otte bits, ikke frygtelig nyttige, men mindst det er mere 96 00:04:12,020 --> 00:04:14,280 anvendelig end en enkelt måleenhed. 97 00:04:14,280 --> 00:04:17,100 Så med otte bits, vil vi typisk repræsentere binære. 98 00:04:17,100 --> 00:04:20,459 Så her har vi numrene nul, et, to, og derefter, som 99 00:04:20,459 --> 00:04:24,200 Nate gjorde i vores video sidste onsdag, kan vi fortsætte 100 00:04:24,200 --> 00:04:25,940 tælle op til syv, til otte. 101 00:04:25,940 --> 00:04:27,860 Og så hvis vi bruger flere og flere bits, vi 102 00:04:27,860 --> 00:04:29,880 kan tælle op til uendeligt. 103 00:04:29,880 --> 00:04:32,800 Men hvis du kun har et begrænset antal af disse bits, som er 104 00:04:32,800 --> 00:04:35,030 tilfældet i ethvert computersystem, eller endog missil 105 00:04:35,030 --> 00:04:36,670 system, ja, ja du kun har et 106 00:04:36,670 --> 00:04:37,900 endelig mængde præcision. 107 00:04:37,900 --> 00:04:41,290 Så hvis du ønsker at repræsentere tal som 0,1, godt, 108 00:04:41,290 --> 00:04:43,410 computer har at vælge og vrage. 109 00:04:43,410 --> 00:04:45,970 Og hvis det kun har et begrænset antal numre det kan 110 00:04:45,970 --> 00:04:50,490 repræsenterer, kan det komme tæt på 0,1 for dig, men det kan ikke 111 00:04:50,490 --> 00:04:53,730 nødvendigvis giver dig præcis den værdi, du ønsker. 112 00:04:53,730 --> 00:04:55,660 Og det er blot en af ​​de udfordringer, computere, 113 00:04:55,660 --> 00:04:57,090 under hætten. heldigvis 114 00:04:57,090 --> 00:04:59,110 >> Efterhånden som vi bevæger længere i semestret, disse lavere niveau 115 00:04:59,110 --> 00:05:02,310 detaljer bliver meget mindre interessant, men helt sikkert 116 00:05:02,310 --> 00:05:05,700 anvendelse af disse ideer kan have nogle meget virkelige verden 117 00:05:05,700 --> 00:05:06,760 forgreninger. 118 00:05:06,760 --> 00:05:08,190 Den ene er en smule sjov. 119 00:05:08,190 --> 00:05:12,150 Hvor mange af jer har set den fantastiske film Office Space? 120 00:05:12,150 --> 00:05:13,620 Hvis du ikke har, det er din uofficielle 121 00:05:13,620 --> 00:05:14,370 lektier for ugen. 122 00:05:14,370 --> 00:05:16,730 Men i Office Space, tage stipendiater i den film 123 00:05:16,730 --> 00:05:19,900 Fordelen ved netop denne idé, men de faktisk stjal 124 00:05:19,900 --> 00:05:21,270 det fra en anden film, som du måske har 125 00:05:21,270 --> 00:05:22,760 set, lige år forud. 126 00:05:22,760 --> 00:05:24,920 Så lad mig give dig et par sekunder af denne trailer fra 127 00:05:24,920 --> 00:05:27,470 denne fantastiske film, og det er meget 128 00:05:27,470 --> 00:05:28,340 fagligt relevant. 129 00:05:28,340 --> 00:05:30,310 >> [SPILLER MOVIE] 130 00:05:30,310 --> 00:05:32,240 Faktisk Jeg bliver forfremmet. 131 00:05:32,240 --> 00:05:33,360 Jeg kan programmere en virus, der vil rippe at 132 00:05:33,360 --> 00:05:34,460 placere off big tid. 133 00:05:34,460 --> 00:05:35,770 Nå, hvordan virker det? 134 00:05:35,770 --> 00:05:37,836 Hver gang der er en bank transaktion, hvor interessen er 135 00:05:37,836 --> 00:05:40,154 beregnede, der er tusindvis om dagen, computeren ender 136 00:05:40,154 --> 00:05:41,040 med disse brøkdele af et cent. 137 00:05:41,040 --> 00:05:43,050 Men jeg har ikke tænkt mig at gøre noget ulovligt. 138 00:05:43,050 --> 00:05:46,730 Ulovligt? Samir, det er Amerika. 139 00:05:46,730 --> 00:05:48,010 Du er nødt til at sværge til Gud. 140 00:05:48,010 --> 00:05:51,870 Hvis ingen kender dette, men os, okay? Ingen familiemedlemmer, ingen 141 00:05:51,870 --> 00:05:52,490 veninder, ingen. 142 00:05:52,490 --> 00:05:53,882 [Uhørlig]. 143 00:05:53,882 --> 00:05:57,594 Bare rolig, mand, jeg vil ikke sige det til nogen enten. 144 00:05:57,594 --> 00:05:59,680 [Filmen slutter] 145 00:05:59,680 --> 00:06:01,900 >> Okay, så måske jeg fandt denne film bedre end de fleste 146 00:06:01,900 --> 00:06:05,530 mennesker her, men under alle omstændigheder, virus, at de var 147 00:06:05,530 --> 00:06:06,400 forsøger at skabe - 148 00:06:06,400 --> 00:06:08,410 og i film, når som helst de ville kalde noget en virus, 149 00:06:08,410 --> 00:06:09,770 Det er generelt ikke en egentlig virus. 150 00:06:09,770 --> 00:06:11,600 Det er bare et program, at nogen skrev at gøre noget. 151 00:06:11,600 --> 00:06:13,800 Og i dette tilfælde blev de fyre forsøger at skrive et program 152 00:06:13,800 --> 00:06:16,610 der benyttede sig af deres firma kaldet Innotech s 153 00:06:16,610 --> 00:06:19,740 computing system, hvor computere, også selv når det 154 00:06:19,740 --> 00:06:21,350 kommer til penge, kan ikke nødvendigvis 155 00:06:21,350 --> 00:06:23,490 repræsenterer penge præcist. 156 00:06:23,490 --> 00:06:27,630 Så selvom du måske har $ 0,10 på din bankkonto, 157 00:06:27,630 --> 00:06:31,060 0,10, godt, kan computeren rent faktisk tror, ​​at du har 158 00:06:31,060 --> 00:06:33,560 så mange cents i din bankkonto. 159 00:06:33,560 --> 00:06:35,750 Og hvad så disse fyre der ønsker at gøre - og de 160 00:06:35,750 --> 00:06:38,240 stjal ideen, viser det sig fra Superman III, hvor 161 00:06:38,240 --> 00:06:41,210 Richard Pryor gjorde det samme - de var hovedsagelig 162 00:06:41,210 --> 00:06:44,880 skrive programmer, der stræber efter at tage alle de bageste 163 00:06:44,880 --> 00:06:46,930 numre, alle de små, små, små fraktioner af 164 00:06:46,930 --> 00:06:50,160 småpenge, og hævertvirkning dem væk, så mennesker bare 165 00:06:50,160 --> 00:06:52,620 tanke, åh, det er kun $ 0,10 der, men alle dem 166 00:06:52,620 --> 00:06:54,410 afsluttende numre til sidst tilføje op. 167 00:06:54,410 --> 00:06:57,490 Så en vidunderlig idé, og det bagslag afsindigt i at 168 00:06:57,490 --> 00:06:58,250 bestemt film. 169 00:06:58,250 --> 00:07:01,800 >> Men i den virkelige verden, er der også meget mere om 170 00:07:01,800 --> 00:07:03,190 konsekvenser af disse slags ting. 171 00:07:03,190 --> 00:07:05,450 Og en af ​​grundene til at dykke ned inden for computer 172 00:07:05,450 --> 00:07:07,620 videnskab er igen dens anvendelse ikke til 173 00:07:07,620 --> 00:07:09,740 ingeniørvidenskab alene, men blot at 174 00:07:09,740 --> 00:07:10,650 andre felter. 175 00:07:10,650 --> 00:07:14,760 Så dette er en mindre munter kig på, hvad der kan gå galt, men 176 00:07:14,760 --> 00:07:17,630 det er også helt øjenåbnende, tror jeg, når det kommer til 177 00:07:17,630 --> 00:07:20,760 forståelse præcis hvordan allestedsnærværende teknologier som 178 00:07:20,760 --> 00:07:22,870 computere og programmering eller i disse dage, 179 00:07:22,870 --> 00:07:23,930 i form af software. 180 00:07:23,930 --> 00:07:26,500 Så dette næste klip er bare om seks minutter, fortsætter 181 00:07:26,500 --> 00:07:30,320 hvor vi slap sidste gang, men giver os mulighed for at se lidt 182 00:07:30,320 --> 00:07:33,370 mere i dybden på en sådan af disse spørgsmål. 183 00:07:33,370 --> 00:07:35,270 Lad mig gå videre til hvor vi slap, 184 00:07:35,270 --> 00:07:37,780 som var lige her. 185 00:07:37,780 --> 00:07:41,580 Og vi har en del to af to, for omkring seks minutter her. 186 00:07:41,580 --> 00:07:41,980 >> [PLAY MOVIE] 187 00:07:41,980 --> 00:07:45,430 Plaget moderne raketteknologi. 188 00:07:45,430 --> 00:07:49,280 I 1991, med starten af ​​den første Golfkrig Patriot 189 00:07:49,280 --> 00:07:51,350 missil oplevede en lignende form for 190 00:07:51,350 --> 00:07:52,645 Antallet konvertering problem. 191 00:07:52,645 --> 00:07:57,460 Og som følge heraf blev 20 mennesker, 20 amerikanske soldater, dræbt 192 00:07:57,460 --> 00:08:01,130 og omkring 100 andre såret, da Patriot, som skulle 193 00:08:01,130 --> 00:08:03,400 til beskyttelse mod indkommende Scuds, 194 00:08:03,400 --> 00:08:06,020 undladt at affyre et missil. 195 00:08:06,020 --> 00:08:09,350 >> Da Irak invaderede Kuwait og Amerika lanceret en Desert 196 00:08:09,350 --> 00:08:13,530 Storm i begyndelsen af ​​1991, Patriot missilbatterier var 197 00:08:13,530 --> 00:08:16,970 indsat for at beskytte Saudi-Arabien og Israel fra irakisk 198 00:08:16,970 --> 00:08:19,810 Scud-missilangreb. 199 00:08:19,810 --> 00:08:23,740 The Patriot er et amerikansk medie-range overflade-til-luft-system, 200 00:08:23,740 --> 00:08:26,370 fremstilles af Raytheon Company. 201 00:08:26,370 --> 00:08:30,860 Størrelsen af ​​Patriot opfanger selv, det handler om 202 00:08:30,860 --> 00:08:35,650 omkring 20 meter lang og vejer omkring 2.000 pounds. 203 00:08:35,650 --> 00:08:38,809 Og det bærer et sprænghoved på omkring - Jeg synes, det er groft 204 00:08:38,809 --> 00:08:40,169 150 pounds. 205 00:08:40,169 --> 00:08:45,820 Og sprænghovedet selv er en højeksplosiv der har 206 00:08:45,820 --> 00:08:48,120 fragmenter omkring det. 207 00:08:48,120 --> 00:08:51,870 Kabinettet for sprænghovedet er designet til at fungere som hagl. 208 00:08:51,870 --> 00:08:54,920 Missilerne udføres fire pr beholder og er 209 00:08:54,920 --> 00:08:57,850 transporteres af en sættevogn. 210 00:08:57,850 --> 00:09:02,940 >> The Patriot anti-missil-system går mindst tilbage til 211 00:09:02,940 --> 00:09:05,530 20 år nu. 212 00:09:05,530 --> 00:09:09,150 Det blev oprindeligt designet som en luft forsvar missil til 213 00:09:09,150 --> 00:09:12,920 nedskyde fjendens fly, i den første Golfkrig. 214 00:09:12,920 --> 00:09:17,700 Når denne krig kom, hæren ønskede at bruge det til at skyde 215 00:09:17,700 --> 00:09:19,880 down Scuds, ikke flyvemaskiner. 216 00:09:19,880 --> 00:09:24,860 The Air irakiske Force var ikke så meget af et problem, men hæren 217 00:09:24,860 --> 00:09:27,260 var bekymret Scuds. 218 00:09:27,260 --> 00:09:30,810 Og så prøvede de at opgradere Patriot. 219 00:09:30,810 --> 00:09:33,770 Opsnappe en fjende missil rejser på Mach 5 foregik 220 00:09:33,770 --> 00:09:35,790 at være udfordrende nok. 221 00:09:35,790 --> 00:09:39,460 Men da Patriot blev hastet i brug, hæren 222 00:09:39,460 --> 00:09:43,730 var ikke bekendt med en irakisk modifikation, der gjorde deres 223 00:09:43,730 --> 00:09:46,510 Scuds næsten umuligt at ramme. 224 00:09:46,510 --> 00:09:50,040 >> Hvad der skete er de Scuds, der var 225 00:09:50,040 --> 00:09:51,360 kommer ind var ustabile. 226 00:09:51,360 --> 00:09:52,266 De slingrende. 227 00:09:52,266 --> 00:09:56,300 Grunden hertil var irakerne, for at få 600 228 00:09:56,300 --> 00:10:00,650 kilometer ud af en 300 kilometer rækkevidde missil, tog 229 00:10:00,650 --> 00:10:02,423 vægt af den forreste sprænghoved og 230 00:10:02,423 --> 00:10:03,990 gjort sprænghovedet lettere. 231 00:10:03,990 --> 00:10:08,700 Så nu Patriot forsøger at komme på Scud, og de fleste af 232 00:10:08,700 --> 00:10:11,192 den tid, det overvældende flertal af den tid, det ville 233 00:10:11,192 --> 00:10:13,450 bare flyve af Scud. 234 00:10:13,450 --> 00:10:16,300 Når Patriot operatørerne indså Patriot 235 00:10:16,300 --> 00:10:20,160 forpasset sit mål, de detonerede Patriot sprænghoved. 236 00:10:20,160 --> 00:10:22,760 For at undgå eventuelle ulykker, blev det tilladt 237 00:10:22,760 --> 00:10:25,100 at falde til jorden. 238 00:10:25,100 --> 00:10:29,400 Det var hvad de fleste mennesker så, da store ildkugler på himlen, 239 00:10:29,400 --> 00:10:34,930 og misforstås som aflytninger af Scud-sprænghoveder. 240 00:10:34,930 --> 00:10:37,490 >> Selv på nattehimlen, syntes Patriots at være 241 00:10:37,490 --> 00:10:41,570 held ødelagt Scuds på Dhahran, kunne der ikke være 242 00:10:41,570 --> 00:10:43,730 fejl om dens ydeevne. 243 00:10:43,730 --> 00:10:46,370 Der, Patriots radarsystem mistet overblikket over en 244 00:10:46,370 --> 00:10:50,090 indkommende Scud og aldrig iværksat på grund af 245 00:10:50,090 --> 00:10:51,340 til en software fejl. 246 00:10:54,030 --> 00:10:57,050 Det var israelerne, der først opdagede, at jo længere 247 00:10:57,050 --> 00:11:02,000 systemet var, jo større den tid uoverensstemmelse blev, 248 00:11:02,000 --> 00:11:05,530 på grund af et ur indlejret i systemets computer. 249 00:11:05,530 --> 00:11:09,060 Cirka to uger før tragedien i Dhahran, den 250 00:11:09,060 --> 00:11:11,730 Israelerne indberettet til forsvarsministeriet, at det 251 00:11:11,730 --> 00:11:13,250 Systemet var ved at miste tid. 252 00:11:13,250 --> 00:11:15,610 Efter omkring otte timers drift, bemærkede de, at 253 00:11:15,610 --> 00:11:18,330 Systemet var ved at blive mærkbart mindre nøjagtige. 254 00:11:18,330 --> 00:11:20,910 Den forsvarsministerium reagerede ved at fortælle alle 255 00:11:20,910 --> 00:11:23,710 The Patriot batterier til ikke forlade de systemer 256 00:11:23,710 --> 00:11:25,450 i lang tid. 257 00:11:25,450 --> 00:11:28,010 De har aldrig sagt, hvad en lang tid var - 8 timer, 10 258 00:11:28,010 --> 00:11:29,690 timer, 1.000 timer. 259 00:11:29,690 --> 00:11:31,940 Ingen vidste det. 260 00:11:31,940 --> 00:11:35,020 >> The Patriot batteri stationeret på kasernen på Dhahran 261 00:11:35,020 --> 00:11:39,030 og dets mangelfulde interne ur havde været på over 100 timer på 262 00:11:39,030 --> 00:11:42,240 Natten til den 25. februar. 263 00:11:42,240 --> 00:11:46,580 Det sporede tid med en nøjagtighed på omkring en tiendedel af et sekund. 264 00:11:46,580 --> 00:11:48,830 Nu er en tiendedel af den anden er en interessant tal, fordi 265 00:11:48,830 --> 00:11:52,660 det ikke kan udtrykkes i binær, nøjagtigt, hvilket betyder 266 00:11:52,660 --> 00:11:54,940 det ikke kan udtrykkes på ethvert andet 267 00:11:54,940 --> 00:11:57,330 moderne digital computer. 268 00:11:57,330 --> 00:11:59,130 Det er svært at tro. 269 00:11:59,130 --> 00:12:01,720 Men bruge dette som et eksempel. 270 00:12:01,720 --> 00:12:04,090 >> Lad os tage det nummer en tredjedel. 271 00:12:04,090 --> 00:12:07,950 En tredjedel ikke kan udtrykkes i decimal, præcis. 272 00:12:07,950 --> 00:12:12,710 En tredjedel er 0,333 stået på i uendelighed. 273 00:12:12,710 --> 00:12:17,050 Der er ingen måde at gøre det med absolut nøjagtighed i decimal. 274 00:12:17,050 --> 00:12:19,340 Det er præcis den samme type problem, der skete i 275 00:12:19,340 --> 00:12:20,190 Patriot. 276 00:12:20,190 --> 00:12:24,680 Jo længere systemet løb, jo værre tidsfejl blev. 277 00:12:24,680 --> 00:12:28,640 Efter 100 timers drift, var fejlen i tide kun 278 00:12:28,640 --> 00:12:29,870 omkring en tredjedel af et sekund. 279 00:12:29,870 --> 00:12:34,790 Men med hensyn til målretning et missil rejser på Mach 5, 280 00:12:34,790 --> 00:12:39,140 det resulterede i en tracking error på over 600 meter. 281 00:12:39,140 --> 00:12:42,510 Det ville være en fatal fejl for soldaterne ved Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> Hvad der skete er en Scud lanceringen blev påvist ved tidlig varsling 283 00:12:48,680 --> 00:12:52,440 satellitter og de vidste, at Scud kom i deres 284 00:12:52,440 --> 00:12:53,350 generelle retning. 285 00:12:53,350 --> 00:12:55,470 De vidste ikke, hvor det kommer. 286 00:12:55,470 --> 00:12:58,210 Det var nu op til radaren del af Patriot 287 00:12:58,210 --> 00:13:01,920 system, forsvarer Dhahran, at finde og holde styr på det 288 00:13:01,920 --> 00:13:03,700 indkommende fjendtlige missiler. 289 00:13:03,700 --> 00:13:05,390 Radaren var meget smart. 290 00:13:05,390 --> 00:13:07,570 Du ville faktisk spore placeringen af ​​Scud og derefter 291 00:13:07,570 --> 00:13:10,340 forudsige, hvor det sandsynligvis ville være det næste gang 292 00:13:10,340 --> 00:13:12,040 radar sendt en impuls ud. 293 00:13:12,040 --> 00:13:13,730 Det blev kaldt intervallet gate. 294 00:13:13,730 --> 00:13:18,820 Derefter, når Patriot beslutter tilstrækkelig tid er gået til at gå 295 00:13:18,820 --> 00:13:22,600 tilbage og tjekke det næste sted for denne detekterede 296 00:13:22,600 --> 00:13:24,190 objekt, det går tilbage. 297 00:13:24,190 --> 00:13:27,940 Så når det gik tilbage til det forkerte sted, det så ikke ser nogen 298 00:13:27,940 --> 00:13:31,000 indsigelse, og den beslutter, at der ikke var noget objekt. 299 00:13:31,000 --> 00:13:34,370 Det var en falsk detektion og taber sporet. 300 00:13:34,370 --> 00:13:37,630 >> Den indkommende Scud forsvandt fra radarskærmen. 301 00:13:37,630 --> 00:13:41,300 Og sekunder senere, den hamrede ind i kasernen. The Scud 302 00:13:41,300 --> 00:13:44,730 dræbte 28 og var den sidste affyret under 303 00:13:44,730 --> 00:13:46,450 den første Golfkrig. 304 00:13:46,450 --> 00:13:50,570 Tragisk, den opdaterede software ankom til Dhahran 305 00:13:50,570 --> 00:13:52,060 den følgende dag. 306 00:13:52,060 --> 00:13:56,210 Og den software fejl var blevet fastsat, lukker et kapitel i 307 00:13:56,210 --> 00:13:58,370 den urolige historie Patriot missil. 308 00:14:01,790 --> 00:14:04,990 PATRIOT er faktisk en forkortelse for "fasede Tracking 309 00:14:04,990 --> 00:14:08,516 Skæring af Target. " 310 00:14:08,516 --> 00:14:13,390 >> Okay, så en meget mere sorgfuld resultat af ikke helt 311 00:14:13,390 --> 00:14:14,430 forstå denne verden. 312 00:14:14,430 --> 00:14:18,180 Og takeaway, virkelig, fra filmen er, at løsningen 313 00:14:18,180 --> 00:14:20,790 Der blev genstarte dit missilforsvarssystem 314 00:14:20,790 --> 00:14:21,770 hver gang i et stykke tid. 315 00:14:21,770 --> 00:14:24,280 Og så igen, et af formålene med dette kursus, i hvert fald 316 00:14:24,280 --> 00:14:26,900 på en mere ydmyg målestok end disse applikationer, er at 317 00:14:26,900 --> 00:14:30,710 virkelig åbne alles øjne for præcis, hvordan du går om 318 00:14:30,710 --> 00:14:34,380 maskiner til fremstilling gøre, hvad du vil have dem til at gøre, og hvordan du går 319 00:14:34,380 --> 00:14:37,180 om at gøre det rigtigt, mens undervejs gør det 320 00:14:37,180 --> 00:14:38,810 godt, elegant, og så videre. 321 00:14:38,810 --> 00:14:41,680 Og så i dag, lad os dykke ned i en lille smule mere af dette, men 322 00:14:41,680 --> 00:14:44,210 så vi ikke går for hurtigt, især for de mindre 323 00:14:44,210 --> 00:14:46,590 komfortabel, men også for at vi kan fastholde interessen for 324 00:14:46,590 --> 00:14:49,390 dem mere komfortable, lad os bare hurtigt begynde med en smule 325 00:14:49,390 --> 00:14:50,970 af resumé af nogle af disse ideer. 326 00:14:50,970 --> 00:14:53,710 Og igen, så spørg væk, både personligt eller online, hvis du har 327 00:14:53,710 --> 00:14:56,320 spørgsmål, så vi kan holde alle på samme side. 328 00:14:56,320 --> 00:14:58,820 >> Så CS50 Appliance, hurtig skridt tilbage, er 329 00:14:58,820 --> 00:15:02,360 hvad med dine egne ord? 330 00:15:02,360 --> 00:15:06,454 Det er OK, hvis du ikke har nogen idé om, hvad disse ord kan være endnu. 331 00:15:06,454 --> 00:15:07,830 [Uhørlig] 332 00:15:07,830 --> 00:15:10,950 Okay, så en universel grænseflade til - 333 00:15:10,950 --> 00:15:11,900 at vi alle kan dele. 334 00:15:11,900 --> 00:15:12,470 Absolut. 335 00:15:12,470 --> 00:15:14,840 Så vi kunne, for eksempel, fortælle dig at gå til nogle 336 00:15:14,840 --> 00:15:16,910 hjemmeside, downloade denne software til Mac OS. 337 00:15:16,910 --> 00:15:19,140 Download dette software til Windows, konfigurere i 338 00:15:19,140 --> 00:15:20,100 denne måde, og at. 339 00:15:20,100 --> 00:15:22,370 Men virkeligheden er så vi løber ind i utallige tekniske 340 00:15:22,370 --> 00:15:23,200 støtte problemer. 341 00:15:23,200 --> 00:15:26,630 Og også i disse dage, meget af, hvad der bliver gjort server side, 342 00:15:26,630 --> 00:15:28,490 i verden af ​​computing, det især når kommer til 343 00:15:28,490 --> 00:15:31,460 webudvikling og web-baserede applikationer, er faktisk 344 00:15:31,460 --> 00:15:35,110 ganske ofte gøres på Unix eller Linux-computere, i modsætning til 345 00:15:35,110 --> 00:15:36,800 Macs eller Windows-pc'er. 346 00:15:36,800 --> 00:15:39,240 >> Så blandt de upsides så med at bruge denne ting kaldet 347 00:15:39,240 --> 00:15:41,500 CS50 Appliance er vi alle have det samme miljø. 348 00:15:41,500 --> 00:15:43,670 Så alle er på samme side, uanset hvilken hardware du 349 00:15:43,670 --> 00:15:46,650 kom til campus med, men også vil være dypning i nøjagtig 350 00:15:46,650 --> 00:15:48,230 det samme miljø, som du vil bruge mod 351 00:15:48,230 --> 00:15:51,080 semesters afslutning samt for webudvikling, samt i den 352 00:15:51,080 --> 00:15:53,580 fremtid for virkelige verden applikationer deraf. 353 00:15:53,580 --> 00:15:56,350 Så mere konkret, det CS50 Appliance er et gratis stykke 354 00:15:56,350 --> 00:15:59,400 software, der tillader dig at køre et andet operativsystem, 355 00:15:59,400 --> 00:16:02,670 Linux, i dette tilfælde, på din egen computer. I et vindue 356 00:16:02,670 --> 00:16:04,750 Nu kan du ikke bare hente apparatet. 357 00:16:04,750 --> 00:16:08,170 Du har brug for et program, som skal spille eller køre apparatet. 358 00:16:08,170 --> 00:16:11,220 Og det stykke software er almindeligt kendt som en 359 00:16:11,220 --> 00:16:11,520 hypervisor. 360 00:16:11,520 --> 00:16:14,050 Hypervisors kommer i form af produkter som VMware, 361 00:16:14,050 --> 00:16:15,820 Virtual Box, Parallels. 362 00:16:15,820 --> 00:16:18,390 Alle former for selskaber gør software, både gratis og 363 00:16:18,390 --> 00:16:19,310 kommercielle, ens. 364 00:16:19,310 --> 00:16:21,480 Hvad ser du i Problem sæt 1 er instruktioner om, hvordan du 365 00:16:21,480 --> 00:16:23,440 få gratis software med til at 366 00:16:23,440 --> 00:16:25,000 køre CS50 Appliance. 367 00:16:25,000 --> 00:16:28,060 Og når du gør det, vil du have, i et vindue på din Mac eller pc, 368 00:16:28,060 --> 00:16:30,710 en desktop miljø, der ser helt sådan ud, hvor 369 00:16:30,710 --> 00:16:33,100 det har en Start-menu-lignende ting i 370 00:16:33,100 --> 00:16:34,510 nederste venstre hjørne. 371 00:16:34,510 --> 00:16:38,030 Det har en hjemmemappe, eller Hjemmemappe, i øverste venstre 372 00:16:38,030 --> 00:16:40,280 der, en skraldespand, og så videre. 373 00:16:40,280 --> 00:16:43,450 Så vi vil drille hinanden de nødvendige oplysninger, når vi går. 374 00:16:43,450 --> 00:16:46,430 >> Men lad os nu begynde at dykke ned i C. 375 00:16:46,430 --> 00:16:49,200 Så C er dette programmeringssprog, ligner i ånd til 376 00:16:49,200 --> 00:16:52,390 Scratch, men langt mindre grafisk, men ironisk nok, langt 377 00:16:52,390 --> 00:16:54,730 mere kraftfulde når du får kyndige med det. 378 00:16:54,730 --> 00:16:58,970 Så i C, vi skriver programmer ved at skrive kildekode, som er 379 00:16:58,970 --> 00:17:01,640 denne engelsk-lignende syntaks, svarende til sokker 380 00:17:01,640 --> 00:17:05,609 påvisning af, at vi gjorde sidste gang, hvor du kan 381 00:17:05,609 --> 00:17:07,910 udtrykke dig temmelig præcist, hvis 382 00:17:07,910 --> 00:17:09,760 arcanely, til computeren. 383 00:17:09,760 --> 00:17:11,960 >> Så hvad slags produkt software har du rent faktisk har brug 384 00:17:11,960 --> 00:17:15,520 at skrive programmer i et sprog som C, baseret på vores 385 00:17:15,520 --> 00:17:17,492 samtale på mandag? 386 00:17:17,492 --> 00:17:19,650 [Uhørlig] 387 00:17:19,650 --> 00:17:21,079 OK, du skal bare have en tekst editor. 388 00:17:21,079 --> 00:17:22,890 Du behøver ikke nogen speciel software 389 00:17:22,890 --> 00:17:24,460 i sig selv at skrive programmer. 390 00:17:24,460 --> 00:17:27,220 Du skal bare have en teksteditor som Notesblok, på Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit på Mac, eller noget, der hedder gedit, i verden af 392 00:17:30,450 --> 00:17:32,020 Linux, som vi vil bruge her. 393 00:17:32,020 --> 00:17:33,750 Og det er det, at skrive programmerne. 394 00:17:33,750 --> 00:17:35,480 >> Men skrivning er kun halvdelen af ​​ligningen. 395 00:17:35,480 --> 00:17:36,630 Du kan derefter nødt til at køre dem. 396 00:17:36,630 --> 00:17:38,320 Men for at køre programmer - 397 00:17:38,320 --> 00:17:39,600 du kan ikke køre kildekode. 398 00:17:39,600 --> 00:17:41,500 Du i stedet nødt til at gøre, hvad det først? 399 00:17:41,500 --> 00:17:41,900 Yeah. 400 00:17:41,900 --> 00:17:43,200 DAVID J. Malan: Du skal 401 00:17:43,200 --> 00:17:44,130 kompilere det. 402 00:17:44,130 --> 00:17:49,010 Og en anden, kompilere kildekoden betyder - 403 00:17:49,010 --> 00:17:50,260 [Uhørlig] 404 00:17:52,300 --> 00:17:52,700 DAVID J. Malan: Præcis. 405 00:17:52,700 --> 00:17:54,430 Oversætte det til nuller og ettaller. 406 00:17:54,430 --> 00:17:57,150 Fordi vi alle, i disse dage, har computere, der har CPU'er, 407 00:17:57,150 --> 00:18:00,350 næsten alle er lavet af et firma kaldet Intel, og 408 00:18:00,350 --> 00:18:03,320 Intel Inside, betyder, at der er denne hjerne inde i din 409 00:18:03,320 --> 00:18:04,990 computer, kaldet CPU. 410 00:18:04,990 --> 00:18:07,570 Og en af ​​de ting, som at hjernen gør, er, det ved 411 00:18:07,570 --> 00:18:10,390 hvordan man skal forstå mønstre af nuller og ettaller. 412 00:18:10,390 --> 00:18:13,240 Det ved, hvad mønster af bit repræsenterer desuden hvad 413 00:18:13,240 --> 00:18:15,500 mønster repræsenterer subtraktioner, hvilken mønster af 414 00:18:15,500 --> 00:18:18,890 bits repræsenterer udskrivning, og skabe en hørbar lyd. 415 00:18:18,890 --> 00:18:22,450 >> Så kort, CPU, kombineret med operativsystemet 416 00:18:22,450 --> 00:18:25,230 som er et stykke software, der kører på toppen af ​​CPU, 417 00:18:25,230 --> 00:18:26,050 så at sige. 418 00:18:26,050 --> 00:18:29,850 Sammen disse to stykker vide, hvordan du kører programmer, der 419 00:18:29,850 --> 00:18:31,070 vi mennesker skriver. 420 00:18:31,070 --> 00:18:34,040 >> Så hvis jeg går ind i CS50 Appliance her, jeg har brug for at åbne 421 00:18:34,040 --> 00:18:35,660 en tekst editor, og jeg kan få adgang til denne 422 00:18:35,660 --> 00:18:36,560 i et par forskellige måder. 423 00:18:36,560 --> 00:18:39,060 Jeg kan enten gå til Menu, programmering, 424 00:18:39,060 --> 00:18:40,230 og så kan jeg vælge - 425 00:18:40,230 --> 00:18:40,810 nope, ikke på menuen. 426 00:18:40,810 --> 00:18:43,860 Jeg kan gå til Tilbehør / gedit her for at åbne 427 00:18:43,860 --> 00:18:45,090 min lille tekst editor. 428 00:18:45,090 --> 00:18:48,030 Eller mere enkelt, kan jeg klikke på denne lille ikon i bunden 429 00:18:48,030 --> 00:18:48,970 venstre hjørne. 430 00:18:48,970 --> 00:18:50,430 Og nu får jeg dette miljø her. 431 00:18:50,430 --> 00:18:52,590 Det er temmelig minder om en simpel teksteditor, med blot 432 00:18:52,590 --> 00:18:53,820 en eller to forskelle. 433 00:18:53,820 --> 00:18:56,420 I toppen, hvor markøren blinker nu er det her 434 00:18:56,420 --> 00:18:57,900 Jeg kan begynde at skrive min kode. 435 00:18:57,900 --> 00:19:00,415 I bunden er denne ting kaldet terminalvinduet. 436 00:19:00,415 --> 00:19:03,400 Og hvad slags ting kan jeg gøre i dette 437 00:19:03,400 --> 00:19:04,960 såkaldte terminal vindue? 438 00:19:04,960 --> 00:19:06,680 [Uhørlig] 439 00:19:06,680 --> 00:19:07,890 >> Okay, så jeg vil køre kommandoer. 440 00:19:07,890 --> 00:19:10,300 Og nogle af de kommandoer, vi kørte i mandags var lidt 441 00:19:10,300 --> 00:19:15,070 kryptiske i starten, men ls til listen, cd for forandring bibliotek, 442 00:19:15,070 --> 00:19:16,540 rm, for fjernes. 443 00:19:16,540 --> 00:19:19,680 Så det er slags en old-school måde at navigere din 444 00:19:19,680 --> 00:19:22,310 computer, der kun bruger dit tastatur og tekstmæssige kommandoer, 445 00:19:22,310 --> 00:19:24,130 og ikke, i almindelighed under anvendelse af en mus. 446 00:19:24,130 --> 00:19:25,960 Men vi vil se, inden længe, ​​dette faktisk giver os en 447 00:19:25,960 --> 00:19:28,520 lidt mere power og lidt mere præcision, hvormed at 448 00:19:28,520 --> 00:19:29,600 udtrykke os. 449 00:19:29,600 --> 00:19:31,330 Og så herovre til venstre, vil vi bare at se, 450 00:19:31,330 --> 00:19:34,360 da vi begynde at skrive software, en lille resumé af 451 00:19:34,360 --> 00:19:36,350 program, som vi har skrevet øverst til venstre. 452 00:19:36,350 --> 00:19:38,360 Men vi vil se det igen inden længe. 453 00:19:38,360 --> 00:19:40,050 >> Så lad os gøre noget temmelig simpelt her. 454 00:19:40,050 --> 00:19:43,440 Lad mig først gå videre og gå til Fil, Gem, og jeg er bare 455 00:19:43,440 --> 00:19:45,970 kommer til at klikke på jharvard her, over til venstre, og 456 00:19:45,970 --> 00:19:48,930 jharvard er, igen, navnet på mit hjem mappe, min 457 00:19:48,930 --> 00:19:52,110 personlige filer, mig, nu er John Harvard, som alle jer 458 00:19:52,110 --> 00:19:54,230 vil snart være John Harvard i dette miljø. 459 00:19:54,230 --> 00:19:57,360 Han har dette Home bibliotek, Mine Dokumenter og så videre, 460 00:19:57,360 --> 00:19:58,900 at jeg vil gemme, nu denne fil i. 461 00:19:58,900 --> 00:20:01,520 Så jeg har tænkt mig at kalde det hello.c. Så jeg har tænkt mig at gå 462 00:20:01,520 --> 00:20:05,770 fremad og klik på Gem, og nu, hvad jeg har her, er en fane 463 00:20:05,770 --> 00:20:09,440 kaldet hello.c, så meget som en anden type editor. 464 00:20:09,440 --> 00:20:11,760 >> Så nu lad mig gå videre og begynde at skrive et program. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 Og så vil jeg bare gjorde sidste gang, printf, for print formateret, 467 00:20:18,150 --> 00:20:22,120 ("Hello, world!" 468 00:20:22,120 --> 00:20:24,500 ). 469 00:20:24,500 --> 00:20:25,630 Næsten færdig. 470 00:20:25,630 --> 00:20:27,130 Men jeg mangler et par detaljer. 471 00:20:27,130 --> 00:20:30,210 Hvad der mangler i dette program, som jeg virkelig har brug for 472 00:20:30,210 --> 00:20:31,890 det faktisk kompilere? 473 00:20:31,890 --> 00:20:32,130 Yeah. 474 00:20:32,130 --> 00:20:33,980 [Uhørlig]? 475 00:20:33,980 --> 00:20:35,770 >> DAVID J. Malan: Ja, så jeg er nødt til at inkludere den standard 476 00:20:35,770 --> 00:20:36,700 I / O-bibliotek. 477 00:20:36,700 --> 00:20:39,470 Så det skal gå over main, så jeg bare til 478 00:20:39,470 --> 00:20:40,790 gøre nogle plads til det der. 479 00:20:40,790 --> 00:20:44,420 Og jeg har tænkt mig at gøre # include . 480 00:20:44,420 --> 00:20:46,570 Og bemærk de vinklede parenteser dér. 481 00:20:46,570 --> 00:20:49,410 Og som en sidebemærkning, er gedit lidt brugervenlig, hvis 482 00:20:49,410 --> 00:20:52,420 nogle gange lidt forvirrende, idet den forsøger at hjælpe din 483 00:20:52,420 --> 00:20:54,770 øjne mærke til, hvad linjer op med hvad. 484 00:20:54,770 --> 00:20:57,760 Så det faktum at min markør er lige ved siden af ​​denne vinklet 485 00:20:57,760 --> 00:21:00,600 beslag, bemærk, hvordan det er at fremhæve den anden vinklet 486 00:21:00,600 --> 00:21:01,920 beslag plus denne ene. 487 00:21:01,920 --> 00:21:03,770 Og det er bare at henlede min opmærksomhed på, at jeg 488 00:21:03,770 --> 00:21:04,460 have symmetri. 489 00:21:04,460 --> 00:21:07,010 Og symmetri i programmeringen er generelt en god ting. 490 00:21:07,010 --> 00:21:10,270 Tilsvarende, hvis jeg flytter min markøren til slutningen, læg mærke til hvordan den 491 00:21:10,270 --> 00:21:13,630 krøllede parenteser i kø for at vise, at, ja, jeg har en åben 492 00:21:13,630 --> 00:21:15,160 og et lukket, så at sige. 493 00:21:15,160 --> 00:21:16,640 >> Okay, og jeg kan gøre en anden ting. 494 00:21:16,640 --> 00:21:20,090 Det er ikke strengt nødvendigt, men god praksis, for at sige 495 00:21:20,090 --> 00:21:21,250 returnere 0. 496 00:21:21,250 --> 00:21:24,140 Og return 0 gør hvad for os her? 497 00:21:24,140 --> 00:21:25,584 Eller betyder hvad? 498 00:21:25,584 --> 00:21:27,480 [Uhørlig] 499 00:21:27,480 --> 00:21:28,300 DAVID J. Malan: Men intet er galt. 500 00:21:28,300 --> 00:21:30,280 Og helt ærligt det er svært for meget at gå galt i en 501 00:21:30,280 --> 00:21:31,250 programmere denne korte. 502 00:21:31,250 --> 00:21:33,930 Så jeg bare at være super klart, at alt er godt. 503 00:21:33,930 --> 00:21:36,740 Jeg, menneske, når jeg kører dette program, vil sandsynligvis aldrig 504 00:21:36,740 --> 00:21:38,150 se, 0. 505 00:21:38,150 --> 00:21:41,070 Generelt er disse tal, der bliver returneret fra main 506 00:21:41,070 --> 00:21:43,540 kun opdrage deres hoveder til mennesker, når 507 00:21:43,540 --> 00:21:44,360 noget går galt. 508 00:21:44,360 --> 00:21:46,640 Og du får en lille pop op at sige systemfejl, én, 509 00:21:46,640 --> 00:21:48,760 to, tre, eller uanset hvor mange var, at 510 00:21:48,760 --> 00:21:50,100 faktisk returneres. 511 00:21:50,100 --> 00:21:52,870 Så noget andet galt med dette? 512 00:21:52,870 --> 00:21:55,300 [Uhørlig] 513 00:21:55,300 --> 00:21:58,100 >> DAVID J. Malan: Så det er ikke så meget et funktionelt fejltagelse 514 00:21:58,100 --> 00:21:59,240 men en æstetisk en. 515 00:21:59,240 --> 00:22:02,340 Jeg skal nok sætte i en ny linje der ved 516 00:22:02,340 --> 00:22:05,240 slutningen af ​​denne streng, så vi rent faktisk at flytte markøren til 517 00:22:05,240 --> 00:22:08,340 næste linje, og programmet bare ser lidt pænere. 518 00:22:08,340 --> 00:22:10,340 >> Så nu lad mig gå ned til min terminal vindue 519 00:22:10,340 --> 00:22:11,490 og ind igen 520 00:22:11,490 --> 00:22:13,390 Og denne ting her, det hedder prompten. 521 00:22:13,390 --> 00:22:16,760 Det er bare at minde mig om, hvem jeg er, jharvard @ apparat, hvor 522 00:22:16,760 --> 00:22:18,850 Apparatet er navnet på den computer, jeg er på. 523 00:22:18,850 --> 00:22:22,380 I parentes er denne tilde, tilden symbol, som 524 00:22:22,380 --> 00:22:24,160 repræsenterer hvad? 525 00:22:24,160 --> 00:22:25,590 PUBLIKUM: Home bibliotek. 526 00:22:25,590 --> 00:22:26,350 DAVID J. Malan: Home bibliotek. 527 00:22:26,350 --> 00:22:29,350 Så det er bare en forkortelse notation for at sige du er i 528 00:22:29,350 --> 00:22:32,780 din personlige mappe, hvor alle dine filer går som standard. 529 00:22:32,780 --> 00:22:36,080 Så nu, her, kan jeg skrive ls for listen. 530 00:22:36,080 --> 00:22:40,020 Og det eneste, jeg kan se her i øjeblikket er hello.c. 531 00:22:40,020 --> 00:22:41,770 Og det er godt, fordi jeg lige skrev dette. 532 00:22:41,770 --> 00:22:44,380 >> Så lad mig gå videre og gør goddag. 533 00:22:44,380 --> 00:22:46,830 Og bemærk jeg ikke skrive make hello.c. 534 00:22:46,830 --> 00:22:50,300 I stedet er jeg kun skrive bunden navnet på filen, hej. 535 00:22:50,300 --> 00:22:53,690 Og gøre, som vi så på mandag vil bare udlede, at jeg ønsker 536 00:22:53,690 --> 00:22:54,920 den. c fil. 537 00:22:54,920 --> 00:22:56,820 Så nu har jeg skrevet lave hej. 538 00:22:56,820 --> 00:22:59,280 Nu kan jeg se denne lange kommando og vil fortsætte 539 00:22:59,280 --> 00:23:00,480 se dette igen og igen. 540 00:23:00,480 --> 00:23:03,620 Men for at være klar, klang, ordet, der bare syntes, 541 00:23:03,620 --> 00:23:05,340 det er den faktiske compiler. 542 00:23:05,340 --> 00:23:08,200 Lav er bare et build hjælpeprogram. 543 00:23:08,200 --> 00:23:11,900 Det er bare en mere brugervenligt program, der sparer mig, i 544 00:23:11,900 --> 00:23:15,310 lange løb, fra at skulle skrive ud utroligt kedelig lang 545 00:23:15,310 --> 00:23:17,020 kommandoer som at én. 546 00:23:17,020 --> 00:23:18,950 Så du kunne løbe Dunk manuelt. 547 00:23:18,950 --> 00:23:20,530 Du kan skrive alt dette manuelt. 548 00:23:20,530 --> 00:23:21,580 Bliver bare meget trættende. 549 00:23:21,580 --> 00:23:24,720 Og så gør, er bare et program, der forenkler vores liv, og 550 00:23:24,720 --> 00:23:27,120 kører mere komplekse kommandoer for os. 551 00:23:27,120 --> 00:23:29,410 >> Okay, så nu, hvad filen skal jeg have 552 00:23:29,410 --> 00:23:31,540 i mit aktuelle bibliotek? 553 00:23:31,540 --> 00:23:36,310 Ikke bare hello.c, men også hej. 554 00:23:36,310 --> 00:23:39,710 Så hvis jeg vil køre goddag, huske, at jeg siger dot slash, 555 00:23:39,710 --> 00:23:42,220 hvor dot midler gå ind i den aktuelle mappe, hvor du 556 00:23:42,220 --> 00:23:46,060 er, og derefter køre programmet hedder hello, og ja, nu, 557 00:23:46,060 --> 00:23:48,080 Jeg har hej verden. 558 00:23:48,080 --> 00:23:51,640 Okay, eventuelle spørgsmål om workflow eller syntaksen i 559 00:23:51,640 --> 00:23:52,890 hvad vi lige gjorde? 560 00:23:55,380 --> 00:23:57,040 >> Okay, så lad os tage tingene op et hak igen. 561 00:23:57,040 --> 00:24:00,430 Så det var underwhelming at bare skrive et program, der kun 562 00:24:00,430 --> 00:24:01,790 nogensinde, siger hej, verden. 563 00:24:01,790 --> 00:24:03,920 Så vi ændrede det på mandag, for at sige, hej, David. 564 00:24:03,920 --> 00:24:06,560 Det er en lidt mere personlig, men lige så hårdt kodet som 565 00:24:06,560 --> 00:24:07,410 første version. 566 00:24:07,410 --> 00:24:08,780 Så ikke alt det overbevisende. 567 00:24:08,780 --> 00:24:13,120 Men der findes i C, fungerer sikkert udover 568 00:24:13,120 --> 00:24:15,700 print, funktioner, så du får input fra brugeren. 569 00:24:15,700 --> 00:24:17,990 Og den måde, vi gjorde det, den anden dag, var som følger. 570 00:24:17,990 --> 00:24:21,440 Før jeg faktisk udskrive noget, jeg først fik 571 00:24:21,440 --> 00:24:22,410 noget fra brugeren. 572 00:24:22,410 --> 00:24:23,370 Så lad mig gøre det igen. 573 00:24:23,370 --> 00:24:26,580 >> String s, hvor s er blot et vilkårligt navn, her, til en 574 00:24:26,580 --> 00:24:30,600 streng, svarer GetString. 575 00:24:30,600 --> 00:24:32,070 Så hvad var GetString? 576 00:24:32,070 --> 00:24:34,630 Det naturligvis får en streng, der er baseret på dens navn. 577 00:24:34,630 --> 00:24:37,560 Men hvad er det, mere teknisk? 578 00:24:37,560 --> 00:24:38,440 Det er en funktion. 579 00:24:38,440 --> 00:24:41,790 Så det er en funktion, der ikke kommer med C per se. 580 00:24:41,790 --> 00:24:43,660 CS50 medarbejdere skrev dette. 581 00:24:43,660 --> 00:24:46,940 Og så at bruge dette, kan du ikke bare inkludere stdio.h, 582 00:24:46,940 --> 00:24:49,630 Du skal også omfatte hvad? 583 00:24:49,630 --> 00:24:50,060 Yeah. 584 00:24:50,060 --> 00:24:54,210 Så cs50.h, som er blot en fil vi skrev for nogle år siden. 585 00:24:54,210 --> 00:24:57,130 Vi installerede det på apparatet for dig ved siden af 586 00:24:57,130 --> 00:24:58,490 alle standard filer. 587 00:24:58,490 --> 00:25:00,500 Og så i disse første par uger af klassen, vil vi bruge 588 00:25:00,500 --> 00:25:02,820 dette bare for at forenkle processen med at gøre meget grundlæggende 589 00:25:02,820 --> 00:25:04,600 ting som at få input fra brugeren. 590 00:25:04,600 --> 00:25:07,370 For som vi vil se i et par uger, at få brugerinput i en 591 00:25:07,370 --> 00:25:10,180 sprog som C er faktisk overraskende kompleks, 592 00:25:10,180 --> 00:25:14,360 især fordi du ikke kender i forvejen, som regel, hvordan 593 00:25:14,360 --> 00:25:17,030 mange ting som brugeren kommer til at skrive i. 594 00:25:17,030 --> 00:25:20,340 Og når du ikke ved, hvor meget data til at forvente, at du ikke 595 00:25:20,340 --> 00:25:22,380 vide, hvor meget hukommelse der skal tildeles. 596 00:25:22,380 --> 00:25:25,480 Og hvis du rent faktisk har en kontradiktorisk bruger, der forsøger 597 00:25:25,480 --> 00:25:28,180 at hacke ind i dit system, crash din computer, ja, 598 00:25:28,180 --> 00:25:31,600 generelt den første metode til angreb er, ligesom jeg gjorde på 599 00:25:31,600 --> 00:25:34,950 Mandag skrive en hel lang sekvens af tilfældige tegn, 600 00:25:34,950 --> 00:25:37,020 trykke Enter, og se hvad bryder. 601 00:25:37,020 --> 00:25:40,800 Fordi generelt, hvis et program bryder, antyder, at der på 602 00:25:40,800 --> 00:25:42,650 et sikkerhedshul, potentielt. 603 00:25:42,650 --> 00:25:45,250 Det er helt sikkert antyder du, programmøren, der har fremstillet en 604 00:25:45,250 --> 00:25:49,050 fejltagelse, men mere faretruende, måske du har lavet en 605 00:25:49,050 --> 00:25:52,430 sikkerhedsrelateret fejl, og generelt vil vi se, at 606 00:25:52,430 --> 00:25:54,840 det er sådan maskinerne er kompromitteret til denne dag, både 607 00:25:54,840 --> 00:25:56,620 i verden af ​​internettet og programmer på 608 00:25:56,620 --> 00:25:58,070 kommandolinjen, som denne. 609 00:25:58,070 --> 00:25:58,350 >> Ok. 610 00:25:58,350 --> 00:26:00,460 Så string s lig GetString. 611 00:26:00,460 --> 00:26:03,380 Så mere konkret nu, hvad linje 6 gøre her? 612 00:26:03,380 --> 00:26:05,640 Så den funktion til højre får strengen, 613 00:26:05,640 --> 00:26:06,890 tager, hvor mange argumenter? 614 00:26:09,458 --> 00:26:09,900 Okay. 615 00:26:09,900 --> 00:26:10,400 Så ingen. 616 00:26:10,400 --> 00:26:11,360 En lille sanity check. 617 00:26:11,360 --> 00:26:15,380 Et argument, igen, er bare et input til en funktion til at ændre 618 00:26:15,380 --> 00:26:17,250 sin standard opførsel på en eller anden måde. 619 00:26:17,250 --> 00:26:19,540 Men i dette tilfælde, jeg ikke ønsker at ændre 620 00:26:19,540 --> 00:26:20,650 adfærd GetString. 621 00:26:20,650 --> 00:26:22,430 Jeg ville bare få en streng. 622 00:26:22,430 --> 00:26:25,190 Så jeg satte intet i parentes, og så vil jeg sætte en 623 00:26:25,190 --> 00:26:27,550 semikolon demarking enden af ​​kodelinje. 624 00:26:27,550 --> 00:26:29,840 Nu lighedstegnet betyder ikke lige, per se. 625 00:26:29,840 --> 00:26:32,690 Det betyder opgave, hvilket betyder indsætte de får 626 00:26:32,690 --> 00:26:36,060 afgives til højre inde i det, der er til venstre. 627 00:26:36,060 --> 00:26:39,400 >> Så til venstre, siger vi, at vi har erklæret en 628 00:26:39,400 --> 00:26:41,630 streng ved navn s. 629 00:26:41,630 --> 00:26:44,240 Og mere specifikt, har vi allokeret hukommelse inde i 630 00:26:44,240 --> 00:26:46,340 som vi vil lægge de bits, der repræsenterer en sekvens af 631 00:26:46,340 --> 00:26:46,850 tegn. 632 00:26:46,850 --> 00:26:49,400 Men i dag har vi afsat 633 00:26:49,400 --> 00:26:51,450 eller erklæres en streng. 634 00:26:51,450 --> 00:26:51,790 Ok. 635 00:26:51,790 --> 00:26:54,760 Så nu når jeg har gjort dette, vil jeg tilslutte i værdien af 636 00:26:54,760 --> 00:26:56,535 s, ikke værdien af ​​David. 637 00:26:56,535 --> 00:27:00,200 Så dette er forkert hvorfor? 638 00:27:03,060 --> 00:27:04,870 Så det er bare bogstaveligt talt hard-coded s. 639 00:27:04,870 --> 00:27:06,870 Det er at sige "goddag, s", som er ikke hvad jeg vil. 640 00:27:06,870 --> 00:27:07,790 Så jeg kan gøre dette. 641 00:27:07,790 --> 00:27:10,330 Den procentvise tegn er en pladsholder, men nu har jeg brug for 642 00:27:10,330 --> 00:27:12,520 passere ind i udskrive et andet argument. 643 00:27:12,520 --> 00:27:15,160 Husk på, at argumenter til funktioner er adskilt af 644 00:27:15,160 --> 00:27:20,300 kommaer, så næste komma her jeg sætte efter denne bogstavet s. 645 00:27:20,300 --> 00:27:23,740 Og i den forbindelse nu, s er variabel, og printf, 646 00:27:23,740 --> 00:27:25,550 efter modtagelse af disse to indgange - 647 00:27:25,550 --> 00:27:29,440 strengen til venstre og variabelnavnet s til højre - 648 00:27:29,440 --> 00:27:32,750 det vil lukke sidstnævnte i førstnævnte for os, og 649 00:27:32,750 --> 00:27:34,600 bare udskrive en dejlig smuk streng, der indeholder 650 00:27:34,600 --> 00:27:36,770 uanset hvad det er, at vi har skrevet i. 651 00:27:36,770 --> 00:27:37,560 >> Så lad os prøve dette. 652 00:27:37,560 --> 00:27:38,860 Kommer til at gå videre og zoome ud, tilbage 653 00:27:38,860 --> 00:27:40,250 til min terminal vindue. 654 00:27:40,250 --> 00:27:41,840 Zoom ind ved bunden her. 655 00:27:41,840 --> 00:27:44,070 Gentag gøre hej. 656 00:27:44,070 --> 00:27:45,870 Klang synes at have været køres igen. 657 00:27:45,870 --> 00:27:49,280 Jeg har tænkt mig at skrive. / Hej, Enter. 658 00:27:49,280 --> 00:27:52,145 Intet synes at ske endnu, men det er ved denne prompt 659 00:27:52,145 --> 00:27:55,700 at jeg kan skrive noget som Nate, Enter, og nu har vi 660 00:27:55,700 --> 00:27:56,380 Hej, Nate. 661 00:27:56,380 --> 00:27:59,600 Og jeg kan gøre det igen med Rob, og så videre. 662 00:27:59,600 --> 00:28:03,410 Så forhåbentlig nu dette program opfører sig som jeg agter. 663 00:28:03,410 --> 00:28:05,720 >> Nu ikke så brugervenlig. 664 00:28:05,720 --> 00:28:07,930 Jeg har ingen idé om, hvad der bliver forventet af mig. 665 00:28:07,930 --> 00:28:09,620 Så vi kan helt sikkert rydde op en lille smule. 666 00:28:09,620 --> 00:28:13,270 Lad mig gå tilbage her, og i stedet for bare at dykke i og 667 00:28:13,270 --> 00:28:16,480 beder brugeren om en streng, lad mig eksplicit fortælle 668 00:28:16,480 --> 00:28:17,750 bruger, hvad jeg forventer. 669 00:28:17,750 --> 00:28:21,610 Så printf ("Indtast en streng:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Så ingen variabler her. 672 00:28:25,510 --> 00:28:26,750 Ingen procenttegn. 673 00:28:26,750 --> 00:28:28,550 Bare den simple engelsk udtryk. 674 00:28:28,550 --> 00:28:34,030 Lad mig nu gå til bunden her og kør mit program. 675 00:28:34,030 --> 00:28:35,380 Men intet synes at have ændret sig. 676 00:28:35,380 --> 00:28:37,350 Hvorfor? 677 00:28:37,350 --> 00:28:38,380 Jeg er nødt til at kompilere den. 678 00:28:38,380 --> 00:28:39,570 Så let fejl at gøre. 679 00:28:39,570 --> 00:28:41,700 Men du er nødt til ikke kun at gemme filen, men 680 00:28:41,700 --> 00:28:43,260 genoversætte programmet. 681 00:28:43,260 --> 00:28:46,640 Og så hvis jeg re-run gøre hej, nu Dunk kører. 682 00:28:46,640 --> 00:28:51,800 Nu kan jeg køre. / Hej. Og nu kan jeg se "Indtast en streng:". 683 00:28:51,800 --> 00:28:52,050 Okay. 684 00:28:52,050 --> 00:28:53,440 Nu er det lidt mere brugervenligt. 685 00:28:53,440 --> 00:28:55,850 Nate, Enter, hallo, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Nå, lad os prøve det igen og begynde at tænke 687 00:28:57,310 --> 00:28:58,080 ca hjørne tilfælde. 688 00:28:58,080 --> 00:29:00,520 Så ligesom i Scratch, er du opmuntret eller er ved at blive 689 00:29:00,520 --> 00:29:03,180 fremmes i spec at slags tænke over hvad der kunne gå 690 00:29:03,180 --> 00:29:06,610 galt, hvis du ikke forventer alt, hvad brugeren kan gøre. 691 00:29:06,610 --> 00:29:08,050 Bugs derfor kunne forårsage. 692 00:29:08,050 --> 00:29:09,710 Så indtaste en streng - 693 00:29:09,710 --> 00:29:11,130 hvad er et hjørne sag her? 694 00:29:11,130 --> 00:29:13,320 Hvad er et scenarie, at jeg, programmør, måske ikke har 695 00:29:13,320 --> 00:29:16,070 forventet? 696 00:29:16,070 --> 00:29:17,600 Yeah. 697 00:29:17,600 --> 00:29:17,920 Okay. 698 00:29:17,920 --> 00:29:22,060 Så hvad hvis jeg skriver i en række som denne? 699 00:29:22,060 --> 00:29:22,500 Ok. 700 00:29:22,500 --> 00:29:24,490 Så det virker stadig. 701 00:29:24,490 --> 00:29:25,880 Gramatically giver ingen mening. 702 00:29:25,880 --> 00:29:27,180 Men i det mindste programmet virker. 703 00:29:27,180 --> 00:29:28,650 >> Hvad er et andet hjørne sag? 704 00:29:28,650 --> 00:29:29,610 Noget jeg ikke havde forventet. 705 00:29:29,610 --> 00:29:31,590 Ja? 706 00:29:31,590 --> 00:29:31,940 Okay. 707 00:29:31,940 --> 00:29:34,950 Så vi kunne gøre noget som en virkelig, virkelig stort antal. 708 00:29:34,950 --> 00:29:37,270 Så lad os gøre det her. 709 00:29:37,270 --> 00:29:40,880 Lad mig zoome ud til en anden, lad mig fremhæve. 710 00:29:40,880 --> 00:29:42,250 Kan ikke kopiere og indsætte hernede. 711 00:29:42,250 --> 00:29:42,470 Ok. 712 00:29:42,470 --> 00:29:44,440 Så jeg kan ikke kopiere og indsætte i denne terminal vindue, så vi får 713 00:29:44,440 --> 00:29:46,950 lige simulere det. 714 00:29:46,950 --> 00:29:51,340 Lad mig zoome ud, kommer til at wrap. 715 00:29:51,340 --> 00:29:52,700 Jeg har ikke tænkt mig at gøre dette alt for længe, ​​fordi det ikke vil 716 00:29:52,700 --> 00:29:54,440 faktisk bryde i dette program. 717 00:29:54,440 --> 00:29:55,260 Men det kunne. 718 00:29:55,260 --> 00:29:55,830 Enter. 719 00:29:55,830 --> 00:29:56,580 Men det gjorde det ikke. 720 00:29:56,580 --> 00:29:57,050 Ok. 721 00:29:57,050 --> 00:29:58,440 Men det er en ægte hjørne sag. 722 00:29:58,440 --> 00:30:01,610 Og den eneste grund til, at opførte sig korrekt, så at 723 00:30:01,610 --> 00:30:05,820 tale, er fordi CS50 funktionen GetString er faktisk 724 00:30:05,820 --> 00:30:08,040 udformet under hætten, som vi vil se i et par uger, 725 00:30:08,040 --> 00:30:11,570 til automatisk at tildele mere og mere RAM, mere og mere 726 00:30:11,570 --> 00:30:14,330 hukommelse fra operativsystemet, når det indser, wow, 727 00:30:14,330 --> 00:30:16,670 du har virkelig skrevet i noget ganske lang. 728 00:30:16,670 --> 00:30:18,500 Nu, dette er lidt af en hvid løgn. 729 00:30:18,500 --> 00:30:22,020 Hvis vi faktisk standsede et stykke tid, og jeg har skrevet i 730 00:30:22,020 --> 00:30:24,640 noget lignende 5 milliarder tegn på tastaturet 731 00:30:24,640 --> 00:30:28,060 her, eller virkelig ramt copy-paste ganske lidt, vi muligvis 732 00:30:28,060 --> 00:30:29,730 kan få programmet til at gå ned. 733 00:30:29,730 --> 00:30:32,130 Bare lidt sværere at simulere det med en endelig 734 00:30:32,130 --> 00:30:33,740 tid. 735 00:30:33,740 --> 00:30:37,320 >> Hvad er et andet hjørne tilfælde kunne vi forsøge? 736 00:30:37,320 --> 00:30:38,730 Ja? 737 00:30:38,730 --> 00:30:39,020 Yeah. 738 00:30:39,020 --> 00:30:40,360 Så hvorfor gør vi ikke svare noget? 739 00:30:40,360 --> 00:30:43,130 Så vi faktisk nødt til at tage nogle tiltag, fordi ellers 740 00:30:43,130 --> 00:30:45,060 programmet kommer til at sidde der blinker hele dagen. 741 00:30:45,060 --> 00:30:46,860 Men hvis jeg bare trykke Enter - 742 00:30:46,860 --> 00:30:48,780 OK, nu, ser stadig forkert. 743 00:30:48,780 --> 00:30:51,670 Vidste ikke gå ned, men måske er der nu en mulighed for at 744 00:30:51,670 --> 00:30:54,190 påbegynde gennemførelsen af ​​en mere stringent program 745 00:30:54,190 --> 00:30:55,290 der egentlig kontrollerer. 746 00:30:55,290 --> 00:30:57,640 Og hvis strengen, den sætning, det ord, jeg 747 00:30:57,640 --> 00:31:00,890 indtastet har længde 0, ja, måske jeg skulle råbe ad den 748 00:31:00,890 --> 00:31:03,770 bruger, eller fortælle ham eller hende om at indtaste en streng igen, så 749 00:31:03,770 --> 00:31:06,560 vi faktisk får, hvad der ligner korrekt adfærd og ikke 750 00:31:06,560 --> 00:31:08,570 bare fuldstændig forglemmelse fra min side. 751 00:31:08,570 --> 00:31:11,130 >> Spørgsmål i ryggen? 752 00:31:11,130 --> 00:31:11,970 Decimaltal. 753 00:31:11,970 --> 00:31:13,120 Så vi kunne prøve det, også. 754 00:31:13,120 --> 00:31:16,840 1,10000005. 755 00:31:16,840 --> 00:31:19,470 Synes lige det kommer til at bare arbejde faktisk okay. 756 00:31:19,470 --> 00:31:21,160 Og det faktisk forventes. 757 00:31:21,160 --> 00:31:24,550 Selv om vi kunne have skrevet, at antallet der, eller en 758 00:31:24,550 --> 00:31:28,200 større antal tidligere indse, at når vi er ved at skrive bruger 759 00:31:28,200 --> 00:31:31,070 input og vi bruger den GetString funktion, ikke 760 00:31:31,070 --> 00:31:34,380 Uanset om hvad jeg skriver ligner et nummer. 761 00:31:34,380 --> 00:31:36,720 Husk på, at i henhold til ASCII, alt på din 762 00:31:36,720 --> 00:31:39,920 tastaturet har en numerisk værdi, der kan knyttes til en 763 00:31:39,920 --> 00:31:41,480 karakter, en char. 764 00:31:41,480 --> 00:31:44,490 Så i dette tilfælde, selvom jeg måske skrive et nummer, 765 00:31:44,490 --> 00:31:48,190 computer kommer til at tænke på det, så at sige, som en streng - 766 00:31:48,190 --> 00:31:49,870 noget, der ligner et tal, men er 767 00:31:49,870 --> 00:31:51,090 faktisk ikke et tal. 768 00:31:51,090 --> 00:31:53,450 Men det er faktisk en perfekt Segue, fordi vi nu kan 769 00:31:53,450 --> 00:31:55,450 faktisk overgang til at skrive programmer, der 770 00:31:55,450 --> 00:31:56,730 bruge andre datatyper. 771 00:31:56,730 --> 00:32:01,840 >> Så udover selv at anvende chars, eller rettere, udover selv at anvende strenge, 772 00:32:01,840 --> 00:32:04,510 indse, at vi har andre datatyper i C samt i 773 00:32:04,510 --> 00:32:05,230 andre sprog. 774 00:32:05,230 --> 00:32:08,480 En char, som navnet antyder, er blot et enkelt tegn. 775 00:32:08,480 --> 00:32:12,150 En flyder er en floating point-værdi, og det er bare en fancy 776 00:32:12,150 --> 00:32:14,470 måde at sige et reelt tal - noget, der har en decimal 777 00:32:14,470 --> 00:32:17,410 punkt i det med nogle numre til venstre og / eller højre. 778 00:32:17,410 --> 00:32:21,370 En int er et heltal, der er bare et nummer som 123. 779 00:32:21,370 --> 00:32:24,170 Og nu mere interessant er ting som dobbelt. 780 00:32:24,170 --> 00:32:28,540 Hvad sagde vi sige en dobbelt var sidste gang? 781 00:32:28,540 --> 00:32:30,050 Det er 64, til højre. 782 00:32:30,050 --> 00:32:33,560 Så mens typisk en float er 32-bit - 783 00:32:33,560 --> 00:32:37,340 så det er så lang tid i hukommelsen, det bruger 32 nuller og ettaller til 784 00:32:37,340 --> 00:32:40,530 repræsenterer værdier - en dobbelt er bogstaveligt talt to gange, hvilket 785 00:32:40,530 --> 00:32:43,810 betyder, at du enten kan repræsentere større tal, eller 786 00:32:43,810 --> 00:32:45,810 du kan repræsentere mere præcise tal. 787 00:32:45,810 --> 00:32:48,690 Så du kan have flere numre efter kommaet, men 788 00:32:48,690 --> 00:32:51,520 som fyren sagde i videoen, selv noget simpelt 789 00:32:51,520 --> 00:32:55,360 konceptuelt ligesom 1/3 ikke kan gengives præcist ved en 790 00:32:55,360 --> 00:32:58,330 computer, fordi i sidste ende du løber tør for bits, og 791 00:32:58,330 --> 00:33:02,510 derfor kan du kun gøre .33333333 så mange gange, på 792 00:33:02,510 --> 00:33:05,050 hvorefter du bare nødt til at sige, jeg er ud af repræsentation 793 00:33:05,050 --> 00:33:08,120 plads, jeg skal bare kalde det en dag og repræsentere det 794 00:33:08,120 --> 00:33:10,200 lidt upræcist lide det. 795 00:33:10,200 --> 00:33:11,110 Og en lang lang - 796 00:33:11,110 --> 00:33:13,880 dumt navn, men det er fordi der er en datatype kendt som en 797 00:33:13,880 --> 00:33:19,350 længe i C, som tilfældigvis er ofte 32 bits, ligesom en 798 00:33:19,350 --> 00:33:21,670 int er 32 bit, men en lang lang er 799 00:33:21,670 --> 00:33:23,560 generelt 64 bits. 800 00:33:23,560 --> 00:33:25,740 Så det bare betyder, at du kan repræsentere større 801 00:33:25,740 --> 00:33:26,990 tal end dette. 802 00:33:26,990 --> 00:33:27,410 >> Ok. 803 00:33:27,410 --> 00:33:29,390 Så hvis vi rent faktisk ønsker at starte repræsenterer ting, vi 804 00:33:29,390 --> 00:33:31,030 muligvis mere sofistikerede typer, og 805 00:33:31,030 --> 00:33:32,340 det er derfor vi har streng. 806 00:33:32,340 --> 00:33:36,450 Så i CS50 biblioteket, at fil kaldet cs50.h, vi har 807 00:33:36,450 --> 00:33:41,110 faktisk erklærede en datatype, så at sige, kaldet streng, 808 00:33:41,110 --> 00:33:42,710 men streng faktisk ikke eksisterer. 809 00:33:42,710 --> 00:33:44,780 Det er, igen, en af ​​disse lag vi vil skrælle 810 00:33:44,780 --> 00:33:47,490 tilbage i en uge eller to og smide det væk, og faktisk 811 00:33:47,490 --> 00:33:49,640 kigge under kølerhjelmen på, hvad en streng egentlig er, og 812 00:33:49,640 --> 00:33:50,840 hvordan det er repræsenteret. 813 00:33:50,840 --> 00:33:53,520 Vi vil også se på booleske værdier. 814 00:33:53,520 --> 00:33:56,040 >> Så hvad var en bool i forbindelse med Scratch? 815 00:33:59,154 --> 00:34:00,300 Det er sandt eller falsk. 816 00:34:00,300 --> 00:34:03,900 Så det er bare en værdi, der er sandt eller falsk, tændt eller slukket, 1 eller 817 00:34:03,900 --> 00:34:06,140 0, men du ønsker at se i verden. 818 00:34:06,140 --> 00:34:09,739 Så i C, takket være den CS50 bibliotek, som igen 819 00:34:09,739 --> 00:34:12,179 omfatter et andet bibliotek under motorhjelmen, har vi 820 00:34:12,179 --> 00:34:14,909 adgang til en datatype, der hedder bool, som vil 821 00:34:14,909 --> 00:34:18,730 bogstaveligt giver os mulighed for at tildele værdierne sand eller falsk til 822 00:34:18,730 --> 00:34:20,219 ting i et program. 823 00:34:20,219 --> 00:34:23,880 >> Så lad os gå videre her og skrive et lille program, der 824 00:34:23,880 --> 00:34:26,330 gør noget der involverer tal i stedet. 825 00:34:26,330 --> 00:34:29,840 Så lad mig gå tilbage til CS50 Appliance, lad mig gå videre og 826 00:34:29,840 --> 00:34:32,770 oprette en ny fil her kaldet - 827 00:34:32,770 --> 00:34:35,460 lad os bare sige noget simpelt, som math.c. 828 00:34:38,270 --> 00:34:38,710 Ok. 829 00:34:38,710 --> 00:34:41,600 Og nu gå op til toppen af ​​mit program, jeg er 830 00:34:41,600 --> 00:34:42,510 vil gøre det sædvanlige - 831 00:34:42,510 --> 00:34:44,780 # Include , så jeg kan bruge 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 vi vil komme tilbage til i sidste ende, hvad int betyder 834 00:34:49,270 --> 00:34:52,389 her, hvad tomrum betyder her, men for nu, ved bare at 835 00:34:52,389 --> 00:34:54,270 du nødt til at starte programmer som dette. 836 00:34:54,270 --> 00:34:56,280 Nu vil jeg gå videre og sige noget lidt 837 00:34:56,280 --> 00:35:02,110 anderledes - printf ("Giv mig et nummer:" 838 00:35:02,110 --> 00:35:03,570 ). 839 00:35:03,570 --> 00:35:09,220 Så jeg har tænkt mig at gøre int n = GetInt, fordi det 840 00:35:09,220 --> 00:35:12,770 Sving ud GetInt er en anden funktion i CS50 biblioteket 841 00:35:12,770 --> 00:35:14,060 foruden GetString. 842 00:35:14,060 --> 00:35:17,340 Og nu jeg har tænkt mig at gøre noget dumt, som "tak 843 00:35:17,340 --> 00:35:25,760 for% d, for "decimal heltal, og derefter komma n, og 844 00:35:25,760 --> 00:35:26,620 derefter vende tilbage 0. 845 00:35:26,620 --> 00:35:28,940 Så igen, returnere 0 har noget at gøre med antallet er jeg 846 00:35:28,940 --> 00:35:30,080 beder brugeren om. 847 00:35:30,080 --> 00:35:33,620 Bare betyder i slutningen, at alle, formentlig, er godt. 848 00:35:33,620 --> 00:35:36,290 >> Så lad mig gå ned til min terminal vindue her. 849 00:35:36,290 --> 00:35:39,590 Lad mig skrive make matematik, skal du indtaste. 850 00:35:39,590 --> 00:35:41,360 Og noget er galt. 851 00:35:41,360 --> 00:35:44,620 Gør matematik virkede ikke. 852 00:35:44,620 --> 00:35:46,170 Her er den første af vores fejlmeddelelser. 853 00:35:46,170 --> 00:35:46,570 Hvorfor? 854 00:35:46,570 --> 00:35:49,720 Lidt kryptisk, men - 855 00:35:49,720 --> 00:35:50,060 Yeah. 856 00:35:50,060 --> 00:35:51,240 Så cs50.h. 857 00:35:51,240 --> 00:35:53,900 Så igen, især tidligt på, vil du skrive din første 858 00:35:53,900 --> 00:35:56,590 program for Pset 1 i sektioner, i kontortiden, og 859 00:35:56,590 --> 00:35:59,050 helt ærligt, vil det være overvældende til tider hvad disse ting 860 00:35:59,050 --> 00:36:00,000 rent faktisk siger. 861 00:36:00,000 --> 00:36:01,890 Men du vil indse meget hurtigt de begynder at falde 862 00:36:01,890 --> 00:36:06,120 i spande, hvor denne ene betyder, at du har forladt fra én 863 00:36:06,120 --> 00:36:08,290 i # indbefatter øverst i filen. 864 00:36:08,290 --> 00:36:10,960 Og Dunk, compileren, er at informere dig om dette ved 865 00:36:10,960 --> 00:36:14,090 siger, snarere fancifully, underforstået erklæring af 866 00:36:14,090 --> 00:36:15,990 funktion GetInt er ugyldig. 867 00:36:15,990 --> 00:36:16,310 >> Ok. 868 00:36:16,310 --> 00:36:17,520 Så hvad betyder det? 869 00:36:17,520 --> 00:36:22,080 Det betyder bare, at du har implicit erklæret GetInt i 870 00:36:22,080 --> 00:36:24,850 den forstand, at du ikke udtrykkeligt har erklæret det. 871 00:36:24,850 --> 00:36:27,300 Til eksplicit erklære int, er du nødt til at undervise 872 00:36:27,300 --> 00:36:28,740 Klang, at det eksisterer. 873 00:36:28,740 --> 00:36:32,020 Og den meget enkel løsning for det er at lære det ved 874 00:36:32,020 --> 00:36:34,780 herunder denne anden fil, cs50.h, på 875 00:36:34,780 --> 00:36:35,850 toppen af ​​din fil. 876 00:36:35,850 --> 00:36:40,380 Fordi bogstaveligt, hvad betyder # include er den fortæller Dunk 877 00:36:40,380 --> 00:36:44,030 temmelig meget at gå finde den fil der hedder cs50.h, kopiere, 878 00:36:44,030 --> 00:36:48,150 indsætte den automatisk ind i toppen af ​​mit program for mig, 879 00:36:48,150 --> 00:36:50,850 og derefter konvertere kildekoden til nuller og ettaller. 880 00:36:50,850 --> 00:36:52,850 Men det ville naturligvis være meget trættende, hvis vi mennesker havde 881 00:36:52,850 --> 00:36:55,370 at gå kopiere og indsætte disse store filer hele tiden, 882 00:36:55,370 --> 00:36:58,540 så # include bare gør alt dette automatisk uden 883 00:36:58,540 --> 00:37:01,550 muddying min kode med en andens bibliotek. 884 00:37:01,550 --> 00:37:06,370 Og et bibliotek er bare en anden fil, der indeholder funktioner og 885 00:37:06,370 --> 00:37:08,340 andre ting, som en anden har skrevet, at vi er 886 00:37:08,340 --> 00:37:10,270 gearing for vores egen skyld. 887 00:37:10,270 --> 00:37:10,580 >> Ok. 888 00:37:10,580 --> 00:37:11,200 Lad os prøve igen. 889 00:37:11,200 --> 00:37:12,250 Gør matematik. 890 00:37:12,250 --> 00:37:13,120 Enter. 891 00:37:13,120 --> 00:37:13,530 Godt. 892 00:37:13,530 --> 00:37:14,880 Så det ser ud til at have virket. 893 00:37:14,880 --> 00:37:18,330 Så lad mig nu køre matematik. / Matematik. 894 00:37:18,330 --> 00:37:21,100 Indtast giver mig et nummer, 123. 895 00:37:21,100 --> 00:37:22,620 Tak for de 123. 896 00:37:22,620 --> 00:37:24,490 Lad os prøve et andet hjørne sag. 897 00:37:24,490 --> 00:37:26,530 En streng er temmelig generøs, fordi en 898 00:37:26,530 --> 00:37:27,620 streng kan være hvad som helst. 899 00:37:27,620 --> 00:37:28,910 Kan ligne tal, ligner 900 00:37:28,910 --> 00:37:30,600 tegn, ligner ord. 901 00:37:30,600 --> 00:37:31,900 Men en int er en int. 902 00:37:31,900 --> 00:37:34,370 Så nu, hvis jeg er den vanskelige bruger, og det siger "Giv mig 903 00:37:34,370 --> 00:37:38,730 et nummer, "hvad nu hvis jeg prøver at gøre noget som 0,1? 904 00:37:38,730 --> 00:37:41,510 Tja, det er et tal, og det er i overensstemmelse med 905 00:37:41,510 --> 00:37:44,180 grammatik jeg brugte her, men under motorhjelmen, er jeg af 906 00:37:44,180 --> 00:37:45,610 kursus med funktionen GetInt. 907 00:37:45,610 --> 00:37:46,610 >> Så lad os se hvad der sker. 908 00:37:46,610 --> 00:37:48,250 Indtast, prøv igen. 909 00:37:48,250 --> 00:37:48,560 Ok. 910 00:37:48,560 --> 00:37:50,570 Lad mig være svært og bare trykke Enter igen. 911 00:37:50,570 --> 00:37:51,700 Indtast, Enter. 912 00:37:51,700 --> 00:37:53,890 Så nu ser det ud til, at GetInt er lidt mere 913 00:37:53,890 --> 00:37:55,240 kraftfuld end GetString. 914 00:37:55,240 --> 00:37:58,540 Vi, personale, gennemføres på en sådan måde, at hvis vi bemærker 915 00:37:58,540 --> 00:38:02,100 De har ikke givet os en int - og en int er et decimaltal 916 00:38:02,100 --> 00:38:04,785 indeholder nuller, dem, toere, treere, firere, femmere, seksere, 917 00:38:04,785 --> 00:38:05,540 syvere, ottere eller niere. 918 00:38:05,540 --> 00:38:06,310 Og det er det. 919 00:38:06,310 --> 00:38:08,810 Ingen decimaltegn, ingen tegn, ingen tegnsætning. 920 00:38:08,810 --> 00:38:10,390 Det ser ud til, at vi er nødt til at samarbejde. 921 00:38:10,390 --> 00:38:13,680 Så lad mig prøve fire, fem, seks, og det får mig igennem. 922 00:38:13,680 --> 00:38:16,760 Så virkelig, at være anal her, vil jeg nok sige "Giv mig 923 00:38:16,760 --> 00:38:20,310 et heltal "for at formidle til brugeren 924 00:38:20,310 --> 00:38:22,620 præcis hvad jeg agter. 925 00:38:22,620 --> 00:38:24,090 >> Nu lad os tænke over under hætten. 926 00:38:24,090 --> 00:38:27,930 Vi kommer ikke til at se på, hvordan cs50.h gennemføres i dag, 927 00:38:27,930 --> 00:38:29,080 det pågældende bibliotek. 928 00:38:29,080 --> 00:38:33,600 Men hvis det holder at sige prøv igen, prøv igen, prøv igen, hvad programmering 929 00:38:33,600 --> 00:38:36,970 konstruere jeg formodentlig med under hætten til 930 00:38:36,970 --> 00:38:39,000 gennemføre det? 931 00:38:39,000 --> 00:38:39,980 Så bare en løkke, right? 932 00:38:39,980 --> 00:38:41,930 En af de enkleste ideer, som vi så på Scratch. 933 00:38:41,930 --> 00:38:45,050 Det Forever konstruere, Repeat konstruere. 934 00:38:45,050 --> 00:38:47,320 Formodentlig i dette program, under hætten, selv 935 00:38:47,320 --> 00:38:49,470 selvom det er skrevet i C og ikke bunden, er det at gøre 936 00:38:49,470 --> 00:38:54,300 noget, der hedder svarende til evigt, hvis brugeren ikke har 937 00:38:54,300 --> 00:38:58,710 indtastet et heltal, siger prøve igen, prøve igen, prøve igen, prøve igen, så 938 00:38:58,710 --> 00:39:01,220 så endelig når vi får et heltal, så du 939 00:39:01,220 --> 00:39:02,970 bryde ud af denne sløjfe. 940 00:39:02,970 --> 00:39:05,610 >> Så hvad andre funktioner kan vi bruge her i CS50 bibliotek? 941 00:39:05,610 --> 00:39:07,880 Godt, slags den åbenlyse i det mindste på grundlag af 942 00:39:07,880 --> 00:39:09,570 datatyper, som vi nu ved eksisterer. 943 00:39:09,570 --> 00:39:12,900 Vi implementerede GetString, GetInt, men i hele 944 00:39:12,900 --> 00:39:15,680 første uger af udtrykket, kan du også bruge GetFloat og 945 00:39:15,680 --> 00:39:18,870 GetDouble og GetLongLong for at opnå præcis den 946 00:39:18,870 --> 00:39:20,030 datatyper, som du ønsker. 947 00:39:20,030 --> 00:39:24,030 Fordi den centrale detalje her er, at i modsætning til nogle sprog, 948 00:39:24,030 --> 00:39:26,630 ligesom Python og Ruby, hvor man ikke nødvendigvis behøver at 949 00:39:26,630 --> 00:39:29,730 erklære datatypen for en variabel - 950 00:39:29,730 --> 00:39:32,390 du behøver ikke at fortælle computeren, hvad slags ting 951 00:39:32,390 --> 00:39:34,000 du kommer til at sætte ind i den variable - 952 00:39:34,000 --> 00:39:36,640 i C, skal du være nok så præcis. 953 00:39:36,640 --> 00:39:40,060 Så hvis du ønsker en variabel kaldet n, en luns af storage 954 00:39:40,060 --> 00:39:42,900 at i dette tilfælde sker for at være 32 bit ved konvention, du 955 00:39:42,900 --> 00:39:45,660 nødt til at fortælle computeren, at disse bits er 956 00:39:45,660 --> 00:39:47,840 kommer til at gemme et nummer - 957 00:39:47,840 --> 00:39:50,630 ikke et tegn, ikke en streng, ikke en float. 958 00:39:50,630 --> 00:39:52,620 Og det løser problemet vi effektivt 959 00:39:52,620 --> 00:39:53,760 løb ind i sidste uge. 960 00:39:53,760 --> 00:39:57,050 Hvis vi bruger nuller og ettaller numre til at repræsentere ikke blot 961 00:39:57,050 --> 00:40:00,770 numre, men As og Bs og Cs, hvordan i verden er en 962 00:40:00,770 --> 00:40:03,460 Computeren vil vide, at dette mønster af bit egentlig 963 00:40:03,460 --> 00:40:07,650 betegner nummeret 65, i modsætning til repræsenterer 964 00:40:07,650 --> 00:40:09,860 bogstavet A, som tilfældigvis ifølge 965 00:40:09,860 --> 00:40:13,440 ASCII, huske, svarede til 65? 966 00:40:13,440 --> 00:40:16,550 >> Så disse datatyper levere indhold til computeren, så 967 00:40:16,550 --> 00:40:18,810 at det ved, om disse bits skal fortolkes som en 968 00:40:18,810 --> 00:40:23,660 int eller som en streng. 969 00:40:23,660 --> 00:40:26,500 Eventuelle spørgsmål, så om dette? 970 00:40:26,500 --> 00:40:28,149 Ja? 971 00:40:34,780 --> 00:40:35,270 DAVID J. Malan: Godt spørgsmål. 972 00:40:35,270 --> 00:40:39,140 Hvis vi tager ud stdio.h, vi gemme filen - 973 00:40:39,140 --> 00:40:44,360 lad mig gå ned til terminalvinduet og køre gøre matematik, zoom 974 00:40:44,360 --> 00:40:45,530 ind og indtaste - 975 00:40:45,530 --> 00:40:47,700 nu får jeg en anden fejl, fordi jeg er implicit 976 00:40:47,700 --> 00:40:49,650 erklære hvilken funktion nu? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Så nu har jeg lavet et nyt problem, hvis løsning er 979 00:40:52,970 --> 00:40:53,890 væsentlige den samme. 980 00:40:53,890 --> 00:40:55,365 Jeg har brug for at sætte den tilbage. 981 00:40:55,365 --> 00:40:56,615 PUBLIKUM: [uhørligt] 982 00:41:03,534 --> 00:41:04,030 DAVID J. Malan: Oh. 983 00:41:04,030 --> 00:41:04,850 Så hvis jeg tager ud - 984 00:41:04,850 --> 00:41:05,360 Okay, ja. 985 00:41:05,360 --> 00:41:08,960 Så hvis jeg fjerner den standard I / O-bibliotek indlemmelse op 986 00:41:08,960 --> 00:41:12,020 her, og så er du siger, hvis jeg slippe af med printf, få 987 00:41:12,020 --> 00:41:13,450 slippe af printf? 988 00:41:13,450 --> 00:41:13,810 Ja. 989 00:41:13,810 --> 00:41:18,450 Dette bør arbejde, fordi jeg ikke længere bruge nogen - Ups. 990 00:41:18,450 --> 00:41:20,110 Har jeg bare lyve? 991 00:41:20,110 --> 00:41:21,650 Oh, okay. 992 00:41:21,650 --> 00:41:25,640 Dette vil ikke arbejde på grund af en ny fejl, vi netop introduceret. 993 00:41:25,640 --> 00:41:28,390 Og denne ene er lidt mere selvforklarende. 994 00:41:28,390 --> 00:41:29,440 >> Hvad er problemet? 995 00:41:29,440 --> 00:41:30,680 Ubrugte variabel n.. 996 00:41:30,680 --> 00:41:34,040 Så denne fejl er resultatet af vores have konfigureret 997 00:41:34,040 --> 00:41:36,640 apparatet at være særligt pedantisk, for virkelig at yell på 998 00:41:36,640 --> 00:41:39,060 dig for alle mulige fejl, selvom det er lidt 999 00:41:39,060 --> 00:41:41,950 en ikke-fatal fejltagelse som denne - er det virkelig så stort et 1000 00:41:41,950 --> 00:41:44,820 håndtere, at jeg tildelt en int, sætte et nummer i det, og så 1001 00:41:44,820 --> 00:41:46,030 bare gjorde intet med det? 1002 00:41:46,030 --> 00:41:47,020 Så funktionelt, no. 1003 00:41:47,020 --> 00:41:50,410 Det kommer ikke til at bryde programmet. 1004 00:41:50,410 --> 00:41:51,490 Det er bare lidt dum, right? 1005 00:41:51,490 --> 00:41:54,220 Der er ingen værdi at have bedt om det nummer, oplagret 1006 00:41:54,220 --> 00:41:56,370 det i en variabel, hvis du aldrig kommer til at gøre noget 1007 00:41:56,370 --> 00:41:58,000 med det,. hvorvidt udskrive det eller gemme det 1008 00:41:58,000 --> 00:42:00,270 Så i dette tilfælde, er Dunk erkender så meget, og 1009 00:42:00,270 --> 00:42:02,010 Det siger ubrugte variabel n.. 1010 00:42:02,010 --> 00:42:05,380 >> Så vi kan løse dette, hvis vi virkelig ønsker. 1011 00:42:05,380 --> 00:42:07,250 Men igen, dette er ikke god programmering nu. 1012 00:42:07,250 --> 00:42:09,310 Så jeg kunne bare gøre det - 1013 00:42:09,310 --> 00:42:12,060 gå ned her, lad mig rydde skærmen, lave matematik. 1014 00:42:12,060 --> 00:42:13,090 Det virker. 1015 00:42:13,090 --> 00:42:18,110 Nu kan jeg køre min matematik program, tager input - 1016 00:42:18,110 --> 00:42:18,700 godt, det var slemt. 1017 00:42:18,700 --> 00:42:23,450 Tager input, og det er alt det gør i dette tilfælde. 1018 00:42:23,450 --> 00:42:25,220 >> Så faktisk, lad os prøve en anden hjørne, at vi 1019 00:42:25,220 --> 00:42:26,300 tænkte ikke på tidligere. 1020 00:42:26,300 --> 00:42:28,220 I dette tilfælde - her, lad os gå tilbage til en, der er en 1021 00:42:28,220 --> 00:42:29,500 lidt mere brugervenligt. 1022 00:42:29,500 --> 00:42:32,580 Lad mig gå tilbage her og kør gøre matematik igen. 1023 00:42:32,580 --> 00:42:34,190 Whoops, hvad gjorde jeg forkert? 1024 00:42:34,190 --> 00:42:35,400 Fik at rulle tilbage yderligere. 1025 00:42:35,400 --> 00:42:36,390 Okay. 1026 00:42:36,390 --> 00:42:38,490 Nu er vi tilbage i den oprindelige tilstand, hvor alle 1027 00:42:38,490 --> 00:42:39,990 er forhåbentlig godt. 1028 00:42:39,990 --> 00:42:43,360 Og nu, hvis jeg løber matematik, 123 synes at virke. 1029 00:42:43,360 --> 00:42:46,010 Men det er egentlig ikke en effektiv bevis, bare at sige 1030 00:42:46,010 --> 00:42:47,930 okay, det virker. 1031 00:42:47,930 --> 00:42:49,120 789, der virker. 1032 00:42:49,120 --> 00:42:50,100 Tid til at indsende. 1033 00:42:50,100 --> 00:42:51,870 Fordi der er andre hjørne sager her. 1034 00:42:51,870 --> 00:42:55,040 En streng ikke virkelig give os mange problemer ved at skrive i en 1035 00:42:55,040 --> 00:42:56,510 hel masse tegn. 1036 00:42:56,510 --> 00:42:59,580 Men hvad hvis jeg skriver i dette? 1037 00:42:59,580 --> 00:43:04,850 Hitting tallet 1 en hel masse, hel masse her - 1038 00:43:04,850 --> 00:43:06,300 okay, det bliver lidt kedeligt, så jeg har tænkt mig at 1039 00:43:06,300 --> 00:43:10,040 stoppe her, og jeg har tænkt mig at trykke Enter. 1040 00:43:10,040 --> 00:43:11,290 >> Hvad fanden skete der lige? 1041 00:43:14,110 --> 00:43:17,680 Så dette kan faktisk forklares. 1042 00:43:17,680 --> 00:43:18,920 Så tog det det som binær? 1043 00:43:18,920 --> 00:43:21,130 En god tanke, men nej, det er ikke det faktum, at det tog det 1044 00:43:21,130 --> 00:43:22,815 som binær, fordi faktisk det var bare sådan en 1045 00:43:22,815 --> 00:43:23,080 tilfældighed. 1046 00:43:23,080 --> 00:43:23,930 Vi kan gøre det igen. 1047 00:43:23,930 --> 00:43:26,530 Så der er ingen 2 i det binære system, der er 1048 00:43:26,530 --> 00:43:27,420 sandsynligvis nok alligevel. 1049 00:43:27,420 --> 00:43:28,780 Enter. 1050 00:43:28,780 --> 00:43:30,140 Så det var ikke problemet. 1051 00:43:30,140 --> 00:43:31,390 Hvad ellers? 1052 00:43:34,650 --> 00:43:35,400 Præcis. 1053 00:43:35,400 --> 00:43:37,830 >> Så tænke tilbage på, hvad en int rent faktisk er. 1054 00:43:37,830 --> 00:43:40,970 Det er 32 bit, der tilsammen er fortolket 1055 00:43:40,970 --> 00:43:42,090 som et tal. 1056 00:43:42,090 --> 00:43:44,730 Hvis du har 32 bit, der betyder, at hver af de bits kan være 1057 00:43:44,730 --> 00:43:46,690 et 0 eller et 1, 0 eller et 1. 1058 00:43:46,690 --> 00:43:49,090 Så det betyder, at der er to muligheder for denne bit, 1059 00:43:49,090 --> 00:43:51,140 to muligheder for dette, to muligheder for dette 1060 00:43:51,140 --> 00:43:52,570 bit - så det er 2 gange 2 gange - 1061 00:43:52,570 --> 00:43:55,480 så det er 2 til 32 effekt er det samlede antal 1062 00:43:55,480 --> 00:43:58,960 permutationer af nuller og ettaller, hvis du har 32 1063 00:43:58,960 --> 00:44:01,400 pladsholdere, nuller og ettaller, foran dig. 1064 00:44:01,400 --> 00:44:04,250 Så hvis jeg har 2 til 32, matematisk, det er hvad? 1065 00:44:07,080 --> 00:44:07,840 Så det er en masse. 1066 00:44:07,840 --> 00:44:09,910 Det er 4 mia give eller tage. 1067 00:44:09,910 --> 00:44:13,510 Og 4 milliarder synes ikke at være det, der blev udskrevet her. 1068 00:44:13,510 --> 00:44:16,290 Faktisk ser det tættere på 2 mia. 1069 00:44:16,290 --> 00:44:17,970 Men det er ikke en tilfældighed. 1070 00:44:17,970 --> 00:44:21,590 Den omstændighed, at computeren har misfortolket mit enormt antal, 1071 00:44:21,590 --> 00:44:24,260 min store sekvens af dem og derefter min store sekvens af toere, 1072 00:44:24,260 --> 00:44:26,880 som 2 milliarder groft, forklaret er hvordan? 1073 00:44:30,250 --> 00:44:32,180 Der er et loft på int. 1074 00:44:32,180 --> 00:44:34,970 Der er en bestemt en maksimal værdi, som du kan repræsentere. 1075 00:44:34,970 --> 00:44:36,370 Men det er normalt 4 mia right? 1076 00:44:36,370 --> 00:44:39,100 Hvis 2 til 32 er omtrent 4 milliarder der ser ud som 1077 00:44:39,100 --> 00:44:40,350 Det er det største antal. 1078 00:44:42,420 --> 00:44:45,240 Så ikke en rest, men en god tanke. 1079 00:44:45,240 --> 00:44:46,340 Negative tal. 1080 00:44:46,340 --> 00:44:49,570 Så hvis du har 4 milliarder mulige ting, du kan 1081 00:44:49,570 --> 00:44:52,970 repræsentere med disse forskellige permutationer af 32 0'er og 1082 00:44:52,970 --> 00:44:55,600 1s, ja, det er indlysende, at vi mennesker måske ønsker at 1083 00:44:55,600 --> 00:44:57,110 repræsentere ikke kun positive heltal 1084 00:44:57,110 --> 00:44:58,240 men negative heltal. 1085 00:44:58,240 --> 00:45:00,410 Og ja, det er den antagelse, at C gør. 1086 00:45:00,410 --> 00:45:03,550 Så med 32 bit, kan du repræsentere groft negativ 2 1087 00:45:03,550 --> 00:45:06,630 mia.kr. hele vejen op til positiv 2 mia. 1088 00:45:06,630 --> 00:45:08,750 Og så i dette tilfælde, er det, vi virkelig ser bare 1089 00:45:08,750 --> 00:45:13,600 i udkanten af ​​kapaciteten i vores tal, og vi har, så 1090 00:45:13,600 --> 00:45:15,860 at sige overløb et heltal. 1091 00:45:15,860 --> 00:45:19,180 Vi har prøvet at proppe flere bit ind i det, end rent faktisk kan passe. 1092 00:45:19,180 --> 00:45:22,960 Så det endelige resultat er, at vi hovedsagelig har alle 1 bits. 1093 00:45:22,960 --> 00:45:25,280 Vi har vendt alle vores bits på, har vi forsøgt at repræsentere 1094 00:45:25,280 --> 00:45:27,630 det største antal muligt, men det er klart ikke nær 1095 00:45:27,630 --> 00:45:30,960 stor nok til at repræsentere de to ting, jeg lige har skrevet i. 1096 00:45:30,960 --> 00:45:31,730 Ja? 1097 00:45:31,730 --> 00:45:32,980 PUBLIKUM: [uhørligt] 1098 00:45:37,230 --> 00:45:37,830 >> DAVID J. Malan: Godt spørgsmål. 1099 00:45:37,830 --> 00:45:40,080 Hvorfor kan vi ikke bare repræsenterer den negative 1100 00:45:40,080 --> 00:45:41,500 underskrive som blot et tegn? 1101 00:45:41,500 --> 00:45:44,200 Så vi absolut kunne, og vi kunne derefter gemme 1102 00:45:44,200 --> 00:45:45,470 en ekstra bit. 1103 00:45:45,470 --> 00:45:49,100 Men du er stadig nødt til at repræsentere denne streg, og 1104 00:45:49,100 --> 00:45:50,700 der kommer til at koste dig i det mindste noget, 1105 00:45:50,700 --> 00:45:52,220 formentlig en smule. 1106 00:45:52,220 --> 00:45:55,610 Så ja, vi kunne have 32 bits, der anvendes til vores nummer, men nu 1107 00:45:55,610 --> 00:45:57,610 vi har brug for en anden bit, der anvendes til vores tankestreg 1108 00:45:57,610 --> 00:45:58,810 symbol, minustegn. 1109 00:45:58,810 --> 00:46:01,470 Så nu har vi 33 bit-værdier, som vi kunne gøre, men det er 1110 00:46:01,470 --> 00:46:02,570 bare ikke den måde, det er gjort. 1111 00:46:02,570 --> 00:46:05,140 Vi lavede en dom opkald år siden, 32 bit er en slags af 1112 00:46:05,140 --> 00:46:06,170 måleenhed her. 1113 00:46:06,170 --> 00:46:08,120 Så vi kommer til at bruge en af ​​disse bits effektivt til 1114 00:46:08,120 --> 00:46:12,950 repræsentere negativitet, og 31 bit til at repræsentere tal. 1115 00:46:12,950 --> 00:46:15,550 Andre spørgsmål? 1116 00:46:15,550 --> 00:46:15,670 Ok. 1117 00:46:15,670 --> 00:46:16,030 Det er en masse. 1118 00:46:16,030 --> 00:46:17,930 Skal vi ikke gå videre og tage vores fem minutters pause her? 1119 00:46:23,580 --> 00:46:24,270 >> Ok. 1120 00:46:24,270 --> 00:46:31,250 Så igen, at ikke understrege nok de matematiske applikationer 1121 00:46:31,250 --> 00:46:33,840 af programmering, bare lad os plukke fra dette ene eksempel 1122 00:46:33,840 --> 00:46:36,590 før vi bevæger os ind i andre konstruktioner, bare fordi det 1123 00:46:36,590 --> 00:46:39,430 vil illustrere nogle få fælles humpe point på nogle af 1124 00:46:39,430 --> 00:46:41,520 det grundlæggende, når det kommer til at skrive programmer. 1125 00:46:41,520 --> 00:46:44,360 I dette tilfælde gør aritmetiske udtryk, der har nogle 1126 00:46:44,360 --> 00:46:48,010 interessant relevans for syntaks. 1127 00:46:48,010 --> 00:46:50,430 >> Så dette er blot en formel, som vi kan konvertere 1128 00:46:50,430 --> 00:46:52,690 temperaturer fra Fahrenheit til Celsius. 1129 00:46:52,690 --> 00:46:54,600 Hvis du ikke huske, det er bare formlen. 1130 00:46:54,600 --> 00:46:58,870 Så hvis man tilslutter Fahrenheit værdi på 32 grader, hvilket er 1131 00:46:58,870 --> 00:47:02,850 frysning, er det kommer til at være 32 minus 32 er 0, og ja, 1132 00:47:02,850 --> 00:47:05,130 0 i Celsius er også frysning. 1133 00:47:05,130 --> 00:47:08,210 Så hurtig tilregnelighed kontrollere der - det er den velkendte formel. 1134 00:47:08,210 --> 00:47:10,880 Lad mig gå over til apparatet, selv om, og start 1135 00:47:10,880 --> 00:47:13,920 skrive et program kaldet, ligesom, f2c; "Fahrenheit til 1136 00:47:13,920 --> 00:47:15,920 Celsius dot c ". 1137 00:47:15,920 --> 00:47:18,930 Og op på toppen her, vil jeg starte med # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, og jeg har tænkt mig at gøre int main (void), og 1139 00:47:22,190 --> 00:47:24,680 igen, vil vi komme tilbage i fremtiden, hvad int betyder 1140 00:47:24,680 --> 00:47:26,820 der, og hvilke hulrum betyder, at der. 1141 00:47:26,820 --> 00:47:28,770 Og lad mig nu gå videre og gennemføre et program, der 1142 00:47:28,770 --> 00:47:31,170 hovedsageligt gør denne konvertering for os. 1143 00:47:31,170 --> 00:47:36,830 >> Så printf, lad os sige, temperatur i Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 Og så lad mig gå videre og få den værdi fra brugeren. 1145 00:47:40,140 --> 00:47:43,120 Hvilken slags værdi bør jeg får fra brugeren, hvis jeg ønsker 1146 00:47:43,120 --> 00:47:45,620 dem til at give mig en temperatur i Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 Ja? 1148 00:47:48,090 --> 00:47:50,090 Hvad ville du foreslå? 1149 00:47:50,090 --> 00:47:50,410 Yeah. 1150 00:47:50,410 --> 00:47:51,960 Så float føles temmelig rimelig. 1151 00:47:51,960 --> 00:47:53,950 Vi har, igen, blot et par muligheder, 1152 00:47:53,950 --> 00:47:55,310 vi har set hidtil. 1153 00:47:55,310 --> 00:48:00,100 Vi har ting som char, double, float, int, lang lang, 1154 00:48:00,100 --> 00:48:01,150 bool, string. 1155 00:48:01,150 --> 00:48:03,510 Så af disse, float føles temmelig rimelig. 1156 00:48:03,510 --> 00:48:06,340 Vi kunne godt bruge en dobbelt, ret, for hvis vi virkelig ønsker at 1157 00:48:06,340 --> 00:48:07,580 repræsenterer et menneskes temperatur - 1158 00:48:07,580 --> 00:48:10,730 98,60 tusind - 1159 00:48:10,730 --> 00:48:12,990 vi kunne bruge 64 bit til at gøre det, men det føles som 1160 00:48:12,990 --> 00:48:14,200 overkill for temperaturen. 1161 00:48:14,200 --> 00:48:16,380 Så lad os bare gå med float. 1162 00:48:16,380 --> 00:48:18,100 Nu har jeg brug for en variabel. 1163 00:48:18,100 --> 00:48:20,500 Bare for at holde tingene enkle, vil jeg kalde det f, men jeg 1164 00:48:20,500 --> 00:48:23,370 kunne lige så rigtigt kalder det temperatur, 1165 00:48:23,370 --> 00:48:24,600 men enten er fint. 1166 00:48:24,600 --> 00:48:27,610 Så flyde f = GetFloat. 1167 00:48:27,610 --> 00:48:30,220 Så snart jeg nu har besluttet at bruge GetFloat, selv om, jeg 1168 00:48:30,220 --> 00:48:33,340 nødvendigt at lave én korrektion. 1169 00:48:33,340 --> 00:48:33,720 Yeah. 1170 00:48:33,720 --> 00:48:37,460 Så vi er nødt til at # include , ellers compiler er 1171 00:48:37,460 --> 00:48:39,000 kommer til at yell på os. 1172 00:48:39,000 --> 00:48:41,720 Nu hvor jeg har en float, lad mig gå videre og gøre det 1173 00:48:41,720 --> 00:48:42,460 konvertering. 1174 00:48:42,460 --> 00:48:44,980 >> Så det første, lad mig også komme ind i vane her af 1175 00:48:44,980 --> 00:48:46,310 kommentering min kode. 1176 00:48:46,310 --> 00:48:49,820 Så igen, en kommentar er blot en notation til mennesket, der er 1177 00:48:49,820 --> 00:48:52,600 ikke en del af programmet i sig selv, men en, hjælper dig 1178 00:48:52,600 --> 00:48:55,010 forstå, hvad du gjorde den næste morgen, eller næste 1179 00:48:55,010 --> 00:48:57,570 måned, det hjælper din undervisning fyr forstår, hvad du gjorde 1180 00:48:57,570 --> 00:48:59,230 eller hvad du havde tænkt dig at gøre, så det er 1181 00:48:59,230 --> 00:49:00,950 generelt meget god praksis. 1182 00:49:00,950 --> 00:49:02,940 Hvert par linjer kode, skrive en kommentar til 1183 00:49:02,940 --> 00:49:04,490 dig selv eller din kollega. 1184 00:49:04,490 --> 00:49:08,460 Så her vil jeg sige, "Spørg brugeren for temperatur." 1185 00:49:08,460 --> 00:49:10,890 Behøver ikke at være en hel sætning, bare en kort sætning. 1186 00:49:10,890 --> 00:49:14,270 Men tanken bag kommentere i C er, at hver af dine 1187 00:49:14,270 --> 00:49:17,980 bemærkninger bør give dig - eller, siger en TF eller en kollega - 1188 00:49:17,980 --> 00:49:21,290 at skimme dit program og ved præcis, hvad det gør, ved ikke 1189 00:49:21,290 --> 00:49:24,650 så meget at læse koden, men ved at læse de kommentarer, som 1190 00:49:24,650 --> 00:49:26,220 bør være kortfattet og klar. 1191 00:49:26,220 --> 00:49:29,030 Okay, så lad mig gå videre og sige, "Konverter 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit til Celsius. "Så jeg har tænkt mig at gå videre og gøre, 1193 00:49:32,660 --> 00:49:34,340 lad os sige, flyde ca. 1194 00:49:34,340 --> 00:49:36,610 Vi holder Celsius som en floating point værdi. 1195 00:49:36,610 --> 00:49:37,630 >> Og lad mig tage et stik på dette. 1196 00:49:37,630 --> 00:49:40,350 Formlen er, igen, op her. 1197 00:49:40,350 --> 00:49:45,510 Som 5/9 gange F minus 32. 1198 00:49:45,510 --> 00:49:46,360 Så lad os gøre det. 1199 00:49:46,360 --> 00:49:50,450 Så 5 divideret med 9, minus - 1200 00:49:50,450 --> 00:49:52,330 Ups, jeg rodet det op allerede. 1201 00:49:52,330 --> 00:49:53,070 Times. 1202 00:49:53,070 --> 00:49:56,550 Så 9/5 gange F minus 32. 1203 00:49:56,550 --> 00:49:59,650 Så F minus 32, semikolon. 1204 00:49:59,650 --> 00:50:02,000 Og nu, hernede, vil jeg gå videre 1205 00:50:02,000 --> 00:50:03,220 og sige, udskrive resultat. 1206 00:50:03,220 --> 00:50:05,160 Og denne del er nemt. Printf. 1207 00:50:05,160 --> 00:50:07,980 Hvordan går jeg om udskrivning af dette? 1208 00:50:07,980 --> 00:50:16,890 Tja, jeg kunne sige "Dette antal i Celsius er% f \ n", 1209 00:50:16,890 --> 00:50:18,060 kun for nogle æstetik. 1210 00:50:18,060 --> 00:50:20,450 Og hvad så værdi ønsker jeg at tilslutte her som printf s 1211 00:50:20,450 --> 00:50:21,360 andet argument? 1212 00:50:21,360 --> 00:50:21,650 Okay. 1213 00:50:21,650 --> 00:50:22,540 Så bare c. 1214 00:50:22,540 --> 00:50:24,760 Så vi vil starte med denne og så bare returnere 0. 1215 00:50:24,760 --> 00:50:25,960 Igen, det har intet at gøre med matematik. 1216 00:50:25,960 --> 00:50:27,610 Det betyder bare, at alt er godt. 1217 00:50:27,610 --> 00:50:31,210 >> Nu er dette korrekt, dette program? 1218 00:50:31,210 --> 00:50:31,520 Ok. 1219 00:50:31,520 --> 00:50:33,630 Så jeg har lavet nogle fejl. 1220 00:50:33,630 --> 00:50:35,980 Selv hvis du ikke har nogen idé om, hvad programmering er, kan du sortere 1221 00:50:35,980 --> 00:50:37,120 af udlede tilbage til folkeskolen, hvad 1222 00:50:37,120 --> 00:50:38,740 fejl her kunne være. 1223 00:50:38,740 --> 00:50:40,050 Hvad er en af ​​de første? 1224 00:50:40,050 --> 00:50:41,256 PUBLIKUM: [uhørligt] 1225 00:50:41,256 --> 00:50:41,660 DAVID J. Malan: Yeah. 1226 00:50:41,660 --> 00:50:42,940 Så vi mangler parenteser. 1227 00:50:42,940 --> 00:50:45,420 Det var bevidst, at jeg gjorde parenteser i keynote 1228 00:50:45,420 --> 00:50:48,130 glide her, fordi der er faktisk dette begreb af ordre 1229 00:50:48,130 --> 00:50:51,590 af operationer, eller forrang, hvorved visse operationer - 1230 00:50:51,590 --> 00:50:52,890 multiplikation - 1231 00:50:52,890 --> 00:50:56,000 har højere binding, har højere prioritet end ting 1232 00:50:56,000 --> 00:50:58,050 som addition eller subtraktion. 1233 00:50:58,050 --> 00:51:00,550 Så vi har gjort det i årevis bare at gøre det klart præcis 1234 00:51:00,550 --> 00:51:02,840 hvad matematisk operation bør gøres først. 1235 00:51:02,840 --> 00:51:05,010 Så jeg burde nok efterligne netop dette. 1236 00:51:05,010 --> 00:51:08,990 Ellers er computeren formodentlig vil forsøge at gøre 1237 00:51:08,990 --> 00:51:13,090 noget lignende skel 5 af 9, og derefter multiplicere F, derefter trække 1238 00:51:13,090 --> 00:51:14,850 32 fra det hele. 1239 00:51:14,850 --> 00:51:16,480 Hvilket ikke i virkeligheden, hvad vi ønsker at gøre. 1240 00:51:16,480 --> 00:51:17,340 Så lad os parenthesize. 1241 00:51:17,340 --> 00:51:20,860 Lad os tilføje mine parenteser her, parenteser her. 1242 00:51:20,860 --> 00:51:22,670 Lad os sætte dette herovre. 1243 00:51:22,670 --> 00:51:25,130 Her vil jeg blot har bemærket en anden fejl gjorde jeg undervejs. 1244 00:51:25,130 --> 00:51:25,680 Ja? 1245 00:51:25,680 --> 00:51:26,930 PUBLIKUM: [uhørligt] 1246 00:51:29,632 --> 00:51:30,130 >> DAVID J. Malan: Ah. 1247 00:51:30,130 --> 00:51:30,470 Godt. 1248 00:51:30,470 --> 00:51:32,400 Så vi har faktisk samme heltal 1249 00:51:32,400 --> 00:51:34,020 division spørgsmål fra før. 1250 00:51:34,020 --> 00:51:35,800 Jeg korrigere, lad os se, hvad symptom er. 1251 00:51:35,800 --> 00:51:36,990 Men vi bliver nødt til at rette en 1252 00:51:36,990 --> 00:51:37,680 anden fejl her. 1253 00:51:37,680 --> 00:51:38,015 Ja? 1254 00:51:38,015 --> 00:51:39,540 PUBLIKUM: [uhørligt] 1255 00:51:39,540 --> 00:51:40,070 DAVID J. Malan: Ja. 1256 00:51:40,070 --> 00:51:43,130 Så dum fejl jeg lavede, men utrolig vigtig. 1257 00:51:43,130 --> 00:51:45,870 Computeren vil ikke bare vende det blinde øje, og lad 1258 00:51:45,870 --> 00:51:48,770 mig bruge kapital F, da jeg faktisk erklærede den variable 1259 00:51:48,770 --> 00:51:51,360 som et lille f her, i linje 8. 1260 00:51:51,360 --> 00:51:54,470 Så jeg er nødt til at korrigere i linje 11 min kapitalisering, som en 1261 00:51:54,470 --> 00:51:56,820 øjeblik siden var stort F ved en fejltagelse. 1262 00:51:56,820 --> 00:51:57,610 Hvad med her? 1263 00:51:57,610 --> 00:51:59,980 Skulle dette være små bogstaver så godt? 1264 00:51:59,980 --> 00:52:02,260 Det bør være, men det er en tilfældighed. 1265 00:52:02,260 --> 00:52:05,070 Denne% f har intet at gøre med den variable. 1266 00:52:05,070 --> 00:52:07,980 Så bare for at være super klar her, lad mig gå videre og 1267 00:52:07,980 --> 00:52:10,710 omdøbe dette, kort, "temperatur". Lad mig omdøbe 1268 00:52:10,710 --> 00:52:15,050 denne "temperatur". Lad mig ikke omdøbe denne. 1269 00:52:15,050 --> 00:52:18,180 Fordi, igen,% f globalt betyder, "decimaltalsværdi." 1270 00:52:18,180 --> 00:52:19,950 Har intet at gøre med min variabel. 1271 00:52:19,950 --> 00:52:23,080 Men "temperatur" over det hele er bare lidt ordrig, 1272 00:52:23,080 --> 00:52:25,370 så jeg har tænkt mig at gå tilbage til min lille "f" s. 1273 00:52:25,370 --> 00:52:27,890 >> Lad mig gå videre ned til mit vindue her. 1274 00:52:27,890 --> 00:52:29,190 Gør f2c - 1275 00:52:29,190 --> 00:52:31,200 der var igen den vilkårlige navn jeg 1276 00:52:31,200 --> 00:52:32,590 gav til denne fil. 1277 00:52:32,590 --> 00:52:33,690 Synes at have kompileret. 1278 00:52:33,690 --> 00:52:35,080 Lad mig løbe f2c. 1279 00:52:35,080 --> 00:52:35,780 Enter. 1280 00:52:35,780 --> 00:52:37,786 Temperatur i Fahrenheit - lad os gøre en let. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, korrigere. 1283 00:52:40,910 --> 00:52:45,910 Men hvis jeg nu gør 212 til kogning - 1284 00:52:45,910 --> 00:52:46,630 damn. 1285 00:52:46,630 --> 00:52:47,030 Ok. 1286 00:52:47,030 --> 00:52:50,780 Så tydeligvis ikke korrekt, hvis din TF forsøger 1287 00:52:50,780 --> 00:52:51,800 mindst to værdier. 1288 00:52:51,800 --> 00:52:53,340 Så hvad er problemet her? 1289 00:52:53,340 --> 00:52:55,970 Nå, du allerede sætte fingeren på, hvad problemet er. 1290 00:52:55,970 --> 00:52:57,600 Men hvorfor er det sådan? 1291 00:52:57,600 --> 00:53:00,630 Heroppe. Når jeg laver matematik af 5 divideret med 9 1292 00:53:00,630 --> 00:53:02,190 Så begrebsmæssigt, det er helt korrekt. 1293 00:53:02,190 --> 00:53:03,690 Fuldstændig i overensstemmelse med formlen. 1294 00:53:03,690 --> 00:53:05,940 Men computere kun gøre præcis, hvad du 1295 00:53:05,940 --> 00:53:06,760 fortælle dem at gøre. 1296 00:53:06,760 --> 00:53:08,940 Og hvad vi reelt fortæller computeren her er 1297 00:53:08,940 --> 00:53:12,320 opdele det hele tal 5 ved det hele tal 9 1298 00:53:12,320 --> 00:53:13,670 og giv mig resultatet. 1299 00:53:13,670 --> 00:53:16,230 Problemet er dog, når du division ved hjælp af data 1300 00:53:16,230 --> 00:53:20,220 typer, er udgangen samme datatype som input. 1301 00:53:20,220 --> 00:53:23,670 Og så hvis de to indgange er begge int'er er udgangen går 1302 00:53:23,670 --> 00:53:25,110 være en int. 1303 00:53:25,110 --> 00:53:28,770 Og så 5 divideret med 9 er point noget. 1304 00:53:28,770 --> 00:53:32,320 Men hvad er det nærmeste heltal til punkt noget? 1305 00:53:32,320 --> 00:53:33,630 Så det er faktisk 0. 1306 00:53:33,630 --> 00:53:36,620 Så som vi diskuterede i mandags, alt efter kommaet 1307 00:53:36,620 --> 00:53:37,940 punkt bliver afkortet. 1308 00:53:37,940 --> 00:53:39,495 Det bare bliver smidt væk. 1309 00:53:39,495 --> 00:53:42,760 Så dette er en komplet fejltagelse, fordi jeg kan lige så godt bare 1310 00:53:42,760 --> 00:53:44,700 formere alt ved 0 her. 1311 00:53:44,700 --> 00:53:46,550 >> Nu kan jeg løse dette i et par forskellige måder. 1312 00:53:46,550 --> 00:53:48,080 Jeg kunne gøre dette. 1313 00:53:48,080 --> 00:53:50,490 5,0 divideret med 9,0. 1314 00:53:50,490 --> 00:53:52,110 Teknisk set har jeg ikke engang behøver at gøre det. 1315 00:53:52,110 --> 00:53:55,780 Det er tilstrækkeligt til at bare gøre et af tallene en float - 1316 00:53:55,780 --> 00:53:58,290 eller dobbelt - ved at sætte kommaet her. 1317 00:53:58,290 --> 00:54:01,740 For hvad der sker nu, er, når du dividerer et heltal ved 1318 00:54:01,740 --> 00:54:04,670 en flyder eller en dobbelt, er computeren vil indse 1319 00:54:04,670 --> 00:54:06,830 oh, en af ​​dem er mere præcis. 1320 00:54:06,830 --> 00:54:09,420 Lad mig fejle på siden af ​​giver dig mere præcision end 1321 00:54:09,420 --> 00:54:10,310 du havde tænkt dig. 1322 00:54:10,310 --> 00:54:12,700 Så det vil konvertere resultatet - 1323 00:54:12,700 --> 00:54:16,240 det vil returnere resultatet som en kommatalsværdi så godt. 1324 00:54:16,240 --> 00:54:17,330 Så det ville arbejde. 1325 00:54:17,330 --> 00:54:18,060 Det ville virke. 1326 00:54:18,060 --> 00:54:20,010 Og der er en anden mekanisme, som vi vil se i 1327 00:54:20,010 --> 00:54:21,390 mere detaljeret i næste uge. 1328 00:54:21,390 --> 00:54:24,690 Du kan faktisk, som programmøren, fortælle computeren 1329 00:54:24,690 --> 00:54:27,930 til rent faktisk at behandle en datatype som 1330 00:54:27,930 --> 00:54:29,260 om det var en anden. 1331 00:54:29,260 --> 00:54:30,990 >> Så jeg kunne faktisk gøre det. 1332 00:54:30,990 --> 00:54:35,280 I parentes kan jeg sige noget lignende (float), åben 1333 00:54:35,280 --> 00:54:36,350 paren tæt parentes. 1334 00:54:36,350 --> 00:54:39,050 Og det er, hvad der kaldes "casting". Igen, mere 1335 00:54:39,050 --> 00:54:39,940 på denne næste uge. 1336 00:54:39,940 --> 00:54:42,280 Men dette er kun den programmæssige måde at fortælle 1337 00:54:42,280 --> 00:54:45,910 computeren, yeah jeg ved 9 er et heltal eller en lang. 1338 00:54:45,910 --> 00:54:47,700 Jeg ved, det er ikke en kommatalsværdi. 1339 00:54:47,700 --> 00:54:49,420 Men behandle det som sådan alligevel. 1340 00:54:49,420 --> 00:54:52,000 Så for at kaste en datatype midler til at konvertere 1341 00:54:52,000 --> 00:54:53,310 fra den ene til den anden. 1342 00:54:53,310 --> 00:54:55,790 Helt ærligt, det er bare lidt grim, så jeg vil foreslå, at vi går 1343 00:54:55,790 --> 00:54:58,830 tilbage til den oprindelige forslag om blot konvertere 1344 00:54:58,830 --> 00:55:00,770 disse ting til kommeværdier manuelt. 1345 00:55:00,770 --> 00:55:02,890 Fordi nu er det bare super klart, hvad der sker, og 1346 00:55:02,890 --> 00:55:04,280 det er ikke alt, distraherende. 1347 00:55:04,280 --> 00:55:06,710 >> Så lad os nu gå tilbage til min terminal vindue. 1348 00:55:06,710 --> 00:55:07,990 Gør f2c. 1349 00:55:07,990 --> 00:55:09,430 Lad mig gå videre og køre dette. 1350 00:55:09,430 --> 00:55:12,340 Og som en sidebemærkning, får du keder skrive disse kommandoer 1351 00:55:12,340 --> 00:55:14,910 igen og igen, indse, at computere, som Linux her, 1352 00:55:14,910 --> 00:55:16,010 tendens til at være temmelig smart. 1353 00:55:16,010 --> 00:55:18,890 Og hvis jeg ramte Up, kan vi gå igennem hele min historie 1354 00:55:18,890 --> 00:55:20,380 kommandoer, op og ned. 1355 00:55:20,380 --> 00:55:23,840 Så i dette tilfælde her, kan jeg bare gå op at køre gøre f2c. 1356 00:55:23,840 --> 00:55:25,830 Jeg bliver råbt på, fordi jeg lige gjorde det et sekund siden. 1357 00:55:25,830 --> 00:55:27,030 Det er allerede ajour. 1358 00:55:27,030 --> 00:55:30,720 Så nu kan jeg køre f2c igen. 1359 00:55:30,720 --> 00:55:33,260 Lad os prøve 32 Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 Lad os prøve 212 Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Pyh. 1362 00:55:37,250 --> 00:55:38,250 Synes at virke. 1363 00:55:38,250 --> 00:55:41,760 Nu, dette er godt, men det føles lidt vilkårlig, at 1364 00:55:41,760 --> 00:55:44,890 Jeg viser seks numre efter de decimaler. 1365 00:55:44,890 --> 00:55:45,070 Right? 1366 00:55:45,070 --> 00:55:47,830 Hvis du er vejret person på TV, du er sådan en doofus 1367 00:55:47,830 --> 00:55:49,150 hvis du læser temperaturen til 1368 00:55:49,150 --> 00:55:50,070 denne grad af præcision. 1369 00:55:50,070 --> 00:55:51,270 Så lad os forenkle dette. 1370 00:55:51,270 --> 00:55:53,880 Så lad os faktisk gå op her, til min printf. 1371 00:55:53,880 --> 00:55:55,490 Og ja, jeg vil flyde. 1372 00:55:55,490 --> 00:55:57,570 Men jeg vil nu angive præcision. 1373 00:55:57,570 --> 00:55:59,070 Og jeg har tænkt mig at være lidt kortfattet. 1374 00:55:59,070 --> 00:56:03,090 Jeg har tænkt mig at sige, giv mig et point efter decimal. 1375 00:56:03,090 --> 00:56:07,590 Så i stedet for at sige% f, vil jeg sige% .1 f. 1376 00:56:07,590 --> 00:56:09,760 Og det betyder bare give mig en position 1377 00:56:09,760 --> 00:56:11,410 efter kommaet. 1378 00:56:11,410 --> 00:56:11,700 Ok. 1379 00:56:11,700 --> 00:56:12,570 Lad os prøve det igen. 1380 00:56:12,570 --> 00:56:15,590 Lad mig igen køre det efter kompilering. 1381 00:56:15,590 --> 00:56:18,160 Og nu jeg skriver i 32, og jeg kommer tilbage en 1382 00:56:18,160 --> 00:56:19,310 mere kortfattet værdi. 1383 00:56:19,310 --> 00:56:22,480 Og jeg kan skrive i, nu 212, og komme tilbage en mere kortfattet 1384 00:56:22,480 --> 00:56:23,260 værdi så godt. 1385 00:56:23,260 --> 00:56:25,190 Og der er andre ting, du kan gøre med printf. 1386 00:56:25,190 --> 00:56:27,950 Du kan faktisk angive, hvordan bred nummeret skal være. 1387 00:56:27,950 --> 00:56:30,900 Hvis du vil have polstring på den, så du kan højrejustere eller 1388 00:56:30,900 --> 00:56:32,360 venstrestille alle dine numre eller 1389 00:56:32,360 --> 00:56:33,400 forsøger at center ting. 1390 00:56:33,400 --> 00:56:35,340 Så indser at der er små tricks, du kan gøre der. 1391 00:56:35,340 --> 00:56:38,420 Men de bare koges ned til at formatere koder, 1392 00:56:38,420 --> 00:56:39,600 ligesom vi har der. 1393 00:56:39,600 --> 00:56:41,090 >> Så med hensyn til dette nummer af forrang. 1394 00:56:41,090 --> 00:56:43,820 Dette er en meget kedelige tabel igennem metodisk. 1395 00:56:43,820 --> 00:56:46,780 Men indse, at ophavsmændene til C er kommet op med den 1396 00:56:46,780 --> 00:56:50,190 regler, der specificerer hvilke operatører har højere 1397 00:56:50,190 --> 00:56:53,680 forrang, mere bindende magt, end andre. 1398 00:56:53,680 --> 00:56:55,890 Så mens det i folkeskolen, vi generelt vidste, at det var 1399 00:56:55,890 --> 00:56:58,930 multiplikation og division, og derefter addition og subtraktion, 1400 00:56:58,930 --> 00:56:59,950 så nogle andre ting. 1401 00:56:59,950 --> 00:57:01,720 I en verden af ​​programmering, er der en meget 1402 00:57:01,720 --> 00:57:03,360 længere liste af ting. 1403 00:57:03,360 --> 00:57:05,150 Og det er ikke noget værd at huske nu. 1404 00:57:05,150 --> 00:57:07,310 Du bliver akklimatiseret til det inden længe. 1405 00:57:07,310 --> 00:57:10,690 Men ligesom i folkeskolen, parenteser generelt løser 1406 00:57:10,690 --> 00:57:12,990 spørgsmålene om forrang, ved at gøre super klart for 1407 00:57:12,990 --> 00:57:15,620 computer og human både hvad der er tilsigtet. 1408 00:57:15,620 --> 00:57:17,770 Så overveje dette bare en lille snyde ark der. 1409 00:57:17,770 --> 00:57:21,690 Men de fleste af disse oplysninger, vil vi ikke komme til i nogen tid. 1410 00:57:21,690 --> 00:57:21,900 >> Ok. 1411 00:57:21,900 --> 00:57:24,120 Nu, lad os bygge op og flytte væk fra disse tåbelige lille 1412 00:57:24,120 --> 00:57:25,460 matematiske eksempler. 1413 00:57:25,460 --> 00:57:27,500 Stadig bruge de samme nøgletal, men starte 1414 00:57:27,500 --> 00:57:29,960 udtrykke os selv lidt mere som Scratch. 1415 00:57:29,960 --> 00:57:31,660 Så i Scratch, havde vi disse boolske udtryk. 1416 00:57:31,660 --> 00:57:34,890 Og på engelsk, er et boolesk udtryk hvad? 1417 00:57:34,890 --> 00:57:35,580 Sandt eller falsk. 1418 00:57:35,580 --> 00:57:38,300 Det er noget, der evalueres til sand eller falsk. 1419 00:57:38,300 --> 00:57:39,060 1 eller 0. 1420 00:57:39,060 --> 00:57:39,870 Tændt eller slukket. 1421 00:57:39,870 --> 00:57:41,000 Uanset hvad du ønsker at kalde det. 1422 00:57:41,000 --> 00:57:43,210 Nu i Scratch, puslespilsbrikker lignede dette. 1423 00:57:43,210 --> 00:57:45,850 Og det er den kombination, på bunden der, af tre 1424 00:57:45,850 --> 00:57:47,980 puslespilsbrikker. 1425 00:57:47,980 --> 00:57:48,980 Én sammenholdt - 1426 00:57:48,980 --> 00:57:51,710 noget, der har blank og blank. 1427 00:57:51,710 --> 00:57:53,970 Og derefter to booleske udtryk i den. 1428 00:57:53,970 --> 00:57:56,460 Så du kan indlejre booleske udtryk for at få mere 1429 00:57:56,460 --> 00:57:59,360 kompliceret booleske udtryk. 1430 00:57:59,360 --> 00:58:03,930 For eksempel, hvis det er lørdag, og er rart 1431 00:58:03,930 --> 00:58:06,180 vejr, så gå udenfor. 1432 00:58:06,180 --> 00:58:07,500 Eller noget vilkårlig måde. 1433 00:58:07,500 --> 00:58:10,090 Så kan du tilmelde dig boolske udtryk til at komme med et 1434 00:58:10,090 --> 00:58:12,780 større sandhedsværdi, hvis svaret er baseret 1435 00:58:12,780 --> 00:58:13,800 på de mindre. 1436 00:58:13,800 --> 00:58:15,770 >> Nu, i C, heldigvis, denne kortlægning er 1437 00:58:15,770 --> 00:58:16,720 faktisk ret simpelt. 1438 00:58:16,720 --> 00:58:18,820 Parenteser at gøre tingene klart her. 1439 00:58:18,820 --> 00:58:21,700 && Er, hvad betyder "og". Så det er sådan 1440 00:58:21,700 --> 00:58:24,700 vi kommer til at konvertere disse blokke fra Scratch til C. 1441 00:58:24,700 --> 00:58:27,590 Og for de betingelser, vi så i Scratch, på venstre hånd 1442 00:58:27,590 --> 00:58:31,150 side der, kan jeg stable dem på samme måde i C. Hvis x er mindre 1443 00:58:31,150 --> 00:58:32,970 end y, så gøre det. 1444 00:58:32,970 --> 00:58:35,100 Else hvis x er større end y, så gør det. 1445 00:58:35,100 --> 00:58:38,030 Else logisk de skal være ens, så at sige 1446 00:58:38,030 --> 00:58:39,140 at de er ens. 1447 00:58:39,140 --> 00:58:41,210 Så vi kan nu begynde at bygge disse ting op. 1448 00:58:41,210 --> 00:58:42,170 >> Så lad os gøre et eksempel. 1449 00:58:42,170 --> 00:58:45,550 Lad mig åbne en fil, der er på kursets hjemmeside, at 1450 00:58:45,550 --> 00:58:47,270 Jeg skrev i forvejen. 1451 00:58:47,270 --> 00:58:50,540 Det kaldes nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 Og vi vil se hvorfor i bare et øjeblik. 1453 00:58:52,270 --> 00:58:54,770 Så i denne fil - nonswitch.c-- 1454 00:58:54,770 --> 00:58:56,830 først indse, at der er en hel masse 1455 00:58:56,830 --> 00:58:58,460 bemærkninger øverst. 1456 00:58:58,460 --> 00:59:00,110 Det er bare at forklare navnet på filen, hvad det 1457 00:59:00,110 --> 00:59:01,260 gør, og så videre. 1458 00:59:01,260 --> 00:59:04,390 Og det tilsyneladende demonstrerer brugen af ​​booleske OG-ning - 1459 00:59:04,390 --> 00:59:06,220 konjunktion to udtryk. 1460 00:59:06,220 --> 00:59:07,670 >> Så lad os se, hvordan dette program virker. 1461 00:59:07,670 --> 00:59:10,840 Jeg inkluderer mine to filer, cs50.h og stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Hvis jeg rulle ned, nu til programmet, det er en lidt længere 1463 00:59:13,180 --> 00:59:15,730 end vi har skrevet før, men temmelig læsbar. 1464 00:59:15,730 --> 00:59:18,360 Så jeg først udskriver til brugeren, på linie 18, 1465 00:59:18,360 --> 00:59:20,460 "Giv mig et heltal mellem 1 og 10". Så 1466 00:59:20,460 --> 00:59:21,530 det er lige der. 1467 00:59:21,530 --> 00:59:23,410 Nu får jeg det hele tal. 1468 00:59:23,410 --> 00:59:25,380 Men indse, at GetInt - temmelig simpel. 1469 00:59:25,380 --> 00:59:26,510 Det er bare at få en int. 1470 00:59:26,510 --> 00:59:28,830 Det kommer til at sikre, at det får en int og ikke en 1471 00:59:28,830 --> 00:59:30,060 snor eller en float. 1472 00:59:30,060 --> 00:59:32,390 Men det kommer ikke til at gøre nogen form for grænse kontrol. 1473 00:59:32,390 --> 00:59:34,750 Det kommer ikke til at filtrere de tal til at være mellem en 1474 00:59:34,750 --> 00:59:35,630 bestemt interval. 1475 00:59:35,630 --> 00:59:37,730 Så vi er nødt til at gennemføre denne selv. 1476 00:59:37,730 --> 00:59:40,680 Så ligesom i Scratch, hvor jeg kunne gøre en konjunktion af 1477 00:59:40,680 --> 00:59:43,560 to udtryk, kan jeg gøre det i C som følger. 1478 00:59:43,560 --> 00:59:48,660 Hvis n er større end eller lig med 1, og n er mindre end og 1479 00:59:48,660 --> 00:59:52,220 eller lig med 3, vil jeg meget vilkårligt dekret, 1480 00:59:52,220 --> 00:59:53,830 for at være et lille antal. 1481 00:59:53,830 --> 00:59:56,730 Bare for skyld en redegørelse. 1482 00:59:56,730 --> 01:00:00,210 Else hvis n er mellem 4 og 6, print "Du valgte en medium 1483 01:00:00,210 --> 01:00:03,440 nummer. "Else, hvis n er mellem 7 og 10, print" Du valgte en 1484 01:00:03,440 --> 01:00:06,390 stort antal. "Else print" Du vælger et ugyldigt nummer. " 1485 01:00:06,390 --> 01:00:07,900 Fordi logisk, der følger hvis vi har 1486 01:00:07,900 --> 01:00:09,230 udtømt vores sortiment. 1487 01:00:09,230 --> 01:00:12,400 >> Så indse dette er ikke helt hvordan vi skal lave større end eller 1488 01:00:12,400 --> 01:00:15,000 svarende til i en matematik klasse. 1489 01:00:15,000 --> 01:00:15,160 Right? 1490 01:00:15,160 --> 01:00:17,430 Du normalt tegne det på denne måde, med streg under det. 1491 01:00:17,430 --> 01:00:19,250 Men der er ingen sådan nøgle på mit tastatur. 1492 01:00:19,250 --> 01:00:22,390 Så symbolet i C til ekspression større end eller 1493 01:00:22,390 --> 01:00:25,770 lig med er to tegn, og symbolet for mindre end 1494 01:00:25,770 --> 01:00:29,100 eller lig med er to karakterer så godt. 1495 01:00:29,100 --> 01:00:29,330 Ok. 1496 01:00:29,330 --> 01:00:31,910 Så hvis jeg køre dette program, kan du sikkert gætte, hvad det er 1497 01:00:31,910 --> 01:00:32,650 vil gøre. 1498 01:00:32,650 --> 01:00:36,180 Hvis jeg gå videre og gøre nonswitch, Enter. 1499 01:00:36,180 --> 01:00:38,130 Og derefter køre nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Giv mig et tal mellem 1 og 10. 1501 01:00:39,530 --> 01:00:40,870 Jeg har tænkt mig at give det 11. 1502 01:00:40,870 --> 01:00:42,280 Jeg plukket et ugyldigt nummer. 1503 01:00:42,280 --> 01:00:44,090 Lad mig prøve nummer 3. 1504 01:00:44,090 --> 01:00:45,990 Jeg plukket et lille antal. 1505 01:00:45,990 --> 01:00:48,360 Så ret ligetil dér. 1506 01:00:48,360 --> 01:00:52,230 >> Hvad hvis jeg ønsker at ændre adfærd af dette program og 1507 01:00:52,230 --> 01:00:54,250 gøre noget lidt anderledes i stedet? 1508 01:00:54,250 --> 01:00:57,620 Lad mig gå videre og sige dette. 1509 01:00:57,620 --> 01:00:59,480 Lad mig slippe af med alt dette. 1510 01:00:59,480 --> 01:01:03,780 Og lad mig sige if (n == 42). 1511 01:01:03,780 --> 01:01:08,730 Og så jeg har tænkt mig at gå videre og sige print "Du valgte den 1512 01:01:08,730 --> 01:01:16,340 rigtige svar. "Else vi vil gå videre og sige, 1513 01:01:16,340 --> 01:01:18,460 printf ("Du valgte den 1514 01:01:18,460 --> 01:01:21,170 forkert svar "). Okay. 1515 01:01:21,170 --> 01:01:22,040 Bare fordi. 1516 01:01:22,040 --> 01:01:23,890 >> Nu, et par punkter, vi kan gøre her. 1517 01:01:23,890 --> 01:01:26,570 En, jeg ikke skrive det symbol, du vil synes er 1518 01:01:26,570 --> 01:01:27,390 mest rimelige. 1519 01:01:27,390 --> 01:01:30,110 Når jeg ønsker at kontrollere ligestilling, viser sig, du ikke bruger 1520 01:01:30,110 --> 01:01:30,910 lighedstegn. 1521 01:01:30,910 --> 01:01:34,000 Du i stedet bruge det lige lighedstegnet. 1522 01:01:34,000 --> 01:01:36,440 Og hvorfor kan det være, bare intuitivt? 1523 01:01:36,440 --> 01:01:37,030 Yeah. 1524 01:01:37,030 --> 01:01:39,330 PUBLIKUM: [uhørligt] 1525 01:01:39,330 --> 01:01:39,615 DAVID J. Malan: Korrekt. 1526 01:01:39,615 --> 01:01:41,630 Lighedstegnet bruges allerede til opgave. 1527 01:01:41,630 --> 01:01:43,020 Nogen troede egentlig ikke dette igennem. 1528 01:01:43,020 --> 01:01:45,820 Og så nu, når det kommer til ligestilling test, er vi nødt til 1529 01:01:45,820 --> 01:01:48,850 være mere eksplicit, og sige lig ligemænd. 1530 01:01:48,850 --> 01:01:52,110 En meget almindelig fejl er at gøre dette. 1531 01:01:52,110 --> 01:01:54,800 Og hvis i kontortiden eller engang i næste uge eller i 1532 01:01:54,800 --> 01:01:58,340 næste to uger du gøre noget som dette, og derefter 1533 01:01:58,340 --> 01:02:00,920 kæmper med det i 10, 20 minutter forsøger at finde ud af 1534 01:02:00,920 --> 01:02:03,330 hvad den skide fejl er, indse, at du er en af ​​dem 1535 01:02:03,330 --> 01:02:04,470 mennesker, der gjorde denne fejl. 1536 01:02:04,470 --> 01:02:06,030 Så super let at lave. 1537 01:02:06,030 --> 01:02:08,240 Men målet er nu at afværge denne fejl. 1538 01:02:08,240 --> 01:02:11,840 Dette kunne vurdere, fordi hvad er det egentlig sige? 1539 01:02:11,840 --> 01:02:15,010 Hvis n får 42. 1540 01:02:15,010 --> 01:02:18,250 Så de verbum folk bruger, verbalt, til at udtrykke 1541 01:02:18,250 --> 01:02:21,800 begrebet opgave er "får". Så hvis n bliver 42. 1542 01:02:21,800 --> 01:02:24,060 Så betyder tildele 42 til n.. 1543 01:02:24,060 --> 01:02:26,250 Nu har jeg en boolesk udtryk i parentes, 1544 01:02:26,250 --> 01:02:30,230 inde i denne tilstand, er den værdi 42. 1545 01:02:30,230 --> 01:02:30,390 Right? 1546 01:02:30,390 --> 01:02:32,690 For hvis du evaluerer det indefra og ud, det samlede 1547 01:02:32,690 --> 01:02:34,100 svar nu, er 42. 1548 01:02:34,100 --> 01:02:37,360 >> Så hvis jeg spurgte dig spørgsmålet: "hvis (42)," hvad er 1549 01:02:37,360 --> 01:02:38,410 der virkelig siger? 1550 01:02:38,410 --> 01:02:40,990 Nå, kan boolske udtryk kun være sand eller falsk. 1551 01:02:40,990 --> 01:02:42,010 1 eller 0. 1552 01:02:42,010 --> 01:02:43,010 Tændt eller slukket. 1553 01:02:43,010 --> 01:02:45,240 Så vi synes at have et hjørne tilfældet her, hvor alle af en 1554 01:02:45,240 --> 01:02:50,060 pludselig, jeg siger "hvis (42)". Det er ikke en boolesk værdi. 1555 01:02:50,060 --> 01:02:54,500 Så hvad computere gør, er dog det væsentlige svarer 1556 01:02:54,500 --> 01:02:58,620 noget, der ikke er 0 er fortolket til at være sandt. 1557 01:02:58,620 --> 01:02:59,340 1. 1558 01:02:59,340 --> 01:02:59,690 On. 1559 01:02:59,690 --> 01:03:01,510 De er alle tilsvarende funktionalitet. 1560 01:03:01,510 --> 01:03:05,070 Kun værdien 0, eller søgeordet falske, som vi vil 1561 01:03:05,070 --> 01:03:07,860 sidste ende se, er faktisk forkert. 1562 01:03:07,860 --> 01:03:15,040 Så "hvis (42)" ville faktisk være sandt, fordi det er ikke-nul. 1563 01:03:15,040 --> 01:03:18,620 Så for at være mere præcis her, en boolesk værdi er virkelig ikke så 1564 01:03:18,620 --> 01:03:20,680 meget sandt eller falsk, men for denne 1565 01:03:20,680 --> 01:03:24,650 tilfældet, hvis er 0 eller nul. 1566 01:03:24,650 --> 01:03:26,330 Så falsk eller ikke falsk. 1567 01:03:26,330 --> 01:03:28,640 Og det giver os mulighed for at dække alle de mere 1568 01:03:28,640 --> 01:03:30,980 muligheder i parentetisk udtryk. 1569 01:03:30,980 --> 01:03:33,840 Så vi er nødt til at, nogensinde så omhyggeligt, sige dette - 1570 01:03:33,840 --> 01:03:35,620 if (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Simpelthen fordi vi er nødt til at angive en test af lighed, 1572 01:03:39,100 --> 01:03:40,930 ikke en overdragelse af en værdi. 1573 01:03:40,930 --> 01:03:42,830 >> Hvad der ellers er værd at bemærke her? 1574 01:03:42,830 --> 01:03:46,030 Disse krøllede parenteser er faktisk ikke nødvendigt. 1575 01:03:46,030 --> 01:03:48,650 Jeg har gjort dem bare for at være nit-betyder her. 1576 01:03:48,650 --> 01:03:51,350 Men når du har en tilstand, der kun har én linje af 1577 01:03:51,350 --> 01:03:55,100 kode, som en bekvemmelighed, behøver programmører ikke behøver at bruge 1578 01:03:55,100 --> 01:03:56,030 tuborg-klammerne. 1579 01:03:56,030 --> 01:03:59,370 Det er tilstrækkeligt at bare led af æstetiske grunde, og 1580 01:03:59,370 --> 01:04:01,050 så skriv din linje kode. 1581 01:04:01,050 --> 01:04:04,160 Kun når du ønsker at skrive to linjer kode - for 1582 01:04:04,160 --> 01:04:08,230 Eksempelvis ellers printf ("Bye!"). Hvis du ønsker at gøre 1583 01:04:08,230 --> 01:04:09,540 at der er dette brydes. 1584 01:04:09,540 --> 01:04:11,700 Du kan led alt, hvad du vil, men det faktum, at du har 1585 01:04:11,700 --> 01:04:14,600 skrevet to linier kode uden brug af krøllede parenteser 1586 01:04:14,600 --> 01:04:16,860 betyder, at dette program ikke ville løbe korrekt eller måske 1587 01:04:16,860 --> 01:04:18,530 ikke engang kompilere. 1588 01:04:18,530 --> 01:04:21,040 Så for nu at være helt ærlig, tror jeg det bedste vane er bare 1589 01:04:21,040 --> 01:04:24,460 bruge de krøllede parenteser, og du vil opdage, at de gør 1590 01:04:24,460 --> 01:04:25,750 super klart, hvad der foregår. 1591 01:04:25,750 --> 01:04:29,410 >> Også, som en sidebemærkning - især hvis du er blandt dem, der bruger 1592 01:04:29,410 --> 01:04:31,700 de anbefalede bøger eller ressourcer online - 1593 01:04:31,700 --> 01:04:33,480 indse, at der er denne forestilling om stil i 1594 01:04:33,480 --> 01:04:34,130 programmering. 1595 01:04:34,130 --> 01:04:37,280 Og nogle mennesker faktisk foretrækker at sætte klammeparentes 1596 01:04:37,280 --> 01:04:38,720 herovre på en linje. 1597 01:04:38,720 --> 01:04:41,520 Nogle mennesker foretrækker at gøre latterlige ting, 1598 01:04:41,520 --> 01:04:43,830 gerne sætte dem her. 1599 01:04:43,830 --> 01:04:45,140 Der er ingen forkerte svar, når det kommer til 1600 01:04:45,140 --> 01:04:46,710 stil, men dette er forkert. 1601 01:04:46,710 --> 01:04:47,700 Men nogle mennesker gør det. 1602 01:04:47,700 --> 01:04:49,160 [Latter] 1603 01:04:49,160 --> 01:04:51,760 DAVID J. Malan: Så jeg nævner dette nu, simpelthen fordi som 1604 01:04:51,760 --> 01:04:54,400 du læse op på tingene i bøger eller på nettet, er du nødt til at få 1605 01:04:54,400 --> 01:04:55,990 forskellige budskaber fra forskellige lærere og 1606 01:04:55,990 --> 01:04:56,730 forskellige forfattere. 1607 01:04:56,730 --> 01:04:58,640 Og bare indse, at funktionelt, de er 1608 01:04:58,640 --> 01:05:00,740 generelt ækvivalent, men være konsekvente. 1609 01:05:00,740 --> 01:05:02,850 Så i dette tilfælde, vil vi standardisere på de krøllede 1610 01:05:02,850 --> 01:05:04,650 seler foring op her til venstre. 1611 01:05:04,650 --> 01:05:04,910 >> Ok. 1612 01:05:04,910 --> 01:05:07,040 Så lad os gå videre nu, og køre dette, og se hvad der sker 1613 01:05:07,040 --> 01:05:07,780 med dette program. 1614 01:05:07,780 --> 01:05:09,970 Gør nonswitch. 1615 01:05:09,970 --> 01:05:11,040 Så kører nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Giv mig et heltal mellem 0 og - så det er ikke relevant 1617 01:05:13,900 --> 01:05:16,480 længere, men jeg vil bare vilkårligt sige 42. 1618 01:05:16,480 --> 01:05:17,850 Og jeg plukket det rigtige svar. 1619 01:05:17,850 --> 01:05:20,430 Nå, lad os faktisk tage dette i en anden retning. 1620 01:05:20,430 --> 01:05:22,070 Det viser sig, at der er nogle andre syntaks vi 1621 01:05:22,070 --> 01:05:23,480 kan bruge i et program. 1622 01:05:23,480 --> 01:05:27,310 Her er et nyt stykke syntaks, der er funktionelt det samme, 1623 01:05:27,310 --> 01:05:30,680 men bare introducerer en anden måde at udtrykke os selv. 1624 01:05:30,680 --> 01:05:32,830 Så dette er hvad der kaldes en "switch-statement." Og en 1625 01:05:32,830 --> 01:05:34,820 switch-sætning som følger. 1626 01:05:34,820 --> 01:05:37,580 Det tager i parentes en værdi, som du vil 1627 01:05:37,580 --> 01:05:38,860 "Switch" på. 1628 01:05:38,860 --> 01:05:41,490 Du ønsker at opføre sig forskelligt baseret på dens værdi. 1629 01:05:41,490 --> 01:05:44,360 Så det betyder kontakten på værdien af ​​n.. 1630 01:05:44,360 --> 01:05:45,480 Og hvad betyder dette? 1631 01:05:45,480 --> 01:05:50,530 Tja, hvis n er 1 eller 2 eller 3, gå videre og udskrive "Du 1632 01:05:50,530 --> 01:05:52,680 plukket et stort antal "og derefter bryde. 1633 01:05:52,680 --> 01:05:55,720 Årsagen til brud er, at vejen C virker, er som 1634 01:05:55,720 --> 01:05:59,790 snart den finder en sag, der matcher, det begynder fuldbyrdende 1635 01:05:59,790 --> 01:06:01,610 hele koden nedenunder. 1636 01:06:01,610 --> 01:06:04,580 Så hvis jeg har én linje kode, som jeg gør her på linie 27, det 1637 01:06:04,580 --> 01:06:05,360 bliver henrettet. 1638 01:06:05,360 --> 01:06:07,520 Hvis jeg tilføjer en anden linje her, det bliver henrettet. 1639 01:06:07,520 --> 01:06:09,350 En anden linje her, det bliver henrettet. 1640 01:06:09,350 --> 01:06:12,460 Programmet standser kun udføre, hvad der er under 1641 01:06:12,460 --> 01:06:14,680 gældende sag resultatopgørelsen, når jeg udtrykkeligt 1642 01:06:14,680 --> 01:06:17,210 sige "pause". Så galt. 1643 01:06:17,210 --> 01:06:19,220 Ret, i det foreliggende tilfælde. Som følge 1644 01:06:19,220 --> 01:06:22,130 Case 4 eller 5 eller 6, ligeledes vil 1645 01:06:22,130 --> 01:06:23,160 at udskrive en besked. 1646 01:06:23,160 --> 01:06:24,410 I dette tilfælde antallet medium. 1647 01:06:24,410 --> 01:06:25,200 Break. 1648 01:06:25,200 --> 01:06:28,160 Sag 7, 8, 9, 10, går det at printe ud "Du valgte en stor 1649 01:06:28,160 --> 01:06:28,950 nummer. "Break. 1650 01:06:28,950 --> 01:06:31,290 Og så er der bogstaveligt talt et nøgleord kaldet "default" 1651 01:06:31,290 --> 01:06:34,090 Det er effektivt ligesom "else" konstruere. 1652 01:06:34,090 --> 01:06:36,010 Så ny syntaks, men intellektuelt, 1653 01:06:36,010 --> 01:06:37,060 intet overhovedet ny her. 1654 01:06:37,060 --> 01:06:38,280 Det er ligesom Scratch. 1655 01:06:38,280 --> 01:06:41,040 Hvis ellers hvis, ellers hvis slags blok. 1656 01:06:41,040 --> 01:06:44,560 >> Så det er den koblet version af dette program. 1657 01:06:44,560 --> 01:06:46,280 Men bemærk, at vi gjorde det med tal her. 1658 01:06:46,280 --> 01:06:49,040 Lad mig åbne op for en anden version, bare for at vise 1659 01:06:49,040 --> 01:06:50,670 noget lidt mere konkret. 1660 01:06:50,670 --> 01:06:52,840 Så her har vi kvaliteter i stedet. 1661 01:06:52,840 --> 01:06:55,540 Slår ud du kan bruge kontakter ikke blot på heltal, men på 1662 01:06:55,540 --> 01:06:56,340 tegn. 1663 01:06:56,340 --> 01:06:58,930 Ikke i alle datatyper, men i det mindste på tegn. 1664 01:06:58,930 --> 01:07:02,670 Så her kunne vi gøre noget lignende, hvis værdien af ​​C at 1665 01:07:02,670 --> 01:07:06,230 brugeren har indtastet, i ledningen 19, ved hjælp af getchar funktion, 1666 01:07:06,230 --> 01:07:09,410 er kapital A eller små bogstaver en, lad os fortolke det som en kvalitet, 1667 01:07:09,410 --> 01:07:11,340 og siger, at de plukkes en fremragende kvalitet. 1668 01:07:11,340 --> 01:07:14,690 Og ned langs switch-sætningen, har vi andre 1669 01:07:14,690 --> 01:07:17,950 tilfælde til "B" s og "C" s og så videre. 1670 01:07:17,950 --> 01:07:19,780 Men lad os nu runde ud en anden ting. 1671 01:07:19,780 --> 01:07:21,130 Og igen, slags flyver gennem 1672 01:07:21,130 --> 01:07:22,200 nogle af disse eksempler. 1673 01:07:22,200 --> 01:07:26,990 Men det er virkelig så at vi kan anvende dem, nu - 1674 01:07:26,990 --> 01:07:28,880 eller virkelig, bare oversætte dem nu - 1675 01:07:28,880 --> 01:07:32,220 til C. 1676 01:07:32,220 --> 01:07:33,310 >> Så lad mig gå videre og gøre det. 1677 01:07:33,310 --> 01:07:34,830 Jeg har tænkt mig at åbne en ny fil. 1678 01:07:34,830 --> 01:07:39,430 Og jeg har tænkt mig at gøre omfatte . 1679 01:07:39,430 --> 01:07:42,770 Og så jeg har tænkt mig at gøre int main (void). 1680 01:07:42,770 --> 01:07:46,390 Lad mig gemme denne fil som et loop.c. 1681 01:07:46,390 --> 01:07:48,280 Blot som eksempel. 1682 01:07:48,280 --> 01:07:49,910 Og jeg har tænkt mig at gå videre og gøre følgende. 1683 01:07:49,910 --> 01:07:54,180 Jeg vil skrive en meget kedelig program. 1684 01:07:54,180 --> 01:07:56,170 Så 10. 1685 01:07:56,170 --> 01:07:58,862 Lad os gøre det. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 Ok. 1688 01:08:00,360 --> 01:08:02,120 Så snart du begynder at gøre dette i programmering, er du 1689 01:08:02,120 --> 01:08:03,490 formentlig gør noget forkert. 1690 01:08:03,490 --> 01:08:04,950 Men vi vil starte der alligevel. 1691 01:08:04,950 --> 01:08:05,430 Ups. 1692 01:08:05,430 --> 01:08:06,950 Det er faktisk forkert. 1693 01:08:06,950 --> 01:08:08,230 7. 1694 01:08:08,230 --> 01:08:09,440 6. 1695 01:08:09,440 --> 01:08:10,750 5. 1696 01:08:10,750 --> 01:08:11,200 4. 1697 01:08:11,200 --> 01:08:12,450 Intet kommer til at ske, når vi kommer til 0. 1698 01:08:12,450 --> 01:08:13,290 3. 1699 01:08:13,290 --> 01:08:14,590 2. 1700 01:08:14,590 --> 01:08:15,630 1. 1701 01:08:15,630 --> 01:08:16,020 Okay. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Slet. 1704 01:08:18,689 --> 01:08:19,029 >> Ok. 1705 01:08:19,029 --> 01:08:20,029 Så returnere 0. 1706 01:08:20,029 --> 01:08:22,010 Så dette program er tydeligvis kommer til at gøre, hvad det meget 1707 01:08:22,010 --> 01:08:23,310 tediously siger, at det kommer til at gøre. 1708 01:08:23,310 --> 01:08:24,060 Det kommer til at udskrive alle dem 1709 01:08:24,060 --> 01:08:25,290 værdier, fra top til bund. 1710 01:08:25,290 --> 01:08:27,140 Så lad mig gøre lave loop. 1711 01:08:27,140 --> 01:08:28,640 Og så - Ups. 1712 01:08:28,640 --> 01:08:29,700 Gøre løkken. 1713 01:08:29,700 --> 01:08:31,479 Jeg var i den forkerte mappe. 1714 01:08:31,479 --> 01:08:33,300 Og lad mig køre loop. 1715 01:08:33,300 --> 01:08:34,140 Enter. 1716 01:08:34,140 --> 01:08:34,620 Woohoo. 1717 01:08:34,620 --> 01:08:35,270 Very nice. 1718 01:08:35,270 --> 01:08:36,279 Nice, lange program. 1719 01:08:36,279 --> 01:08:38,109 >> Okay, men lad os nu gøre det bedre. 1720 01:08:38,109 --> 01:08:40,810 Ligesom i Scratch, da du begyndte at bruge en løkke 1721 01:08:40,810 --> 01:08:43,149 konstruere, i stedet for bare at kopiere og indsætte alle de 1722 01:08:43,149 --> 01:08:45,580 puslespilsbrikker, lad mig introducere denne ting. 1723 01:08:45,580 --> 01:08:48,609 Så i C, er der forskellige looping konstruktioner, 1724 01:08:48,609 --> 01:08:50,540 hvoraf den ene ser sådan ud. 1725 01:08:50,540 --> 01:08:55,069 A "for" loop har tre ting, adskilt af to semikoloner. 1726 01:08:55,069 --> 01:08:57,770 Og derpå, inde i legemet af sløjfen, så at sige - den 1727 01:08:57,770 --> 01:08:59,390 stuff indersiden af ​​krøllede parenteser - 1728 01:08:59,390 --> 01:09:01,010 vi kan gøre noget igen og igen. 1729 01:09:01,010 --> 01:09:02,310 Så hvad jeg har her på skærmen, det er 1730 01:09:02,310 --> 01:09:03,300 bogstaveligt talt bare en kommentar. 1731 01:09:03,300 --> 01:09:05,380 Den / / betyder her kommer en kommentar. 1732 01:09:05,380 --> 01:09:06,180 Dette er ikke kode. 1733 01:09:06,180 --> 01:09:08,890 Dette er blot engelsk beskrivelse, for mig, det menneskelige. 1734 01:09:08,890 --> 01:09:11,300 >> So startværdier, betingelser og opdateringer. 1735 01:09:11,300 --> 01:09:12,770 Nå, lad os se hvordan det virker. 1736 01:09:12,770 --> 01:09:15,520 Dette giver mig mulighed for at omskrive dette program som følger. 1737 01:09:15,520 --> 01:09:16,399 For - 1738 01:09:16,399 --> 01:09:18,029 så her kommer mit loop - 1739 01:09:18,029 --> 01:09:19,439 int i - 1740 01:09:19,439 --> 01:09:21,330 her kommer en variabel kaldet "i" - 1741 01:09:21,330 --> 01:09:23,140 bliver initialiseret til 10.. 1742 01:09:23,140 --> 01:09:25,260 Så der er min initialisering. 1743 01:09:25,260 --> 01:09:29,450 Jeg ønsker at gøre dette loop, så længe "i" er større end eller 1744 01:09:29,450 --> 01:09:30,899 lig med 0.. 1745 01:09:30,899 --> 01:09:32,880 Og på hver gentagelse af denne sløjfe, vil jeg 1746 01:09:32,880 --> 01:09:34,979 at gøre i -. 1747 01:09:34,979 --> 01:09:36,310 Så vi oplevede + + på mandag. 1748 01:09:36,310 --> 01:09:37,660 - Er det modsatte. 1749 01:09:37,660 --> 01:09:39,410 Det reduceres værdien med 1. 1750 01:09:39,410 --> 01:09:43,319 Inde i denne løkke, vil jeg rent faktisk gøre noget. 1751 01:09:43,319 --> 01:09:46,390 Så jeg har tænkt mig at sige noget lignende printf. 1752 01:09:46,390 --> 01:09:48,939 Jeg ønsker ikke at sige 10 nu, fordi det tydeligvis er bare 1753 01:09:48,939 --> 01:09:50,000 vil udskrive den samme værdi. 1754 01:09:50,000 --> 01:09:52,246 Hvad ønsker jeg at udskrive i stedet, sandsynligvis? 1755 01:09:52,246 --> 01:09:52,590 Yeah. 1756 01:09:52,590 --> 01:09:55,270 Så "i". Så% d, dvs. 1757 01:09:55,270 --> 01:09:57,340 >> Så jeg har tænkt mig at stjæle en af ​​disse idéer fra tidligere - 1758 01:09:57,340 --> 01:09:59,640 denne substitution for format-koder - 1759 01:09:59,640 --> 01:10:01,620 og derefter ned her, i bunden, vil jeg vende tilbage 0, bare 1760 01:10:01,620 --> 01:10:02,710 for god foranstaltning. 1761 01:10:02,710 --> 01:10:04,740 Men nu har jeg en mere kortfattet program. 1762 01:10:04,740 --> 01:10:07,490 Det er kun et par linjer, og ikke nogle 10 eller 11 linjer. 1763 01:10:07,490 --> 01:10:09,440 Lad mig gå til min prompt hernede. 1764 01:10:09,440 --> 01:10:10,630 Remake loop. 1765 01:10:10,630 --> 01:10:12,140 Gentagelsen loop. 1766 01:10:12,140 --> 01:10:13,570 Og den forekommer at være den samme. 1767 01:10:13,570 --> 01:10:15,550 Nu er programmet er ikke mere interessant. 1768 01:10:15,550 --> 01:10:17,180 Men nu kan jeg skrive noget som dette. 1769 01:10:17,180 --> 01:10:18,970 Jeg kan ændre dette til 100. 1770 01:10:18,970 --> 01:10:21,400 Jeg kan så kompilere mit program. 1771 01:10:21,400 --> 01:10:23,360 Og så kan jeg igen køre mit program. 1772 01:10:23,360 --> 01:10:26,390 Og nu går det super-hurtigt på nutidens computere. 1773 01:10:26,390 --> 01:10:27,820 Men der har jeg - 1774 01:10:27,820 --> 01:10:29,620 og faktisk, min tilbagerulning buffer ikke 1775 01:10:29,620 --> 01:10:30,890 endda gå så langt. 1776 01:10:30,890 --> 01:10:31,680 Der vi går. 1777 01:10:31,680 --> 01:10:34,090 Så der har vi alle 100. 1778 01:10:34,090 --> 01:10:35,880 Men det er nemt at lave fejl her. 1779 01:10:35,880 --> 01:10:37,920 Hvad vil være den forventede adfærd, hvis jeg 1780 01:10:37,920 --> 01:10:41,150 uheld gøre det? 1781 01:10:41,150 --> 01:10:42,550 Så det føles som uendelig. 1782 01:10:42,550 --> 01:10:44,670 Så lad os se, om computeren opfører sig. 1783 01:10:44,670 --> 01:10:47,020 >> Så lad mig gå videre og gøre loop. 1784 01:10:47,020 --> 01:10:48,355 Og lad mig køre loop. 1785 01:10:53,590 --> 01:10:55,210 Så lad os vende tilbage til dette om et øjeblik. 1786 01:10:55,210 --> 01:10:56,720 Vi vil lade det køre. 1787 01:10:56,720 --> 01:10:59,520 For hvad skal vi tælle op til, minimalt? 1788 01:10:59,520 --> 01:11:02,200 Sandsynligvis mindst 2 mia hvis vi har så mange bits, og 1789 01:11:02,200 --> 01:11:03,660 vi bruger positive værdier. 1790 01:11:03,660 --> 01:11:04,890 Så lad os hoppe tilbage her. 1791 01:11:04,890 --> 01:11:07,810 Udover den slags sløjfer, har vi hvad der kaldes mens 1792 01:11:07,810 --> 01:11:09,430 løkker. Så ligesom i Scratch, havde du Forever 1793 01:11:09,430 --> 01:11:11,240 blokke, og du havde Gentag blokke. 1794 01:11:11,240 --> 01:11:13,270 Ligeledes i C, du lige har andre måder 1795 01:11:13,270 --> 01:11:14,260 udtrykke dig selv. 1796 01:11:14,260 --> 01:11:17,110 Så du har denne opfattelse af en while-løkke, hvor du kan 1797 01:11:17,110 --> 01:11:18,860 udtrykke dig lidt anderledes. 1798 01:11:18,860 --> 01:11:21,490 Og så har du noget, der hedder en gør-while-løkke, 1799 01:11:21,490 --> 01:11:24,200 der fungerer smule anderledes samt. 1800 01:11:24,200 --> 01:11:25,320 Og vi vil drille dem fra hinanden over tid. 1801 01:11:25,320 --> 01:11:28,630 >> Men lad os tage et kig på denne sidste her. 1802 01:11:28,630 --> 01:11:30,160 Hvis vi går ind i - 1803 01:11:30,160 --> 01:11:31,466 stadig kører. 1804 01:11:31,466 --> 01:11:32,770 Det er temmelig uendelig. 1805 01:11:32,770 --> 01:11:36,870 Så lad mig gå ind positivt, og viser, hvordan vi kan faktisk 1806 01:11:36,870 --> 01:11:39,410 regere brugerinput lidt mere effektivt. 1807 01:11:39,410 --> 01:11:40,910 Det er en temmelig kort program. 1808 01:11:40,910 --> 01:11:43,730 Og her har vi, i main, en int n erklæring. 1809 01:11:43,730 --> 01:11:46,570 Så giv mig en variabel kaldet n. Nu, jeg bogstaveligt talt sige 1810 01:11:46,570 --> 01:11:48,340 "Gør." Og så har jeg fået åbne krøllet 1811 01:11:48,340 --> 01:11:49,630 tandbøjle, tæt klammeparentes. 1812 01:11:49,630 --> 01:11:52,000 Og så mærke til, lige efter det, det siger, mens n 1813 01:11:52,000 --> 01:11:53,790 er mindre end 1. 1814 01:11:53,790 --> 01:11:55,300 Så bemærke, at disse linjer - 1815 01:11:55,300 --> 01:11:56,740 19 til 24 - 1816 01:11:56,740 --> 01:11:59,450 komponere kollektivt en gør-while-løkke. 1817 01:11:59,450 --> 01:12:01,280 Og igen, ny syntaks, ikke en ny idé. 1818 01:12:01,280 --> 01:12:03,740 Det er bare en anden måde at looping, syntaktisk. 1819 01:12:03,740 --> 01:12:04,890 Så hvad betyder dette? 1820 01:12:04,890 --> 01:12:08,000 Gør følgende, mens n er mindre end 1. 1821 01:12:08,000 --> 01:12:09,080 Så hvad vil jeg gøre? 1822 01:12:09,080 --> 01:12:11,390 Jeg forlanger, at du giver mig et positivt heltal. 1823 01:12:11,390 --> 01:12:14,110 Så jeg faktisk forsøge at få et heltal fra brugeren. 1824 01:12:14,110 --> 01:12:16,740 Men i form af den rækkefølge af operationer her, fordi 1825 01:12:16,740 --> 01:12:21,850 så længe betingelse er hernede, jeg derefter vil kontrollere, er n 1826 01:12:21,850 --> 01:12:23,100 mindre end 1? 1827 01:12:23,100 --> 01:12:24,600 Således antage, at brugeren - 1828 01:12:24,600 --> 01:12:26,450 efter at være krævet på denne måde - 1829 01:12:26,450 --> 01:12:29,190 typer i værdien 0. 1830 01:12:29,190 --> 01:12:34,510 Denne betingelse vil være sand eller falsk? 1831 01:12:34,510 --> 01:12:35,820 Nå, det faktisk kommer til at være sandt. 1832 01:12:35,820 --> 01:12:38,700 Idet n er 0, og 0 er mindre end 1. 1833 01:12:38,700 --> 01:12:40,140 Så hvad betyder det indebærer? 1834 01:12:40,140 --> 01:12:41,160 Gør det igen. 1835 01:12:41,160 --> 01:12:41,990 Gør det igen. 1836 01:12:41,990 --> 01:12:42,640 Gør det igen. 1837 01:12:42,640 --> 01:12:46,080 Først når denne betingelse evalueres til FALSK. 1838 01:12:46,080 --> 01:12:47,510 Hvis jeg skriver i 42. 1839 01:12:47,510 --> 01:12:49,690 Nå nej, 42 er ikke mindre end 1. 1840 01:12:49,690 --> 01:12:52,320 Derfor er denne sløjfe sker udførelse. 1841 01:12:52,320 --> 01:12:54,650 Og så på det punkt, vil programmet sige, tak for 1842 01:12:54,650 --> 01:12:57,530 den 42 i dette tilfælde. 1843 01:12:57,530 --> 01:13:00,320 Nu hvor du har denne måde at udtrykke dig selv - 1844 01:13:00,320 --> 01:13:02,360 Vi bør ikke vente på denne til slut. 1845 01:13:02,360 --> 01:13:03,620 Det kommer til at tage noget tid. 1846 01:13:03,620 --> 01:13:04,990 Fortsættes næste gang, måske. 1847 01:13:04,990 --> 01:13:08,050 >> Men nu, du har evnen til at forhåbentlig at forstå et 1848 01:13:08,050 --> 01:13:09,060 bit af geek humor. 1849 01:13:09,060 --> 01:13:11,560 Undskyldninger. 1850 01:13:11,560 --> 01:13:13,620 Dette er ikke repræsentativt for humor i datalogi 1851 01:13:13,620 --> 01:13:14,870 verden, men det er nuttet. 1852 01:13:21,020 --> 01:13:23,890 [Griner] Lad os ende på denne note. 1853 01:13:23,890 --> 01:13:25,750 Og vi vil se dig på mandag. 1854 01:13:25,750 --> 01:13:31,629 [Bifald]