1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] DAVID J. MALAN: Greit, dette er CS50 og dette er 2 00:00:09,920 --> 00:00:15,250 slutten av uke 1, så studere kortene er i og det totale antall av 3 00:00:15,250 --> 00:00:18,640 klassekamerater som du har dette året er 745. 4 00:00:18,640 --> 00:00:20,920 Og vi er så begeistret for å ha så mange av dere i løpet 5 00:00:20,920 --> 00:00:23,680 dette semesteret, men selv om dette kurset er så stor, 6 00:00:23,680 --> 00:00:26,090 innse at det er disse tingene som fredag ​​lunsjer, som 7 00:00:26,090 --> 00:00:29,020 kontortid, 15 personer deler, og så videre som 8 00:00:29,020 --> 00:00:30,590 er egentlig ment for å skape dette mer intim 9 00:00:30,590 --> 00:00:31,140 miljø. 10 00:00:31,140 --> 00:00:34,070 Så selv om vi kan samle en eller to ganger i uken, her i 11 00:00:34,070 --> 00:00:36,420 Sanders, vet at mye av din erfaring i dette kurset 12 00:00:36,420 --> 00:00:39,330 vil veldig mye være hands-on på sammen av dine klassekamerater 13 00:00:39,330 --> 00:00:40,730 og faglærere. 14 00:00:40,730 --> 00:00:43,960 >> Så her går vi, Fall 2012. 15 00:00:43,960 --> 00:00:47,530 Så husker at forrige gang vi endte på et notat av 16 00:00:47,530 --> 00:00:50,460 unøyaktighet, snakker om representasjon av tall. 17 00:00:50,460 --> 00:00:52,950 Og vi så på en av de feil som har skjedd i 18 00:00:52,950 --> 00:00:54,920 virkelige verden, når det kom til misforståelser 19 00:00:54,920 --> 00:00:55,890 hvordan datamaskiner fungerer. 20 00:00:55,890 --> 00:00:58,590 Vel, i dag skal vi besøke en av disse ideene som 21 00:00:58,590 --> 00:01:01,410 samt fortsette vår diskusjon av CS50 klient 22 00:01:01,410 --> 00:01:04,090 og C, og hva det egentlig betyr å programmere. 23 00:01:04,090 --> 00:01:06,430 Men først, bare et par virvelvindteknikkene kunngjøringer. 24 00:01:06,430 --> 00:01:08,930 >> Seksjoner begynner denne søndagen, og den første uken er alltid en 25 00:01:08,930 --> 00:01:11,030 litt av en rask start, fordi vi bare fikk i 26 00:01:11,030 --> 00:01:12,620 din del skjemaer. 27 00:01:12,620 --> 00:01:14,450 Vi gjør det samme nå, med undervisning stipendiater, nå 28 00:01:14,450 --> 00:01:16,410 at de kjenner planene sine, så vi sikter, etter 29 00:01:16,410 --> 00:01:19,380 Lørdag morgen, for å følge opp med deg med inndelingen 30 00:01:19,380 --> 00:01:20,760 oppdrag og TF. 31 00:01:20,760 --> 00:01:22,770 Innse at de vil starte neste dag, søndag 32 00:01:22,770 --> 00:01:24,510 eller mandag eller tirsdag. 33 00:01:24,510 --> 00:01:27,730 Og deretter vil vi imøtekomme delen endringer som de oppstår 34 00:01:27,730 --> 00:01:28,690 i dagene som kommer. 35 00:01:28,690 --> 00:01:31,590 Kontortid, i mellomtiden, er, igjen i kveld, 20:00 til 11, i 36 00:01:31,590 --> 00:01:33,740 Annenberg samt morgen kveld. 37 00:01:33,740 --> 00:01:36,150 Selv om problemet sett er vanligvis på grunn på torsdager 38 00:01:36,150 --> 00:01:39,020 midt på dagen, innser at du har opptil fem sent dager å bruke, 39 00:01:39,020 --> 00:01:42,430 derav tilgjengeligheten av kontortiden på torsdager hvis 40 00:01:42,430 --> 00:01:45,930 du kontanter i en av de sene dager og dermed sende 41 00:01:45,930 --> 00:01:47,070 noe på fredag. 42 00:01:47,070 --> 00:01:50,850 La meg foreslå at Scratch er blant de mer moro, blant 43 00:01:50,850 --> 00:01:52,390 mer lav nøkkel oppgavesett. 44 00:01:52,390 --> 00:01:55,160 Og jeg ville henge på de sene dager, strategisk, bare 45 00:01:55,160 --> 00:01:57,380 for senere i semesteret når livet begynner å komme i veien 46 00:01:57,380 --> 00:01:59,470 med midterms og andre klasser. 47 00:01:59,470 --> 00:02:01,580 Problem Set 1, i mellomtiden, ville bli lagt ut på kursets 48 00:02:01,580 --> 00:02:06,080 Nettside denne fredagen, som vil bli på kurset gange 49 00:02:06,080 --> 00:02:08,789 gjennom video, som vil bli filmet på 02:30 på fredag 50 00:02:08,789 --> 00:02:11,890 og deretter lagt ut på nettet av neste dag. 51 00:02:11,890 --> 00:02:13,880 >> Så vi endte på mandag. 52 00:02:13,880 --> 00:02:15,450 Jeg vil - faktisk, en merke seg her. 53 00:02:15,450 --> 00:02:18,870 Fordi klassene - fordi Sanders ikke låne nøyaktig 54 00:02:18,870 --> 00:02:22,220 seg til uformell Q & A og tilbake veldig godt, vi 55 00:02:22,220 --> 00:02:24,030 kommer til å prøve noe litt nytt i år, der 56 00:02:24,030 --> 00:02:26,160 Hvis du ikke er komfortabel å heve hånden eller du bare 57 00:02:26,160 --> 00:02:28,800 vil heller ikke heve hånden i et rom som dette, 58 00:02:28,800 --> 00:02:30,710 vi kommer til å ha noen av de pedagogiske stipendiatene og CAS 59 00:02:30,710 --> 00:02:33,260 bemanning cs50.net/discuss under forelesning. 60 00:02:33,260 --> 00:02:35,440 Så hvis du har et spørsmål fordi jeg var helt 61 00:02:35,440 --> 00:02:37,510 uklart om noe eller er du nysgjerrig på noen 62 00:02:37,510 --> 00:02:39,640 emne, prøve å legge den der. 63 00:02:39,640 --> 00:02:42,670 Merke den med en etikett av Foredrag, og vi vil gjøre vårt beste 64 00:02:42,670 --> 00:02:45,430 i dag og neste uke - vi vil prøve dette ut - til feltet det 65 00:02:45,430 --> 00:02:47,990 enten elektronisk, online, eller om det føles som vi skal 66 00:02:47,990 --> 00:02:50,430 virkelig ta det en masse, en av de pedagogiske fellows eller 67 00:02:50,430 --> 00:02:52,080 CAer vil heve sin hånd og spør 68 00:02:52,080 --> 00:02:53,480 anonymt på dine vegne. 69 00:02:53,480 --> 00:02:55,650 Så vi vil gi dette en sjanse og se hvor godt dette fungerer. 70 00:02:55,650 --> 00:02:58,540 Men, for all del, fortsett å heve hendene som du ønsker. 71 00:02:58,540 --> 00:03:11,420 >> Så siste gang vi viste at 10% eller en tiendedel er ikke i 72 00:03:11,420 --> 00:03:13,840 Faktisk, 0.1, som du lærte for mange år siden. 73 00:03:13,840 --> 00:03:15,390 Det er faktisk en verdi som dette. 74 00:03:15,390 --> 00:03:16,970 Men det er ikke helt sant, ikke sant? 75 00:03:16,970 --> 00:03:19,585 Vi må bare denne begrensningen i datamaskiner der, hvis du 76 00:03:19,585 --> 00:03:22,450 bare har en begrenset mengde minne, RAM, eller mer 77 00:03:22,450 --> 00:03:25,220 spesielt biter, vel, det er bare et endelig antall 78 00:03:25,220 --> 00:03:26,980 ting kan du representerer. 79 00:03:26,980 --> 00:03:29,780 For eksempel, hvis vi har tallet null, og vi ønsker å 80 00:03:29,780 --> 00:03:32,790 representerer i binær, med åtte biter, der litt, 81 00:03:32,790 --> 00:03:34,710 igjen, er en null eller en, kanskje vi 82 00:03:34,710 --> 00:03:39,240 representerer det som 00000000. 83 00:03:39,240 --> 00:03:41,160 Og det er litt unødvendig detaljert. 84 00:03:41,160 --> 00:03:43,700 Akkurat som i desimalsystemet i den virkelige verden, 85 00:03:43,700 --> 00:03:47,040 generelt, hvis du ønsker å skrive nummeret 123, vi 86 00:03:47,040 --> 00:03:52,240 mennesker sannsynligvis ikke skrive 00000123 selv om, 87 00:03:52,240 --> 00:03:53,940 funksjonelt, det er nøyaktig samme antall. 88 00:03:53,940 --> 00:03:56,580 Vi dropper ledende nuller, så å si. 89 00:03:56,580 --> 00:03:58,270 >> I binær, kan vi gjøre det samme. 90 00:03:58,270 --> 00:04:01,440 Binære og null, null og binære er bare null. 91 00:04:01,440 --> 00:04:02,870 Du trenger bare en enkelt bit. 92 00:04:02,870 --> 00:04:05,020 Men igjen, den vanligste måleenheten i verden 93 00:04:05,020 --> 00:04:07,820 databehandling er byte, åtte biter. 94 00:04:07,820 --> 00:04:09,720 Bare fordi en bit, ganske ubrukelig. 95 00:04:09,720 --> 00:04:12,020 Åtte biter, ikke veldig nyttig, men minst det er mer 96 00:04:12,020 --> 00:04:14,280 nyttige enn en enkelt måleenhet. 97 00:04:14,280 --> 00:04:17,100 Så med åtte bits, vil vi vanligvis representerer binær. 98 00:04:17,100 --> 00:04:20,459 Så her har vi tallene null, ett, to, og så, som 99 00:04:20,459 --> 00:04:24,200 Nate gjorde i videoen vår forrige onsdag, kan vi fortsette 100 00:04:24,200 --> 00:04:25,940 telle opp til sju, åtte. 101 00:04:25,940 --> 00:04:27,860 Og så hvis vi bruker mer og mer biter, vi 102 00:04:27,860 --> 00:04:29,880 kan telle opp til uendelig. 103 00:04:29,880 --> 00:04:32,800 Men hvis du bare har et endelig antall av disse bitene, er som 104 00:04:32,800 --> 00:04:35,030 tilfelle i ethvert datasystem, eller selv missil 105 00:04:35,030 --> 00:04:36,670 system, vel, faktisk du bare har en 106 00:04:36,670 --> 00:04:37,900 begrenset mengde av presisjon. 107 00:04:37,900 --> 00:04:41,290 Så hvis du ønsker å representere tall som 0,1, vel, 108 00:04:41,290 --> 00:04:43,410 Datamaskinen har å velge og vrake. 109 00:04:43,410 --> 00:04:45,970 Og hvis det har bare et begrenset antall tall det kan 110 00:04:45,970 --> 00:04:50,490 representerer, kan det komme nær 0.1 for deg, men det kan ikke 111 00:04:50,490 --> 00:04:53,730 nødvendigvis gi deg nøyaktig den verdien du ønsker. 112 00:04:53,730 --> 00:04:55,660 Og dette er bare en av utfordringene med datamaskiner, 113 00:04:55,660 --> 00:04:57,090 under panseret, heldigvis. 114 00:04:57,090 --> 00:04:59,110 >> Som vi flytte lenger i semesteret, disse lavere nivå 115 00:04:59,110 --> 00:05:02,310 detaljene blir mye mindre interessant, men absolutt 116 00:05:02,310 --> 00:05:05,700 anvendelsen av disse ideene kan ha noen svært virkelige verden 117 00:05:05,700 --> 00:05:06,760 konsekvenser. 118 00:05:06,760 --> 00:05:08,190 Den ene er en litt morsom. 119 00:05:08,190 --> 00:05:12,150 Hvor mange av dere har sett den fantastiske filmen Office Space? 120 00:05:12,150 --> 00:05:13,620 Hvis du ikke har, er at uoffisielle 121 00:05:13,620 --> 00:05:14,370 lekser for uken. 122 00:05:14,370 --> 00:05:16,730 Men i Office Space, fellows i den filmen tar 123 00:05:16,730 --> 00:05:19,900 nytte av nettopp denne ideen, men de faktisk stjal 124 00:05:19,900 --> 00:05:21,270 det fra en annen film som du kan ha 125 00:05:21,270 --> 00:05:22,760 sett, selv år tidligere. 126 00:05:22,760 --> 00:05:24,920 Så la meg gi deg noen sekunder av denne traileren fra 127 00:05:24,920 --> 00:05:27,470 denne fantastiske filmen, og dette er veldig mye 128 00:05:27,470 --> 00:05:28,340 faglig relevant. 129 00:05:28,340 --> 00:05:30,310 >> [SPILLER MOVIE] 130 00:05:30,310 --> 00:05:32,240 Egentlig jeg blir forfremmet. 131 00:05:32,240 --> 00:05:33,360 Jeg kan programmere et virus som vil rive det 132 00:05:33,360 --> 00:05:34,460 plassere seg big time. 133 00:05:34,460 --> 00:05:35,770 Vel, hvordan virker det? 134 00:05:35,770 --> 00:05:37,836 Hver gang det er en bank transaksjon der interessen er 135 00:05:37,836 --> 00:05:40,154 computertomografi, det er tusenvis om dagen, avslutter maskinen opp 136 00:05:40,154 --> 00:05:41,040 med disse fraksjoner av en cent. 137 00:05:41,040 --> 00:05:43,050 Men jeg har ikke tenkt å gjøre noe ulovlig. 138 00:05:43,050 --> 00:05:46,730 Ulovlig? Samir, er dette Amerika. 139 00:05:46,730 --> 00:05:48,010 Du må sverge til Gud. 140 00:05:48,010 --> 00:05:51,870 Hvis ingen vet om dette, men oss, ok? Ingen familiemedlemmer, ingen 141 00:05:51,870 --> 00:05:52,490 kjærester, ingen. 142 00:05:52,490 --> 00:05:53,882 [Uhørlig]. 143 00:05:53,882 --> 00:05:57,594 Ikke bekymre deg, mann, vil jeg ikke si det til noen heller. 144 00:05:57,594 --> 00:05:59,680 [Filmen slutter] 145 00:05:59,680 --> 00:06:01,900 >> All right, så kanskje jeg fant denne filmen bedre enn de fleste 146 00:06:01,900 --> 00:06:05,530 folk her, men i alle fall, viruset som de var 147 00:06:05,530 --> 00:06:06,400 prøver å skape - 148 00:06:06,400 --> 00:06:08,410 og i filmer, når de vil kalle noe et virus, 149 00:06:08,410 --> 00:06:09,770 Det er generelt ikke egentlig et virus. 150 00:06:09,770 --> 00:06:11,600 Det er bare et program som noen skrev å gjøre noe. 151 00:06:11,600 --> 00:06:13,800 Og i dette tilfellet ble gutta prøver å skrive et program 152 00:06:13,800 --> 00:06:16,610 som tok fordel av deres selskap kalt Innotech er 153 00:06:16,610 --> 00:06:19,740 datasystemet, hvorved datamaskiner, også, selv når det 154 00:06:19,740 --> 00:06:21,350 kommer til penger, kan ikke nødvendigvis 155 00:06:21,350 --> 00:06:23,490 representerer penger presist. 156 00:06:23,490 --> 00:06:27,630 Så selv om du kanskje har $ 0,10 på bankkontoen din, 157 00:06:27,630 --> 00:06:31,060 0,10, vel, kan det hende at datamaskinen faktisk tror at du har 158 00:06:31,060 --> 00:06:33,560 dette mange cent i din bankkonto. 159 00:06:33,560 --> 00:06:35,750 Og så hva disse gutta var håper å gjøre - og de 160 00:06:35,750 --> 00:06:38,240 stjal ideen, viser det seg fra Superman III, hvor 161 00:06:38,240 --> 00:06:41,210 Richard Pryor gjorde det samme - de var i hovedsak 162 00:06:41,210 --> 00:06:44,880 skrive programmer som håper å ta alle de etterfølgende 163 00:06:44,880 --> 00:06:46,930 tall, alle de små, små, små fraksjoner av 164 00:06:46,930 --> 00:06:50,160 pennies, og siphoning de av slik at menneskene bare 165 00:06:50,160 --> 00:06:52,620 tanke, oh, det er bare $ 0.10 der, men alle av dem 166 00:06:52,620 --> 00:06:54,410 etterfølgende tall til slutt legge opp. 167 00:06:54,410 --> 00:06:57,490 Så en fantastisk idé, og det backfired hilariously i at 168 00:06:57,490 --> 00:06:58,250 spesiell film. 169 00:06:58,250 --> 00:07:01,800 >> Men i den virkelige verden, for det er mye mer om 170 00:07:01,800 --> 00:07:03,190 implikasjonene av disse slags ting. 171 00:07:03,190 --> 00:07:05,450 Og en av grunnene til å dykke inn i feltet av datamaskinen 172 00:07:05,450 --> 00:07:07,620 vitenskap er, igjen, dens anvendbarhet ikke til 173 00:07:07,620 --> 00:07:09,740 ingeniørfag alene, men bare for å 174 00:07:09,740 --> 00:07:10,650 andre felt også. 175 00:07:10,650 --> 00:07:14,760 Så dette er en mindre munter titt på hva som kan gå galt, men 176 00:07:14,760 --> 00:07:17,630 det er også ganske øynene åpne, tror jeg, når det kommer til 177 00:07:17,630 --> 00:07:20,760 forstå nøyaktig hvor allestedsnærværende teknologier som 178 00:07:20,760 --> 00:07:22,870 datamaskiner og programmering eller disse dager, 179 00:07:22,870 --> 00:07:23,930 i form av programvare. 180 00:07:23,930 --> 00:07:26,500 Så dette neste klippet er omtrent seks minutter, fortsetter 181 00:07:26,500 --> 00:07:30,320 der vi slapp forrige gang, men tillater oss å se litt 182 00:07:30,320 --> 00:07:33,370 mer i dybden på en slik av disse spørsmålene. 183 00:07:33,370 --> 00:07:35,270 La meg gå videre til der vi slapp, 184 00:07:35,270 --> 00:07:37,780 som var her. 185 00:07:37,780 --> 00:07:41,580 Og vi har en del to av to, for omtrent seks minutter her. 186 00:07:41,580 --> 00:07:41,980 >> [PLAY MOVIE] 187 00:07:41,980 --> 00:07:45,430 Plaget moderne rakett-teknologi. 188 00:07:45,430 --> 00:07:49,280 I 1991, med oppstart av den første Gulf-krigen, Patriot 189 00:07:49,280 --> 00:07:51,350 missil opplevd en lignende type 190 00:07:51,350 --> 00:07:52,645 tallkonvertering problem. 191 00:07:52,645 --> 00:07:57,460 Og som et resultat, ble 20 personer, 20 amerikanske soldater, drept 192 00:07:57,460 --> 00:08:01,130 og ca 100 andre såret, da Patriot, som var ment 193 00:08:01,130 --> 00:08:03,400 for å beskytte mot innkommende scuds, 194 00:08:03,400 --> 00:08:06,020 unnlatt å fyre av en rakett. 195 00:08:06,020 --> 00:08:09,350 >> Da Irak invaderte Kuwait og Amerika lansert en Desert 196 00:08:09,350 --> 00:08:13,530 Storm tidlig 1991, var Patriot raketter batterier 197 00:08:13,530 --> 00:08:16,970 utplassert for å beskytte Saudi-Arabia og Israel fra Irak 198 00:08:16,970 --> 00:08:19,810 Scud rakettangrep. 199 00:08:19,810 --> 00:08:23,740 The Patriot er en amerikansk mellomdistanse bakke-til-luft-systemet, 200 00:08:23,740 --> 00:08:26,370 produsert av Raytheon selskapet. 201 00:08:26,370 --> 00:08:30,860 Størrelsen på Patriot interceptor selv, det handler om 202 00:08:30,860 --> 00:08:35,650 omtrent 20 meter lang og veier ca 2000 pounds. 203 00:08:35,650 --> 00:08:38,809 Og det bærer et stridshode på om - jeg tror det er omtrent 204 00:08:38,809 --> 00:08:40,169 150 pounds. 205 00:08:40,169 --> 00:08:45,820 Og stridshodet selv er en høy eksplosiv som har 206 00:08:45,820 --> 00:08:48,120 fragmenter rundt det. 207 00:08:48,120 --> 00:08:51,870 Casing av stridshodet er ment å virke som haggel. 208 00:08:51,870 --> 00:08:54,920 Rakettene er gjennomført fire per container og er 209 00:08:54,920 --> 00:08:57,850 transporteres av en semitrailer. 210 00:08:57,850 --> 00:09:02,940 >> The Patriot anti-rakett system går tilbake minst til 211 00:09:02,940 --> 00:09:05,530 20 år nå. 212 00:09:05,530 --> 00:09:09,150 Det ble opprinnelig utviklet som en luftforsvar rakett til 213 00:09:09,150 --> 00:09:12,920 skyte ned fiendtlige fly, i den første Gulf-krigen. 214 00:09:12,920 --> 00:09:17,700 Når det krig kom, ville hæren til å bruke den til å skyte 215 00:09:17,700 --> 00:09:19,880 ned scuds, ikke fly. 216 00:09:19,880 --> 00:09:24,860 Air irakiske Force var ikke så mye av et problem, men hæren 217 00:09:24,860 --> 00:09:27,260 var bekymret scuds. 218 00:09:27,260 --> 00:09:30,810 Og så de prøvde å oppgradere Patriot. 219 00:09:30,810 --> 00:09:33,770 Avskjære fiendens rakett reiser på Mach 5 skulle 220 00:09:33,770 --> 00:09:35,790 å være utfordrende nok. 221 00:09:35,790 --> 00:09:39,460 Men når Patriot ble rushed inn i tjeneste, Hæren 222 00:09:39,460 --> 00:09:43,730 var ikke klar over en irakisk modifikasjon som gjorde sitt 223 00:09:43,730 --> 00:09:46,510 Scuds nesten umulig å treffe. 224 00:09:46,510 --> 00:09:50,040 >> Hva skjedde er scuds som var 225 00:09:50,040 --> 00:09:51,360 kommer i var ustabil. 226 00:09:51,360 --> 00:09:52,266 De ble wobbling. 227 00:09:52,266 --> 00:09:56,300 Grunnen til dette var at irakerne, for å få 600 228 00:09:56,300 --> 00:10:00,650 kilometer ut av en 300 kilometer rekkevidde rakett, tok 229 00:10:00,650 --> 00:10:02,423 vekt ut av foran stridshode og 230 00:10:02,423 --> 00:10:03,990 gjort stridshodet lettere. 231 00:10:03,990 --> 00:10:08,700 Så nå Patriot prøver å komme på Scud, og de fleste av 232 00:10:08,700 --> 00:10:11,192 tiden, det overveldende flertallet av tiden, ville det 233 00:10:11,192 --> 00:10:13,450 bare fly av Scud. 234 00:10:13,450 --> 00:10:16,300 Når Patriot operatører innsett Patriot 235 00:10:16,300 --> 00:10:20,160 savnet sitt mål, detonerte de Patriot stridshode. 236 00:10:20,160 --> 00:10:22,760 For å unngå mulige tap, ble det tillatt 237 00:10:22,760 --> 00:10:25,100 å falle til bakken. 238 00:10:25,100 --> 00:10:29,400 Det var hva folk flest så, som store ildkuler på himmelen, 239 00:10:29,400 --> 00:10:34,930 og misforstått som fanger av Scud stridshoder. 240 00:10:34,930 --> 00:10:37,490 >> Selv på nattehimmelen, dukket Patriots å være 241 00:10:37,490 --> 00:10:41,570 vellykket ødelagt scuds, på Dhahran, kan det ikke være noen 242 00:10:41,570 --> 00:10:43,730 feil om ytelsen. 243 00:10:43,730 --> 00:10:46,370 Der mistet Patriot radar system spor på en 244 00:10:46,370 --> 00:10:50,090 innkommende Scud og aldri lansert på grunn 245 00:10:50,090 --> 00:10:51,340 til en programvare feil. 246 00:10:54,030 --> 00:10:57,050 Det var israelerne som først oppdaget at jo lenger 247 00:10:57,050 --> 00:11:02,000 systemet var på, jo større den tid avviket ble, 248 00:11:02,000 --> 00:11:05,530 grunnet en klokke innebygd i systemets datamaskin. 249 00:11:05,530 --> 00:11:09,060 To om uker før tragedien i Dhahran, den 250 00:11:09,060 --> 00:11:11,730 Israelerne rapportert til Forsvarsdepartementet at 251 00:11:11,730 --> 00:11:13,250 Systemet var å miste tid. 252 00:11:13,250 --> 00:11:15,610 Etter cirka åtte timer å kjøre, merket de at 253 00:11:15,610 --> 00:11:18,330 Systemet var blitt merkbart mindre nøyaktige. 254 00:11:18,330 --> 00:11:20,910 Forsvarsdepartementet svarte med å fortelle alle 255 00:11:20,910 --> 00:11:23,710 Patriot batteriene å ikke la systemene 256 00:11:23,710 --> 00:11:25,450 på for en lang tid. 257 00:11:25,450 --> 00:11:28,010 De sa aldri hva en lang tid var - 8 timer, 10 258 00:11:28,010 --> 00:11:29,690 timer, 1.000 timer. 259 00:11:29,690 --> 00:11:31,940 Ingen visste. 260 00:11:31,940 --> 00:11:35,020 >> The Patriot batteri stasjonert ved brakkene på Dhahran 261 00:11:35,020 --> 00:11:39,030 og dens feil intern klokke hadde vært på over 100 timer på 262 00:11:39,030 --> 00:11:42,240 natt til 25. februar. 263 00:11:42,240 --> 00:11:46,580 Det spores tid til en nøyaktighet på omtrent en tiendedel av et sekund. 264 00:11:46,580 --> 00:11:48,830 Nå er en tidel av andre er en interessant tall, fordi 265 00:11:48,830 --> 00:11:52,660 det ikke kan uttrykkes i binær, nøyaktig, noe som betyr 266 00:11:52,660 --> 00:11:54,940 det ikke kan uttrykkes nøyaktig i hvilken som helst 267 00:11:54,940 --> 00:11:57,330 moderne digitale datamaskin. 268 00:11:57,330 --> 00:11:59,130 Det er vanskelig å tro. 269 00:11:59,130 --> 00:12:01,720 Men bruker dette som et eksempel. 270 00:12:01,720 --> 00:12:04,090 >> La oss ta nummer én tredjedel. 271 00:12:04,090 --> 00:12:07,950 En tredjedel kan ikke uttrykkes i desimal, akkurat. 272 00:12:07,950 --> 00:12:12,710 En tredjedel er 0.333 skjer for uendelig. 273 00:12:12,710 --> 00:12:17,050 Det er ingen måte å gjøre det med absolutt nøyaktighet i desimal. 274 00:12:17,050 --> 00:12:19,340 Det er akkurat samme type problem som skjedde i 275 00:12:19,340 --> 00:12:20,190 Patriot. 276 00:12:20,190 --> 00:12:24,680 Jo lenger systemet løp, jo verre tidspunkt feilen ble. 277 00:12:24,680 --> 00:12:28,640 Etter 100 timers drift, var feilen i tide bare 278 00:12:28,640 --> 00:12:29,870 om lag en tredjedel av et sekund. 279 00:12:29,870 --> 00:12:34,790 Men i form av målretting en rakett som reiser på Mach 5, 280 00:12:34,790 --> 00:12:39,140 det resulterte i en relativ volatilitet på over 600 meter. 281 00:12:39,140 --> 00:12:42,510 Det ville være en fatal feil for soldatene ved Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> Hva skjedde er en Scud lanseringen ble oppdaget av tidlig varsling 283 00:12:48,680 --> 00:12:52,440 satellitter og de visste at Scud kom i deres 284 00:12:52,440 --> 00:12:53,350 generelle retning. 285 00:12:53,350 --> 00:12:55,470 De visste ikke hvor det kom. 286 00:12:55,470 --> 00:12:58,210 Det var nå opp til radaren komponenten av Patriot 287 00:12:58,210 --> 00:13:01,920 system, forsvarer Dhahran, for å finne og holde orden på 288 00:13:01,920 --> 00:13:03,700 innkommende fiendtlige raketter. 289 00:13:03,700 --> 00:13:05,390 Radaren var veldig smart. 290 00:13:05,390 --> 00:13:07,570 Du ville faktisk spore posisjonen til Scud og deretter 291 00:13:07,570 --> 00:13:10,340 forutsi hvor det sannsynligvis ville bli den neste gang 292 00:13:10,340 --> 00:13:12,040 radar sendte en puls ut. 293 00:13:12,040 --> 00:13:13,730 Som ble kalt serien gate. 294 00:13:13,730 --> 00:13:18,820 Deretter, når Patriot bestemmer nok tid har gått til å gå 295 00:13:18,820 --> 00:13:22,600 tilbake og sjekke neste plassering for denne oppdaget 296 00:13:22,600 --> 00:13:24,190 objekt, går den tilbake. 297 00:13:24,190 --> 00:13:27,940 Så når det gikk tilbake til feil sted, ser det da ingen 298 00:13:27,940 --> 00:13:31,000 innvende, og det bestemmer at det ikke var noen objekt. 299 00:13:31,000 --> 00:13:34,370 Det var en falsk deteksjon og faller sporet. 300 00:13:34,370 --> 00:13:37,630 >> Den innkommende Scud forsvant fra radarskjermen. 301 00:13:37,630 --> 00:13:41,300 Og sekunder senere, slengte den inn i brakkene. Den Scud 302 00:13:41,300 --> 00:13:44,730 drept 28 og var den siste sparken under 303 00:13:44,730 --> 00:13:46,450 den første Gulf-krigen. 304 00:13:46,450 --> 00:13:50,570 Tragisk, kom den oppdaterte programvaren på Dhahran 305 00:13:50,570 --> 00:13:52,060 den påfølgende dagen. 306 00:13:52,060 --> 00:13:56,210 Og programvaren feilen hadde blitt fikset, lukke et kapittel i 307 00:13:56,210 --> 00:13:58,370 den urolige historie Patriot missilet. 308 00:14:01,790 --> 00:14:04,990 PATRIOT er faktisk et akronym for "faset array Tracking 309 00:14:04,990 --> 00:14:08,516 Skjæringspunktet for Target ". 310 00:14:08,516 --> 00:14:13,390 >> All right, så en mye mer sørgmodig utfallet av ikke helt 311 00:14:13,390 --> 00:14:14,430 forstå denne verden. 312 00:14:14,430 --> 00:14:18,180 Og takeaway, egentlig, fra filmen er at løsningen 313 00:14:18,180 --> 00:14:20,790 Det var starte rakettforsvar 314 00:14:20,790 --> 00:14:21,770 hver gang på en stund. 315 00:14:21,770 --> 00:14:24,280 Og så igjen, en av målene for dette kurset, sikkert 316 00:14:24,280 --> 00:14:26,900 på en mer ydmyk skala enn disse programmene, er å 317 00:14:26,900 --> 00:14:30,710 virkelig åpne alles øyne til nøyaktig hvordan du går om 318 00:14:30,710 --> 00:14:34,380 lage maskiner gjøre hva du vil de skal gjøre og hvordan du går 319 00:14:34,380 --> 00:14:37,180 om å gjøre det riktig, mens underveis gjør det 320 00:14:37,180 --> 00:14:38,810 vel, elegant, og så videre. 321 00:14:38,810 --> 00:14:41,680 Og så i dag, la oss dykke inn i en litt mer av dette, men 322 00:14:41,680 --> 00:14:44,210 slik at vi ikke går for fort, spesielt for de mindre 323 00:14:44,210 --> 00:14:46,590 komfortable, men også slik at vi kan beholde interessen til 324 00:14:46,590 --> 00:14:49,390 de mer komfortable, la oss bare raskt begynne med litt 325 00:14:49,390 --> 00:14:50,970 av oppsummering av noen av disse ideene. 326 00:14:50,970 --> 00:14:53,710 Og igjen, spør unna, både i person eller online, hvis du har 327 00:14:53,710 --> 00:14:56,320 spørsmål slik at vi kan holde alle på samme side. 328 00:14:56,320 --> 00:14:58,820 >> Så CS50 Appliance, raske skritt tilbake, er 329 00:14:58,820 --> 00:15:02,360 hva med dine egne ord? 330 00:15:02,360 --> 00:15:06,454 Det er OK hvis du har ingen anelse om hva disse ordene kan være ennå. 331 00:15:06,454 --> 00:15:07,830 [Uhørlig] 332 00:15:07,830 --> 00:15:10,950 Ok, så en universell grensesnitt for - 333 00:15:10,950 --> 00:15:11,900 at vi alle kan dele. 334 00:15:11,900 --> 00:15:12,470 Absolutt. 335 00:15:12,470 --> 00:15:14,840 Så vi kunne, for eksempel, fortelle deg å gå til noen 336 00:15:14,840 --> 00:15:16,910 nettside, laste ned denne programvaren for Mac OS. 337 00:15:16,910 --> 00:15:19,140 Last ned denne programvaren for Windows, konfigurere i 338 00:15:19,140 --> 00:15:20,100 denne måten, og at. 339 00:15:20,100 --> 00:15:22,370 Men realiteten er da vi får utallige tekniske 340 00:15:22,370 --> 00:15:23,200 støtte problemer. 341 00:15:23,200 --> 00:15:26,630 Og også i disse dager, mye av hva som blir gjort server side, 342 00:15:26,630 --> 00:15:28,490 i verden av databehandling, spesielt når det kommer til 343 00:15:28,490 --> 00:15:31,460 webutvikling og web-baserte applikasjoner, er faktisk 344 00:15:31,460 --> 00:15:35,110 ganske ofte gjort på Unix eller Linux-maskiner, i motsetning til 345 00:15:35,110 --> 00:15:36,800 Mac eller Windows-PCer. 346 00:15:36,800 --> 00:15:39,240 >> Så blant oppsider, da, for å bruke dette som kalles 347 00:15:39,240 --> 00:15:41,500 CS50 Appliance er vi alle har det samme miljøet. 348 00:15:41,500 --> 00:15:43,670 Så alle er på samme side uansett hvilken maskinvare du 349 00:15:43,670 --> 00:15:46,650 kom til campus med, men også vil bli dabbling i nøyaktig 350 00:15:46,650 --> 00:15:48,230 det samme miljøet som du skal bruke mot 351 00:15:48,230 --> 00:15:51,080 semesters slutt også for webutvikling, samt i 352 00:15:51,080 --> 00:15:53,580 fremtiden for virkelige verden programmer derav. 353 00:15:53,580 --> 00:15:56,350 Så mer konkret, er det CS50 Appliance et gratis stykke 354 00:15:56,350 --> 00:15:59,400 programvare som lar deg kjøre et annet operativsystem, 355 00:15:59,400 --> 00:16:02,670 Linux, i dette tilfellet, på din egen datamaskin, i et vindu. 356 00:16:02,670 --> 00:16:04,750 Nå kan du ikke bare laste ned apparatet. 357 00:16:04,750 --> 00:16:08,170 Du trenger et program som brukes til å spille av eller bruke maskinen. 358 00:16:08,170 --> 00:16:11,220 Og at stykke programvare er generelt kjent 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 Alle slags selskaper gjør programvare, både gratis og 363 00:16:18,390 --> 00:16:19,310 kommersiell, likt. 364 00:16:19,310 --> 00:16:21,480 Hva du vil se i oppgave Set 1 er instruksjoner om hvordan du 365 00:16:21,480 --> 00:16:23,440 få gratis programvare som å 366 00:16:23,440 --> 00:16:25,000 kjøre CS50 Appliance. 367 00:16:25,000 --> 00:16:28,060 Og når du gjør det, vil du ha i et vindu på Mac eller PC, 368 00:16:28,060 --> 00:16:30,710 et skrivebordsmiljø som ser ganske som dette, hvor 369 00:16:30,710 --> 00:16:33,100 den har en Start-menyen-lignende ting i 370 00:16:33,100 --> 00:16:34,510 nederst i venstre hjørne. 371 00:16:34,510 --> 00:16:38,030 Den har en Hjem-mappen, eller Hjem-katalogen, i øvre venstre 372 00:16:38,030 --> 00:16:40,280 der, en søppelbøtta, og så videre. 373 00:16:40,280 --> 00:16:43,450 Så vi vil skille fra hverandre de nødvendige detaljer som vi går. 374 00:16:43,450 --> 00:16:46,430 >> Men la oss nå begynne å dykke inn i C. 375 00:16:46,430 --> 00:16:49,200 Så C er dette programmeringsspråk, ligner i ånden til 376 00:16:49,200 --> 00:16:52,390 Scratch, men langt mindre grafisk, men ironisk nok, langt 377 00:16:52,390 --> 00:16:54,730 kraftigere når du får kunnskapsrike med det. 378 00:16:54,730 --> 00:16:58,970 Så i C, skriver vi programmer ved å skrive kildekode, som er 379 00:16:58,970 --> 00:17:01,640 denne engelsk-lignende syntaks, ligner på sokker 380 00:17:01,640 --> 00:17:05,609 demonstrasjon som vi gjorde sist gang som lar deg 381 00:17:05,609 --> 00:17:07,910 uttrykke deg ganske nøyaktig, hvis 382 00:17:07,910 --> 00:17:09,760 arcanely, til datamaskinen. 383 00:17:09,760 --> 00:17:11,960 >> Så hva slags produkt programvare trenger du faktisk trenger 384 00:17:11,960 --> 00:17:15,520 å skrive programmer i et språk som C, basert på vår 385 00:17:15,520 --> 00:17:17,492 samtale på mandag? 386 00:17:17,492 --> 00:17:19,650 [Uhørlig] 387 00:17:19,650 --> 00:17:21,079 OK, du trenger bare en tekst editor. 388 00:17:21,079 --> 00:17:22,890 Du trenger ikke noen spesiell programvare 389 00:17:22,890 --> 00:17:24,460 per se å skrive programmer. 390 00:17:24,460 --> 00:17:27,220 Du trenger bare en tekst editor som Notisblokk, på Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit på Mac, eller noe som kalles gedit, i verden av 392 00:17:30,450 --> 00:17:32,020 Linux, som vi vil bruke her. 393 00:17:32,020 --> 00:17:33,750 Og det er det, å skrive programmene. 394 00:17:33,750 --> 00:17:35,480 >> Men skriving er bare halvparten av ligningen. 395 00:17:35,480 --> 00:17:36,630 Du da trenger å kjøre dem. 396 00:17:36,630 --> 00:17:38,320 Men for å kjøre programmer - 397 00:17:38,320 --> 00:17:39,600 du kan ikke kjøre kildekode. 398 00:17:39,600 --> 00:17:41,500 Du i stedet må gjøre det til det første? 399 00:17:41,500 --> 00:17:41,900 Ja. 400 00:17:41,900 --> 00:17:43,200 DAVID J. MALAN: Du må 401 00:17:43,200 --> 00:17:44,130 kompilere den. 402 00:17:44,130 --> 00:17:49,010 Og noen andre, kompilere kildekoden betyr - 403 00:17:49,010 --> 00:17:50,260 [Uhørlig] 404 00:17:52,300 --> 00:17:52,700 DAVID J. MALAN: Nettopp. 405 00:17:52,700 --> 00:17:54,430 Oversette det til nuller og enere. 406 00:17:54,430 --> 00:17:57,150 Fordi alle av oss, i disse dager, har datamaskiner som har CPUer, 407 00:17:57,150 --> 00:18:00,350 nesten alle som er tatt opp av et firma som kalles Intel, og 408 00:18:00,350 --> 00:18:03,320 Intel Inside, betyr at det er dette hjernen innsiden av 409 00:18:03,320 --> 00:18:04,990 datamaskin, kjent som CPU. 410 00:18:04,990 --> 00:18:07,570 Og en av de tingene som at hjernen fungerer er, det vet 411 00:18:07,570 --> 00:18:10,390 hvordan å forstå mønstre av nuller og enere. 412 00:18:10,390 --> 00:18:13,240 Den vet hva mønster av biter representerer tillegg, hva 413 00:18:13,240 --> 00:18:15,500 mønster representerer subtraksjoner, hva mønster av 414 00:18:15,500 --> 00:18:18,890 bits representerer utskrift, og skape en hørbar lyd. 415 00:18:18,890 --> 00:18:22,450 >> Så kort sagt, CPU, kombinert med operativsystemet, 416 00:18:22,450 --> 00:18:25,230 som er et stykke programvare som kjører på toppen av CPU, 417 00:18:25,230 --> 00:18:26,050 så å si. 418 00:18:26,050 --> 00:18:29,850 Sammen disse to stykker vet hvordan du kjører programmer som 419 00:18:29,850 --> 00:18:31,070 vi mennesker skrive. 420 00:18:31,070 --> 00:18:34,040 >> Så hvis jeg går inn i CS50 Appliance her, jeg trenger å åpne 421 00:18:34,040 --> 00:18:35,660 opp en tekst editor, og jeg kan få tilgang til denne 422 00:18:35,660 --> 00:18:36,560 i et par måter. 423 00:18:36,560 --> 00:18:39,060 Jeg kan enten gå til Meny, programmering, 424 00:18:39,060 --> 00:18:40,230 og da kan jeg velge - 425 00:18:40,230 --> 00:18:40,810 nope, ikke denne menyen. 426 00:18:40,810 --> 00:18:43,860 Jeg kan gå til Tilbehør / gedit her for å åpne 427 00:18:43,860 --> 00:18:45,090 min lille tekst editor. 428 00:18:45,090 --> 00:18:48,030 Eller enklere, kan jeg klikke på denne lille ikonet nederst 429 00:18:48,030 --> 00:18:48,970 venstre hjørne. 430 00:18:48,970 --> 00:18:50,430 Og nå får jeg dette miljøet her. 431 00:18:50,430 --> 00:18:52,590 Det er ganske minner om en enkel tekst editor, med bare 432 00:18:52,590 --> 00:18:53,820 en eller to forskjeller. 433 00:18:53,820 --> 00:18:56,420 I toppen, hvor markøren blinker nå, dette er hvor 434 00:18:56,420 --> 00:18:57,900 Jeg kan begynne å skrive min kode. 435 00:18:57,900 --> 00:19:00,415 I bunnen er dette som kalles terminal-vinduet. 436 00:19:00,415 --> 00:19:03,400 Og hva slags ting kan jeg gjøre i denne 437 00:19:03,400 --> 00:19:04,960 såkalte terminalvindu? 438 00:19:04,960 --> 00:19:06,680 [Uhørlig] 439 00:19:06,680 --> 00:19:07,890 >> Ok, så jeg skal kjøre kommandoer. 440 00:19:07,890 --> 00:19:10,300 Og noen av kommandoene vi kjørte på mandag var litt 441 00:19:10,300 --> 00:19:15,070 kryptiske i starten, men ls for listen, cd for change directory, 442 00:19:15,070 --> 00:19:16,540 rm, for fjerne. 443 00:19:16,540 --> 00:19:19,680 Så det er liksom en old-school måte å navigere din 444 00:19:19,680 --> 00:19:22,310 datamaskin, kun ved hjelp av tastaturet og tekstlige kommandoer, 445 00:19:22,310 --> 00:19:24,130 og ikke, generelt, ved hjelp av en mus. 446 00:19:24,130 --> 00:19:25,960 Men vi får se, lenge før, gir dette oss faktisk en 447 00:19:25,960 --> 00:19:28,520 litt mer kraft og litt mer presisjon med å 448 00:19:28,520 --> 00:19:29,600 uttrykke oss. 449 00:19:29,600 --> 00:19:31,330 Og så over her til venstre, vi bare kommer til å se, 450 00:19:31,330 --> 00:19:34,360 som vi begynner å skrive programvare, en liten oppsummering av 451 00:19:34,360 --> 00:19:36,350 program som vi har skrevet øverst til venstre. 452 00:19:36,350 --> 00:19:38,360 Men vi får se det igjen før lenge. 453 00:19:38,360 --> 00:19:40,050 >> Så la oss gjøre noe ganske enkelt her. 454 00:19:40,050 --> 00:19:43,440 La meg først gå videre og gå til Fil, Lagre, og jeg er bare 455 00:19:43,440 --> 00:19:45,970 kommer til å klikke på jharvard her, over til venstre, og 456 00:19:45,970 --> 00:19:48,930 jharvard er, igjen, navnet for mitt hjem-mappen, min 457 00:19:48,930 --> 00:19:52,110 personlige filer, meg nå er John Harvard, som dere alle 458 00:19:52,110 --> 00:19:54,230 vil snart være John Harvard i dette miljøet. 459 00:19:54,230 --> 00:19:57,360 Han fikk denne Hjem-katalogen, Mine dokumenter og så videre, 460 00:19:57,360 --> 00:19:58,900 som jeg ønsker å spare nå, denne filen i. 461 00:19:58,900 --> 00:20:01,520 Så jeg kommer til å kalle det hallo.c. Så jeg kommer til å gå 462 00:20:01,520 --> 00:20:05,770 fremover og klikker på Lagre, og nå hva jeg har her er en fane 463 00:20:05,770 --> 00:20:09,440 kalt hallo.c, så mye som en annen type editor. 464 00:20:09,440 --> 00:20:11,760 >> Så nå la meg gå videre og begynne å skrive et program. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 Og da jeg bare gjorde sist gang, printf, for utskrift formatert, 467 00:20:18,150 --> 00:20:22,120 ("Hei, verden!" 468 00:20:22,120 --> 00:20:24,500 );. 469 00:20:24,500 --> 00:20:25,630 Nesten ferdig. 470 00:20:25,630 --> 00:20:27,130 Men jeg mangler et par detaljer. 471 00:20:27,130 --> 00:20:30,210 Hva mangler i dette programmet at jeg virkelig trenger for 472 00:20:30,210 --> 00:20:31,890 det å faktisk lage? 473 00:20:31,890 --> 00:20:32,130 Ja. 474 00:20:32,130 --> 00:20:33,980 [Uhørlig]? 475 00:20:33,980 --> 00:20:35,770 >> DAVID J. MALAN: Ja, så jeg trenger å inkludere standard 476 00:20:35,770 --> 00:20:36,700 I / O-bibliotek. 477 00:20:36,700 --> 00:20:39,470 Så dette må gå over main, så jeg skal bare 478 00:20:39,470 --> 00:20:40,790 gjøre noen plass for det der. 479 00:20:40,790 --> 00:20:44,420 Og jeg kommer til å gjøre # include . 480 00:20:44,420 --> 00:20:46,570 Og legg merke til de festemateriell der. 481 00:20:46,570 --> 00:20:49,410 Og som en side, er gedit litt brukervennlig, hvis 482 00:20:49,410 --> 00:20:52,420 noen ganger litt forvirrende, ved at den prøver å hjelpe 483 00:20:52,420 --> 00:20:54,770 øyne merke til hva linje med hva. 484 00:20:54,770 --> 00:20:57,760 Så det faktum at min markøren er rett ved siden av denne vinklet 485 00:20:57,760 --> 00:21:00,600 brakett, legge merke til hvordan det er å fremheve den andre vinklet 486 00:21:00,600 --> 00:21:01,920 brakett pluss denne. 487 00:21:01,920 --> 00:21:03,770 Og det er bare å trekke min oppmerksomhet til det faktum at jeg 488 00:21:03,770 --> 00:21:04,460 har symmetri. 489 00:21:04,460 --> 00:21:07,010 Og symmetri i programmering er vanligvis en god ting. 490 00:21:07,010 --> 00:21:10,270 Tilsvarende, hvis jeg flytter markøren til slutten, legg merke til hvordan den 491 00:21:10,270 --> 00:21:13,630 klammeparentes i kø for å vise at, ja, jeg har en åpen 492 00:21:13,630 --> 00:21:15,160 og et lukket, så å si. 493 00:21:15,160 --> 00:21:16,640 >> Greit, og jeg kan gjøre en annen ting. 494 00:21:16,640 --> 00:21:20,090 Det er ikke strengt nødvendig, men god praksis, for å si 495 00:21:20,090 --> 00:21:21,250 returnere 0. 496 00:21:21,250 --> 00:21:24,140 Og return 0 gjør hva for oss her? 497 00:21:24,140 --> 00:21:25,584 Eller betyr det? 498 00:21:25,584 --> 00:21:27,480 [Uhørlig] 499 00:21:27,480 --> 00:21:28,300 DAVID J. MALAN: Men ingenting er galt. 500 00:21:28,300 --> 00:21:30,280 Og ærlig er det vanskelig for mye å gå galt i en 501 00:21:30,280 --> 00:21:31,250 programmere denne korte. 502 00:21:31,250 --> 00:21:33,930 Så jeg bare være super eksplisitt at alt er vel. 503 00:21:33,930 --> 00:21:36,740 Jeg, den menneskelige, når jeg kjører dette programmet, vil trolig aldri 504 00:21:36,740 --> 00:21:38,150 se at 0. 505 00:21:38,150 --> 00:21:41,070 Vanligvis er disse tallene som blir returnert fra viktigste 506 00:21:41,070 --> 00:21:43,540 bare oppdra sine hoder til mennesker når 507 00:21:43,540 --> 00:21:44,360 noe går galt. 508 00:21:44,360 --> 00:21:46,640 Og du får en liten pop opp med å si systemfeil, en, 509 00:21:46,640 --> 00:21:48,760 to, tre, eller hva nummeret var at 510 00:21:48,760 --> 00:21:50,100 var faktisk returnert. 511 00:21:50,100 --> 00:21:52,870 Så noe annet galt med dette? 512 00:21:52,870 --> 00:21:55,300 [Uhørlig] 513 00:21:55,300 --> 00:21:58,100 >> DAVID J. MALAN: Så dette er ikke så mye en funksjonell feil 514 00:21:58,100 --> 00:21:59,240 men en estetisk opplevelse. 515 00:21:59,240 --> 00:22:02,340 Jeg bør nok sette i en ny linje karakter der på 516 00:22:02,340 --> 00:22:05,240 slutten av denne strengen, slik at vi faktisk flytte markøren til 517 00:22:05,240 --> 00:22:08,340 neste linje, og programmet ser bare litt penere. 518 00:22:08,340 --> 00:22:10,340 >> Så nå la meg gå ned til min terminal-vinduet 519 00:22:10,340 --> 00:22:11,490 og zoom tilbake igjen 520 00:22:11,490 --> 00:22:13,390 Og denne tingen her, det kalles spørsmålet. 521 00:22:13,390 --> 00:22:16,760 Det er bare minner meg på hvem jeg er, jharvard @ apparatet, hvor 522 00:22:16,760 --> 00:22:18,850 Apparatet er navnet på maskinen jeg er på. 523 00:22:18,850 --> 00:22:22,380 I parentes er dette tilde, den squiggle symbol, som 524 00:22:22,380 --> 00:22:24,160 representerer hva? 525 00:22:24,160 --> 00:22:25,590 PUBLIKUM: Hjem katalogen. 526 00:22:25,590 --> 00:22:26,350 DAVID J. MALAN: Hjem katalogen. 527 00:22:26,350 --> 00:22:29,350 Så det er bare en snarvei notasjon for å si at du er i 528 00:22:29,350 --> 00:22:32,780 den personlige mappen hvor alle filene går som standard. 529 00:22:32,780 --> 00:22:36,080 Så nå, her kan jeg skrive ls for listen. 530 00:22:36,080 --> 00:22:40,020 Og det eneste jeg ser her i øyeblikket er hallo.c. 531 00:22:40,020 --> 00:22:41,770 Og det er bra fordi jeg bare skrev dette. 532 00:22:41,770 --> 00:22:44,380 >> Så la meg gå videre og gjør hallo. 533 00:22:44,380 --> 00:22:46,830 Og legg merke til jeg ikke skrive foreta hallo.c. 534 00:22:46,830 --> 00:22:50,300 I stedet, jeg bare skrive basen navnet på filen, hallo. 535 00:22:50,300 --> 00:22:53,690 Og gjøre, som vi så på mandag, vil bare antyde at jeg ønsker 536 00:22:53,690 --> 00:22:54,920 den. c-fil. 537 00:22:54,920 --> 00:22:56,820 Så nå har jeg skrevet at hallo. 538 00:22:56,820 --> 00:22:59,280 Nå ser jeg dette ganske lang kommando og vil fortsette 539 00:22:59,280 --> 00:23:00,480 se dette igjen og igjen. 540 00:23:00,480 --> 00:23:03,620 Men for å være klar, clang, ordet som bare dukket opp, 541 00:23:03,620 --> 00:23:05,340 som er den faktiske kompilatoren. 542 00:23:05,340 --> 00:23:08,200 Gjør er bare en bygge verktøyet. 543 00:23:08,200 --> 00:23:11,900 Det er bare en mer brukervennlig program som sparer meg, i 544 00:23:11,900 --> 00:23:15,310 lang sikt, fra å måtte skrive ut utrolig kjedelig lang 545 00:23:15,310 --> 00:23:17,020 kommandoer sånn en. 546 00:23:17,020 --> 00:23:18,950 Så du kan kjøre Clang manuelt. 547 00:23:18,950 --> 00:23:20,530 Du kan skrive alt dette manuelt. 548 00:23:20,530 --> 00:23:21,580 Bare blir veldig kjedelig. 549 00:23:21,580 --> 00:23:24,720 Og så gjør er bare et program som forenkler våre liv og 550 00:23:24,720 --> 00:23:27,120 kjører mer komplekse kommandoer for oss. 551 00:23:27,120 --> 00:23:29,410 >> All right, så nå hva filen bør jeg ha 552 00:23:29,410 --> 00:23:31,540 i min nåværende katalogen? 553 00:23:31,540 --> 00:23:36,310 Ikke bare hallo.c, men også hei. 554 00:23:36,310 --> 00:23:39,710 Så hvis jeg vil kjøre hallo, husker at jeg sier dot slash, 555 00:23:39,710 --> 00:23:42,220 hvor dot betyr gå inn i gjeldende mappe, uansett hvor du 556 00:23:42,220 --> 00:23:46,060 er, og så kjøre programmet heter Hallo, og ja, nå, 557 00:23:46,060 --> 00:23:48,080 Jeg har hallo verden. 558 00:23:48,080 --> 00:23:51,640 Greit, noen spørsmål på arbeidsflyt eller syntaksen 559 00:23:51,640 --> 00:23:52,890 hva vi nettopp gjorde? 560 00:23:55,380 --> 00:23:57,040 >> All right, så la oss ta ting opp et hakk igjen. 561 00:23:57,040 --> 00:24:00,430 Så dette var underwhelming å bare skrive et program som bare 562 00:24:00,430 --> 00:24:01,790 noensinne sier Hei, verden. 563 00:24:01,790 --> 00:24:03,920 Så vi endret det, på mandag, for å si hei, David. 564 00:24:03,920 --> 00:24:06,560 Det er litt mer personlig, men like hard kodet som 565 00:24:06,560 --> 00:24:07,410 Første versjon. 566 00:24:07,410 --> 00:24:08,780 Så ikke alle som overbevisende. 567 00:24:08,780 --> 00:24:13,120 Men det finnes, i C, funksjoner absolutt foruten 568 00:24:13,120 --> 00:24:15,700 print, funksjoner som gjør at du får inndata fra brukeren. 569 00:24:15,700 --> 00:24:17,990 Og måten vi gjorde dette, den andre dagen, var som følger. 570 00:24:17,990 --> 00:24:21,440 Før jeg faktisk skrive ut noe, jeg først fikk 571 00:24:21,440 --> 00:24:22,410 noe fra brukeren. 572 00:24:22,410 --> 00:24:23,370 Så la meg gjøre dette igjen. 573 00:24:23,370 --> 00:24:26,580 >> String s, hvor s er bare en tilfeldig navn, her, for en 574 00:24:26,580 --> 00:24:30,600 streng, lik GetString. 575 00:24:30,600 --> 00:24:32,070 Så hva var GetString? 576 00:24:32,070 --> 00:24:34,630 Det blir åpenbart en streng, basert på navnet. 577 00:24:34,630 --> 00:24:37,560 Men hva er det, mer teknisk? 578 00:24:37,560 --> 00:24:38,440 Det er en funksjon. 579 00:24:38,440 --> 00:24:41,790 Så det er en funksjon som ikke kommer med C per se. 580 00:24:41,790 --> 00:24:43,660 CS50 ansatte skrev dette. 581 00:24:43,660 --> 00:24:46,940 Og så å bruke denne, kan du ikke bare ta stdio.h, 582 00:24:46,940 --> 00:24:49,630 Du må også ta med hva? 583 00:24:49,630 --> 00:24:50,060 Ja. 584 00:24:50,060 --> 00:24:54,210 Så cs50.h, som er bare en fil skrev vi for noen år siden. 585 00:24:54,210 --> 00:24:57,130 Vi installerte det på apparatet for deg sammen 586 00:24:57,130 --> 00:24:58,490 alle vanlige filer. 587 00:24:58,490 --> 00:25:00,500 Og så i disse første ukene av klassen, vil vi bruke 588 00:25:00,500 --> 00:25:02,820 dette bare for å forenkle prosessen med å gjøre svært grunnleggende 589 00:25:02,820 --> 00:25:04,600 ting som får inndata fra brukeren. 590 00:25:04,600 --> 00:25:07,370 Fordi vi vil se i et par uker, får inndata fra brukeren i en 591 00:25:07,370 --> 00:25:10,180 språk som C er faktisk overraskende komplisert, 592 00:25:10,180 --> 00:25:14,360 spesielt fordi du ikke vet på forhånd, vanligvis, hvordan 593 00:25:14,360 --> 00:25:17,030 mye ting brukeren kommer til å skrive i. 594 00:25:17,030 --> 00:25:20,340 Og når du ikke vet hvor mye data du kan forvente, trenger du ikke 595 00:25:20,340 --> 00:25:22,380 vet hvor mye minne til å tildele. 596 00:25:22,380 --> 00:25:25,480 Og hvis du faktisk har en motstandere bruker som prøver 597 00:25:25,480 --> 00:25:28,180 å hacke seg inn i systemet ditt, krasje datamaskinen, vel, 598 00:25:28,180 --> 00:25:31,600 vanligvis den første metoden for angrep er, akkurat som jeg gjorde på 599 00:25:31,600 --> 00:25:34,950 Mandag, skriver en hel lang sekvens med tilfeldige tegn, 600 00:25:34,950 --> 00:25:37,020 trykk Enter, og se hva bryter. 601 00:25:37,020 --> 00:25:40,800 Fordi generelt, hvis et program pauser, hint at 602 00:25:40,800 --> 00:25:42,650 en sikkerhetsfeil, potensielt. 603 00:25:42,650 --> 00:25:45,250 Det antyder absolutt på deg, programmerer, har gjort en 604 00:25:45,250 --> 00:25:49,050 feil, men mer farlig, kanskje du har gjort en 605 00:25:49,050 --> 00:25:52,430 sikkerhetsrelaterte feil, og generelt vil vi se at 606 00:25:52,430 --> 00:25:54,840 det er hvordan maskinene er kompromittert til denne dag, både 607 00:25:54,840 --> 00:25:56,620 i verden av web og programmer på 608 00:25:56,620 --> 00:25:58,070 kommandolinjen, som dette. 609 00:25:58,070 --> 00:25:58,350 >> OK. 610 00:25:58,350 --> 00:26:00,460 Så streng s tilsvarer GetString. 611 00:26:00,460 --> 00:26:03,380 Så mer konkret nå, hva linje 6 gjøre her? 612 00:26:03,380 --> 00:26:05,640 Så funksjonen til høyre får streng, 613 00:26:05,640 --> 00:26:06,890 tar hvor mange argumenter? 614 00:26:09,458 --> 00:26:09,900 Okay. 615 00:26:09,900 --> 00:26:10,400 Så ingen. 616 00:26:10,400 --> 00:26:11,360 En liten mental helse sjekk. 617 00:26:11,360 --> 00:26:15,380 Et argument, igjen, er bare en inngang til en funksjon for å endre 618 00:26:15,380 --> 00:26:17,250 sin standard virkemåte på noen måte. 619 00:26:17,250 --> 00:26:19,540 Men i dette tilfellet har jeg ikke lyst til å endre 620 00:26:19,540 --> 00:26:20,650 oppførselen til GetString. 621 00:26:20,650 --> 00:26:22,430 Jeg ville bare få en streng. 622 00:26:22,430 --> 00:26:25,190 Så jeg satte ingenting i parentes, og da jeg satte en 623 00:26:25,190 --> 00:26:27,550 semikolon demarking slutten av linje med kode. 624 00:26:27,550 --> 00:26:29,840 Nå likhetstegnet betyr ikke lik, per se. 625 00:26:29,840 --> 00:26:32,690 Det betyr oppdrag, noe som betyr plassere hva får 626 00:26:32,690 --> 00:26:36,060 outputted på høyre innsiden av det som er på venstre side. 627 00:26:36,060 --> 00:26:39,400 >> Så til venstre, sier vi at vi har erklært en 628 00:26:39,400 --> 00:26:41,630 string kalt s. 629 00:26:41,630 --> 00:26:44,240 Og mer spesifikt, har vi tildelt minne innsiden av 630 00:26:44,240 --> 00:26:46,340 som vi vil sette biter som representerer en sekvens av 631 00:26:46,340 --> 00:26:46,850 tegn. 632 00:26:46,850 --> 00:26:49,400 Men i dag har vi tildelt 633 00:26:49,400 --> 00:26:51,450 eller erklært en streng. 634 00:26:51,450 --> 00:26:51,790 OK. 635 00:26:51,790 --> 00:26:54,760 Så nå når jeg har gjort dette, vil jeg plugge i verdien av 636 00:26:54,760 --> 00:26:56,535 s, ikke verdien av David. 637 00:26:56,535 --> 00:27:00,200 Så dette er galt hvorfor? 638 00:27:03,060 --> 00:27:04,870 Så dette er bare bokstavelig hardkodet s. 639 00:27:04,870 --> 00:27:06,870 Det er å si "Hei, s", som er ikke hva jeg vil. 640 00:27:06,870 --> 00:27:07,790 Så jeg kan gjøre dette. 641 00:27:07,790 --> 00:27:10,330 Prosenttegnet er en plassholder, men nå trenger jeg å 642 00:27:10,330 --> 00:27:12,520 passere inn skrive et annet argument. 643 00:27:12,520 --> 00:27:15,160 Husker at argumenter til funksjoner er adskilt med 644 00:27:15,160 --> 00:27:20,300 komma, så neste komma her jeg satt etter dette brevet er. 645 00:27:20,300 --> 00:27:23,740 Og i denne sammenheng nå, s er variabel, og printf, 646 00:27:23,740 --> 00:27:25,550 ved mottak disse to innganger - 647 00:27:25,550 --> 00:27:29,440 strengen til venstre og variabelnavnet s på høyre - 648 00:27:29,440 --> 00:27:32,750 det vil plugge det sistnevnte i det tidligere for oss, og 649 00:27:32,750 --> 00:27:34,600 bare skrive ut en fin vakker streng med 650 00:27:34,600 --> 00:27:36,770 hva det er som vi skrev i. 651 00:27:36,770 --> 00:27:37,560 >> Så la oss prøve dette. 652 00:27:37,560 --> 00:27:38,860 Kommer til å gå videre og zoome ut, tilbake 653 00:27:38,860 --> 00:27:40,250 til min terminal-vinduet. 654 00:27:40,250 --> 00:27:41,840 Zoome inn på bunnen her. 655 00:27:41,840 --> 00:27:44,070 Skriv lage hello. 656 00:27:44,070 --> 00:27:45,870 Clang synes å ha vært reprise. 657 00:27:45,870 --> 00:27:49,280 Jeg kommer til å skrive. / Hallo, Enter. 658 00:27:49,280 --> 00:27:52,145 Ingenting synes å skje ennå, men det er på denne meldingen 659 00:27:52,145 --> 00:27:55,700 at jeg kan skrive noe sånt Nate, Enter, og nå har vi 660 00:27:55,700 --> 00:27:56,380 Hei, Nate. 661 00:27:56,380 --> 00:27:59,600 Og jeg kan gjøre det igjen med Rob, og så videre. 662 00:27:59,600 --> 00:28:03,410 Så forhåpentligvis nå dette programmet oppfører seg som jeg har tenkt. 663 00:28:03,410 --> 00:28:05,720 >> Nå, ikke alle som brukervennlig. 664 00:28:05,720 --> 00:28:07,930 Jeg har ingen anelse om hva som blir forventet av meg. 665 00:28:07,930 --> 00:28:09,620 Så vi kan sikkert rydde opp litt. 666 00:28:09,620 --> 00:28:13,270 La meg gå tilbake her oppe, og i stedet for bare dykking i og 667 00:28:13,270 --> 00:28:16,480 spør brukeren om en streng, la meg tydelig fortelle 668 00:28:16,480 --> 00:28:17,750 bruker det jeg forventer. 669 00:28:17,750 --> 00:28:21,610 Så printf ("Skriv inn en streng:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Så ingen variabler her. 672 00:28:25,510 --> 00:28:26,750 Ingen prosenttegn. 673 00:28:26,750 --> 00:28:28,550 Bare det enkle engelske uttrykket. 674 00:28:28,550 --> 00:28:34,030 La meg nå gå til bunns her og kjør programmet mitt. 675 00:28:34,030 --> 00:28:35,380 Men ingenting ser ut til å ha endret seg. 676 00:28:35,380 --> 00:28:37,350 Hvorfor? 677 00:28:37,350 --> 00:28:38,380 Jeg må rekompilere det. 678 00:28:38,380 --> 00:28:39,570 Så enkel feil å gjøre. 679 00:28:39,570 --> 00:28:41,700 Men du må ikke bare lagre filen, men 680 00:28:41,700 --> 00:28:43,260 rekompilere programmet. 681 00:28:43,260 --> 00:28:46,640 Og så hvis jeg re-run gjøre hallo, nå Clang går. 682 00:28:46,640 --> 00:28:51,800 Nå kan jeg kjøre. / Hallo. Og nå ser jeg "Angi en streng:". 683 00:28:51,800 --> 00:28:52,050 Okay. 684 00:28:52,050 --> 00:28:53,440 Nå er det litt mer brukervennlig. 685 00:28:53,440 --> 00:28:55,850 Nate, Enter, hallo, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Vel, la oss prøve dette igjen og begynne å tenke 687 00:28:57,310 --> 00:28:58,080 om hjørnet tilfeller. 688 00:28:58,080 --> 00:29:00,520 Så akkurat som i Scratch, er du oppmuntret eller blir 689 00:29:00,520 --> 00:29:03,180 oppmuntret i spec å slags tenke på hva kunne gå 690 00:29:03,180 --> 00:29:06,610 galt hvis du ikke forventer alt brukeren måtte gjøre. 691 00:29:06,610 --> 00:29:08,050 Bugs, derfor kan følge. 692 00:29:08,050 --> 00:29:09,710 Så skriv en streng - 693 00:29:09,710 --> 00:29:11,130 hva er et hjørne tilfelle her? 694 00:29:11,130 --> 00:29:13,320 Hva er et scenario som jeg, programmerer, ikke kan ha 695 00:29:13,320 --> 00:29:16,070 forventet? 696 00:29:16,070 --> 00:29:17,600 Ja. 697 00:29:17,600 --> 00:29:17,920 Okay. 698 00:29:17,920 --> 00:29:22,060 Så hva om jeg skriver i en rekke som dette? 699 00:29:22,060 --> 00:29:22,500 OK. 700 00:29:22,500 --> 00:29:24,490 Så det fungerer fremdeles. 701 00:29:24,490 --> 00:29:25,880 Gramatically gir ingen mening. 702 00:29:25,880 --> 00:29:27,180 Men minst programmet fungerer. 703 00:29:27,180 --> 00:29:28,650 >> Hva er et annet hjørne saken? 704 00:29:28,650 --> 00:29:29,610 Noe jeg ikke forvente. 705 00:29:29,610 --> 00:29:31,590 Ja? 706 00:29:31,590 --> 00:29:31,940 Okay. 707 00:29:31,940 --> 00:29:34,950 Slik at vi kunne gjøre noe sånt som en virkelig, virkelig stort antall. 708 00:29:34,950 --> 00:29:37,270 Så la oss gjøre dette her. 709 00:29:37,270 --> 00:29:40,880 La meg zoome ut for et sekund, la meg fremheve. 710 00:29:40,880 --> 00:29:42,250 Kan ikke kopiere og lime inn her nede. 711 00:29:42,250 --> 00:29:42,470 OK. 712 00:29:42,470 --> 00:29:44,440 Så jeg kan ikke kopiere og lime inn i denne terminalen vinduet, så vi vil 713 00:29:44,440 --> 00:29:46,950 bare simulere det. 714 00:29:46,950 --> 00:29:51,340 La meg zoome ut, kommer til å brytes. 715 00:29:51,340 --> 00:29:52,700 Jeg har ikke tenkt til å gjøre dette for lenge, fordi det vil ikke 716 00:29:52,700 --> 00:29:54,440 faktisk bryte i dette programmet. 717 00:29:54,440 --> 00:29:55,260 Men det kunne. 718 00:29:55,260 --> 00:29:55,830 Enter. 719 00:29:55,830 --> 00:29:56,580 Men det gjorde det ikke. 720 00:29:56,580 --> 00:29:57,050 OK. 721 00:29:57,050 --> 00:29:58,440 Men det er en ekte hjørne tilfelle. 722 00:29:58,440 --> 00:30:01,610 Og den eneste grunnen til at opptrådt korrekt, så å 723 00:30:01,610 --> 00:30:05,820 snakke, er fordi CS50 funksjon GetString er faktisk 724 00:30:05,820 --> 00:30:08,040 designet under panseret, som vi skal se i et par uker, 725 00:30:08,040 --> 00:30:11,570 tildele mer og mer RAM, mer og mer 726 00:30:11,570 --> 00:30:14,330 minne fra operativsystemet, når det realiserer, wow, 727 00:30:14,330 --> 00:30:16,670 du har virkelig skrevet i noe ganske lang. 728 00:30:16,670 --> 00:30:18,500 Nå er dette litt av en hvit løgn. 729 00:30:18,500 --> 00:30:22,020 Hvis vi faktisk stoppet for en god stund, og jeg skrev i 730 00:30:22,020 --> 00:30:24,640 noe som 5000 millioner tegn på tastaturet 731 00:30:24,640 --> 00:30:28,060 her, eller virkelig treffer copy-paste ganske mye, vi ganske muligens 732 00:30:28,060 --> 00:30:29,730 kan føre til at programmet krasjer. 733 00:30:29,730 --> 00:30:32,130 Bare litt vanskeligere å simulere at med et endelig 734 00:30:32,130 --> 00:30:33,740 tidsperiode. 735 00:30:33,740 --> 00:30:37,320 >> Hva er et annet hjørne tilfelle vi kunne prøve? 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å hvorfor ikke vi svare noe? 739 00:30:40,360 --> 00:30:43,130 Slik at vi faktisk nødt til å ta noen handling, fordi ellers 740 00:30:43,130 --> 00:30:45,060 programmet kommer til å sitte der å blinke hele dagen. 741 00:30:45,060 --> 00:30:46,860 Men hvis jeg bare trykke Enter - 742 00:30:46,860 --> 00:30:48,780 OK, nå ser fortsatt feil. 743 00:30:48,780 --> 00:30:51,670 Ikke krasje, men kanskje det er nå en mulighet til å 744 00:30:51,670 --> 00:30:54,190 begynne å implementere en mer streng program 745 00:30:54,190 --> 00:30:55,290 som kontrollerer faktisk. 746 00:30:55,290 --> 00:30:57,640 Og hvis strengen, den setningen, det ord som jeg 747 00:30:57,640 --> 00:31:00,890 skrevet i har lengde 0, vel, kanskje jeg bør kjefte på 748 00:31:00,890 --> 00:31:03,770 bruker, eller fortelle ham eller henne til å skrive inn en streng igjen, slik at 749 00:31:03,770 --> 00:31:06,560 vi faktisk får noe som ligner riktig atferd og ikke 750 00:31:06,560 --> 00:31:08,570 bare komplett oversikt for min del. 751 00:31:08,570 --> 00:31:11,130 >> Spørsmålet i ryggen? 752 00:31:11,130 --> 00:31:11,970 Desimaltall. 753 00:31:11,970 --> 00:31:13,120 Så vi kan prøve det også. 754 00:31:13,120 --> 00:31:16,840 1,10000005. 755 00:31:16,840 --> 00:31:19,470 Virker som det kommer til å bare jobbe egentlig greit. 756 00:31:19,470 --> 00:31:21,160 Og som faktisk forventes. 757 00:31:21,160 --> 00:31:24,550 Selv om vi kanskje har skrevet at det nummeret, eller en 758 00:31:24,550 --> 00:31:28,200 større antall tidligere, innser at når vi skriver brukeren 759 00:31:28,200 --> 00:31:31,070 innspill og vi bruker den GetString funksjon, ikke 760 00:31:31,070 --> 00:31:34,380 Uansett om hva jeg skriver ser ut som et tall. 761 00:31:34,380 --> 00:31:36,720 Husker at i henhold til ASCII, alt på 762 00:31:36,720 --> 00:31:39,920 Tastaturet har en numerisk verdi som kan tilordnes til en 763 00:31:39,920 --> 00:31:41,480 karakter, en røye. 764 00:31:41,480 --> 00:31:44,490 Så i dette tilfellet, selv om jeg kanskje skrive inn et tall, den 765 00:31:44,490 --> 00:31:48,190 datamaskinen kommer til å tenke på det, så å si, som en streng - 766 00:31:48,190 --> 00:31:49,870 noe som ser ut som et tall, men er 767 00:31:49,870 --> 00:31:51,090 faktisk ikke et tall. 768 00:31:51,090 --> 00:31:53,450 Men det er faktisk en perfekt segue, for nå kan vi 769 00:31:53,450 --> 00:31:55,450 faktisk overgang til å skrive programmer som 770 00:31:55,450 --> 00:31:56,730 bruke andre datatyper. 771 00:31:56,730 --> 00:32:01,840 >> Så i tillegg til å bruke tegn, eller rettere sagt, foruten å bruke strenger, 772 00:32:01,840 --> 00:32:04,510 innse at vi har andre datatyper i C samt i 773 00:32:04,510 --> 00:32:05,230 andre språk. 774 00:32:05,230 --> 00:32:08,480 En røye, som navnet antyder, er bare ett tegn. 775 00:32:08,480 --> 00:32:12,150 En flottør er et flyttall, og det er bare en fancy 776 00:32:12,150 --> 00:32:14,470 måte å si et reelt tall - noe som har en desimal 777 00:32:14,470 --> 00:32:17,410 punkt i den med noen tall til venstre og / eller høyre. 778 00:32:17,410 --> 00:32:21,370 En int er et heltall, som er bare et tall som 123. 779 00:32:21,370 --> 00:32:24,170 Og nå mer interessant er ting som dobbel. 780 00:32:24,170 --> 00:32:28,540 Hva sa vi en dobbel var siste gang? 781 00:32:28,540 --> 00:32:30,050 Det er 64, høyre. 782 00:32:30,050 --> 00:32:33,560 Så mens typisk en float er 32-bit - 783 00:32:33,560 --> 00:32:37,340 så det er så lenge i minnet, bruker den 32 nuller og enere til 784 00:32:37,340 --> 00:32:40,530 representerer verdier - en dobbel er bokstavelig talt det dobbelte, noe som 785 00:32:40,530 --> 00:32:43,810 betyr at du kan enten representere større tall, eller 786 00:32:43,810 --> 00:32:45,810 du kan representere mer presise tall. 787 00:32:45,810 --> 00:32:48,690 Så du kan ha flere tall etter desimaltegnet, men 788 00:32:48,690 --> 00:32:51,520 som mannen sa i videoen, selv noe enkelt 789 00:32:51,520 --> 00:32:55,360 konseptuelt som 1/3 ikke kan representeres nøyaktig ved en 790 00:32:55,360 --> 00:32:58,330 datamaskin, fordi til slutt du kjører ut av biter, og 791 00:32:58,330 --> 00:33:02,510 derfor kan du bare gjøre .33333333 så mange ganger, at 792 00:33:02,510 --> 00:33:05,050 hvilket punkt du må bare si at jeg er ute av representasjon 793 00:33:05,050 --> 00:33:08,120 plass, må jeg bare kalle det en dag og representerer det 794 00:33:08,120 --> 00:33:10,200 noe upresist sånn. 795 00:33:10,200 --> 00:33:11,110 Og en lang lang - 796 00:33:11,110 --> 00:33:13,880 dum navn, men det er fordi det er en datatype som kalles en 797 00:33:13,880 --> 00:33:19,350 lenge i C som tilfeldigvis er ofte 32 bits, akkurat som en 798 00:33:19,350 --> 00:33:21,670 int er 32 bits, men en lang lang er 799 00:33:21,670 --> 00:33:23,560 generelt 64 bits. 800 00:33:23,560 --> 00:33:25,740 Så det betyr bare at du kan representere større 801 00:33:25,740 --> 00:33:26,990 tall enn dette. 802 00:33:26,990 --> 00:33:27,410 >> OK. 803 00:33:27,410 --> 00:33:29,390 Så hvis vi faktisk ønsker å starte representerer ting, vi 804 00:33:29,390 --> 00:33:31,030 kanskje mer sofistikerte typer, og 805 00:33:31,030 --> 00:33:32,340 det er derfor vi har streng. 806 00:33:32,340 --> 00:33:36,450 Så i CS50 biblioteket, som fil som heter cs50.h, har vi 807 00:33:36,450 --> 00:33:41,110 faktisk erklært en datatype, så å si, kalt streng, 808 00:33:41,110 --> 00:33:42,710 men streng faktisk ikke eksisterer. 809 00:33:42,710 --> 00:33:44,780 Dette er, igjen, en av disse lagene vi skal skrelle 810 00:33:44,780 --> 00:33:47,490 tilbake om en uke eller to, og kaste den bort, og faktisk 811 00:33:47,490 --> 00:33:49,640 se under panseret på hva en streng faktisk er, og 812 00:33:49,640 --> 00:33:50,840 hvordan det representert. 813 00:33:50,840 --> 00:33:53,520 Vi kommer også til å se på boolske verdier. 814 00:33:53,520 --> 00:33:56,040 >> Så hva var en bool i sammenheng med Scratch? 815 00:33:59,154 --> 00:34:00,300 Det er sant eller usant. 816 00:34:00,300 --> 00:34:03,900 Så det er bare en verdi som er sant eller usant, på eller av, 1 eller 817 00:34:03,900 --> 00:34:06,140 0, men du ønsker å vise verden. 818 00:34:06,140 --> 00:34:09,739 Så i C, takket være CS50 biblioteket, som i sin tur 819 00:34:09,739 --> 00:34:12,179 inkluderer et annet bibliotek under panseret, har vi 820 00:34:12,179 --> 00:34:14,909 tilgang til en datatype som kalles bool, som vil 821 00:34:14,909 --> 00:34:18,730 bokstavelig talt tillate oss å tildele verdiene sant eller usant til 822 00:34:18,730 --> 00:34:20,219 ting i et program. 823 00:34:20,219 --> 00:34:23,880 >> Så la oss gå videre her og skrive et lite program som 824 00:34:23,880 --> 00:34:26,330 gjør noe som involverer tall istedenfor. 825 00:34:26,330 --> 00:34:29,840 Så la meg gå tilbake til CS50 Appliance, la meg gå videre og 826 00:34:29,840 --> 00:34:32,770 opprette en ny fil her kalt - 827 00:34:32,770 --> 00:34:35,460 la oss bare si noe enkelt, som math.c. 828 00:34:38,270 --> 00:34:38,710 OK. 829 00:34:38,710 --> 00:34:41,600 Og nå går opp til toppen av mitt program, jeg 830 00:34:41,600 --> 00:34:42,510 kommer til å gjøre den vanlige - 831 00:34:42,510 --> 00:34:44,780 # Include , slik at jeg kan bruke 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 vi vil komme tilbake til, til slutt, hva int betyr 834 00:34:49,270 --> 00:34:52,389 her, hva ugyldig betyr her, men for nå, bare vet at 835 00:34:52,389 --> 00:34:54,270 du må starte programmer som dette. 836 00:34:54,270 --> 00:34:56,280 Nå skal jeg gå videre og si noe litt 837 00:34:56,280 --> 00:35:02,110 annerledes - printf ("Gi meg et nummer:" 838 00:35:02,110 --> 00:35:03,570 );. 839 00:35:03,570 --> 00:35:09,220 Så jeg kommer til å gjøre int n = GetInt, fordi det 840 00:35:09,220 --> 00:35:12,770 svinger ut GetInt er en annen funksjon i CS50 bibliotek 841 00:35:12,770 --> 00:35:14,060 foruten GetString. 842 00:35:14,060 --> 00:35:17,340 Og nå skal jeg gjøre noe dumt, som "takk 843 00:35:17,340 --> 00:35:25,760 for% d, "for Desimalheltallet og deretter komma n, og 844 00:35:25,760 --> 00:35:26,620 deretter tilbake 0. 845 00:35:26,620 --> 00:35:28,940 Så igjen, gå tilbake 0 har ingenting å gjøre med antall jeg er 846 00:35:28,940 --> 00:35:30,080 spør brukeren om. 847 00:35:30,080 --> 00:35:33,620 Bare betyr på slutten at alle, formodentlig, er godt. 848 00:35:33,620 --> 00:35:36,290 >> Så la meg gå ned til min terminal-vinduet her. 849 00:35:36,290 --> 00:35:39,590 La meg skrive at matematikk, skriver. 850 00:35:39,590 --> 00:35:41,360 Og noe er galt. 851 00:35:41,360 --> 00:35:44,620 Gjør matematikk fungerte ikke. 852 00:35:44,620 --> 00:35:46,170 Her er den første av våre feilmeldinger. 853 00:35:46,170 --> 00:35:46,570 Hvorfor? 854 00:35:46,570 --> 00:35:49,720 Litt 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å igjen, spesielt tidlig, vil du skrive din første 858 00:35:53,900 --> 00:35:56,590 program for pset 1 i seksjoner, i kontortiden, og 859 00:35:56,590 --> 00:35:59,050 ærlig, vil det være overveldende noen ganger hva disse tingene 860 00:35:59,050 --> 00:36:00,000 faktisk sier. 861 00:36:00,000 --> 00:36:01,890 Men vil du innse veldig raskt de begynner å falle 862 00:36:01,890 --> 00:36:06,120 inn bøtter der dette betyr at du har forlatt utenfor en 863 00:36:06,120 --> 00:36:08,290 av innbefatter # fra toppen av filen. 864 00:36:08,290 --> 00:36:10,960 Og Clang, kompilatoren, er å informere deg om dette ved 865 00:36:10,960 --> 00:36:14,090 sa heller fancifully, implisitt deklarasjon av 866 00:36:14,090 --> 00:36:15,990 funksjon GetInt er ugyldig. 867 00:36:15,990 --> 00:36:16,310 >> OK. 868 00:36:16,310 --> 00:36:17,520 Så hva betyr det? 869 00:36:17,520 --> 00:36:22,080 Det betyr bare at du har implisitt erklært GetInt i 870 00:36:22,080 --> 00:36:24,850 den forstand at du ikke uttrykkelig har erklært det. 871 00:36:24,850 --> 00:36:27,300 Eksplisitt erklærer int, må du lære 872 00:36:27,300 --> 00:36:28,740 Clang at den finnes. 873 00:36:28,740 --> 00:36:32,020 Og veldig enkel løsning for det er å lære det ved 874 00:36:32,020 --> 00:36:34,780 inkludert denne annen fil, cs50.h, på 875 00:36:34,780 --> 00:36:35,850 toppen av filen. 876 00:36:35,850 --> 00:36:40,380 Fordi bokstavelig talt, hva betyr # include er den forteller Clang 877 00:36:40,380 --> 00:36:44,030 ganske mye å gå finne filen som heter cs50.h, kopiere, 878 00:36:44,030 --> 00:36:48,150 lim den automatisk inn i toppen av programmet mitt for meg, 879 00:36:48,150 --> 00:36:50,850 og deretter konvertere kildekoden til nuller og enere. 880 00:36:50,850 --> 00:36:52,850 Men det ville selvsagt være veldig kjedelig hvis vi mennesker hadde 881 00:36:52,850 --> 00:36:55,370 å gå kopiere og lime disse store filer hele tiden, 882 00:36:55,370 --> 00:36:58,540 så # include bare gjør alt som automatisk uten 883 00:36:58,540 --> 00:37:01,550 muddying min kode med noen andre bibliotek. 884 00:37:01,550 --> 00:37:06,370 Og et bibliotek er bare en annen fil som inneholder funksjoner og 885 00:37:06,370 --> 00:37:08,340 andre ting som noen andre har skrevet, at vi er 886 00:37:08,340 --> 00:37:10,270 utnytte for vår egen skyld. 887 00:37:10,270 --> 00:37:10,580 >> OK. 888 00:37:10,580 --> 00:37:11,200 La oss prøve igjen. 889 00:37:11,200 --> 00:37:12,250 Gjør matematikk. 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 ser ut til å ha fungert. 893 00:37:14,880 --> 00:37:18,330 Så la meg nå gå matte;. / Matematikk. 894 00:37:18,330 --> 00:37:21,100 Inn gir meg et nummer, 123. 895 00:37:21,100 --> 00:37:22,620 Takk for 123. 896 00:37:22,620 --> 00:37:24,490 La oss nå prøve et annet hjørne saken. 897 00:37:24,490 --> 00:37:26,530 En streng er ganske raus, fordi en 898 00:37:26,530 --> 00:37:27,620 string kan være noe. 899 00:37:27,620 --> 00:37:28,910 Kan se ut som tall, ser ut som 900 00:37:28,910 --> 00:37:30,600 tegn, ser ut som ord. 901 00:37:30,600 --> 00:37:31,900 Men en int er en int. 902 00:37:31,900 --> 00:37:34,370 Så nå om jeg er den vanskelige brukeren, og det er å si "Gi meg 903 00:37:34,370 --> 00:37:38,730 et nummer, "hva hvis jeg prøver å gjøre noe sånt 0,1? 904 00:37:38,730 --> 00:37:41,510 Vel, det er et tall, og det er i samsvar med 905 00:37:41,510 --> 00:37:44,180 grammatikk jeg brukte her, men under panseret, jeg av 906 00:37:44,180 --> 00:37:45,610 Selvfølgelig bruker funksjonen GetInt. 907 00:37:45,610 --> 00:37:46,610 >> Så la oss se hva som skjer. 908 00:37:46,610 --> 00:37:48,250 Enter, prøv igjen. 909 00:37:48,250 --> 00:37:48,560 OK. 910 00:37:48,560 --> 00:37:50,570 La meg være vanskelig og bare trykke Enter igjen. 911 00:37:50,570 --> 00:37:51,700 Enter, Enter. 912 00:37:51,700 --> 00:37:53,890 Så nå ser det ut som GetInt er litt mer 913 00:37:53,890 --> 00:37:55,240 kraftigere enn GetString. 914 00:37:55,240 --> 00:37:58,540 Vi, de ansatte, gjennomføres på en slik måte at hvis vi oppdager 915 00:37:58,540 --> 00:38:02,100 du har ikke gitt oss en int - og en int er et desimaltall 916 00:38:02,100 --> 00:38:04,785 inneholder nuller, enere, toere, treere, firere, femmere, seksere, 917 00:38:04,785 --> 00:38:05,540 syvere, åttere, eller niere. 918 00:38:05,540 --> 00:38:06,310 Og det er det. 919 00:38:06,310 --> 00:38:08,810 Ingen desimaler, ingen tegn, ingen tegnsetting. 920 00:38:08,810 --> 00:38:10,390 Det ser ut til at vi må samarbeide. 921 00:38:10,390 --> 00:38:13,680 Så la meg prøve fire, fem, seks, og som får meg gjennom. 922 00:38:13,680 --> 00:38:16,760 Så egentlig, å være anal her, skal jeg nok si "Gi meg 923 00:38:16,760 --> 00:38:20,310 et heltall "for å formidle til brukeren 924 00:38:20,310 --> 00:38:22,620 akkurat hva jeg har tenkt. 925 00:38:22,620 --> 00:38:24,090 >> Nå la oss tenke på under panseret. 926 00:38:24,090 --> 00:38:27,930 Vi kommer ikke til å se på hvordan cs50.h er implementert i dag, 927 00:38:27,930 --> 00:38:29,080 det biblioteket. 928 00:38:29,080 --> 00:38:33,600 Men hvis det holder å si prøve, prøve, prøve, hva programmering 929 00:38:33,600 --> 00:38:36,970 konstruere jeg antagelig bruker under panseret for å 930 00:38:36,970 --> 00:38:39,000 gjennomføre det? 931 00:38:39,000 --> 00:38:39,980 Så bare en loop, ikke sant? 932 00:38:39,980 --> 00:38:41,930 En av de enkleste ideene som vi så på Scratch. 933 00:38:41,930 --> 00:38:45,050 The Forever konstruere, Gjenta konstruere. 934 00:38:45,050 --> 00:38:47,320 Antagelig i dette programmet, under panseret, selv 935 00:38:47,320 --> 00:38:49,470 selv om det er skrevet i C og ikke grunnen, det gjør 936 00:38:49,470 --> 00:38:54,300 noe som kalles tilsvarende for alltid hvis brukeren har ikke 937 00:38:54,300 --> 00:38:58,710 skrevet i et heltall, sier forsøke, forsøke, forsøke, forsøke, så 938 00:38:58,710 --> 00:39:01,220 så til slutt når vi får et heltall, så du 939 00:39:01,220 --> 00:39:02,970 bryte ut av som sløyfe. 940 00:39:02,970 --> 00:39:05,610 >> Så hva andre funksjoner kan vi bruke her i CS50 bibliotek? 941 00:39:05,610 --> 00:39:07,880 Vel, type det opplagte, minst basert på 942 00:39:07,880 --> 00:39:09,570 datatyper som vi nå vet eksisterer. 943 00:39:09,570 --> 00:39:12,900 Vi implementert GetString, GetInt, men i hele 944 00:39:12,900 --> 00:39:15,680 første ukene av begrepet, kan du også bruke GetFloat og 945 00:39:15,680 --> 00:39:18,870 GetDouble og GetLongLong for å få nøyaktig 946 00:39:18,870 --> 00:39:20,030 datatyper som du ønsker. 947 00:39:20,030 --> 00:39:24,030 Fordi nøkkelen detalj her er at i motsetning til enkelte språk, 948 00:39:24,030 --> 00:39:26,630 som Python og Ruby, hvor du ikke nødvendigvis trenger å 949 00:39:26,630 --> 00:39:29,730 erklære datatypen til en variabel - 950 00:39:29,730 --> 00:39:32,390 du trenger ikke å fortelle datamaskinen hva slags ting 951 00:39:32,390 --> 00:39:34,000 du kommer til å sette inn den variable - 952 00:39:34,000 --> 00:39:36,640 i C, må du være aldri så presis. 953 00:39:36,640 --> 00:39:40,060 Så hvis du ønsker en variabel kalt n, en del av lagringsplass 954 00:39:40,060 --> 00:39:42,900 at i dette tilfellet skjer for å være 32 bits av konvensjonen, du 955 00:39:42,900 --> 00:39:45,660 må fortelle datamaskinen at disse bitene er 956 00:39:45,660 --> 00:39:47,840 kommer til å lagre et nummer - 957 00:39:47,840 --> 00:39:50,630 ikke et tegn, ikke en streng, ikke en flåte. 958 00:39:50,630 --> 00:39:52,620 Og dette løser problemet vi effektivt 959 00:39:52,620 --> 00:39:53,760 kjørte inn i forrige uke. 960 00:39:53,760 --> 00:39:57,050 Hvis vi bruker nuller og enere tall til å representere ikke bare 961 00:39:57,050 --> 00:40:00,770 tall, men som og Bs og Cs, hvor i verden er en 962 00:40:00,770 --> 00:40:03,460 datamaskin skal vite at dette mønsteret biter faktisk 963 00:40:03,460 --> 00:40:07,650 representerer nummeret 65, i motsetning til å representerer 964 00:40:07,650 --> 00:40:09,860 bokstaven A, som tilfeldigvis, i henhold til 965 00:40:09,860 --> 00:40:13,440 ASCII, husker, var tilsvarende 65? 966 00:40:13,440 --> 00:40:16,550 >> Så disse datatypene gi kontekst til datamaskinen, så 967 00:40:16,550 --> 00:40:18,810 at den vet om disse bitene bør tolkes som en 968 00:40:18,810 --> 00:40:23,660 int eller som en streng. 969 00:40:23,660 --> 00:40:26,500 Eventuelle spørsmål, da, om dette? 970 00:40:26,500 --> 00:40:28,149 Ja? 971 00:40:34,780 --> 00:40:35,270 DAVID J. MALAN: Godt spørsmål. 972 00:40:35,270 --> 00:40:39,140 Hvis vi tar ut stdio.h, sparer vi filen - 973 00:40:39,140 --> 00:40:44,360 la meg gå ned til terminalvindu og kjør make matematikk, zoom 974 00:40:44,360 --> 00:40:45,530 inn og skriv - 975 00:40:45,530 --> 00:40:47,700 nå får jeg en annen feil, fordi jeg er implisitt 976 00:40:47,700 --> 00:40:49,650 erklærte hva fungere nå? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Så nå har jeg laget et nytt problem, som løsningen er 979 00:40:52,970 --> 00:40:53,890 i hovedsak de samme. 980 00:40:53,890 --> 00:40:55,365 Jeg trenger å sette det tilbake. 981 00:40:55,365 --> 00:40:56,615 PUBLIKUM: [uhørlig] 982 00:41:03,534 --> 00:41:04,030 DAVID J. MALAN: Oh. 983 00:41:04,030 --> 00:41:04,850 Så hvis jeg tar ut - 984 00:41:04,850 --> 00:41:05,360 Ok, ja. 985 00:41:05,360 --> 00:41:08,960 Så hvis jeg fjerner standard I / O-bibliotek inkludering opp 986 00:41:08,960 --> 00:41:12,020 her, og da er du si hvis jeg bli kvitt printf, får 987 00:41:12,020 --> 00:41:13,450 kvitt printf? 988 00:41:13,450 --> 00:41:13,810 Ja. 989 00:41:13,810 --> 00:41:18,450 Dette bør fungere, fordi jeg ikke lenger bruker noen - whoops. 990 00:41:18,450 --> 00:41:20,110 Sa jeg bare ligge? 991 00:41:20,110 --> 00:41:21,650 Oh, okay. 992 00:41:21,650 --> 00:41:25,640 Dette vil ikke fungere på grunn av en ny feil vi nettopp introdusert. 993 00:41:25,640 --> 00:41:28,390 Og dette er en litt mer selvforklarende. 994 00:41:28,390 --> 00:41:29,440 >> Hva er problemet? 995 00:41:29,440 --> 00:41:30,680 Ubrukte variabel n. 996 00:41:30,680 --> 00:41:34,040 Så denne feilen er et resultat av at vi har konfigurert 997 00:41:34,040 --> 00:41:36,640 apparatet for å være spesielt pedantisk, for å virkelig kjefte på 998 00:41:36,640 --> 00:41:39,060 du for alle mulige feil, selv om det er slags 999 00:41:39,060 --> 00:41:41,950 en ikke-fatal feil som dette - er det virkelig så stor 1000 00:41:41,950 --> 00:41:44,820 håndtere at jeg tildelt en int, sette et tall på det, og deretter 1001 00:41:44,820 --> 00:41:46,030 bare gjorde ingenting med det? 1002 00:41:46,030 --> 00:41:47,020 Så funksjonelt, nei. 1003 00:41:47,020 --> 00:41:50,410 Som ikke kommer til å bryte programmet. 1004 00:41:50,410 --> 00:41:51,490 Det er bare litt dumt, ikke sant? 1005 00:41:51,490 --> 00:41:54,220 Det er ingen verdi å ha bedt om det nummeret, lagret 1006 00:41:54,220 --> 00:41:56,370 det i en variabel, hvis du aldri kommer til å gjøre noe 1007 00:41:56,370 --> 00:41:58,000 med det, om skrive det ut eller lagre den. 1008 00:41:58,000 --> 00:42:00,270 Så i dette tilfellet er Clang erkjennelsen så mye, og 1009 00:42:00,270 --> 00:42:02,010 det er å si ubrukte variable n. 1010 00:42:02,010 --> 00:42:05,380 >> Så vi kan fikse dette hvis vi virkelig vil. 1011 00:42:05,380 --> 00:42:07,250 Men igjen, dette er ikke god programmering nå. 1012 00:42:07,250 --> 00:42:09,310 Så jeg bare kunne gjøre dette - 1013 00:42:09,310 --> 00:42:12,060 gå ned her, la meg tømme skjermen, gjør matte. 1014 00:42:12,060 --> 00:42:13,090 Det fungerer. 1015 00:42:13,090 --> 00:42:18,110 Nå kan jeg kjøre min matte program, tar inngang - 1016 00:42:18,110 --> 00:42:18,700 vel, det var så ille. 1017 00:42:18,700 --> 00:42:23,450 Tar inndata, og det er alt det gjør det, i dette tilfellet. 1018 00:42:23,450 --> 00:42:25,220 >> Så egentlig, la oss prøve en annen hjørne slik at vi 1019 00:42:25,220 --> 00:42:26,300 tenkte ikke på tidligere. 1020 00:42:26,300 --> 00:42:28,220 I dette tilfellet - her, la oss gå tilbake til en som er en 1021 00:42:28,220 --> 00:42:29,500 litt mer brukervennlig. 1022 00:42:29,500 --> 00:42:32,580 La meg gå tilbake hit og kjøre gjør matte igjen. 1023 00:42:32,580 --> 00:42:34,190 Whoops, hva gjorde jeg galt? 1024 00:42:34,190 --> 00:42:35,400 Fikk å rulle tilbake ytterligere. 1025 00:42:35,400 --> 00:42:36,390 Okay. 1026 00:42:36,390 --> 00:42:38,490 Nå er vi tilbake i den opprinnelige tilstanden, der alle 1027 00:42:38,490 --> 00:42:39,990 er forhåpentligvis godt. 1028 00:42:39,990 --> 00:42:43,360 Og nå hvis jeg kjører matte, synes 123 til å fungere. 1029 00:42:43,360 --> 00:42:46,010 Men dette er egentlig ikke en effektiv bevis, bare for å si 1030 00:42:46,010 --> 00:42:47,930 okay, fungerer det. 1031 00:42:47,930 --> 00:42:49,120 789, fungerer det. 1032 00:42:49,120 --> 00:42:50,100 Tid til å sende. 1033 00:42:50,100 --> 00:42:51,870 Fordi det er andre hjørnet tilfeller her. 1034 00:42:51,870 --> 00:42:55,040 En streng ikke virkelig gi oss mye trøbbel ved å skrive inn en 1035 00:42:55,040 --> 00:42:56,510 hel masse tegn. 1036 00:42:56,510 --> 00:42:59,580 Men hva om jeg skriver i dette? 1037 00:42:59,580 --> 00:43:04,850 Treffer nummer 1 en hel masse, mye her - 1038 00:43:04,850 --> 00:43:06,300 all right, det blir litt kjedelig, så jeg kommer til å 1039 00:43:06,300 --> 00:43:10,040 stoppe her, og jeg kommer til å trykke Enter. 1040 00:43:10,040 --> 00:43:11,290 >> Hva faen skjedde? 1041 00:43:14,110 --> 00:43:17,680 Så dette kan faktisk bli forklart. 1042 00:43:17,680 --> 00:43:18,920 Så tok det det som binære? 1043 00:43:18,920 --> 00:43:21,130 En god tanke, men nei, det er ikke det faktum at det tok det 1044 00:43:21,130 --> 00:43:22,815 som binære, fordi faktisk, det var bare en slags 1045 00:43:22,815 --> 00:43:23,080 tilfeldighet. 1046 00:43:23,080 --> 00:43:23,930 Vi kan gjøre dette på nytt. 1047 00:43:23,930 --> 00:43:26,530 Så det er ingen 2 i det binære systemet, som er 1048 00:43:26,530 --> 00:43:27,420 sannsynligvis nok uansett. 1049 00:43:27,420 --> 00:43:28,780 Enter. 1050 00:43:28,780 --> 00:43:30,140 Så det var ikke problemet. 1051 00:43:30,140 --> 00:43:31,390 Hva annet? 1052 00:43:34,650 --> 00:43:35,400 Akkurat. 1053 00:43:35,400 --> 00:43:37,830 >> Så tenk tilbake til hva en int faktisk er. 1054 00:43:37,830 --> 00:43:40,970 Det er 32 biter som til sammen blir tolket 1055 00:43:40,970 --> 00:43:42,090 som et tall. 1056 00:43:42,090 --> 00:43:44,730 Hvis du har 32 bits, betyr at hver av de biter kan være 1057 00:43:44,730 --> 00:43:46,690 0 eller 1, 0 eller en 1. 1058 00:43:46,690 --> 00:43:49,090 Så det betyr at det er to muligheter for denne biten, 1059 00:43:49,090 --> 00:43:51,140 to muligheter for dette, to muligheter for dette 1060 00:43:51,140 --> 00:43:52,570 bit - så det er 2 ganger 2 ganger - 1061 00:43:52,570 --> 00:43:55,480 så det er 2 til 32 strømmen er det totale antall 1062 00:43:55,480 --> 00:43:58,960 permutasjoner av nuller og enere hvis du har 32 1063 00:43:58,960 --> 00:44:01,400 plassholdere, nuller og ettall, foran deg. 1064 00:44:01,400 --> 00:44:04,250 Så hvis jeg har 2 til 32, matematisk det er det? 1065 00:44:07,080 --> 00:44:07,840 Så det er mye. 1066 00:44:07,840 --> 00:44:09,910 Det er 4 milliarder kroner, gi eller ta. 1067 00:44:09,910 --> 00:44:13,510 Og 4000 millioner ikke synes å være det som ble skrevet ut her. 1068 00:44:13,510 --> 00:44:16,290 Faktisk ser dette nærmere 2 milliarder kroner. 1069 00:44:16,290 --> 00:44:17,970 Men dette er ikke en tilfeldighet. 1070 00:44:17,970 --> 00:44:21,590 Det faktum at maskinen har feiltolket mitt stort antall, 1071 00:44:21,590 --> 00:44:24,260 min enorme sekvens av dem og deretter min enorme sekvens av toere, 1072 00:44:24,260 --> 00:44:26,880 som omtrent 2 milliarder kroner, er forklart hvordan? 1073 00:44:30,250 --> 00:44:32,180 Det er en cap på int. 1074 00:44:32,180 --> 00:44:34,970 Det er en absolutt en maksimal verdi at du kan representere. 1075 00:44:34,970 --> 00:44:36,370 Men det er vanligvis 4 milliarder kroner, ikke sant? 1076 00:44:36,370 --> 00:44:39,100 Hvis 2 til 32 er omtrent 4 milliarder kroner, virker som liker 1077 00:44:39,100 --> 00:44:40,350 det er det største antallet. 1078 00:44:42,420 --> 00:44:45,240 Så ikke en rest, men en god tanke. 1079 00:44:45,240 --> 00:44:46,340 Negative tall. 1080 00:44:46,340 --> 00:44:49,570 Så hvis du har 4 milliard mulige ting du kan 1081 00:44:49,570 --> 00:44:52,970 representerer disse ulike permutasjoner av 32 0s og 1082 00:44:52,970 --> 00:44:55,600 1s, vel, det står til grunn at vi mennesker kanskje ønsker å 1083 00:44:55,600 --> 00:44:57,110 representerer ikke bare positive heltall 1084 00:44:57,110 --> 00:44:58,240 men negative heltall. 1085 00:44:58,240 --> 00:45:00,410 Og ja, det er en forutsetning at C gjør. 1086 00:45:00,410 --> 00:45:03,550 Så med 32 bits, kan du representerer omtrent negative 2 1087 00:45:03,550 --> 00:45:06,630 milliarder hele veien opp til positive 2 milliarder. 1088 00:45:06,630 --> 00:45:08,750 Og så i dette tilfellet, hva vi egentlig ser er bare 1089 00:45:08,750 --> 00:45:13,600 utkanten av kapasiteten heltall, og vi har, så 1090 00:45:13,600 --> 00:45:15,860 å snakke, overflyt et heltall. 1091 00:45:15,860 --> 00:45:19,180 Vi har prøvd å stappe flere biter i det enn kan faktisk passe. 1092 00:45:19,180 --> 00:45:22,960 Så sluttresultatet er vi i hovedsak har alle en bit. 1093 00:45:22,960 --> 00:45:25,280 Vi har snudd alle våre biter på, har vi prøvd å representere 1094 00:45:25,280 --> 00:45:27,630 det største antallet mulig, men det er helt klart ikke på langt nær 1095 00:45:27,630 --> 00:45:30,960 stor nok til å representere de to tingene jeg har nettopp skrevet i. 1096 00:45:30,960 --> 00:45:31,730 Ja? 1097 00:45:31,730 --> 00:45:32,980 PUBLIKUM: [uhørlig] 1098 00:45:37,230 --> 00:45:37,830 >> DAVID J. MALAN: Godt spørsmål. 1099 00:45:37,830 --> 00:45:40,080 Hvorfor kan vi ikke bare representerer det negative 1100 00:45:40,080 --> 00:45:41,500 signere som bare et tegn? 1101 00:45:41,500 --> 00:45:44,200 Så vi absolutt kunne, og vi kunne deretter lagre 1102 00:45:44,200 --> 00:45:45,470 en ekstra bit. 1103 00:45:45,470 --> 00:45:49,100 Men du fortsatt nødt til å representere at dash, og 1104 00:45:49,100 --> 00:45:50,700 som kommer til å koste deg i det minste noe, 1105 00:45:50,700 --> 00:45:52,220 antagelig litt. 1106 00:45:52,220 --> 00:45:55,610 Så ja, vi kunne ha 32 bits i bruk for våre tall, men nå 1107 00:45:55,610 --> 00:45:57,610 vi trenger en annen bit brukes for dash vår 1108 00:45:57,610 --> 00:45:58,810 symbol, minustegnet. 1109 00:45:58,810 --> 00:46:01,470 Så nå har vi 33 biters verdier, som vi kunne gjøre, men det er 1110 00:46:01,470 --> 00:46:02,570 bare ikke måten det er gjort. 1111 00:46:02,570 --> 00:46:05,140 Vi har gjort en vurderingssak år siden, er 32 bits liksom den 1112 00:46:05,140 --> 00:46:06,170 måleenhet her. 1113 00:46:06,170 --> 00:46:08,120 Så vi kommer til å bruke en av de bitene effektivt til 1114 00:46:08,120 --> 00:46:12,950 representerer negativitet, og 31 bits for å representere nummeret. 1115 00:46:12,950 --> 00:46:15,550 Andre spørsmål? 1116 00:46:15,550 --> 00:46:15,670 OK. 1117 00:46:15,670 --> 00:46:16,030 Det er mye. 1118 00:46:16,030 --> 00:46:17,930 Hvorfor ikke vi gå videre og ta våre fem-minutters pause her? 1119 00:46:23,580 --> 00:46:24,270 >> OK. 1120 00:46:24,270 --> 00:46:31,250 Så igjen, for ikke å overdrive de matematiske programmer 1121 00:46:31,250 --> 00:46:33,840 programmering, la oss bare rive av dette ett eksempel 1122 00:46:33,840 --> 00:46:36,590 før vi flytter inn i andre konstruksjoner, bare fordi det 1123 00:46:36,590 --> 00:46:39,430 vil illustrere noen vanlige stumbling poeng på noen av 1124 00:46:39,430 --> 00:46:41,520 det grunnleggende når det gjelder å skrive programmer. 1125 00:46:41,520 --> 00:46:44,360 I dette tilfellet, gjør aritmetiske uttrykk som har noen 1126 00:46:44,360 --> 00:46:48,010 interessant relevans til syntaks. 1127 00:46:48,010 --> 00:46:50,430 >> Så dette er bare en formel som vi kan konvertere 1128 00:46:50,430 --> 00:46:52,690 temperaturer fra Fahrenheit til Celsius. 1129 00:46:52,690 --> 00:46:54,600 Hvis du ikke husker, er dette bare formelen. 1130 00:46:54,600 --> 00:46:58,870 Så hvis vi kobler Fahrenheit verdi på 32 grader, noe som er 1131 00:46:58,870 --> 00:47:02,850 frysing, som kommer til å være 32 minus 32 er 0, og ja, 1132 00:47:02,850 --> 00:47:05,130 0 i Celsius er også iskaldt. 1133 00:47:05,130 --> 00:47:08,210 Så rask tilregnelighet sjekk der - det er det velkjente formelen. 1134 00:47:08,210 --> 00:47:10,880 La meg gå over til apparatet, skjønt, og start 1135 00:47:10,880 --> 00:47:13,920 skrive et program som heter, som, f2c; "Fahrenheit til 1136 00:47:13,920 --> 00:47:15,920 Celsius dot c ". 1137 00:47:15,920 --> 00:47:18,930 Og opp på toppen her, jeg kommer begynne med # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, og jeg kommer til å gjøre int main (void), og 1139 00:47:22,190 --> 00:47:24,680 igjen, vil vi komme tilbake i fremtiden om hva int betyr 1140 00:47:24,680 --> 00:47:26,820 der og hva ugyldig betyr der. 1141 00:47:26,820 --> 00:47:28,770 Og nå la meg gå videre og gjennomføre et program som 1142 00:47:28,770 --> 00:47:31,170 hovedsak gjør denne konverteringen for oss. 1143 00:47:31,170 --> 00:47:36,830 >> Så printf, la oss si, temperaturen i Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 Og så la meg gå videre og få verdien fra brukeren. 1145 00:47:40,140 --> 00:47:43,120 Hva slags verdi bør jeg få fra brukeren hvis jeg vil 1146 00:47:43,120 --> 00:47:45,620 dem til å gi meg en temperatur i Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 Ja? 1148 00:47:48,090 --> 00:47:50,090 Hva ville du foreslå? 1149 00:47:50,090 --> 00:47:50,410 Ja. 1150 00:47:50,410 --> 00:47:51,960 Så float føles ganske rimelig. 1151 00:47:51,960 --> 00:47:53,950 Vi har igjen, bare et par alternativer som 1152 00:47:53,950 --> 00:47:55,310 vi har sett så langt. 1153 00:47:55,310 --> 00:48:00,100 Vi har ting som røye, double, float, int, long long, 1154 00:48:00,100 --> 00:48:01,150 bool, streng. 1155 00:48:01,150 --> 00:48:03,510 Så av disse, føles float ganske rimelig. 1156 00:48:03,510 --> 00:48:06,340 Vi kunne bruke en dobbel, høyre, fordi hvis vi virkelig ønsker å 1157 00:48:06,340 --> 00:48:07,580 representerer et menneskes temperatur - 1158 00:48:07,580 --> 00:48:10,730 98.60000 - 1159 00:48:10,730 --> 00:48:12,990 vi kunne bruke 64 bits å gjøre det, men det føles som 1160 00:48:12,990 --> 00:48:14,200 overkill for temperaturen. 1161 00:48:14,200 --> 00:48:16,380 Så la oss bare gå med flottør. 1162 00:48:16,380 --> 00:48:18,100 Nå trenger jeg en variabel. 1163 00:48:18,100 --> 00:48:20,500 Bare for å holde ting enkelt, jeg kommer til å kalle det f, men jeg 1164 00:48:20,500 --> 00:48:23,370 kunne like riktig kaller det temperatur, 1165 00:48:23,370 --> 00:48:24,600 men er enten fine. 1166 00:48:24,600 --> 00:48:27,610 Så flyter f = GetFloat. 1167 00:48:27,610 --> 00:48:30,220 Så snart jeg har nå besluttet å bruke GetFloat, skjønt, jeg 1168 00:48:30,220 --> 00:48:33,340 trenger å gjøre en korreksjon. 1169 00:48:33,340 --> 00:48:33,720 Ja. 1170 00:48:33,720 --> 00:48:37,460 Så vi trenger å # include , ellers kompilatoren er 1171 00:48:37,460 --> 00:48:39,000 kommer til å kjefte på oss. 1172 00:48:39,000 --> 00:48:41,720 Nå som jeg har en flåte, la meg gå videre og gjøre det 1173 00:48:41,720 --> 00:48:42,460 konvertering. 1174 00:48:42,460 --> 00:48:44,980 >> Så først, la meg også komme inn i vanen her av 1175 00:48:44,980 --> 00:48:46,310 kommenterer min kode. 1176 00:48:46,310 --> 00:48:49,820 Så igjen, er en kommentar bare en notasjon til mennesket som finnes 1177 00:48:49,820 --> 00:48:52,600 ikke en del av programmet per se, men det en, hjelper deg 1178 00:48:52,600 --> 00:48:55,010 forstår hva du gjorde neste morgen, eller neste 1179 00:48:55,010 --> 00:48:57,570 måned, det hjelper undervisningen stipendiat forstår hva du gjorde 1180 00:48:57,570 --> 00:48:59,230 eller hva du hadde tenkt å gjøre, så det er 1181 00:48:59,230 --> 00:49:00,950 generelt veldig god praksis. 1182 00:49:00,950 --> 00:49:02,940 Hvert par linjer med kode, skrive en kommentar til 1183 00:49:02,940 --> 00:49:04,490 deg selv eller din kollega. 1184 00:49:04,490 --> 00:49:08,460 Så her, jeg kommer til å si, "Spør bruker for temperatur." 1185 00:49:08,460 --> 00:49:10,890 Trenger ikke å være en hel setning, bare en kort setning. 1186 00:49:10,890 --> 00:49:14,270 Men ideen bak kommenterer i C er at hver av dine 1187 00:49:14,270 --> 00:49:17,980 kommentarer bør styrke deg - eller, si, en TF eller en kollega - 1188 00:49:17,980 --> 00:49:21,290 å skumme programmet og vet nøyaktig hva den gjør, ved å ikke 1189 00:49:21,290 --> 00:49:24,650 så mye å lese koden, men ved å lese kommentarene, som 1190 00:49:24,650 --> 00:49:26,220 bør være konsis og klar. 1191 00:49:26,220 --> 00:49:29,030 All right, så nå la meg gå videre og si, "Konverter 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit til Celsius. "Så jeg kommer til å gå videre og gjøre, 1193 00:49:32,660 --> 00:49:34,340 la oss si, flyter c. 1194 00:49:34,340 --> 00:49:36,610 Vi vil holde Celsius som et flyttall. 1195 00:49:36,610 --> 00:49:37,630 >> Og la meg ta en stikke på dette. 1196 00:49:37,630 --> 00:49:40,350 Formelen er, igjen, her oppe. 1197 00:49:40,350 --> 00:49:45,510 Som 5/9 ganger F minus 32. 1198 00:49:45,510 --> 00:49:46,360 Så la oss gjøre dette. 1199 00:49:46,360 --> 00:49:50,450 Så 5 delt på 9, minus - 1200 00:49:50,450 --> 00:49:52,330 whoops, rotet jeg det opp allerede. 1201 00:49:52,330 --> 00:49:53,070 Times. 1202 00:49:53,070 --> 00:49:56,550 Så 5/9 ganger F minus 32. 1203 00:49:56,550 --> 00:49:59,650 Så F minus 32, semikolon. 1204 00:49:59,650 --> 00:50:02,000 Og nå, her nede, jeg kommer til å gå videre 1205 00:50:02,000 --> 00:50:03,220 og si ut resultatet. 1206 00:50:03,220 --> 00:50:05,160 Og denne delen er lett. Printf. 1207 00:50:05,160 --> 00:50:07,980 Hvordan går jeg om å skrive dette? 1208 00:50:07,980 --> 00:50:16,890 Vel, jeg kunne si "Tallet i Celsius er% f \ n", 1209 00:50:16,890 --> 00:50:18,060 bare for noen estetikk. 1210 00:50:18,060 --> 00:50:20,450 Og så hva verdien ønsker jeg å plugge inn her som printf er 1211 00:50:20,450 --> 00:50:21,360 andre argument? 1212 00:50:21,360 --> 00:50:21,650 Okay. 1213 00:50:21,650 --> 00:50:22,540 Så bare ca. 1214 00:50:22,540 --> 00:50:24,760 Så vi vil starte med dette og så bare gå tilbake 0. 1215 00:50:24,760 --> 00:50:25,960 Igjen, det har ingenting å gjøre med matematikk. 1216 00:50:25,960 --> 00:50:27,610 Det betyr bare at alt er bra. 1217 00:50:27,610 --> 00:50:31,210 >> Nå er dette riktig, dette programmet? 1218 00:50:31,210 --> 00:50:31,520 OK. 1219 00:50:31,520 --> 00:50:33,630 Så jeg har gjort noen feil. 1220 00:50:33,630 --> 00:50:35,980 Selv om du ikke har noen anelse om hva programmering er, kan du sortere 1221 00:50:35,980 --> 00:50:37,120 av antyde tilbake til grunnskolen hva 1222 00:50:37,120 --> 00:50:38,740 feil her kan være. 1223 00:50:38,740 --> 00:50:40,050 Hva er en av de første? 1224 00:50:40,050 --> 00:50:41,256 PUBLIKUM: [uhørlig] 1225 00:50:41,256 --> 00:50:41,660 DAVID J. MALAN: Yeah. 1226 00:50:41,660 --> 00:50:42,940 Så vi mangler parenteser. 1227 00:50:42,940 --> 00:50:45,420 Det var bevisst at jeg gjorde parentes i keynote 1228 00:50:45,420 --> 00:50:48,130 skyv her, fordi det er faktisk dette begrepet for 1229 00:50:48,130 --> 00:50:51,590 av drift, eller presedens, der visse operasjoner - 1230 00:50:51,590 --> 00:50:52,890 multiplikasjon - 1231 00:50:52,890 --> 00:50:56,000 har høyere binding, har høyere prioritet enn ting 1232 00:50:56,000 --> 00:50:58,050 som tillegg eller subtraksjon. 1233 00:50:58,050 --> 00:51:00,550 Så vi har gjort dette i årevis bare for å gjøre det klart nøyaktig 1234 00:51:00,550 --> 00:51:02,840 hva matematisk operasjon bør gjøres først. 1235 00:51:02,840 --> 00:51:05,010 Så jeg bør nok etterligne akkurat dette. 1236 00:51:05,010 --> 00:51:08,990 Ellers, er datamaskinen formodentlig skal prøve å gjøre 1237 00:51:08,990 --> 00:51:13,090 noe som dividere 5 av 9, deretter multiplisere F, og deretter trekke 1238 00:51:13,090 --> 00:51:14,850 32 fra hele greia. 1239 00:51:14,850 --> 00:51:16,480 Som ikke er det, faktisk, hva vi ønsker å gjøre. 1240 00:51:16,480 --> 00:51:17,340 Så la oss parenthesize. 1241 00:51:17,340 --> 00:51:20,860 La oss legge til mine parentes her, parenteser her. 1242 00:51:20,860 --> 00:51:22,670 La oss sette dette over her. 1243 00:51:22,670 --> 00:51:25,130 Her, jeg la merke til en annen feil jeg gjorde underveis. 1244 00:51:25,130 --> 00:51:25,680 Ja? 1245 00:51:25,680 --> 00:51:26,930 PUBLIKUM: [uhørlig] 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 Slik at vi faktisk har samme heltall 1249 00:51:32,400 --> 00:51:34,020 divisjon problemet fra før. 1250 00:51:34,020 --> 00:51:35,800 Jeg korrigerer det, la oss se hva symptomet er. 1251 00:51:35,800 --> 00:51:36,990 Men vi er nødt til å korrigere en 1252 00:51:36,990 --> 00:51:37,680 andre feil her. 1253 00:51:37,680 --> 00:51:38,015 Ja? 1254 00:51:38,015 --> 00:51:39,540 PUBLIKUM: [uhørlig] 1255 00:51:39,540 --> 00:51:40,070 DAVID J. MALAN: Ja. 1256 00:51:40,070 --> 00:51:43,130 Så dum feil jeg gjorde, men utrolig viktig. 1257 00:51:43,130 --> 00:51:45,870 Datamaskinen er ikke til å bare lukke øynene og la 1258 00:51:45,870 --> 00:51:48,770 meg bruke kapital F, når jeg faktisk erklærte variabelen 1259 00:51:48,770 --> 00:51:51,360 som en liten f her, i linje 8. 1260 00:51:51,360 --> 00:51:54,470 Så jeg trenger å korrigere i linje 11 kapitalisering mitt, som en 1261 00:51:54,470 --> 00:51:56,820 øyeblikk siden var en stor F ved en feiltakelse. 1262 00:51:56,820 --> 00:51:57,610 Hva om her? 1263 00:51:57,610 --> 00:51:59,980 Skulle dette være små også? 1264 00:51:59,980 --> 00:52:02,260 Det skal være, men det er en tilfeldighet. 1265 00:52:02,260 --> 00:52:05,070 At% f har ingenting å gjøre med variabelen. 1266 00:52:05,070 --> 00:52:07,980 Så bare for å være super klar her, la meg gå videre og 1267 00:52:07,980 --> 00:52:10,710 endre navn på denne, kort, "temperatur". La meg gi nytt navn 1268 00:52:10,710 --> 00:52:15,050 dette "temperatur". La meg ikke endre navn på denne. 1269 00:52:15,050 --> 00:52:18,180 Fordi, igjen,% f globalt betyr "flyttall verdi." 1270 00:52:18,180 --> 00:52:19,950 Har ingenting å gjøre med variabel min. 1271 00:52:19,950 --> 00:52:23,080 Men "temperaturen" all over the place er bare litt wordy, 1272 00:52:23,080 --> 00:52:25,370 så jeg kommer til å gå tilbake til min liten "f" s. 1273 00:52:25,370 --> 00:52:27,890 >> Nå, la meg gå videre ned til vinduet mitt her. 1274 00:52:27,890 --> 00:52:29,190 Gjør f2c - 1275 00:52:29,190 --> 00:52:31,200 som var igjen, vilkårlig navn jeg 1276 00:52:31,200 --> 00:52:32,590 ga til denne filen. 1277 00:52:32,590 --> 00:52:33,690 Synes å ha utarbeidet. 1278 00:52:33,690 --> 00:52:35,080 La meg kjøre f2c. 1279 00:52:35,080 --> 00:52:35,780 Enter. 1280 00:52:35,780 --> 00:52:37,786 Temperaturen i celsius - la oss gjøre en enkel en. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, korrigere. 1283 00:52:40,910 --> 00:52:45,910 Men, hvis jeg nå gjøre 212 for koking - 1284 00:52:45,910 --> 00:52:46,630 faen. 1285 00:52:46,630 --> 00:52:47,030 OK. 1286 00:52:47,030 --> 00:52:50,780 Så klart ikke korrigere, hvis TF prøver 1287 00:52:50,780 --> 00:52:51,800 minst to verdier. 1288 00:52:51,800 --> 00:52:53,340 Så hva er problemet her? 1289 00:52:53,340 --> 00:52:55,970 Vel, du har allerede sette fingeren på hva problemet er. 1290 00:52:55,970 --> 00:52:57,600 Men hvorfor er det slik? 1291 00:52:57,600 --> 00:53:00,630 Opp her, når jeg gjør regnestykket av 5 delt på 9. 1292 00:53:00,630 --> 00:53:02,190 Så konseptuelt, det er helt riktig. 1293 00:53:02,190 --> 00:53:03,690 Helt i samsvar med formelen. 1294 00:53:03,690 --> 00:53:05,940 Men datamaskiner bare gjøre akkurat det du 1295 00:53:05,940 --> 00:53:06,760 fortelle dem å gjøre. 1296 00:53:06,760 --> 00:53:08,940 Og hva vi effektivt forteller datamaskinen her er 1297 00:53:08,940 --> 00:53:12,320 dele heltallet 5 ved heltall 9 1298 00:53:12,320 --> 00:53:13,670 og gi meg resultatet. 1299 00:53:13,670 --> 00:53:16,230 Problemet er, men når du gjør divisjon ved hjelp av data 1300 00:53:16,230 --> 00:53:20,220 typer, er resultatet det samme datatype som inngangene. 1301 00:53:20,220 --> 00:53:23,670 Og så hvis de to innganger er begge ints, blir utgangen går 1302 00:53:23,670 --> 00:53:25,110 å være en int. 1303 00:53:25,110 --> 00:53:28,770 Og så 5 delt på 9 er poenget noe. 1304 00:53:28,770 --> 00:53:32,320 Men hva er det nærmeste heltall for å peke noe? 1305 00:53:32,320 --> 00:53:33,630 Så, det er faktisk 0. 1306 00:53:33,630 --> 00:53:36,620 Så som vi diskuterte mandag, alt etter desimaltegnet 1307 00:53:36,620 --> 00:53:37,940 punkt blir avkortet. 1308 00:53:37,940 --> 00:53:39,495 Det bare blir kastet bort. 1309 00:53:39,495 --> 00:53:42,760 Så dette er en fullstendig feil, fordi jeg kan like godt bare 1310 00:53:42,760 --> 00:53:44,700 multiplisere alt av 0 her. 1311 00:53:44,700 --> 00:53:46,550 >> Nå kan jeg fikse dette i et par måter. 1312 00:53:46,550 --> 00:53:48,080 Jeg kunne gjøre dette. 1313 00:53:48,080 --> 00:53:50,490 5,0 delt på 9,0. 1314 00:53:50,490 --> 00:53:52,110 Teknisk sett trenger jeg ikke engang trenger å gjøre det. 1315 00:53:52,110 --> 00:53:55,780 Det gjør nok å bare gjøre ett av tallene a float - 1316 00:53:55,780 --> 00:53:58,290 eller dobbelt - ved å sette desimaltegn her. 1317 00:53:58,290 --> 00:54:01,740 Fordi det som skjer nå er når du deler et heltall ved 1318 00:54:01,740 --> 00:54:04,670 en flåte, eller en dobbel, er datamaskinen kommer til å realisere 1319 00:54:04,670 --> 00:54:06,830 oh, er en av de mer presis. 1320 00:54:06,830 --> 00:54:09,420 La meg feile på siden av å gi deg mer presisjon enn 1321 00:54:09,420 --> 00:54:10,310 du hadde tenkt. 1322 00:54:10,310 --> 00:54:12,700 Så det vil konvertere resultatet - 1323 00:54:12,700 --> 00:54:16,240 det vil returnere resultatet som et flyttall også. 1324 00:54:16,240 --> 00:54:17,330 Så det ville fungere. 1325 00:54:17,330 --> 00:54:18,060 Dette ville fungere. 1326 00:54:18,060 --> 00:54:20,010 Og det er en annen mekanisme som vi vil se i 1327 00:54:20,010 --> 00:54:21,390 større detalj i neste uke. 1328 00:54:21,390 --> 00:54:24,690 Du kan faktisk, som programmerer, fortelle datamaskinen 1329 00:54:24,690 --> 00:54:27,930 å faktisk behandle en datatype som 1330 00:54:27,930 --> 00:54:29,260 selv om det var en annen. 1331 00:54:29,260 --> 00:54:30,990 >> Så jeg kunne faktisk gjøre dette. 1332 00:54:30,990 --> 00:54:35,280 I parentes kan jeg si noe sånt (float), åpen 1333 00:54:35,280 --> 00:54:36,350 paren, nær paren. 1334 00:54:36,350 --> 00:54:39,050 Og dette er det som kalles "casting". Igjen, mer 1335 00:54:39,050 --> 00:54:39,940 på dette neste uke. 1336 00:54:39,940 --> 00:54:42,280 Men dette er bare programmatiske måten å fortelle 1337 00:54:42,280 --> 00:54:45,910 datamaskinen, ja jeg vet 9 er et heltall eller en lang. 1338 00:54:45,910 --> 00:54:47,700 Jeg vet det ikke er et flyttall. 1339 00:54:47,700 --> 00:54:49,420 Men behandle det som sådan uansett. 1340 00:54:49,420 --> 00:54:52,000 Så for å kaste en datatype betyr å konvertere 1341 00:54:52,000 --> 00:54:53,310 fra den ene til den andre. 1342 00:54:53,310 --> 00:54:55,790 Ærlig, er dette bare en liten stygg, så jeg ville foreslå vi gå 1343 00:54:55,790 --> 00:54:58,830 tilbake til det opprinnelige forslaget av bare å konvertere 1344 00:54:58,830 --> 00:55:00,770 disse tingene til flytpunktverdier manuelt. 1345 00:55:00,770 --> 00:55:02,890 Fordi nå er det bare super klart hva som skjer, og 1346 00:55:02,890 --> 00:55:04,280 det er ikke alle som distraherende. 1347 00:55:04,280 --> 00:55:06,710 >> Så la oss nå gå tilbake til min terminal-vinduet. 1348 00:55:06,710 --> 00:55:07,990 Gjør f2c. 1349 00:55:07,990 --> 00:55:09,430 La meg gå videre og kjøre denne. 1350 00:55:09,430 --> 00:55:12,340 Og, som en side, får du lei skrive disse kommandoene 1351 00:55:12,340 --> 00:55:14,910 igjen og igjen, innser at datamaskiner, som Linux her, 1352 00:55:14,910 --> 00:55:16,010 pleier å være ganske smart. 1353 00:55:16,010 --> 00:55:18,890 Og hvis jeg slo opp, kan vi gå gjennom min hele historien 1354 00:55:18,890 --> 00:55:20,380 kommandoer, opp og ned. 1355 00:55:20,380 --> 00:55:23,840 Så i dette tilfellet her, kan jeg bare gå opp til å kjøre gjøre f2c. 1356 00:55:23,840 --> 00:55:25,830 Jeg blir skreket til, fordi jeg bare gjorde det en andre siden. 1357 00:55:25,830 --> 00:55:27,030 Det er allerede oppdatert. 1358 00:55:27,030 --> 00:55:30,720 Så nå kan jeg kjøre f2c igjen. 1359 00:55:30,720 --> 00:55:33,260 La oss prøve 32 Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 La oss nå prøve 212 Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Puh. 1362 00:55:37,250 --> 00:55:38,250 Synes å fungere. 1363 00:55:38,250 --> 00:55:41,760 Nå, dette er bra, men det føles litt vilkårlig at 1364 00:55:41,760 --> 00:55:44,890 Jeg viser seks tall etter desimaler. 1365 00:55:44,890 --> 00:55:45,070 Rett? 1366 00:55:45,070 --> 00:55:47,830 Hvis du er været person på TV, er du en slags doofus 1367 00:55:47,830 --> 00:55:49,150 hvis du leser temperaturen til 1368 00:55:49,150 --> 00:55:50,070 denne graden av presisjon. 1369 00:55:50,070 --> 00:55:51,270 Så la oss forenkle dette. 1370 00:55:51,270 --> 00:55:53,880 Så la oss faktisk gå opp her, til min printf. 1371 00:55:53,880 --> 00:55:55,490 Og ja, jeg vil flyte. 1372 00:55:55,490 --> 00:55:57,570 Men jeg ønsker å nå spesifisere presisjon. 1373 00:55:57,570 --> 00:55:59,070 Og jeg kommer til å være litt konsis. 1374 00:55:59,070 --> 00:56:03,090 Jeg kommer til å si, gi meg ett poeng etter desimal. 1375 00:56:03,090 --> 00:56:07,590 Så snarere enn si% f, jeg kommer til å si% .1 f. 1376 00:56:07,590 --> 00:56:09,760 Og dette betyr bare gi meg en posisjon 1377 00:56:09,760 --> 00:56:11,410 etter desimaltegnet. 1378 00:56:11,410 --> 00:56:11,700 OK. 1379 00:56:11,700 --> 00:56:12,570 La oss prøve dette igjen. 1380 00:56:12,570 --> 00:56:15,590 La meg igjen kjøre den etter kompilering. 1381 00:56:15,590 --> 00:56:18,160 Og nå har jeg skriver i 32, og jeg får tilbake en 1382 00:56:18,160 --> 00:56:19,310 mer konsis verdi. 1383 00:56:19,310 --> 00:56:22,480 Og jeg kan skrive i, nå, 212, og få tilbake en mer konsis 1384 00:56:22,480 --> 00:56:23,260 verdi også. 1385 00:56:23,260 --> 00:56:25,190 Og det er andre ting du kan gjøre med printf. 1386 00:56:25,190 --> 00:56:27,950 Du kan faktisk angi hvor bred antallet bør være. 1387 00:56:27,950 --> 00:56:30,900 Hvis du vil ha polstring på det, slik at du kan høyrejustere eller 1388 00:56:30,900 --> 00:56:32,360 venstre justere alle dine tall eller 1389 00:56:32,360 --> 00:56:33,400 prøver å senter ting. 1390 00:56:33,400 --> 00:56:35,340 Så skjønner det er lite triks du kan gjøre der. 1391 00:56:35,340 --> 00:56:38,420 Men de bare koke ned til formatkoder, 1392 00:56:38,420 --> 00:56:39,600 som vi har det. 1393 00:56:39,600 --> 00:56:41,090 >> Så i form av denne utgaven av forrang. 1394 00:56:41,090 --> 00:56:43,820 Dette er en veldig kjedelig bord å gå gjennom metodisk. 1395 00:56:43,820 --> 00:56:46,780 Men innser at forfatterne av C har kommet opp med 1396 00:56:46,780 --> 00:56:50,190 regler som spesifiserer hvilke operatører har høyere 1397 00:56:50,190 --> 00:56:53,680 forrang, mer forpliktende makt, enn andre. 1398 00:56:53,680 --> 00:56:55,890 Så mens i grunnskolen, vi generelt visste at det var 1399 00:56:55,890 --> 00:56:58,930 multiplikasjon og divisjon, så addisjon og subtraksjon, 1400 00:56:58,930 --> 00:56:59,950 så noen andre ting. 1401 00:56:59,950 --> 00:57:01,720 I en verden av programmering, det er en mye 1402 00:57:01,720 --> 00:57:03,360 lengre liste over ting. 1403 00:57:03,360 --> 00:57:05,150 Og dette er ikke noe verdt memorere nå. 1404 00:57:05,150 --> 00:57:07,310 Du vil få acclimated til det før lenge. 1405 00:57:07,310 --> 00:57:10,690 Men akkurat som i grunnskolen, parentes generelt løse 1406 00:57:10,690 --> 00:57:12,990 spørsmålene om forrang, ved å gjøre super klar til 1407 00:57:12,990 --> 00:57:15,620 datamaskin og menneskelig alike hva er ment. 1408 00:57:15,620 --> 00:57:17,770 Så vurdere dette bare en liten jukselapp der. 1409 00:57:17,770 --> 00:57:21,690 Men de fleste av disse detaljene vi ikke får til for noen tid. 1410 00:57:21,690 --> 00:57:21,900 >> OK. 1411 00:57:21,900 --> 00:57:24,120 Nå, la oss bygge opp og bevege seg bort fra disse dum liten 1412 00:57:24,120 --> 00:57:25,460 matematiske eksempler. 1413 00:57:25,460 --> 00:57:27,500 Fortsatt bruke de samme grunnleggende, men starter 1414 00:57:27,500 --> 00:57:29,960 uttrykke oss litt mer som Scratch. 1415 00:57:29,960 --> 00:57:31,660 Så i Scratch, hadde vi disse boolske uttrykk. 1416 00:57:31,660 --> 00:57:34,890 Og på engelsk, er en boolsk uttrykk hva? 1417 00:57:34,890 --> 00:57:35,580 Sant eller usant. 1418 00:57:35,580 --> 00:57:38,300 Det er noe som evalueres til sant eller usant. 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 Uansett hva du vil kalle det. 1422 00:57:41,000 --> 00:57:43,210 Nå i Scratch, så brikkene som dette. 1423 00:57:43,210 --> 00:57:45,850 Og det er kombinasjonen, på bunnen der, av tre 1424 00:57:45,850 --> 00:57:47,980 puslebiter. 1425 00:57:47,980 --> 00:57:48,980 En kombinasjon - 1426 00:57:48,980 --> 00:57:51,710 noe som har blank og blank. 1427 00:57:51,710 --> 00:57:53,970 Og deretter to boolske uttrykk innsiden av det. 1428 00:57:53,970 --> 00:57:56,460 Så du kan neste boolske uttrykk for å få mer 1429 00:57:56,460 --> 00:57:59,360 komplisert boolske uttrykk. 1430 00:57:59,360 --> 00:58:03,930 For eksempel, hvis det er lørdag, og det er hyggelig 1431 00:58:03,930 --> 00:58:06,180 vær, så gå utenfor. 1432 00:58:06,180 --> 00:58:07,500 Eller noe vilkårlig sånn. 1433 00:58:07,500 --> 00:58:10,090 Så du kan bli med boolske uttrykk for å komme opp med en 1434 00:58:10,090 --> 00:58:12,780 større sannhet verdi, hvis svaret er basert 1435 00:58:12,780 --> 00:58:13,800 på de mindre. 1436 00:58:13,800 --> 00:58:15,770 >> Nå, i C, heldigvis, er denne kartleggingen 1437 00:58:15,770 --> 00:58:16,720 faktisk ganske enkelt. 1438 00:58:16,720 --> 00:58:18,820 Parentes bidra til å gjøre ting klart her. 1439 00:58:18,820 --> 00:58:21,700 && Er hva betyr "og". Så det er slik 1440 00:58:21,700 --> 00:58:24,700 vi kommer til å konvertere disse blokkene fra Scratch til C. 1441 00:58:24,700 --> 00:58:27,590 Og for de forhold vi så i Scratch, på venstre hånd 1442 00:58:27,590 --> 00:58:31,150 siden det kan jeg stable dem på samme måte i C. Hvis x er mindre 1443 00:58:31,150 --> 00:58:32,970 enn y, så gjør dette. 1444 00:58:32,970 --> 00:58:35,100 Else if x er større enn y, så gjør dette. 1445 00:58:35,100 --> 00:58:38,030 Else logisk de må være like, så si 1446 00:58:38,030 --> 00:58:39,140 at de er like. 1447 00:58:39,140 --> 00:58:41,210 Så vi kan nå begynne å bygge disse tingene opp. 1448 00:58:41,210 --> 00:58:42,170 >> Så la oss gjøre et eksempel. 1449 00:58:42,170 --> 00:58:45,550 La meg åpne opp en fil som er på kursets nettside som 1450 00:58:45,550 --> 00:58:47,270 Jeg skrev på forhånd. 1451 00:58:47,270 --> 00:58:50,540 Som kalles nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 Og vi vil se hvorfor på bare et øyeblikk. 1453 00:58:52,270 --> 00:58:54,770 Så i denne filen - nonswitch.c-- 1454 00:58:54,770 --> 00:58:56,830 først innse at det er en hel haug med 1455 00:58:56,830 --> 00:58:58,460 kommentarer på toppen. 1456 00:58:58,460 --> 00:59:00,110 Det er bare å forklare navnet på filen, hva det 1457 00:59:00,110 --> 00:59:01,260 gjør, og så videre. 1458 00:59:01,260 --> 00:59:04,390 Og det viser tilsynelatende bruk av boolske OG-ing - 1459 00:59:04,390 --> 00:59:06,220 conjoining to uttrykk. 1460 00:59:06,220 --> 00:59:07,670 >> Så la oss se hvordan dette programmet fungerer. 1461 00:59:07,670 --> 00:59:10,840 Jeg har mine to filer, cs50.h og stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Hvis jeg ruller nedover, nå, til programmet, er det litt lenger 1463 00:59:13,180 --> 00:59:15,730 enn vi har skrevet før, men ganske lesbar. 1464 00:59:15,730 --> 00:59:18,360 Så jeg først ut til brukeren, på linje 18, 1465 00:59:18,360 --> 00:59:20,460 "Gi meg et heltall mellom 1 og 10 år." Så 1466 00:59:20,460 --> 00:59:21,530 det er rett der. 1467 00:59:21,530 --> 00:59:23,410 Nå får jeg heltall. 1468 00:59:23,410 --> 00:59:25,380 Men innser at GetInt - ganske enkelt. 1469 00:59:25,380 --> 00:59:26,510 Det er bare kommer til å få en int. 1470 00:59:26,510 --> 00:59:28,830 Det kommer til å sørge for at den får en int og ikke en 1471 00:59:28,830 --> 00:59:30,060 streng eller en flåte. 1472 00:59:30,060 --> 00:59:32,390 Men det kommer ikke til å gjøre noen form for grense kontroll. 1473 00:59:32,390 --> 00:59:34,750 Det er ikke til å filtrere tallene for å være mellom en 1474 00:59:34,750 --> 00:59:35,630 visst område. 1475 00:59:35,630 --> 00:59:37,730 Så vi må gjennomføre det selv. 1476 00:59:37,730 --> 00:59:40,680 Så akkurat som i Scratch, hvor jeg kunne gjøre en forbindelse av 1477 00:59:40,680 --> 00:59:43,560 to uttrykk, kan jeg gjøre det i C som følger. 1478 00:59:43,560 --> 00:59:48,660 Hvis n er større enn eller lik 1, og n er mindre enn og 1479 00:59:48,660 --> 00:59:52,220 eller lik 3, jeg kommer til å veldig vilkårlig dekret som 1480 00:59:52,220 --> 00:59:53,830 nummer å være et lite antall. 1481 00:59:53,830 --> 00:59:56,730 Bare for moro skyld en uttalelse. 1482 00:59:56,730 --> 01:00:00,210 Else if n er mellom 4 og 6, print "Du plukket et medium 1483 01:00:00,210 --> 01:00:03,440 nummer. "Else hvis n er mellom 7 og 10, print" Du plukket en 1484 01:00:03,440 --> 01:00:06,390 stort antall. "Else print" Du velger et ugyldig nummer. " 1485 01:00:06,390 --> 01:00:07,900 Fordi logisk, følger at dersom vi har 1486 01:00:07,900 --> 01:00:09,230 utmattet vårt utvalg. 1487 01:00:09,230 --> 01:00:12,400 >> Så innser dette er ikke helt hvordan vi skriver større enn eller 1488 01:00:12,400 --> 01:00:15,000 lik i en matte klasse. 1489 01:00:15,000 --> 01:00:15,160 Rett? 1490 01:00:15,160 --> 01:00:17,430 Du vanligvis trekke det ut som dette, med strek under det. 1491 01:00:17,430 --> 01:00:19,250 Men det er ikke slike tasten på tastaturet mitt. 1492 01:00:19,250 --> 01:00:22,390 Så symbolet i C for å uttrykke større enn eller 1493 01:00:22,390 --> 01:00:25,770 lik er to tegn, og symbolet for mindre enn 1494 01:00:25,770 --> 01:00:29,100 eller lik er to tegn i tillegg. 1495 01:00:29,100 --> 01:00:29,330 OK. 1496 01:00:29,330 --> 01:00:31,910 Så hvis jeg kjører dette programmet, kan du sikkert gjette hva det er 1497 01:00:31,910 --> 01:00:32,650 kommer til å gjøre. 1498 01:00:32,650 --> 01:00:36,180 Hvis jeg går videre og gjøre nonswitch, Enter. 1499 01:00:36,180 --> 01:00:38,130 Og deretter kjøre nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Gi meg et tall mellom 1 og 10 år. 1501 01:00:39,530 --> 01:00:40,870 Jeg kommer til å gi den 11. 1502 01:00:40,870 --> 01:00:42,280 Jeg plukket et feil nummer. 1503 01:00:42,280 --> 01:00:44,090 La meg prøve nummer tre. 1504 01:00:44,090 --> 01:00:45,990 Jeg plukket et lite antall. 1505 01:00:45,990 --> 01:00:48,360 Så ganske grei der. 1506 01:00:48,360 --> 01:00:52,230 >> Hva om jeg ønsker å endre oppførselen til dette programmet, og 1507 01:00:52,230 --> 01:00:54,250 gjøre noe litt annerledes i stedet? 1508 01:00:54,250 --> 01:00:57,620 La meg gå videre og si dette. 1509 01:00:57,620 --> 01:00:59,480 La meg bli kvitt alt dette. 1510 01:00:59,480 --> 01:01:03,780 Og la meg si if (n == 42). 1511 01:01:03,780 --> 01:01:08,730 Og så skal jeg gå videre og si print "Du plukket 1512 01:01:08,730 --> 01:01:16,340 riktig svar. "Else vi kommer til å gå foran og si, 1513 01:01:16,340 --> 01:01:18,460 printf ("Du valgte 1514 01:01:18,460 --> 01:01:21,170 feil svar ");. Okay. 1515 01:01:21,170 --> 01:01:22,040 Bare fordi. 1516 01:01:22,040 --> 01:01:23,890 >> Nå, noen punkter vi kan gjøre her. 1517 01:01:23,890 --> 01:01:26,570 En, det gjorde jeg ikke skrive symbolet som du tror er 1518 01:01:26,570 --> 01:01:27,390 mest fornuftige. 1519 01:01:27,390 --> 01:01:30,110 Når jeg ønsker å sjekke likestilling, viser seg at du ikke bruker 1520 01:01:30,110 --> 01:01:30,910 likhetstegnet. 1521 01:01:30,910 --> 01:01:34,000 Du i stedet bruke like likhetstegnet. 1522 01:01:34,000 --> 01:01:36,440 Og hvorfor kan det være, bare intuitivt? 1523 01:01:36,440 --> 01:01:37,030 Ja. 1524 01:01:37,030 --> 01:01:39,330 PUBLIKUM: [uhørlig] 1525 01:01:39,330 --> 01:01:39,615 DAVID J. MALAN: Riktig. 1526 01:01:39,615 --> 01:01:41,630 Likhetstegnet er allerede brukt for tildeling. 1527 01:01:41,630 --> 01:01:43,020 Noen hadde egentlig ikke tenke gjennom dette. 1528 01:01:43,020 --> 01:01:45,820 Og så nå, når det gjelder likestilling testing, må vi 1529 01:01:45,820 --> 01:01:48,850 være mer eksplisitt, og si lik lik. 1530 01:01:48,850 --> 01:01:52,110 En veldig vanlig feil er å gjøre dette. 1531 01:01:52,110 --> 01:01:54,800 Og hvis du er i kontortid eller en gang neste uke eller i 1532 01:01:54,800 --> 01:01:58,340 neste to uker gjør du noe som dette, og deretter 1533 01:01:58,340 --> 01:02:00,920 sliter med det for 10, 20 minutter prøver å finne ut 1534 01:02:00,920 --> 01:02:03,330 hva faen bug er, skjønner at du er en av dem 1535 01:02:03,330 --> 01:02:04,470 folk som har gjort denne feilen. 1536 01:02:04,470 --> 01:02:06,030 Så super enkelt å lage. 1537 01:02:06,030 --> 01:02:08,240 Men målet er nå å avverge dette feil. 1538 01:02:08,240 --> 01:02:11,840 Dette kan vurdere, fordi det er dette egentlig si? 1539 01:02:11,840 --> 01:02:15,010 Hvis n blir 42. 1540 01:02:15,010 --> 01:02:18,250 Så verbet folk bruker, muntlig, uttrykke 1541 01:02:18,250 --> 01:02:21,800 oppfatningen av oppdraget er "får". Så hvis n får 42. 1542 01:02:21,800 --> 01:02:24,060 Så det betyr tildele 42 til n. 1543 01:02:24,060 --> 01:02:26,250 Nå har jeg en boolsk uttrykk i parentes, 1544 01:02:26,250 --> 01:02:30,230 innsiden av denne tilstanden, er verdien av disse 42. 1545 01:02:30,230 --> 01:02:30,390 Rett? 1546 01:02:30,390 --> 01:02:32,690 Fordi hvis du vurdere det fra innsiden og ut, den totale 1547 01:02:32,690 --> 01:02:34,100 Svaret nå er 42. 1548 01:02:34,100 --> 01:02:37,360 >> Så hvis jeg spurte deg spørsmålet, "hvis (42)," hva er 1549 01:02:37,360 --> 01:02:38,410 som virkelig sier? 1550 01:02:38,410 --> 01:02:40,990 Vel, kan boolske uttrykk bare være sant eller usant. 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 synes å ha et hjørne tilfelle her, hvorved alle en 1554 01:02:45,240 --> 01:02:50,060 plutselig, jeg sier "if (42)". Det er ikke en boolsk verdi. 1555 01:02:50,060 --> 01:02:54,500 Så hva datamaskiner gjør, skjønt, er det i hovedsak tilsvarer 1556 01:02:54,500 --> 01:02:58,620 noe som ikke er 0 er tolket til å være 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 er alle tilsvarende funksjonalitet. 1560 01:03:01,510 --> 01:03:05,070 Bare verdien 0 eller søkeordet falsk, som vi vil 1561 01:03:05,070 --> 01:03:07,860 slutt se, er faktisk falsk. 1562 01:03:07,860 --> 01:03:15,040 Så "if (42)" ville faktisk være sant, fordi det ikke er null. 1563 01:03:15,040 --> 01:03:18,620 Så for å være mer presis her, er en boolsk verdi egentlig ikke så 1564 01:03:18,620 --> 01:03:20,680 mye sant eller usant, men for denne 1565 01:03:20,680 --> 01:03:24,650 tilfelle, hvis er 0 eller ikke-null. 1566 01:03:24,650 --> 01:03:26,330 Så falsk eller ikke falsk. 1567 01:03:26,330 --> 01:03:28,640 Og som tillater oss å omfatte alle mer 1568 01:03:28,640 --> 01:03:30,980 muligheter i parentesuttrykk. 1569 01:03:30,980 --> 01:03:33,840 Så vi må, aldri så nøye, sier dette - 1570 01:03:33,840 --> 01:03:35,620 if (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Rett og slett fordi vi trenger å spesifisere en test av likestilling, 1572 01:03:39,100 --> 01:03:40,930 ikke et oppdrag av en verdi. 1573 01:03:40,930 --> 01:03:42,830 >> Hva annet er verdt å merke seg her? 1574 01:03:42,830 --> 01:03:46,030 Disse klammeparentes er faktisk ikke nødvendig. 1575 01:03:46,030 --> 01:03:48,650 Jeg har gjort dem bare for å være nit-kresen her. 1576 01:03:48,650 --> 01:03:51,350 Men når du har en tilstand som bare har én linje av 1577 01:03:51,350 --> 01:03:55,100 kode, som bekvemmelighet, trenger programmerere ikke trenger å bruke 1578 01:03:55,100 --> 01:03:56,030 de klammeparentes. 1579 01:03:56,030 --> 01:03:59,370 Det er nok å bare strekpunkt for estetiske grunner, og 1580 01:03:59,370 --> 01:04:01,050 deretter skrive linje med kode. 1581 01:04:01,050 --> 01:04:04,160 Bare når du ønsker å skrive to linjer med kode - for 1582 01:04:04,160 --> 01:04:08,230 eksempel, ellers printf ("Bye!"). Hvis du ønsker å gjøre 1583 01:04:08,230 --> 01:04:09,540 det, er dette brutt. 1584 01:04:09,540 --> 01:04:11,700 Du kan rykke alt du vil, men det faktum at du har 1585 01:04:11,700 --> 01:04:14,600 skrevet to linjer med kode uten å bruke klammeparentes 1586 01:04:14,600 --> 01:04:16,860 betyr at dette programmet ikke ville kjøre riktig eller kanskje 1587 01:04:16,860 --> 01:04:18,530 ikke engang kompilere riktig. 1588 01:04:18,530 --> 01:04:21,040 Så for nå, for å være ærlig, tror jeg det beste vane er bare 1589 01:04:21,040 --> 01:04:24,460 bruke klammeparentes, og du vil finne at de gjør 1590 01:04:24,460 --> 01:04:25,750 super klart hva som skjer. 1591 01:04:25,750 --> 01:04:29,410 >> Også, som en side - spesielt hvis du er blant dem som bruker 1592 01:04:29,410 --> 01:04:31,700 de anbefalte bøker eller ressurser online - 1593 01:04:31,700 --> 01:04:33,480 innse at det er denne oppfatningen av stil i 1594 01:04:33,480 --> 01:04:34,130 programmering. 1595 01:04:34,130 --> 01:04:37,280 Og noen mennesker faktisk foretrekker å sette krøllete brace 1596 01:04:37,280 --> 01:04:38,720 over her på en linje. 1597 01:04:38,720 --> 01:04:41,520 Noen mennesker foretrekker å gjøre latterlige ting, 1598 01:04:41,520 --> 01:04:43,830 liker sette dem her. 1599 01:04:43,830 --> 01:04:45,140 Det er ingen feil svar når det kommer til 1600 01:04:45,140 --> 01:04:46,710 stil, men dette er feil. 1601 01:04:46,710 --> 01:04:47,700 Men noen mennesker gjør det. 1602 01:04:47,700 --> 01:04:49,160 [Latter] 1603 01:04:49,160 --> 01:04:51,760 DAVID J. MALAN: Så jeg nevner dette nå, rett og slett fordi så 1604 01:04:51,760 --> 01:04:54,400 du lese opp på ting i bøker eller på nettet, du kommer til å få 1605 01:04:54,400 --> 01:04:55,990 ulike meldinger fra ulike lærere og 1606 01:04:55,990 --> 01:04:56,730 forskjellige forfattere. 1607 01:04:56,730 --> 01:04:58,640 Og bare innse det, funksjonelt, de er 1608 01:04:58,640 --> 01:05:00,740 generelt tilsvarende, men vær konsekvent. 1609 01:05:00,740 --> 01:05:02,850 Så i dette tilfellet, vil vi standardisere på krøllete 1610 01:05:02,850 --> 01:05:04,650 bukseseler kø her til venstre. 1611 01:05:04,650 --> 01:05:04,910 >> OK. 1612 01:05:04,910 --> 01:05:07,040 Så la oss gå videre nå og kjøre denne, og se hva som skjer 1613 01:05:07,040 --> 01:05:07,780 med dette programmet. 1614 01:05:07,780 --> 01:05:09,970 Gjør nonswitch. 1615 01:05:09,970 --> 01:05:11,040 Deretter kjøre nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Gi meg et heltall mellom 0 og - så det er ikke relevant 1617 01:05:13,900 --> 01:05:16,480 lenger, men jeg skal bare vilkårlig si 42. 1618 01:05:16,480 --> 01:05:17,850 Og jeg plukket det rette svaret. 1619 01:05:17,850 --> 01:05:20,430 Vel, la oss faktisk ta dette i en annen retning. 1620 01:05:20,430 --> 01:05:22,070 Det viser seg at det er noen andre syntaks vi 1621 01:05:22,070 --> 01:05:23,480 kan bruke i et program. 1622 01:05:23,480 --> 01:05:27,310 Her er et nytt stykke av syntaks som er funksjonelt det samme, 1623 01:05:27,310 --> 01:05:30,680 men introduserer bare en annen måte å uttrykke oss selv. 1624 01:05:30,680 --> 01:05:32,830 Så dette er det som kalles en "bryter uttalelse." Og en 1625 01:05:32,830 --> 01:05:34,820 bryter uttalelse virker som følger. 1626 01:05:34,820 --> 01:05:37,580 Det tar, i parentes, en verdi som du vil 1627 01:05:37,580 --> 01:05:38,860 "Bryter" på. 1628 01:05:38,860 --> 01:05:41,490 Du ønsker å oppføre seg annerledes basert på verdi. 1629 01:05:41,490 --> 01:05:44,360 Så dette betyr bryteren på verdien av n. 1630 01:05:44,360 --> 01:05:45,480 Og hva betyr dette? 1631 01:05:45,480 --> 01:05:50,530 Vel, hvis n er 1 eller 2 eller 3, gå videre og skrive ut "Du 1632 01:05:50,530 --> 01:05:52,680 plukket et stort antall "og deretter bryte. 1633 01:05:52,680 --> 01:05:55,720 Grunnen til pausen er at veien C fungerer er som 1634 01:05:55,720 --> 01:05:59,790 snart den finner en sak som matcher, begynner det å utføre 1635 01:05:59,790 --> 01:06:01,610 all koden nedenfor den. 1636 01:06:01,610 --> 01:06:04,580 Så hvis jeg har en linje med kode, som jeg gjør her på linje 27, den 1637 01:06:04,580 --> 01:06:05,360 blir henrettet. 1638 01:06:05,360 --> 01:06:07,520 Hvis jeg legger en annen linje her, det blir henrettet. 1639 01:06:07,520 --> 01:06:09,350 En annen linje her, det blir henrettet. 1640 01:06:09,350 --> 01:06:12,460 Programmet stopper bare utfører det som er under 1641 01:06:12,460 --> 01:06:14,680 gjeldende sak uttalelse når jeg eksplisitt 1642 01:06:14,680 --> 01:06:17,210 si "break". Så galt. 1643 01:06:17,210 --> 01:06:19,220 Høyre, i dette tilfellet, som et resultat. 1644 01:06:19,220 --> 01:06:22,130 Tilfelle 4 eller 5 eller 6, på samme måte, kommer 1645 01:06:22,130 --> 01:06:23,160 å skrive ut en melding. 1646 01:06:23,160 --> 01:06:24,410 I dette tilfellet, middels antall. 1647 01:06:24,410 --> 01:06:25,200 Bryte. 1648 01:06:25,200 --> 01:06:28,160 Sak 7, 8, 9, 10, kommer det til å skrive ut "Du plukket en stor 1649 01:06:28,160 --> 01:06:28,950 nummer. "Break. 1650 01:06:28,950 --> 01:06:31,290 Og så er det bokstavelig talt et nøkkelord som heter "default" 1651 01:06:31,290 --> 01:06:34,090 det er effektivt som "annet" konstruere. 1652 01:06:34,090 --> 01:06:36,010 Så ny syntaks, men intellektuelt, 1653 01:06:36,010 --> 01:06:37,060 ingenting i det hele tatt ny her. 1654 01:06:37,060 --> 01:06:38,280 Det er akkurat som Scratch. 1655 01:06:38,280 --> 01:06:41,040 If, else if, else om, liksom blokk. 1656 01:06:41,040 --> 01:06:44,560 >> Så det er slått versjon av dette programmet. 1657 01:06:44,560 --> 01:06:46,280 Men merker at vi gjorde det med tall her. 1658 01:06:46,280 --> 01:06:49,040 La meg åpne opp en ny versjon, bare for å vise 1659 01:06:49,040 --> 01:06:50,670 noe litt mer konkret. 1660 01:06:50,670 --> 01:06:52,840 Så her har vi karakterer i stedet. 1661 01:06:52,840 --> 01:06:55,540 Det viser seg at du kan bruke brytere ikke bare på heltall, men på 1662 01:06:55,540 --> 01:06:56,340 tegn. 1663 01:06:56,340 --> 01:06:58,930 Ikke i alle datatyper, men minst på karakterer. 1664 01:06:58,930 --> 01:07:02,670 Så her kan vi gjøre noe sånt hvis verdien av C som 1665 01:07:02,670 --> 01:07:06,230 brukeren skrev inn, i linje 19, ved å bruke getchar funksjon, 1666 01:07:06,230 --> 01:07:09,410 er hovedstaden A eller små bokstaver a, la oss tolke det som en klasse, 1667 01:07:09,410 --> 01:07:11,340 og sier de plukket en utmerket klasse. 1668 01:07:11,340 --> 01:07:14,690 Og ned langs bryteren uttalelse, har vi andre 1669 01:07:14,690 --> 01:07:17,950 tilfeller for "B" s og "C" s, og så videre. 1670 01:07:17,950 --> 01:07:19,780 Men la oss nå avrunder en annen ting. 1671 01:07:19,780 --> 01:07:21,130 Og igjen, type fly gjennom 1672 01:07:21,130 --> 01:07:22,200 noen av disse eksemplene. 1673 01:07:22,200 --> 01:07:26,990 Men det er egentlig slik at vi kan bruke dem nå - 1674 01:07:26,990 --> 01:07:28,880 eller egentlig, bare oversette dem nå - 1675 01:07:28,880 --> 01:07:32,220 til C. 1676 01:07:32,220 --> 01:07:33,310 >> Så la meg gå videre og gjøre dette. 1677 01:07:33,310 --> 01:07:34,830 Jeg kommer til å åpne opp en ny fil. 1678 01:07:34,830 --> 01:07:39,430 Og jeg kommer til å gjøre er . 1679 01:07:39,430 --> 01:07:42,770 Og så skal jeg gjøre int main (void). 1680 01:07:42,770 --> 01:07:46,390 La meg lagre denne filen som et loop.c. 1681 01:07:46,390 --> 01:07:48,280 Bare som et eksempel. 1682 01:07:48,280 --> 01:07:49,910 Og jeg kommer til å gå videre og gjøre følgende. 1683 01:07:49,910 --> 01:07:54,180 Jeg ønsker å skrive en svært langtekkelig program. 1684 01:07:54,180 --> 01:07:56,170 Så 10. 1685 01:07:56,170 --> 01:07:58,862 La oss gjøre dette. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 OK. 1688 01:08:00,360 --> 01:08:02,120 Så snart du begynner å gjøre dette i programmering, er du 1689 01:08:02,120 --> 01:08:03,490 sannsynligvis gjør noe galt. 1690 01:08:03,490 --> 01:08:04,950 Men vi vil starte der allikevel. 1691 01:08:04,950 --> 01:08:05,430 Oops. 1692 01:08:05,430 --> 01:08:06,950 Det er faktisk feil. 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 Ingenting kommer til å skje når vi kommer til 0. 1698 01:08:12,450 --> 01:08:13,290 3. 1699 01:08:13,290 --> 01:08:14,590 2. 1700 01:08:14,590 --> 01:08:15,630 1. 1701 01:08:15,630 --> 01:08:16,020 Okay. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Slett. 1704 01:08:18,689 --> 01:08:19,029 >> OK. 1705 01:08:19,029 --> 01:08:20,029 Så tilbake 0. 1706 01:08:20,029 --> 01:08:22,010 Så dette programmet er åpenbart kommer til å gjøre det veldig 1707 01:08:22,010 --> 01:08:23,310 tediously sier det kommer til å gjøre. 1708 01:08:23,310 --> 01:08:24,060 Det kommer til å skrive ut alle disse 1709 01:08:24,060 --> 01:08:25,290 verdier, fra topp til bunn. 1710 01:08:25,290 --> 01:08:27,140 Så la meg gjør loop. 1711 01:08:27,140 --> 01:08:28,640 Og så - whoops. 1712 01:08:28,640 --> 01:08:29,700 Gjør loop. 1713 01:08:29,700 --> 01:08:31,479 Jeg var i feil katalog. 1714 01:08:31,479 --> 01:08:33,300 Og nå la meg kjøre loop. 1715 01:08:33,300 --> 01:08:34,140 Enter. 1716 01:08:34,140 --> 01:08:34,620 Woohoo. 1717 01:08:34,620 --> 01:08:35,270 Veldig hyggelig. 1718 01:08:35,270 --> 01:08:36,279 Nice, langt program. 1719 01:08:36,279 --> 01:08:38,109 >> Greit, men nå la oss gjøre dette bedre. 1720 01:08:38,109 --> 01:08:40,810 Akkurat som i Scratch, når du begynte å bruke en looping 1721 01:08:40,810 --> 01:08:43,149 konstruere, i stedet for bare å kopiere og lime alle 1722 01:08:43,149 --> 01:08:45,580 puslespillbiter, la meg presentere denne tingen. 1723 01:08:45,580 --> 01:08:48,609 Så i C, er det ulike looping konstruksjoner, 1724 01:08:48,609 --> 01:08:50,540 en som ser ut som dette. 1725 01:08:50,540 --> 01:08:55,069 En "for" loop har tre ting, atskilt med to semikolon. 1726 01:08:55,069 --> 01:08:57,770 Og deretter, på innsiden av kroppen av loopen, så å si - den 1727 01:08:57,770 --> 01:08:59,390 ting innsiden av klammeparentes - 1728 01:08:59,390 --> 01:09:01,010 Vi kan gjøre noe igjen og igjen. 1729 01:09:01,010 --> 01:09:02,310 Så det jeg har her på skjermen, er dette 1730 01:09:02,310 --> 01:09:03,300 bokstavelig talt bare en kommentar. 1731 01:09:03,300 --> 01:09:05,380 Den / / betyr her kommer en kommentar. 1732 01:09:05,380 --> 01:09:06,180 Dette er ikke-kode. 1733 01:09:06,180 --> 01:09:08,890 Dette er bare engelske beskrivelsen, for meg, det menneskelige. 1734 01:09:08,890 --> 01:09:11,300 >> Så initialiseringer, betingelser og oppdateringer. 1735 01:09:11,300 --> 01:09:12,770 Vel, la oss se hvordan dette fungerer. 1736 01:09:12,770 --> 01:09:15,520 Dette tillater meg å skrive dette programmet som følger. 1737 01:09:15,520 --> 01:09:16,399 For - 1738 01:09:16,399 --> 01:09:18,029 så her kommer min sløyfe - 1739 01:09:18,029 --> 01:09:19,439 int i - 1740 01:09:19,439 --> 01:09:21,330 her kommer en variabel kalt "i" - 1741 01:09:21,330 --> 01:09:23,140 blir initialisert til 10 år. 1742 01:09:23,140 --> 01:09:25,260 Så det er min initialisering. 1743 01:09:25,260 --> 01:09:29,450 Jeg ønsker å gjøre denne sløyfen så lenge "i" er større enn eller 1744 01:09:29,450 --> 01:09:30,899 lik 0.. 1745 01:09:30,899 --> 01:09:32,880 Og på hver iterasjon av denne sløyfen, vil jeg 1746 01:09:32,880 --> 01:09:34,979 å gjøre jeg -. 1747 01:09:34,979 --> 01:09:36,310 Så vi så + + på mandag. 1748 01:09:36,310 --> 01:09:37,660 - Er det motsatte. 1749 01:09:37,660 --> 01:09:39,410 Det reduserer verdien av en. 1750 01:09:39,410 --> 01:09:43,319 Innsiden av denne sløyfen, ønsker jeg å faktisk gjøre noe. 1751 01:09:43,319 --> 01:09:46,390 Så jeg kommer til å si noe sånt som printf. 1752 01:09:46,390 --> 01:09:48,939 Jeg ønsker ikke å si 10 nå, fordi dette åpenbart er bare 1753 01:09:48,939 --> 01:09:50,000 kommer til å skrive ut den samme verdi. 1754 01:09:50,000 --> 01:09:52,246 Hva ønsker jeg å skrive ut i stedet, sannsynligvis? 1755 01:09:52,246 --> 01:09:52,590 Ja. 1756 01:09:52,590 --> 01:09:55,270 Så "i". Så% d, jeg. 1757 01:09:55,270 --> 01:09:57,340 >> Så jeg kommer til å stjele en av disse ideene fra tidligere - 1758 01:09:57,340 --> 01:09:59,640 Dette erstatning for formatkoder - 1759 01:09:59,640 --> 01:10:01,620 og deretter ned her, nederst, vil jeg returnere 0, bare 1760 01:10:01,620 --> 01:10:02,710 for godt mål. 1761 01:10:02,710 --> 01:10:04,740 Men nå har jeg en mer konsis program. 1762 01:10:04,740 --> 01:10:07,490 Det er bare noen få linjer, og ikke noen 10 eller 11 linjer. 1763 01:10:07,490 --> 01:10:09,440 La meg gå til min rask her nede. 1764 01:10:09,440 --> 01:10:10,630 Remake loop. 1765 01:10:10,630 --> 01:10:12,140 Kjør loop. 1766 01:10:12,140 --> 01:10:13,570 Og det synes å være det samme. 1767 01:10:13,570 --> 01:10:15,550 Nå er programmet ikke mer interessant. 1768 01:10:15,550 --> 01:10:17,180 Men nå kan jeg skrive noe sånt som dette. 1769 01:10:17,180 --> 01:10:18,970 Jeg kan endre dette til 100 år. 1770 01:10:18,970 --> 01:10:21,400 Da kan jeg rekompilere programmet mitt. 1771 01:10:21,400 --> 01:10:23,360 Og da kan jeg re-run mitt program. 1772 01:10:23,360 --> 01:10:26,390 Og nå går det superraske på dagens datamaskiner. 1773 01:10:26,390 --> 01:10:27,820 Men det jeg har - 1774 01:10:27,820 --> 01:10:29,620 og faktisk, min Rulleminne buffer ikke 1775 01:10:29,620 --> 01:10:30,890 selv gå så langt. 1776 01:10:30,890 --> 01:10:31,680 Det vi går. 1777 01:10:31,680 --> 01:10:34,090 Så det har vi alle 100. 1778 01:10:34,090 --> 01:10:35,880 Men det er lett å gjøre feil her. 1779 01:10:35,880 --> 01:10:37,920 Hva kommer til å bli forventet oppførsel hvis jeg 1780 01:10:37,920 --> 01:10:41,150 uhell gjøre det? 1781 01:10:41,150 --> 01:10:42,550 Så det føles som uendelig. 1782 01:10:42,550 --> 01:10:44,670 Så la oss se om maskinen oppfører seg. 1783 01:10:44,670 --> 01:10:47,020 >> Så la meg gå videre og gjøre loop. 1784 01:10:47,020 --> 01:10:48,355 Og la meg kjøre loop. 1785 01:10:53,590 --> 01:10:55,210 Så la oss komme tilbake til det i løpet av et øyeblikk. 1786 01:10:55,210 --> 01:10:56,720 Vi vil la det kjøre. 1787 01:10:56,720 --> 01:10:59,520 Fordi hva skal vi telle opp til, minimalt? 1788 01:10:59,520 --> 01:11:02,200 Sannsynligvis minst 2 milliarder kroner, hvis vi har så mange biter, og 1789 01:11:02,200 --> 01:11:03,660 vi bruker positive verdier. 1790 01:11:03,660 --> 01:11:04,890 Så la oss hoppe tilbake hit. 1791 01:11:04,890 --> 01:11:07,810 I tillegg til disse typer løkker, har vi det som kalles mens 1792 01:11:07,810 --> 01:11:09,430 sløyfer. Så, akkurat som i Scratch, hadde du Alltid 1793 01:11:09,430 --> 01:11:11,240 blokker, og du hadde Gjenta blokker. 1794 01:11:11,240 --> 01:11:13,270 Tilsvarende, i C, du må bare andre måter 1795 01:11:13,270 --> 01:11:14,260 å uttrykke deg selv. 1796 01:11:14,260 --> 01:11:17,110 Så du har denne oppfatningen av en stund loop som lar deg 1797 01:11:17,110 --> 01:11:18,860 uttrykke deg litt annerledes. 1798 01:11:18,860 --> 01:11:21,490 Og da har du noe som heter en gjør-mens loop, 1799 01:11:21,490 --> 01:11:24,200 som opererer litt forskjellig så vel. 1800 01:11:24,200 --> 01:11:25,320 Og vi vil erte disse fra hverandre over tid. 1801 01:11:25,320 --> 01:11:28,630 >> Men la oss ta en titt på denne siste her. 1802 01:11:28,630 --> 01:11:30,160 Hvis vi går inn i - 1803 01:11:30,160 --> 01:11:31,466 fortsatt kjører. 1804 01:11:31,466 --> 01:11:32,770 Det er ganske uendelig. 1805 01:11:32,770 --> 01:11:36,870 Så la meg gå til positivt og viser hvordan vi kan faktisk 1806 01:11:36,870 --> 01:11:39,410 styre brukerens input litt mer effektivt. 1807 01:11:39,410 --> 01:11:40,910 Det er en ganske kort program. 1808 01:11:40,910 --> 01:11:43,730 Og her har vi i hovedsak en int n erklæringen. 1809 01:11:43,730 --> 01:11:46,570 Så gi meg en variabel kalt n. Nå, jeg bokstavelig talt si 1810 01:11:46,570 --> 01:11:48,340 "Gjøre." Og så har jeg fått åpne krøllete 1811 01:11:48,340 --> 01:11:49,630 spenne, nær krøllete brace. 1812 01:11:49,630 --> 01:11:52,000 Og deretter oppdager, rett etter det, sier den mens n 1813 01:11:52,000 --> 01:11:53,790 er mindre enn 1. 1814 01:11:53,790 --> 01:11:55,300 Så merke til at disse linjene - 1815 01:11:55,300 --> 01:11:56,740 19-24 - 1816 01:11:56,740 --> 01:11:59,450 komponere sammen en do-while-løkke. 1817 01:11:59,450 --> 01:12:01,280 Og igjen, ny syntaks, ikke en ny idé. 1818 01:12:01,280 --> 01:12:03,740 Det er bare en annen måte å looping, syntaktisk. 1819 01:12:03,740 --> 01:12:04,890 Så hva gjør dette? 1820 01:12:04,890 --> 01:12:08,000 Gjør følgende mens n er mindre enn 1. 1821 01:12:08,000 --> 01:12:09,080 Så hva ønsker jeg å gjøre? 1822 01:12:09,080 --> 01:12:11,390 Jeg krever at du gir meg et positivt heltall. 1823 01:12:11,390 --> 01:12:14,110 Da jeg faktisk prøve å få et heltall fra brukeren. 1824 01:12:14,110 --> 01:12:16,740 Men i forhold til rekkefølgen av operasjoner her, fordi 1825 01:12:16,740 --> 01:12:21,850 mens tilstanden er her nede, jeg så kommer til å sjekke, er n 1826 01:12:21,850 --> 01:12:23,100 mindre enn 1? 1827 01:12:23,100 --> 01:12:24,600 Så antar at brukeren - 1828 01:12:24,600 --> 01:12:26,450 etter blir krevd i denne måten - 1829 01:12:26,450 --> 01:12:29,190 typer i verdien 0. 1830 01:12:29,190 --> 01:12:34,510 Denne tilstanden kommer til å være sant eller usant? 1831 01:12:34,510 --> 01:12:35,820 Vel, det er faktisk kommer til å være sant. 1832 01:12:35,820 --> 01:12:38,700 Fordi n er 0, og 0 er mindre enn 1. 1833 01:12:38,700 --> 01:12:40,140 Så hva betyr det? 1834 01:12:40,140 --> 01:12:41,160 Gjøre det igjen. 1835 01:12:41,160 --> 01:12:41,990 Gjøre det igjen. 1836 01:12:41,990 --> 01:12:42,640 Gjøre det igjen. 1837 01:12:42,640 --> 01:12:46,080 Bare en gang at tilstanden USANN. 1838 01:12:46,080 --> 01:12:47,510 Hvis jeg skriver i 42. 1839 01:12:47,510 --> 01:12:49,690 Vel nei, er 42 ikke mindre enn en. 1840 01:12:49,690 --> 01:12:52,320 Derfor denne sløyfen er gjort gjennomføre. 1841 01:12:52,320 --> 01:12:54,650 Og så på det punktet, vil programmet si, takk for 1842 01:12:54,650 --> 01:12:57,530 den 42, i dette tilfellet. 1843 01:12:57,530 --> 01:13:00,320 Nå som du har denne måten å uttrykke deg selv - 1844 01:13:00,320 --> 01:13:02,360 Vi bør ikke vente på dette til slutt. 1845 01:13:02,360 --> 01:13:03,620 Det kommer til å ta litt tid. 1846 01:13:03,620 --> 01:13:04,990 Å bli videreført neste gang, kanskje. 1847 01:13:04,990 --> 01:13:08,050 >> Men nå har du muligheten til å forhåpentligvis å forstå en 1848 01:13:08,050 --> 01:13:09,060 litt geek humor. 1849 01:13:09,060 --> 01:13:11,560 Unnskyldninger. 1850 01:13:11,560 --> 01:13:13,620 Dette er ikke representativt for humor i datavitenskap 1851 01:13:13,620 --> 01:13:14,870 verden, men den er søt. 1852 01:13:21,020 --> 01:13:23,890 [Ler] La oss slutten på dette notatet. 1853 01:13:23,890 --> 01:13:25,750 Og vi vil se deg på mandag. 1854 01:13:25,750 --> 01:13:31,629 [Applaus]