1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] David J. MALAN: Okej, det här är CS50 och det är 2 00:00:09,920 --> 00:00:15,250 slutet av vecka 1, så studera kort i och det totala antalet 3 00:00:15,250 --> 00:00:18,640 klasskamrater som du har i år är 745. 4 00:00:18,640 --> 00:00:20,920 Och vi är så glada att ha så många av er i kursen 5 00:00:20,920 --> 00:00:23,680 denna termin, men även om kursen är så stort, 6 00:00:23,680 --> 00:00:26,090 inse att det är dessa saker som fredag ​​luncher, liksom 7 00:00:26,090 --> 00:00:29,020 kontorstid, 15-personen sektioner och så vidare att 8 00:00:29,020 --> 00:00:30,590 verkligen tänkt att skapa denna mer intim 9 00:00:30,590 --> 00:00:31,140 miljö. 10 00:00:31,140 --> 00:00:34,070 Så även om vi kan samlas en eller två gånger i veckan, här i 11 00:00:34,070 --> 00:00:36,420 Sanders, vet att mycket av din erfarenhet i denna kurs 12 00:00:36,420 --> 00:00:39,330 kommer i hög grad att vara praktisk på sidan av dina klasskamrater 13 00:00:39,330 --> 00:00:40,730 och lärarna. 14 00:00:40,730 --> 00:00:43,960 >> Så här går vi, Fall 2012. 15 00:00:43,960 --> 00:00:47,530 Så minns att förra gången vi slutade på en del av 16 00:00:47,530 --> 00:00:50,460 vaghet, talar om representation siffror. 17 00:00:50,460 --> 00:00:52,950 Och vi tittade på en av de misslyckanden som hände i 18 00:00:52,950 --> 00:00:54,920 verkliga världen, när det kom till missförstånd 19 00:00:54,920 --> 00:00:55,890 hur datorer fungerar. 20 00:00:55,890 --> 00:00:58,590 Nåväl, idag ska vi återkomma en annan av de idéer som 21 00:00:58,590 --> 00:01:01,410 samt fortsätta vår diskussion om CS50-klienten 22 00:01:01,410 --> 00:01:04,090 och C och vad det innebär egentligen att programmera. 23 00:01:04,090 --> 00:01:06,430 Men först, bara ett par virvelvind meddelanden. 24 00:01:06,430 --> 00:01:08,930 >> Avsnitt börjar denna söndag, och den första veckan är alltid en 25 00:01:08,930 --> 00:01:11,030 lite av en snabb start, eftersom vi bara fick i 26 00:01:11,030 --> 00:01:12,620 din sektion former. 27 00:01:12,620 --> 00:01:14,450 Vi gör samma sak, nu med undervisningen stipendiater, nu 28 00:01:14,450 --> 00:01:16,410 att de vet sina scheman, så vi siktar, genom 29 00:01:16,410 --> 00:01:19,380 Lördag morgon att följa upp med dig med din sektion 30 00:01:19,380 --> 00:01:20,760 uppdrag och TF. 31 00:01:20,760 --> 00:01:22,770 Inse att de ska börja nästa dag, söndag 32 00:01:22,770 --> 00:01:24,510 eller måndag eller tisdag. 33 00:01:24,510 --> 00:01:27,730 Och då kommer vi att rymma avsnitt förändras när de uppstår 34 00:01:27,730 --> 00:01:28,690 under de kommande dagarna. 35 00:01:28,690 --> 00:01:31,590 Kontorstid, tiden är, återigen, i kväll, 8 PM till 11, i 36 00:01:31,590 --> 00:01:33,740 Annenberg, liksom i morgon kväll. 37 00:01:33,740 --> 00:01:36,150 Även om problemet apparater är i allmänhet beror på torsdagar 38 00:01:36,150 --> 00:01:39,020 vid middagstid, inser du ha upp till fem sena dagar att spendera, 39 00:01:39,020 --> 00:01:42,430 därmed tillgången på kontorstid på torsdagar om 40 00:01:42,430 --> 00:01:45,930 du kontanter i en av dessa sena dagar och därmed lägga 41 00:01:45,930 --> 00:01:47,070 något på fredag. 42 00:01:47,070 --> 00:01:50,850 Låt mig föreslå att Scratch är bland de roligare, bland 43 00:01:50,850 --> 00:01:52,390 mer låg nyckeln problem uppsättningar. 44 00:01:52,390 --> 00:01:55,160 Och jag skulle hänga på dessa sena dagar, strategiskt, bara 45 00:01:55,160 --> 00:01:57,380 för senare i terminen när livet börjar komma i vägen 46 00:01:57,380 --> 00:01:59,470 med midterms och andra klasser. 47 00:01:59,470 --> 00:02:01,580 Problem Set 1, under tiden, skulle anslås på kursens 48 00:02:01,580 --> 00:02:06,080 webbplats på fredag, vilket kommer att på kursen promenad 49 00:02:06,080 --> 00:02:08,789 genom video, som kommer att filmas vid 2:30 PM på fredag 50 00:02:08,789 --> 00:02:11,890 och sedan publiceras online av nästa dag. 51 00:02:11,890 --> 00:02:13,880 >> Så vi slutade på måndag. 52 00:02:13,880 --> 00:02:15,450 Jag vill - faktiskt en notera här. 53 00:02:15,450 --> 00:02:18,870 Eftersom klasserna - eftersom Sanders inte precis lämpar 54 00:02:18,870 --> 00:02:22,220 sig till casual Q & A och tillbaka fruktansvärt bra, vi är 55 00:02:22,220 --> 00:02:24,030 kommer att prova något lite nytt i år, där 56 00:02:24,030 --> 00:02:26,160 om du inte är bekväm att höja handen eller om du bara 57 00:02:26,160 --> 00:02:28,800 vill inte upp handen i ett rum som detta, 58 00:02:28,800 --> 00:02:30,710 vi kommer att ha några av de pedagogiska stipendiater och CA 59 00:02:30,710 --> 00:02:33,260 bemanning cs50.net/discuss under föreläsningen. 60 00:02:33,260 --> 00:02:35,440 Så om du har en fråga, eftersom jag var helt 61 00:02:35,440 --> 00:02:37,510 oklart om något eller om du är nyfiken på något 62 00:02:37,510 --> 00:02:39,640 ämne, försök lägga den där. 63 00:02:39,640 --> 00:02:42,670 Märka den med en etikett Föreläsning, och vi ska göra vårt bästa 64 00:02:42,670 --> 00:02:45,430 idag och nästa vecka - we'll prova detta - att sätta in den 65 00:02:45,430 --> 00:02:47,990 antingen elektroniskt, på nätet, eller om det känns som om vi ska 66 00:02:47,990 --> 00:02:50,430 verkligen åtgärda det en masse, en av de pedagogiska stipendiater eller 67 00:02:50,430 --> 00:02:52,080 CA kommer att höja sin hand och be 68 00:02:52,080 --> 00:02:53,480 anonymt för din räkning. 69 00:02:53,480 --> 00:02:55,650 Så vi ska ge det ett försök och se hur bra det fungerar. 70 00:02:55,650 --> 00:02:58,540 Men med alla medel, fortsätta att höja händerna som du vill. 71 00:02:58,540 --> 00:03:11,420 >> Så förra gången vi visade att 10% eller en tiondel inte i 72 00:03:11,420 --> 00:03:13,840 Faktum 0,1, som du har lärt dig många år sedan. 73 00:03:13,840 --> 00:03:15,390 Det är i själva verket ett värde som denna. 74 00:03:15,390 --> 00:03:16,970 Men det är inte helt sant, eller hur? 75 00:03:16,970 --> 00:03:19,585 Vi har bara denna begränsning i datorer som innebär att om du 76 00:03:19,585 --> 00:03:22,450 endast har en begränsad mängd minne, RAM eller mer 77 00:03:22,450 --> 00:03:25,220 speciellt bitar, ja, det är bara ett begränsat antal 78 00:03:25,220 --> 00:03:26,980 saker du kan representera. 79 00:03:26,980 --> 00:03:29,780 Till exempel, om vi har siffran noll, och vi vill 80 00:03:29,780 --> 00:03:32,790 representerar i binär, med användning av åtta bitar, där en bit, 81 00:03:32,790 --> 00:03:34,710 igen, en nolla eller en etta, kan vi 82 00:03:34,710 --> 00:03:39,240 representera det som 00000000. 83 00:03:39,240 --> 00:03:41,160 Och det är lite onödigt mångordig. 84 00:03:41,160 --> 00:03:43,700 Precis som i det decimala systemet i den verkliga världen, 85 00:03:43,700 --> 00:03:47,040 allmänhet, om du vill skriva numret 123, vi 86 00:03:47,040 --> 00:03:52,240 människor förmodligen inte skriva 00000123 även om 87 00:03:52,240 --> 00:03:53,940 funktionellt, det är exakt samma nummer. 88 00:03:53,940 --> 00:03:56,580 Vi släpper bara inledande nollor, så att säga. 89 00:03:56,580 --> 00:03:58,270 >> I binär, kan vi göra samma sak. 90 00:03:58,270 --> 00:04:01,440 Binär och noll, noll och binär är bara noll. 91 00:04:01,440 --> 00:04:02,870 Du behöver bara en enda bit. 92 00:04:02,870 --> 00:04:05,020 Men återigen, det vanligaste måttenheten i världen 93 00:04:05,020 --> 00:04:07,820 av datorer är byte, åtta bitar. 94 00:04:07,820 --> 00:04:09,720 Bara för att en bit, ganska värdelös. 95 00:04:09,720 --> 00:04:12,020 Åtta bitar, inte särskilt bra, men åtminstone är det mer 96 00:04:12,020 --> 00:04:14,280 användbar än en enda måttenhet. 97 00:04:14,280 --> 00:04:17,100 Så med åtta bitar, vi representerar vanligtvis binärt. 98 00:04:17,100 --> 00:04:20,459 Så här har vi siffrorna noll, ett, två, och sedan, när 99 00:04:20,459 --> 00:04:24,200 Nate gjorde i vår video i onsdags, kan vi fortsätta 100 00:04:24,200 --> 00:04:25,940 räkna upp till sju, åtta. 101 00:04:25,940 --> 00:04:27,860 Och sedan om vi använder fler och fler bitar, vi 102 00:04:27,860 --> 00:04:29,880 kan räkna upp till oändlighet. 103 00:04:29,880 --> 00:04:32,800 Men om du bara har ett begränsat antal av dessa bitar, som är 104 00:04:32,800 --> 00:04:35,030 fallet i något datasystem, eller missil 105 00:04:35,030 --> 00:04:36,670 systemet, ja, ja du bara har en 106 00:04:36,670 --> 00:04:37,900 ändlig mängd av precision. 107 00:04:37,900 --> 00:04:41,290 Så om du vill representera antalet som 0,1, ja, det 108 00:04:41,290 --> 00:04:43,410 Datorn måste välja och vraka. 109 00:04:43,410 --> 00:04:45,970 Och om den har endast ett begränsat antal siffror den kan 110 00:04:45,970 --> 00:04:50,490 representerar, kan det komma nära 0,1 för dig, men det kan inte 111 00:04:50,490 --> 00:04:53,730 nödvändigtvis ge dig exakt det värde som du vill ha. 112 00:04:53,730 --> 00:04:55,660 Och detta är bara en av de utmaningar som datorer, 113 00:04:55,660 --> 00:04:57,090 under huven, tack och lov. 114 00:04:57,090 --> 00:04:59,110 >> När vi går längre i terminen, dessa lägre nivå 115 00:04:59,110 --> 00:05:02,310 detaljer blir mycket mindre intressant, men säkert 116 00:05:02,310 --> 00:05:05,700 tillämpningen av dessa idéer kan ha några mycket verkliga världen 117 00:05:05,700 --> 00:05:06,760 förgreningar. 118 00:05:06,760 --> 00:05:08,190 Man är lite roligt. 119 00:05:08,190 --> 00:05:12,150 Hur många av er har sett den fantastiska Space filmen Office? 120 00:05:12,150 --> 00:05:13,620 Om du inte har, är din inofficiella 121 00:05:13,620 --> 00:05:14,370 läxor för veckan. 122 00:05:14,370 --> 00:05:16,730 Men i Office Space, stipendiaterna i den filmen tar 123 00:05:16,730 --> 00:05:19,900 Fördelen med just denna idé, men de faktiskt stal 124 00:05:19,900 --> 00:05:21,270 den från en annan film som du kan ha 125 00:05:21,270 --> 00:05:22,760 sett, även år tidigare. 126 00:05:22,760 --> 00:05:24,920 Så låt mig ge er några sekunder av denna trailer från 127 00:05:24,920 --> 00:05:27,470 denna fantastiska film och det är mycket 128 00:05:27,470 --> 00:05:28,340 akademiskt relevant. 129 00:05:28,340 --> 00:05:30,310 >> [SPELAR FILM] 130 00:05:30,310 --> 00:05:32,240 Egentligen jag främjas. 131 00:05:32,240 --> 00:05:33,360 Jag kan programmera ett virus som kommer att slita som 132 00:05:33,360 --> 00:05:34,460 plats utanför big time. 133 00:05:34,460 --> 00:05:35,770 Nå, hur funkar det? 134 00:05:35,770 --> 00:05:37,836 Varje gång det är en bank transaktion där intresset är 135 00:05:37,836 --> 00:05:40,154 beräknade, det finns tusentals per dag, slutar datorn upp 136 00:05:40,154 --> 00:05:41,040 med dessa delar av en cent. 137 00:05:41,040 --> 00:05:43,050 Men jag tänker inte göra något olagligt. 138 00:05:43,050 --> 00:05:46,730 Olagligt? Samir, detta är Amerika. 139 00:05:46,730 --> 00:05:48,010 Du måste svär. 140 00:05:48,010 --> 00:05:51,870 Om ingen vet om detta men vi, okej? Inga familjemedlemmar, inga 141 00:05:51,870 --> 00:05:52,490 flickvänner, ingen. 142 00:05:52,490 --> 00:05:53,882 [OHÖRBAR]. 143 00:05:53,882 --> 00:05:57,594 Oroa dig inte, mannen, jag kommer inte berätta för någon heller. 144 00:05:57,594 --> 00:05:59,680 [MOVIE SLUTAR] 145 00:05:59,680 --> 00:06:01,900 >> Okej, så kanske jag hittade den här filmen bättre än de flesta 146 00:06:01,900 --> 00:06:05,530 människor här, men i alla fall, det virus som de 147 00:06:05,530 --> 00:06:06,400 försöker skapa - 148 00:06:06,400 --> 00:06:08,410 och i filmer, när som helst de skulle ringa något virus, 149 00:06:08,410 --> 00:06:09,770 Det är i allmänhet inte egentligen ett virus. 150 00:06:09,770 --> 00:06:11,600 Det är bara ett program som någon skrev att göra något. 151 00:06:11,600 --> 00:06:13,800 Och i detta fall, killarna försökte skriva ett program 152 00:06:13,800 --> 00:06:16,610 som tog fördel av deras företag som heter Innotech s 153 00:06:16,610 --> 00:06:19,740 datasystem, varigenom datorer, också, även när det 154 00:06:19,740 --> 00:06:21,350 kommer till pengar, kan inte nödvändigtvis 155 00:06:21,350 --> 00:06:23,490 representerar pengar exakt. 156 00:06:23,490 --> 00:06:27,630 Så även om du kanske har $ 0,10 på ditt bankkonto, 157 00:06:27,630 --> 00:06:31,060 0,10, ja, kanske datorn tror faktiskt att du har 158 00:06:31,060 --> 00:06:33,560 detta många cent i ditt bankkonto. 159 00:06:33,560 --> 00:06:35,750 Och så vad dessa killar hade strävar efter att göra - och de 160 00:06:35,750 --> 00:06:38,240 stal idén, visar det sig från Superman III, där 161 00:06:38,240 --> 00:06:41,210 Richard Pryor gjorde samma sak - de var i huvudsak 162 00:06:41,210 --> 00:06:44,880 skriva program som strävar efter att ta alla efterföljande 163 00:06:44,880 --> 00:06:46,930 siffror, alla de små, små, små fraktioner av 164 00:06:46,930 --> 00:06:50,160 pennies och suga dem utanför så att människorna bara 165 00:06:50,160 --> 00:06:52,620 tanke, åh, det är bara $ 0,10 där, men alla dessa 166 00:06:52,620 --> 00:06:54,410 avslutande tal lägger så småningom upp. 167 00:06:54,410 --> 00:06:57,490 Så en underbar idé och det slog slint uppsluppen i det 168 00:06:57,490 --> 00:06:58,250 viss film. 169 00:06:58,250 --> 00:07:01,800 >> Men i den verkliga världen, också, det finns mycket mer om 170 00:07:01,800 --> 00:07:03,190 konsekvenserna av dessa typer av saker. 171 00:07:03,190 --> 00:07:05,450 Och en av anledningarna att dyka in i fältet av dator 172 00:07:05,450 --> 00:07:07,620 vetenskap är, återigen, dess tillämpbarhet inte till 173 00:07:07,620 --> 00:07:09,740 teknikvetenskap ensam, men bara för att 174 00:07:09,740 --> 00:07:10,650 andra områden också. 175 00:07:10,650 --> 00:07:14,760 Så detta är en mindre lättsam titt på vad som kan gå fel, men 176 00:07:14,760 --> 00:07:17,630 Det är också ganska öppna ögonen, tror jag, när det gäller 177 00:07:17,630 --> 00:07:20,760 förstå exakt hur allestädes närvarande teknik som 178 00:07:20,760 --> 00:07:22,870 datorer och programmering eller dessa dagar, 179 00:07:22,870 --> 00:07:23,930 i form av programvara. 180 00:07:23,930 --> 00:07:26,500 Så detta nästa klipp är bara om sex minuter, fortsätter 181 00:07:26,500 --> 00:07:30,320 där vi slutade förra gången, men tillåter oss att titta lite 182 00:07:30,320 --> 00:07:33,370 mer ingående vid ett sådant av dessa frågor. 183 00:07:33,370 --> 00:07:35,270 Låt mig gå vidare till där vi slutade, 184 00:07:35,270 --> 00:07:37,780 som var här. 185 00:07:37,780 --> 00:07:41,580 Och vi har en del två av två, i ca sex minuter här. 186 00:07:41,580 --> 00:07:41,980 >> [PLAY MOVIE] 187 00:07:41,980 --> 00:07:45,430 Plågat modern raket-teknik. 188 00:07:45,430 --> 00:07:49,280 Under 1991 med starten av det första Gulfkriget, Patriot 189 00:07:49,280 --> 00:07:51,350 missil upplevde en liknande typ av 190 00:07:51,350 --> 00:07:52,645 nummer konvertering problem. 191 00:07:52,645 --> 00:07:57,460 Och som ett resultat, var 20 personer, 20 amerikanska soldater, dödades 192 00:07:57,460 --> 00:08:01,130 och cirka 100 andra skadades när Patriot, som skulle 193 00:08:01,130 --> 00:08:03,400 för att skydda mot inkommande Scuds, 194 00:08:03,400 --> 00:08:06,020 misslyckades att avfyra en missil. 195 00:08:06,020 --> 00:08:09,350 >> När Irak invaderade Kuwait och USA lanserade en öken 196 00:08:09,350 --> 00:08:13,530 Storm i början av 1991, var Patriot missiler batterier 197 00:08:13,530 --> 00:08:16,970 användas för att skydda Saudiarabien och Israel från irakiska 198 00:08:16,970 --> 00:08:19,810 Scud missiler. 199 00:08:19,810 --> 00:08:23,740 Patriot är en amerikansk medium-range surface-to-air-systemet, 200 00:08:23,740 --> 00:08:26,370 tillverkas av Raytheon företaget. 201 00:08:26,370 --> 00:08:30,860 Storleken på Patriot jaktplan själv, det handlar om 202 00:08:30,860 --> 00:08:35,650 ungefär 20 meter lång och den väger omkring 2.000 pounds. 203 00:08:35,650 --> 00:08:38,809 Och det bär en stridsspets med om - jag tror att det är ungefär 204 00:08:38,809 --> 00:08:40,169 150 pounds. 205 00:08:40,169 --> 00:08:45,820 Och stridsspetsen själv är en högexplosiv som har 206 00:08:45,820 --> 00:08:48,120 fragment runt den. 207 00:08:48,120 --> 00:08:51,870 Hölje stridsspetsen är konstruerad för att agera som hagel. 208 00:08:51,870 --> 00:08:54,920 Missilerna förs fyra per behållare och 209 00:08:54,920 --> 00:08:57,850 transporteras av en påhängsvagn. 210 00:08:57,850 --> 00:09:02,940 >> Patriot antimissilsystem går tillbaka åtminstone till 211 00:09:02,940 --> 00:09:05,530 20 år nu. 212 00:09:05,530 --> 00:09:09,150 Det var ursprungligen utformad som en luftförsvar missil till 213 00:09:09,150 --> 00:09:12,920 skjuta ner fientliga flygplan, i det första Gulfkriget. 214 00:09:12,920 --> 00:09:17,700 När det kriget kom, ville armén för att använda den för att skjuta 215 00:09:17,700 --> 00:09:19,880 ner Scuds, inte flygplan. 216 00:09:19,880 --> 00:09:24,860 Air irakiska Force var inte så mycket av ett problem, men armén 217 00:09:24,860 --> 00:09:27,260 var orolig Scuds. 218 00:09:27,260 --> 00:09:30,810 Och så de försökte uppgradera Patriot. 219 00:09:30,810 --> 00:09:33,770 Fånga en fiende missil färdas i Mach 5 skulle 220 00:09:33,770 --> 00:09:35,790 att vara utmanande nog. 221 00:09:35,790 --> 00:09:39,460 Men när Patriot var rusade i bruk, armén 222 00:09:39,460 --> 00:09:43,730 var inte medveten om en irakisk förändring som gjorde sin 223 00:09:43,730 --> 00:09:46,510 Scuds nästan omöjligt att slå. 224 00:09:46,510 --> 00:09:50,040 >> Vad som hände är Scuds som var 225 00:09:50,040 --> 00:09:51,360 kommer i var instabila. 226 00:09:51,360 --> 00:09:52,266 De precession. 227 00:09:52,266 --> 00:09:56,300 Anledningen till detta var irakierna, för att få 600 228 00:09:56,300 --> 00:10:00,650 kilometer ur ett 300 kilometer sortiment missil tog 229 00:10:00,650 --> 00:10:02,423 vikt av den främre stridsspetsen och 230 00:10:02,423 --> 00:10:03,990 gjorde stridsspetsen tändaren. 231 00:10:03,990 --> 00:10:08,700 Så nu Patriot försöker komma på Scud, och de flesta av 232 00:10:08,700 --> 00:10:11,192 tiden, den överväldigande majoriteten av tiden, skulle det 233 00:10:11,192 --> 00:10:13,450 bara flyga av Scud. 234 00:10:13,450 --> 00:10:16,300 När Patriot systemansvariga insåg Patriot 235 00:10:16,300 --> 00:10:20,160 missade sitt mål, detonerade de Patriot stridsspets. 236 00:10:20,160 --> 00:10:22,760 För att undvika eventuella förluster, var det tillåtet 237 00:10:22,760 --> 00:10:25,100 att falla till marken. 238 00:10:25,100 --> 00:10:29,400 Det var vad de flesta såg som stora eldklot på himlen, 239 00:10:29,400 --> 00:10:34,930 och missförstås som avlyssningar av Scud stridsspetsar. 240 00:10:34,930 --> 00:10:37,490 >> Även på natthimlen, verkade Patriots vara 241 00:10:37,490 --> 00:10:41,570 framgångsrikt förstörde Scuds på Dhahran, kunde det inte finnas någon 242 00:10:41,570 --> 00:10:43,730 misstag om dess prestanda. 243 00:10:43,730 --> 00:10:46,370 Där förlorade Patriots radarsystem reda på ett 244 00:10:46,370 --> 00:10:50,090 inkommande Scud och aldrig lanserat grund 245 00:10:50,090 --> 00:10:51,340 till en programvara fel. 246 00:10:54,030 --> 00:10:57,050 Det var israelerna som först upptäckte att ju längre 247 00:10:57,050 --> 00:11:02,000 systemet var på, desto större avvikelse tiden blev, 248 00:11:02,000 --> 00:11:05,530 på grund av en klocka inbäddad i systemets dator. 249 00:11:05,530 --> 00:11:09,060 Om två veckor före tragedin i Dhahran, den 250 00:11:09,060 --> 00:11:11,730 Israelerna rapporteras till Försvarsdepartementet att 251 00:11:11,730 --> 00:11:13,250 systemet förlorar tid. 252 00:11:13,250 --> 00:11:15,610 Efter ca åtta timmars drift, märkte de att 253 00:11:15,610 --> 00:11:18,330 Systemet blev märkbart mindre exakt. 254 00:11:18,330 --> 00:11:20,910 Försvarsdepartementet svarade med att berätta allt 255 00:11:20,910 --> 00:11:23,710 Patriot batterierna inte lämna de system 256 00:11:23,710 --> 00:11:25,450 under en lång tid. 257 00:11:25,450 --> 00:11:28,010 De sa aldrig vad en lång tid var - 8 timmar, 10 258 00:11:28,010 --> 00:11:29,690 timmar, 1.000 timmar. 259 00:11:29,690 --> 00:11:31,940 Ingen visste. 260 00:11:31,940 --> 00:11:35,020 >> The Patriot batteri stationerad vid barackerna vid Dhahran 261 00:11:35,020 --> 00:11:39,030 och dess bristfälliga interna klocka hade varit på över 100 timmar på 262 00:11:39,030 --> 00:11:42,240 natten den 25 februari. 263 00:11:42,240 --> 00:11:46,580 Det spårade tid till en noggrannhet av ungefär 1/10 av en sekund. 264 00:11:46,580 --> 00:11:48,830 Nu en tiondel av den andra är ett intressant nummer eftersom 265 00:11:48,830 --> 00:11:52,660 Det kan inte uttryckas i binär, exakt, vilket betyder 266 00:11:52,660 --> 00:11:54,940 Det kan inte uttryckas exakt i alla 267 00:11:54,940 --> 00:11:57,330 modern digital dator. 268 00:11:57,330 --> 00:11:59,130 Det är svårt att tro. 269 00:11:59,130 --> 00:12:01,720 Men använda detta som ett exempel. 270 00:12:01,720 --> 00:12:04,090 >> Låt oss ta numret tredjedel. 271 00:12:04,090 --> 00:12:07,950 En tredjedel kan inte uttryckas i decimaler, exakt. 272 00:12:07,950 --> 00:12:12,710 En tredjedel är 0,333 pågår för oändligheten. 273 00:12:12,710 --> 00:12:17,050 Det finns inget sätt att göra det med absolut precision i decimal. 274 00:12:17,050 --> 00:12:19,340 Det är precis samma typ av problem som hände i 275 00:12:19,340 --> 00:12:20,190 Patriot. 276 00:12:20,190 --> 00:12:24,680 Ju längre systemet sprang, desto värre när felet blev. 277 00:12:24,680 --> 00:12:28,640 Efter 100 timmars drift, var felet i tid endast 278 00:12:28,640 --> 00:12:29,870 ungefär en tredjedel av en sekund. 279 00:12:29,870 --> 00:12:34,790 Men när det gäller att rikta en missil som reser på Mach 5, 280 00:12:34,790 --> 00:12:39,140 Det resulterade i en tracking error över 600 meter. 281 00:12:39,140 --> 00:12:42,510 Det skulle vara ett allvarligt fel för soldaterna i Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> Vad som hände är en Scud lansering upptäcktes av tidig varning 283 00:12:48,680 --> 00:12:52,440 satelliter och de visste att Scud kom i deras 284 00:12:52,440 --> 00:12:53,350 allmänna riktning. 285 00:12:53,350 --> 00:12:55,470 De visste inte var den var på väg. 286 00:12:55,470 --> 00:12:58,210 Det var nu upp till radarn del av Patriot 287 00:12:58,210 --> 00:13:01,920 system försvara Dhahran, att hitta och hålla reda på 288 00:13:01,920 --> 00:13:03,700 inkommande fiende missil. 289 00:13:03,700 --> 00:13:05,390 Radarn var mycket smart. 290 00:13:05,390 --> 00:13:07,570 Du skulle faktiskt spåra positionen för Scud och sedan 291 00:13:07,570 --> 00:13:10,340 förutsäga var det förmodligen skulle bli nästa gång 292 00:13:10,340 --> 00:13:12,040 radarn sände en puls ut. 293 00:13:12,040 --> 00:13:13,730 Som kallades området grinden. 294 00:13:13,730 --> 00:13:18,820 Sedan, när Patriot beslutar tillräckligt med tid har gått för att gå 295 00:13:18,820 --> 00:13:22,600 tillbaka och kontrollera nästa plats för denna detekterade 296 00:13:22,600 --> 00:13:24,190 objekt, går den tillbaka. 297 00:13:24,190 --> 00:13:27,940 Så när det gick tillbaka till fel ställe, ser det då inte 298 00:13:27,940 --> 00:13:31,000 objekt och beslutar att det inte fanns något föremål. 299 00:13:31,000 --> 00:13:34,370 Det var en falsk detektering och sjunker banan. 300 00:13:34,370 --> 00:13:37,630 >> Den inkommande Scud försvann från radarskärmen. 301 00:13:37,630 --> 00:13:41,300 Och sekunder senare smällde det till barackerna. Den Scud 302 00:13:41,300 --> 00:13:44,730 dödade 28 och var den sista sparken under 303 00:13:44,730 --> 00:13:46,450 det första Gulfkriget. 304 00:13:46,450 --> 00:13:50,570 Tragiskt kom den uppdaterade programvaran på Dhahran 305 00:13:50,570 --> 00:13:52,060 Följande dag. 306 00:13:52,060 --> 00:13:56,210 Och mjukvaran fel hade fastställts, stänga ett kapitel i 307 00:13:56,210 --> 00:13:58,370 den oroliga historia Patriot missiler. 308 00:14:01,790 --> 00:14:04,990 Patriot är egentligen en förkortning för "infasade Spårning 309 00:14:04,990 --> 00:14:08,516 Skärningspunkt Target. " 310 00:14:08,516 --> 00:14:13,390 >> Okej, så en mycket mer sorgsen utfallet av inte riktigt 311 00:14:13,390 --> 00:14:14,430 förstå den här världen. 312 00:14:14,430 --> 00:14:18,180 Och takeaway, verkligen, från filmen är att lösningen 313 00:14:18,180 --> 00:14:20,790 Det var starta om missilförsvar 314 00:14:20,790 --> 00:14:21,770 varje gång på ett tag. 315 00:14:21,770 --> 00:14:24,280 Och så igen, en av syftena med denna kurs, säkert 316 00:14:24,280 --> 00:14:26,900 på en mer ödmjuk skala än dessa program, är att 317 00:14:26,900 --> 00:14:30,710 verkligen öppna allas ögon för exakt hur du går om 318 00:14:30,710 --> 00:14:34,380 gör maskiner gör vad du vill att de ska göra och hur du går 319 00:14:34,380 --> 00:14:37,180 om att göra det på rätt sätt, medan på vägen gör det 320 00:14:37,180 --> 00:14:38,810 bra, elegant, och så vidare. 321 00:14:38,810 --> 00:14:41,680 Och så idag, låt oss dyka in lite mer av detta, men 322 00:14:41,680 --> 00:14:44,210 så att vi inte går för fort, särskilt för de mindre 323 00:14:44,210 --> 00:14:46,590 bekväm, men också så att vi kan behålla intresset för 324 00:14:46,590 --> 00:14:49,390 de mer bekväm, låt oss bara snabbt börja med lite 325 00:14:49,390 --> 00:14:50,970 av resumé av några av dessa idéer. 326 00:14:50,970 --> 00:14:53,710 Och återigen, be bort, både personligen eller online, om du har 327 00:14:53,710 --> 00:14:56,320 frågor så att vi kan hålla alla på samma sida. 328 00:14:56,320 --> 00:14:58,820 >> Så CS50 Appliance, snabb steg tillbaka, är 329 00:14:58,820 --> 00:15:02,360 vad med dina egna ord? 330 00:15:02,360 --> 00:15:06,454 Det är OK om du har ingen aning om vad dessa ord kan vara ännu. 331 00:15:06,454 --> 00:15:07,830 [OHÖRBAR] 332 00:15:07,830 --> 00:15:10,950 Okej, så en universell gränssnitt för - 333 00:15:10,950 --> 00:15:11,900 att vi alla kan dela. 334 00:15:11,900 --> 00:15:12,470 Absolut. 335 00:15:12,470 --> 00:15:14,840 Så vi kunde till exempel säga att du ska gå till någon 336 00:15:14,840 --> 00:15:16,910 hemsida, ladda ner denna programvara för Mac OS. 337 00:15:16,910 --> 00:15:19,140 Ladda ner denna programvara för Windows, konfigurera i 338 00:15:19,140 --> 00:15:20,100 hit och dit. 339 00:15:20,100 --> 00:15:22,370 Men verkligheten är vi stöter otaliga tekniska 340 00:15:22,370 --> 00:15:23,200 supportärenden. 341 00:15:23,200 --> 00:15:26,630 Och även dessa dagar, mycket av vad som görs serversidan, 342 00:15:26,630 --> 00:15:28,490 i en värld av datorer, speciellt när det gäller 343 00:15:28,490 --> 00:15:31,460 webbutveckling och webbaserade applikationer, faktiskt 344 00:15:31,460 --> 00:15:35,110 ganska ofta gjort på Unix eller Linux-datorer, i motsats till 345 00:15:35,110 --> 00:15:36,800 Mac eller Windows-datorer. 346 00:15:36,800 --> 00:15:39,240 >> Så bland upsides alltså att använda denna sak som kallas 347 00:15:39,240 --> 00:15:41,500 CS50 Appliance är vi alla kommer att ha samma miljö. 348 00:15:41,500 --> 00:15:43,670 Så alla är på samma sida oavsett vilken maskinvara du 349 00:15:43,670 --> 00:15:46,650 kom till campus med men också kommer att syssla med just 350 00:15:46,650 --> 00:15:48,230 samma miljö som du kommer att använda mot 351 00:15:48,230 --> 00:15:51,080 termin slut samt för webbutveckling samt i 352 00:15:51,080 --> 00:15:53,580 framtid för verkliga applikationer därav. 353 00:15:53,580 --> 00:15:56,350 Så mer konkret, är CS50 Appliance en fri bit 354 00:15:56,350 --> 00:15:59,400 programvara som gör att du kan köra ett annat operativsystem, 355 00:15:59,400 --> 00:16:02,670 Linux, i det här fallet, på din egen dator, i ett fönster. 356 00:16:02,670 --> 00:16:04,750 Nu kan du inte bara ladda ner apparaten. 357 00:16:04,750 --> 00:16:08,170 Du behöver ett program som man kan spela eller köra maskinen. 358 00:16:08,170 --> 00:16:11,220 Och det mjukvara är allmänt känd som en 359 00:16:11,220 --> 00:16:11,520 hypervisor. 360 00:16:11,520 --> 00:16:14,050 Hypervisorer kommer i form av produkter som VMware, 361 00:16:14,050 --> 00:16:15,820 Virtual Box, Parallels. 362 00:16:15,820 --> 00:16:18,390 Alla typer av företag gör programvara, både fria och 363 00:16:18,390 --> 00:16:19,310 kommersiell, lika. 364 00:16:19,310 --> 00:16:21,480 Vad du ser i problembild 1 är instruktioner om hur man 365 00:16:21,480 --> 00:16:23,440 få fri programvara som man kan 366 00:16:23,440 --> 00:16:25,000 kör CS50 Appliance. 367 00:16:25,000 --> 00:16:28,060 Och när du gör får du, i ett fönster på din Mac eller PC, 368 00:16:28,060 --> 00:16:30,710 en skrivbordsmiljö som ser ganska så här, där 369 00:16:30,710 --> 00:16:33,100 den har en Start-menyn-liknande sak i 370 00:16:33,100 --> 00:16:34,510 nedre vänstra hörnet. 371 00:16:34,510 --> 00:16:38,030 Den har en hemmapp eller hemkatalog i det övre vänstra 372 00:16:38,030 --> 00:16:40,280 där, en papperskorg, och så vidare. 373 00:16:40,280 --> 00:16:43,450 Så vi ska retas isär de nödvändiga detaljer som vi går. 374 00:16:43,450 --> 00:16:46,430 >> Men nu ska vi börja att dyka in C. 375 00:16:46,430 --> 00:16:49,200 Så C är denna programmeringsspråk, likadana i andemening som 376 00:16:49,200 --> 00:16:52,390 Scratch, men långt mindre grafiskt, men ironiskt nog, långt 377 00:16:52,390 --> 00:16:54,730 mer kraftfull när du får smart med det. 378 00:16:54,730 --> 00:16:58,970 Så i C, skriver vi program genom att skriva källkod, som är 379 00:16:58,970 --> 00:17:01,640 denna engelska-liknande syntax, liknande de strumpor 380 00:17:01,640 --> 00:17:05,609 demonstration som vi gjorde förra gången som tillåter dig att 381 00:17:05,609 --> 00:17:07,910 uttrycka dig ganska exakt, om 382 00:17:07,910 --> 00:17:09,760 arcanely, till datorn. 383 00:17:09,760 --> 00:17:11,960 >> Så vilken typ av produkt programvara behöver du egentligen 384 00:17:11,960 --> 00:17:15,520 att skriva program på ett språk som C, baserat på vår 385 00:17:15,520 --> 00:17:17,492 samtal på måndag? 386 00:17:17,492 --> 00:17:19,650 [OHÖRBAR] 387 00:17:19,650 --> 00:17:21,079 OK, du behöver bara en texteditor. 388 00:17:21,079 --> 00:17:22,890 Du behöver inte någon särskild programvara 389 00:17:22,890 --> 00:17:24,460 sig att skriva program. 390 00:17:24,460 --> 00:17:27,220 Du behöver bara en texteditor som Anteckningar i Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit på Mac, eller något som kallas gedit, i en värld av 392 00:17:30,450 --> 00:17:32,020 Linux, som vi kommer att använda här. 393 00:17:32,020 --> 00:17:33,750 Och det är det, för att skriva program. 394 00:17:33,750 --> 00:17:35,480 >> Men skriver är bara halva ekvationen. 395 00:17:35,480 --> 00:17:36,630 Du behöver sedan köra dem. 396 00:17:36,630 --> 00:17:38,320 Men för att köra program - 397 00:17:38,320 --> 00:17:39,600 Du kan inte köra källkod. 398 00:17:39,600 --> 00:17:41,500 Du har istället att göra vad det först? 399 00:17:41,500 --> 00:17:41,900 Ja. 400 00:17:41,900 --> 00:17:43,200 David J. MALAN: Du behöver 401 00:17:43,200 --> 00:17:44,130 kompilera det. 402 00:17:44,130 --> 00:17:49,010 Och någon annan, kompilera källkoden innebär - 403 00:17:49,010 --> 00:17:50,260 [OHÖRBAR] 404 00:17:52,300 --> 00:17:52,700 David J. MALAN: Exakt. 405 00:17:52,700 --> 00:17:54,430 Översätta det till nollor och ettor. 406 00:17:54,430 --> 00:17:57,150 Eftersom vi alla, i dessa dagar, har datorer som har processorer, 407 00:17:57,150 --> 00:18:00,350 nästan alla är gjorda av ett företag som heter Intel, och 408 00:18:00,350 --> 00:18:03,320 Intel Inside, innebär att det är det här hjärnan insidan av din 409 00:18:03,320 --> 00:18:04,990 dator, som kallas CPU. 410 00:18:04,990 --> 00:18:07,570 Och en av de saker som att hjärnan gör är, det vet 411 00:18:07,570 --> 00:18:10,390 hur man ska förstå mönster av ettor och nollor. 412 00:18:10,390 --> 00:18:13,240 Den vet vad mönstret av bitar representerar Dessutom, vad 413 00:18:13,240 --> 00:18:15,500 mönster representerar subtraktioner, vilket mönster av 414 00:18:15,500 --> 00:18:18,890 bitar representerar skriva och skapa ett hörbart ljud. 415 00:18:18,890 --> 00:18:22,450 >> Så kort sagt, CPU, tillsammans med operativsystemet, 416 00:18:22,450 --> 00:18:25,230 vilket är en mjukvara som körs på toppen av processorn, 417 00:18:25,230 --> 00:18:26,050 så att säga. 418 00:18:26,050 --> 00:18:29,850 Tillsammans dessa två stycken vet hur du kör program som 419 00:18:29,850 --> 00:18:31,070 vi människor skriver. 420 00:18:31,070 --> 00:18:34,040 >> Så om jag går in i CS50 Appliance här, jag måste öppna 421 00:18:34,040 --> 00:18:35,660 upp en textredigerare och jag kan komma åt denna 422 00:18:35,660 --> 00:18:36,560 i ett par olika sätt. 423 00:18:36,560 --> 00:18:39,060 Jag kan antingen gå till Meny, programmering, 424 00:18:39,060 --> 00:18:40,230 och då kan jag välja - 425 00:18:40,230 --> 00:18:40,810 Nix, inte den menyn. 426 00:18:40,810 --> 00:18:43,860 Jag kan gå till Tillbehör / gedit här för att öppna 427 00:18:43,860 --> 00:18:45,090 min lilla textredigerare. 428 00:18:45,090 --> 00:18:48,030 Eller enklare, kan jag klicka på den här lilla ikonen längst ner 429 00:18:48,030 --> 00:18:48,970 vänstra hörnet. 430 00:18:48,970 --> 00:18:50,430 Och nu får jag den här miljön här. 431 00:18:50,430 --> 00:18:52,590 Det är ganska påminner om en enkel textredigerare, med bara 432 00:18:52,590 --> 00:18:53,820 en eller två skillnader. 433 00:18:53,820 --> 00:18:56,420 I det övre, där markören blinkar nu, det är där 434 00:18:56,420 --> 00:18:57,900 Jag kan börja skriva min kod. 435 00:18:57,900 --> 00:19:00,415 I botten är denna sak kallad terminalfönstret. 436 00:19:00,415 --> 00:19:03,400 Och vilka typer av saker kan jag göra i denna 437 00:19:03,400 --> 00:19:04,960 så kallade terminalfönster? 438 00:19:04,960 --> 00:19:06,680 [OHÖRBAR] 439 00:19:06,680 --> 00:19:07,890 >> Okej, så jag ska köra kommandon. 440 00:19:07,890 --> 00:19:10,300 Och några av de kommandon som vi sprang på måndagen var lite 441 00:19:10,300 --> 00:19:15,070 kryptiska i början, men ls för listan, cd för förändring katalog, 442 00:19:15,070 --> 00:19:16,540 rm, för bort. 443 00:19:16,540 --> 00:19:19,680 Så det är typ av en old-school sätt att navigera din 444 00:19:19,680 --> 00:19:22,310 dator, med bara tangentbordet och textuella kommandon, 445 00:19:22,310 --> 00:19:24,130 och inte, i allmänhet, med användning av en mus. 446 00:19:24,130 --> 00:19:25,960 Men vi får se, snart ger detta faktiskt oss en 447 00:19:25,960 --> 00:19:28,520 lite mer makt och lite mer precision med vilken 448 00:19:28,520 --> 00:19:29,600 uttrycka oss. 449 00:19:29,600 --> 00:19:31,330 Och sedan över här till vänster, vi ska bara se, 450 00:19:31,330 --> 00:19:34,360 som vi börjar skriva programvara, en liten sammanfattning av 451 00:19:34,360 --> 00:19:36,350 program som vi har skrivit uppe till vänster. 452 00:19:36,350 --> 00:19:38,360 Men vi får se det igen inom kort. 453 00:19:38,360 --> 00:19:40,050 >> Så låt oss göra något ganska enkelt här. 454 00:19:40,050 --> 00:19:43,440 Låt mig först gå vidare och gå till File, Save, och jag är bara 455 00:19:43,440 --> 00:19:45,970 kommer att klicka på jharvard här över på vänster och 456 00:19:45,970 --> 00:19:48,930 jharvard är återigen namnet för mitt hem mapp, min 457 00:19:48,930 --> 00:19:52,110 personliga filer, mig, nu är John Harvard, som ni alla 458 00:19:52,110 --> 00:19:54,230 snart John Harvard i denna miljö. 459 00:19:54,230 --> 00:19:57,360 Han har denna hemkatalog, Mina dokument och så vidare, 460 00:19:57,360 --> 00:19:58,900 att jag vill spara, nu den här filen i. 461 00:19:58,900 --> 00:20:01,520 Så jag kommer att kalla det hej.c. Sen ska jag gå 462 00:20:01,520 --> 00:20:05,770 framåt och klicka på Spara, och nu vad jag har här är en flik 463 00:20:05,770 --> 00:20:09,440 kallas hej.c, så mycket som en annan typ av editor. 464 00:20:09,440 --> 00:20:11,760 >> Så nu låt mig gå vidare och börja skriva ett program. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 Och då jag bara gjorde förra gången, printf, för utskrift formaterad, 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ästan komplett. 470 00:20:25,630 --> 00:20:27,130 Men jag saknar ett par detaljer. 471 00:20:27,130 --> 00:20:30,210 Vad saknas i detta program som jag verkligen behöver för 472 00:20:30,210 --> 00:20:31,890 det att faktiskt kompilera? 473 00:20:31,890 --> 00:20:32,130 Ja. 474 00:20:32,130 --> 00:20:33,980 [OHÖRBAR]? 475 00:20:33,980 --> 00:20:35,770 >> David J. MALAN: Ja, så jag måste inkludera den standard 476 00:20:35,770 --> 00:20:36,700 I / O-bibliotek. 477 00:20:36,700 --> 00:20:39,470 Så detta måste gå över huvud, så jag ska bara 478 00:20:39,470 --> 00:20:40,790 göra en del utrymme för det där. 479 00:20:40,790 --> 00:20:44,420 Och jag ska göra # include . 480 00:20:44,420 --> 00:20:46,570 Och märker de vinklade fästen där. 481 00:20:46,570 --> 00:20:49,410 Och som en sidoreplik är gedit lite användarvänlig, om 482 00:20:49,410 --> 00:20:52,420 ibland lite förvirrande, eftersom den försöker att hjälpa din 483 00:20:52,420 --> 00:20:54,770 ögon ser vad linjer med vad. 484 00:20:54,770 --> 00:20:57,760 Så det faktum att min markör är intill denna vinklade 485 00:20:57,760 --> 00:21:00,600 fäste, märker hur det belyser andra vinklade 486 00:21:00,600 --> 00:21:01,920 konsol plus här. 487 00:21:01,920 --> 00:21:03,770 Och det är bara att dra min uppmärksamhet på det faktum att jag 488 00:21:03,770 --> 00:21:04,460 har symmetri. 489 00:21:04,460 --> 00:21:07,010 Och symmetri i programmering är i allmänhet en bra sak. 490 00:21:07,010 --> 00:21:10,270 Likaså om jag flyttar min markören till slutet, märker hur de 491 00:21:10,270 --> 00:21:13,630 klammerparenteser linje upp för att visa att, ja, jag har en öppen en 492 00:21:13,630 --> 00:21:15,160 och en sluten en, så att säga. 493 00:21:15,160 --> 00:21:16,640 >> Okej, jag kan göra en annan sak. 494 00:21:16,640 --> 00:21:20,090 Det är inte absolut nödvändigt, men god praxis, för att säga 495 00:21:20,090 --> 00:21:21,250 tillbaka 0. 496 00:21:21,250 --> 00:21:24,140 Och retur 0 gör vad för oss här? 497 00:21:24,140 --> 00:21:25,584 Eller betyder det? 498 00:21:25,584 --> 00:21:27,480 [OHÖRBAR] 499 00:21:27,480 --> 00:21:28,300 David J. MALAN: Men ingenting är fel. 500 00:21:28,300 --> 00:21:30,280 Och ärligt talat är det svårt för mycket att gå fel i en 501 00:21:30,280 --> 00:21:31,250 programmera denna korta. 502 00:21:31,250 --> 00:21:33,930 Så jag bara vara super tydlig att allt är bra. 503 00:21:33,930 --> 00:21:36,740 Jag, människan, när jag kör det här programmet, kommer förmodligen aldrig 504 00:21:36,740 --> 00:21:38,150 se att 0. 505 00:21:38,150 --> 00:21:41,070 Generellt är dessa siffror att vara tillbaka från huvud 506 00:21:41,070 --> 00:21:43,540 bara uppfostra sina huvuden till människor när 507 00:21:43,540 --> 00:21:44,360 något går fel. 508 00:21:44,360 --> 00:21:46,640 Och du får en liten pop-up säger systemfel, ett, 509 00:21:46,640 --> 00:21:48,760 två, tre, eller vad numret var att 510 00:21:48,760 --> 00:21:50,100 faktiskt tillbaka. 511 00:21:50,100 --> 00:21:52,870 Så allt annat fel? 512 00:21:52,870 --> 00:21:55,300 [OHÖRBAR] 513 00:21:55,300 --> 00:21:58,100 >> David J. MALAN: Så det här är inte så mycket en funktionell misstag 514 00:21:58,100 --> 00:21:59,240 men en estetisk ett. 515 00:21:59,240 --> 00:22:02,340 Jag borde nog sätta i en radmatningstecken där på 516 00:22:02,340 --> 00:22:05,240 i slutet av den här strängen så att vi går faktiskt markören till 517 00:22:05,240 --> 00:22:08,340 nästa rad, och programmet ser bara lite snyggare. 518 00:22:08,340 --> 00:22:10,340 >> Så nu låt mig gå ner till min terminalfönster 519 00:22:10,340 --> 00:22:11,490 och zooma igen 520 00:22:11,490 --> 00:22:13,390 Och denna sak här, det kallas prompten. 521 00:22:13,390 --> 00:22:16,760 Det är bara påminna mig vem jag är, jharvard @ apparat, där 522 00:22:16,760 --> 00:22:18,850 apparaten är namnet på den dator jag är på. 523 00:22:18,850 --> 00:22:22,380 Inom parentes är tilde den squiggle symbol, som 524 00:22:22,380 --> 00:22:24,160 representerar vad? 525 00:22:24,160 --> 00:22:25,590 Publiken: hemkatalogen. 526 00:22:25,590 --> 00:22:26,350 David J. MALAN: hemkatalog. 527 00:22:26,350 --> 00:22:29,350 Så det är bara en förkortning notation för att säga att du är i 528 00:22:29,350 --> 00:22:32,780 din personliga mapp där alla dina filer går som standard. 529 00:22:32,780 --> 00:22:36,080 Så nu, här kan jag skriva ls för listan. 530 00:22:36,080 --> 00:22:40,020 Och det enda jag ser här just nu är hej.c. 531 00:22:40,020 --> 00:22:41,770 Och det är bra eftersom jag bara skrev det här. 532 00:22:41,770 --> 00:22:44,380 >> Så låt mig gå vidare och gör hej. 533 00:22:44,380 --> 00:22:46,830 Och märker jag inte skriva att hej.c. 534 00:22:46,830 --> 00:22:50,300 Istället, jag skriver bara bas namnet på filen, hej. 535 00:22:50,300 --> 00:22:53,690 Och gör, som vi såg i måndags, kommer bara dra slutsatsen att jag vill 536 00:22:53,690 --> 00:22:54,920 den. c-fil. 537 00:22:54,920 --> 00:22:56,820 Så nu har jag skrivit att hej. 538 00:22:56,820 --> 00:22:59,280 Nu ser jag det ganska lång kommando och kommer att fortsätta 539 00:22:59,280 --> 00:23:00,480 ser detta om och om igen. 540 00:23:00,480 --> 00:23:03,620 Men för att vara tydlig, klang, det ord som just dök upp, 541 00:23:03,620 --> 00:23:05,340 Det är den verkliga kompilatorn. 542 00:23:05,340 --> 00:23:08,200 Gör bara en bygga verktyg. 543 00:23:08,200 --> 00:23:11,900 Det är bara en mer användarvänligt program som sparar mig i 544 00:23:11,900 --> 00:23:15,310 lång sikt, från att skriva ut otroligt tråkiga långa 545 00:23:15,310 --> 00:23:17,020 kommandon som att en. 546 00:23:17,020 --> 00:23:18,950 Så du kan köra klang manuellt. 547 00:23:18,950 --> 00:23:20,530 Du kan skriva allt detta manuellt. 548 00:23:20,530 --> 00:23:21,580 Blir bara väldigt tråkiga. 549 00:23:21,580 --> 00:23:24,720 Och så gör bara ett program som förenklar våra liv och 550 00:23:24,720 --> 00:23:27,120 kör mer komplexa kommandon för oss. 551 00:23:27,120 --> 00:23:29,410 >> Okej, så nu vilken fil ska jag ha 552 00:23:29,410 --> 00:23:31,540 I min nuvarande katalog? 553 00:23:31,540 --> 00:23:36,310 Inte bara hej.c, men också hej. 554 00:23:36,310 --> 00:23:39,710 Så om jag vill köra hej, minns att jag säger dot slash, 555 00:23:39,710 --> 00:23:42,220 där dot betyder gå in den aktuella mappen, var du 556 00:23:42,220 --> 00:23:46,060 är, och sedan kör programmet heter hej, och faktiskt, nu, 557 00:23:46,060 --> 00:23:48,080 Jag har hallå världen. 558 00:23:48,080 --> 00:23:51,640 Okej, några frågor om arbetsflödet eller syntax 559 00:23:51,640 --> 00:23:52,890 vad vi gjorde just? 560 00:23:55,380 --> 00:23:57,040 >> Okej, så låt oss ta saker upp ett hack igen. 561 00:23:57,040 --> 00:24:00,430 Så detta var underwhelming att bara skriva ett program som bara 562 00:24:00,430 --> 00:24:01,790 någonsin, säger hej, värld. 563 00:24:01,790 --> 00:24:03,920 Så vi ändrade det, på måndag, för att säga, hej, David. 564 00:24:03,920 --> 00:24:06,560 Det är lite mer personligt, men lika hårt kodad som 565 00:24:06,560 --> 00:24:07,410 Första versionen. 566 00:24:07,410 --> 00:24:08,780 Så inte så övertygande. 567 00:24:08,780 --> 00:24:13,120 Men det finns, i C, fungerar säkert förutom 568 00:24:13,120 --> 00:24:15,700 utskrift, funktioner som gör att du får indata. 569 00:24:15,700 --> 00:24:17,990 Och sättet vi gjorde detta, häromdagen, var följande. 570 00:24:17,990 --> 00:24:21,440 Innan jag faktiskt skriva ut något, fick jag först 571 00:24:21,440 --> 00:24:22,410 något från användaren. 572 00:24:22,410 --> 00:24:23,370 Så låt mig göra det igen. 573 00:24:23,370 --> 00:24:26,580 >> String s, där s är bara ett godtyckligt namn, här, för en 574 00:24:26,580 --> 00:24:30,600 sträng är lika GetString. 575 00:24:30,600 --> 00:24:32,070 Så vad getString? 576 00:24:32,070 --> 00:24:34,630 Det blir naturligtvis en sträng, baserat på dess namn. 577 00:24:34,630 --> 00:24:37,560 Men vad är det, mer tekniskt? 578 00:24:37,560 --> 00:24:38,440 Det är en funktion. 579 00:24:38,440 --> 00:24:41,790 Så det är en funktion som inte kommer med C per se. 580 00:24:41,790 --> 00:24:43,660 CS50 anställda skrev. 581 00:24:43,660 --> 00:24:46,940 Och så för att använda detta kan du inte bara inkludera stdio.h, 582 00:24:46,940 --> 00:24:49,630 Du måste också inkludera vad? 583 00:24:49,630 --> 00:24:50,060 Ja. 584 00:24:50,060 --> 00:24:54,210 Så cs50.h, som är bara en fil som vi skrev för några år sedan. 585 00:24:54,210 --> 00:24:57,130 Vi installerade det på apparaten för dig tillsammans med 586 00:24:57,130 --> 00:24:58,490 alla de vanliga filerna. 587 00:24:58,490 --> 00:25:00,500 Och så i dessa första veckorna för klassen, kommer vi att använda 588 00:25:00,500 --> 00:25:02,820 Detta bara för att förenkla processen att göra mycket grundläggande 589 00:25:02,820 --> 00:25:04,600 saker som får indata. 590 00:25:04,600 --> 00:25:07,370 För som vi ser i ett par veckor, att få användardata i en 591 00:25:07,370 --> 00:25:10,180 språk som C är faktiskt överraskande komplex, 592 00:25:10,180 --> 00:25:14,360 särskilt eftersom du inte vet i förväg, vanligen hur 593 00:25:14,360 --> 00:25:17,030 mycket grejer användaren ska skriva i. 594 00:25:17,030 --> 00:25:20,340 Och när du inte vet hur mycket data att förvänta sig, behöver du inte 595 00:25:20,340 --> 00:25:22,380 vet hur mycket minne att fördela. 596 00:25:22,380 --> 00:25:25,480 Och om du faktiskt har ett kontradiktoriskt användare som försöker 597 00:25:25,480 --> 00:25:28,180 att hacka sig in i systemet, kraschar datorn, ja, 598 00:25:28,180 --> 00:25:31,600 allmänhet den första metoden attack är, precis som jag gjorde på 599 00:25:31,600 --> 00:25:34,950 Måndag skriver en hel lång sekvens av slumpmässiga tecken, 600 00:25:34,950 --> 00:25:37,020 trycka Enter, och se vad sönder. 601 00:25:37,020 --> 00:25:40,800 Eftersom allmänhet om ett program raster, antyder att vid 602 00:25:40,800 --> 00:25:42,650 en säkerhetsbrist, potentiellt. 603 00:25:42,650 --> 00:25:45,250 Det antyder visserligen på dig, programmeraren, efter att ha gjort en 604 00:25:45,250 --> 00:25:49,050 misstag, men farligt, kanske du har gjort en 605 00:25:49,050 --> 00:25:52,430 säkerhetsrelaterad misstag, och i allmänhet vi ser att 606 00:25:52,430 --> 00:25:54,840 det är hur maskinerna äventyras till denna dag, både 607 00:25:54,840 --> 00:25:56,620 i världen av webben och program på 608 00:25:56,620 --> 00:25:58,070 kommandoraden, så här. 609 00:25:58,070 --> 00:25:58,350 >> Okej. 610 00:25:58,350 --> 00:26:00,460 Så sträng s lika getString. 611 00:26:00,460 --> 00:26:03,380 Så mer konkret nu, vad linje 6 göra här? 612 00:26:03,380 --> 00:26:05,640 Så funktionen på höger blir sträng, 613 00:26:05,640 --> 00:26:06,890 tar hur många argument? 614 00:26:09,458 --> 00:26:09,900 Okej. 615 00:26:09,900 --> 00:26:10,400 Så ingen. 616 00:26:10,400 --> 00:26:11,360 Lite förstånd kontrollera. 617 00:26:11,360 --> 00:26:15,380 Ett argument, återigen, är bara en ingång till en funktion för att ändra 618 00:26:15,380 --> 00:26:17,250 dess standardbeteendet på något sätt. 619 00:26:17,250 --> 00:26:19,540 Men i detta fall, jag vill inte ändra 620 00:26:19,540 --> 00:26:20,650 beteende GetString. 621 00:26:20,650 --> 00:26:22,430 Jag ville bara få en sträng. 622 00:26:22,430 --> 00:26:25,190 Så jag satte något inom parentes, och sedan jag satte en 623 00:26:25,190 --> 00:26:27,550 semikolon demarking änden av kodrad. 624 00:26:27,550 --> 00:26:29,840 Nu, likhetstecknet betyder inte lika, per se. 625 00:26:29,840 --> 00:26:32,690 Det betyder uppdrag, vilket innebär ange vad får 626 00:26:32,690 --> 00:26:36,060 utmatas på den högra insidan av det som finns till vänster. 627 00:26:36,060 --> 00:26:39,400 >> Så till vänster säger vi att vi har förklarat en 628 00:26:39,400 --> 00:26:41,630 sträng som kallas s.. 629 00:26:41,630 --> 00:26:44,240 Och mer specifikt, har vi allokerat minne inuti 630 00:26:44,240 --> 00:26:46,340 som vi sätter de bitar som representerar en sekvens av 631 00:26:46,340 --> 00:26:46,850 tecken. 632 00:26:46,850 --> 00:26:49,400 Men för idag har vi tilldelats 633 00:26:49,400 --> 00:26:51,450 eller förklarade en sträng. 634 00:26:51,450 --> 00:26:51,790 Okej. 635 00:26:51,790 --> 00:26:54,760 Så nu när jag har gjort det, vill jag koppla in värdet på 636 00:26:54,760 --> 00:26:56,535 s inte värdet av David. 637 00:26:56,535 --> 00:27:00,200 Så detta är fel varför? 638 00:27:03,060 --> 00:27:04,870 Så detta är bara bokstavligen hårdkodad s. 639 00:27:04,870 --> 00:27:06,870 Det är att säga "hej, s," som är inte vad jag vill. 640 00:27:06,870 --> 00:27:07,790 Så jag kan göra detta. 641 00:27:07,790 --> 00:27:10,330 Den procentuella tecknet är en platshållare, men nu behöver jag 642 00:27:10,330 --> 00:27:12,520 passera in skriva ut en andra argument. 643 00:27:12,520 --> 00:27:15,160 Minns att argument till funktioner separeras genom 644 00:27:15,160 --> 00:27:20,300 kommatecken, så nästa kommatecknet här jag lade efter detta bokstaven S. 645 00:27:20,300 --> 00:27:23,740 Och i detta sammanhang nu, s är variabeln, och printf, 646 00:27:23,740 --> 00:27:25,550 vid mottagande dessa två ingångar - 647 00:27:25,550 --> 00:27:29,440 strängen till vänster och variabelnamnet är till höger - 648 00:27:29,440 --> 00:27:32,750 kommer det att ansluta senare till fd för oss, och 649 00:27:32,750 --> 00:27:34,600 bara skriva ut en fin vacker sträng som innehåller 650 00:27:34,600 --> 00:27:36,770 vad det är som vi skrivit in 651 00:27:36,770 --> 00:27:37,560 >> Så låt oss prova det här. 652 00:27:37,560 --> 00:27:38,860 Kommer att gå vidare och zooma ut, tillbaka 653 00:27:38,860 --> 00:27:40,250 till min terminalfönster. 654 00:27:40,250 --> 00:27:41,840 Zooma in längst ner här. 655 00:27:41,840 --> 00:27:44,070 Skriva att hej. 656 00:27:44,070 --> 00:27:45,870 Klang verkar ha repris. 657 00:27:45,870 --> 00:27:49,280 Jag ska skriva. / Hej, Enter. 658 00:27:49,280 --> 00:27:52,145 Ingenting verkar hända ännu, men det är på denna uppmaning 659 00:27:52,145 --> 00:27:55,700 att jag kan skriva något i stil med Nate, Enter, och nu har vi 660 00:27:55,700 --> 00:27:56,380 Hej, Nate. 661 00:27:56,380 --> 00:27:59,600 Och jag kan göra det igen med Rob, och så vidare. 662 00:27:59,600 --> 00:28:03,410 Så förhoppningsvis nu detta program beter sig som jag tänker. 663 00:28:03,410 --> 00:28:05,720 >> Nu inte så användarvänligt. 664 00:28:05,720 --> 00:28:07,930 Jag har ingen aning om vad som är förväntat av mig. 665 00:28:07,930 --> 00:28:09,620 Så vi kan verkligen städa upp lite. 666 00:28:09,620 --> 00:28:13,270 Låt mig gå tillbaka upp hit, och i stället för bara dyka in och 667 00:28:13,270 --> 00:28:16,480 be användaren efter en sträng, låt mig uttryckligen berätta 668 00:28:16,480 --> 00:28:17,750 användaren vad jag förväntat mig. 669 00:28:17,750 --> 00:28:21,610 Så printf ("Ange en sträng:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Så inga variabler här. 672 00:28:25,510 --> 00:28:26,750 Inga procenttecken. 673 00:28:26,750 --> 00:28:28,550 Bara den enkla engelska frasen. 674 00:28:28,550 --> 00:28:34,030 Låt mig nu gå till botten här och köra mitt program. 675 00:28:34,030 --> 00:28:35,380 Men ingenting verkar ha ändrats. 676 00:28:35,380 --> 00:28:37,350 Varför? 677 00:28:37,350 --> 00:28:38,380 Jag måste kompilera det. 678 00:28:38,380 --> 00:28:39,570 Så lätt misstag att göra. 679 00:28:39,570 --> 00:28:41,700 Men du måste inte bara spara filen, men 680 00:28:41,700 --> 00:28:43,260 kompilera programmet. 681 00:28:43,260 --> 00:28:46,640 Och så om jag köra göra hej, nu klang körs. 682 00:28:46,640 --> 00:28:51,800 Nu kan jag köra. / Hej. Och nu ser jag "Ange en sträng:". 683 00:28:51,800 --> 00:28:52,050 Okej. 684 00:28:52,050 --> 00:28:53,440 Nu är det lite mer användarvänligt. 685 00:28:53,440 --> 00:28:55,850 Nate, Enter, hej, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Nåväl, låt oss prova det här igen och börja tänka 687 00:28:57,310 --> 00:28:58,080 om Corner fall. 688 00:28:58,080 --> 00:29:00,520 Så precis som i Scratch, du uppmuntras eller håller på att 689 00:29:00,520 --> 00:29:03,180 uppmuntras i spec till typ av tänka på vad som kan gå 690 00:29:03,180 --> 00:29:06,610 fel om du inte räknar allt som användaren kan göra. 691 00:29:06,610 --> 00:29:08,050 Buggar därför kan uppstå. 692 00:29:08,050 --> 00:29:09,710 Så skriv en sträng - 693 00:29:09,710 --> 00:29:11,130 vad är ett hörn fallet här? 694 00:29:11,130 --> 00:29:13,320 Vad är ett scenario som jag, programmerare, kanske inte 695 00:29:13,320 --> 00:29:16,070 förväntas? 696 00:29:16,070 --> 00:29:17,600 Ja. 697 00:29:17,600 --> 00:29:17,920 Okej. 698 00:29:17,920 --> 00:29:22,060 Så vad händer om jag skriver i ett antal som denna? 699 00:29:22,060 --> 00:29:22,500 Okej. 700 00:29:22,500 --> 00:29:24,490 Så det fungerar fortfarande. 701 00:29:24,490 --> 00:29:25,880 Gramatically är meningslöst. 702 00:29:25,880 --> 00:29:27,180 Men åtminstone programmet fungerar. 703 00:29:27,180 --> 00:29:28,650 >> Vad är ett annat hörn fall? 704 00:29:28,650 --> 00:29:29,610 Något jag inte förväntar sig. 705 00:29:29,610 --> 00:29:31,590 Ja? 706 00:29:31,590 --> 00:29:31,940 Okej. 707 00:29:31,940 --> 00:29:34,950 Så vi kunde göra något som en riktigt, riktigt stor nummer. 708 00:29:34,950 --> 00:29:37,270 Så låt oss göra det här. 709 00:29:37,270 --> 00:29:40,880 Låt mig zooma ut för en sekund, låt mig belysa. 710 00:29:40,880 --> 00:29:42,250 Det går inte att kopiera och klistra in här nere. 711 00:29:42,250 --> 00:29:42,470 Okej. 712 00:29:42,470 --> 00:29:44,440 Så jag kan inte kopiera och klistra in i terminalfönstret, så vi får 713 00:29:44,440 --> 00:29:46,950 bara simulera det. 714 00:29:46,950 --> 00:29:51,340 Låt mig zooma ut, kommer att slå. 715 00:29:51,340 --> 00:29:52,700 Jag tänker inte göra det för länge, eftersom det inte kommer att 716 00:29:52,700 --> 00:29:54,440 faktiskt bryta i detta program. 717 00:29:54,440 --> 00:29:55,260 Men det kunde. 718 00:29:55,260 --> 00:29:55,830 Enter. 719 00:29:55,830 --> 00:29:56,580 Men det gjorde det inte. 720 00:29:56,580 --> 00:29:57,050 Okej. 721 00:29:57,050 --> 00:29:58,440 Men det är en äkta hörn fall. 722 00:29:58,440 --> 00:30:01,610 Och den enda anledningen till att uppträdde korrekt, så att 723 00:30:01,610 --> 00:30:05,820 tala, beror på CS50 funktionen GetString är faktiskt 724 00:30:05,820 --> 00:30:08,040 utformade under huven, som vi ser i ett par veckor, 725 00:30:08,040 --> 00:30:11,570 automatiskt att tilldela mer och mer RAM-minne, mer och mer 726 00:30:11,570 --> 00:30:14,330 minne från operativsystemet, när det inser, wow, 727 00:30:14,330 --> 00:30:16,670 du har verkligen skrivit i något ganska lång. 728 00:30:16,670 --> 00:30:18,500 Nu är det lite av en vit lögn. 729 00:30:18,500 --> 00:30:22,020 Om vi ​​stannade faktiskt ett bra tag och jag skrev i 730 00:30:22,020 --> 00:30:24,640 ungefär 5 miljarder tecken på tangentbordet 731 00:30:24,640 --> 00:30:28,060 här, eller egentligen slå kopiera och klistra ganska lite, vi förmodligen 732 00:30:28,060 --> 00:30:29,730 kan leda till att programmet kraschar. 733 00:30:29,730 --> 00:30:32,130 Bara lite svårare att simulera det med en ändlig 734 00:30:32,130 --> 00:30:33,740 tid. 735 00:30:33,740 --> 00:30:37,320 >> Vad är ett annat hörn fall vi kan prova? 736 00:30:37,320 --> 00:30:38,730 Ja? 737 00:30:38,730 --> 00:30:39,020 Ja. 738 00:30:39,020 --> 00:30:40,360 Så varför inte vi svara någonting? 739 00:30:40,360 --> 00:30:43,130 Så vi har faktiskt att vidta några åtgärder, annars 740 00:30:43,130 --> 00:30:45,060 Programmet kommer att sitta där blinkande hela dagen. 741 00:30:45,060 --> 00:30:46,860 Men om jag bara trycka Enter - 742 00:30:46,860 --> 00:30:48,780 OK, nu ser fortfarande fel. 743 00:30:48,780 --> 00:30:51,670 Inte krascha, men kanske finns det nu en möjlighet att 744 00:30:51,670 --> 00:30:54,190 börja genomföra en mer rigoröst program 745 00:30:54,190 --> 00:30:55,290 som kontrollerar faktiskt. 746 00:30:55,290 --> 00:30:57,640 Och om strängen, meningen, det ord som jag 747 00:30:57,640 --> 00:31:00,890 skrivit i har längden 0, ja, jag kanske borde skrika på 748 00:31:00,890 --> 00:31:03,770 användare eller berätta för honom eller henne att ange en sträng igen, så att 749 00:31:03,770 --> 00:31:06,560 Vi får faktiskt ser ut korrekt beteende och inte 750 00:31:06,560 --> 00:31:08,570 bara helt förbiseende från min sida. 751 00:31:08,570 --> 00:31:11,130 >> Fråga i ryggen? 752 00:31:11,130 --> 00:31:11,970 Decimaltal. 753 00:31:11,970 --> 00:31:13,120 Så vi kan prova det också. 754 00:31:13,120 --> 00:31:16,840 1,10000005. 755 00:31:16,840 --> 00:31:19,470 Verkar som det kommer att bara jobba faktiskt okej. 756 00:31:19,470 --> 00:31:21,160 Och som faktiskt förväntas. 757 00:31:21,160 --> 00:31:24,550 Även om vi kanske har skrivit det numret där eller en 758 00:31:24,550 --> 00:31:28,200 större antal tidigare inse att när vi skriver användaren 759 00:31:28,200 --> 00:31:31,070 ingång och vi använder GetString funktionen inte 760 00:31:31,070 --> 00:31:34,380 Oavsett om vad jag skriver ser ut som ett nummer. 761 00:31:34,380 --> 00:31:36,720 Minns att enligt ASCII, allt på din 762 00:31:36,720 --> 00:31:39,920 tangentbordet har ett numeriskt värde som kan mappas till en 763 00:31:39,920 --> 00:31:41,480 karaktär, en röding. 764 00:31:41,480 --> 00:31:44,490 Så i det här fallet, även om jag kan skriva ett nummer, 765 00:31:44,490 --> 00:31:48,190 Datorn kommer att tänka på det, så att säga, som en sträng - 766 00:31:48,190 --> 00:31:49,870 något som ser ut som ett nummer, men är 767 00:31:49,870 --> 00:31:51,090 faktiskt inte ett nummer. 768 00:31:51,090 --> 00:31:53,450 Men det är faktiskt en perfekt Segue, för nu kan vi 769 00:31:53,450 --> 00:31:55,450 faktiskt övergång till skriva program som 770 00:31:55,450 --> 00:31:56,730 använda andra datatyper. 771 00:31:56,730 --> 00:32:01,840 >> Så förutom att använda tecken, eller snarare, förutom att använda strängar, 772 00:32:01,840 --> 00:32:04,510 inse att vi har andra datatyper i C samt i 773 00:32:04,510 --> 00:32:05,230 andra språk. 774 00:32:05,230 --> 00:32:08,480 En röding, som namnet antyder, är bara ett enda tecken. 775 00:32:08,480 --> 00:32:12,150 En flottör är ett flyttal värde, och det är bara en fantasi 776 00:32:12,150 --> 00:32:14,470 sätt att säga ett reellt tal - något som har en decimal 777 00:32:14,470 --> 00:32:17,410 punkt i den med några siffror till vänster och / eller höger. 778 00:32:17,410 --> 00:32:21,370 En int är ett heltal, som är bara ett nummer som 123. 779 00:32:21,370 --> 00:32:24,170 Och nu mer intressant är saker som dubbel. 780 00:32:24,170 --> 00:32:28,540 Vad gjorde vi säga en dubbel var förra gången? 781 00:32:28,540 --> 00:32:30,050 Det är 64, till höger. 782 00:32:30,050 --> 00:32:33,560 Så medan typiskt en flottör är 32-bitars - 783 00:32:33,560 --> 00:32:37,340 så det är så lång tid i minnet, använder den 32 nollor och ettor till 784 00:32:37,340 --> 00:32:40,530 representerar värden - en dubbel är bokstavligen dubbelt så, som 785 00:32:40,530 --> 00:32:43,810 innebär att du antingen kan representera större tal, eller 786 00:32:43,810 --> 00:32:45,810 Du kan representera mer precisa siffror. 787 00:32:45,810 --> 00:32:48,690 Så du kan få fler nummer efter decimalkommat, men 788 00:32:48,690 --> 00:32:51,520 som stipendiaten sa i videon, även något enkelt 789 00:32:51,520 --> 00:32:55,360 begreppsmässigt som 1/3 inte kan representeras exakt av en 790 00:32:55,360 --> 00:32:58,330 dator, eftersom så småningom tar slut bitar, och 791 00:32:58,330 --> 00:33:02,510 Därför kan du bara göra .33333333 så många gånger, på 792 00:33:02,510 --> 00:33:05,050 då du måste bara säga att jag är ute representation 793 00:33:05,050 --> 00:33:08,120 utrymme måste jag bara kalla det en dag och representerar det 794 00:33:08,120 --> 00:33:10,200 något oprecist så. 795 00:33:10,200 --> 00:33:11,110 Och en lång lång - 796 00:33:11,110 --> 00:33:13,880 dumt namn, men det är för att det finns en datatyp som kallas 797 00:33:13,880 --> 00:33:19,350 länge i C som tillfällighet är ofta 32 bitar, precis som en 798 00:33:19,350 --> 00:33:21,670 int är 32 bitar, men en lång lång är 799 00:33:21,670 --> 00:33:23,560 allmänhet 64 bitar. 800 00:33:23,560 --> 00:33:25,740 Så det betyder bara att du kan representera större 801 00:33:25,740 --> 00:33:26,990 siffror än så. 802 00:33:26,990 --> 00:33:27,410 >> Okej. 803 00:33:27,410 --> 00:33:29,390 Så om vi vill verkligen börja representera saker, vi 804 00:33:29,390 --> 00:33:31,030 kan behöva mer avancerade typer och 805 00:33:31,030 --> 00:33:32,340 det är därför vi har sträng. 806 00:33:32,340 --> 00:33:36,450 Så i CS50 biblioteket kallas den filen cs50.h, vi har 807 00:33:36,450 --> 00:33:41,110 faktiskt förklarade en datatyp, så att säga, som kallas sträng, 808 00:33:41,110 --> 00:33:42,710 men sträng existerar inte faktiskt. 809 00:33:42,710 --> 00:33:44,780 Detta är återigen en av dessa lager kommer vi att skala 810 00:33:44,780 --> 00:33:47,490 tillbaka i en vecka eller två och kasta bort det, och faktiskt 811 00:33:47,490 --> 00:33:49,640 titta under huven på vad en sträng egentligen är, och 812 00:33:49,640 --> 00:33:50,840 hur det representerade. 813 00:33:50,840 --> 00:33:53,520 Vi kommer även att titta på booleska värden. 814 00:33:53,520 --> 00:33:56,040 >> Så vad var bool i samband med Scratch? 815 00:33:59,154 --> 00:34:00,300 Det är sant eller falskt. 816 00:34:00,300 --> 00:34:03,900 Så det är bara ett värde som är sant eller falskt, på eller av, 1 eller 817 00:34:03,900 --> 00:34:06,140 0, men du vill visa världen. 818 00:34:06,140 --> 00:34:09,739 Så i C, tack vare CS50 biblioteket, vilket i sin tur 819 00:34:09,739 --> 00:34:12,179 omfattar ett annat bibliotek under huven, har vi 820 00:34:12,179 --> 00:34:14,909 tillgång till en datatyp som kallas bool, som kommer 821 00:34:14,909 --> 00:34:18,730 bokstavligen tillåter oss att tilldela värdena true eller false för 822 00:34:18,730 --> 00:34:20,219 saker i ett program. 823 00:34:20,219 --> 00:34:23,880 >> Så låt oss gå vidare här och skriva ett litet program som 824 00:34:23,880 --> 00:34:26,330 gör något där siffror istället. 825 00:34:26,330 --> 00:34:29,840 Så låt mig gå tillbaka till CS50 Appliance, låt mig gå vidare och 826 00:34:29,840 --> 00:34:32,770 skapa en ny fil här kallas - 827 00:34:32,770 --> 00:34:35,460 låt oss bara säga något enkelt, som math.c. 828 00:34:38,270 --> 00:34:38,710 Okej. 829 00:34:38,710 --> 00:34:41,600 Och nu gå upp till toppen av mitt program, jag 830 00:34:41,600 --> 00:34:42,510 kommer att göra den vanliga - 831 00:34:42,510 --> 00:34:44,780 # Include , så att jag kan använda 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 Vi ska återkomma till så småningom, vad int betyder 834 00:34:49,270 --> 00:34:52,389 här, vad tomrum menas här, men för nu, vet bara att 835 00:34:52,389 --> 00:34:54,270 du måste starta program som detta. 836 00:34:54,270 --> 00:34:56,280 Nu ska jag gå vidare och säga något lite 837 00:34:56,280 --> 00:35:02,110 annorlunda - printf ("Ge mig ett nummer:" 838 00:35:02,110 --> 00:35:03,570 ). 839 00:35:03,570 --> 00:35:09,220 Sen ska jag göra int n = getInt, eftersom det 840 00:35:09,220 --> 00:35:12,770 Det visade sig att getInt är en annan funktion i CS50 biblioteket 841 00:35:12,770 --> 00:35:14,060 förutom GetString. 842 00:35:14,060 --> 00:35:17,340 Och nu ska jag göra något dumt, som "tack 843 00:35:17,340 --> 00:35:25,760 för% d "för heltal och sedan komma n och 844 00:35:25,760 --> 00:35:26,620 sedan tillbaka 0. 845 00:35:26,620 --> 00:35:28,940 Så återigen, tillbaka 0 har ingenting att göra med numret jag 846 00:35:28,940 --> 00:35:30,080 ber användaren. 847 00:35:30,080 --> 00:35:33,620 Bara betyder slutet som alla, förmodligen är bra. 848 00:35:33,620 --> 00:35:36,290 >> Så låt mig gå ner till min terminalfönster här. 849 00:35:36,290 --> 00:35:39,590 Låt mig skriva att matte skriver. 850 00:35:39,590 --> 00:35:41,360 Och något är fel. 851 00:35:41,360 --> 00:35:44,620 Gör matte fungerade inte. 852 00:35:44,620 --> 00:35:46,170 Här är den första av våra felmeddelanden. 853 00:35:46,170 --> 00:35:46,570 Varför? 854 00:35:46,570 --> 00:35:49,720 Lite kryptisk, men - 855 00:35:49,720 --> 00:35:50,060 Ja. 856 00:35:50,060 --> 00:35:51,240 Så cs50.h. 857 00:35:51,240 --> 00:35:53,900 Så återigen, särskilt tidigt på kommer du skriva din första 858 00:35:53,900 --> 00:35:56,590 program för pset 1 i avsnitt, kontorstid, och 859 00:35:56,590 --> 00:35:59,050 ärligt talat, det blir överväldigande ibland vad dessa saker 860 00:35:59,050 --> 00:36:00,000 faktiskt säger. 861 00:36:00,000 --> 00:36:01,890 Men du inser väldigt snabbt de börjar falla 862 00:36:01,890 --> 00:36:06,120 i hinkar där det en innebär att du har slutat en 863 00:36:06,120 --> 00:36:08,290 av # innefattar längst upp i filen. 864 00:36:08,290 --> 00:36:10,960 Och klang, kompilatorn är att informera dig om detta genom att 865 00:36:10,960 --> 00:36:14,090 säger ganska fantasifullt, implicit deklaration av 866 00:36:14,090 --> 00:36:15,990 funktion getInt är ogiltig. 867 00:36:15,990 --> 00:36:16,310 >> Okej. 868 00:36:16,310 --> 00:36:17,520 Så vad betyder det? 869 00:36:17,520 --> 00:36:22,080 Det betyder bara att du implicit har deklarerat getInt i 870 00:36:22,080 --> 00:36:24,850 den meningen att man inte uttryckligen har förklarat det. 871 00:36:24,850 --> 00:36:27,300 Uttryckligen förklara int, måste du lära 872 00:36:27,300 --> 00:36:28,740 Klang att den existerar. 873 00:36:28,740 --> 00:36:32,020 Och mycket enkel lösning för det är att lära genom 874 00:36:32,020 --> 00:36:34,780 inklusive denna andra filen, cs50.h på 875 00:36:34,780 --> 00:36:35,850 toppen av din fil. 876 00:36:35,850 --> 00:36:40,380 Eftersom bokstavligen, vad # include är det berättar klang 877 00:36:40,380 --> 00:36:44,030 ganska mycket att gå hitta filen som heter cs50.h, kopiera, 878 00:36:44,030 --> 00:36:48,150 klistra automatiskt in i toppen av mitt program för mig, 879 00:36:48,150 --> 00:36:50,850 och sedan konvertera källkoden till nollor och ettor. 880 00:36:50,850 --> 00:36:52,850 Men det skulle naturligtvis vara mycket tröttande om vi människor hade 881 00:36:52,850 --> 00:36:55,370 att gå kopiera och klistra in dessa stora filer hela tiden, 882 00:36:55,370 --> 00:36:58,540 så # include bara gör allt detta automatiskt utan 883 00:36:58,540 --> 00:37:01,550 muddying min kod med någon annans bibliotek. 884 00:37:01,550 --> 00:37:06,370 Och ett bibliotek är bara en annan fil som innehåller funktioner och 885 00:37:06,370 --> 00:37:08,340 andra saker som någon annan har skrivit, att vi är 886 00:37:08,340 --> 00:37:10,270 utnyttja för vår egen skull. 887 00:37:10,270 --> 00:37:10,580 >> Okej. 888 00:37:10,580 --> 00:37:11,200 Låt oss försöka igen. 889 00:37:11,200 --> 00:37:12,250 Gör matten. 890 00:37:12,250 --> 00:37:13,120 Enter. 891 00:37:13,120 --> 00:37:13,530 Bra. 892 00:37:13,530 --> 00:37:14,880 Så det verkar ha fungerat. 893 00:37:14,880 --> 00:37:18,330 Så låt mig nu kör matematik,. / Matematik. 894 00:37:18,330 --> 00:37:21,100 Ange ger mig ett nummer, 123. 895 00:37:21,100 --> 00:37:22,620 Tack för 123. 896 00:37:22,620 --> 00:37:24,490 Nu ska vi prova en annan hörn fall. 897 00:37:24,490 --> 00:37:26,530 En sträng är ganska generöst, eftersom en 898 00:37:26,530 --> 00:37:27,620 sträng kan vara vad som helst. 899 00:37:27,620 --> 00:37:28,910 Kan se ut siffror, ser ut 900 00:37:28,910 --> 00:37:30,600 tecken, ser ut som ord. 901 00:37:30,600 --> 00:37:31,900 Men en int är en int. 902 00:37:31,900 --> 00:37:34,370 Så nu om jag den svåra användaren, och det säger "Ge mig 903 00:37:34,370 --> 00:37:38,730 ett nummer, "tänk om jag försöker göra något liknande 0,1? 904 00:37:38,730 --> 00:37:41,510 Tja, det är ett nummer, och det är förenligt med 905 00:37:41,510 --> 00:37:44,180 grammatik använde jag här, men under huven, jag är för 906 00:37:44,180 --> 00:37:45,610 Naturligtvis med funktionen getInt. 907 00:37:45,610 --> 00:37:46,610 >> Så låt oss se vad som händer. 908 00:37:46,610 --> 00:37:48,250 Enter, försök igen. 909 00:37:48,250 --> 00:37:48,560 Okej. 910 00:37:48,560 --> 00:37:50,570 Låt mig vara svårt och bara trycka Enter igen. 911 00:37:50,570 --> 00:37:51,700 Enter, Enter. 912 00:37:51,700 --> 00:37:53,890 Så nu verkar det som getInt är lite mer 913 00:37:53,890 --> 00:37:55,240 kraftfull än GetString. 914 00:37:55,240 --> 00:37:58,540 Vi, personal, genomförs på ett sådant sätt att om vi märker 915 00:37:58,540 --> 00:38:02,100 du har inte gett oss en int - och en int är ett decimaltal 916 00:38:02,100 --> 00:38:04,785 innehåller nollor, ettor, tvåor, fyror, femmor, sexor, 917 00:38:04,785 --> 00:38:05,540 sjuor, åttor eller nior. 918 00:38:05,540 --> 00:38:06,310 Och det är det. 919 00:38:06,310 --> 00:38:08,810 Inga decimaler, inga tecken, inga skiljetecken. 920 00:38:08,810 --> 00:38:10,390 Det verkar som vi måste samarbeta. 921 00:38:10,390 --> 00:38:13,680 Så låt mig försöka fyra, fem, sex, och det får mig igenom. 922 00:38:13,680 --> 00:38:16,760 Så egentligen, att vara analt här skulle jag nog säga "Ge mig 923 00:38:16,760 --> 00:38:20,310 ett heltal "för att förmedla till användaren 924 00:38:20,310 --> 00:38:22,620 exakt vad jag tänker. 925 00:38:22,620 --> 00:38:24,090 >> Nu ska vi tänka på under huven. 926 00:38:24,090 --> 00:38:27,930 Vi kommer inte att titta på hur cs50.h genomförs idag, 927 00:38:27,930 --> 00:38:29,080 det biblioteket. 928 00:38:29,080 --> 00:38:33,600 Men om det fortsätter att säga försöka igen, försöka igen, försöka igen, vilken programmering 929 00:38:33,600 --> 00:38:36,970 konstruera jag förmodligen använda under huven till 930 00:38:36,970 --> 00:38:39,000 genomföra detta? 931 00:38:39,000 --> 00:38:39,980 Så bara en slinga, eller hur? 932 00:38:39,980 --> 00:38:41,930 Ett av de enklaste idéerna som vi såg på Scratch. 933 00:38:41,930 --> 00:38:45,050 Konstruktionen evigt, Repetera konstruera. 934 00:38:45,050 --> 00:38:47,320 Förmodligen, i detta program, under huven, även 935 00:38:47,320 --> 00:38:49,470 även om det är skrivet i C och inte repa, det är att göra 936 00:38:49,470 --> 00:38:54,300 något som kallas motsvarar alltid om användaren inte har 937 00:38:54,300 --> 00:38:58,710 skrivs i ett heltal, säger försöka igen, försöka igen, försöka igen, försöka igen, så 938 00:38:58,710 --> 00:39:01,220 slutligen när vi får ett heltal, då du 939 00:39:01,220 --> 00:39:02,970 bryta sig ur denna slinga. 940 00:39:02,970 --> 00:39:05,610 >> Så vad andra funktioner kan vi använda här i CS50 bibliotek? 941 00:39:05,610 --> 00:39:07,880 Tja,, typ av uppenbara åtminstone baserat på 942 00:39:07,880 --> 00:39:09,570 datatyper som vi nu vet finns. 943 00:39:09,570 --> 00:39:12,900 Vi har genomfört GetString, getInt, utan i hela 944 00:39:12,900 --> 00:39:15,680 första veckorna av terminen kan du också använda getFloat och 945 00:39:15,680 --> 00:39:18,870 GetDouble och GetLongLong för att få exakt 946 00:39:18,870 --> 00:39:20,030 datatyper som du vill. 947 00:39:20,030 --> 00:39:24,030 Eftersom den viktigaste detalj här är att till skillnad från vissa språk, 948 00:39:24,030 --> 00:39:26,630 Liksom Python och Ruby, där man inte nödvändigtvis 949 00:39:26,630 --> 00:39:29,730 deklarera datatypen för en variabel - 950 00:39:29,730 --> 00:39:32,390 du behöver inte tala om för datorn vilken typ av saker 951 00:39:32,390 --> 00:39:34,000 du kommer att sätta i variabeln - 952 00:39:34,000 --> 00:39:36,640 i C, måste du vara aldrig så exakt. 953 00:39:36,640 --> 00:39:40,060 Så om du vill ha en variabel som heter N, en bit av lagringsutrymme 954 00:39:40,060 --> 00:39:42,900 att i detta fall råkar vara 32 bitar av konvention, du 955 00:39:42,900 --> 00:39:45,660 måste tala om för datorn att dessa bitar är 956 00:39:45,660 --> 00:39:47,840 kommer att lagra ett nummer - 957 00:39:47,840 --> 00:39:50,630 inte ett tecken, inte en sträng, inte en flottör. 958 00:39:50,630 --> 00:39:52,620 Och detta löser problemet vi effektivt 959 00:39:52,620 --> 00:39:53,760 sprang in förra veckan. 960 00:39:53,760 --> 00:39:57,050 Om vi ​​använder nollor och ettor siffror för att representera inte bara 961 00:39:57,050 --> 00:40:00,770 siffror utan som och B och Cs, hur i hela världen är en 962 00:40:00,770 --> 00:40:03,460 dator kommer att veta att detta mönster av bitar faktiskt 963 00:40:03,460 --> 00:40:07,650 representerar antalet 65, i motsats till representerar 964 00:40:07,650 --> 00:40:09,860 bokstaven A, som tillfällighet, enligt 965 00:40:09,860 --> 00:40:13,440 ASCII, minns, motsvarade 65? 966 00:40:13,440 --> 00:40:16,550 >> Så dessa datatyper ger sammanhang till datorn, så 967 00:40:16,550 --> 00:40:18,810 att den vet om dessa bitar bör tolkas som ett 968 00:40:18,810 --> 00:40:23,660 int eller som en sträng. 969 00:40:23,660 --> 00:40:26,500 Har du frågor, då på detta? 970 00:40:26,500 --> 00:40:28,149 Ja? 971 00:40:34,780 --> 00:40:35,270 David J. MALAN: Bra fråga. 972 00:40:35,270 --> 00:40:39,140 Om vi ​​tar ut stdio.h sparar vi filen - 973 00:40:39,140 --> 00:40:44,360 Låt mig gå ner till terminalfönster och kör make matematik, zoom 974 00:40:44,360 --> 00:40:45,530 in och skriv - 975 00:40:45,530 --> 00:40:47,700 nu får jag en annan fel, eftersom jag är implicit 976 00:40:47,700 --> 00:40:49,650 förklara vilken funktion nu? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Så nu har jag skapat ett nytt problem, vars lösning är 979 00:40:52,970 --> 00:40:53,890 väsentligen samma. 980 00:40:53,890 --> 00:40:55,365 Jag måste sätta tillbaka den. 981 00:40:55,365 --> 00:40:56,615 PUBLIK: [OHÖRBAR] 982 00:41:03,534 --> 00:41:04,030 David J. MALAN: Åh. 983 00:41:04,030 --> 00:41:04,850 Så om jag tar ut - 984 00:41:04,850 --> 00:41:05,360 Okej, ja. 985 00:41:05,360 --> 00:41:08,960 Så om jag tar bort standard I / O bibliotekets integration upp 986 00:41:08,960 --> 00:41:12,020 Här, och sedan du säger om jag bli av med printf får 987 00:41:12,020 --> 00:41:13,450 bli av med printf? 988 00:41:13,450 --> 00:41:13,810 Ja. 989 00:41:13,810 --> 00:41:18,450 Det borde fungera, eftersom jag inte längre använda någon - hoppsan. 990 00:41:18,450 --> 00:41:20,110 Har jag ljuga bara? 991 00:41:20,110 --> 00:41:21,650 Åh, okej. 992 00:41:21,650 --> 00:41:25,640 Detta kommer inte att fungera på grund av ett nytt fel vi precis börjat. 993 00:41:25,640 --> 00:41:28,390 Och den här är lite mer självförklarande. 994 00:41:28,390 --> 00:41:29,440 >> Vad är problemet? 995 00:41:29,440 --> 00:41:30,680 Oanvända variabeln n.. 996 00:41:30,680 --> 00:41:34,040 Så detta fel är ett resultat av att vi har konfigurerat 997 00:41:34,040 --> 00:41:36,640 apparaten vara särskilt pedantisk, att verkligen skrika på 998 00:41:36,640 --> 00:41:39,060 dig för varje möjlig misstag, även om det är typ av 999 00:41:39,060 --> 00:41:41,950 en icke-fatalt misstag som detta - är det verkligen så stor 1000 00:41:41,950 --> 00:41:44,820 hantera att jag tilldelats ett int, sätta ett nummer i den och sedan 1001 00:41:44,820 --> 00:41:46,030 bara gjorde ingenting med den? 1002 00:41:46,030 --> 00:41:47,020 Så funktionellt, nej. 1003 00:41:47,020 --> 00:41:50,410 Det kommer inte att bryta programmet. 1004 00:41:50,410 --> 00:41:51,490 Det är bara typ av dumt, eller hur? 1005 00:41:51,490 --> 00:41:54,220 Det finns inget värde att ha bett om det numret, lagras 1006 00:41:54,220 --> 00:41:56,370 den i en variabel, om du aldrig kommer att göra något 1007 00:41:56,370 --> 00:41:58,000 med det, om skriva ut det eller spara det. 1008 00:41:58,000 --> 00:42:00,270 Så i detta fall klang medger så mycket, och 1009 00:42:00,270 --> 00:42:02,010 Det säger oanvända variabeln n.. 1010 00:42:02,010 --> 00:42:05,380 >> Så vi kan fixa det här om vi verkligen vill. 1011 00:42:05,380 --> 00:42:07,250 Men återigen, det är inte bra programmering nu. 1012 00:42:07,250 --> 00:42:09,310 Så jag bara kunde göra detta - 1013 00:42:09,310 --> 00:42:12,060 gå ner här, låt mig rensa skärmen, gör matte. 1014 00:42:12,060 --> 00:42:13,090 Det fungerar. 1015 00:42:13,090 --> 00:42:18,110 Nu kan jag köra min matte program tar ingång - 1016 00:42:18,110 --> 00:42:18,700 Tja, det var så illa. 1017 00:42:18,700 --> 00:42:23,450 Tar in, och det är allt den gör, i det här fallet. 1018 00:42:23,450 --> 00:42:25,220 >> Så egentligen, låt oss försöka en andra hörnet så att vi 1019 00:42:25,220 --> 00:42:26,300 tänkte inte på tidigare. 1020 00:42:26,300 --> 00:42:28,220 I detta fall - här, låt oss gå tillbaka till en som är en 1021 00:42:28,220 --> 00:42:29,500 lite mer användarvänliga. 1022 00:42:29,500 --> 00:42:32,580 Låt mig gå tillbaka hit och kör make matematik igen. 1023 00:42:32,580 --> 00:42:34,190 Hoppsan, vad jag gör fel? 1024 00:42:34,190 --> 00:42:35,400 Fick rulla tillbaka ytterligare. 1025 00:42:35,400 --> 00:42:36,390 Okej. 1026 00:42:36,390 --> 00:42:38,490 Nu är vi tillbaka i sitt ursprungliga tillstånd, där alla 1027 00:42:38,490 --> 00:42:39,990 är förhoppningsvis väl. 1028 00:42:39,990 --> 00:42:43,360 Och nu om jag kör matte verkar 123 för att arbeta. 1029 00:42:43,360 --> 00:42:46,010 Men detta är egentligen inte en effektiv bevis för att bara säga 1030 00:42:46,010 --> 00:42:47,930 okej, fungerar det. 1031 00:42:47,930 --> 00:42:49,120 789 fungerar det. 1032 00:42:49,120 --> 00:42:50,100 Dags att skicka. 1033 00:42:50,100 --> 00:42:51,870 Eftersom det finns andra hörnet fall här. 1034 00:42:51,870 --> 00:42:55,040 En sträng inte riktigt ge oss mycket besvär genom att skriva i en 1035 00:42:55,040 --> 00:42:56,510 massa tecken. 1036 00:42:56,510 --> 00:42:59,580 Men om jag skriver i detta? 1037 00:42:59,580 --> 00:43:04,850 Att slå numret 1 en hel del, massa här - 1038 00:43:04,850 --> 00:43:06,300 okej, det börjar bli lite tråkigt, så jag ska 1039 00:43:06,300 --> 00:43:10,040 stanna här, och jag kommer att träffa på Enter. 1040 00:43:10,040 --> 00:43:11,290 >> Vad fan hände? 1041 00:43:14,110 --> 00:43:17,680 Så detta kan faktiskt förklaras. 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 bra tanke, men nej, det är inte det faktum att det tog 1044 00:43:21,130 --> 00:43:22,815 som binär, eftersom faktiskt, det var bara lite av en 1045 00:43:22,815 --> 00:43:23,080 tillfällighet. 1046 00:43:23,080 --> 00:43:23,930 Vi kan göra det igen. 1047 00:43:23,930 --> 00:43:26,530 Så det finns ingen 2 i det binära systemet, det är 1048 00:43:26,530 --> 00:43:27,420 förmodligen tillräckligt ändå. 1049 00:43:27,420 --> 00:43:28,780 Enter. 1050 00:43:28,780 --> 00:43:30,140 Så det var inte problemet. 1051 00:43:30,140 --> 00:43:31,390 Vad mer? 1052 00:43:34,650 --> 00:43:35,400 Exakt. 1053 00:43:35,400 --> 00:43:37,830 >> Så tänk tillbaka till vad en int egentligen är. 1054 00:43:37,830 --> 00:43:40,970 Det är 32 bitar som kollektivt tolkas 1055 00:43:40,970 --> 00:43:42,090 som ett nummer. 1056 00:43:42,090 --> 00:43:44,730 Om du har 32 bitar, innebär att var och en av bitarna kan vara 1057 00:43:44,730 --> 00:43:46,690 en 0 eller en 1, 0 eller en 1. 1058 00:43:46,690 --> 00:43:49,090 Så det innebär att det finns två möjligheter för denna bit, 1059 00:43:49,090 --> 00:43:51,140 två möjligheter för detta, två möjligheter för detta 1060 00:43:51,140 --> 00:43:52,570 bit - så det är 2 gånger 2 gånger - 1061 00:43:52,570 --> 00:43:55,480 så det är 2 till 32 effekten är det totala antalet 1062 00:43:55,480 --> 00:43:58,960 permutationer av nollor och ettor om du har 32 1063 00:43:58,960 --> 00:44:01,400 platshållare, nollor eller ettor, framför dig. 1064 00:44:01,400 --> 00:44:04,250 Så om jag har 2 till 32, matematiskt, det är vad? 1065 00:44:07,080 --> 00:44:07,840 Så det är en hel del. 1066 00:44:07,840 --> 00:44:09,910 Det är 4 miljarder, ge eller ta. 1067 00:44:09,910 --> 00:44:13,510 Och 4 miljarder verkar inte vara det som skrivs här. 1068 00:44:13,510 --> 00:44:16,290 I själva verket ser det närmare 2 miljarder. 1069 00:44:16,290 --> 00:44:17,970 Men detta är inte en tillfällighet. 1070 00:44:17,970 --> 00:44:21,590 Det faktum att datorn har misstolkat mitt stort antal, 1071 00:44:21,590 --> 00:44:24,260 min stora sekvens av ettor och sedan min stora sekvens av tvåor, 1072 00:44:24,260 --> 00:44:26,880 som cirka 2 miljarder kronor, förklaras hur? 1073 00:44:30,250 --> 00:44:32,180 Det finns ett tak för int. 1074 00:44:32,180 --> 00:44:34,970 Det finns en absolut ett högsta värde som du kan representera. 1075 00:44:34,970 --> 00:44:36,370 Men det är oftast 4 miljarder, eller hur? 1076 00:44:36,370 --> 00:44:39,100 Om 2 till 32 är ungefär 4 miljarder, verkar det som 1077 00:44:39,100 --> 00:44:40,350 Det är det största antalet. 1078 00:44:42,420 --> 00:44:45,240 Så inte en rest, men en bra tanke. 1079 00:44:45,240 --> 00:44:46,340 Negativa tal. 1080 00:44:46,340 --> 00:44:49,570 Så om du har 4 miljarder möjliga saker du kan 1081 00:44:49,570 --> 00:44:52,970 representerar dessa olika permutationer av 32 0 och 1082 00:44:52,970 --> 00:44:55,600 1s, ja, är det förståeligt att vi människor kanske vill 1083 00:44:55,600 --> 00:44:57,110 representerar inte bara positiva heltal 1084 00:44:57,110 --> 00:44:58,240 men negativa heltal. 1085 00:44:58,240 --> 00:45:00,410 Och faktiskt, det är antagandet att C gör. 1086 00:45:00,410 --> 00:45:03,550 Så med 32 bitar, kan du representerar ungefär negativ 2 1087 00:45:03,550 --> 00:45:06,630 miljarder ända upp till positiv 2 miljarder. 1088 00:45:06,630 --> 00:45:08,750 Och så i det här fallet, vad vi egentligen ser är bara 1089 00:45:08,750 --> 00:45:13,600 i utkanten av kapaciteten i vårt heltal, och vi har, så 1090 00:45:13,600 --> 00:45:15,860 att tala, svämmade ett heltal. 1091 00:45:15,860 --> 00:45:19,180 Vi har försökt att klämma fler bitar i det än kan faktiskt passar. 1092 00:45:19,180 --> 00:45:22,960 Så slutresultatet är vi i huvudsak har alla 1 bitar. 1093 00:45:22,960 --> 00:45:25,280 Vi har vänt alla våra bitar på, har vi försökt att representera 1094 00:45:25,280 --> 00:45:27,630 det största antalet möjliga, men det är helt klart inte alls 1095 00:45:27,630 --> 00:45:30,960 tillräckligt stor för att representera de två saker som jag just skrivit i. 1096 00:45:30,960 --> 00:45:31,730 Ja? 1097 00:45:31,730 --> 00:45:32,980 PUBLIK: [OHÖRBAR] 1098 00:45:37,230 --> 00:45:37,830 >> David J. MALAN: Bra fråga. 1099 00:45:37,830 --> 00:45:40,080 Varför kan vi inte står bara att negativa 1100 00:45:40,080 --> 00:45:41,500 underteckna som bara en karaktär? 1101 00:45:41,500 --> 00:45:44,200 Så vi kunde absolut, och vi kunde sedan spara 1102 00:45:44,200 --> 00:45:45,470 en ytterligare bit. 1103 00:45:45,470 --> 00:45:49,100 Men du fortfarande kommer att behöva representera den streck, och 1104 00:45:49,100 --> 00:45:50,700 det kommer att kosta dig åtminstone något, 1105 00:45:50,700 --> 00:45:52,220 förmodligen lite. 1106 00:45:52,220 --> 00:45:55,610 Så ja, vi kunde ha 32 bitar som används för våra nummer, men nu 1107 00:45:55,610 --> 00:45:57,610 Vi behöver en annan bit som används för vår streck 1108 00:45:57,610 --> 00:45:58,810 symbol, ett minustecken. 1109 00:45:58,810 --> 00:46:01,470 Så nu har vi 33 bitars värden, som vi kan göra, men det är 1110 00:46:01,470 --> 00:46:02,570 bara inte hur det är gjort. 1111 00:46:02,570 --> 00:46:05,140 Vi gjorde en bedömning samtal år sedan, är 32 bitar sortering av 1112 00:46:05,140 --> 00:46:06,170 måttenhet här. 1113 00:46:06,170 --> 00:46:08,120 Så vi kommer att använda en av dessa bitar effektivt 1114 00:46:08,120 --> 00:46:12,950 representerar negativitet och 31 bitar för att representera numret. 1115 00:46:12,950 --> 00:46:15,550 Övriga frågor? 1116 00:46:15,550 --> 00:46:15,670 Okej. 1117 00:46:15,670 --> 00:46:16,030 Det är en hel del. 1118 00:46:16,030 --> 00:46:17,930 Varför inte vi gå vidare och ta vår fem-minuters paus här? 1119 00:46:23,580 --> 00:46:24,270 >> Okej. 1120 00:46:24,270 --> 00:46:31,250 Så återigen, inte överbetona de matematiska tillämpningar 1121 00:46:31,250 --> 00:46:33,840 av programmering, låt oss plocka precis utanför detta ett exempel 1122 00:46:33,840 --> 00:46:36,590 innan vi går in i andra konstruktioner, bara för att det 1123 00:46:36,590 --> 00:46:39,430 kommer att illustrera några vanliga stapplande punkter på några av 1124 00:46:39,430 --> 00:46:41,520 grunderna när det gäller att skriva program. 1125 00:46:41,520 --> 00:46:44,360 I detta fall, gör aritmetiska uttryck som har någon 1126 00:46:44,360 --> 00:46:48,010 intressant relevans för syntaxen. 1127 00:46:48,010 --> 00:46:50,430 >> Så detta är bara en formel som vi kan konvertera 1128 00:46:50,430 --> 00:46:52,690 temperaturer från Fahrenheit till Celsius. 1129 00:46:52,690 --> 00:46:54,600 Om du inte minns, detta är bara formeln. 1130 00:46:54,600 --> 00:46:58,870 Så om vi ansluter i Fahrenheit värde av 32 grader, vilket är 1131 00:46:58,870 --> 00:47:02,850 frysning, det är kommer att bli 32 minus 32 är 0, och faktiskt, 1132 00:47:02,850 --> 00:47:05,130 0 i Celsius är också frysning. 1133 00:47:05,130 --> 00:47:08,210 Så snabb förstånd kontrollera det - det är den välbekanta formeln. 1134 00:47:08,210 --> 00:47:10,880 Låt mig gå över till apparaten, dock, och börja 1135 00:47:10,880 --> 00:47:13,920 skriva ett program som heter, som, F2C, "Fahrenheit till 1136 00:47:13,920 --> 00:47:15,920 Celsius punkt c. ". 1137 00:47:15,920 --> 00:47:18,930 Och upp på toppen här, jag ska börja med # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, och jag kommer att göra int main (void), och 1139 00:47:22,190 --> 00:47:24,680 igen, vi kommer tillbaka i framtiden vad int betyder 1140 00:47:24,680 --> 00:47:26,820 där och vad tomrum innebär att det. 1141 00:47:26,820 --> 00:47:28,770 Och låt mig nu gå vidare och genomföra ett program som 1142 00:47:28,770 --> 00:47:31,170 huvudsak gör denna konvertering för oss. 1143 00:47:31,170 --> 00:47:36,830 >> Så printf, låt oss säga, temperatur i Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 Och låt mig gå vidare och få värdet från användaren. 1145 00:47:40,140 --> 00:47:43,120 Vilken typ av värde ska jag ta från användaren om jag vill 1146 00:47:43,120 --> 00:47:45,620 dem att ge mig en temperatur i Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 Ja? 1148 00:47:48,090 --> 00:47:50,090 Vad skulle du föreslå? 1149 00:47:50,090 --> 00:47:50,410 Ja. 1150 00:47:50,410 --> 00:47:51,960 Så float känns ganska rimligt. 1151 00:47:51,960 --> 00:47:53,950 Vi har återigen några alternativ som 1152 00:47:53,950 --> 00:47:55,310 vi har sett hittills. 1153 00:47:55,310 --> 00:48:00,100 Vi har saker som röding, dubbel, flyta, int, long long, 1154 00:48:00,100 --> 00:48:01,150 bool, sträng. 1155 00:48:01,150 --> 00:48:03,510 Så av dessa känns flyta ganska rimlig. 1156 00:48:03,510 --> 00:48:06,340 Vi skulle kunna använda en dubbel, höger, för om vi verkligen vill 1157 00:48:06,340 --> 00:48:07,580 representerar en människas temperatur - 1158 00:48:07,580 --> 00:48:10,730 98,60000 - 1159 00:48:10,730 --> 00:48:12,990 vi kunde använda 64 bitar för att göra det, men det känns som 1160 00:48:12,990 --> 00:48:14,200 overkill för temperaturen. 1161 00:48:14,200 --> 00:48:16,380 Så låt oss bara gå med flottör. 1162 00:48:16,380 --> 00:48:18,100 Nu behöver jag en variabel. 1163 00:48:18,100 --> 00:48:20,500 Bara för att hålla det enkelt, jag kommer att kalla det f, men jag 1164 00:48:20,500 --> 00:48:23,370 kunde lika rätt kalla det temperatur, 1165 00:48:23,370 --> 00:48:24,600 men antingen är bra. 1166 00:48:24,600 --> 00:48:27,610 Så flyter f = getFloat. 1167 00:48:27,610 --> 00:48:30,220 Så fort jag nu har beslutat att använda getFloat, men jag 1168 00:48:30,220 --> 00:48:33,340 behöva göra en korrigering. 1169 00:48:33,340 --> 00:48:33,720 Ja. 1170 00:48:33,720 --> 00:48:37,460 Så vi måste # include , annars kompilatorn är 1171 00:48:37,460 --> 00:48:39,000 kommer att skrika på oss. 1172 00:48:39,000 --> 00:48:41,720 Nu när jag har en flottör, låt mig gå vidare och göra det 1173 00:48:41,720 --> 00:48:42,460 omvandling. 1174 00:48:42,460 --> 00:48:44,980 >> Så först, låt mig också vänja sig här om 1175 00:48:44,980 --> 00:48:46,310 kommentera min kod. 1176 00:48:46,310 --> 00:48:49,820 Så återigen, är en kommentar bara en notation till människan som är 1177 00:48:49,820 --> 00:48:52,600 inte en del av programmet i sig, men det en, hjälper dig 1178 00:48:52,600 --> 00:48:55,010 förstår vad du gjorde nästa morgon, eller nästa 1179 00:48:55,010 --> 00:48:57,570 månad, det hjälper din undervisning karl förstår vad du gjorde 1180 00:48:57,570 --> 00:48:59,230 eller vad du tänkt göra, så det är 1181 00:48:59,230 --> 00:49:00,950 generellt mycket god praxis. 1182 00:49:00,950 --> 00:49:02,940 Med några rader kod, skriv en kommentar 1183 00:49:02,940 --> 00:49:04,490 dig själv eller din kollega. 1184 00:49:04,490 --> 00:49:08,460 Så här, jag kommer att säga, "Be användaren för temperatur." 1185 00:49:08,460 --> 00:49:10,890 Behöver inte vara en fullständig mening, bara en kort fras. 1186 00:49:10,890 --> 00:49:14,270 Men tanken bakom kommentera i C är att alla dina 1187 00:49:14,270 --> 00:49:17,980 synpunkter bör ge dig - eller, säg, en TF eller en kollega - 1188 00:49:17,980 --> 00:49:21,290 att skumma ditt program och vet exakt vad den gör, genom att inte 1189 00:49:21,290 --> 00:49:24,650 så mycket att läsa koden, men genom att läsa kommentarerna, som 1190 00:49:24,650 --> 00:49:26,220 bör vara koncis och tydlig. 1191 00:49:26,220 --> 00:49:29,030 Okej, så nu låt mig gå vidare och säga, "Konvertera 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit till Celsius. "Så jag ska gå vidare och göra, 1193 00:49:32,660 --> 00:49:34,340 låt oss säga, flyta c.. 1194 00:49:34,340 --> 00:49:36,610 Vi håller Celsius som ett flyttal värde. 1195 00:49:36,610 --> 00:49:37,630 >> Och låt mig ta ett hugg på det här. 1196 00:49:37,630 --> 00:49:40,350 Formeln är, återigen, här uppe. 1197 00:49:40,350 --> 00:49:45,510 Som 5/9 ggr F minus 32. 1198 00:49:45,510 --> 00:49:46,360 Så låt oss göra det här. 1199 00:49:46,360 --> 00:49:50,450 Så 5 dividerat med 9, minus - 1200 00:49:50,450 --> 00:49:52,330 hoppsan, trasslat jag upp redan. 1201 00:49:52,330 --> 00:49:53,070 Gånger. 1202 00:49:53,070 --> 00:49:56,550 Så 5/9 ggr 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 Och nu, här nere, jag ska gå vidare 1205 00:50:02,000 --> 00:50:03,220 och säga, skriv ut resultatet. 1206 00:50:03,220 --> 00:50:05,160 Och denna del är lätt. Printf. 1207 00:50:05,160 --> 00:50:07,980 Hur gör jag för att skriva ut detta? 1208 00:50:07,980 --> 00:50:16,890 Tja, jag kunde säga "Det antalet i Celsius är% f \ n", 1209 00:50:16,890 --> 00:50:18,060 bara för vissa estetik. 1210 00:50:18,060 --> 00:50:20,450 Och vad värde vill jag koppla in här som printf s 1211 00:50:20,450 --> 00:50:21,360 andra argument? 1212 00:50:21,360 --> 00:50:21,650 Okej. 1213 00:50:21,650 --> 00:50:22,540 Så bara c.. 1214 00:50:22,540 --> 00:50:24,760 Så vi börjar med det här och sedan bara returnera 0. 1215 00:50:24,760 --> 00:50:25,960 Återigen, det har inget att göra med matten. 1216 00:50:25,960 --> 00:50:27,610 Det betyder bara allt är bra. 1217 00:50:27,610 --> 00:50:31,210 >> Nu är detta korrekt, det här programmet? 1218 00:50:31,210 --> 00:50:31,520 Okej. 1219 00:50:31,520 --> 00:50:33,630 Så jag har gjort några misstag. 1220 00:50:33,630 --> 00:50:35,980 Även om du har ingen aning om vad programmering är, kan du sortera 1221 00:50:35,980 --> 00:50:37,120 av sluta sig till grundskolan vad 1222 00:50:37,120 --> 00:50:38,740 misstag här kan vara. 1223 00:50:38,740 --> 00:50:40,050 Vad är en av de första? 1224 00:50:40,050 --> 00:50:41,256 PUBLIK: [OHÖRBAR] 1225 00:50:41,256 --> 00:50:41,660 David J. MALAN: Ja. 1226 00:50:41,660 --> 00:50:42,940 Så vi saknar parenteser. 1227 00:50:42,940 --> 00:50:45,420 Det var avsiktligt att jag gjorde parenteser i grundtonen 1228 00:50:45,420 --> 00:50:48,130 glida här, eftersom det finns faktiskt denna uppfattning av ordning 1229 00:50:48,130 --> 00:50:51,590 av verksamheten, eller företräde, varvid vissa verksamheter - 1230 00:50:51,590 --> 00:50:52,890 multiplikation - 1231 00:50:52,890 --> 00:50:56,000 har högre bindande, har högre prioritet, än saker 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 detta i flera år bara för att klargöra exakt 1234 00:51:00,550 --> 00:51:02,840 vad matematisk operation bör göras först. 1235 00:51:02,840 --> 00:51:05,010 Så jag skulle nog efterlikna just detta. 1236 00:51:05,010 --> 00:51:08,990 Annars är datorn går förmodligen att försöka göra 1237 00:51:08,990 --> 00:51:13,090 något som klyftan 5 av 9, sedan multiplicera F, sedan subtrahera 1238 00:51:13,090 --> 00:51:14,850 32 från det hela. 1239 00:51:14,850 --> 00:51:16,480 Vilket faktiskt inte vad vi vill göra. 1240 00:51:16,480 --> 00:51:17,340 Så låt oss INSKJUTA SOM PARENTES. 1241 00:51:17,340 --> 00:51:20,860 Låt oss lägga till mina parenteser här, parenteser här. 1242 00:51:20,860 --> 00:51:22,670 Låt oss sätta detta här. 1243 00:51:22,670 --> 00:51:25,130 Här märkte jag bara ett misstag jag gjorde på vägen. 1244 00:51:25,130 --> 00:51:25,680 Ja? 1245 00:51:25,680 --> 00:51:26,930 PUBLIK: [OHÖRBAR] 1246 00:51:29,632 --> 00:51:30,130 >> David J. MALAN: Ah. 1247 00:51:30,130 --> 00:51:30,470 Bra. 1248 00:51:30,470 --> 00:51:32,400 Så vi har faktiskt samma heltal 1249 00:51:32,400 --> 00:51:34,020 division fråga från förr. 1250 00:51:34,020 --> 00:51:35,800 Jag rätta att, låt oss se vad symtomet är. 1251 00:51:35,800 --> 00:51:36,990 Men vi kommer att behöva rätta till ett 1252 00:51:36,990 --> 00:51:37,680 andra misstag här. 1253 00:51:37,680 --> 00:51:38,015 Ja? 1254 00:51:38,015 --> 00:51:39,540 PUBLIK: [OHÖRBAR] 1255 00:51:39,540 --> 00:51:40,070 David J. MALAN: Ja. 1256 00:51:40,070 --> 00:51:43,130 Så dumt misstag som jag gjorde, men oerhört viktigt. 1257 00:51:43,130 --> 00:51:45,870 Datorn kommer inte att bara blunda och låta 1258 00:51:45,870 --> 00:51:48,770 mig använda kapitalet F, när jag faktiskt deklarerat variabeln 1259 00:51:48,770 --> 00:51:51,360 som ett gement f här, i linje 8. 1260 00:51:51,360 --> 00:51:54,470 Så jag behöver korrigera i linje 11 min kapitalisering, som en 1261 00:51:54,470 --> 00:51:56,820 stund sedan var ett kapital F av misstag. 1262 00:51:56,820 --> 00:51:57,610 Vad om här? 1263 00:51:57,610 --> 00:51:59,980 Skulle detta vara gemener också? 1264 00:51:59,980 --> 00:52:02,260 Det bör vara, men det är en tillfällighet. 1265 00:52:02,260 --> 00:52:05,070 Denna% f har ingenting att göra med variabeln. 1266 00:52:05,070 --> 00:52:07,980 Så bara för att vara super tydlig här, låt mig gå vidare och 1267 00:52:07,980 --> 00:52:10,710 byta namn på, kortfattat, "temperatur". Låt mig döpa 1268 00:52:10,710 --> 00:52:15,050 detta "temperatur". Låt mig inte att byta namn här. 1269 00:52:15,050 --> 00:52:18,180 Jo, en gång,% f globalt betyder "flyttal." 1270 00:52:18,180 --> 00:52:19,950 Har ingenting att göra med min variabel. 1271 00:52:19,950 --> 00:52:23,080 Men "temperatur" överallt är bara lite ordrik, 1272 00:52:23,080 --> 00:52:25,370 så jag kommer att gå tillbaka till min gement "f" s. 1273 00:52:25,370 --> 00:52:27,890 >> Låt mig nu gå vidare ner till mitt fönster här. 1274 00:52:27,890 --> 00:52:29,190 Gör f2c - 1275 00:52:29,190 --> 00:52:31,200 vilket återigen den godtyckliga namn jag 1276 00:52:31,200 --> 00:52:32,590 gav till den här filen. 1277 00:52:32,590 --> 00:52:33,690 Verkar har sammanställt. 1278 00:52:33,690 --> 00:52:35,080 Låt mig köra f2c. 1279 00:52:35,080 --> 00:52:35,780 Enter. 1280 00:52:35,780 --> 00:52:37,786 Temperatur i Fahrenheit - låt oss göra lätt. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, korrigera. 1283 00:52:40,910 --> 00:52:45,910 Men om jag gör nu 212 för kokning - 1284 00:52:45,910 --> 00:52:46,630 fan. 1285 00:52:46,630 --> 00:52:47,030 Okej. 1286 00:52:47,030 --> 00:52:50,780 Så klart inte korrigera om din TF försöker 1287 00:52:50,780 --> 00:52:51,800 minst två värden. 1288 00:52:51,800 --> 00:52:53,340 Så vad är problemet här? 1289 00:52:53,340 --> 00:52:55,970 Tja, lägger du redan fingret på vad problemet är. 1290 00:52:55,970 --> 00:52:57,600 Men varför är det så? 1291 00:52:57,600 --> 00:53:00,630 Här uppe, när jag gör matten av 5 dividerat med 9. 1292 00:53:00,630 --> 00:53:02,190 Så begreppsmässigt, det helt rätt. 1293 00:53:02,190 --> 00:53:03,690 Helt i överensstämmelse med formeln. 1294 00:53:03,690 --> 00:53:05,940 Men datorer gör bara precis vad du 1295 00:53:05,940 --> 00:53:06,760 berätta för dem att göra. 1296 00:53:06,760 --> 00:53:08,940 Och vad vi faktiskt säger datorn här är 1297 00:53:08,940 --> 00:53:12,320 dela heltalet 5 av heltalet 9 1298 00:53:12,320 --> 00:53:13,670 och ge mig resultatet. 1299 00:53:13,670 --> 00:53:16,230 Problemet är, men när du gör division med hjälp av data 1300 00:53:16,230 --> 00:53:20,220 typer, är utsignalen samma datatyp som ingångarna. 1301 00:53:20,220 --> 00:53:23,670 Och så om de två ingångarna är båda Ints är utgången går 1302 00:53:23,670 --> 00:53:25,110 att vara en int. 1303 00:53:25,110 --> 00:53:28,770 Och så 5 delat med 9 är punkt något. 1304 00:53:28,770 --> 00:53:32,320 Men vad är det närmaste heltal till punkt något? 1305 00:53:32,320 --> 00:53:33,630 Så det är faktiskt 0. 1306 00:53:33,630 --> 00:53:36,620 Så som vi diskuterade på måndagen, allt efter decimalkommat 1307 00:53:36,620 --> 00:53:37,940 punkt blir trunkerad. 1308 00:53:37,940 --> 00:53:39,495 Det blir bara kastas bort. 1309 00:53:39,495 --> 00:53:42,760 Så detta är ett komplett misstag, eftersom jag kan lika gärna 1310 00:53:42,760 --> 00:53:44,700 multiplicera allt med 0 här. 1311 00:53:44,700 --> 00:53:46,550 >> Nu kan jag fixa detta på ett par olika sätt. 1312 00:53:46,550 --> 00:53:48,080 Jag kunde göra detta. 1313 00:53:48,080 --> 00:53:50,490 5,0 dividerat med 9,0. 1314 00:53:50,490 --> 00:53:52,110 Tekniskt, jag behöver inte ens göra det. 1315 00:53:52,110 --> 00:53:55,780 Det räcker att bara göra en av de nummer en flottör - 1316 00:53:55,780 --> 00:53:58,290 eller dubbel - genom att decimalkommat här. 1317 00:53:58,290 --> 00:54:01,740 För vad händer nu är när du delar ett heltal av 1318 00:54:01,740 --> 00:54:04,670 en flottör, eller en dubbel, är datorn kommer att inse 1319 00:54:04,670 --> 00:54:06,830 Åh, är en av de mer exakt. 1320 00:54:06,830 --> 00:54:09,420 Låt mig fela på sidan av att ge dig mer precision än 1321 00:54:09,420 --> 00:54:10,310 du tänkt. 1322 00:54:10,310 --> 00:54:12,700 Så det kommer att konvertera resultatet - 1323 00:54:12,700 --> 00:54:16,240 den kommer tillbaka resultatet som ett flyttal värde också. 1324 00:54:16,240 --> 00:54:17,330 Så det skulle fungera. 1325 00:54:17,330 --> 00:54:18,060 Detta skulle fungera. 1326 00:54:18,060 --> 00:54:20,010 Och det finns en annan mekanism som vi ser i 1327 00:54:20,010 --> 00:54:21,390 närmare nästa vecka. 1328 00:54:21,390 --> 00:54:24,690 Du kan faktiskt, som programmerare, tala om för datorn 1329 00:54:24,690 --> 00:54:27,930 att faktiskt behandla en datatyp som 1330 00:54:27,930 --> 00:54:29,260 även om det var en annan. 1331 00:54:29,260 --> 00:54:30,990 >> Så jag kunde faktiskt göra detta. 1332 00:54:30,990 --> 00:54:35,280 Inom parentes kan jag säga något i stil med (float), öppen 1333 00:54:35,280 --> 00:54:36,350 paren, nära parentes. 1334 00:54:36,350 --> 00:54:39,050 Och detta är vad som kallas "gjutning." Återigen, mer 1335 00:54:39,050 --> 00:54:39,940 på detta nästa vecka. 1336 00:54:39,940 --> 00:54:42,280 Men detta är bara programmatiska sätt att berätta 1337 00:54:42,280 --> 00:54:45,910 datorn, ja jag vet 9 är ett heltal eller en lång. 1338 00:54:45,910 --> 00:54:47,700 Jag vet att det inte är en flyttal värde. 1339 00:54:47,700 --> 00:54:49,420 Men behandla den som sådan i alla fall. 1340 00:54:49,420 --> 00:54:52,000 Så för att kasta en datatyp innebär att omvandla 1341 00:54:52,000 --> 00:54:53,310 från det ena till det andra. 1342 00:54:53,310 --> 00:54:55,790 Ärligt talat, det är bara lite ful, så jag skulle föreslå att vi går 1343 00:54:55,790 --> 00:54:58,830 tillbaka till det ursprungliga förslaget för att bara konvertera 1344 00:54:58,830 --> 00:55:00,770 dessa saker till flyttal värden manuellt. 1345 00:55:00,770 --> 00:55:02,890 För nu är det bara super tydligt vad som händer, och 1346 00:55:02,890 --> 00:55:04,280 det är inte allt som störande. 1347 00:55:04,280 --> 00:55:06,710 >> Så låt oss nu gå tillbaka till mitt terminalfönster. 1348 00:55:06,710 --> 00:55:07,990 Gör f2c. 1349 00:55:07,990 --> 00:55:09,430 Låt mig gå vidare och köra. 1350 00:55:09,430 --> 00:55:12,340 Och som en sidoreplik, får du uttråkad skriva dessa kommandon 1351 00:55:12,340 --> 00:55:14,910 om och om igen, inse att datorer, som Linux här, 1352 00:55:14,910 --> 00:55:16,010 tenderar att vara ganska smart. 1353 00:55:16,010 --> 00:55:18,890 Och om jag slog upp, kan vi gå igenom hela min historia 1354 00:55:18,890 --> 00:55:20,380 kommandon, upp och ner. 1355 00:55:20,380 --> 00:55:23,840 Så i detta fall här, kan jag bara gå upp för att köra göra f2c. 1356 00:55:23,840 --> 00:55:25,830 Jag blir skrek åt, eftersom jag bara gjorde det för en sekund sedan. 1357 00:55:25,830 --> 00:55:27,030 Det är redan aktuell. 1358 00:55:27,030 --> 00:55:30,720 Så nu kan jag köra f2c igen. 1359 00:55:30,720 --> 00:55:33,260 Låt oss försöka 32 Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 Nu ska vi försöka 212 Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Puh. 1362 00:55:37,250 --> 00:55:38,250 Verkar fungera. 1363 00:55:38,250 --> 00:55:41,760 Nu är det bra, men det känns lite godtyckligt att 1364 00:55:41,760 --> 00:55:44,890 Jag visar sex siffror efter decimalkomma. 1365 00:55:44,890 --> 00:55:45,070 Eller hur? 1366 00:55:45,070 --> 00:55:47,830 Om du är vädret personen på TV, du typ av Doofus 1367 00:55:47,830 --> 00:55:49,150 om du läser av temperaturen till 1368 00:55:49,150 --> 00:55:50,070 denna grad av precision. 1369 00:55:50,070 --> 00:55:51,270 Så låt oss förenkla detta. 1370 00:55:51,270 --> 00:55:53,880 Så låt oss faktiskt gå upp här, till min printf. 1371 00:55:53,880 --> 00:55:55,490 Och ja, jag vill flyta. 1372 00:55:55,490 --> 00:55:57,570 Men jag vill nu ange precisionen. 1373 00:55:57,570 --> 00:55:59,070 Och jag kommer att vara lite kortfattad. 1374 00:55:59,070 --> 00:56:03,090 Jag ska säga, ge mig en punkt efter decimal. 1375 00:56:03,090 --> 00:56:07,590 Så i stället för att säga% f, jag kommer att säga% .1 f. 1376 00:56:07,590 --> 00:56:09,760 Och detta betyder bara ge mig en plats 1377 00:56:09,760 --> 00:56:11,410 efter decimalkommat. 1378 00:56:11,410 --> 00:56:11,700 Okej. 1379 00:56:11,700 --> 00:56:12,570 Låt oss prova det här igen. 1380 00:56:12,570 --> 00:56:15,590 Låt mig köra det efter kompilering. 1381 00:56:15,590 --> 00:56:18,160 Och nu har jag skriver i 32, och jag får tillbaka en 1382 00:56:18,160 --> 00:56:19,310 mer kortfattad värde. 1383 00:56:19,310 --> 00:56:22,480 Och jag kan skriva i, nu 212, och få tillbaka en mer kortfattad 1384 00:56:22,480 --> 00:56:23,260 värde samt. 1385 00:56:23,260 --> 00:56:25,190 Och det finns andra saker du kan göra med printf. 1386 00:56:25,190 --> 00:56:27,950 Du kan faktiskt ange hur stort antalet ska vara. 1387 00:56:27,950 --> 00:56:30,900 Om du vill ha stoppning på det, så att du kan högerjustera eller 1388 00:56:30,900 --> 00:56:32,360 vänster-align alla dina nummer eller 1389 00:56:32,360 --> 00:56:33,400 Försök till centrum saker. 1390 00:56:33,400 --> 00:56:35,340 Så inser att det finns små knep man kan göra där. 1391 00:56:35,340 --> 00:56:38,420 Men de koka bara ner till formatkoder, 1392 00:56:38,420 --> 00:56:39,600 som vi har där. 1393 00:56:39,600 --> 00:56:41,090 >> Så när det gäller det här numret av företräde. 1394 00:56:41,090 --> 00:56:43,820 Detta är en mycket tråkig bord att gå igenom metodiskt. 1395 00:56:43,820 --> 00:56:46,780 Men inser att författarna av C har kommit upp med 1396 00:56:46,780 --> 00:56:50,190 regler som anger vilka operatörer har högre 1397 00:56:50,190 --> 00:56:53,680 företräde, mer bindande kraft, än andra. 1398 00:56:53,680 --> 00:56:55,890 Så medan i grundskolan, visste vi i allmänhet att det var 1399 00:56:55,890 --> 00:56:58,930 multiplikation och division, sedan addition och subtraktion, 1400 00:56:58,930 --> 00:56:59,950 sedan några andra saker. 1401 00:56:59,950 --> 00:57:01,720 I en värld av programmering, det finns en mycket 1402 00:57:01,720 --> 00:57:03,360 längre lista över saker. 1403 00:57:03,360 --> 00:57:05,150 Och detta är inte något som är värt att memorera nu. 1404 00:57:05,150 --> 00:57:07,310 Du ska få acklimatiserad till det snart. 1405 00:57:07,310 --> 00:57:10,690 Men precis som i grundskolan, parenteser löser allmänhet 1406 00:57:10,690 --> 00:57:12,990 frågor om företräde, genom att super klart för 1407 00:57:12,990 --> 00:57:15,620 dator och människa både vad som avses. 1408 00:57:15,620 --> 00:57:17,770 Så anser att detta bara lite fusklapp där. 1409 00:57:17,770 --> 00:57:21,690 Men de flesta av dessa detaljer som vi inte kommer att få en tid. 1410 00:57:21,690 --> 00:57:21,900 >> Okej. 1411 00:57:21,900 --> 00:57:24,120 Nu ska vi bygga upp och röra sig bort från dessa fåniga små 1412 00:57:24,120 --> 00:57:25,460 matematiska exempel. 1413 00:57:25,460 --> 00:57:27,500 Fortfarande använder samma fundamenta, men börja 1414 00:57:27,500 --> 00:57:29,960 uttrycka oss lite mer som Scratch. 1415 00:57:29,960 --> 00:57:31,660 Så i Scratch hade vi dessa booleska uttryck. 1416 00:57:31,660 --> 00:57:34,890 Och på engelska, är ett booleskt uttryck vad? 1417 00:57:34,890 --> 00:57:35,580 Sant eller falskt. 1418 00:57:35,580 --> 00:57:38,300 Det är något som utvärderas till sant eller falskt. 1419 00:57:38,300 --> 00:57:39,060 1 eller 0. 1420 00:57:39,060 --> 00:57:39,870 På eller av. 1421 00:57:39,870 --> 00:57:41,000 Vad du än vill kalla det. 1422 00:57:41,000 --> 00:57:43,210 Nu i Scratch, såg pusselbitarna så här. 1423 00:57:43,210 --> 00:57:45,850 Och det är kombinationen, på botten där, på tre 1424 00:57:45,850 --> 00:57:47,980 pusselbitar. 1425 00:57:47,980 --> 00:57:48,980 En kombination - 1426 00:57:48,980 --> 00:57:51,710 något som har tomt och tomt. 1427 00:57:51,710 --> 00:57:53,970 Och sedan två booleska uttryck i den. 1428 00:57:53,970 --> 00:57:56,460 Så du kan kapsla booleska uttryck för att få mer 1429 00:57:56,460 --> 00:57:59,360 komplicerade booleska uttryck. 1430 00:57:59,360 --> 00:58:03,930 Till exempel, om det är lördag, och det är trevligt 1431 00:58:03,930 --> 00:58:06,180 väder, gå utanför. 1432 00:58:06,180 --> 00:58:07,500 Eller något godtyckligt sådant. 1433 00:58:07,500 --> 00:58:10,090 Så du kan gå booleska uttryck för att komma fram till en 1434 00:58:10,090 --> 00:58:12,780 större sanning värde, vars svar är baserad 1435 00:58:12,780 --> 00:58:13,800 på de mindre. 1436 00:58:13,800 --> 00:58:15,770 >> Nu i C, tack och lov, är denna kartläggning 1437 00:58:15,770 --> 00:58:16,720 faktiskt ganska enkelt. 1438 00:58:16,720 --> 00:58:18,820 Parenteser bidra till att göra saker och ting klara här. 1439 00:58:18,820 --> 00:58:21,700 && Är vad betyder "och". Så det är hur 1440 00:58:21,700 --> 00:58:24,700 vi kommer att omvandla dessa block från Scratch till C. 1441 00:58:24,700 --> 00:58:27,590 Och för de förhållanden som vi såg i Scratch, till vänster 1442 00:58:27,590 --> 00:58:31,150 sida där kan jag stapla dem på samma sätt i C. Om x är mindre 1443 00:58:31,150 --> 00:58:32,970 än Y, sedan göra det. 1444 00:58:32,970 --> 00:58:35,100 Else if x är större än y, så gör det. 1445 00:58:35,100 --> 00:58:38,030 Annars logiskt att de måste vara lika, så att säga 1446 00:58:38,030 --> 00:58:39,140 att de är lika. 1447 00:58:39,140 --> 00:58:41,210 Så vi kan nu börja bygga dessa saker. 1448 00:58:41,210 --> 00:58:42,170 >> Så låt oss göra ett exempel. 1449 00:58:42,170 --> 00:58:45,550 Låt mig öppna upp en fil som är på kursens webbplats som 1450 00:58:45,550 --> 00:58:47,270 Jag skrev i förväg. 1451 00:58:47,270 --> 00:58:50,540 Det kallas nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 Och vi får se varför bara ett ögonblick. 1453 00:58:52,270 --> 00:58:54,770 Så i den här filen - nonswitch.c-- 1454 00:58:54,770 --> 00:58:56,830 först inse att det finns en hel massa 1455 00:58:56,830 --> 00:58:58,460 kommentarer på toppen. 1456 00:58:58,460 --> 00:59:00,110 Som bara förklara namnet på filen, vad den 1457 00:59:00,110 --> 00:59:01,260 gör, och så vidare. 1458 00:59:01,260 --> 00:59:04,390 Och det visar tydligen att använda Boolean AND-ning - 1459 00:59:04,390 --> 00:59:06,220 conjoining två uttryck. 1460 00:59:06,220 --> 00:59:07,670 >> Så låt oss se hur det här programmet fungerar. 1461 00:59:07,670 --> 00:59:10,840 Jag har mina två filer, cs50.h och stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Om jag bläddra ner, nu till programmet, är det lite längre 1463 00:59:13,180 --> 00:59:15,730 än vi har skrivit tidigare, men ganska lättläst. 1464 00:59:15,730 --> 00:59:18,360 Så jag skriva först till användaren, på linje 18, 1465 00:59:18,360 --> 00:59:20,460 "Ge mig ett heltal mellan 1 och 10." Så 1466 00:59:20,460 --> 00:59:21,530 Det är just där. 1467 00:59:21,530 --> 00:59:23,410 Nu får jag heltalet. 1468 00:59:23,410 --> 00:59:25,380 Men inser att getInt - ganska enkel. 1469 00:59:25,380 --> 00:59:26,510 Det kommer bara att få en int. 1470 00:59:26,510 --> 00:59:28,830 Det kommer att se till att det blir en int och inte en 1471 00:59:28,830 --> 00:59:30,060 sträng eller en flottör. 1472 00:59:30,060 --> 00:59:32,390 Men det kommer inte att göra någon form av gräns kontroll. 1473 00:59:32,390 --> 00:59:34,750 Det kommer inte att filtrera siffrorna till mellan en 1474 00:59:34,750 --> 00:59:35,630 visst intervall. 1475 00:59:35,630 --> 00:59:37,730 Så vi måste genomföra det själva. 1476 00:59:37,730 --> 00:59:40,680 Så precis som i Scratch, där jag kunde göra en kombination av 1477 00:59:40,680 --> 00:59:43,560 två uttryck, kan jag göra det i C enligt följande. 1478 00:59:43,560 --> 00:59:48,660 Om n är större än eller lika med 1, och n är mindre än och 1479 00:59:48,660 --> 00:59:52,220 eller lika med 3, kommer jag att mycket godtyckligt dekret som 1480 00:59:52,220 --> 00:59:53,830 nummer att vara ett litet antal. 1481 00:59:53,830 --> 00:59:56,730 Bara för att ett uttalande. 1482 00:59:56,730 --> 01:00:00,210 Else if n är mellan 4 och 6, print "Du valde ett medium 1483 01:00:00,210 --> 01:00:03,440 nummer. "Else om n är mellan 7 och 10, tryck" Du valde en 1484 01:00:03,440 --> 01:00:06,390 stort antal. "Else print" Du väljer ett ogiltigt nummer. " 1485 01:00:06,390 --> 01:00:07,900 Eftersom logiskt följer att om vi har 1486 01:00:07,900 --> 01:00:09,230 uttömt vårt sortiment. 1487 01:00:09,230 --> 01:00:12,400 >> Så inser detta är inte riktigt hur vi skriver större än eller 1488 01:00:12,400 --> 01:00:15,000 lika med en matte klass. 1489 01:00:15,000 --> 01:00:15,160 Eller hur? 1490 01:00:15,160 --> 01:00:17,430 Du ritar brukar det så här, med linjen under den. 1491 01:00:17,430 --> 01:00:19,250 Men det finns ingen sådan knapp på mitt tangentbord. 1492 01:00:19,250 --> 01:00:22,390 Så symbolen i C för att uttrycka större än eller 1493 01:00:22,390 --> 01:00:25,770 lika med är två tecken och symbolen för mindre än 1494 01:00:25,770 --> 01:00:29,100 eller lika med är två tecken också. 1495 01:00:29,100 --> 01:00:29,330 Okej. 1496 01:00:29,330 --> 01:00:31,910 Så om jag kör det här programmet kan du nog gissa vad det är 1497 01:00:31,910 --> 01:00:32,650 kommer att göra. 1498 01:00:32,650 --> 01:00:36,180 Om jag gå vidare och göra nonswitch, Enter. 1499 01:00:36,180 --> 01:00:38,130 Och kör sedan nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Ge mig ett nummer mellan 1 och 10. 1501 01:00:39,530 --> 01:00:40,870 Jag ska ge det 11. 1502 01:00:40,870 --> 01:00:42,280 Jag plockade ett ogiltigt nummer. 1503 01:00:42,280 --> 01:00:44,090 Låt mig försöka siffran 3. 1504 01:00:44,090 --> 01:00:45,990 Jag plockade ett litet antal. 1505 01:00:45,990 --> 01:00:48,360 Så ganska enkelt där. 1506 01:00:48,360 --> 01:00:52,230 >> Vad händer om jag vill ändra beteendet hos detta program och 1507 01:00:52,230 --> 01:00:54,250 göra något lite annorlunda istället? 1508 01:00:54,250 --> 01:00:57,620 Låt mig gå vidare och säga detta. 1509 01:00:57,620 --> 01:00:59,480 Låt mig bli av med allt detta. 1510 01:00:59,480 --> 01:01:03,780 Och låt mig säga om (n == 42). 1511 01:01:03,780 --> 01:01:08,730 Och då ska jag gå vidare och säga print "Du valde 1512 01:01:08,730 --> 01:01:16,340 rätt svar. "Annars kommer vi att gå vidare och säga, 1513 01:01:16,340 --> 01:01:18,460 printf ("Du valde 1514 01:01:18,460 --> 01:01:21,170 fel svar "),. Okej. 1515 01:01:21,170 --> 01:01:22,040 Bara för att. 1516 01:01:22,040 --> 01:01:23,890 >> Nu, några punkter vi kan göra här. 1517 01:01:23,890 --> 01:01:26,570 En, jag skriver inte den symbol som man skulle kunna tro är 1518 01:01:26,570 --> 01:01:27,390 mest rimliga. 1519 01:01:27,390 --> 01:01:30,110 När jag vill kontrollera jämställdhet visar sig att du inte använder 1520 01:01:30,110 --> 01:01:30,910 likhetstecken. 1521 01:01:30,910 --> 01:01:34,000 Du använder istället lika likhetstecknet. 1522 01:01:34,000 --> 01:01:36,440 Och varför skulle det vara, bara intuitivt? 1523 01:01:36,440 --> 01:01:37,030 Ja. 1524 01:01:37,030 --> 01:01:39,330 PUBLIK: [OHÖRBAR] 1525 01:01:39,330 --> 01:01:39,615 David J. MALAN: Rätt. 1526 01:01:39,615 --> 01:01:41,630 Likhetstecknet används redan för tilldelning. 1527 01:01:41,630 --> 01:01:43,020 Någon har inte riktigt tänka igenom det här. 1528 01:01:43,020 --> 01:01:45,820 Och så nu, när det kommer till jämställdhet tester måste vi 1529 01:01:45,820 --> 01:01:48,850 vara mer explicit, och säger lika jämlikar. 1530 01:01:48,850 --> 01:01:52,110 Ett mycket vanligt misstag är att göra detta. 1531 01:01:52,110 --> 01:01:54,800 Och om i kontorstid eller någon gång nästa vecka eller i 1532 01:01:54,800 --> 01:01:58,340 nästa två veckor du göra något liknande och sedan 1533 01:01:58,340 --> 01:02:00,920 kämpa med det för 10, 20 minuter att försöka lista ut 1534 01:02:00,920 --> 01:02:03,330 vad den jävla bugg är, inse att du är en av dem 1535 01:02:03,330 --> 01:02:04,470 människor som gjort detta misstag. 1536 01:02:04,470 --> 01:02:06,030 Så super lätt att göra. 1537 01:02:06,030 --> 01:02:08,240 Men målet är nu att avvärja detta misstag. 1538 01:02:08,240 --> 01:02:11,840 Detta kan utvärdera eftersom det är det verkligen säger? 1539 01:02:11,840 --> 01:02:15,010 Om n får 42. 1540 01:02:15,010 --> 01:02:18,250 Så verbet människor använder, verbalt, att uttrycka 1541 01:02:18,250 --> 01:02:21,800 begreppet uppdrag är "får". Så om n får 42. 1542 01:02:21,800 --> 01:02:24,060 Så betyder tilldela 42 till n. 1543 01:02:24,060 --> 01:02:26,250 Nu har jag ett booleskt uttryck inom parentes, 1544 01:02:26,250 --> 01:02:30,230 insidan av detta tillstånd, är det värde 42. 1545 01:02:30,230 --> 01:02:30,390 Eller hur? 1546 01:02:30,390 --> 01:02:32,690 För om du utvärdera den inifrån och ut, det totala 1547 01:02:32,690 --> 01:02:34,100 svar, nu är 42. 1548 01:02:34,100 --> 01:02:37,360 >> Så om jag frågade dig frågan, "om (42)," vad är 1549 01:02:37,360 --> 01:02:38,410 att säga egentligen? 1550 01:02:38,410 --> 01:02:40,990 Tja, kan booleska uttryck endast sant eller falskt. 1551 01:02:40,990 --> 01:02:42,010 1 eller 0. 1552 01:02:42,010 --> 01:02:43,010 På eller av. 1553 01:02:43,010 --> 01:02:45,240 Så vi verkar ha ett hörn fallet här, där alla en 1554 01:02:45,240 --> 01:02:50,060 plötsligt, jag säger "om (42)". Det är inte ett booleskt värde. 1555 01:02:50,060 --> 01:02:54,500 Så vad datorer gör, är det dock i huvudsak motsvarar 1556 01:02:54,500 --> 01:02:58,620 något som inte är 0 tolkas för att vara sant. 1557 01:02:58,620 --> 01:02:59,340 1. 1558 01:02:59,340 --> 01:02:59,690 På. 1559 01:02:59,690 --> 01:03:01,510 De är alla funktionellt likvärdiga. 1560 01:03:01,510 --> 01:03:05,070 Endast värdet 0 eller nyckelordet falska, som vi ska 1561 01:03:05,070 --> 01:03:07,860 småningom se, är faktiskt falskt. 1562 01:03:07,860 --> 01:03:15,040 Så "om (42)" skulle faktiskt vara sant, eftersom det är icke-noll. 1563 01:03:15,040 --> 01:03:18,620 Så för att vara mer exakt här, är ett booleskt värde egentligen inte så 1564 01:03:18,620 --> 01:03:20,680 mycket sant eller falskt, men för detta 1565 01:03:20,680 --> 01:03:24,650 fallet, om är 0 eller icke-noll. 1566 01:03:24,650 --> 01:03:26,330 Så falsk eller inte falsk. 1567 01:03:26,330 --> 01:03:28,640 Och det gör att vi kan omfatta allt mer 1568 01:03:28,640 --> 01:03:30,980 möjligheter i uttrycket inom parenteser. 1569 01:03:30,980 --> 01:03:33,840 Så vi måste, aldrig så noga, säger detta - 1570 01:03:33,840 --> 01:03:35,620 if (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Helt enkelt därför att vi måste ange ett test av jämlikhet, 1572 01:03:39,100 --> 01:03:40,930 inte en överlåtelse av ett värde. 1573 01:03:40,930 --> 01:03:42,830 >> Vad är värt att notera här? 1574 01:03:42,830 --> 01:03:46,030 Dessa klammerparenteser är faktiskt inte nödvändigt. 1575 01:03:46,030 --> 01:03:48,650 Jag har gjort dem bara för att vara nit-kräsen här. 1576 01:03:48,650 --> 01:03:51,350 Men när du har ett tillstånd som bara har en rad av 1577 01:03:51,350 --> 01:03:55,100 kod, som en bekvämlighet, behöver programmerare inte använda 1578 01:03:55,100 --> 01:03:56,030 klammerparenteserna. 1579 01:03:56,030 --> 01:03:59,370 Det räcker att bara strecksatsen, av estetiska skäl, och 1580 01:03:59,370 --> 01:04:01,050 Skriv sedan kodrad. 1581 01:04:01,050 --> 01:04:04,160 Först när du vill skriva två rader kod - för 1582 01:04:04,160 --> 01:04:08,230 exempel, annars printf ("Hej!"). Om du vill göra 1583 01:04:08,230 --> 01:04:09,540 att detta bryts. 1584 01:04:09,540 --> 01:04:11,700 Du kan dra allt du vill, men det faktum att du har 1585 01:04:11,700 --> 01:04:14,600 skrivit två rader kod utan att använda klammerparenteser 1586 01:04:14,600 --> 01:04:16,860 innebär att detta program inte skulle fungera eller kanske 1587 01:04:16,860 --> 01:04:18,530 inte ens kompilera korrekt. 1588 01:04:18,530 --> 01:04:21,040 Så för nu, för att vara ärlig, jag tror det bästa vana är bara 1589 01:04:21,040 --> 01:04:24,460 Använd klammerparenteser, och du kommer att upptäcka att de gör 1590 01:04:24,460 --> 01:04:25,750 Super Clear vad som händer. 1591 01:04:25,750 --> 01:04:29,410 >> Också, som en parentes - särskilt om du är bland dem som använder 1592 01:04:29,410 --> 01:04:31,700 de rekommenderade böcker eller resurser på nätet - 1593 01:04:31,700 --> 01:04:33,480 inser att det är det här begreppet stil i 1594 01:04:33,480 --> 01:04:34,130 programmering. 1595 01:04:34,130 --> 01:04:37,280 Och en del människor föredrar faktiskt att sätta klammerparentes 1596 01:04:37,280 --> 01:04:38,720 hit på en linje. 1597 01:04:38,720 --> 01:04:41,520 Vissa människor föredrar att göra löjliga saker, 1598 01:04:41,520 --> 01:04:43,830 gillar ställa dem här. 1599 01:04:43,830 --> 01:04:45,140 Det finns ingen fel svar när det gäller 1600 01:04:45,140 --> 01:04:46,710 stil, men det är fel. 1601 01:04:46,710 --> 01:04:47,700 Men vissa människor gör det. 1602 01:04:47,700 --> 01:04:49,160 [Skratt] 1603 01:04:49,160 --> 01:04:51,760 David J. MALAN: Så jag nämner detta nu, helt enkelt eftersom så 1604 01:04:51,760 --> 01:04:54,400 du läser upp på saker i böcker eller på nätet, du kommer att få 1605 01:04:54,400 --> 01:04:55,990 olika budskap från olika lärare och 1606 01:04:55,990 --> 01:04:56,730 olika författare. 1607 01:04:56,730 --> 01:04:58,640 Och bara inse att, funktionellt, de är 1608 01:04:58,640 --> 01:05:00,740 generellt likvärdiga, men vara konsekvent. 1609 01:05:00,740 --> 01:05:02,850 Så i det här fallet kommer vi standardisera på lockigt 1610 01:05:02,850 --> 01:05:04,650 hängslen kö här till vänster. 1611 01:05:04,650 --> 01:05:04,910 >> Okej. 1612 01:05:04,910 --> 01:05:07,040 Så låt oss gå vidare nu och kör detta, och se vad som händer 1613 01:05:07,040 --> 01:05:07,780 med detta program. 1614 01:05:07,780 --> 01:05:09,970 Gör nonswitch. 1615 01:05:09,970 --> 01:05:11,040 Kör sedan nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Ge mig ett heltal mellan 0 och - så det är inte relevant 1617 01:05:13,900 --> 01:05:16,480 längre, men jag ska bara godtyckligt säga 42. 1618 01:05:16,480 --> 01:05:17,850 Och jag valde det rätta svaret. 1619 01:05:17,850 --> 01:05:20,430 Nåväl nu, låt oss faktiskt ta i en annan riktning. 1620 01:05:20,430 --> 01:05:22,070 Det visar sig att det finns någon annan syntax vi 1621 01:05:22,070 --> 01:05:23,480 kan använda i ett program. 1622 01:05:23,480 --> 01:05:27,310 Här är en ny bit av syntax som är funktionellt densamma, 1623 01:05:27,310 --> 01:05:30,680 men bara inför ett annat sätt att uttrycka oss själva. 1624 01:05:30,680 --> 01:05:32,830 Så detta är vad som kallas en "switch uttalande." Och en 1625 01:05:32,830 --> 01:05:34,820 switch-programsats fungerar enligt följande. 1626 01:05:34,820 --> 01:05:37,580 Det tar, inom parentes, ett värde som du vill 1627 01:05:37,580 --> 01:05:38,860 "Switch" på. 1628 01:05:38,860 --> 01:05:41,490 Du vill bete sig annorlunda baserat på dess värde. 1629 01:05:41,490 --> 01:05:44,360 Så detta betyder slå på värdet på n. 1630 01:05:44,360 --> 01:05:45,480 Och vad betyder det? 1631 01:05:45,480 --> 01:05:50,530 Tja, om n är 1 eller 2 eller 3, gå vidare och skriva ut "Du 1632 01:05:50,530 --> 01:05:52,680 plockade ett stort antal "och sedan bryta. 1633 01:05:52,680 --> 01:05:55,720 Anledningen till avbrottet är att det sätt C fungerar är som 1634 01:05:55,720 --> 01:05:59,790 snart den finner ett fall som matchar, börjar det köra 1635 01:05:59,790 --> 01:06:01,610 all kod under den. 1636 01:06:01,610 --> 01:06:04,580 Så om jag har en rad kod, som jag gör här på rad 27, den 1637 01:06:04,580 --> 01:06:05,360 blir exekveras. 1638 01:06:05,360 --> 01:06:07,520 Om jag lägger en annan linje här, det blir avrättas. 1639 01:06:07,520 --> 01:06:09,350 Annan linje här, det blir avrättas. 1640 01:06:09,350 --> 01:06:12,460 Programmet stoppar endast utföra vad under 1641 01:06:12,460 --> 01:06:14,680 tillämplig fall uttalande när jag uttryckligen 1642 01:06:14,680 --> 01:06:17,210 säga "gå sönder." Så fel. 1643 01:06:17,210 --> 01:06:19,220 Rätt, i detta fall, som följd. 1644 01:06:19,220 --> 01:06:22,130 Fall 4 eller 5 eller 6, på liknande sätt, kommer 1645 01:06:22,130 --> 01:06:23,160 att skriva ut ett budskap. 1646 01:06:23,160 --> 01:06:24,410 I detta fall, medelhög nummer. 1647 01:06:24,410 --> 01:06:25,200 Sönder. 1648 01:06:25,200 --> 01:06:28,160 Fall 7, 8, 9, 10, det kommer att skriva ut "Du valde en stor 1649 01:06:28,160 --> 01:06:28,950 nummer. "Break. 1650 01:06:28,950 --> 01:06:31,290 Och sedan finns det bokstavligen ett sökord som kallas "default" 1651 01:06:31,290 --> 01:06:34,090 Det är faktiskt som "annat" konstruera. 1652 01:06:34,090 --> 01:06:36,010 Så ny syntax, men intellektuellt, 1653 01:06:36,010 --> 01:06:37,060 ingenting alls nytt här. 1654 01:06:37,060 --> 01:06:38,280 Det är precis som Scratch. 1655 01:06:38,280 --> 01:06:41,040 Om annars om, annars om typ av block. 1656 01:06:41,040 --> 01:06:44,560 >> Så det är bytt versionen av detta program. 1657 01:06:44,560 --> 01:06:46,280 Men märker att vi gjorde det med siffror här. 1658 01:06:46,280 --> 01:06:49,040 Låt mig öppna upp en andra version, bara för att visa 1659 01:06:49,040 --> 01:06:50,670 något lite mer konkret. 1660 01:06:50,670 --> 01:06:52,840 Så här har vi betyg i stället. 1661 01:06:52,840 --> 01:06:55,540 Det visade sig att du kan använda växlar inte bara på heltal, utan på 1662 01:06:55,540 --> 01:06:56,340 tecken. 1663 01:06:56,340 --> 01:06:58,930 Inte i alla datatyper, men åtminstone på tecken. 1664 01:06:58,930 --> 01:07:02,670 Så här skulle vi kunna göra något liknande om värdet på C som 1665 01:07:02,670 --> 01:07:06,230 användaren har skrivit in i ledningen 19, genom att använda getchar funktionen, 1666 01:07:06,230 --> 01:07:09,410 är huvudstad A eller gemener en, låt oss tolka det som en klass, 1667 01:07:09,410 --> 01:07:11,340 och säger att de valde en utmärkt kvalitet. 1668 01:07:11,340 --> 01:07:14,690 Och ner längs switch, har vi andra 1669 01:07:14,690 --> 01:07:17,950 fall för "B" s och "C" s, och så vidare. 1670 01:07:17,950 --> 01:07:19,780 Men låt oss nu spetsa en annan sak. 1671 01:07:19,780 --> 01:07:21,130 Och återigen, typ av flyger genom 1672 01:07:21,130 --> 01:07:22,200 några av dessa exempel. 1673 01:07:22,200 --> 01:07:26,990 Men det är verkligen så att vi kan använda dem, nu - 1674 01:07:26,990 --> 01:07:28,880 eller egentligen bara översätta dem nu - 1675 01:07:28,880 --> 01:07:32,220 till C. 1676 01:07:32,220 --> 01:07:33,310 >> Så låt mig gå vidare och göra det. 1677 01:07:33,310 --> 01:07:34,830 Jag ska öppna upp en ny fil. 1678 01:07:34,830 --> 01:07:39,430 Och jag ska göra inkludera . 1679 01:07:39,430 --> 01:07:42,770 Och då ska jag göra int main (void). 1680 01:07:42,770 --> 01:07:46,390 Låt mig spara filen som en loop.c. 1681 01:07:46,390 --> 01:07:48,280 Bara som ett exempel. 1682 01:07:48,280 --> 01:07:49,910 Och jag kommer att gå vidare och gör följande. 1683 01:07:49,910 --> 01:07:54,180 Jag vill skriva ett mycket tungt program. 1684 01:07:54,180 --> 01:07:56,170 Så 10. 1685 01:07:56,170 --> 01:07:58,862 Låt oss göra detta. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 Okej. 1688 01:08:00,360 --> 01:08:02,120 Så snart du börjar göra detta i programmering, du 1689 01:08:02,120 --> 01:08:03,490 förmodligen gör något fel. 1690 01:08:03,490 --> 01:08:04,950 Men vi börjar där ändå. 1691 01:08:04,950 --> 01:08:05,430 Oops. 1692 01:08:05,430 --> 01:08:06,950 Det är faktiskt fel. 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 Inget kommer att hända när vi kommer till 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 Okej. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Ta bort. 1704 01:08:18,689 --> 01:08:19,029 >> Okej. 1705 01:08:19,029 --> 01:08:20,029 Så tillbaka 0. 1706 01:08:20,029 --> 01:08:22,010 Så det här programmet är uppenbarligen kommer att göra vad det mycket 1707 01:08:22,010 --> 01:08:23,310 tediously säger att det kommer att göra. 1708 01:08:23,310 --> 01:08:24,060 Det kommer att skriva ut alla dessa 1709 01:08:24,060 --> 01:08:25,290 värden, från topp till botten. 1710 01:08:25,290 --> 01:08:27,140 Så låt mig göra göra slinga. 1711 01:08:27,140 --> 01:08:28,640 Och sedan - hoppsan. 1712 01:08:28,640 --> 01:08:29,700 Gör slinga. 1713 01:08:29,700 --> 01:08:31,479 Jag var i fel katalog. 1714 01:08:31,479 --> 01:08:33,300 Och låt mig nu kör slingan. 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 Mycket trevligt. 1718 01:08:35,270 --> 01:08:36,279 Trevligt, långa programmet. 1719 01:08:36,279 --> 01:08:38,109 >> Okej, men nu ska vi göra det här bättre. 1720 01:08:38,109 --> 01:08:40,810 Precis som i Scratch, när du började använda en looping 1721 01:08:40,810 --> 01:08:43,149 konstruera, istället för att bara kopiera och klistra in alla 1722 01:08:43,149 --> 01:08:45,580 pusselbitar, låt mig presentera här. 1723 01:08:45,580 --> 01:08:48,609 Så i C, finns det olika looping konstruktioner, 1724 01:08:48,609 --> 01:08:50,540 en av som ser ut så här. 1725 01:08:50,540 --> 01:08:55,069 A "för" loop har tre saker, åtskilda av två semikolon. 1726 01:08:55,069 --> 01:08:57,770 Och därefter, inuti kroppen hos slingan, så att säga - det 1727 01:08:57,770 --> 01:08:59,390 grejer insidan av klammerparenteser - 1728 01:08:59,390 --> 01:09:01,010 vi kan göra något och om igen. 1729 01:09:01,010 --> 01:09:02,310 Så vad jag har här på skärmen, är detta 1730 01:09:02,310 --> 01:09:03,300 bokstavligen bara en kommentar. 1731 01:09:03,300 --> 01:09:05,380 På / / betyder här kommer en kommentar. 1732 01:09:05,380 --> 01:09:06,180 Detta är inte kod. 1733 01:09:06,180 --> 01:09:08,890 Detta är bara på engelska, för mig, det mänskliga. 1734 01:09:08,890 --> 01:09:11,300 >> Så initieringar, villkor och uppdateringar. 1735 01:09:11,300 --> 01:09:12,770 Nåväl, låt oss se hur det fungerar. 1736 01:09:12,770 --> 01:09:15,520 Detta gör att jag kan skriva om det här programmet som följer. 1737 01:09:15,520 --> 01:09:16,399 För - 1738 01:09:16,399 --> 01:09:18,029 så här kommer min loop - 1739 01:09:18,029 --> 01:09:19,439 int i - 1740 01:09:19,439 --> 01:09:21,330 här kommer en variabel som heter "i" - 1741 01:09:21,330 --> 01:09:23,140 blir initieras till 10. 1742 01:09:23,140 --> 01:09:25,260 Så det är min initiering. 1743 01:09:25,260 --> 01:09:29,450 Jag vill göra denna slinga så länge "i" är större än eller 1744 01:09:29,450 --> 01:09:30,899 lika med 0. 1745 01:09:30,899 --> 01:09:32,880 Och på varje iteration av denna slinga, vill jag 1746 01:09:32,880 --> 01:09:34,979 att göra i. -. 1747 01:09:34,979 --> 01:09:36,310 Så vi såg + + på måndag. 1748 01:09:36,310 --> 01:09:37,660 - Är det motsatta. 1749 01:09:37,660 --> 01:09:39,410 Det minskar värdet med 1. 1750 01:09:39,410 --> 01:09:43,319 Inuti denna slinga, jag vill verkligen göra något. 1751 01:09:43,319 --> 01:09:46,390 Så jag kommer att säga något i stil printf. 1752 01:09:46,390 --> 01:09:48,939 Jag vill inte säga 10 nu, eftersom det uppenbarligen är bara 1753 01:09:48,939 --> 01:09:50,000 kommer att skriva ut samma värde. 1754 01:09:50,000 --> 01:09:52,246 Vad vill jag skriva ut istället, förmodligen? 1755 01:09:52,246 --> 01:09:52,590 Ja. 1756 01:09:52,590 --> 01:09:55,270 Så "jag." Så% d, dvs. 1757 01:09:55,270 --> 01:09:57,340 >> Så jag kommer att stjäla en av dessa idéer från tidigare - 1758 01:09:57,340 --> 01:09:59,640 denna ersättning för formatkoder - 1759 01:09:59,640 --> 01:10:01,620 och sedan ner här, längst ner, jag återkommer 0, bara 1760 01:10:01,620 --> 01:10:02,710 för bra åtgärd. 1761 01:10:02,710 --> 01:10:04,740 Men nu har jag en mer kortfattad program. 1762 01:10:04,740 --> 01:10:07,490 Det är bara några få rader, och inte några 10 eller 11 rader. 1763 01:10:07,490 --> 01:10:09,440 Låt mig gå till min prompt här nere. 1764 01:10:09,440 --> 01:10:10,630 Remake slinga. 1765 01:10:10,630 --> 01:10:12,140 Kör slinga. 1766 01:10:12,140 --> 01:10:13,570 Och det verkar vara samma. 1767 01:10:13,570 --> 01:10:15,550 Nu är programmet inte mer intressant. 1768 01:10:15,550 --> 01:10:17,180 Men nu kan jag skriva ungefär så här. 1769 01:10:17,180 --> 01:10:18,970 Jag kan ändra detta till 100. 1770 01:10:18,970 --> 01:10:21,400 Jag kan då kompilera mitt program. 1771 01:10:21,400 --> 01:10:23,360 Och då kan jag köra mitt program. 1772 01:10:23,360 --> 01:10:26,390 Och nu går det supersnabbt på dagens datorer. 1773 01:10:26,390 --> 01:10:27,820 Men jag har - 1774 01:10:27,820 --> 01:10:29,620 och faktiskt, gör min scrollback buffert inte 1775 01:10:29,620 --> 01:10:30,890 ens gå så långt. 1776 01:10:30,890 --> 01:10:31,680 Där kör vi. 1777 01:10:31,680 --> 01:10:34,090 Så där har vi alla 100. 1778 01:10:34,090 --> 01:10:35,880 Men det är lätt att göra misstag här. 1779 01:10:35,880 --> 01:10:37,920 Vad kommer att bli det förväntade beteendet om jag 1780 01:10:37,920 --> 01:10:41,150 misstag göra det? 1781 01:10:41,150 --> 01:10:42,550 Så det känns som oändligt. 1782 01:10:42,550 --> 01:10:44,670 Så låt oss se om datorn fungerar. 1783 01:10:44,670 --> 01:10:47,020 >> Så låt mig gå vidare och göra ögla. 1784 01:10:47,020 --> 01:10:48,355 Och låt mig köra slingan. 1785 01:10:53,590 --> 01:10:55,210 Så låt oss återkomma till detta på bara ett ögonblick. 1786 01:10:55,210 --> 01:10:56,720 Vi låter som körs. 1787 01:10:56,720 --> 01:10:59,520 För vad ska vi räkna upp till minimalt? 1788 01:10:59,520 --> 01:11:02,200 Förmodligen minst 2 miljarder, om vi har så många bitar, och 1789 01:11:02,200 --> 01:11:03,660 vi använder positiva värden. 1790 01:11:03,660 --> 01:11:04,890 Så låt oss hoppa tillbaka hit. 1791 01:11:04,890 --> 01:11:07,810 Förutom dessa typer av slingor, har vi så kallade medan 1792 01:11:07,810 --> 01:11:09,430 slingor. Så, precis som i Scratch, hade du alltid 1793 01:11:09,430 --> 01:11:11,240 block, och du hade Upprepa block. 1794 01:11:11,240 --> 01:11:13,270 Även i C har du bara andra sätt 1795 01:11:13,270 --> 01:11:14,260 att uttrycka sig själv. 1796 01:11:14,260 --> 01:11:17,110 Så du har den här föreställningen om en while-slinga som låter dig 1797 01:11:17,110 --> 01:11:18,860 uttrycka dig lite annorlunda. 1798 01:11:18,860 --> 01:11:21,490 Och då har du något som kallas en gör-while-slinga, 1799 01:11:21,490 --> 01:11:24,200 som fungerar lite annorlunda också. 1800 01:11:24,200 --> 01:11:25,320 Och vi kommer att reta dem isär med tiden. 1801 01:11:25,320 --> 01:11:28,630 >> Men låt oss ta en titt på denna sista här. 1802 01:11:28,630 --> 01:11:30,160 Om vi ​​går in - 1803 01:11:30,160 --> 01:11:31,466 fortfarande körs. 1804 01:11:31,466 --> 01:11:32,770 Det är ganska oändlig. 1805 01:11:32,770 --> 01:11:36,870 Så låt mig gå in positiva, och visa hur vi faktiskt kan 1806 01:11:36,870 --> 01:11:39,410 styr inmatning lite mer effektivt. 1807 01:11:39,410 --> 01:11:40,910 Det är en ganska kort program. 1808 01:11:40,910 --> 01:11:43,730 Och här har vi i huvudsak en int n deklaration. 1809 01:11:43,730 --> 01:11:46,570 Så ge mig en variabel som heter N. Nu säger jag bokstavligen 1810 01:11:46,570 --> 01:11:48,340 "Göra". Och då har jag öppet lockigt 1811 01:11:48,340 --> 01:11:49,630 stag, nära klammerparentes. 1812 01:11:49,630 --> 01:11:52,000 Och sedan märker direkt efter det, säger medan N 1813 01:11:52,000 --> 01:11:53,790 är mindre än 1. 1814 01:11:53,790 --> 01:11:55,300 Så märker att dessa rader - 1815 01:11:55,300 --> 01:11:56,740 19 till 24 - 1816 01:11:56,740 --> 01:11:59,450 komponera kollektivt en gör-while-slinga. 1817 01:11:59,450 --> 01:12:01,280 Och återigen, ny syntax, inte en ny idé. 1818 01:12:01,280 --> 01:12:03,740 Det är bara ett annat sätt att looping, syntaktiskt. 1819 01:12:03,740 --> 01:12:04,890 Så vad gör det? 1820 01:12:04,890 --> 01:12:08,000 Gör följande när n är mindre än 1. 1821 01:12:08,000 --> 01:12:09,080 Så vad vill jag göra? 1822 01:12:09,080 --> 01:12:11,390 Jag kräver att du ger mig ett positivt heltal. 1823 01:12:11,390 --> 01:12:14,110 Sen försöker jag faktiskt få ett heltal från användaren. 1824 01:12:14,110 --> 01:12:16,740 Men när det gäller ordningen verksamhet här, eftersom 1825 01:12:16,740 --> 01:12:21,850 medan tillståndet är här nere, jag sedan kommer att kontrollera, är n 1826 01:12:21,850 --> 01:12:23,100 mindre än 1? 1827 01:12:23,100 --> 01:12:24,600 Så antar att användaren - 1828 01:12:24,600 --> 01:12:26,450 efter att ha krävt på detta sätt - 1829 01:12:26,450 --> 01:12:29,190 typer i värdet 0. 1830 01:12:29,190 --> 01:12:34,510 Detta tillstånd kommer att vara sant eller falskt? 1831 01:12:34,510 --> 01:12:35,820 Tja, det kommer faktiskt att vara sant. 1832 01:12:35,820 --> 01:12:38,700 Eftersom n är 0, och 0 är mindre än 1. 1833 01:12:38,700 --> 01:12:40,140 Så vad innebär det? 1834 01:12:40,140 --> 01:12:41,160 Göra det igen. 1835 01:12:41,160 --> 01:12:41,990 Göra det igen. 1836 01:12:41,990 --> 01:12:42,640 Göra det igen. 1837 01:12:42,640 --> 01:12:46,080 Bara en gång detta villkor utvärderas till false. 1838 01:12:46,080 --> 01:12:47,510 Om jag skriver in 42. 1839 01:12:47,510 --> 01:12:49,690 Tja nej, 42 inte mindre än 1. 1840 01:12:49,690 --> 01:12:52,320 Därför denna slinga sker utför. 1841 01:12:52,320 --> 01:12:54,650 Och så på den punkten, kommer programmet att säga, tack för 1842 01:12:54,650 --> 01:12:57,530 den 42, i detta fall. 1843 01:12:57,530 --> 01:13:00,320 Nu när du har detta sätt att uttrycka sig själv - 1844 01:13:00,320 --> 01:13:02,360 Vi bör inte vänta för att avsluta. 1845 01:13:02,360 --> 01:13:03,620 Det kommer att ta lite tid. 1846 01:13:03,620 --> 01:13:04,990 Fortsättning nästa gång, kanske. 1847 01:13:04,990 --> 01:13:08,050 >> Men nu har du möjlighet att förhoppningsvis förstå en 1848 01:13:08,050 --> 01:13:09,060 lite Geek humor. 1849 01:13:09,060 --> 01:13:11,560 Ber om ursäkt. 1850 01:13:11,560 --> 01:13:13,620 Detta är inte representativt för humor i datavetenskap 1851 01:13:13,620 --> 01:13:14,870 världen, men det är gulligt. 1852 01:13:21,020 --> 01:13:23,890 [Skratt] Låt oss slutet på denna anmärkning. 1853 01:13:23,890 --> 01:13:25,750 Och vi kommer att se dig på måndag. 1854 01:13:25,750 --> 01:13:31,629 [Applåder]