1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J MALAN: Alle højre, så dette er CS50. 3 00:00:13,060 --> 00:00:15,040 Og det er helt klart en fredag. 4 00:00:15,040 --> 00:00:16,850 Og det er i slutningen af ​​ugen en. 5 00:00:16,850 --> 00:00:21,020 Så du kan huske, at vi slap, sidste gang, med en cliffhanger slags. 6 00:00:21,020 --> 00:00:25,020 Hvorved vi udsætter denne løgn, at ingen uanset hvad du har lært voksende 7 00:00:25,020 --> 00:00:31,610 op, 1 divideret med 10 er ikke i Faktisk 0,1 eller 0,100 eller 0,10 tusind. 8 00:00:31,610 --> 00:00:35,270 Faktisk, hvis vi kompilere dette program, som vi gjorde i går, med, 9 00:00:35,270 --> 00:00:39,770 gøre upræcise, og derefter gør prik, skråstreg, unøjagtigheder, 10 00:00:39,770 --> 00:00:43,600 lærte vi, at dette er, hvad der er 1 divideret med 10 faktisk er. 11 00:00:43,600 --> 00:00:46,140 Så det er egentlig ikke helt tilfældet. 12 00:00:46,140 --> 00:00:49,014 Men det betyder tip på nogle grundlæggende begrænsning af computere. 13 00:00:49,014 --> 00:00:50,930 Og ja, blandt de ting, vi vil gøre 14 00:00:50,930 --> 00:00:55,130 i dag, er at tage et kig på, hvorfor det har skete, hvilke konsekvenser det har, 15 00:00:55,130 --> 00:00:58,430 hvordan menneskeheden har undladt at gribe denne i nogle meget 16 00:00:58,430 --> 00:01:00,410 alvorlig situations-- resultatet af hvilke 17 00:01:00,410 --> 00:01:03,141 har været ganske tragisk og expensive-- samt 18 00:01:03,141 --> 00:01:04,849 tage et kig på, hvordan vi kan faktisk forsvare 19 00:01:04,849 --> 00:01:06,530 mod disse typer af begrænsninger. 20 00:01:06,530 --> 00:01:10,940 Så intuitivt, måske, Derfor er 1 divideret med 10, 21 00:01:10,940 --> 00:01:15,480 ifølge min computer her, ikke kun 1/10, 0,10? 22 00:01:15,480 --> 00:01:15,980 Ja. 23 00:01:15,980 --> 00:01:16,530 Hvad synes du? 24 00:01:16,530 --> 00:01:17,860 >> PUBLIKUM MEDLEM: Den radix er anderledes? 25 00:01:17,860 --> 00:01:18,550 >> David J MALAN: Den hvad er? 26 00:01:18,550 --> 00:01:19,730 Åh, radix er anderledes? 27 00:01:19,730 --> 00:01:20,720 Så ikke helt. 28 00:01:20,720 --> 00:01:23,200 Det er faktisk mere grundlæggende for hardware. 29 00:01:23,200 --> 00:01:23,980 Andre tanker? 30 00:01:23,980 --> 00:01:24,584 Ja. 31 00:01:24,584 --> 00:01:26,750 PUBLIKUM MEDLEM: De repræsentere tal anderledes? 32 00:01:26,750 --> 00:01:27,880 David J MALAN: Så they-- Right. 33 00:01:27,880 --> 00:01:29,338 De repræsenterer tal forskelligt. 34 00:01:29,338 --> 00:01:30,700 Unøjagtigt, tilsyneladende. 35 00:01:30,700 --> 00:01:33,190 Så det is-- Nå, anderledes end hvad? 36 00:01:33,190 --> 00:01:34,490 Eller fra hvem? 37 00:01:34,490 --> 00:01:35,050 Fra os? 38 00:01:35,050 --> 00:01:35,966 PUBLIKUM MEDLEM: Ja. 39 00:01:35,966 --> 00:01:38,930 De behøver ikke bruge decimal system [uhørligt]. 40 00:01:38,930 --> 00:01:39,680 David J MALAN: OK. 41 00:01:39,680 --> 00:01:41,560 Så i en vis forstand, ikke gør de bruge decimal system. 42 00:01:41,560 --> 00:01:43,720 Under kølerhjelmen, alt er faktisk, binære, 43 00:01:43,720 --> 00:01:45,510 og det er relateret, faktisk. 44 00:01:45,510 --> 00:01:48,135 Men det er endnu en enklere forklaring end det. 45 00:01:48,135 --> 00:01:48,635 Ja. 46 00:01:48,635 --> 00:01:49,970 >> PUBLIKUM MEDLEM: De kun har så mange bits. 47 00:01:49,970 --> 00:01:52,370 De kan kun lagre op til en vis udstrækning, ligesom med decimaler. 48 00:01:52,370 --> 00:01:52,780 >> David J MALAN: Ja. 49 00:01:52,780 --> 00:01:54,420 Dette er, hvad der virkelig komme på det. 50 00:01:54,420 --> 00:01:57,180 Det viser sig, at computere typisk, altid vil kun 51 00:01:57,180 --> 00:01:59,690 anvende en endelig mængde information at repræsentere noget. 52 00:01:59,690 --> 00:01:59,870 Højre? 53 00:01:59,870 --> 00:02:02,110 Efter alt, har vi kun et fast mængde plads på harddisken. 54 00:02:02,110 --> 00:02:04,210 Vi har kun et fast beløb RAM, eller computer hukommelse. 55 00:02:04,210 --> 00:02:06,251 Og hvis du kun har en fast beløb på noget, 56 00:02:06,251 --> 00:02:09,611 sikkert kan du faktisk ikke tælle op til uendelig eller et nummer, du ønsker. 57 00:02:09,611 --> 00:02:11,610 Du, slags, er nødt til at vælge og vrage, hvad rækkevidde 58 00:02:11,610 --> 00:02:13,220 af værdier, du kommer til at understøtte. 59 00:02:13,220 --> 00:02:18,100 >> Og så for eksempel en uge eller to siden, da vi talte om ASCII, 60 00:02:18,100 --> 00:02:21,610 og vi talte omkring 8 bit, eller en byte, så at sige, 61 00:02:21,610 --> 00:02:26,360 det største antal vi kunne repræsentere med 8 bit var, hvad? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 Og vi kan repræsentere 256 samlede værdier men ikke hvis vi bruger en af ​​dem 64 00:02:31,850 --> 00:02:34,190 på 0-- Nå, men hvis vi tilbringe en af ​​dem på 0, 65 00:02:34,190 --> 00:02:36,830 derefter det største antal er naturligvis, 255. 66 00:02:36,830 --> 00:02:39,410 >> Så det viser sig, at det er tilfældet også i denne forbindelse. 67 00:02:39,410 --> 00:02:42,350 Vi begyndte at tale, sidste gang, om flydende tal, som 68 00:02:42,350 --> 00:02:44,640 er forskellige fra heltal i at de har et komma 69 00:02:44,640 --> 00:02:47,056 og forhåbentlig nogle numre Efter dette, men de er for. 70 00:02:47,056 --> 00:02:51,730 En computer er kun typisk går at anvende 32 bit, 64 bit måske 71 00:02:51,730 --> 00:02:53,497 at repræsentere en floating point-værdi. 72 00:02:53,497 --> 00:02:56,080 Så selv om vi er vokset op lære matematik og vide 73 00:02:56,080 --> 00:02:58,750 at du absolut kan have et uendeligt antal numre 74 00:02:58,750 --> 00:03:01,650 efter kommaet, ikke hvis du har begrænset hukommelse. 75 00:03:01,650 --> 00:03:03,930 Du, slags, nødt til at runde, eller vælge og vrage hvilke 76 00:03:03,930 --> 00:03:05,346 numre, du kommer til at repræsentere. 77 00:03:05,346 --> 00:03:08,710 Og så du kan tænke på, i en vis forstand, dette er computerens nærmeste 78 00:03:08,710 --> 00:03:14,050 tilnærmelse til værdien 1/10, at det kan få, med kun 32 eller deromkring bits. 79 00:03:14,050 --> 00:03:15,300 Og det er ikke kun 1/10. 80 00:03:15,300 --> 00:03:19,820 >> For eksempel, hvis jeg ændre dette til 1/3, hvilket vi mener er endnu enklere. 81 00:03:19,820 --> 00:03:21,300 Så 1 divideret med 3. 82 00:03:21,300 --> 00:03:22,355 Lad mig gemme filen. 83 00:03:22,355 --> 00:03:24,680 Lad mig gå videre og kompilere den. 84 00:03:24,680 --> 00:03:25,820 Og lad mig igen køre den. 85 00:03:25,820 --> 00:03:30,000 Også her tilsyneladende, 1/3 ikke 0,3 og derefter et uendeligt antal 3s 86 00:03:30,000 --> 00:03:30,770 derefter. 87 00:03:30,770 --> 00:03:32,540 Du har denne unøjagtighed i slutningen. 88 00:03:32,540 --> 00:03:35,544 Så vi mennesker er korrekte, og hvad du har lært er, i virkeligheden, er korrekt, 89 00:03:35,544 --> 00:03:37,460 men vi ramlede op mod nogle begrænsninger. 90 00:03:37,460 --> 00:03:39,420 >> Og hvad jeg troede vi ville gøre i dag, er at begynde 91 00:03:39,420 --> 00:03:42,190 ved at se på, helt ærligt, det tragiske konsekvenser af denne 92 00:03:42,190 --> 00:03:45,490 Nogle gange, når menneskeheden ikke helt gennemføre 93 00:03:45,490 --> 00:03:48,460 for denne virkelighed og disse begrænsninger. 94 00:03:48,460 --> 00:03:52,360 Og vi vil se en række vignetter fra History Channel, der tager 95 00:03:52,360 --> 00:03:53,950 et kig på hvordan det er gået galt. 96 00:03:53,950 --> 00:03:56,340 Det er omkring 8 minutter lang, og vi vil komme tilbage efter dette 97 00:03:56,340 --> 00:03:59,439 og tage et kig på, præcis hvad der ellers kan gå galt. 98 00:03:59,439 --> 00:04:00,605 Hvis vi kunne dæmpe lights-- 99 00:04:00,605 --> 00:04:02,350 >> [VIDEO PLAYBACK] 100 00:04:02,350 --> 00:04:06,310 >> -Computere, Har vi alle kommer til at acceptere de ofte frustrerende problemer, 101 00:04:06,310 --> 00:04:07,750 gå med dem. 102 00:04:07,750 --> 00:04:11,370 Bugs, vira, og software glitches er små priser 103 00:04:11,370 --> 00:04:13,230 at betale for bekvemmelighed. 104 00:04:13,230 --> 00:04:17,519 Men i high-tech og high-speed militære og rumprogram applikationer, 105 00:04:17,519 --> 00:04:22,130 den mindste problem kan blive forstørret i katastrofen. 106 00:04:22,130 --> 00:04:27,750 Den 4. juni 1996 videnskabsfolk forberedt at lancere en ubemandet Ariane 5 raket. 107 00:04:27,750 --> 00:04:29,890 Det var transporterer videnskabelige satellitter designet 108 00:04:29,890 --> 00:04:33,030 præcist, hvordan det at etablere Jordens magnetfelt interagerer 109 00:04:33,030 --> 00:04:35,600 med sol vind. 110 00:04:35,600 --> 00:04:37,930 Raketten blev bygget til Den Europæiske Rumorganisation 111 00:04:37,930 --> 00:04:41,620 og løftes fra sit anlæg på kysten af ​​Fransk Guyana. 112 00:04:41,620 --> 00:04:44,924 >> -Og Cirka 30 sekunder inde flyvningen, de først 113 00:04:44,924 --> 00:04:46,340 bemærket noget gik galt. 114 00:04:46,340 --> 00:04:49,280 At dyserne blev drejelig på en måde, de burde virkelig ikke. 115 00:04:49,280 --> 00:04:53,042 Omkring 40 sekunder inde i flyvningen, klart køretøjet var i vanskeligheder, 116 00:04:53,042 --> 00:04:55,250 og det er, når de lavede beslutningen om at ødelægge det. 117 00:04:55,250 --> 00:04:58,970 En Range sikkerhedsansvarlige med enorme indvolde trykkede på knappen, 118 00:04:58,970 --> 00:05:03,940 sprængte raket, før det kunne blive en fare for den offentlige sikkerhed. 119 00:05:03,940 --> 00:05:06,600 >> -Dette Var jomfru sejlads af Ariane 5, 120 00:05:06,600 --> 00:05:09,270 og dens ødelæggelse tog sted på grund af en fejl 121 00:05:09,270 --> 00:05:10,992 indlejret i rakettens software. 122 00:05:10,992 --> 00:05:12,700 -Den Problem på Ariane var, at der 123 00:05:12,700 --> 00:05:15,370 var et nummer, der kræves 64 bits til at udtrykke, 124 00:05:15,370 --> 00:05:18,150 og han ønskede at konvertere det til et 16 bit tal. 125 00:05:18,150 --> 00:05:21,160 De antog, at antallet var aldrig vil være meget stor, 126 00:05:21,160 --> 00:05:25,020 at de fleste af disse cifre i 64 bit tal var 0'er. 127 00:05:25,020 --> 00:05:26,310 De var forkert. 128 00:05:26,310 --> 00:05:28,680 >> -Den Manglende evne til én softwareprogram til at acceptere 129 00:05:28,680 --> 00:05:32,820 den slags antal genereret af en anden var ved roden af ​​fiasko. 130 00:05:32,820 --> 00:05:37,190 Softwareudvikling var blevet en meget dyrt del af ny teknologi. 131 00:05:37,190 --> 00:05:40,760 Ariane 4 raket havde været meget succes, så meget af den software, 132 00:05:40,760 --> 00:05:43,990 skabt til det var også bruges på Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -Den Grundlæggende problem var, at Ariane 5 var hurtigere, accelereret hurtigere. 134 00:05:49,750 --> 00:05:53,000 Og softwaren ikke havde tegnede sig for det. 135 00:05:53,000 --> 00:05:56,330 >> -Den Ødelæggelse af raketten var en enorm økonomisk katastrofe, 136 00:05:56,330 --> 00:05:59,670 alle på grund af et minut softwarefejl. 137 00:05:59,670 --> 00:06:01,990 Men det var ikke den første time data konvertering problemer 138 00:06:01,990 --> 00:06:05,310 havde plaget moderne raket teknologi. 139 00:06:05,310 --> 00:06:08,300 >> -I 1991 med starten af den første Golfkrig, 140 00:06:08,300 --> 00:06:10,650 Patriot missil oplevede en lignende art 141 00:06:10,650 --> 00:06:12,650 af antallet konvertering problem. 142 00:06:12,650 --> 00:06:15,620 Som et resultat, 28 personer, 28 amerikanske soldater 143 00:06:15,620 --> 00:06:18,440 blev dræbt og ca. 100 andre såret, 144 00:06:18,440 --> 00:06:21,900 når Patriot, som skulle at beskytte mod indkommende Scuds, 145 00:06:21,900 --> 00:06:24,630 undladt at affyre et missil. 146 00:06:24,630 --> 00:06:29,440 >> -Når Irak invaderede Kuwait og Amerika lanceret Desert Storm i begyndelsen af ​​1991, 147 00:06:29,440 --> 00:06:33,800 Patriot missil batterier blev indsat at beskytte Saudi-Arabien og Israel 148 00:06:33,800 --> 00:06:37,000 fra irakiske Scud missilangreb. 149 00:06:37,000 --> 00:06:40,610 The Patriot er et amerikansk, medium-range overflade-til-luft-system 150 00:06:40,610 --> 00:06:43,010 fremstillet af Raytheon selskab. 151 00:06:43,010 --> 00:06:49,080 >> -Den Størrelse Patriot interceptor, selv, handler om, omkring 20 fod lang. 152 00:06:49,080 --> 00:06:51,250 Og det vejer omkring 2000 pounds. 153 00:06:51,250 --> 00:06:55,195 Og det bærer et sprænghoved af om-- Jeg synes det er nogenlunde 150 pounds. 154 00:06:55,195 --> 00:06:59,500 Og sprænghoved, selv er en højeksplosiv, 155 00:06:59,500 --> 00:07:02,570 som har fragmenter omkring det. 156 00:07:02,570 --> 00:07:06,890 Kabinettet af sprænghoved beregnet til at fungere som hagl. 157 00:07:06,890 --> 00:07:09,130 >> -De Missiler er gennemført, 4 pr container, 158 00:07:09,130 --> 00:07:12,080 og transporteres af en sættevogn. 159 00:07:12,080 --> 00:07:19,100 >> -Den Patriot anti missilsystem går tilbage mindst 20 år nu. 160 00:07:19,100 --> 00:07:22,320 Den blev oprindeligt designet som en luft forsvar missil 161 00:07:22,320 --> 00:07:24,180 at nedskyde fjendtlige fly. 162 00:07:24,180 --> 00:07:27,860 I første Golfkrig, når at krig kom sammen, 163 00:07:27,860 --> 00:07:32,745 hæren ønskede at bruge det til nedskyde Scuds, ikke flyvemaskiner. 164 00:07:32,745 --> 00:07:36,150 Den irakiske Kraft ikke var så meget af et problem, 165 00:07:36,150 --> 00:07:39,110 men hæren var bekymret Scuds. 166 00:07:39,110 --> 00:07:42,340 Og så de forsøgte at opgradere Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting En fjende missil rejser på mach fem 168 00:07:44,760 --> 00:07:47,250 skulle være udfordrende nok. 169 00:07:47,250 --> 00:07:50,000 Men når Patriot blev hastet i brug, 170 00:07:50,000 --> 00:07:54,030 hæren var ikke bekendt med en Irakisk modifikation, der gjorde 171 00:07:54,030 --> 00:07:56,840 deres Scuds næsten umuligt at ramme. 172 00:07:56,840 --> 00:08:01,020 >> -Hvad Skete, er de Scuds der kom i, var ustabil, 173 00:08:01,020 --> 00:08:02,310 de slingrende. 174 00:08:02,310 --> 00:08:05,140 Årsagen til dette, var irakerne, for 175 00:08:05,140 --> 00:08:09,450 at få 600 kilometer ud af en 300 kilometer rækkevidde missil, 176 00:08:09,450 --> 00:08:12,930 tog vægten ud af den forreste sprænghoved og gjorde sprænghoved lysere. 177 00:08:12,930 --> 00:08:17,710 Så nu, Patriot s forsøger at komme på Scud, og det meste af tiden, 178 00:08:17,710 --> 00:08:21,700 det overvældende flertal af den tid, ville det bare flyve af Scud. 179 00:08:21,700 --> 00:08:25,700 >> -Når Patriot systemoperatører indså Patriot savnede sit mål, 180 00:08:25,700 --> 00:08:29,790 de detonerede Patriot s sprænghoved, at undgå mulige tab, hvis det 181 00:08:29,790 --> 00:08:32,380 fik lov til at falde til jorden. 182 00:08:32,380 --> 00:08:36,340 >> -Det Var hvad de fleste mennesker så, de store ildkugler på himlen, 183 00:08:36,340 --> 00:08:41,289 og misforstået som aflytninger af Scud sprænghoveder. 184 00:08:41,289 --> 00:08:43,590 Selv i nat himmel, Patriots optrådte 185 00:08:43,590 --> 00:08:47,020 at være vellykket ødelægge Scuds på Dhahran, 186 00:08:47,020 --> 00:08:49,730 der kunne være nogen fejl om dens ydeevne. 187 00:08:49,730 --> 00:08:53,990 Der, Patriot radar-system mistet overblikket over et indgående Scud, 188 00:08:53,990 --> 00:08:56,650 og aldrig lanceret, på grund af en software fejl. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Det var israelerne, der først opdagede at jo længere systemet var på, 191 00:09:04,100 --> 00:09:07,510 jo større tidsforskel blev, på grund af et ur indlejret 192 00:09:07,510 --> 00:09:09,490 i systemets computer. 193 00:09:09,490 --> 00:09:12,670 >> -Om 2 uger før tragedien i Dhahran, 194 00:09:12,670 --> 00:09:15,010 israelerne rapporteret til forsvarsministeriet, 195 00:09:15,010 --> 00:09:17,940 at systemet var ved at miste tid, at efter ca. 8 timers drift, 196 00:09:17,940 --> 00:09:21,410 bemærkede de, at systemet var blive mærkbart mindre præcise. 197 00:09:21,410 --> 00:09:25,290 Forsvarsministeriet reagerede ved fortæller alle de Patriot-batterier 198 00:09:25,290 --> 00:09:28,070 ikke forlade systemerne i lang tid. 199 00:09:28,070 --> 00:09:29,960 De har aldrig sagt, hvad lang tid var. 200 00:09:29,960 --> 00:09:30,460 8 timer? 201 00:09:30,460 --> 00:09:30,960 10 timer? 202 00:09:30,960 --> 00:09:31,870 1000 timer? 203 00:09:31,870 --> 00:09:33,734 Ingen vidste. 204 00:09:33,734 --> 00:09:35,650 -Den Patriot batteri stationeret på kasernen 205 00:09:35,650 --> 00:09:40,410 på Dhahran, og dens mangelfulde interne ur, havde været på over 100 timer 206 00:09:40,410 --> 00:09:43,041 om natten den 25. februar. 207 00:09:43,041 --> 00:09:47,416 >> -Det Spores tid til en nøjagtighed på ca. 1/10 af et sekund. 208 00:09:47,416 --> 00:09:49,290 Nu 1/10 af et sekund er en interessant nummer 209 00:09:49,290 --> 00:09:52,700 fordi den ikke kan være udtrykt i binær, nøjagtigt. 210 00:09:52,700 --> 00:09:54,820 Hvilket betyder, kan det ikke udtrykkes, præcis, 211 00:09:54,820 --> 00:09:57,420 i enhver moderne digital computer. 212 00:09:57,420 --> 00:10:01,460 Det er svært at tro, men bruge dette som et eksempel. 213 00:10:01,460 --> 00:10:03,520 Lad os tage nummeret, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 ikke kan udtrykkes i decimal, nøjagtigt. 215 00:10:07,110 --> 00:10:11,490 1/3 er 0,333 stået på i uendelighed. 216 00:10:11,490 --> 00:10:15,486 Der er ingen måde at gøre det, med absolut nøjagtighed, i decimal. 217 00:10:15,486 --> 00:10:18,360 Det er præcis den samme form for problem, der skete i Patriot. 218 00:10:18,360 --> 00:10:22,510 Jo længere Systemet kørte den værre tiden fejlen blev. 219 00:10:22,510 --> 00:10:28,420 >> -Efter 100 timers drift, fejlen i tid var kun omkring 1/3 af et sekund. 220 00:10:28,420 --> 00:10:31,830 Men i form af at målrette en missil rejser på Mach 5, 221 00:10:31,830 --> 00:10:35,890 det resulterede i en tracking fejl på over 600 meter. 222 00:10:35,890 --> 00:10:38,970 Det ville være en fatal fejl for soldaterne på Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -Hvad Skete, er en Scud lancering var opdaget af satellitter tidlig varsling, 224 00:10:45,035 --> 00:10:48,930 og de nye, at Scud var kommer i deres generelle retning. 225 00:10:48,930 --> 00:10:51,170 De vidste ikke, hvor det kommer. 226 00:10:51,170 --> 00:10:53,990 >> -Det Var nu op til radaren komponent i Patriot systemet, 227 00:10:53,990 --> 00:10:58,520 forsvare Dhahran, for at lokalisere og holde styr på de indkommende fjendtlige missiler. 228 00:10:58,520 --> 00:10:59,690 >> -Den Radar var meget smart. 229 00:10:59,690 --> 00:11:01,710 Det ville faktisk spore position Scud 230 00:11:01,710 --> 00:11:04,040 og derefter forudsige, hvor det sandsynligvis ville være, 231 00:11:04,040 --> 00:11:06,140 næste gang, den radar sendte en puls ud. 232 00:11:06,140 --> 00:11:07,660 Det blev kaldt området gate. 233 00:11:07,660 --> 00:11:11,870 >> -Så, Når Patriot beslutter tid nok har 234 00:11:11,870 --> 00:11:16,280 øjeblikkeligt at gå tilbage og checke den næste placering for denne detekteret objekt, 235 00:11:16,280 --> 00:11:17,280 det går tilbage. 236 00:11:17,280 --> 00:11:21,690 Så når det gik tilbage til den forkerte sted, er det så ikke ser nogen genstand 237 00:11:21,690 --> 00:11:25,230 og det beslutter, at der ikke var nogen formål, det var en falsk detektion, 238 00:11:25,230 --> 00:11:26,650 og taber sporet. 239 00:11:26,650 --> 00:11:29,690 Det kommende Scud forsvandt fra radarskærmen, 240 00:11:29,690 --> 00:11:32,670 og sekunder senere, smækkede ind i kasernen. 241 00:11:32,670 --> 00:11:38,100 Den Scud dræbte 28 og var den sidste man fyret under Første Golfkrig. 242 00:11:38,100 --> 00:11:43,460 Tragisk, den opdaterede software ankom til Dhahran den følgende dag. 243 00:11:43,460 --> 00:11:46,150 Den software fejl havde været fast, lukning 244 00:11:46,150 --> 00:11:48,940 et kapitel i den urolige historie Patriot missil. 245 00:11:48,940 --> 00:11:50,220 >> [END AFSPIL] 246 00:11:50,220 --> 00:11:54,340 >> David J MALAN: Så vil vi tage et kig på nogle lignende begrænsninger i bare en smule. 247 00:11:54,340 --> 00:11:58,470 Men først, lad os overgangen til et par FYI er. 248 00:11:58,470 --> 00:12:01,575 Så en-- denne weekend, er der vil være super sektioner, 249 00:12:01,575 --> 00:12:04,200 som er beregnet til at erstatte regelmæssigt planlagte sektioner, som 250 00:12:04,200 --> 00:12:05,460 vil starte en uge dermed. 251 00:12:05,460 --> 00:12:08,204 Tag et kig på CS50 hjemmeside for mere information om dem. 252 00:12:08,204 --> 00:12:11,120 De vil også blive filmet og streamet leve for dem, forhindret i at deltage. 253 00:12:11,120 --> 00:12:12,980 Problem sæt 1 er på Selvfølgelig hjemmeside allerede, 254 00:12:12,980 --> 00:12:15,105 og vi vil tage et kig på at i bare en lille smule. 255 00:12:15,105 --> 00:12:18,350 Og kontortid også vil tage placere denne mandag til torsdag. 256 00:12:18,350 --> 00:12:20,960 >> Så dette var den mest kanoniske program, vi kiggede på sidste gang. 257 00:12:20,960 --> 00:12:23,590 Det er ligesom den enkleste program, du kan skrive i C, 258 00:12:23,590 --> 00:12:25,250 og selv det er lidt af en dristig påstand. 259 00:12:25,250 --> 00:12:25,750 Højre? 260 00:12:25,750 --> 00:12:28,070 Fordi der er en masse tilsyneladende kompleksitet til dette. 261 00:12:28,070 --> 00:12:30,445 Så lad os tage et hurtigt kig på hvad nogle af disse elementer 262 00:12:30,445 --> 00:12:33,080 var, og derefter forsøge at give en mental model for, hvordan 263 00:12:33,080 --> 00:12:35,710 disse enkleste af programmer arbejde, og så vil vi begynde 264 00:12:35,710 --> 00:12:38,050 ser på tingene stadig mere komplekse. 265 00:12:38,050 --> 00:12:41,280 Så denne linje her, fremhævede nu i gul, hvad gjorde vi sige, sidste gang, 266 00:12:41,280 --> 00:12:43,200 at dette gør for os? 267 00:12:43,200 --> 00:12:45,220 Hvad er formålet det tjener? 268 00:12:45,220 --> 00:12:46,984 Nogen fra længere tilbage? 269 00:12:46,984 --> 00:12:47,483 Ja. 270 00:12:47,483 --> 00:12:48,649 >> PUBLIKUM MEDLEM: [uhørligt] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 David J MALAN: Godt. 273 00:12:51,704 --> 00:12:53,537 Så det giver dig adgang på kommandoer, eller lad os 274 00:12:53,537 --> 00:12:56,750 kalder dem funktioner, at nogen anden skrev, der er erklæret, 275 00:12:56,750 --> 00:12:58,350 så at sige, i en anden fil. 276 00:12:58,350 --> 00:13:02,370 Så vi vil se præcis, hvad en .h fil er versus en .c fil, vinder. 277 00:13:02,370 --> 00:13:04,710 Men for nu, bare vide at printf, for eksempel, 278 00:13:04,710 --> 00:13:08,370 er blandt de funktioner, der har været anmeldt i en anden fil, et eller andet sted 279 00:13:08,370 --> 00:13:12,930 andet på skyen harddisk, der tillader os at få adgang til printf og bruge det 280 00:13:12,930 --> 00:13:15,240 uden at skulle genopfinde der hjul os selv. 281 00:13:15,240 --> 00:13:16,930 I mellemtiden, main. 282 00:13:16,930 --> 00:13:19,690 Hvad var analog af vigtigste, i sidste uge? 283 00:13:19,690 --> 00:13:20,190 Ja. 284 00:13:20,190 --> 00:13:21,460 >> PUBLIKUM MEDLEM: Grøn flag er klikket på. 285 00:13:21,460 --> 00:13:21,740 >> David J MALAN: Ja. 286 00:13:21,740 --> 00:13:23,490 Scratch er, når grønne flag klikkes. 287 00:13:23,490 --> 00:13:25,560 Det er ligesom brik der skydes ting ud. 288 00:13:25,560 --> 00:13:28,306 Og så ligeledes gjorde verden besluttede nogle år siden, i C, 289 00:13:28,306 --> 00:13:30,930 og en masse andre sprog, hvis du ønsker at skrive et program, 290 00:13:30,930 --> 00:13:33,410 dit første funktion har at blive kaldt, vigtigste. 291 00:13:33,410 --> 00:13:34,641 Og det skal se sådan ud. 292 00:13:34,641 --> 00:13:36,640 Men vi kommer tilbage, anden gang, til hvad, int, 293 00:13:36,640 --> 00:13:38,690 og, ugyldig, betyder i denne sammenhæng. 294 00:13:38,690 --> 00:13:42,860 For nu, de krøllede parenteser er venlige ligesom Scratch s brik form 295 00:13:42,860 --> 00:13:45,080 der indkapsler et bestemt antal linier. 296 00:13:45,080 --> 00:13:47,070 Og blandt på linjerne her, er dette en her. 297 00:13:47,070 --> 00:13:51,610 printf er en funktion, hvis formål i livet er at udskrive en formateret streng. 298 00:13:51,610 --> 00:13:55,010 Og ved formateret, mener jeg du kan tilslutte pladsholder værdier, 299 00:13:55,010 --> 00:13:58,360 og du kan angive, hvor mange decimaler punkter, hvor mange numre der skal udskrives 300 00:13:58,360 --> 00:14:00,040 efter et komma og lignende. 301 00:14:00,040 --> 00:14:05,040 Og printf naturligvis tager en eller flere argumenter eller parametre, 302 00:14:05,040 --> 00:14:06,770 også kendt, mere enkelt, som input. 303 00:14:06,770 --> 00:14:09,230 >> Så printf, som en masse funktioner, tager input. 304 00:14:09,230 --> 00:14:12,730 Og disse indgange omfavnede af de to parenteser her. 305 00:14:12,730 --> 00:14:15,180 Og inde i dem er en indgang. 306 00:14:15,180 --> 00:14:18,600 Det er en streng, som vi har kaldt det, som er blot en sekvens af tegn, 307 00:14:18,600 --> 00:14:22,310 Ligesom et ord eller en sætning, eller et helt essay selv, mellem dobbelte anførselstegn. 308 00:14:22,310 --> 00:14:25,712 Og det er, hvad der kommer til at påvirke adfærd printf fordi, selvfølgelig, 309 00:14:25,712 --> 00:14:27,170 det er bare en generisk print-funktion. 310 00:14:27,170 --> 00:14:29,600 Det kommer ikke til at vide, hvad at udskrive, medmindre du fortæller det. 311 00:14:29,600 --> 00:14:31,000 Og så nogle bagateller. 312 00:14:31,000 --> 00:14:34,056 Hvad gjorde vi siger dette underlige sekvens af symboler er? 313 00:14:34,056 --> 00:14:34,556 Ja. 314 00:14:34,556 --> 00:14:35,410 >> PUBLIKUM MEDLEM: Ny linje. 315 00:14:35,410 --> 00:14:35,990 >> David J MALAN: Ny linje. 316 00:14:35,990 --> 00:14:39,340 Så det viser sig, kan du ikke bare ramt, komme ind, når du skriver programmet. 317 00:14:39,340 --> 00:14:42,590 Generelt er compileren vil få lidt forvirret om, hvad du mener. 318 00:14:42,590 --> 00:14:45,340 I stedet er du nødt til bogstaveligt talt sige, giv mig en ny linje her. 319 00:14:45,340 --> 00:14:49,506 Og så / n er hvad vi generelt kalder en flugt karakter. 320 00:14:49,506 --> 00:14:50,870 Så n for ny linje. 321 00:14:50,870 --> 00:14:53,810 Og compileren kender at når det ser / n, 322 00:14:53,810 --> 00:14:57,420 Det bør faktisk inducere computeren, sidste ende, eller printf, i dette tilfælde, 323 00:14:57,420 --> 00:15:00,260 at udskrive en egentlig ny line, ligesom rammer, indtaste, 324 00:15:00,260 --> 00:15:01,480 tasten på tastaturet. 325 00:15:01,480 --> 00:15:05,620 Og endelig, hvad gjorde vi siger dette stykke syntaks er for? 326 00:15:05,620 --> 00:15:06,591 Hvad betyder det repræsenterer? 327 00:15:06,591 --> 00:15:07,090 Ja. 328 00:15:07,090 --> 00:15:07,490 >> PUBLIKUM MEDLEM: [uhørligt] 329 00:15:07,490 --> 00:15:08,660 >> David J MALAN: Det er bare slutningen af ​​linjen. 330 00:15:08,660 --> 00:15:09,909 Det er i slutningen af ​​sætningen. 331 00:15:09,909 --> 00:15:11,890 Og indse, at vi ikke sætte dem overalt. 332 00:15:11,890 --> 00:15:13,900 Vi har bestemt ikke sætte dem ved enderne af hver linje. 333 00:15:13,900 --> 00:15:16,680 For eksempel er der ingen på første linje, er der ingen på linjen 334 00:15:16,680 --> 00:15:18,680 med, vigtigste, er der ingen efter de krøllede parenteser, 335 00:15:18,680 --> 00:15:21,740 men du vil begynde at se og få fortrolig med, hvor det er krævet. 336 00:15:21,740 --> 00:15:26,014 Og det er næsten altid efter en funktion ringe eller en erklæring, en handling 337 00:15:26,014 --> 00:15:27,180 at du rent faktisk tager. 338 00:15:27,180 --> 00:15:29,520 >> Og ved nu, især hvis blandt de mindre behagelig, 339 00:15:29,520 --> 00:15:32,540 disse er den slags dumme ting at du vil ende med et uheld banging 340 00:15:32,540 --> 00:15:33,873 hovedet mod væggen over. 341 00:15:33,873 --> 00:15:36,107 Fordi du vil være logisk sikker på nogle problemer 342 00:15:36,107 --> 00:15:38,440 du har løst et problem for sæt, og den forbandede ting bare 343 00:15:38,440 --> 00:15:40,187 vil ikke kompilere eller endda køre. 344 00:15:40,187 --> 00:15:43,270 Og så ofte, tidligt, det vil være fordi du gik glip af en parentes, 345 00:15:43,270 --> 00:15:44,455 eller du gik glip af et semikolon. 346 00:15:44,455 --> 00:15:46,547 Og så bare være opmærksomme af disse former for ting, 347 00:15:46,547 --> 00:15:49,380 og forsøge ikke at blive frustrerede over dem, fordi meget hurtigt gør dette 348 00:15:49,380 --> 00:15:50,640 bliver gamle hat. 349 00:15:50,640 --> 00:15:53,910 Men det er meget let at få frustreret tidligt, som følge heraf. 350 00:15:53,910 --> 00:15:57,020 >> Så nu, lad os tage et kig på, hvordan denne linje er faktisk arbejder 351 00:15:57,020 --> 00:15:59,170 og derefter se på en lidt mere kompliceret. 352 00:15:59,170 --> 00:16:02,017 Så vi har herovre, det mulighed for at trække på denne skærm. 353 00:16:02,017 --> 00:16:04,100 Og lad os antage, at dette er min computerskærm, 354 00:16:04,100 --> 00:16:08,589 men jeg skriver det, hej-programmet, og jeg har ikke gennemført, printf. 355 00:16:08,589 --> 00:16:10,130 En anden har gennemført, printf. 356 00:16:10,130 --> 00:16:12,420 Hvem ønsker at hævde at har gennemført, printf? 357 00:16:12,420 --> 00:16:12,920 Hvis vi kan? 358 00:16:12,920 --> 00:16:13,830 Okay, hvad er dit navn? 359 00:16:13,830 --> 00:16:14,155 >> STUDENT 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> David J MALAN: Copal, kom op. 361 00:16:15,529 --> 00:16:16,430 Kom op. 362 00:16:16,430 --> 00:16:17,070 Okay. 363 00:16:17,070 --> 00:16:22,260 Så vi har, her, nogle navneskilte, da vi vil gøre en lille spil af denne. 364 00:16:22,260 --> 00:16:26,270 Og vi vil ringe til dig, printf. 365 00:16:26,270 --> 00:16:30,170 Og hvis du ønsker at komme herover, hvad jeg har netop tegnet på skærmen, 366 00:16:30,170 --> 00:16:32,340 det er ganske enkelt, der er mig, dette. 367 00:16:32,340 --> 00:16:35,550 >> Okay, så, hej mit navn er, printf, hvis du gerne vil sætte det på. 368 00:16:35,550 --> 00:16:35,740 Okay. 369 00:16:35,740 --> 00:16:37,360 Og hvis du kan gå stativ af computerskærmen 370 00:16:37,360 --> 00:16:39,730 som om du er den funktion, kom med denne computer-system. 371 00:16:39,730 --> 00:16:42,063 Og dit formål i livet er til rent faktisk at udskrive noget. 372 00:16:42,063 --> 00:16:44,560 Men meget gerne det program, vi lige haft på skærmen, her, 373 00:16:44,560 --> 00:16:47,060 vi nødt til at faktisk give dig nogle input. 374 00:16:47,060 --> 00:16:51,810 >> Og så, hvis mit input, her, er tilsyneladende, hvad føres til printf, 375 00:16:51,810 --> 00:16:53,730 lad os slags håne det op på denne måde. 376 00:16:53,730 --> 00:16:58,720 Jeg har tænkt mig at bogstaveligt skrive på et stykke papir, "Hej, verden," 377 00:16:58,720 --> 00:17:03,020 backslash N. Og for at være klar, hvad Jeg har netop trukket på dette stykke papir, 378 00:17:03,020 --> 00:17:04,020 ser sådan ud. 379 00:17:04,020 --> 00:17:08,730 Så når jeg kører dette program, og dette gule linje kode bliver henrettet, 380 00:17:08,730 --> 00:17:12,970 det er som om jeg, det hej programmet, jeg afleverer nogle input ud til en funktion 381 00:17:12,970 --> 00:17:13,970 at en anden skrev. 382 00:17:13,970 --> 00:17:16,595 >> Og hvis du, med din finger, kunne faktisk, med din finger, 383 00:17:16,595 --> 00:17:21,520 tegne på skærmen, uanset det er du er blevet afleveret, 384 00:17:21,520 --> 00:17:27,465 effekten, i sidste ende, er at se nøjagtigt, at der på skærmen. 385 00:17:27,465 --> 00:17:29,140 Og et lille hjørne tilfældet her. 386 00:17:29,140 --> 00:17:31,540 Og godt, bør vi ikke se den, ny linje, på dette punkt. 387 00:17:31,540 --> 00:17:33,900 Det ville være forkert for dig udtrykkeligt at trække newline. 388 00:17:33,900 --> 00:17:36,810 Men hvis vi holdt skrive ord på skærm, ville de ende under dette. 389 00:17:36,810 --> 00:17:39,560 >> Så mange tak, men stick omkring her for blot et øjeblik. 390 00:17:39,560 --> 00:17:42,860 Vi har nu brug for en anden frivillig, hvis vi kunne, 391 00:17:42,860 --> 00:17:46,830 der kommer til at nødt til at spille rollen of-- Det er kun mennesker i orkestret 392 00:17:46,830 --> 00:17:47,355 lige nu. 393 00:17:47,355 --> 00:17:47,980 Hvordan om-- OK. 394 00:17:47,980 --> 00:17:48,480 Lige her. 395 00:17:48,480 --> 00:17:49,180 Kom op. 396 00:17:49,180 --> 00:17:49,955 Hvad er dit navn? 397 00:17:49,955 --> 00:17:50,922 >> STUDENT 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 David J MALAN: Beklager? 399 00:17:51,796 --> 00:17:52,990 STUDENT 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 David J MALAN: Ethan, kom op. 401 00:17:55,320 --> 00:17:55,820 Nej? 402 00:17:55,820 --> 00:17:58,390 Fik jeg det forkert, selv efter at du sagde det to gange? 403 00:17:58,390 --> 00:17:58,890 Kom op. 404 00:17:58,890 --> 00:18:00,030 Det er svært at høre op her. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 OK. 407 00:18:05,740 --> 00:18:07,190 Og jeg er ked af, hvad er dit navn? 408 00:18:07,190 --> 00:18:07,680 >> STUDENT 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? David J MALAN: Ivay. ?] OK. 410 00:18:08,790 --> 00:18:10,430 For nu, hvis du ikke sind, er du getString. 411 00:18:10,430 --> 00:18:11,013 >> STUDENT 2: OK. 412 00:18:11,013 --> 00:18:11,797 Cool. 413 00:18:11,797 --> 00:18:14,630 David J MALAN: Så hvis du gerne vil at stå her for blot et øjeblik, 414 00:18:14,630 --> 00:18:17,100 lad os tage et kig på et lidt mere komplekst program, der 415 00:18:17,100 --> 00:18:18,670 nu har tre linjer kode. 416 00:18:18,670 --> 00:18:24,080 Så vi har en, oplyse dit navn ved hjælp printf; to, en opfordring til getString, 417 00:18:24,080 --> 00:18:28,060 efterfulgt af en opgave til en variabel kaldet, snor s, eller kaldes s; 418 00:18:28,060 --> 00:18:31,260 og derefter en anden opfordring til, printf, men denne gang med to indgange. 419 00:18:31,260 --> 00:18:33,646 >> Så vi har allerede gjort tilstand dit navn, eller rettere, vi har 420 00:18:33,646 --> 00:18:34,770 allerede gjort en printf opkald. 421 00:18:34,770 --> 00:18:38,960 Så jeg har tænkt mig at skrive, dit navn. 422 00:18:38,960 --> 00:18:42,089 Og ja, hvad jeg har tænkt mig at passere, printf, på bare et øjeblik, 423 00:18:42,089 --> 00:18:43,005 er ganske enkelt, dette. 424 00:18:43,005 --> 00:18:47,760 Så hvis du ønsker at gå videre og trække denne på skærmen, det er dit input nu. 425 00:18:47,760 --> 00:18:48,260 Okay. 426 00:18:48,260 --> 00:18:51,160 Og glem streng, vi nu har vores egen linje af kode. 427 00:18:51,160 --> 00:18:54,470 Så i, getString, vi har brug for til rent faktisk at kalde, getString. 428 00:18:54,470 --> 00:18:57,920 Så dit formål i livet er at bare gå ud i orkestret, hvis du kunne, 429 00:18:57,920 --> 00:18:58,980 og få en persons navn. 430 00:18:58,980 --> 00:19:00,860 Men lad os give dig noget at sætte det på. 431 00:19:00,860 --> 00:19:02,908 Hvis du ønsker at gå videre og få en streng, 432 00:19:02,908 --> 00:19:05,241 få en persons navn på det stykke papir, hvis du kunne. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Okay. 435 00:19:13,530 --> 00:19:15,250 Og vi vil se, i bare et øjeblik, hvis navn vi får. 436 00:19:15,250 --> 00:19:17,630 I mellemtiden, hvad jeg har tænkt mig at har klar, er et blankt stykke 437 00:19:17,630 --> 00:19:21,340 af papir, hvor, jeg skal at opbevare uanset værdi, 438 00:19:21,340 --> 00:19:25,752 er, at getString vender tilbage til mig, I, er en streng variabel kaldet, s. 439 00:19:25,752 --> 00:19:26,252 Okay. 440 00:19:26,252 --> 00:19:27,293 Så hvad har du her? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Okay. 443 00:19:28,450 --> 00:19:30,910 Så vi har Nik navn her. 444 00:19:30,910 --> 00:19:33,750 Så dette er hvad bogstaveligt er blevet returneret 445 00:19:33,750 --> 00:19:35,810 til mig, så at sige, ved getString. 446 00:19:35,810 --> 00:19:38,720 >> Jeg, nu jeg kommer til at udføre venstre side 447 00:19:38,720 --> 00:19:43,440 af dette udtryk, hvor jeg simpelthen kopiere ned, for nutidens formål, Nik. 448 00:19:43,440 --> 00:19:46,470 Så nu har jeg en variabel kaldet, s, lagring Nik navn. 449 00:19:46,470 --> 00:19:49,520 Jeg har allerede afleveret til printf, en tidligere argumentation. 450 00:19:49,520 --> 00:19:52,800 Men i vores tredje og sidste linie af kode, jeg faktisk nødt til at hånd printf 451 00:19:52,800 --> 00:19:58,500 noget lidt different-- "Hej,% s" backslash n. 452 00:19:58,500 --> 00:20:01,510 >> Og så den sidste linje jeg har tænkt mig at send-- det sidste, jeg er 453 00:20:01,510 --> 00:20:03,060 vil skrive ned nu, er dette. 454 00:20:03,060 --> 00:20:06,310 Så de to linjer kode, eller snarere den sidste linje kode, 455 00:20:06,310 --> 00:20:10,690 opfordrer til to inputs-- én, dette, og to, dette. 456 00:20:10,690 --> 00:20:13,330 Så hvis vores printf funktion kan nu tage disse som input, 457 00:20:13,330 --> 00:20:16,000 lad mig rydde skærmen for dig. 458 00:20:16,000 --> 00:20:17,250 Faktisk ikke noget, kan du gå videre. 459 00:20:17,250 --> 00:20:19,333 Vi vil lade det op, da det er på det samme program. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Vi skal se, goddag, Nik. 462 00:20:27,380 --> 00:20:27,880 Okay. 463 00:20:27,880 --> 00:20:29,670 Så det var en hel hoops til at hoppe igennem, bare 464 00:20:29,670 --> 00:20:31,620 at skrive, oplyse dit navn, og, hallo, Nik. 465 00:20:31,620 --> 00:20:37,210 Men denne simple idé om besked forbifarten, input passerer og output modtagelse, 466 00:20:37,210 --> 00:20:40,430 er præcis den model, vi vil have til selv de mest komplekse funktioner. 467 00:20:40,430 --> 00:20:41,804 Så tak så meget til jer begge. 468 00:20:41,804 --> 00:20:43,730 Vi har en dejlig stress bold her for dig. 469 00:20:43,730 --> 00:20:48,890 Og tak til vores getString og printf frivillige både. 470 00:20:48,890 --> 00:20:49,551 Tak. 471 00:20:49,551 --> 00:20:50,050 Okay. 472 00:20:50,050 --> 00:20:50,966 Tak til jer begge. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Så vi har talt om hidtil, for det meste om strenge. 475 00:21:00,430 --> 00:21:06,550 Og det viser sig, at C kan faktisk forstå et par forskellige datatyper. 476 00:21:06,550 --> 00:21:08,860 Faktisk, lad os tage et kig på disse her. 477 00:21:08,860 --> 00:21:12,490 Så C, og en masse sprog, forstå ting kaldet tegn. 478 00:21:12,490 --> 00:21:16,852 En char er generelt en enkelt byte eller otte bits. 479 00:21:16,852 --> 00:21:19,810 Og det repræsenterer et enkelt tegn, som bogstavet A eller hovedstaden 480 00:21:19,810 --> 00:21:21,990 bogstavet A eller lille bogstav En eller et udråbstegn, 481 00:21:21,990 --> 00:21:25,440 eller nogen tegn, som du kan skrive på tastaturet, og nogle gange endda mere. 482 00:21:25,440 --> 00:21:26,795 Vi tilfældigvis også at se flåd. 483 00:21:26,795 --> 00:21:31,160 En flyder er generelt en 32-bit værdi, eller fire bytes 484 00:21:31,160 --> 00:21:33,660 fordi igen, en byte er otte bits. 485 00:21:33,660 --> 00:21:36,675 >> Så en float er en flydende pointværdi, noget med en decimal. 486 00:21:36,675 --> 00:21:38,550 Og ja, det er hvad filmen talte 487 00:21:38,550 --> 00:21:42,240 om, når de talte om flydende pointværdier, nogle fast antal bit 488 00:21:42,240 --> 00:21:43,940 anvendes til at repræsentere et reelt tal. 489 00:21:43,940 --> 00:21:45,740 Men der er også ting kaldet double. 490 00:21:45,740 --> 00:21:47,860 Disse findes i Java, hvis du har taget APCS, 491 00:21:47,860 --> 00:21:51,540 og en dobbelt, som navnet heldigvis antyder, er dobbelt så stor som en float. 492 00:21:51,540 --> 00:21:54,540 Det er stadig et reelt tal, det bare har flere bit 493 00:21:54,540 --> 00:21:58,390 med til at være stadigt mere præcise, eller gemme endnu større antal. 494 00:21:58,390 --> 00:21:58,890 int er nemt. 495 00:21:58,890 --> 00:22:00,181 Vi talte om, at sidste gang. 496 00:22:00,181 --> 00:22:01,160 Det er bare et heltal. 497 00:22:01,160 --> 00:22:03,980 Og det er generelt 32 bit eller fire bytes. 498 00:22:03,980 --> 00:22:07,850 >> Og så, hvis du har, lad os nu se, 32 bits-- og vi gjorde dette i uge 0, 499 00:22:07,850 --> 00:22:10,820 nogensinde så briefly-- hvis du har 32 bit, hvad er den største 500 00:22:10,820 --> 00:22:13,580 nummer, du kan repræsentere som et heltal? 501 00:22:13,580 --> 00:22:16,080 Give eller tage? 502 00:22:16,080 --> 00:22:18,380 Det er ligesom 4 milliarder, og det er kun, hvis vi er 503 00:22:18,380 --> 00:22:20,690 repræsenterer kun positive tal. 504 00:22:20,690 --> 00:22:23,930 Hvis du har 32 bit, og du ønsker at repræsenterer negative tal samt, 505 00:22:23,930 --> 00:22:27,100 Deres sortiment er det væsentlige, negative 2 milliarder til positiv 2 mia. 506 00:22:27,100 --> 00:22:29,250 Men generelt vil vi begynde ved 0 gå op til 4 mia. 507 00:22:29,250 --> 00:22:32,400 >> Du behøver ikke at vide præcist, men Vi kan se dette, i virkeligheden, hvis jeg bare 508 00:22:32,400 --> 00:22:36,400 åbne op for en lille lommeregner, her. 509 00:22:36,400 --> 00:22:41,070 Jeg kan gøre 2 32, og det er præcis, hvor stor, 510 00:22:41,070 --> 00:22:43,190 hvor mange værdier, du kan repræsentere, med 32 bit. 511 00:22:43,190 --> 00:22:44,442 Og det er nogenlunde 4 mia. 512 00:22:44,442 --> 00:22:46,900 Så vi vil holde se, at antallet i et par forskellige steder. 513 00:22:46,900 --> 00:22:48,890 Men hvis du har brug for længere tal end det, 514 00:22:48,890 --> 00:22:51,670 det viser sig at der er noget, der hedder en lang lang. 515 00:22:51,670 --> 00:22:54,005 Og en lang lang er generelt 64 bits, som 516 00:22:54,005 --> 00:22:56,380 betyder, at det er en størrelsesorden endnu større end en int. 517 00:22:56,380 --> 00:22:59,510 >> Så kan jeg ikke engang udtale det største nummer, som du kan repræsentere, 518 00:22:59,510 --> 00:23:01,340 men det er markant større. 519 00:23:01,340 --> 00:23:05,190 Nu som en sidebemærkning, historisk, hvis en int er 32 bits, 520 00:23:05,190 --> 00:23:12,780 og en lang lang er 64 bits, hvordan stor er en lang, ikke en lang lang? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Du ville synes, det er længere end en int men måske mindre lang end en lang lang, 523 00:23:20,330 --> 00:23:21,400 men det faktisk afhænger af. 524 00:23:21,400 --> 00:23:23,400 >> Og så viser det sig, en af de frustrationer også, 525 00:23:23,400 --> 00:23:26,830 med at skrive kode på visse systemer, er, at ikke alle disse datatyper 526 00:23:26,830 --> 00:23:28,440 har forud fastsatte værdier. 527 00:23:28,440 --> 00:23:29,771 Nogle gange er det så mange bits. 528 00:23:29,771 --> 00:23:31,020 Nogle gange er det at mange bits. 529 00:23:31,020 --> 00:23:32,750 Så du faktisk nødt til at vide, nogle gange, hvilken hardware 530 00:23:32,750 --> 00:23:34,083 du kører din software på. 531 00:23:34,083 --> 00:23:36,960 Heldigvis, andre sprog og andre datatyper, der nu findes, 532 00:23:36,960 --> 00:23:38,400 tillade dig at være mere præcis. 533 00:23:38,400 --> 00:23:41,220 Nå, vi så streng, og vi så bool, også, 534 00:23:41,220 --> 00:23:43,960 men det viser sig de kommer kun med CS50 biblioteket. 535 00:23:43,960 --> 00:23:46,240 Så dem er ikke bygget i C. De stedet, 536 00:23:46,240 --> 00:23:49,340 kommer i denne fil kaldet CS50.h, at vi vil til sidst 537 00:23:49,340 --> 00:23:51,831 skrælle lagene af. 538 00:23:51,831 --> 00:23:53,830 Men for nu, de er bare yderligere datatyper. 539 00:23:53,830 --> 00:23:57,060 En bool er en sand eller falsk, og en streng er en sekvens af tegn, 540 00:23:57,060 --> 00:23:57,970 ligesom et ord. 541 00:23:57,970 --> 00:24:01,690 Nu printf, vi har set, har pladsholdere,% s er én. 542 00:24:01,690 --> 00:24:05,430 Og du kan være i stand til nu, udlede disse andre eksempler, hvordan 543 00:24:05,430 --> 00:24:07,720 du kunne have en pladsholder for forskellige datatyper. 544 00:24:07,720 --> 00:24:11,150 For eksempel tage et gæt, hvis du ønskede at udskrive en enkelt char hjælp 545 00:24:11,150 --> 00:24:15,270 printf, pladsholderen er formentlig% c. 546 00:24:15,270 --> 00:24:19,650 Og hvis du ønsker at udskrive en heltal med pladsholder,% i. 547 00:24:19,650 --> 00:24:25,150 % LLD er en lang lang decimal værdi, men lang lang, så der er knyttet til det. 548 00:24:25,150 --> 00:24:28,640 Og så% f til flydende punkt værdi eller for en dobbelt, 549 00:24:28,640 --> 00:24:31,270 så nogle gange de er genbruges i forskellige sammenhænge. 550 00:24:31,270 --> 00:24:33,350 Så vi vil se og bruge nogle af dem over tid. 551 00:24:33,350 --> 00:24:36,420 Og printf og andre funktioner også støtte andres escape-sekvenser, 552 00:24:36,420 --> 00:24:38,080 og nogle gange, de er nødvendige. 553 00:24:38,080 --> 00:24:39,770 Så backslash n er en ny linje. 554 00:24:39,770 --> 00:24:42,886 Backslash t, der nogen ønsker at tage et stik? 555 00:24:42,886 --> 00:24:43,760 PUBLIKUM MEDLEM: Tab. 556 00:24:43,760 --> 00:24:44,551 David J MALAN: Tab. 557 00:24:44,551 --> 00:24:46,810 Så hvis du rent faktisk ønsker at udskrive en fane, ikke 558 00:24:46,810 --> 00:24:49,940 et fast antal rum, men en faktisk tabulatortegn, behøver du ikke rammer din, 559 00:24:49,940 --> 00:24:53,490 fane, tasten på tastaturet, generelt, du rent faktisk gør backslash t. 560 00:24:53,490 --> 00:24:57,750 Omvendt skråstreg dobbelt tilbud, hvorfor skulle jeg nogensinde ønsker det? 561 00:24:57,750 --> 00:24:58,250 Højre? 562 00:24:58,250 --> 00:25:00,417 Hvorfor kan jeg ikke bare skrive et dobbelt citat på mit tastatur? 563 00:25:00,417 --> 00:25:02,124 Publikumsdeltager: Fordi, ellers er det 564 00:25:02,124 --> 00:25:04,830 kommer til at synes, det er enden af lide din print [? tekst. ?] 565 00:25:04,830 --> 00:25:05,420 >> David J MALAN: Præcis. 566 00:25:05,420 --> 00:25:07,211 Husk, med vores printf eksempler, når vi 567 00:25:07,211 --> 00:25:10,075 passerer til printf i input, på venstre side af denne inputstrengen 568 00:25:10,075 --> 00:25:12,950 og til højre for denne indgang foråret, selvfølgelig, var en dobbelt citat. 569 00:25:12,950 --> 00:25:16,270 Hvis din egen indgang har en dobbelt citerer i midten af ​​denne, 570 00:25:16,270 --> 00:25:18,920 computeren måske potentielt blive forvirret med hensyn til, 571 00:25:18,920 --> 00:25:20,760 gør denne dobbelte citat hører hjemme i midten? 572 00:25:20,760 --> 00:25:22,150 Er det hører med venstre en? 573 00:25:22,150 --> 00:25:23,566 Er det hører med den rigtige? 574 00:25:23,566 --> 00:25:26,780 Og så, hvis du ønsker at gøre det super klar, du omvendt skråstreg dobbelt tilbud, 575 00:25:26,780 --> 00:25:30,480 så det er flygtet, så at sige, og det er ikke smelter sammen til noget andet. 576 00:25:30,480 --> 00:25:34,400 Og der er et par andre her, backslash r, enkelte anførselstegn, 0, 577 00:25:34,400 --> 00:25:36,510 at vi kan se over tid, så godt. 578 00:25:36,510 --> 00:25:37,760 Og nu, hvad med funktioner? 579 00:25:37,760 --> 00:25:41,630 >> Så handlinger, vi kan tage hidtil i dette sprog, C, ja, vi har set, 580 00:25:41,630 --> 00:25:44,320 printf, selvfølgelig, og alle af de andre på skærmen, 581 00:25:44,320 --> 00:25:47,140 her, at vi vil bruge til kursets første par kun uger, 582 00:25:47,140 --> 00:25:48,485 komme, når det CS50 biblioteket. 583 00:25:48,485 --> 00:25:51,850 Og de gør det meget lettere, i C, til rent faktisk at få brugerinput. 584 00:25:51,850 --> 00:25:54,200 Det viser sig, at i C, og ærligt i et par sprog, 585 00:25:54,200 --> 00:25:57,450 det er en reel smerte i nakken til at gøre noget simpelt, ligesom prompt brugeren 586 00:25:57,450 --> 00:26:01,310 til tastatur, for hans eller hendes input. 587 00:26:01,310 --> 00:26:03,240 Og så disse funktioner gør det lettere. 588 00:26:03,240 --> 00:26:05,472 >> Og det har også fejl kontrol hele vejen igennem, 589 00:26:05,472 --> 00:26:07,180 således at, når man huske på onsdag, vi 590 00:26:07,180 --> 00:26:09,740 så, prøve igen, advarsel, når jeg ikke samarbejdede, 591 00:26:09,740 --> 00:26:11,700 og jeg har skrevet et ord, i stedet for et nummer? 592 00:26:11,700 --> 00:26:15,402 Vi har gjort det tunge løft tidligt på at sikre, at brugeren samarbejder. 593 00:26:15,402 --> 00:26:17,860 Men disse er blot uddannelse hjul, vi vil i sidste ende, 594 00:26:17,860 --> 00:26:19,640 og hurtigt, take off. 595 00:26:19,640 --> 00:26:22,630 >> Så for at opsummere, så lad os tage et hurtigt kig, 596 00:26:22,630 --> 00:26:26,620 meget som vi gjorde med Scratch, på nogle kanoniske konstruktioner i C. 597 00:26:26,620 --> 00:26:28,580 Dette menes at, sortere af, være en hurtig rundvisning, 598 00:26:28,580 --> 00:26:30,990 bare så du har en reference og at du har set tingene i første omgang. 599 00:26:30,990 --> 00:26:34,100 Men så vil vi se på faktiske kodning bruge nogle af disse byggesten. 600 00:26:34,100 --> 00:26:36,710 Så meget gerne i Scratch, når vi havde udsagn kan lide, 601 00:26:36,710 --> 00:26:41,570 sige eller, vent, i C, har vi funktioner samt, ligesom printf. 602 00:26:41,570 --> 00:26:45,350 >> Hvis vi ønsker at udtrykke en tilstand i C, det ligner, i ånden, 603 00:26:45,350 --> 00:26:47,840 denne puslespilsbrik, der lignede dette i Scratch. 604 00:26:47,840 --> 00:26:49,850 Men i stedet, vi bogstavelig talt bare skrive, hvis. 605 00:26:49,850 --> 00:26:51,830 Og så, i parentes, vi sætter en betingelse, 606 00:26:51,830 --> 00:26:54,807 hvor denne betingelse er, hvad vi får ringe, igen, en boolsk udtryk. 607 00:26:54,807 --> 00:26:56,390 Og igen, det er en slags pseudokode. 608 00:26:56,390 --> 00:26:58,830 Og i virkeligheden, // er en kommentar. 609 00:26:58,830 --> 00:27:00,550 Det er bare engelske ord til mig selv. 610 00:27:00,550 --> 00:27:03,000 Men dette er den generelle struktur af et, hvis tilstand. 611 00:27:03,000 --> 00:27:05,220 Men vi vil se beton eksempler på blot et øjeblik. 612 00:27:05,220 --> 00:27:07,960 >> Hvis du ønsker at have en to-vejs gaffel i vejen, 613 00:27:07,960 --> 00:27:11,740 meget som vi gjorde med vores frivillige på Onsdag kan du have en, ellers hvis. 614 00:27:11,740 --> 00:27:16,020 Og hvis du ønsker at have en tredje og sidste betingelse, eller standard situation 615 00:27:16,020 --> 00:27:19,006 du kan have bare en anden blok, der. 616 00:27:19,006 --> 00:27:21,880 Og tilsvarende, med boolske udtryk, du kan, og, dem sammen. 617 00:27:21,880 --> 00:27:24,296 Og vi så på onsdag, at det er ikke en enkelt-tegn, 618 00:27:24,296 --> 00:27:28,220 det er to, for lavere niveau grunde, vi vil i sidste ende se og lege med. 619 00:27:28,220 --> 00:27:30,410 Eller-ing ting sammen er 2 lodrette stænger. 620 00:27:30,410 --> 00:27:32,240 På en amerikansk tastatur, dette er generelt en vigtig 621 00:27:32,240 --> 00:27:35,730 med Shift-tasten ovenfor din Enter-tasten eller tasten Return. 622 00:27:35,730 --> 00:27:38,620 >> Så er der disse ting, vi vil bruge måske en gang eller to gange. 623 00:27:38,620 --> 00:27:42,570 De er funktionelt ækvivalente med hvad du kan gøre med en, hvis ellers hvis, 624 00:27:42,570 --> 00:27:44,950 ellers hvis ellers, konstruere, men de kaldes en switch. 625 00:27:44,950 --> 00:27:48,020 De ser meget forskellige, men vi vil se i nogle af vores fordeling kode, 626 00:27:48,020 --> 00:27:51,890 for en fremtidig problem sæt, mest sandsynligt, at det er nogle gange bare et smukkere 627 00:27:51,890 --> 00:27:54,060 måde at udtrykke helhed bundt af betingelser, 628 00:27:54,060 --> 00:27:57,590 uden at have en masse krøllede parenteser og en masse parenteser og indrykning. 629 00:27:57,590 --> 00:28:01,910 Men de giver os ikke mere strøm, end vi allerede har. 630 00:28:01,910 --> 00:28:02,550 Og nu sløjfer. 631 00:28:02,550 --> 00:28:05,020 Og denne ene, vil vi se på en lidt langsommere. 632 00:28:05,020 --> 00:28:08,470 Men så vil vi begynde at bruge disse, især for dem, der allerede kender. 633 00:28:08,470 --> 00:28:13,830 Dette er den kanoniske måde, hvis utroligt Uforståelige måde at skrive en løkke i C. 634 00:28:13,830 --> 00:28:15,896 >> Nu er en løkke i Scratch var temmelig ligetil. 635 00:28:15,896 --> 00:28:17,020 Du har en, for evigt, blok. 636 00:28:17,020 --> 00:28:19,760 Du har en, gentag, blok med bare et nummer, du er nødt til at skrive i. 637 00:28:19,760 --> 00:28:22,220 Og med, for-løkke, kan du gennemføre begge disse idéer, 638 00:28:22,220 --> 00:28:23,595 men det er lidt mere teknisk. 639 00:28:23,595 --> 00:28:25,994 Men helt ærligt, det er også forholdsvis enkel. 640 00:28:25,994 --> 00:28:28,160 Når du kender rækkefølgen af operationer, du bogstaveligt talt 641 00:28:28,160 --> 00:28:30,910 er lige til at tilslutte værdier og fortælle computeren, hvad de skal gøre. 642 00:28:30,910 --> 00:28:32,800 Så her er et eksempel. 643 00:28:32,800 --> 00:28:38,040 Dette er en løkke, der helt simpelthen, tæller fra et nummer op 644 00:28:38,040 --> 00:28:40,187 gennem en anden. 645 00:28:40,187 --> 00:28:42,020 Og blot ved et blik på det, selvom du har 646 00:28:42,020 --> 00:28:44,660 nogen forudgående erfaring med dette sprog, hvilket nummer 647 00:28:44,660 --> 00:28:46,920 betyder det sandsynligvis begynde at tælle på? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 Og jeg gætte det er fordi du se, at der er en int og en i, 650 00:28:50,240 --> 00:28:51,073 som er en variabel. 651 00:28:51,073 --> 00:28:52,390 Det er initialiseret til 0. 652 00:28:52,390 --> 00:28:55,670 >> Og senere, det ligner vi passerer printf, er en værdi. 653 00:28:55,670 --> 00:28:58,000 Og i virkeligheden, jeg lavede en lille tastefejl her. 654 00:28:58,000 --> 00:28:59,850 Men der er let fast. 655 00:28:59,850 --> 00:29:02,390 Lad mig tilføje, jeg her. 656 00:29:02,390 --> 00:29:06,150 Vi har nu printf væren øjeblikkeligt at pladsholder værdi. 657 00:29:06,150 --> 00:29:08,299 Og hvad der kommer til at tælle op igennem? 658 00:29:08,299 --> 00:29:08,840 PUBLIKUM: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID J MALAN: 49. 662 00:29:10,910 --> 00:29:13,340 Så 50, ved første øjekast, synes rigtigt. 663 00:29:13,340 --> 00:29:16,990 Men at det viser sig, vil være vores betingelse, at vi holde kontrol. 664 00:29:16,990 --> 00:29:21,740 Og vi kommer til at stoppe, når Jeg er ikke længere mindre end 50. 665 00:29:21,740 --> 00:29:24,920 Så denne løkke, omvendt, bør udføre, så længe jeg er mindre end 50. 666 00:29:24,920 --> 00:29:28,891 Men så snart det bliver 50 eller 51, eller værre, bør det stoppe automatisk. 667 00:29:28,891 --> 00:29:29,390 Okay. 668 00:29:29,390 --> 00:29:31,200 >> Så hvad sker der egentlig her? 669 00:29:31,200 --> 00:29:33,160 Så dette er rækkefølgen af operationer for en løkke. 670 00:29:33,160 --> 00:29:35,440 Én, har du såkaldte initialisering. 671 00:29:35,440 --> 00:29:38,264 Denne gule fremhævet chunk af eksekveres først, 672 00:29:38,264 --> 00:29:40,930 og det har den virkning, pr Onsdag du sandsynligvis forestille sig. 673 00:29:40,930 --> 00:29:45,500 Det skaber en variabel kaldet jeg, og det butikker i denne variabel værdien 0. 674 00:29:45,500 --> 00:29:47,560 Så jeg er 0 på dette tidspunkt i historien. 675 00:29:47,560 --> 00:29:49,680 >> Den næste ting, sker i denne konstruktion, 676 00:29:49,680 --> 00:29:51,540 er, at betingelsen bliver kontrolleret. 677 00:29:51,540 --> 00:29:54,325 Så jeg tjekke med det samme, er jeg mindre end 50? 678 00:29:54,325 --> 00:29:57,700 Og selvfølgelig svaret for nu er, helt sikkert, ja. 679 00:29:57,700 --> 00:30:00,710 Ja, fordi jeg er 0, og det er helt sikkert mindre end 50. 680 00:30:00,710 --> 00:30:03,866 Så hvad sker der, er, at dette linje kode bliver henrettet. 681 00:30:03,866 --> 00:30:06,740 Og i virkeligheden, hvis der er flere linjer kode i de krøllede parenteser, 682 00:30:06,740 --> 00:30:09,020 de alle bliver henrettet den ene efter den anden. 683 00:30:09,020 --> 00:30:11,450 >> Og effekten her, er tilsyneladende, at udskrive 684 00:30:11,450 --> 00:30:15,365 antallet I, som kommer til at være 0, og derefter 1, og derefter 2. 685 00:30:15,365 --> 00:30:15,865 Men hvorfor? 686 00:30:15,865 --> 00:30:17,410 Hvorfor det bliver øges? 687 00:30:17,410 --> 00:30:20,680 Nå, den fjerde ting, sker er, at denne syntaks 688 00:30:20,680 --> 00:30:22,610 bliver henrettet, efter semikolon. 689 00:30:22,610 --> 00:30:27,506 Jeg ++ er en forkortelse måde at sige; tage værdien af ​​i, og der tilsættes 1 til det; 690 00:30:27,506 --> 00:30:30,380 og derefter den næste gang, tilføjer 1 til den; og næste gang, 691 00:30:30,380 --> 00:30:31,330 tilsættes 1 til det. 692 00:30:31,330 --> 00:30:33,640 >> Så hvis vi holde gå, hvad der kommer til at ske 693 00:30:33,640 --> 00:30:35,890 næste er jeg ikke kommer til at initialisere jeg nogensinde igen. 694 00:30:35,890 --> 00:30:38,290 Hvis jeg holdt initialisering I 0, dette eksempel 695 00:30:38,290 --> 00:30:41,110 aldrig ville ende, fordi jeg ville blive hængende ved 0. 696 00:30:41,110 --> 00:30:43,870 Men hvad der vil ske, er at betingelsen vil blive kontrolleret, 697 00:30:43,870 --> 00:30:54,280 den linje kode vil blive henrettet, det jeg vil øges, 698 00:30:54,280 --> 00:30:56,970 tilstand vil blive kontrolleret, kode vil blive udført. 699 00:30:56,970 --> 00:30:59,790 Og det holdt cykling igen, og igen og igen, 700 00:30:59,790 --> 00:31:03,340 indtil jeg ++ inducerer en værdi på 50. 701 00:31:03,340 --> 00:31:05,870 >> Betingelsen derefter siger, er 50 mindre end 50? 702 00:31:05,870 --> 00:31:09,360 Svaret er naturligvis nej, og så hele koden stopper udførelsen. 703 00:31:09,360 --> 00:31:13,020 Og hvis du har mere kode på skærmen dernede, det er hvad der sker næste. 704 00:31:13,020 --> 00:31:17,530 Det springer ud af disse krøllede parenteser og fortsætter med at udskrive mere efter det. 705 00:31:17,530 --> 00:31:20,470 >> Så en joke nu, fra Foxtrot, at vil du måske nu forstår. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 Det er altid sjovt. 708 00:31:31,560 --> 00:31:34,110 Det er ligesom de chuckles slags sive, 709 00:31:34,110 --> 00:31:38,370 og så du er klar over, bør du ikke være griner på humor som denne. 710 00:31:38,370 --> 00:31:41,160 Men der er nogle takeaway her, pædagogisk, også. 711 00:31:41,160 --> 00:31:43,577 Så det viser sig, at jeg er mangler et stykke af syntaks, 712 00:31:43,577 --> 00:31:45,410 eller Foxtrot s mangler et stykke syntaks her. 713 00:31:45,410 --> 00:31:48,076 Hvad mangler, at vi har haft i hvert andet eksempel, hidtil? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Return, er der, så det er noget andet, 716 00:31:53,390 --> 00:31:54,440 at vi vil komme tilbage til inden længe. 717 00:31:54,440 --> 00:31:55,398 Hvad mangler, selv? 718 00:31:55,398 --> 00:31:55,908 Ja. 719 00:31:55,908 --> 00:31:58,150 >> PUBLIKUM MEDLEM: Den initialisering af [uhørligt]. 720 00:31:58,150 --> 00:31:58,470 >> David J MALAN: OK. 721 00:31:58,470 --> 00:31:58,980 Så ja. 722 00:31:58,980 --> 00:32:03,210 Så faktisk, det is-- Nå, og optælling initialiseres 723 00:32:03,210 --> 00:32:05,470 op over, eller rettere, erklærede op over. 724 00:32:05,470 --> 00:32:06,960 Så dette er en anden måde at gøre det. 725 00:32:06,960 --> 00:32:08,685 Men ikke på en linje, det er gyldigt selv. 726 00:32:08,685 --> 00:32:09,310 Hvad med her? 727 00:32:09,310 --> 00:32:10,196 >> PUBLIKUM MEDLEM: Er det de krøllede parenteser? 728 00:32:10,196 --> 00:32:10,640 >> David J MALAN: Ja. 729 00:32:10,640 --> 00:32:12,080 Så de krøllede parenteser mangler. 730 00:32:12,080 --> 00:32:15,495 Men denne kode, jeg mener, at deres kredit, er faktisk, syntaktisk gyldig. 731 00:32:15,495 --> 00:32:17,610 Det viser sig, ikke gør du har brug for de krøllede parenteser 732 00:32:17,610 --> 00:32:21,691 hvis du kun har én linje kode, der du ønsker at udføre inde i sløjfen. 733 00:32:21,691 --> 00:32:24,190 Nu er vi altid, i klassen og i alle vores distributionen kode, 734 00:32:24,190 --> 00:32:26,730 omfatter de krøllede parenteser alligevel, bare for klarhedens skyld. 735 00:32:26,730 --> 00:32:29,010 Men indse, at i lærebøger og online eksempler, 736 00:32:29,010 --> 00:32:31,300 du kan meget vel se krøllet seler mangler engang. 737 00:32:31,300 --> 00:32:34,850 Og det er OK, hvis det, du har indrykket og bestemt 738 00:32:34,850 --> 00:32:38,650 er blot en enkelt linje kode, og ikke flere linjer kode, potentielt. 739 00:32:38,650 --> 00:32:39,150 Okay. 740 00:32:39,150 --> 00:32:44,500 Så relateret til spørgsmålet om unøjagtighed, er et spørgsmål om overløb, 741 00:32:44,500 --> 00:32:48,560 i den forstand, tilsvarende, behøver heltal har grænser for dem 742 00:32:48,560 --> 00:32:49,970 ligesom floating point-værdier? 743 00:32:49,970 --> 00:32:53,120 I verden en floating point værdier, kan vi kun være så præcise, 744 00:32:53,120 --> 00:32:55,710 hvorefter, undertiden dårlige ting kan ske, 745 00:32:55,710 --> 00:32:57,760 og vores programmer kan være fejlbehæftet og fejl. 746 00:32:57,760 --> 00:33:00,050 Nu selv med heltal, du kan løbe ind i problemer. 747 00:33:00,050 --> 00:33:03,820 Nu et helt tal ikke har en decimaltegnet eller tal efter det. 748 00:33:03,820 --> 00:33:07,130 Det er bare et naturligt tal, typisk. 749 00:33:07,130 --> 00:33:09,430 Så hvad der kunne gå galt med en int? 750 00:33:09,430 --> 00:33:12,210 Hvis jeg bruger en int til tæller, hvad der kunne gå galt? 751 00:33:12,210 --> 00:33:13,230 Synes meget enklere. 752 00:33:13,230 --> 00:33:13,873 Ja. 753 00:33:13,873 --> 00:33:16,240 >> PUBLIKUM MEDLEM: Hvis nummer får [uhørligt] 754 00:33:16,240 --> 00:33:17,073 >> David J MALAN: Ja. 755 00:33:17,073 --> 00:33:20,820 Hvad hvis du tæller så højt, at man kan ikke udtrykke det helt store nummer. 756 00:33:20,820 --> 00:33:21,320 Højre? 757 00:33:21,320 --> 00:33:23,910 På et tidspunkt er du nødt at overskride grænserne 758 00:33:23,910 --> 00:33:27,077 af en 32-bit værdi eller en 64-bit værdi. 759 00:33:27,077 --> 00:33:29,410 Nu igen, jeg er ikke sikker på, hvordan man udtaler en 64-bit værdi, 760 00:33:29,410 --> 00:33:32,230 men jeg ved med en 32-bit heltal, den største værdi, det kan være, 761 00:33:32,230 --> 00:33:35,490 hvis det er eneste positive værdier, er omtrent 4 mia. 762 00:33:35,490 --> 00:33:39,000 Så hvis jeg prøver at tælle til 5 milliarder, noget kommer til at ske. 763 00:33:39,000 --> 00:33:41,050 Men lad os se hvad, i virkeligheden, kan ske. 764 00:33:41,050 --> 00:33:44,570 I en verden af ​​heltal overløb, hvor man, på en måde, 765 00:33:44,570 --> 00:33:48,270 overløb af kapaciteten på et heltal, hvad der kan ske? 766 00:33:48,270 --> 00:33:51,190 >> Så her er et binært tal, Det er en tilbagevenden til 0. 767 00:33:51,190 --> 00:33:54,630 Det er alle 1 s, og pladsholdere der er kræfter på 2, 768 00:33:54,630 --> 00:33:55,980 så dette er binær. 769 00:33:55,980 --> 00:33:59,416 Så disse er 8, 1 bit på skærmen. 770 00:33:59,416 --> 00:34:01,290 Og hvis du husker eller du hurtigt gøre det math, 771 00:34:01,290 --> 00:34:06,074 hvad værdi er repræsenteret her med disse otte bits 1? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 Og selv hvis du ikke var helt sikker af matematik, kan du gøre det ud. 774 00:34:09,260 --> 00:34:10,550 Eller du kunne bare lidt fornuftens igennem det, 775 00:34:10,550 --> 00:34:12,633 vent et øjeblik, hvis jeg svarende til en 8 bit værdi, 776 00:34:12,633 --> 00:34:17,750 og jeg har fået 256 mulige værdier, men hvoraf den første er 0, 777 00:34:17,750 --> 00:34:19,909 Jeg ved bare, at det største kommer til at være 255, 778 00:34:19,909 --> 00:34:21,510 og det er hvad denne ene kunne være. 779 00:34:21,510 --> 00:34:26,060 >> Så formoder jeg forsøger at tilføje 1 til denne værdi. 780 00:34:26,060 --> 00:34:28,750 Hvad ville du gøre i lønklasse skole, når du tilføjer en 1, og det 781 00:34:28,750 --> 00:34:31,139 ikke rigtig passer, fordi du er nødt til at bære en? 782 00:34:31,139 --> 00:34:34,380 Hvad er dette tal går at blive, når du tilføjer 1? 783 00:34:34,380 --> 00:34:37,030 Det kommer til at blive 0. 784 00:34:37,030 --> 00:34:37,530 Højre? 785 00:34:37,530 --> 00:34:41,139 For hvis du havde mere bits-- og jeg vil forsøge at, sådan, skal du skrive det ud her-- 786 00:34:41,139 --> 00:34:44,710 hvis vi havde flere bit, hvad vi kunne gøre her tilføje 1, 787 00:34:44,710 --> 00:34:47,370 og så ville vi få dette. 788 00:34:47,370 --> 00:34:48,739 Hovsa. 789 00:34:48,739 --> 00:34:52,250 Vi ville have en 1 bit hele vejen herover. 790 00:34:52,250 --> 00:34:55,530 >> Men hvis det er en begrænset værdi, er det kun 8 bit, 791 00:34:55,530 --> 00:34:57,480 og det er forudbestemt af computeren, 792 00:34:57,480 --> 00:34:59,370 at 1 er effektivt ikke er der. 793 00:34:59,370 --> 00:35:00,980 Det bare sådan falder ud fra en klippe. 794 00:35:00,980 --> 00:35:05,480 Og så hvis du tilføjer 1 til 255, hvad værdi har du tilsyneladende får? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 Og så tal uheld, og måske, utilsigtet, 797 00:35:09,700 --> 00:35:12,040 ender indpakning rundt som dette. 798 00:35:12,040 --> 00:35:14,079 Så hvad kan være konsekvenserne af dette? 799 00:35:14,079 --> 00:35:15,620 Tja, der er et par forskellige ting. 800 00:35:15,620 --> 00:35:18,751 Så en, betyder det ende med at se like 0, utilsigtet, 801 00:35:18,751 --> 00:35:20,750 men du kan slags se, selv i den virkelige verden, 802 00:35:20,750 --> 00:35:23,416 for bedre eller værre, manifestationer af denne idé om en grænse. 803 00:35:23,416 --> 00:35:26,630 For eksempel nogen af ​​jer, der nogensinde har spillet Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 Er der nogen tilfældigvis kender det maksimale antal mønter 805 00:35:28,880 --> 00:35:32,032 du kan samle i Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Tage et gæt baseret på nutidens førende spørgsmål. 807 00:35:35,640 --> 00:35:39,140 Det er større end 256 eller 255. 808 00:35:39,140 --> 00:35:40,330 Det er 4 mia. 809 00:35:40,330 --> 00:35:42,080 Så det viser sig, og der er nogle people-- 810 00:35:42,080 --> 00:35:46,080 nogle googling bekræftet sidste night-- har fået 4 milliarder guldmønter, 811 00:35:46,080 --> 00:35:47,730 eller whatnot, i Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Selvom tilsyneladende er der en måde at narre spillet, 813 00:35:49,860 --> 00:35:53,222 der er en fejl eller funktion, der lader dig bare tilfalde masser og masser af point. 814 00:35:53,222 --> 00:35:54,930 Men den største mulige værdi i overensstemmelse 815 00:35:54,930 --> 00:35:58,360 til dette skærmbillede af en person, jeg findes online, er faktisk, 4 milliarder. 816 00:35:58,360 --> 00:35:59,240 >> Nu hvorfor er det? 817 00:35:59,240 --> 00:36:03,040 Det er præcis 4 milliarder, formentlig fordi nogen har besluttet, 818 00:36:03,040 --> 00:36:05,500 der skrev dette spil, at de kunne gøre 4 milliarder, 819 00:36:05,500 --> 00:36:07,340 noget, noget, noget, ligesom værdien jeg sætte op 820 00:36:07,340 --> 00:36:10,256 med lommeregneren tidligere, men det er bare en lidt renere for mennesker 821 00:36:10,256 --> 00:36:12,610 at sige det maksimale antal af coins-- eller nitter, 822 00:36:12,610 --> 00:36:14,860 som de kalder them-- at du kan indsamle er 4 mia. 823 00:36:14,860 --> 00:36:16,290 Og ja, hvorfor er dette? 824 00:36:16,290 --> 00:36:20,310 Hvordan er LEGO spil gennemføre tælleren 825 00:36:20,310 --> 00:36:23,420 der er holde styr på antal mønter, du har? 826 00:36:23,420 --> 00:36:24,266 De bruger hvad? 827 00:36:24,266 --> 00:36:26,390 PUBLIKUM MEDLEM: Det standser tælle efter 4 mia. 828 00:36:26,390 --> 00:36:27,720 David J MALAN: Det standser tælle efter 4 milliarder, 829 00:36:27,720 --> 00:36:29,525 hvilket betyder at du kan udlede, som programmør, 830 00:36:29,525 --> 00:36:31,960 at de er formentlig anvendelse af en 32 bit heltal. 831 00:36:31,960 --> 00:36:35,380 Ligesom programmøren bogstaveligt talt bare maskinskrevet, int, i hans eller hendes kode, 832 00:36:35,380 --> 00:36:39,620 og det er den type variabel, der de bruger til at gemme en andens kode. 833 00:36:39,620 --> 00:36:42,230 Så der er andre manifestationer af disse former for grænser. 834 00:36:42,230 --> 00:36:45,063 >> Så jeg har ikke spillet denne game-- og jeg læste op på historien 835 00:36:45,063 --> 00:36:48,470 at bekræfte som much-- men i oprindelige version af Civilization, hvor 836 00:36:48,470 --> 00:36:53,240 du tilsyneladende interagerer med hver anden og kan føre krig eller fred, 837 00:36:53,240 --> 00:36:56,590 Gandhi skulle være en af de mest fredelige karakterer, som jeg 838 00:36:56,590 --> 00:36:59,280 forstår det, i det første version af Civilization. 839 00:36:59,280 --> 00:37:03,250 Og i virkeligheden, på en skala fra 1 til 10, hans aggressivitet var bare en 1. 840 00:37:03,250 --> 00:37:05,620 Så nogensinde så mildt aggressiv, tilsyneladende. 841 00:37:05,620 --> 00:37:11,590 >> Men på et tidspunkt, kan du tilsyneladende installere demokratiet i din geografi. 842 00:37:11,590 --> 00:37:14,900 Og hvis du installerer demokratiet ind i din version af spillet, 843 00:37:14,900 --> 00:37:17,320 så vil din aggression niveau går ned. 844 00:37:17,320 --> 00:37:18,460 Det er en god ting. 845 00:37:18,460 --> 00:37:20,890 Folk er mere rolige tilsyneladende, i den situation. 846 00:37:20,890 --> 00:37:23,190 Men tilsyneladende, nogen gjorde ikke en, hvis tilstand 847 00:37:23,190 --> 00:37:24,780 i den oprindelige version af koden. 848 00:37:24,780 --> 00:37:30,650 >> Så Gandhis aggression niveau gik fra positiv 1, minus 2, til negativ 1, 849 00:37:30,650 --> 00:37:33,840 men spillet ikke forstå negative tal. 850 00:37:33,840 --> 00:37:38,680 Så hvad der skete, var Gandhis aggression niveau gik fra 1 til 0, negativ 1, 851 00:37:38,680 --> 00:37:40,900 som havde den virkning, indpakning omkring at være 852 00:37:40,900 --> 00:37:44,690 den mest aggressive karakter i spillet, til en værdi af 255, 853 00:37:44,690 --> 00:37:46,630 på en skala fra 1 til 10. 854 00:37:46,630 --> 00:37:49,887 Og siden da, har der været flere inkarnationer af dette spil, 855 00:37:49,887 --> 00:37:51,720 og de har holdt det som en slags påskeæg, 856 00:37:51,720 --> 00:37:53,870 at Gandhi er tilsyneladende så frygtelig aggressiv. 857 00:37:53,870 --> 00:37:56,740 Men det var resultatet af en meget simpel programmering fejl 858 00:37:56,740 --> 00:37:58,630 ved, at meget tidlig version af spillet. 859 00:37:58,630 --> 00:38:02,860 >> Nu mere foruroligende, mere nylig, Boeing 787 860 00:38:02,860 --> 00:38:05,720 blev dokumenteret at have en bug, ikke den form for indretningen 861 00:38:05,720 --> 00:38:07,340 du især ønsker at have en fejl. 862 00:38:07,340 --> 00:38:10,130 Og symptomerne, at jeg vil læse her, fra en artikel på nettet, 863 00:38:10,130 --> 00:38:13,840 var dette en model 787 fly der er blevet drevet kontinuerligt 864 00:38:13,840 --> 00:38:18,030 til 248 dage kan tabe alt vekselstrøm, AC, 865 00:38:18,030 --> 00:38:20,850 elektrisk strøm, som følge af generatorens styreenheder, 866 00:38:20,850 --> 00:38:23,330 GCUs, samtidig gå i Fail-safe mode. 867 00:38:23,330 --> 00:38:26,790 Så det var en advarsel udstedt Når dette problem blev opdaget. 868 00:38:26,790 --> 00:38:28,750 Denne betingelse er forårsaget af en software tæller, 869 00:38:28,750 --> 00:38:32,230 internt i GCUs, så et helt tal eller en variabel, 870 00:38:32,230 --> 00:38:36,850 der vil overløb efter 248 dage af kontinuerlig effekt. 871 00:38:36,850 --> 00:38:40,350 Boeing er i færd med at udvikle en GCU softwareopgradering, der 872 00:38:40,350 --> 00:38:42,350 vil afhjælpe det usikre forhold. 873 00:38:42,350 --> 00:38:44,226 >> Så meget ligesom missil scenario, hvor 874 00:38:44,226 --> 00:38:46,850 de havde en slags variabel der blev tælle og tælle, 875 00:38:46,850 --> 00:38:50,720 og tælle, men efterhånden overfyldte grænserne for sin evne, 876 00:38:50,720 --> 00:38:54,890 ligeledes gjorde pokkers fly har en variabel overløb 877 00:38:54,890 --> 00:38:56,410 efter tid nok af at køre. 878 00:38:56,410 --> 00:38:59,240 Og så tungen-i-kinden måde at arbejde omkring dette emne 879 00:38:59,240 --> 00:39:04,400 er lige, genstart, dit fly hver 247 dage, således at hukommelsen bliver udslettet 880 00:39:04,400 --> 00:39:06,100 og den variable går tilbage til 0. 881 00:39:06,100 --> 00:39:09,410 Men indse, dette er en meget store inkarnation af software, 882 00:39:09,410 --> 00:39:14,070 men især fordi vi hører om Apples operativsystemer går ind i biler, 883 00:39:14,070 --> 00:39:18,030 og selv-kørsel biler fra Google, og hvilket som helst antal inkarnationer af software 884 00:39:18,030 --> 00:39:21,000 i vores dagligdag, tv og ure, og meget mere, 885 00:39:21,000 --> 00:39:24,950 indse var omgivet af software, som alle er skrevet af os mennesker. 886 00:39:24,950 --> 00:39:28,150 >> Og som vi alle hurtigt opdage, det er meget nemt og meget typisk 887 00:39:28,150 --> 00:39:30,250 at lave fejl, når du skriver software. 888 00:39:30,250 --> 00:39:32,745 Og hvis du ikke fange dem, nogle dårlige ting kan ske. 889 00:39:32,745 --> 00:39:35,400 Nu undertiden nogle sjove ting kan ske, 890 00:39:35,400 --> 00:39:38,280 eller i det mindste nogle gange vi ved, at forvente nogle ondskab. 891 00:39:38,280 --> 00:39:41,550 Så 0 divideret med 0, fra lønklasse skole, er generelt en dårlig ting. 892 00:39:41,550 --> 00:39:43,050 Det er udefineret. 893 00:39:43,050 --> 00:39:46,440 Og det viser out-- og lad os se om min mic kan vælge dette up-- at Apple 894 00:39:46,440 --> 00:39:47,790 havde lidt sjov med det for nylig. 895 00:39:47,790 --> 00:39:48,850 Så jeg har en iPhone her. 896 00:39:48,850 --> 00:39:54,160 Jeg har tænkt mig at tale til Siri og bede hende at give mig svaret på 0 divideret med 0. 897 00:39:54,160 --> 00:39:55,850 Hvad er 0 divideret med 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> SIRI: Forestil dig, at du har 0 cookies, og du opdele dem jævnt 900 00:40:02,230 --> 00:40:03,540 blandt 0 venner. 901 00:40:03,540 --> 00:40:05,810 Hvor mange cookies gør hver person får? 902 00:40:05,810 --> 00:40:06,350 Se? 903 00:40:06,350 --> 00:40:07,660 Det giver ikke mening. 904 00:40:07,660 --> 00:40:10,540 Og Cookie Monster er trist at der ikke er cookies. 905 00:40:10,540 --> 00:40:13,987 Og du er trist, at du har ingen venner. 906 00:40:13,987 --> 00:40:15,570 David J MALAN: Det er lidt klamt. 907 00:40:15,570 --> 00:40:17,550 Så dette er, hvad der lige sagde der. 908 00:40:17,550 --> 00:40:21,380 Det er ubestemt, er det ikke defineret, Og ja, mange programmeringssprog 909 00:40:21,380 --> 00:40:24,950 eller virkelig, compilere vil detektere, når man i et program, 910 00:40:24,950 --> 00:40:27,050 forsøger at opdele 0 med 0. 911 00:40:27,050 --> 00:40:29,830 Sjovere end dette er dog, som tilsyneladende, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 er på Twitter i disse dage. 913 00:40:31,270 --> 00:40:37,610 Og han svarede denne, med dette, som er helt bedårende. 914 00:40:37,610 --> 00:40:40,110 Men lad os tage et hurtigt kig på et par andre konstruktioner, 915 00:40:40,110 --> 00:40:43,459 og derefter sætte nogle af dette kode til brug, i gode måder. 916 00:40:43,459 --> 00:40:45,250 Så det viser sig, foruden efter sløjfer, der er 917 00:40:45,250 --> 00:40:49,174 noget, der hedder en while-løkke, der ser anderledes ud og implementeres 918 00:40:49,174 --> 00:40:51,590 lidt differently-- og vi vil til sidst se examples-- 919 00:40:51,590 --> 00:40:53,500 men i en vis forstand, er det enklere, fordi det 920 00:40:53,500 --> 00:40:56,670 ikke tillader dig at formatere og opdatere inden for grænserne af løkken. 921 00:40:56,670 --> 00:40:57,794 Du kan stadig gennemføre den. 922 00:40:57,794 --> 00:41:01,219 Så du kan gøre præcis de samme ting med en while-løkke, som med en for-løkke, 923 00:41:01,219 --> 00:41:03,260 men din syntaks, ultimately-- som vi vil i sidste ende 924 00:41:03,260 --> 00:41:04,551 see-- bliver anderledes. 925 00:41:04,551 --> 00:41:07,450 Der er endda en gør while-løkke, som er faktisk lidt anderledes, 926 00:41:07,450 --> 00:41:09,640 i, at mens en for-løkke og en while-løkke altid 927 00:41:09,640 --> 00:41:13,005 kontrollere deres tilstand først, hvis du læser denne ting top til bund, 928 00:41:13,005 --> 00:41:16,440 den slags ser ud som det kommer til at tjek det tilstand sidste, fordi det er 929 00:41:16,440 --> 00:41:17,910 virkelig den sidste linje kode. 930 00:41:17,910 --> 00:41:20,580 Og ja, der kommer til at være nyttig i visse programmer, som vi skriver, 931 00:41:20,580 --> 00:41:23,746 hvis du vil bare blindt at gøre noget og til sidst kontrollere tilstanden. 932 00:41:23,746 --> 00:41:25,205 Det er ikke nødvendigvis en dårlig ting. 933 00:41:25,205 --> 00:41:27,912 Hvis vi ønsker variabler, kan vi gøre det i et par forskellige måder. 934 00:41:27,912 --> 00:41:30,290 Og vi så i foxtrot tegneserie, en måde at gøre det, 935 00:41:30,290 --> 00:41:33,400 hvor du erklære din variabel, ligesom int counter semikolon, 936 00:41:33,400 --> 00:41:36,570 og derefter later-- måske den næste line, måske 10 linjer later-- 937 00:41:36,570 --> 00:41:37,800 du rent faktisk initialisere det. 938 00:41:37,800 --> 00:41:42,230 Så disse 2 linjer kode erklære en variabel af typen int 939 00:41:42,230 --> 00:41:44,930 og kalder det tæller, så det giver mig nok bits til at holde en int. 940 00:41:44,930 --> 00:41:48,230 Og så til sidst, det sætter værdien 0 i denne variabel. 941 00:41:48,230 --> 00:41:51,250 Det arrangerer 0'er og 1'er i en mønster, som vi kender fra sidste uge, 942 00:41:51,250 --> 00:41:53,260 repræsenterer det antal, vi kender som 0. 943 00:41:53,260 --> 00:41:56,920 Eller ærligt, kan du gøre det meget mere kortfattet, ligesom dette. 944 00:41:56,920 --> 00:41:59,390 >> Nu har vi også den evne til at kalde funktioner. 945 00:41:59,390 --> 00:42:03,070 Og i virkeligheden, her er en 2 linje program, eller et uddrag heraf, 946 00:42:03,070 --> 00:42:06,157 der tillader os at faktisk skrive noget kode, 947 00:42:06,157 --> 00:42:08,990 får en snor fra user-- meget ligesom vores frivillige et øjeblik ago-- 948 00:42:08,990 --> 00:42:11,320 lagring af resultatet i en variabel kaldet navn, 949 00:42:11,320 --> 00:42:15,470 og then-- meget gerne med vores frivillige med printf-- udskriver disse værdier 950 00:42:15,470 --> 00:42:19,180 ved at passere i to argumenter, den streng, efterfulgt af variable 951 00:42:19,180 --> 00:42:20,781 kaldes, navn, selv. 952 00:42:20,781 --> 00:42:23,155 Så lad os tage et kig, før vi kommer tilbage til Mario der, 953 00:42:23,155 --> 00:42:26,010 på et par nu, eksempler på dette. 954 00:42:26,010 --> 00:42:30,537 >> Jeg har tænkt mig at gå videre og åbne op, lad os sige, funktion-0.c. 955 00:42:30,537 --> 00:42:33,120 Og som altid, denne kode er tilgængelig på kursets hjemmeside, 956 00:42:33,120 --> 00:42:35,660 så du kan spille sammen på hjem og se på det senere. 957 00:42:35,660 --> 00:42:40,400 Men her er programmet i det essens, fra linje 17 til 22. 958 00:42:40,400 --> 00:42:43,270 Hovedprogrammet er hvor Programmet vil altid starte. 959 00:42:43,270 --> 00:42:46,980 Dette program, tilsyneladende, går at udskrive dit navn, kolon. 960 00:42:46,980 --> 00:42:50,320 Det er derefter vil kalde getString, ligesom vi gjorde med vores frivillige. 961 00:42:50,320 --> 00:42:53,365 Og derefter, det er interessant, det kommer til at kalde PrintName. 962 00:42:53,365 --> 00:42:56,490 Det viser sig, al denne tid, der synes at være en funktion kaldet PrintName. 963 00:42:56,490 --> 00:42:57,614 Der udskriver en persons navn. 964 00:42:57,614 --> 00:43:01,210 Vi behøvede ikke at bruge printf fra Gårsdagens, er der PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Men det er misvisende fordi PrintName ikke 966 00:43:03,500 --> 00:43:06,760 komme med C. folk ikke opfinde det nogle 40 eller 50 år siden, 967 00:43:06,760 --> 00:43:07,990 Jeg gjorde, i stedet for. 968 00:43:07,990 --> 00:43:10,330 Og i virkeligheden, hvis jeg ruller yderligere ned, varsel 969 00:43:10,330 --> 00:43:14,200 hvordan jeg kan skrive min egen funktioner i C. Vi vil i sidste ende 970 00:43:14,200 --> 00:43:16,319 forklare, hvorfor vi bliver ved at sige, ugyldig, i et par steder, 971 00:43:16,319 --> 00:43:18,110 men for i dag, lad os bare se på navnet. 972 00:43:18,110 --> 00:43:20,905 >> På linie 24, hvis du vil oprette din egen funktion, 973 00:43:20,905 --> 00:43:22,780 du bogstaveligt talt skriver funktionens navn. 974 00:43:22,780 --> 00:43:24,340 Jeg valgte PrintName. 975 00:43:24,340 --> 00:43:26,159 I parentes, du derefter angive, hvilke former 976 00:43:26,159 --> 00:43:28,450 af input, og hvor mange du ønsker, at denne funktion til at tage. 977 00:43:28,450 --> 00:43:31,906 I dette tilfælde, jeg ønsker at tage 1 variabel kaldet, navn, 978 00:43:31,906 --> 00:43:34,030 og det kommer til at være af type, snor, så det kommer 979 00:43:34,030 --> 00:43:35,780 at være nogle sekvens af tegn. 980 00:43:35,780 --> 00:43:39,170 Og så, denne program-- meget gerne i Scratch, 981 00:43:39,170 --> 00:43:42,590 du kan have brugerdefinerede puslespil pieces-- kommer til at have denne skik adfærd. 982 00:43:42,590 --> 00:43:46,760 Det kommer til at kalde printf passerer, hallo, pladsholder, 983 00:43:46,760 --> 00:43:49,110 og så det kommer til at tilslutte uanset brugeren kaldes. 984 00:43:49,110 --> 00:43:51,450 >> Så dette er et eksempel på, hvad datalog ville 985 00:43:51,450 --> 00:43:55,090 opkald abstraktion eller funktionelle nedbrydning, der er lige 986 00:43:55,090 --> 00:43:58,110 fancy måder af saying-- er, hvis du kan lide dette høje niveau idé, 987 00:43:58,110 --> 00:44:01,569 ligesom jeg vil have funktionalitet, udskriver en persons navn, absolut du 988 00:44:01,569 --> 00:44:04,360 kan bogstaveligt talt skrive printf og derefter passere i de argumenter, du ønsker, 989 00:44:04,360 --> 00:44:07,340 og programmet vil arbejde, som det har siden onsdag. 990 00:44:07,340 --> 00:44:10,510 Men du kan begynde at abstrakte væk begrebet udskrive et navn. 991 00:44:10,510 --> 00:44:13,270 Du kan give den et navn, Ligesom PrintName, og dette 992 00:44:13,270 --> 00:44:15,280 er denne idé om lagdeling fra uge 0. 993 00:44:15,280 --> 00:44:19,910 >> Fremover, jeg og du ikke behøver at vide eller pleje, hvordan PrintName er implementeret. 994 00:44:19,910 --> 00:44:22,470 Ja det bruger printf, måske det ikke, der ved, hvad bruger? 995 00:44:22,470 --> 00:44:23,410 Og hvad så? 996 00:44:23,410 --> 00:44:26,034 Nu er jeg taler heroppe, i stedet for hernede. 997 00:44:26,034 --> 00:44:28,700 Og ja, da vores programmer får mere avancerede og sofistikerede, 998 00:44:28,700 --> 00:44:32,550 vi kommer til at holde tager for givet at lavere niveau puslespilsbrikker eksisterer. 999 00:44:32,550 --> 00:44:34,780 Fordi vi skrev dem eller en anden gjorde, så 1000 00:44:34,780 --> 00:44:36,910 at vi så kan bygge oven på dem. 1001 00:44:36,910 --> 00:44:39,430 Lad os tage et kig på denne variant, fungerer én. 1002 00:44:39,430 --> 00:44:41,780 >> Så denne ene er lidt mere avanceret, men det viser sig 1003 00:44:41,780 --> 00:44:44,570 at i CS50 bibliotek, der er kun en GetInt funktion. 1004 00:44:44,570 --> 00:44:47,720 Vi troede ikke, år siden, at gennemføre en GetPositiveInt funktion. 1005 00:44:47,720 --> 00:44:50,970 Og det er lidt irriterende, fordi hvis du fyre skriver et program, hvori 1006 00:44:50,970 --> 00:44:53,325 du ønsker at få en positiv heltal fra brugeren, 1007 00:44:53,325 --> 00:44:55,010 du kan absolut bruge GetInt. 1008 00:44:55,010 --> 00:44:57,840 Og du kan absolut tjekke med tilstanden og måske en løkke 1009 00:44:57,840 --> 00:45:00,320 hvis det int er større end 0 og råbe på brugeren 1010 00:45:00,320 --> 00:45:02,699 hvis han eller hun ikke giver du et positivt tal. 1011 00:45:02,699 --> 00:45:04,740 Men lad os bygge denne bygning blokere os selv, en, 1012 00:45:04,740 --> 00:45:06,555 brugerdefinerede Scratch brik, hvis du vil. 1013 00:45:06,555 --> 00:45:08,680 Jeg har tænkt mig at have et program her som i sidste ende, jeg 1014 00:45:08,680 --> 00:45:11,780 ønsker at være i stand til at ringe GetPositiveInt, og jeg ønsker at være 1015 00:45:11,780 --> 00:45:14,200 i stand til at udskrive hvad det int er. 1016 00:45:14,200 --> 00:45:16,240 Men det er indvindes væk nu. 1017 00:45:16,240 --> 00:45:19,050 Det er bare blevet givet et højt niveau navn, der siger, hvad den gør, 1018 00:45:19,050 --> 00:45:21,780 som er vidunderligt, fordi det er meget intuitiv nu at læse. 1019 00:45:21,780 --> 00:45:24,710 Og hvis jeg ligeglad gøre hvad der er nedenunder hætten, lad mig rulle ned. 1020 00:45:24,710 --> 00:45:27,140 Og det er lidt skræmmende ved første, især 1021 00:45:27,140 --> 00:45:29,470 Hvis dette er dit første program, men lad os tage et kig. 1022 00:45:29,470 --> 00:45:32,860 >> Jeg ikke længere sige, ugyldig, fordi det viser sig funktioner, 1023 00:45:32,860 --> 00:45:34,777 meget gerne getString, kan returnere en værdi for mig. 1024 00:45:34,777 --> 00:45:36,610 De har ikke bare have at udskrive til skærmen, 1025 00:45:36,610 --> 00:45:38,410 de kan faktisk hånd mig noget tilbage. 1026 00:45:38,410 --> 00:45:41,535 Og mens før PrintName, Jeg har ikke brug for noget tilbage. 1027 00:45:41,535 --> 00:45:44,160 Jeg havde brug for den bivirkning af noget viser op på skærmen, 1028 00:45:44,160 --> 00:45:46,570 men jeg har ikke brug for et menneske at aflevere mig noget tilbage. 1029 00:45:46,570 --> 00:45:48,840 Her, med GetPositiveInt, lignende med GetInt, 1030 00:45:48,840 --> 00:45:50,640 Jeg ønsker at blive udleveret noget tilbage. 1031 00:45:50,640 --> 00:45:53,220 Så jeg siger ikke, ugyldig, på linie 23, men int, 1032 00:45:53,220 --> 00:45:55,570 som siger, denne funktion at jeg skriver, 1033 00:45:55,570 --> 00:45:58,860 kaldet GetPositiveInt kommer til at hånd mig tilbage et heltal, ikke noget, 1034 00:45:58,860 --> 00:45:59,890 ikke ugyldig. 1035 00:45:59,890 --> 00:46:03,280 >> I mellemtiden er det kommer til at tage nogen indgange, så jeg har, sådan, vendt det. 1036 00:46:03,280 --> 00:46:08,280 Jeg giver ikke GetPositiveInt nogen input, jeg vil have det til at give mig sin produktion. 1037 00:46:08,280 --> 00:46:09,800 Og hvad sker der nu? 1038 00:46:09,800 --> 00:46:11,640 Så her er hvordan jeg kan erklære en variabel. 1039 00:46:11,640 --> 00:46:15,090 Jeg har gjort det uden for løkken, af årsager, vi vil til sidst se, 1040 00:46:15,090 --> 00:46:17,700 men dette blot giver mig 32 bit kaldes, n, 1041 00:46:17,700 --> 00:46:20,952 og jeg har pre-bestemmende dem til at gemme heltal. 1042 00:46:20,952 --> 00:46:23,660 Og her er det, gøre, mens konstruktion, og det er derfor, det er nyttigt. 1043 00:46:23,660 --> 00:46:26,700 Bogstaveligt talt gør dette, mens n er mindre end 1. 1044 00:46:26,700 --> 00:46:28,030 Så lad os se hvad der sker. 1045 00:46:28,030 --> 00:46:30,760 Jeg udskrive, skal du give mig en positiv int. 1046 00:46:30,760 --> 00:46:34,300 Jeg så få en int, ved hjælp CS50 s fungere og lagres i n. 1047 00:46:34,300 --> 00:46:38,990 >> Og så, hvad linje kode sandsynligvis bliver udført næste, logisk? 1048 00:46:38,990 --> 00:46:41,890 Hvilket linjenummer? 1049 00:46:41,890 --> 00:46:42,571 Ja, så 31. 1050 00:46:42,571 --> 00:46:45,320 Du ville ikke vide dette, indtil du har fået at vide eller slags udlede det, 1051 00:46:45,320 --> 00:46:45,986 men det er sandt. 1052 00:46:45,986 --> 00:46:48,280 Det går top til bund og så holder gentage. 1053 00:46:48,280 --> 00:46:55,840 Så hvis jeg har skrevet i sige, at antallet negative 1, er n mindre end negative 1? 1054 00:46:55,840 --> 00:46:56,340 Ja. 1055 00:46:56,340 --> 00:46:58,470 Fordi negativ 1 er mindre end 1. 1056 00:46:58,470 --> 00:46:59,510 Så hvad skal der ske? 1057 00:46:59,510 --> 00:47:03,260 Jeg har tænkt mig at gøre dette mens n er mindre end 1, 1058 00:47:03,260 --> 00:47:05,760 så jeg har tænkt mig at gå tilbage til linje 28. 1059 00:47:05,760 --> 00:47:09,530 >> Og hver time-- og lad os løbe denne-- gør-funktion 1 til at udarbejde det, 1060 00:47:09,530 --> 00:47:11,340 og nu dot slash-funktion 1. 1061 00:47:11,340 --> 00:47:14,280 Hvis jeg skriver negativt 1, er det vil holde råben på mig 1062 00:47:14,280 --> 00:47:17,530 indtil jeg samarbejder, fordi hver af mine input er mindre end 1 1063 00:47:17,530 --> 00:47:20,070 og hvis det er mens mindre end 1, Jeg har tænkt mig at holde gør dette. 1064 00:47:20,070 --> 00:47:24,240 Hvis jeg endelig give det et nummer som 50, heldigvis, det siger, tak for 50. 1065 00:47:24,240 --> 00:47:24,970 Hvorfor? 1066 00:47:24,970 --> 00:47:30,640 Fordi så snart n ikke er mindre end 1, jeg holder op med at sidde fast i denne løkke, 1067 00:47:30,640 --> 00:47:33,840 og denne nye søgeord i dag, afkast, bogstaveligt gør det. 1068 00:47:33,840 --> 00:47:36,800 Så jeg har lige gennemført, i en forstand, hvad der svarer til getString, 1069 00:47:36,800 --> 00:47:40,590 hvor jeg afleverer tilbage til hvem der bruger mig, vis værdi. 1070 00:47:40,590 --> 00:47:42,820 Det behøver ikke at være en snor, det er en int. 1071 00:47:42,820 --> 00:47:44,990 Så en enkel, hurtig eksempel, men vi vil snart 1072 00:47:44,990 --> 00:47:47,930 se nogle mere sofistikerede versioner stadig. 1073 00:47:47,930 --> 00:47:53,882 Faktisk, lad os tage et kig på en numerisk én, som kaldes return.c. 1074 00:47:53,882 --> 00:47:55,590 Og denne her er faktisk lidt enklere. 1075 00:47:55,590 --> 00:47:59,010 Så dette program formål i life-- lad os kompilere og køre den, 1076 00:47:59,010 --> 00:48:03,090 så gør gengæld dot skråstreg, return-- varsel 1077 00:48:03,090 --> 00:48:05,530 programmet simpelthen terninger værdien 2. 1078 00:48:05,530 --> 00:48:08,410 Det er temmelig dumt, det er svært kode, betyder det ikke tage nogen indgange, 1079 00:48:08,410 --> 00:48:12,220 men det gør demonstrere en anden funktion, som jeg har skrevet mig selv. 1080 00:48:12,220 --> 00:48:15,760 Så her har jeg erklæret en variabel, kaldet x, af typen int, 1081 00:48:15,760 --> 00:48:17,840 lig med antallet 2, helt vilkårlig. 1082 00:48:17,840 --> 00:48:19,530 Dette er blot nogle fluffy udskrivning. 1083 00:48:19,530 --> 00:48:23,070 Den siger x er nu, sådan og sådan cubing dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 Og magien er tilsyneladende på linje 21. 1085 00:48:26,390 --> 00:48:30,120 Jeg ringer en funktion kaldes, terning, Jeg afleverer det et ark papir 1086 00:48:30,120 --> 00:48:32,890 med nummeret 2 skrevet på det, og hvilken værdi, matematisk, 1087 00:48:32,890 --> 00:48:34,860 ønsker jeg at få ud af det? 1088 00:48:34,860 --> 00:48:36,570 Ligesom en tilregnelighed check? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Højre? 1091 00:48:37,570 --> 00:48:40,160 Jeg ønsker 2 kubik tilbage, 2 til magt 3, så 8 tilbage. 1092 00:48:40,160 --> 00:48:42,570 >> Så hvor er terning gennemført? 1093 00:48:42,570 --> 00:48:44,349 Tja, lægger mærke til det implementeret hernede. 1094 00:48:44,349 --> 00:48:47,140 Og ligesom før, logisk, selvom syntaksen er sandsynligvis 1095 00:48:47,140 --> 00:48:49,320 meget nyt for mange af jer, Jeg vil have denne funktion 1096 00:48:49,320 --> 00:48:51,780 at aflevere mig tilbage et ark papir med en int på det. 1097 00:48:51,780 --> 00:48:53,990 Så jeg har en int, den navn er vilkårligt, 1098 00:48:53,990 --> 00:48:55,530 men bekvemt kaldes terning. 1099 00:48:55,530 --> 00:48:58,430 Indgangssignalet til det, er n skriv heltal, så det er 1100 00:48:58,430 --> 00:49:00,800 hvordan jeg kan passere i antallet 2 på et ark papir. 1101 00:49:00,800 --> 00:49:03,910 Og så viser det sig C understøtter matematik, så har du ikke X'er for tider, 1102 00:49:03,910 --> 00:49:06,680 du bare bruge stjerne til formering. 1103 00:49:06,680 --> 00:49:11,070 Og dette returnerer n gange n gange n, der blot er et kubik værdi. 1104 00:49:11,070 --> 00:49:12,840 >> Så hvor skal vi hen med alt dette? 1105 00:49:12,840 --> 00:49:14,570 Dette er absolut en hvirvelvind tur, være sikker på, 1106 00:49:14,570 --> 00:49:16,410 at i de super sektioner og problemet sæt 1, 1107 00:49:16,410 --> 00:49:18,368 du vil blive gik gennem alt dette så meget desto mere. 1108 00:49:18,368 --> 00:49:22,490 Og i problemer sæt 1, vil vi overgangen fra den grafiske verden af ​​Scratch 1109 00:49:22,490 --> 00:49:25,640 til noget mere kommandolinjen i C. Men vi vil hente inspiration 1110 00:49:25,640 --> 00:49:27,680 fra det her spil fra gårsdagens, hvor 1111 00:49:27,680 --> 00:49:31,591 ved hjælp af C og standard udgave af p sæt, du vil implementere Marios pyramide. 1112 00:49:31,591 --> 00:49:34,340 Og i hacker udgave af p sæt, hvis du vælger at vælge, 1113 00:49:34,340 --> 00:49:38,280 du vil gennemføre en smule mere udfordrende pyramide med to toppe. 1114 00:49:38,280 --> 00:49:41,239 Du vil også gennemføre en algoritme, en grådig algoritme. 1115 00:49:41,239 --> 00:49:43,030 Det viser sig at der er nogle interessante logik 1116 00:49:43,030 --> 00:49:45,640 bag processen med kører en bankcheck station 1117 00:49:45,640 --> 00:49:47,410 og faktisk afleverer nogen tilbage forandring. 1118 00:49:47,410 --> 00:49:50,410 Der er en algoritme, der er temmelig ligetil, at du måske endda 1119 00:49:50,410 --> 00:49:53,576 fatte intuitivt når du først læst det-- indse, at er hvad jeg har altid 1120 00:49:53,576 --> 00:49:57,110 gjort nogen tid, jeg har givet nogen noget penge tilbage-- der giver dig mulighed for altid at 1121 00:49:57,110 --> 00:50:00,679 minimere antallet af papir noter eller metal mønter 1122 00:50:00,679 --> 00:50:02,220 at du afleverer tilbage til brugeren. 1123 00:50:02,220 --> 00:50:04,610 Og dette er naturligvis, er overbevisende fordi hvis du går til CVS eller whatnot, 1124 00:50:04,610 --> 00:50:06,430 du ikke ønsker at blive udleveret en hel masse dem 1125 00:50:06,430 --> 00:50:07,596 eller en hel masse småpenge. 1126 00:50:07,596 --> 00:50:10,120 Du ønsker færrest mønter, sandsynligvis, det er muligt. 1127 00:50:10,120 --> 00:50:13,070 >> Endelig, vil du også blive udfordret at fuske i verden af ​​vand 1128 00:50:13,070 --> 00:50:17,220 og rent faktisk får en forståelse for en mapping mellem satserne for flow, 1129 00:50:17,220 --> 00:50:19,890 af lide, vand i et brusebad, hvor meget vand anvendes. 1130 00:50:19,890 --> 00:50:22,640 Og hentydning deri, vil være dette klip her, 1131 00:50:22,640 --> 00:50:24,840 som vi vil ende på i kun 60 sekunder at 1132 00:50:24,840 --> 00:50:29,070 tegner et billede af lav-flow brusehoveder. 1133 00:50:29,070 --> 00:50:30,886 >> [VIDEO PLAYBACK] 1134 00:50:30,886 --> 00:50:31,385 -Okay. 1135 00:50:31,385 --> 00:50:32,774 Jeg fik alt her. 1136 00:50:32,774 --> 00:50:35,800 Jeg fik Cyclone F Series, Hydra, JetFlow, Stockholm 1137 00:50:35,800 --> 00:50:37,660 Supersteam, du navngive det. 1138 00:50:37,660 --> 00:50:39,265 >> -Og Hvad vil du anbefale? 1139 00:50:39,265 --> 00:50:40,460 >> -Hvad leder du efter? 1140 00:50:40,460 --> 00:50:41,300 >> -Power Mand. 1141 00:50:41,300 --> 00:50:42,285 Strøm. 1142 00:50:42,285 --> 00:50:42,910 -lignende Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Det Er for stråling. 1144 00:50:44,520 --> 00:50:46,335 -Det er rigtigt. 1145 00:50:46,335 --> 00:50:48,275 -Nu Hvad er det? 1146 00:50:48,275 --> 00:50:49,704 -Det Er den Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Jeg sælger ikke, at én. 1148 00:50:50,620 --> 00:50:51,700 >> -Men Det er hvad vi ønsker. 1149 00:50:51,700 --> 00:50:52,680 Det er en commando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Nej Tro mig. 1151 00:50:53,882 --> 00:50:55,090 Det er kun brugt i cirkus. 1152 00:50:55,090 --> 00:50:56,512 Det er til elefanter. 1153 00:50:56,512 --> 00:50:59,356 >> -Jeg Betale noget. 1154 00:50:59,356 --> 00:51:01,252 >> Hvad med Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -Han Kunne ikke håndtere det. 1156 00:51:02,760 --> 00:51:04,910 Han er delikat. 1157 00:51:04,910 --> 00:51:05,750 Oh yeah. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [END AFSPIL] 1160 00:51:37,320 --> 00:51:37,700 David J MALAN: Okay. 1161 00:51:37,700 --> 00:51:38,820 Det er hvis for CS50. 1162 00:51:38,820 --> 00:51:40,050 Vi vil se dig i næste uge. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> SPEAKER 1: [? Scully?], [? Ian,?] så vidt dette outro projekt, 1165 00:51:49,029 --> 00:51:50,362 hvad har du fyre komme op med? 1166 00:51:50,362 --> 00:51:51,990 >> SPEAKER 2: Nå, har vi givet det en række tanke, 1167 00:51:51,990 --> 00:51:53,250 og vi mener, at den bedste måde at-- 1168 00:51:53,250 --> 00:51:53,660 >> SPEAKER 3: Må jeg? 1169 00:51:53,660 --> 00:51:54,326 >> SPEAKER 2: Ja. 1170 00:51:54,326 --> 00:51:56,360 Med alle midler, faktisk. 1171 00:51:56,360 --> 00:51:59,425 >> SPEAKER 3: Så tror jeg Vi kan opsummere vores idé 1172 00:51:59,425 --> 00:52:05,450 for Outros med en word-- ingenting. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> David J MALAN: Ingenting? 1175 00:52:10,409 --> 00:52:11,200 SPEAKER 3: Ingenting. 1176 00:52:11,200 --> 00:52:12,990 David J MALAN: Hvad betyder det? 1177 00:52:12,990 --> 00:52:16,260 SPEAKER 3: outros handler om ingenting. 1178 00:52:16,260 --> 00:52:21,720 SPEAKER 2: Jamen, jeg mener, i filosofi, Jeg mener, intet er altid noget. 1179 00:52:21,720 --> 00:52:24,200 SPEAKER 1: Så what's-- hvad er præmissen? 1180 00:52:24,200 --> 00:52:25,720 SPEAKER 3: Så det er ligesom livet. 1181 00:52:25,720 --> 00:52:26,680 OK. 1182 00:52:26,680 --> 00:52:28,294 Hvad lavede du i dag? 1183 00:52:28,294 --> 00:52:31,811 >> David J MALAN: Jeg stod op, havde morgenmad, og kom til at arbejde. 1184 00:52:31,811 --> 00:52:34,056 >> SPEAKER 3: Det er en outro. 1185 00:52:34,056 --> 00:52:36,806 SPEAKER 2: Men, jeg mener, bør ikke noget ske med ham på til-- 1186 00:52:36,806 --> 00:52:37,889 SPEAKER 3: Nej, nej, nej, nej. 1187 00:52:37,889 --> 00:52:40,220 Sker der intet. 1188 00:52:40,220 --> 00:52:42,910 >> SPEAKER 1: Så hvorfor er vi ser? 1189 00:52:42,910 --> 00:52:46,956 >> SPEAKER 3: Fordi det er en outro til CS50. 1190 00:52:46,956 --> 00:52:48,652 >> David J MALAN: Ikke endnu. 1191 00:52:48,652 --> 00:52:49,151