1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J MALAN: Alle rechts, dus dit is CS50. 3 00:00:13,060 --> 00:00:15,040 Dit is duidelijk een vrijdag. 4 00:00:15,040 --> 00:00:16,850 En dit is het einde van de week een. 5 00:00:16,850 --> 00:00:21,020 Dus je kan herinneren dat we waren gebleven, de laatste tijd, met een cliffhanger van soorten. 6 00:00:21,020 --> 00:00:25,020 Waarbij wij deze leugen bloot te leggen, dat er geen Ongeacht wat je hebt geleerd groeit 7 00:00:25,020 --> 00:00:31,610 up, 1 gedeeld door 10 is, in zelfs 0,1 of 0,100 of 0,10000. 8 00:00:31,610 --> 00:00:35,270 In feite, als we dit samen te stellen programma, zoals wij deden gisteren, met, 9 00:00:35,270 --> 00:00:39,770 onnauwkeurigheid te maken, en dan doen dot, slash, onnauwkeurigheid, 10 00:00:39,770 --> 00:00:43,600 we geleerd dat dit is wat is 1 gedeeld door 10 eigenlijk is. 11 00:00:43,600 --> 00:00:46,140 Dus dat is niet echt helemaal het geval. 12 00:00:46,140 --> 00:00:49,014 Maar dit doet hint op een bepaald fundamentele beperking van computers. 13 00:00:49,014 --> 00:00:50,930 En inderdaad, onder dingen die we gaan doen 14 00:00:50,930 --> 00:00:55,130 vandaag is een kijkje nemen op waarom dit heeft gebeurd, welke gevolgen dit heeft, 15 00:00:55,130 --> 00:00:58,430 hoe de mensheid heeft nagelaten deze grijpen in een aantal zeer 16 00:00:58,430 --> 00:01:00,410 ernstige situations-- het resultaat van die 17 00:01:00,410 --> 00:01:03,141 is heel tragisch geweest en expensive-- alsmede 18 00:01:03,141 --> 00:01:04,849 een kijkje nemen op de manier waarop we daadwerkelijk kan verdedigen 19 00:01:04,849 --> 00:01:06,530 tegen dit soort beperkingen. 20 00:01:06,530 --> 00:01:10,940 Zo intuïtief, misschien, Daarom wordt 1 gedeeld door 10, 21 00:01:10,940 --> 00:01:15,480 volgens mijn computer hier, niet alleen 1/10, 0,10? 22 00:01:15,480 --> 00:01:15,980 Ja. 23 00:01:15,980 --> 00:01:16,530 Wat denk jij? 24 00:01:16,530 --> 00:01:17,860 >> Toeschouwer: De Radix is ​​anders? 25 00:01:17,860 --> 00:01:18,550 >> DAVID J MALAN: De wat? 26 00:01:18,550 --> 00:01:19,730 Oh, de Radix is ​​anders? 27 00:01:19,730 --> 00:01:20,720 Dus niet helemaal. 28 00:01:20,720 --> 00:01:23,200 Het is eigenlijk meer fundamenteel voor de hardware. 29 00:01:23,200 --> 00:01:23,980 Andere gedachten? 30 00:01:23,980 --> 00:01:24,584 Ja. 31 00:01:24,584 --> 00:01:26,750 Toeschouwer: Ze vertegenwoordigen nummers anders? 32 00:01:26,750 --> 00:01:27,880 DAVID J MALAN: Dus they-- Right. 33 00:01:27,880 --> 00:01:29,338 Zij vertegenwoordigen nummers anders. 34 00:01:29,338 --> 00:01:30,700 Onnauwkeurig, blijkbaar. 35 00:01:30,700 --> 00:01:33,190 Zodat is-- Nou, anders dan wat? 36 00:01:33,190 --> 00:01:34,490 Of van wie? 37 00:01:34,490 --> 00:01:35,050 Van ons? 38 00:01:35,050 --> 00:01:35,966 Toeschouwer: Ja. 39 00:01:35,966 --> 00:01:38,930 Ze hebben niet de decimale gebruiken systeem [onverstaanbaar]. 40 00:01:38,930 --> 00:01:39,680 DAVID J MALAN: OK. 41 00:01:39,680 --> 00:01:41,560 Dus in zekere zin, dat doen ze niet Gebruik het decimale stelsel. 42 00:01:41,560 --> 00:01:43,720 Onder de motorkap, alles is inderdaad binair, 43 00:01:43,720 --> 00:01:45,510 en dat is verbonden, in feite. 44 00:01:45,510 --> 00:01:48,135 Maar het is nog eenvoudiger verklaring dan dat. 45 00:01:48,135 --> 00:01:48,635 Ja. 46 00:01:48,635 --> 00:01:49,970 >> Toeschouwer: Ze alleen hebben zoveel bits. 47 00:01:49,970 --> 00:01:52,370 Ze kunnen alleen slaan tot een zekere mate zoals bij de decimalen. 48 00:01:52,370 --> 00:01:52,780 >> DAVID J MALAN: Ja. 49 00:01:52,780 --> 00:01:54,420 Dit is wat er werkelijk krijgt bij het. 50 00:01:54,420 --> 00:01:57,180 Het blijkt dat computers Doorgaans zal altijd alleen 51 00:01:57,180 --> 00:01:59,690 Gebruik een eindige hoeveelheid informatie iets vertegenwoordigen. 52 00:01:59,690 --> 00:01:59,870 Rechts? 53 00:01:59,870 --> 00:02:02,110 Immers, we hebben alleen een vaste hoeveelheid ruimte op de harde schijf. 54 00:02:02,110 --> 00:02:04,210 We hebben maar een vast bedrag RAM of computergeheugen. 55 00:02:04,210 --> 00:02:06,251 En als je alleen maar een vast bedrag van iets, 56 00:02:06,251 --> 00:02:09,611 u kunt toch niet echt tellen tot oneindig of een nummer dat u wilt. 57 00:02:09,611 --> 00:02:11,610 U, soort, moeten kiezen wat bereik 58 00:02:11,610 --> 00:02:13,220 van de waarden die u gaat ondersteunen. 59 00:02:13,220 --> 00:02:18,100 >> Dus bijvoorbeeld een week of twee geleden, toen we spraken over ASCII, 60 00:02:18,100 --> 00:02:21,610 en we spraken over 8 bits, of een byte, zogezegd, 61 00:02:21,610 --> 00:02:26,360 het grootste aantal dat we konden vertegenwoordigen met 8 bits was wat? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 En we kunnen in totaal 256 waarden vertegenwoordigen maar niet als we besteden een van hen 64 00:02:31,850 --> 00:02:34,190 op 0-- Nou, maar als we brachten een van hen op 0, 65 00:02:34,190 --> 00:02:36,830 dan is het grootste aantal is uiteraard 255. 66 00:02:36,830 --> 00:02:39,410 >> Dus het blijkt, dat dit Voor Ook in deze context. 67 00:02:39,410 --> 00:02:42,350 We begonnen te praten, de vorige keer, over floating-point nummers, die 68 00:02:42,350 --> 00:02:44,640 verschillen van gehele getallen, in dat ze een komma 69 00:02:44,640 --> 00:02:47,056 en, hopelijk, een aantal nummers daarna, maar ze ook. 70 00:02:47,056 --> 00:02:51,730 Een computer wordt alleen meestal gaat 32 bits, misschien 64 bits gebruiken 71 00:02:51,730 --> 00:02:53,497 een floating point waarde vertegenwoordigt. 72 00:02:53,497 --> 00:02:56,080 Dus hoewel we zijn opgegroeid het leren van wiskunde en wetenschap 73 00:02:56,080 --> 00:02:58,750 die je absoluut kunt hebben een oneindig aantal nummers 74 00:02:58,750 --> 00:03:01,650 na de komma, niet als je eindige geheugen. 75 00:03:01,650 --> 00:03:03,930 U, soort, moeten afronden, of kiezen welke 76 00:03:03,930 --> 00:03:05,346 nummers je gaat vertegenwoordigen. 77 00:03:05,346 --> 00:03:08,710 En dus je kunt bedenken, in zekere zin, dit is van de computer die het dichtst 78 00:03:08,710 --> 00:03:14,050 aanpassing aan de waarde die 1/10 het kan krijgen, met slechts 32 of zo bits. 79 00:03:14,050 --> 00:03:15,300 En het is niet alleen 1/10. 80 00:03:15,300 --> 00:03:19,820 >> Bijvoorbeeld, als ik dit veranderen naar 1/3, waarvan wij denken dat is nog eenvoudiger. 81 00:03:19,820 --> 00:03:21,300 So 1 gedeeld door 3. 82 00:03:21,300 --> 00:03:22,355 Laat me het bestand op te slaan. 83 00:03:22,355 --> 00:03:24,680 Laat me gaan en opnieuw compileren. 84 00:03:24,680 --> 00:03:25,820 En laat me opnieuw te draaien. 85 00:03:25,820 --> 00:03:30,000 Ook hier, blijkbaar, 1/3 is niet 0,3 en dan een oneindig aantal van 3 86 00:03:30,000 --> 00:03:30,770 daarna. 87 00:03:30,770 --> 00:03:32,540 Je hebt deze onnauwkeurigheid op het einde. 88 00:03:32,540 --> 00:03:35,544 Dus wij mensen zijn correct, en wat u is geleerd, in feite, correct, 89 00:03:35,544 --> 00:03:37,460 maar we stoten up tegen een aantal beperkingen. 90 00:03:37,460 --> 00:03:39,420 >> En wat ik dacht we vandaag de dag zou doen, is beginnen 91 00:03:39,420 --> 00:03:42,190 door te kijken naar, eerlijk gezegd, de dramatische gevolgen van deze 92 00:03:42,190 --> 00:03:45,490 Soms, als de mensheid niet helemaal implementeren 93 00:03:45,490 --> 00:03:48,460 voor deze realiteit en deze beperkingen. 94 00:03:48,460 --> 00:03:52,360 En we zullen een reeks van vignetten te zien van de History Channel, dat duurt 95 00:03:52,360 --> 00:03:53,950 een blik op hoe de dingen zijn misgegaan. 96 00:03:53,950 --> 00:03:56,340 Het is ongeveer 8 minuten lang, en we zullen terug te komen na deze 97 00:03:56,340 --> 00:03:59,439 en neem een ​​kijkje op precies wat mis kan gaan. 98 00:03:59,439 --> 00:04:00,605 Als we de lights-- kunnen dimmen 99 00:04:00,605 --> 00:04:02,350 >> [VIDEO AFSPELEN] 100 00:04:02,350 --> 00:04:06,310 >> -Computers, We allemaal gekomen om te accepteren de vaak frustrerende problemen 101 00:04:06,310 --> 00:04:07,750 gaan met hen. 102 00:04:07,750 --> 00:04:11,370 Bugs, virussen, en software glitches zijn kleine prijzen 103 00:04:11,370 --> 00:04:13,230 betalen voor het gemak. 104 00:04:13,230 --> 00:04:17,519 Maar in de high-tech en high-speed militaire en ruimtevaartprogramma toepassingen, 105 00:04:17,519 --> 00:04:22,130 het kleinste probleem vergroot worden in een ramp. 106 00:04:22,130 --> 00:04:27,750 Op 4 juni 1996, wetenschappers voorbereid om een ​​onbemande Ariane 5-raket te lanceren. 107 00:04:27,750 --> 00:04:29,890 Het droeg wetenschappelijke satellieten ontworpen 108 00:04:29,890 --> 00:04:33,030 precies hoe het vaststellen Aardmagnetische veld wisselwerking 109 00:04:33,030 --> 00:04:35,600 met zonne-wind. 110 00:04:35,600 --> 00:04:37,930 De raket werd gebouwd voor de European Space Agency 111 00:04:37,930 --> 00:04:41,620 en getild uit de faciliteit aan de kust van Frans-Guyana. 112 00:04:41,620 --> 00:04:44,924 >> -En Ongeveer 30 seconden in de vlucht, ze eerst 113 00:04:44,924 --> 00:04:46,340 merkte er iets fout gaat. 114 00:04:46,340 --> 00:04:49,280 Dat de straalpijpen zwenkbare op een manier die ze echt niet moeten doen. 115 00:04:49,280 --> 00:04:53,042 Ongeveer 40 seconden in de vlucht, duidelijk het voertuig was in de problemen, 116 00:04:53,042 --> 00:04:55,250 en dat is toen zij de beslissing om het te vernietigen. 117 00:04:55,250 --> 00:04:58,970 Een Range Safety Officer enorme lef drukte op de knop, 118 00:04:58,970 --> 00:05:03,940 blies de raket voordat het kon uitgegroeid tot een gevaar voor de openbare veiligheid. 119 00:05:03,940 --> 00:05:06,600 >> -Dit Was het meisje reis van de Ariane 5, 120 00:05:06,600 --> 00:05:09,270 en haar vernietiging nam plaats als gevolg van een fout 121 00:05:09,270 --> 00:05:10,992 ingebed in de software van de raket. 122 00:05:10,992 --> 00:05:12,700 -Het Probleem op de Ariane was dat er 123 00:05:12,700 --> 00:05:15,370 een getal dat nodig is 64 bits uit te drukken, 124 00:05:15,370 --> 00:05:18,150 en hij wilde om te zetten naar een 16 bits getal. 125 00:05:18,150 --> 00:05:21,160 Zij verondersteld dat het aantal was nooit erg groot te zijn, 126 00:05:21,160 --> 00:05:25,020 de meeste van de cijfers het 64 bit getal waren 0 is. 127 00:05:25,020 --> 00:05:26,310 Ze hadden het mis. 128 00:05:26,310 --> 00:05:28,680 >> -De Onvermogen van een softwareprogramma accepteren 129 00:05:28,680 --> 00:05:32,820 het soort getal gegenereerd door een ander was de oorzaak van de storing. 130 00:05:32,820 --> 00:05:37,190 Software ontwikkeling was geworden van een kostbaar onderdeel van nieuwe technologie. 131 00:05:37,190 --> 00:05:40,760 De Ariane 4-raket was erg geweest succesvol, zoveel van de software 132 00:05:40,760 --> 00:05:43,990 gecreëerd was ook gebruikt op de Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -De Fundamentele probleem was dat de Ariane 5 was sneller versnelde sneller. 134 00:05:49,750 --> 00:05:53,000 En de software niet had verantwoord die. 135 00:05:53,000 --> 00:05:56,330 >> -De Vernietiging van de raket was een enorme financiële ramp, 136 00:05:56,330 --> 00:05:59,670 allemaal te wijten aan een minuut softwarefout. 137 00:05:59,670 --> 00:06:01,990 Maar dit was niet de eerste time data conversie problemen 138 00:06:01,990 --> 00:06:05,310 had moderne rakettechnologie geplaagd. 139 00:06:05,310 --> 00:06:08,300 >> -In 1991, met de start van de eerste Golfoorlog, 140 00:06:08,300 --> 00:06:10,650 de Patriot raket kende een soortgelijke 141 00:06:10,650 --> 00:06:12,650 van het aantal conversie probleem. 142 00:06:12,650 --> 00:06:15,620 Dientengevolge, 28 mensen, 28 Amerikaanse soldaten 143 00:06:15,620 --> 00:06:18,440 werden gedood en ongeveer 100 anderen gewond, 144 00:06:18,440 --> 00:06:21,900 wanneer de Patriot, die verondersteld werd om te beschermen tegen inkomende Scuds, 145 00:06:21,900 --> 00:06:24,630 niet aan een raket te vuren. 146 00:06:24,630 --> 00:06:29,440 >> -Wanneer Irak Koeweit binnenviel en Amerika gelanceerd Desert Storm in het begin van 1991, 147 00:06:29,440 --> 00:06:33,800 Patriot raketten batterijen werden ingezet te beschermen Saoedi-Arabië en Israël 148 00:06:33,800 --> 00:06:37,000 van de Iraakse Scud raketaanvallen. 149 00:06:37,000 --> 00:06:40,610 De Patriot is een Amerikaanse, middellange afstand oppervlak-to-air-systeem 150 00:06:40,610 --> 00:06:43,010 vervaardigd door Raytheon bedrijf. 151 00:06:43,010 --> 00:06:49,080 >> -De Grootte van de Patriot interceptor, zelf, is ongeveer, ongeveer 20 voet lang. 152 00:06:49,080 --> 00:06:51,250 En weegt ongeveer 2000 pond. 153 00:06:51,250 --> 00:06:55,195 En het draagt ​​een kernkop van about-- Ik denk dat het ongeveer £ 150. 154 00:06:55,195 --> 00:06:59,500 En de kernkop zelf, is een hoog explosief, 155 00:06:59,500 --> 00:07:02,570 die moet fragmenten omheen. 156 00:07:02,570 --> 00:07:06,890 De behuizing van de kernkop is ontworpen om te fungeren als hagel. 157 00:07:06,890 --> 00:07:09,130 >> -De Raketten uitgevoerd, 4 per container, 158 00:07:09,130 --> 00:07:12,080 en worden vervoerd door een oplegger. 159 00:07:12,080 --> 00:07:19,100 >> -De Patriot anti-raketsysteem teruggaat nu ten minste 20 jaar. 160 00:07:19,100 --> 00:07:22,320 Het werd oorspronkelijk ontworpen als luchtafweer raket 161 00:07:22,320 --> 00:07:24,180 neer te schieten vijandelijke vliegtuigen. 162 00:07:24,180 --> 00:07:27,860 In de Eerste Golfoorlog, wanneer die oorlog kwam, 163 00:07:27,860 --> 00:07:32,745 het leger wilde het gebruiken om neer te schieten Scuds, niet vliegtuigen. 164 00:07:32,745 --> 00:07:36,150 De Iraakse Force was niet zo veel van een probleem, 165 00:07:36,150 --> 00:07:39,110 maar het leger was bezorgd over Scuds. 166 00:07:39,110 --> 00:07:42,340 En dus ze probeerden upgrade van de Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Een vijand raket reizen op mach vijf 168 00:07:44,760 --> 00:07:47,250 zou genoeg zijn uitdagend. 169 00:07:47,250 --> 00:07:50,000 Maar toen de Patriot werd in allerijl in dienst, 170 00:07:50,000 --> 00:07:54,030 het leger was niet op de hoogte van een Iraakse wijziging die gemaakt 171 00:07:54,030 --> 00:07:56,840 hun Scuds bijna onmogelijk te raken. 172 00:07:56,840 --> 00:08:01,020 >> Wat is er gebeurd, is dat de Scuds werden in de komende, waren instabiel, 173 00:08:01,020 --> 00:08:02,310 ze werden wiebelen. 174 00:08:02,310 --> 00:08:05,140 De reden hiervoor, was de Irakezen, met het oog 175 00:08:05,140 --> 00:08:09,450 tot 600 kilometer uit een 300 kilometer afstands raket, 176 00:08:09,450 --> 00:08:12,930 nam het gewicht van de voorste kernkop en maakte de kernkop lichter. 177 00:08:12,930 --> 00:08:17,710 Dus nu, de Patriot probeert te komen het scud en meestal, 178 00:08:17,710 --> 00:08:21,700 de overgrote meerderheid van de tijd, zou het gewoon vliegen door de scud. 179 00:08:21,700 --> 00:08:25,700 >> -Als De Patriot netbeheerders realiseerde de Patriot miste zijn doel, 180 00:08:25,700 --> 00:08:29,790 ze ontploft de Patriot's kernkop, eventuele verliezen indien vermijden 181 00:08:29,790 --> 00:08:32,380 Men liet de grond vallen. 182 00:08:32,380 --> 00:08:36,340 >> -dat Was wat de meeste mensen zag, die grote vuurballen in de lucht, 183 00:08:36,340 --> 00:08:41,289 en verkeerd begrepen als onderschept van Scud kernkoppen. 184 00:08:41,289 --> 00:08:43,590 Hoewel in de nacht luchten, Patriots verschenen 185 00:08:43,590 --> 00:08:47,020 succesvol zijn vernietigen Scuds op Dhahran, 186 00:08:47,020 --> 00:08:49,730 er kon geen fout over zijn prestaties. 187 00:08:49,730 --> 00:08:53,990 Er is de Patriot's radarsysteem verloren spoor van een inkomende Scud, 188 00:08:53,990 --> 00:08:56,650 en nooit gelanceerd, wijten aan een software fout. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Het was de Israëli's die voor het eerst ontdekt dat hoe langer het systeem op, 191 00:09:04,100 --> 00:09:07,510 hoe groter de tijd discrepantie werd, als gevolg van een klok ingebed 192 00:09:07,510 --> 00:09:09,490 in de computer van het systeem. 193 00:09:09,490 --> 00:09:12,670 >> -Over 2 weken voor de tragedie in Dhahran, 194 00:09:12,670 --> 00:09:15,010 de Israëli's gemeld aan het ministerie van Defensie, 195 00:09:15,010 --> 00:09:17,940 dat het systeem de tijd verloor, dat na ongeveer 8 uur lopen, 196 00:09:17,940 --> 00:09:21,410 ze merkten dat het systeem was steeds merkbaar minder nauwkeurig. 197 00:09:21,410 --> 00:09:25,290 Het ministerie van Defensie reageerden door vertel al van de Patriot batterijen 198 00:09:25,290 --> 00:09:28,070 geen reactie met de systemen voor een lange tijd. 199 00:09:28,070 --> 00:09:29,960 Ze zeiden nooit wat een lange tijd was. 200 00:09:29,960 --> 00:09:30,460 8 uur? 201 00:09:30,460 --> 00:09:30,960 10 uur? 202 00:09:30,960 --> 00:09:31,870 1000 uur? 203 00:09:31,870 --> 00:09:33,734 Niemand wist. 204 00:09:33,734 --> 00:09:35,650 -De Batterij Patriot gestationeerd op de kazerne 205 00:09:35,650 --> 00:09:40,410 bij Dhahran, en de gebrekkige interne klok, had over meer dan 100 uur 206 00:09:40,410 --> 00:09:43,041 op de avond van 25 februari. 207 00:09:43,041 --> 00:09:47,416 >> -Het Bijgehouden tijd met een nauwkeurigheid van ongeveer 1/10 van een seconde. 208 00:09:47,416 --> 00:09:49,290 Nu 1/10 van een seconde is een interessant nummer 209 00:09:49,290 --> 00:09:52,700 omdat het niet kan worden uitgedrukt in binaire, precies. 210 00:09:52,700 --> 00:09:54,820 Wat betekent dat, het kan niet uitgedrukt precies, 211 00:09:54,820 --> 00:09:57,420 in elke moderne digitale computer. 212 00:09:57,420 --> 00:10:01,460 Het is moeilijk te geloven, maar Gebruik dit als een voorbeeld. 213 00:10:01,460 --> 00:10:03,520 Laten we het nummer 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 kan niet worden uitgedrukt decimaal, precies. 215 00:10:07,110 --> 00:10:11,490 03/01 is 0,333 gaande voor oneindigheid. 216 00:10:11,490 --> 00:10:15,486 Er is geen manier om dat te doen, met absolute nauwkeurigheid, in decimalen. 217 00:10:15,486 --> 00:10:18,360 Dat is precies dezelfde soort probleem dat gebeurde in de Patriot. 218 00:10:18,360 --> 00:10:22,510 Hoe langer het systeem liep, de slechter de fout werd. 219 00:10:22,510 --> 00:10:28,420 >> -Na 100 werkuren, de fout tijd was slechts ongeveer 1/3 van een seconde. 220 00:10:28,420 --> 00:10:31,830 Maar in termen van gericht op een raket reizen op Mach 5, 221 00:10:31,830 --> 00:10:35,890 het resulteerde in een tracking fout van meer dan 600 meter. 222 00:10:35,890 --> 00:10:38,970 Het zou een fatale fout zijn voor de soldaten in Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> Wat is er gebeurd, is een Scud lancering was gedetecteerd door vroegtijdige waarschuwing satellieten, 224 00:10:45,035 --> 00:10:48,930 en ze nieuw dat de Scud was komen in hun algemene richting. 225 00:10:48,930 --> 00:10:51,170 Ze wisten niet waar het vandaan kwam. 226 00:10:51,170 --> 00:10:53,990 >> -Het Was nu aan de radar component van het Patriot systeem, 227 00:10:53,990 --> 00:10:58,520 verdedigen Dhahran, te vinden en te houden spoor van de inkomende vijandelijke raketten. 228 00:10:58,520 --> 00:10:59,690 >> -De Radar was erg slim. 229 00:10:59,690 --> 00:11:01,710 Het zou eigenlijk bijhouden de positie van de Scud 230 00:11:01,710 --> 00:11:04,040 en dan te voorspellen waar het waarschijnlijk zou zijn, 231 00:11:04,040 --> 00:11:06,140 de volgende keer, de radar stuurde een puls uit. 232 00:11:06,140 --> 00:11:07,660 Dat werd het assortiment poort genoemd. 233 00:11:07,660 --> 00:11:11,870 >> -Dan, Zodra de Patriot beslist genoeg tijd heeft 234 00:11:11,870 --> 00:11:16,280 doorgegeven aan terug te gaan en de volgende locatie voor dit gedetecteerde object, 235 00:11:16,280 --> 00:11:17,280 het gaat terug. 236 00:11:17,280 --> 00:11:21,690 Dus als het ging terug naar de verkeerde plaats het dan ziet geen object 237 00:11:21,690 --> 00:11:25,230 en het besluit dat er geen sprake was object was een valse detectie, 238 00:11:25,230 --> 00:11:26,650 en laat de baan. 239 00:11:26,650 --> 00:11:29,690 De inkomende Scud verdwenen van het radarscherm, 240 00:11:29,690 --> 00:11:32,670 en seconden later, sloeg in de kazerne. 241 00:11:32,670 --> 00:11:38,100 De Scud gedood 28 en was de laatste één afgevuurd tijdens de Eerste Golfoorlog. 242 00:11:38,100 --> 00:11:43,460 Tragisch, de bijgewerkte software aangekomen bij Dhahran de volgende dag. 243 00:11:43,460 --> 00:11:46,150 De software fout had al vast, sluiten 244 00:11:46,150 --> 00:11:48,940 één hoofdstuk in de onrustige geschiedenis van de Patriot raket. 245 00:11:48,940 --> 00:11:50,220 >> [END AFSPELEN] 246 00:11:50,220 --> 00:11:54,340 >> DAVID J MALAN: Dus zullen we een kijkje nemen op een aantal soortgelijke beperkingen in slechts een beetje. 247 00:11:54,340 --> 00:11:58,470 Maar laten we eerst eens overgang naar een paar FYI is. 248 00:11:58,470 --> 00:12:01,575 Dus een-- dit weekend, is er zal super secties, 249 00:12:01,575 --> 00:12:04,200 die bedoeld zijn om verdringen geplande secties, die 250 00:12:04,200 --> 00:12:05,460 zal dus het opstarten van een week. 251 00:12:05,460 --> 00:12:08,204 Neem een ​​kijkje op de website van de CS50's voor meer informatie over deze. 252 00:12:08,204 --> 00:12:11,120 Ze zullen ook worden gefilmd en gestreamd leven voor diegenen die niet bij te wonen. 253 00:12:11,120 --> 00:12:12,980 Probleem set 1 is het website cursus al, 254 00:12:12,980 --> 00:12:15,105 en we zullen een kijkje nemen op dat in slechts een klein beetje. 255 00:12:15,105 --> 00:12:18,350 En kantooruren te zullen nemen Plaats dit maandag tot en met donderdag. 256 00:12:18,350 --> 00:12:20,960 >> Dus dit was de meest canonieke programma hebben we gekeken naar de vorige keer. 257 00:12:20,960 --> 00:12:23,590 Het is net als de eenvoudigste programma kunt u schrijven in C, 258 00:12:23,590 --> 00:12:25,250 en zelfs dat is een beetje een gedurfde claim. 259 00:12:25,250 --> 00:12:25,750 Rechts? 260 00:12:25,750 --> 00:12:28,070 Omdat er een heleboel schijnbare complexiteit van deze. 261 00:12:28,070 --> 00:12:30,445 Dus laten we eens een snelle blik op wat sommige van deze elementen 262 00:12:30,445 --> 00:12:33,080 waren en dan proberen om te bieden een mentaal model voor de manier waarop 263 00:12:33,080 --> 00:12:35,710 Deze eenvoudigste programma werken, en dan gaan we beginnen 264 00:12:35,710 --> 00:12:38,050 kijken naar de dingen steeds complexer. 265 00:12:38,050 --> 00:12:41,280 Dus deze lijn hier, benadrukt nu, in geel, wat hebben we zeggen, de vorige keer, 266 00:12:41,280 --> 00:12:43,200 dat dit voor ons doet? 267 00:12:43,200 --> 00:12:45,220 Wat is het doel het dient? 268 00:12:45,220 --> 00:12:46,984 Iemand van verder terug? 269 00:12:46,984 --> 00:12:47,483 Ja. 270 00:12:47,483 --> 00:12:48,649 >> Toeschouwer: [onverstaanbaar] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID J MALAN: Goed. 273 00:12:51,704 --> 00:12:53,537 Dus het geeft je toegang commando's, of laten 274 00:12:53,537 --> 00:12:56,750 noemen ze functies dat iemand anders schreef, die worden verklaard, 275 00:12:56,750 --> 00:12:58,350 als het ware in een ander bestand. 276 00:12:58,350 --> 00:13:02,370 Dus we zullen zien wat een .h bestand is ten opzichte van een .c bestand, uiteindelijk. 277 00:13:02,370 --> 00:13:04,710 Maar voor nu, weet alleen dat printf bijvoorbeeld 278 00:13:04,710 --> 00:13:08,370 is een van de functies die zijn verklaarde in een ander bestand, ergens 279 00:13:08,370 --> 00:13:12,930 anders op de harde schijf van de cloud dat stelt ons in staat om toegang te krijgen printf en gebruiken 280 00:13:12,930 --> 00:13:15,240 zonder opnieuw uitvinden dat ons wiel. 281 00:13:15,240 --> 00:13:16,930 Ondertussen, de belangrijkste. 282 00:13:16,930 --> 00:13:19,690 Wat was de analoge van de belangrijkste, de afgelopen week? 283 00:13:19,690 --> 00:13:20,190 Ja. 284 00:13:20,190 --> 00:13:21,460 >> Toeschouwer: Groene vlag wordt geklikt. 285 00:13:21,460 --> 00:13:21,740 >> DAVID J MALAN: Ja. 286 00:13:21,740 --> 00:13:23,490 Scratch, toen groene vlag geklikt. 287 00:13:23,490 --> 00:13:25,560 Het is net als het puzzelstukje dat schoppen dingen af. 288 00:13:25,560 --> 00:13:28,306 En dus evenzo deden de wereld besloot enkele jaren geleden dat er in C, 289 00:13:28,306 --> 00:13:30,930 en een bos van andere talen, als je wilt naar een programma te schrijven, 290 00:13:30,930 --> 00:13:33,410 je eerste functie moet worden genoemd, de belangrijkste. 291 00:13:33,410 --> 00:13:34,641 En het moet er zo uitzien. 292 00:13:34,641 --> 00:13:36,640 Maar we zullen terugkomen, een andere tijd, aan wat, int, 293 00:13:36,640 --> 00:13:38,690 en, leegte, betekent in die context. 294 00:13:38,690 --> 00:13:42,860 Voor nu, de accolades zijn soort gelijkaardig puzzelstukje vorm Scratch's 295 00:13:42,860 --> 00:13:45,080 dat kapselt sommige aantal lijnen. 296 00:13:45,080 --> 00:13:47,070 En onder op de lijnen hier, is dit hier. 297 00:13:47,070 --> 00:13:51,610 printf is een functie waarvan het doel in het leven is om een ​​geformatteerde reeks af te drukken. 298 00:13:51,610 --> 00:13:55,010 En door geformatteerde, ik bedoel je kunt aansluiten placeholder waarden, 299 00:13:55,010 --> 00:13:58,360 en u kunt het aantal decimalen opgeven punten, hoeveel nummers afdrukken 300 00:13:58,360 --> 00:14:00,040 na een komma en dergelijke. 301 00:14:00,040 --> 00:14:05,040 En printf, natuurlijk, neemt één of meer argumenten of parameters, 302 00:14:05,040 --> 00:14:06,770 oftewel, eenvoudiger, als input. 303 00:14:06,770 --> 00:14:09,230 >> Dus printf, net als een heleboel functies neemt ingangen. 304 00:14:09,230 --> 00:14:12,730 En die ingangen worden omarmd Door de twee haakjes here. 305 00:14:12,730 --> 00:14:15,180 En de binnenkant daarvan is een ingang. 306 00:14:15,180 --> 00:14:18,600 Het is een string, zoals wij het hebben genoemd, dat is gewoon een opeenvolging van karakters, 307 00:14:18,600 --> 00:14:22,310 zoals een woord of een zin, of een hele essay zelfs, tussen dubbele aanhalingstekens. 308 00:14:22,310 --> 00:14:25,712 En dat is wat er gaat het beïnvloeden gedrag van printf omdat natuurlijk 309 00:14:25,712 --> 00:14:27,170 het is gewoon een generieke printfunctie. 310 00:14:27,170 --> 00:14:29,600 Het gaat niet om te weten wat om af te drukken, tenzij je het te vertellen. 311 00:14:29,600 --> 00:14:31,000 En dan, wat kleinigheden. 312 00:14:31,000 --> 00:14:34,056 Wat hebben we zeggen dat dit rare volgorde van de symbolen is? 313 00:14:34,056 --> 00:14:34,556 Ja. 314 00:14:34,556 --> 00:14:35,410 >> Toeschouwer: Nieuwe lijn. 315 00:14:35,410 --> 00:14:35,990 >> DAVID J MALAN: Nieuwe lijn. 316 00:14:35,990 --> 00:14:39,340 Dus het blijkt, kun je niet gewoon op, voeren, als je het schrijven van het programma. 317 00:14:39,340 --> 00:14:42,590 In het algemeen is de compiler gaat krijgen een beetje in de war over wat je bedoelt. 318 00:14:42,590 --> 00:14:45,340 Integendeel, je moet letterlijk zeggen, geef mij een nieuwe lijn hier. 319 00:14:45,340 --> 00:14:49,506 En zo / n is wat we in het algemeen noemen een escape karakter. 320 00:14:49,506 --> 00:14:50,870 Zo n, voor nieuwe regel. 321 00:14:50,870 --> 00:14:53,810 De compiler kent dat bij het zien / n, 322 00:14:53,810 --> 00:14:57,420 moet eigenlijk de computer induceren Uiteindelijk of printf, in casu 323 00:14:57,420 --> 00:15:00,260 uitprinten een feitelijke nieuwe lijn, zoals het raken van de, in te voeren, 324 00:15:00,260 --> 00:15:01,480 toets op het toetsenbord. 325 00:15:01,480 --> 00:15:05,620 En tot slot, wat hebben we zeggen dit stuk van syntax is voor? 326 00:15:05,620 --> 00:15:06,591 Wat betekent het vertegenwoordigen? 327 00:15:06,591 --> 00:15:07,090 Ja. 328 00:15:07,090 --> 00:15:07,490 >> Toeschouwer: [onverstaanbaar] 329 00:15:07,490 --> 00:15:08,660 >> DAVID J MALAN: Het is gewoon het einde van de lijn. 330 00:15:08,660 --> 00:15:09,909 Het is het einde van de verklaring. 331 00:15:09,909 --> 00:15:11,890 En beseffen dat we niet zet ze overal. 332 00:15:11,890 --> 00:15:13,900 We hebben zeker zet ze niet aan de uiteinden van elke lijn. 333 00:15:13,900 --> 00:15:16,680 Bijvoorbeeld, er is niemand op de eerste lijn, er is niemand aan de lijn 334 00:15:16,680 --> 00:15:18,680 met, de belangrijkste, is er geen na de accolades, 335 00:15:18,680 --> 00:15:21,740 maar je zult beginnen te zien en te krijgen vertrouwd zijn met waar het gevraagd. 336 00:15:21,740 --> 00:15:26,014 En het is bijna altijd na een functie bellen of een verklaring, een actie 337 00:15:26,014 --> 00:15:27,180 dat je eigenlijk nemen. 338 00:15:27,180 --> 00:15:29,520 >> En weet nu, vooral als onder die minder comfortabel, 339 00:15:29,520 --> 00:15:32,540 Dit zijn het soort domme dingen dat je uiteindelijk ongeluk bonzen 340 00:15:32,540 --> 00:15:33,873 je hoofd tegen de muur boven. 341 00:15:33,873 --> 00:15:36,107 Omdat je logisch zult vertrouwen in een probleem 342 00:15:36,107 --> 00:15:38,440 je hebt opgelost voor een probleem set, en dat ding gewoon 343 00:15:38,440 --> 00:15:40,187 zal niet compileren of zelfs uit te voeren. 344 00:15:40,187 --> 00:15:43,270 En zo vaak, vroeg op, het gaat om omdat je een haakje gemist, 345 00:15:43,270 --> 00:15:44,455 of als u een puntkomma gemist. 346 00:15:44,455 --> 00:15:46,547 En dus gewoon bewust te zijn van dit soort dingen, 347 00:15:46,547 --> 00:15:49,380 en probeer niet te raken gefrustreerd door ze omdat deze zeer snel doet 348 00:15:49,380 --> 00:15:50,640 geworden oude hoed. 349 00:15:50,640 --> 00:15:53,910 Maar het is heel makkelijk te krijgen gefrustreerd vroeg als gevolg. 350 00:15:53,910 --> 00:15:57,020 >> Dus nu, laten we eens kijken hoe deze lijn is eigenlijk werkt 351 00:15:57,020 --> 00:15:59,170 en dan kijken naar een iets meer ingewikkeld. 352 00:15:59,170 --> 00:16:02,017 Dus we hebben meer dan hier, de het vermogen om te tekenen op dit scherm. 353 00:16:02,017 --> 00:16:04,100 En laten we veronderstellen dat dit is mijn computerscherm, 354 00:16:04,100 --> 00:16:08,589 maar ik schrijf het, hello programma, en ik heb niet geïmplementeerd, printf. 355 00:16:08,589 --> 00:16:10,130 Iemand anders heeft geïmplementeerd, printf. 356 00:16:10,130 --> 00:16:12,420 Wie wil beweren hebben geïmplementeerd, printf? 357 00:16:12,420 --> 00:16:12,920 Als we kunnen? 358 00:16:12,920 --> 00:16:13,830 Oké, wat is uw naam? 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 up. 361 00:16:15,529 --> 00:16:16,430 Kom op maximaal. 362 00:16:16,430 --> 00:16:17,070 Prima. 363 00:16:17,070 --> 00:16:22,260 Dus we hebben, hier, sommige naamplaatjes, omdat we een klein spelletje van dit zult maken. 364 00:16:22,260 --> 00:16:26,270 En wij bellen u, printf. 365 00:16:26,270 --> 00:16:30,170 En als je wilt hierheen komen, wat ik heb net getekend op het scherm, 366 00:16:30,170 --> 00:16:32,340 het is heel eenvoudig, er is mij, dit. 367 00:16:32,340 --> 00:16:35,550 >> Oké, ja, hello is mijn naam, printf, als je wilt op te zetten dat. 368 00:16:35,550 --> 00:16:35,740 Prima. 369 00:16:35,740 --> 00:16:37,360 En als je kunt gaan staan door het computerscherm 370 00:16:37,360 --> 00:16:39,730 alsof je de functie die kwam met deze computer systeem. 371 00:16:39,730 --> 00:16:42,063 En je doel in het leven is om daadwerkelijk iets af te drukken. 372 00:16:42,063 --> 00:16:44,560 Maar net als het programma dat wij net op het scherm hier 373 00:16:44,560 --> 00:16:47,060 we zullen moeten eigenlijk geven je wat input. 374 00:16:47,060 --> 00:16:51,810 >> En dus, als mijn input, hier is blijkbaar wat doorgegeven aan printf, 375 00:16:51,810 --> 00:16:53,730 Laten soort bespotten het omhoog als dit. 376 00:16:53,730 --> 00:16:58,720 Ik ga letterlijk schrijven over een stuk papier, "hello, wereld," 377 00:16:58,720 --> 00:17:03,020 backslash N. En om duidelijk te zijn, wat Ik heb net getekend op dit stuk papier, 378 00:17:03,020 --> 00:17:04,020 ziet er zo uit. 379 00:17:04,020 --> 00:17:08,730 Dus wanneer ik dit programma, en dit gele lijn van de code wordt uitgevoerd, 380 00:17:08,730 --> 00:17:12,970 het is alsof ik het hello-programma, ben overhandigen wat input uit om een ​​functie 381 00:17:12,970 --> 00:17:13,970 dat iemand anders geschreven. 382 00:17:13,970 --> 00:17:16,595 >> En als je met je vinger, kon eigenlijk met je vinger, 383 00:17:16,595 --> 00:17:21,520 tekenen op het scherm, ongeacht het is u zijn ingeleverd, 384 00:17:21,520 --> 00:17:27,465 het effect uiteindelijk is precies zien dat, op het scherm. 385 00:17:27,465 --> 00:17:29,140 En een klein hoekje geval. 386 00:17:29,140 --> 00:17:31,540 En goed, moeten we niet zien de nieuwe lijn, op dit punt. 387 00:17:31,540 --> 00:17:33,900 Het zou onjuist zijn voor u expliciet aandacht van de nieuwe regel. 388 00:17:33,900 --> 00:17:36,810 Maar als we bleven het schrijven van woorden op het screen, zouden ze uiteindelijk onder dat. 389 00:17:36,810 --> 00:17:39,560 >> Dus heel erg bedankt, maar vasthouden hier in de buurt voor slechts een moment. 390 00:17:39,560 --> 00:17:42,860 We moeten nu een andere vrijwilliger, als we konden, 391 00:17:42,860 --> 00:17:46,830 dat gaat nodig hebben om de rol te spelen van-- Het is enige mensen in het orkest 392 00:17:46,830 --> 00:17:47,355 nu meteen. 393 00:17:47,355 --> 00:17:47,980 Hoe about-- OK. 394 00:17:47,980 --> 00:17:48,480 Hier. 395 00:17:48,480 --> 00:17:49,180 Kom op maximaal. 396 00:17:49,180 --> 00:17:49,955 Hoe heet je? 397 00:17:49,955 --> 00:17:50,922 >> STUDENT 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID J MALAN: Sorry? 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 up. 401 00:17:55,320 --> 00:17:55,820 Nee? 402 00:17:55,820 --> 00:17:58,390 Heb ik dat verkeerd, zelfs nadat je het zei twee keer? 403 00:17:58,390 --> 00:17:58,890 Kom op maximaal. 404 00:17:58,890 --> 00:18:00,030 Het is moeilijk om hier te horen op. 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 En het spijt me, wat is uw naam? 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 Voor nu, als je het niet geest, je 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: Dus als je wilt om hier te staan ​​voor slechts een moment, 414 00:18:14,630 --> 00:18:17,100 laten we eens een kijkje nemen op een iets complexere programma, dat 415 00:18:17,100 --> 00:18:18,670 heeft nu drie regels code. 416 00:18:18,670 --> 00:18:24,080 Dus we hebben, een, uw naam met behulp printf; twee, een oproep tot GetString, 417 00:18:24,080 --> 00:18:28,060 gevolgd door een opdracht tot een variabele genaamd, touw s, of de naam s; 418 00:18:28,060 --> 00:18:31,260 en dan nog een oproep aan, printf, maar dan met twee ingangen. 419 00:18:31,260 --> 00:18:33,646 >> Dus hebben we al gedaan staat uw naam, of beter gezegd, we hebben 420 00:18:33,646 --> 00:18:34,770 al een printf oproep gedaan. 421 00:18:34,770 --> 00:18:38,960 Dus ik ga schrijven, staat je naam. 422 00:18:38,960 --> 00:18:42,089 En ja, wat ik ga passeren, printf, in slechts een moment, 423 00:18:42,089 --> 00:18:43,005 is heel eenvoudig, dit. 424 00:18:43,005 --> 00:18:47,760 Dus als je wilt gaan en trekken deze op het scherm, dat is nu uw input. 425 00:18:47,760 --> 00:18:48,260 Prima. 426 00:18:48,260 --> 00:18:51,160 En vergeet snaar, die we nu hebben onze eigen lijn van de code hier. 427 00:18:51,160 --> 00:18:54,470 Dus, GetString, moeten we om daadwerkelijk op te roepen, GetString. 428 00:18:54,470 --> 00:18:57,920 Dus uw doel in het leven is om gewoon lopen uit in het orkest, als je kon, 429 00:18:57,920 --> 00:18:58,980 en krijgt de naam van iemand. 430 00:18:58,980 --> 00:19:00,860 Maar laten we geven u iets om het op te zetten. 431 00:19:00,860 --> 00:19:02,908 Als je wilt, ga gang en krijg een string, 432 00:19:02,908 --> 00:19:05,241 krijgt iemands naam op die stuk papier, als je kon. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Prima. 435 00:19:13,530 --> 00:19:15,250 En we zullen zien, in slechts een moment, wiens naam we krijgen. 436 00:19:15,250 --> 00:19:17,630 Ondertussen, wat ik ga moet klaar zijn, is een leeg vel 437 00:19:17,630 --> 00:19:21,340 van papier, waar ga ik te slaan wat de waarde is 438 00:19:21,340 --> 00:19:25,752 is dat GetString is terug te keren naar mij, Ik, als een string variabele genaamd, s. 439 00:19:25,752 --> 00:19:26,252 Prima. 440 00:19:26,252 --> 00:19:27,293 Dus wat doe je hier? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Prima. 443 00:19:28,450 --> 00:19:30,910 Dus we hebben hier de naam Nik's. 444 00:19:30,910 --> 00:19:33,750 Dus dit is wat letterlijk is geretourneerd 445 00:19:33,750 --> 00:19:35,810 voor mij, om zo te zeggen, door GetString. 446 00:19:35,810 --> 00:19:38,720 >> Ik, nu, ga voeren de linkerzijde 447 00:19:38,720 --> 00:19:43,440 van die uitdrukking, waar ik gewoon kopiëren naar beneden, voor de huidige doeleinden, Nik. 448 00:19:43,440 --> 00:19:46,470 Dus nu heb ik een variabele genaamd, s, het opslaan van de naam Nik's. 449 00:19:46,470 --> 00:19:49,520 Ik heb al overhandigd aan printf, een eerdere argument. 450 00:19:49,520 --> 00:19:52,800 Maar in onze derde en laatste lijn van code, ik heb eigenlijk aan de hand printf 451 00:19:52,800 --> 00:19:58,500 iets different-- "hallo,% s," backslash n. 452 00:19:58,500 --> 00:20:01,510 >> En zo de laatste regel ik ga om het laatste wat ik ben send-- 453 00:20:01,510 --> 00:20:03,060 ga nu opschrijven, is dit. 454 00:20:03,060 --> 00:20:06,310 Zodat de twee regels code, of in plaats van de laatste regel van de code, 455 00:20:06,310 --> 00:20:10,690 roept op tot twee inputs-- één deze, en twee, dit. 456 00:20:10,690 --> 00:20:13,330 Dus als onze printf functie kunnen nu deze als input, 457 00:20:13,330 --> 00:20:16,000 laat me duidelijk het scherm voor je. 458 00:20:16,000 --> 00:20:17,250 Eigenlijk niet, kunt u doorgaan. 459 00:20:17,250 --> 00:20:19,333 We laten het, sinds het op hetzelfde programma. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 We moeten zien, hello, Nik. 462 00:20:27,380 --> 00:20:27,880 Prima. 463 00:20:27,880 --> 00:20:29,670 Dus dit was een flink aantal hoepels om door te springen, net 464 00:20:29,670 --> 00:20:31,620 om te schrijven, staat uw te noemen, en, hallo, Nik. 465 00:20:31,620 --> 00:20:37,210 Maar dit eenvoudig idee van de boodschap doorgeven, input en output passerende ontvangen, 466 00:20:37,210 --> 00:20:40,430 is precies het model dat we gaan moeten voor zelfs de meest complexe functies. 467 00:20:40,430 --> 00:20:41,804 Dus dank je wel voor jullie beiden. 468 00:20:41,804 --> 00:20:43,730 We hebben een mooie spanning kogel hier voor jou. 469 00:20:43,730 --> 00:20:48,890 En dank aan onze GetString en printf vrijwilligers gelijk. 470 00:20:48,890 --> 00:20:49,551 Dankjewel. 471 00:20:49,551 --> 00:20:50,050 Prima. 472 00:20:50,050 --> 00:20:50,966 Dank aan u beiden. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Dus we hebben het over dusver meestal ongeveer strings. 475 00:21:00,430 --> 00:21:06,550 En het blijkt dat C kan eigenlijk begrijpen een paar verschillende soorten data. 476 00:21:06,550 --> 00:21:08,860 In feite, laten we een kijken naar deze hier. 477 00:21:08,860 --> 00:21:12,490 Dus C, en een groot aantal andere talen, begrijpen wat genoemd chars. 478 00:21:12,490 --> 00:21:16,852 Een char is over het algemeen een byte, of acht bits. 479 00:21:16,852 --> 00:21:19,810 En het vertegenwoordigt een enkel karakter, zoals de letter A, of de hoofdstad 480 00:21:19,810 --> 00:21:21,990 letter A, of de kleine letter Een of een uitroepteken, 481 00:21:21,990 --> 00:21:25,440 of een teken dat u kunt typen op je toetsenbord, en soms zelfs meer. 482 00:21:25,440 --> 00:21:26,795 We hebben ook gebeuren met praalwagens te zien. 483 00:21:26,795 --> 00:21:31,160 Een vlotter is algemeen een 32-bits waarde, of vier bytes 484 00:21:31,160 --> 00:21:33,660 want weer één byte acht bits. 485 00:21:33,660 --> 00:21:36,675 >> Dus een float is een floating point waarde, iets met een komma. 486 00:21:36,675 --> 00:21:38,550 En inderdaad, dat is wat de film sprak 487 00:21:38,550 --> 00:21:42,240 over wanneer ze sprak over drijvende punt waarden, een aantal vaste aantal bits 488 00:21:42,240 --> 00:21:43,940 gebruikt om een ​​reëel getal vertegenwoordigen. 489 00:21:43,940 --> 00:21:45,740 Maar er zijn ook dingen genoemd tweepersoonskamers. 490 00:21:45,740 --> 00:21:47,860 Deze bestaan ​​in Java, als je APCS hebt genomen, 491 00:21:47,860 --> 00:21:51,540 en een dubbele, zoals de naam al gelukkig suggereert, is twee keer zo groot als een float. 492 00:21:51,540 --> 00:21:54,540 Het is nog steeds een reëel getal, het heeft gewoon meer bits 493 00:21:54,540 --> 00:21:58,390 waarbij steeds precies te zijn, of zelfs grotere aantallen te slaan. 494 00:21:58,390 --> 00:21:58,890 int is eenvoudig. 495 00:21:58,890 --> 00:22:00,181 We spraken over dat laatste keer. 496 00:22:00,181 --> 00:22:01,160 Het is gewoon een integer. 497 00:22:01,160 --> 00:22:03,980 En het is over het algemeen 32 bits, of vier bytes. 498 00:22:03,980 --> 00:22:07,850 >> En dus, als je, laten we nu zien, 32 bits-- en we hebben deze week 0, 499 00:22:07,850 --> 00:22:10,820 ooit zo briefly-- als je 32 bits, wat is het grootste 500 00:22:10,820 --> 00:22:13,580 nummer dat u kan vertegenwoordigen als een integer? 501 00:22:13,580 --> 00:22:16,080 Ongeveer? 502 00:22:16,080 --> 00:22:18,380 Het is als 4 miljard, en dat is alleen als we 503 00:22:18,380 --> 00:22:20,690 die alleen positieve cijfers. 504 00:22:20,690 --> 00:22:23,930 Als u 32 bits, en u wilt vertegenwoordigen negatieve getallen als goed, 505 00:22:23,930 --> 00:22:27,100 uw bereik is, in essentie, negatief 2 miljard aan positieve 2 miljard. 506 00:22:27,100 --> 00:22:29,250 Maar over het algemeen, zullen we beginnen op 0 gaan tot 4 miljard euro. 507 00:22:29,250 --> 00:22:32,400 >> Je hoeft niet precies te weten, maar We kunnen dit zien, in feite, als ik gewoon 508 00:22:32,400 --> 00:22:36,400 openen een beetje rekenmachine, hier. 509 00:22:36,400 --> 00:22:41,070 Ik kan doen 2 van de 32, en dat is precies hoe groot, 510 00:22:41,070 --> 00:22:43,190 hoeveel waarden je kunt vertegenwoordigen, met 32 ​​bits. 511 00:22:43,190 --> 00:22:44,442 En het is ongeveer 4 miljard. 512 00:22:44,442 --> 00:22:46,900 Dus we zullen blijven zien dat het aantal in een paar verschillende plaatsen. 513 00:22:46,900 --> 00:22:48,890 Maar als je meer nodig hebt getallen dan, 514 00:22:48,890 --> 00:22:51,670 Het blijkt dat er's zoiets als een lange lang. 515 00:22:51,670 --> 00:22:54,005 En een lange lang is algemeen 64 bits, waarvan 516 00:22:54,005 --> 00:22:56,380 betekent dat het een grootteorde zelfs groter dan een int. 517 00:22:56,380 --> 00:22:59,510 >> Dus ik kan niet eens de grootste uitspreken nummer dat u kan vertegenwoordigen, 518 00:22:59,510 --> 00:23:01,340 maar het is aanzienlijk groter. 519 00:23:01,340 --> 00:23:05,190 Nu als een terzijde, historisch, als een int 32 bits, 520 00:23:05,190 --> 00:23:12,780 en een lange lange is 64 bits, hoe groot is een lange, niet een lange lang? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Je zou denken dat het langer dan een int maar misschien minder lang dan een lange lange, 523 00:23:20,330 --> 00:23:21,400 maar het hangt eigenlijk. 524 00:23:21,400 --> 00:23:23,400 >> En zo blijkt uit een van de frustraties ook, 525 00:23:23,400 --> 00:23:26,830 met het schrijven van code op bepaalde systemen, is dat niet al deze gegevenstypen 526 00:23:26,830 --> 00:23:28,440 hebben vooraf bepaalde waarden. 527 00:23:28,440 --> 00:23:29,771 Soms is dit veel bits. 528 00:23:29,771 --> 00:23:31,020 Soms is het dat veel bits. 529 00:23:31,020 --> 00:23:32,750 Zodat je eigenlijk moet weten, Soms, welke hardware 530 00:23:32,750 --> 00:23:34,083 je draait de software op. 531 00:23:34,083 --> 00:23:36,960 Gelukkig, andere talen en andere soorten gegevens die nu bestaan, 532 00:23:36,960 --> 00:23:38,400 toestaan ​​om precies te zijn. 533 00:23:38,400 --> 00:23:41,220 Wel zagen we touwtje, en we zagen Bool, ook, 534 00:23:41,220 --> 00:23:43,960 maar het blijkt die komen Alleen de CS50 bibliotheek. 535 00:23:43,960 --> 00:23:46,240 Dus die zijn niet gebouwd in C. Deze plaats, 536 00:23:46,240 --> 00:23:49,340 komen in dat bestand met de naam CS50.h, dat we uiteindelijk 537 00:23:49,340 --> 00:23:51,831 afpellen van de lagen. 538 00:23:51,831 --> 00:23:53,830 Maar voor nu, ze zijn gewoon extra gegevenstypen. 539 00:23:53,830 --> 00:23:57,060 Een bool is een waar of onwaar, en een string een reeks tekens, 540 00:23:57,060 --> 00:23:57,970 als een woord. 541 00:23:57,970 --> 00:24:01,690 Nu printf, we hebben gezien, heeft placeholders,% s is één. 542 00:24:01,690 --> 00:24:05,430 En je zou kunnen, tot nu toe, afleiden uit deze andere voorbeelden hoe 543 00:24:05,430 --> 00:24:07,720 kon je een placeholder hebben voor verschillende gegevenstypen. 544 00:24:07,720 --> 00:24:11,150 Bijvoorbeeld, neem een ​​gok, als je wilde afdrukken van een enkele char behulp 545 00:24:11,150 --> 00:24:15,270 printf, de plaatsaanduiding is waarschijnlijk% c. 546 00:24:15,270 --> 00:24:19,650 En als u wilt afdrukken van een integer met de plaatsaanduiding,% i. 547 00:24:19,650 --> 00:24:25,150 % LLD is een lange lange decimale waarde, maar lang lang, dus dat is toegewezen aan dat. 548 00:24:25,150 --> 00:24:28,640 En dan% f voor drijvende punt waarde of voor een dubbel, 549 00:24:28,640 --> 00:24:31,270 dus soms zijn ze hergebruikt in verschillende contexten. 550 00:24:31,270 --> 00:24:33,350 Dus we zullen zien en te gebruiken sommige van die tijd. 551 00:24:33,350 --> 00:24:36,420 En printf en andere functies ook escape sequences steun van anderen, 552 00:24:36,420 --> 00:24:38,080 en soms dit noodzakelijke. 553 00:24:38,080 --> 00:24:39,770 Dus backslash n is een nieuwe lijn. 554 00:24:39,770 --> 00:24:42,886 Backslash t, doet iedereen wil een gooi te nemen? 555 00:24:42,886 --> 00:24:43,760 Toeschouwer: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID J MALAN: Tab. 557 00:24:44,551 --> 00:24:46,810 Dus als je echt wilt het afdrukken van een tabblad, niet 558 00:24:46,810 --> 00:24:49,940 een vast aantal ruimtes, maar een daadwerkelijke tabblad karakter, hoef je niet te raken je, 559 00:24:49,940 --> 00:24:53,490 tab, toets op het toetsenbord algemeen je eigenlijk doen backslash t. 560 00:24:53,490 --> 00:24:57,750 Backslash dubbele aanhalingstekens, waarom zou ik ooit willen dat? 561 00:24:57,750 --> 00:24:58,250 Rechts? 562 00:24:58,250 --> 00:25:00,417 Waarom kan ik niet het type alleen een dubbele aanhalingstekens op mijn toetsenbord? 563 00:25:00,417 --> 00:25:02,124 Toeschouwer: Want anders, het is 564 00:25:02,124 --> 00:25:04,830 gaan denken dat het is het einde van graag uw print [? tekst. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID J MALAN: Precies. 566 00:25:05,420 --> 00:25:07,211 Vergeet niet, met onze printf voorbeelden, als we 567 00:25:07,211 --> 00:25:10,075 passeerden om printf in input, aan de linkerkant van deze invoerreeks 568 00:25:10,075 --> 00:25:12,950 en rechts van die ingang lente, natuurlijk, was een dubbele offerte. 569 00:25:12,950 --> 00:25:16,270 Als uw eigen inbreng heeft een dubbele quote in het midden van die, 570 00:25:16,270 --> 00:25:18,920 de computer zou potentieel verward, als bedoeld, 571 00:25:18,920 --> 00:25:20,760 Dit doet dubbele aanhalingstekens thuis in het midden? 572 00:25:20,760 --> 00:25:22,150 Behoort het met de linker? 573 00:25:22,150 --> 00:25:23,566 Behoort het met de juiste? 574 00:25:23,566 --> 00:25:26,780 En dus, als je wilt om het super maken helder, je doet backslash dubbel aanhalingsteken, 575 00:25:26,780 --> 00:25:30,480 zodat het ontsnapt zogezegd, en het is niet samengevoegd voor iets anders. 576 00:25:30,480 --> 00:25:34,400 En er is een paar anderen hier, backslash r, enkele aanhalingstekens, 0, 577 00:25:34,400 --> 00:25:36,510 dat we kunnen zien in de tijd, als goed. 578 00:25:36,510 --> 00:25:37,760 En nu, hoe zit het met de functies? 579 00:25:37,760 --> 00:25:41,630 >> Zodat acties die we tot nu toe kunnen nemen in deze taal, C, nou, we hebben gezien, 580 00:25:41,630 --> 00:25:44,320 printf, natuurlijk en al de anderen op het scherm, 581 00:25:44,320 --> 00:25:47,140 hier, dat we zullen gebruiken voor de alleen de eerste paar weken cursus, 582 00:25:47,140 --> 00:25:48,485 komen wanneer de CS50 bibliotheek. 583 00:25:48,485 --> 00:25:51,850 En ze maken het veel gemakkelijker, in C, om daadwerkelijk te krijgen input van de gebruiker. 584 00:25:51,850 --> 00:25:54,200 Het blijkt dat in C, en eerlijk gezegd in een paar talen, 585 00:25:54,200 --> 00:25:57,450 het is een echte pijn in de nek te doen iets simpels, zoals prompt de gebruiker 586 00:25:57,450 --> 00:26:01,310 voor keyboard voor hun inbreng. 587 00:26:01,310 --> 00:26:03,240 En dus deze functies maken het gemakkelijker. 588 00:26:03,240 --> 00:26:05,472 >> En het heeft ook fout gedurende de controle, 589 00:26:05,472 --> 00:26:07,180 zodat bij herinneren op woensdag, we 590 00:26:07,180 --> 00:26:09,740 zag het, opnieuw proberen, waarschuwing, toen ik niet meewerken, 591 00:26:09,740 --> 00:26:11,700 en ik typte een woord, in plaats van een nummer? 592 00:26:11,700 --> 00:26:15,402 We hebben het zware werk vroeg gedaan op om ervoor te zorgen dat de gebruiker werkt. 593 00:26:15,402 --> 00:26:17,860 Maar dit zijn slechts training wielen die we zal uiteindelijk, 594 00:26:17,860 --> 00:26:19,640 en snel opstijgen. 595 00:26:19,640 --> 00:26:22,630 >> Dus om samen te vatten, dan, laten we eens een snelle blik, 596 00:26:22,630 --> 00:26:26,620 net zoals we hebben gedaan met Scratch bij sommige canonieke constructies in C. 597 00:26:26,620 --> 00:26:28,580 Dit is bedoeld om, sorteren van, zijn een wervelwind tour, 598 00:26:28,580 --> 00:26:30,990 gewoon zo dat je een verwijzing en dat je hebt dingen gezien op het eerste. 599 00:26:30,990 --> 00:26:34,100 Maar dan zullen we kijken naar de werkelijke codering gebruik van sommige van deze bouwstenen. 600 00:26:34,100 --> 00:26:36,710 Dus net als in Scratch, toen we uitspraken willen, 601 00:26:36,710 --> 00:26:41,570 of zeggen, wacht, in C, hebben we functioneert als goed, zoals printf. 602 00:26:41,570 --> 00:26:45,350 >> Als we willen een voorwaarde uitdrukken in C, het is vergelijkbaar, in de geest, 603 00:26:45,350 --> 00:26:47,840 dat puzzelstukje dat leek dit in Scratch. 604 00:26:47,840 --> 00:26:49,850 Maar in plaats daarvan, we letterlijk gewoon schrijven, indien. 605 00:26:49,850 --> 00:26:51,830 En dan, tussen haakjes, we zetten een voorwaarde, 606 00:26:51,830 --> 00:26:54,807 wanneer die voorwaarde is wat we zullen roepen, nogmaals, een boolean expressie. 607 00:26:54,807 --> 00:26:56,390 En nogmaals, dit is een soort van pseudocode. 608 00:26:56,390 --> 00:26:58,830 En, in feite is het // is geplaatst. 609 00:26:58,830 --> 00:27:00,550 Het is gewoon Engels woorden om mezelf. 610 00:27:00,550 --> 00:27:03,000 Maar dit is de algemene structuur van een, indien conditie. 611 00:27:03,000 --> 00:27:05,220 Maar we zullen zien beton voorbeelden in slechts een moment. 612 00:27:05,220 --> 00:27:07,960 >> Als u wilt een hebben twee-weg vork in de weg, 613 00:27:07,960 --> 00:27:11,740 net als wij deden met onze vrijwilligers op Woensdag, kunt u een hebt, anders als. 614 00:27:11,740 --> 00:27:16,020 En als je wilt naar een derde te hebben en laatste voorwaarde, of standaard situatie, 615 00:27:16,020 --> 00:27:19,006 kun je gewoon een ander blok, is er. 616 00:27:19,006 --> 00:27:21,880 En evenzo met Booleaanse uitdrukkingen, je kunt, en ze samen. 617 00:27:21,880 --> 00:27:24,296 En we zagen op woensdag, dat het is geen enkel teken, 618 00:27:24,296 --> 00:27:28,220 het twee voor lagere redenen we zullen uiteindelijk zien en mee te spelen. 619 00:27:28,220 --> 00:27:30,410 Of-ing dingen samen 2 verticale balken. 620 00:27:30,410 --> 00:27:32,240 Op een Amerikaans toetsenbord, dit doorgaans een belangrijke 621 00:27:32,240 --> 00:27:35,730 met de Shift-toets boven uw Enter of Return-toets. 622 00:27:35,730 --> 00:27:38,620 >> Dan is er deze dingen die zullen we misschien één of twee keer te gebruiken. 623 00:27:38,620 --> 00:27:42,570 Ze zijn functioneel gelijkwaardig aan wat u kunt doen met een, indien anders als, 624 00:27:42,570 --> 00:27:44,950 anders als anders, bouwen, maar ze zijn een switch genoemd. 625 00:27:44,950 --> 00:27:48,020 Ze zien er heel anders, maar we zullen zien in een aantal van onze distributie-code, 626 00:27:48,020 --> 00:27:51,890 voor een toekomstig probleem set, het meest waarschijnlijk, dat het soms gewoon een mooier 627 00:27:51,890 --> 00:27:54,060 uiting van een geheel stelletje omstandigheden 628 00:27:54,060 --> 00:27:57,590 zonder veel accolades en veel haken en inspringen. 629 00:27:57,590 --> 00:28:01,910 Maar ze geven ons niet meer macht dan we al hebben. 630 00:28:01,910 --> 00:28:02,550 En nu loops. 631 00:28:02,550 --> 00:28:05,020 En deze, zullen we kijken bij iets langzamer. 632 00:28:05,020 --> 00:28:08,470 Maar dan zullen we beginnen om deze te gebruiken, vooral voor degenen die al bekend zijn. 633 00:28:08,470 --> 00:28:13,830 Dit is de canonieke manier, als ongelooflijk geheimzinnige manier, om een ​​lus in C. schrijven 634 00:28:13,830 --> 00:28:15,896 >> Nu een lus in Scratch was vrij eenvoudig. 635 00:28:15,896 --> 00:28:17,020 Je hebt een, voor altijd, blok. 636 00:28:17,020 --> 00:28:19,760 Je hebt een, herhaal, blok met slechts een nummer dat u hoeft te typen. 637 00:28:19,760 --> 00:28:22,220 En met de, voor de lus, kunt u implementeren deze beide ideeën, 638 00:28:22,220 --> 00:28:23,595 maar het is een beetje meer technisch. 639 00:28:23,595 --> 00:28:25,994 Maar eerlijk gezegd, het is ook relatief eenvoudig. 640 00:28:25,994 --> 00:28:28,160 Als je eenmaal weet de volgorde van operaties, je letterlijk 641 00:28:28,160 --> 00:28:30,910 zijn gewoon aan te sluiten in de waarden en vertel de computer wat te doen. 642 00:28:30,910 --> 00:28:32,800 Dus hier is een voorbeeld. 643 00:28:32,800 --> 00:28:38,040 Dit is een lus die, heel gewoon, telt van de ene getal naar boven 644 00:28:38,040 --> 00:28:40,187 via een andere. 645 00:28:40,187 --> 00:28:42,020 En alleen door een blik op het, zelfs als je 646 00:28:42,020 --> 00:28:44,660 geen ervaring met deze taal, welk nummer 647 00:28:44,660 --> 00:28:46,920 is het waarschijnlijk beginnen te tellen bij? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 En ik gok dat is omdat u zien dat er een int en een i, 650 00:28:50,240 --> 00:28:51,073 die een variabele. 651 00:28:51,073 --> 00:28:52,390 Het geïnitialiseerd op 0. 652 00:28:52,390 --> 00:28:55,670 >> En dan later, lijkt het we passeren printf, een waarde. 653 00:28:55,670 --> 00:28:58,000 En, in feite, heb ik hier een weinig typo. 654 00:28:58,000 --> 00:28:59,850 Maar dat is eenvoudig op te lossen. 655 00:28:59,850 --> 00:29:02,390 Laat me toe te voegen in, ik hier. 656 00:29:02,390 --> 00:29:06,150 We hebben nu printf wezen doorgegeven dat placeholder waarde. 657 00:29:06,150 --> 00:29:08,299 En wat gaat tellen door middel van? 658 00:29:08,299 --> 00:29:08,840 Publiek: 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 Zo 50, op het eerste gezicht lijkt het goed. 663 00:29:13,340 --> 00:29:16,990 Maar dat, zo blijkt, gaat worden onze voorwaarde dat we blijven controleren. 664 00:29:16,990 --> 00:29:21,740 En we gaan een keer te stoppen i niet meer dan 50. 665 00:29:21,740 --> 00:29:24,920 Dus deze lus, omgekeerd, moeten uit te voeren, zolang ik minder dan 50. 666 00:29:24,920 --> 00:29:28,891 Maar zodra het wordt 50 of 51, of erger, moet het automatisch stoppen. 667 00:29:28,891 --> 00:29:29,390 Prima. 668 00:29:29,390 --> 00:29:31,200 >> Dus wat gebeurt er eigenlijk hier? 669 00:29:31,200 --> 00:29:33,160 Dus dit is de orde van handelingen voor een lus. 670 00:29:33,160 --> 00:29:35,440 One, heb je de zogenaamde initialisatie. 671 00:29:35,440 --> 00:29:38,264 Dit geel gemarkeerd brok van de code wordt eerst uitgevoerd, 672 00:29:38,264 --> 00:29:40,930 en heeft tot gevolg dat, per Woensdag, je waarschijnlijk denken. 673 00:29:40,930 --> 00:29:45,500 Het creëert een variabele i en het heet winkels in de variabele de waarde 0. 674 00:29:45,500 --> 00:29:47,560 Dus i is 0 op dit punt in het verhaal. 675 00:29:47,560 --> 00:29:49,680 >> De volgende ding dat gebeurt in dit construct, 676 00:29:49,680 --> 00:29:51,540 is dat de voorwaarde wordt gecontroleerd. 677 00:29:51,540 --> 00:29:54,325 Dus controleer ik onmiddellijk, is dat ik minder dan 50? 678 00:29:54,325 --> 00:29:57,700 En natuurlijk, het antwoord voor nu is, zeker, ja. 679 00:29:57,700 --> 00:30:00,710 Ja, omdat ik is 0, en dat is zeker minder dan 50. 680 00:30:00,710 --> 00:30:03,866 Wat gebeurt, is dat deze regel code wordt uitgevoerd. 681 00:30:03,866 --> 00:30:06,740 En inderdaad, als er meerdere regels code in die accolades, 682 00:30:06,740 --> 00:30:09,020 ze krijgen allemaal uitgevoerd ene na de andere. 683 00:30:09,020 --> 00:30:11,450 >> En het effect hier is blijkbaar, om uit te printen 684 00:30:11,450 --> 00:30:15,365 het getal i, die zal 0, en vervolgens 1, en vervolgens op 2. 685 00:30:15,365 --> 00:30:15,865 Maar waarom? 686 00:30:15,865 --> 00:30:17,410 Waarom is het krijgen opgehoogd? 687 00:30:17,410 --> 00:30:20,680 Nou, het vierde ding dat er gebeurt is dat deze syntaxis 688 00:30:20,680 --> 00:30:22,610 wordt uitgevoerd, na de puntkomma. 689 00:30:22,610 --> 00:30:27,506 i ++ is een verkorte manier om te zeggen; neemt de waarde van i, en voeg 1 ervan; 690 00:30:27,506 --> 00:30:30,380 en dan de volgende keer rond, voeg 1 ervan; en de volgende keer rond, 691 00:30:30,380 --> 00:30:31,330 voeg 1 aan. 692 00:30:31,330 --> 00:30:33,640 >> Dus als we blijven gaan, wat er gaat gebeuren 693 00:30:33,640 --> 00:30:35,890 volgende is dat ik ga niet initialiseren ik ooit weer. 694 00:30:35,890 --> 00:30:38,290 Als ik bleef initialiseren i 0 tot dit voorbeeld 695 00:30:38,290 --> 00:30:41,110 nooit zou eindigen, omdat ik zou worden geplakt op 0. 696 00:30:41,110 --> 00:30:43,870 Maar wat er gaat gebeuren is dat de voorwaarde zal worden gecontroleerd, 697 00:30:43,870 --> 00:30:54,280 de lijn van de code krijgt uitgevoerd, i wordt geïncrementeerd, 698 00:30:54,280 --> 00:30:56,970 voorwaarde zal worden gecontroleerd, code krijgt uitgevoerd. 699 00:30:56,970 --> 00:30:59,790 En het bleef fietsen weer, en opnieuw, en opnieuw, 700 00:30:59,790 --> 00:31:03,340 totdat ik ++ leidt tot een waarde van 50. 701 00:31:03,340 --> 00:31:05,870 >> De voorwaarde zegt dan: is 50 minder dan 50? 702 00:31:05,870 --> 00:31:09,360 Het antwoord is natuurlijk nee, en dus de hele code stopt uitvoeren. 703 00:31:09,360 --> 00:31:13,020 En als u meer code op het scherm beneden, dat is wat er vervolgens gebeurt. 704 00:31:13,020 --> 00:31:17,530 Het knalt uit deze accolades en steeds meer daarna afgedrukt. 705 00:31:17,530 --> 00:31:20,470 >> Dus een grap nu uit FoxTrot, dat zult u misschien nu begrijpen. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 Het is altijd grappig. 708 00:31:31,560 --> 00:31:34,110 Het is net als de grinnikt soort van percolaat, 709 00:31:34,110 --> 00:31:38,370 en dan besef je dat je niet moet te lachen om humor als deze. 710 00:31:38,370 --> 00:31:41,160 Maar er is een afhaalrestaurant hier, pedagogisch, ook. 711 00:31:41,160 --> 00:31:43,577 Dus het blijkt dat ik ben missen van een stuk van de syntaxis, 712 00:31:43,577 --> 00:31:45,410 of FoxTrot's missen van een stuk van de syntaxis hier. 713 00:31:45,410 --> 00:31:48,076 Wat ontbreekt, dat we hebben gehad in elk ander voorbeeld, tot nu toe? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Terugkeer, is er, dus dat is iets anders, 716 00:31:53,390 --> 00:31:54,440 dat we terug naar het duurde niet lang te komen. 717 00:31:54,440 --> 00:31:55,398 Wat ontbreekt, hoewel? 718 00:31:55,398 --> 00:31:55,908 Ja. 719 00:31:55,908 --> 00:31:58,150 >> Toeschouwer: De initialisatie van [onverstaanbaar]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID J MALAN: OK. 721 00:31:58,470 --> 00:31:58,980 Dus ja. 722 00:31:58,980 --> 00:32:03,210 Dus eigenlijk, dit is-- Nou, en de telling is geïnitialiseerd 723 00:32:03,210 --> 00:32:05,470 boven, of beter gezegd, verklaarde boven. 724 00:32:05,470 --> 00:32:06,960 Dus dit is een andere manier van doen. 725 00:32:06,960 --> 00:32:08,685 Maar niet in één regel is het wel geldig is. 726 00:32:08,685 --> 00:32:09,310 Hoe zit het hier? 727 00:32:09,310 --> 00:32:10,196 >> Toeschouwer: Is het de accolades? 728 00:32:10,196 --> 00:32:10,640 >> DAVID J MALAN: Ja. 729 00:32:10,640 --> 00:32:12,080 Dus de accolades ontbreken. 730 00:32:12,080 --> 00:32:15,495 Maar deze code, ik bedoel, op hun naam, is eigenlijk, syntactisch geldig. 731 00:32:15,495 --> 00:32:17,610 Het blijkt dat je niet moet de accolades 732 00:32:17,610 --> 00:32:21,691 Als u slechts één regel code die u wilt uitvoeren binnenkant van de lus. 733 00:32:21,691 --> 00:32:24,190 Nu we altijd, in de klas en in al onze verdeelsleutel, 734 00:32:24,190 --> 00:32:26,730 zijn de accolades hoe dan ook, gewoon voor de duidelijkheid. 735 00:32:26,730 --> 00:32:29,010 Maar beseffen dat in schoolboeken en online voorbeelden 736 00:32:29,010 --> 00:32:31,300 je kan heel goed zien krullend bretels ontbreekt soms. 737 00:32:31,300 --> 00:32:34,850 En dat is OK, als wat je zijn ingesprongen en beoogd 738 00:32:34,850 --> 00:32:38,650 is slechts een enkele regel code, en niet meerdere regels code, mogelijk. 739 00:32:38,650 --> 00:32:39,150 Prima. 740 00:32:39,150 --> 00:32:44,500 Dus in verband met de kwestie van de onnauwkeurigheid, is een kwestie van de overloop, 741 00:32:44,500 --> 00:32:48,560 in die zin dat evenzo hebben integers zijn grenzen aan hen 742 00:32:48,560 --> 00:32:49,970 net als floating point waarden? 743 00:32:49,970 --> 00:32:53,120 In de wereld een drijvende komma waarden, kunnen we alleen zo nauwkeurig, 744 00:32:53,120 --> 00:32:55,710 waarna soms slechte dingen kunnen gebeuren, 745 00:32:55,710 --> 00:32:57,760 en onze programma's kunnen worden buggy and error. 746 00:32:57,760 --> 00:33:00,050 Nu zelfs met getallen, kun je in de problemen. 747 00:33:00,050 --> 00:33:03,820 Nu een integer geen heeft komma of cijfers na het. 748 00:33:03,820 --> 00:33:07,130 Het is gewoon een natuurlijk getal, meestal. 749 00:33:07,130 --> 00:33:09,430 Dus wat zou er mis met een int gaan? 750 00:33:09,430 --> 00:33:12,210 Als ik ben met behulp van een int naar tellen, wat kon er misgaan? 751 00:33:12,210 --> 00:33:13,230 Lijkt een stuk eenvoudiger. 752 00:33:13,230 --> 00:33:13,873 Ja. 753 00:33:13,873 --> 00:33:16,240 >> Toeschouwer: als de nummer krijgt [onverstaanbaar] 754 00:33:16,240 --> 00:33:17,073 >> DAVID J MALAN: Ja. 755 00:33:17,073 --> 00:33:20,820 Wat als je telt zo hoog, dat je kan niet uitdrukken dat heel groot getal. 756 00:33:20,820 --> 00:33:21,320 Rechts? 757 00:33:21,320 --> 00:33:23,910 Op een gegeven moment, je gaat de grenzen overschrijdt 758 00:33:23,910 --> 00:33:27,077 een 32-bits waarde of een 64-bits waarde. 759 00:33:27,077 --> 00:33:29,410 Nu nogmaals, ik weet niet hoe naar een 64-bits waarde spreken, 760 00:33:29,410 --> 00:33:32,230 maar ik weet dat met een 32-bits geheel getal, de grootste waarde kan zijn, 761 00:33:32,230 --> 00:33:35,490 als het enige positieve waarden, is ongeveer 4 miljard. 762 00:33:35,490 --> 00:33:39,000 Dus als ik probeer te tellen tot 5 miljard, er iets gaat gebeuren. 763 00:33:39,000 --> 00:33:41,050 Maar laten we eens kijken wat er in feite kan gebeuren. 764 00:33:41,050 --> 00:33:44,570 In de wereld van integer overloop, waar u, in zekere zin, 765 00:33:44,570 --> 00:33:48,270 overlopen de capaciteit van een integer, wat er kan gebeuren? 766 00:33:48,270 --> 00:33:51,190 >> Dus hier is een binair getal, Het is een terugkeer naar 0. 767 00:33:51,190 --> 00:33:54,630 Het is allemaal 1's en de plaatsaanduidingen er zijn machten van 2, 768 00:33:54,630 --> 00:33:55,980 dus dit is binair. 769 00:33:55,980 --> 00:33:59,416 Dit zijn dus 8, 1 bit op het scherm. 770 00:33:59,416 --> 00:34:01,290 En als je herinneren of je snel de wiskunde, 771 00:34:01,290 --> 00:34:06,074 welke waarde wordt vertegenwoordigd hier bij deze acht 1-bits? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 En zelfs als je niet helemaal zeker van de wiskunde, zou je het doen uit. 774 00:34:09,260 --> 00:34:10,550 Of je kon gewoon soort van de rede doorheen, 775 00:34:10,550 --> 00:34:12,633 wacht even, als ik hetgeen een 8 bit waarde, 776 00:34:12,633 --> 00:34:17,750 en ik heb 256 mogelijke waarden, maar de eerste is 0, 777 00:34:17,750 --> 00:34:19,909 Ik weet alleen dat de grootste gaat worden 255, 778 00:34:19,909 --> 00:34:21,510 en dat is wat dit zou kunnen zijn. 779 00:34:21,510 --> 00:34:26,060 >> Dus stel ik probeer om 1 toe te voegen aan deze waarde. 780 00:34:26,060 --> 00:34:28,750 Wat zou jij doen in rang school toen het toevoegen van een 1, en het 781 00:34:28,750 --> 00:34:31,139 Past niet echt bij, omdat je moet dragen de 1? 782 00:34:31,139 --> 00:34:34,380 Wat is dit nummer gaan te worden als je 1 toe te voegen? 783 00:34:34,380 --> 00:34:37,030 Het zal worden 0. 784 00:34:37,030 --> 00:34:37,530 Rechts? 785 00:34:37,530 --> 00:34:41,139 Want als je had meer bits-- en ik zal proberen, soort, typt het uit hier-- 786 00:34:41,139 --> 00:34:44,710 als we meer bits, wat we kon hier doen is het toevoegen van de 1, 787 00:34:44,710 --> 00:34:47,370 en dan zouden we dit te krijgen. 788 00:34:47,370 --> 00:34:48,739 Whoops. 789 00:34:48,739 --> 00:34:52,250 We hadden een 1 bit hebben helemaal hierheen. 790 00:34:52,250 --> 00:34:55,530 >> Maar als dit een eindige waarde, het is slechts 8 bits, 791 00:34:55,530 --> 00:34:57,480 en dat is vooraf bepaald door de computer, 792 00:34:57,480 --> 00:34:59,370 dat 1 effectief er niet. 793 00:34:59,370 --> 00:35:00,980 Het valt gewoon een soort van een klif. 794 00:35:00,980 --> 00:35:05,480 En dus als je 1 toe tot 255, wat waarde heb je blijkbaar krijgen? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 En dus nummers per ongeluk, en misschien onbedoeld 797 00:35:09,700 --> 00:35:12,040 uiteindelijk wikkelen rond als dit. 798 00:35:12,040 --> 00:35:14,079 Dus wat kunnen de gevolgen van dit zijn? 799 00:35:14,079 --> 00:35:15,620 Nou, er is een paar verschillende dingen. 800 00:35:15,620 --> 00:35:18,751 Zo een, het maakt uiteindelijk op zoek zoals 0, onbedoeld, 801 00:35:18,751 --> 00:35:20,750 maar je kunt soort te zien, zelfs in de echte wereld, 802 00:35:20,750 --> 00:35:23,416 voor beter of slechter, manifestaties van dit idee van een grens. 803 00:35:23,416 --> 00:35:26,630 Bijvoorbeeld, iemand van jullie die ooit heb gespeeld Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 doet iedereen weet toevallig het maximum aantal munten 805 00:35:28,880 --> 00:35:32,032 je kunt verzamelen in Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Neem een ​​gok op basis van vandaag leidende vragen. 807 00:35:35,640 --> 00:35:39,140 Het is groter dan 256 of 255. 808 00:35:39,140 --> 00:35:40,330 Het is 4 miljard. 809 00:35:40,330 --> 00:35:42,080 Zo blijkt, en er is wat people-- 810 00:35:42,080 --> 00:35:46,080 wat googlen bevestigd laatste nacht-- hebben 4 miljard gouden munten gekregen, 811 00:35:46,080 --> 00:35:47,730 of wat, in Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Schijnbaar is er een manier om het spel te bedriegen, 813 00:35:49,860 --> 00:35:53,222 er is een bug of een functie, waarmee u gewoon toekomt heel veel punten. 814 00:35:53,222 --> 00:35:54,930 Maar het grootste mogelijke waarde volgens 815 00:35:54,930 --> 00:35:58,360 om dit screenshot van iemand die ik online hebben gevonden, is inderdaad, 4 miljard. 816 00:35:58,360 --> 00:35:59,240 >> Waarom is dat? 817 00:35:59,240 --> 00:36:03,040 Juist 4 miljard, waarschijnlijk omdat iemand besloten, 818 00:36:03,040 --> 00:36:05,500 die was het schrijven van dit spel, dat ze konden doen 4 miljard, 819 00:36:05,500 --> 00:36:07,340 iets, iets, iets, zoals de waarde I opgemaakt 820 00:36:07,340 --> 00:36:10,256 met de rekenmachine eerder, maar het is gewoon een beetje schoner voor de mens 821 00:36:10,256 --> 00:36:12,610 om het maximale aantal te zeggen van coins-- of studs, 822 00:36:12,610 --> 00:36:14,860 zoals ze het noemen them-- dat u kan verzamelen is 4 miljard. 823 00:36:14,860 --> 00:36:16,290 En ja, waarom is dit? 824 00:36:16,290 --> 00:36:20,310 Hoe is de LEGO-spel de uitvoering van de teller 825 00:36:20,310 --> 00:36:23,420 dat is het bijhouden van de aantal munten dat je hebt? 826 00:36:23,420 --> 00:36:24,266 Ze zijn met behulp van wat? 827 00:36:24,266 --> 00:36:26,390 Toeschouwer: Het stopt tellen na 4 miljard. 828 00:36:26,390 --> 00:36:27,720 DAVID J MALAN: Het stopt tellen na 4 miljard, 829 00:36:27,720 --> 00:36:29,525 wat betekent dat u afleiden, als programmeur, 830 00:36:29,525 --> 00:36:31,960 dat ze waarschijnlijk met een 32 bits getal. 831 00:36:31,960 --> 00:36:35,380 Net als de programmeur letterlijk getypte, int, in zijn of haar code, 832 00:36:35,380 --> 00:36:39,620 en dat is de aard van de variabele die ze gebruiken om iemands code op te slaan. 833 00:36:39,620 --> 00:36:42,230 Zodat er andere manifestaties van dit soort beperkingen. 834 00:36:42,230 --> 00:36:45,063 >> Dus ik heb niet dit game-- gespeeld en ik las over de geschiedenis 835 00:36:45,063 --> 00:36:48,470 bevestigen zoals much-- maar in de originele versie van Civilization, waarbij 836 00:36:48,470 --> 00:36:53,240 je blijkbaar met elkaar omgaan andere en kan oorlog of vrede, 837 00:36:53,240 --> 00:36:56,590 Gandhi moest een van zijn de meest rustige karakters, zoals ik 838 00:36:56,590 --> 00:36:59,280 begrijpen, in de eerste versie van Civilization. 839 00:36:59,280 --> 00:37:03,250 En in feite op een schaal van 1 tot 10, Zijn agressiviteit was gewoon een 1. 840 00:37:03,250 --> 00:37:05,620 Zo ooit zo mild agressief, blijkbaar. 841 00:37:05,620 --> 00:37:11,590 >> Maar op een gegeven moment kun je blijkbaar Installeer de democratie in de geografie. 842 00:37:11,590 --> 00:37:14,900 En als je de democratie te installeren in uw versie van het spel, 843 00:37:14,900 --> 00:37:17,320 dan is uw agressie niveau naar beneden gaat. 844 00:37:17,320 --> 00:37:18,460 Het is een goede zaak. 845 00:37:18,460 --> 00:37:20,890 Mensen zijn meer rustige blijkbaar in die situatie. 846 00:37:20,890 --> 00:37:23,190 Maar blijkbaar, iemand deed niet een, als, conditie 847 00:37:23,190 --> 00:37:24,780 in de oorspronkelijke versie van de code. 848 00:37:24,780 --> 00:37:30,650 >> Dus Gandhi's agressie niveau ging van positief 1, minus 2, om negatieve 1, 849 00:37:30,650 --> 00:37:33,840 maar het spel niet begrijpen negatieve getallen. 850 00:37:33,840 --> 00:37:38,680 Dus wat is er gebeurd was agressie Gandhi's level ging van 1 naar 0, om negatieve 1, 851 00:37:38,680 --> 00:37:40,900 waarin het effect van gehad wikkelen rond het feit 852 00:37:40,900 --> 00:37:44,690 de meest agressieve karakter in het spel, op een waarde van 255, 853 00:37:44,690 --> 00:37:46,630 op een schaal van 1-10. 854 00:37:46,630 --> 00:37:49,887 En sindsdien zijn er geweest meer incarnaties van dit spel, 855 00:37:49,887 --> 00:37:51,720 en ze hebben het gehouden als een soort paasei, 856 00:37:51,720 --> 00:37:53,870 dat Gandhi is blijkbaar zo vreselijk agressief. 857 00:37:53,870 --> 00:37:56,740 Maar het was het resultaat van een zeer eenvoudige programmering fout 858 00:37:56,740 --> 00:37:58,630 dat zeer vroege versie van het spel. 859 00:37:58,630 --> 00:38:02,860 >> Nu meer verontrustend, meer Onlangs heeft de Boeing 787 860 00:38:02,860 --> 00:38:05,720 gedocumenteerd als een bug, niet het soort apparaat 861 00:38:05,720 --> 00:38:07,340 u in het bijzonder willen een bug te hebben. 862 00:38:07,340 --> 00:38:10,130 En de symptomen, die ik gelezen hier, uit een artikel online, 863 00:38:10,130 --> 00:38:13,840 Dit was een model 787 vliegtuig die is permanent aangedreven 864 00:38:13,840 --> 00:38:18,030 voor 248 dagen kunnen alle verliezen wisselstroom, AC, 865 00:38:18,030 --> 00:38:20,850 stroom, als gevolg van de generator regeleenheden, 866 00:38:20,850 --> 00:38:23,330 GCUs tegelijkertijd gaan in fail-safe mode. 867 00:38:23,330 --> 00:38:26,790 Dus dit was een waarschuwing uitgegeven wanneer dit probleem werd ontdekt. 868 00:38:26,790 --> 00:38:28,750 Deze aandoening wordt veroorzaakt door een software teller, 869 00:38:28,750 --> 00:38:32,230 intern in de GCUs, zodat een integer of een variabele 870 00:38:32,230 --> 00:38:36,850 dat zal overflow na 248 dagen van continu vermogen. 871 00:38:36,850 --> 00:38:40,350 Boeing bezig het ontwikkelen van een software-upgrade die GCU 872 00:38:40,350 --> 00:38:42,350 zal de onveilige toestand te verhelpen. 873 00:38:42,350 --> 00:38:44,226 >> Zoveel als de raket scenario, waarbij 874 00:38:44,226 --> 00:38:46,850 ze hadden een soort van variabele dat was het tellen en het tellen, 875 00:38:46,850 --> 00:38:50,720 en het tellen, maar geleidelijk overlopen de grenzen van zijn vermogen, 876 00:38:50,720 --> 00:38:54,890 evenzo deden de verdomde vliegtuig een variabele overflow 877 00:38:54,890 --> 00:38:56,410 na voldoende tijd van hardlopen. 878 00:38:56,410 --> 00:38:59,240 En zo de tong-in-cheek manier van het werken rond deze kwestie 879 00:38:59,240 --> 00:39:04,400 is echt, reboot, je vliegtuig elke 247 dagen, dus dat het geheugen wordt uitgewist 880 00:39:04,400 --> 00:39:06,100 en de variabele gaat terug naar 0. 881 00:39:06,100 --> 00:39:09,410 Maar realiseren, is dit een zeer grote incarnatie van software, 882 00:39:09,410 --> 00:39:14,070 maar vooral omdat we horen over Apple's besturingssystemen gaan in auto's, 883 00:39:14,070 --> 00:39:18,030 en zelf-rijden auto's van Google, en een aantal incarnaties van software 884 00:39:18,030 --> 00:39:21,000 in ons dagelijks leven, tv's en horloges, en nog veel meer, 885 00:39:21,000 --> 00:39:24,950 realiseren werden omringd door software, allemaal geschreven door ons mensen. 886 00:39:24,950 --> 00:39:28,150 >> En zoals we allemaal snel ontdekken, het is heel gemakkelijk en zeer typische 887 00:39:28,150 --> 00:39:30,250 om fouten te maken bij het schrijven van software. 888 00:39:30,250 --> 00:39:32,745 En als je ze niet vangen, een aantal slechte dingen kunnen gebeuren. 889 00:39:32,745 --> 00:39:35,400 Nu soms sommige grappige dingen kunnen gebeuren, 890 00:39:35,400 --> 00:39:38,280 of op zijn minst soms hebben we weet wat slechtheid verwachten. 891 00:39:38,280 --> 00:39:41,550 Dus 0 gedeeld door 0, uit waardering school, is over het algemeen een slechte zaak. 892 00:39:41,550 --> 00:39:43,050 Het is niet gedefinieerd. 893 00:39:43,050 --> 00:39:46,440 En het blijkt out-- en laten we kijken of mijn mic kan deze afhalen up-- dat Apple 894 00:39:46,440 --> 00:39:47,790 had wat pret met dit onlangs. 895 00:39:47,790 --> 00:39:48,850 Dus ik heb een iPhone hier. 896 00:39:48,850 --> 00:39:54,160 Ik ga Siri te praten en vraag haar om me het antwoord op 0 gedeeld door 0. 897 00:39:54,160 --> 00:39:55,850 Wat is 0 gedeeld door 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> SIRI: Stel je voor dat je hebt 0 cookies, en u ze gelijk verdeeld 900 00:40:02,230 --> 00:40:03,540 onder 0 vrienden. 901 00:40:03,540 --> 00:40:05,810 Hoeveel cookies gaat elke persoon te krijgen? 902 00:40:05,810 --> 00:40:06,350 Zie? 903 00:40:06,350 --> 00:40:07,660 Het heeft geen zin. 904 00:40:07,660 --> 00:40:10,540 En Cookie Monster is triest dat er geen cookies. 905 00:40:10,540 --> 00:40:13,987 En je verdrietig dat zijn je hebt geen vrienden. 906 00:40:13,987 --> 00:40:15,570 DAVID J MALAN: Het is een soort van irritant. 907 00:40:15,570 --> 00:40:17,550 Dus dit is wat er net gezegd. 908 00:40:17,550 --> 00:40:21,380 Het is onbepaald, het is niet gedefinieerd, en inderdaad vele programmeertalen 909 00:40:21,380 --> 00:40:24,950 of, echt, compilers zal detecteren wanneer u in een programma, 910 00:40:24,950 --> 00:40:27,050 proberen te verdelen door 0 0. 911 00:40:27,050 --> 00:40:29,830 Leuker dan dit is echter dat blijkbaar, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 is op Twitter deze dagen. 913 00:40:31,270 --> 00:40:37,610 En hij antwoordde op deze, deze, dat is absoluut schattig. 914 00:40:37,610 --> 00:40:40,110 Maar laten we eens een snelle blik op een paar andere constructies, 915 00:40:40,110 --> 00:40:43,459 en dan zet een aantal van deze code te gebruiken, in goede manieren. 916 00:40:43,459 --> 00:40:45,250 Dus het blijkt, naast voor loops, er is 917 00:40:45,250 --> 00:40:49,174 zoiets als een tijdje loop, dat ziet verschillend is geïmplementeerd 918 00:40:49,174 --> 00:40:51,590 een beetje differently-- en we zullen uiteindelijk zien examples-- 919 00:40:51,590 --> 00:40:53,500 maar in zekere zin, het is eenvoudiger omdat het 920 00:40:53,500 --> 00:40:56,670 is het niet mogelijk om te initialiseren en bijgewerkt binnen de grenzen van de lus. 921 00:40:56,670 --> 00:40:57,794 U kunt nog steeds implementeren. 922 00:40:57,794 --> 00:41:01,219 Zodat u precies dezelfde dingen doen met een lus while, als met een lus, 923 00:41:01,219 --> 00:41:03,260 maar je syntax, ultimately-- zoals we zullen uiteindelijk 924 00:41:03,260 --> 00:41:04,551 see-- zal anders zijn. 925 00:41:04,551 --> 00:41:07,450 Er is zelfs een do while lus, die is eigenlijk een beetje anders, 926 00:41:07,450 --> 00:41:09,640 in dat terwijl een lus en een tijdje loop altijd 927 00:41:09,640 --> 00:41:13,005 controleren hun staat eerste, als je dit ding boven naar beneden te lezen, 928 00:41:13,005 --> 00:41:16,440 Het soort lijkt alsof het gaat om check it toestand laatste, want het is 929 00:41:16,440 --> 00:41:17,910 echt de laatste regel code. 930 00:41:17,910 --> 00:41:20,580 En inderdaad, dat gaat om bruikbaar te zijn in bepaalde programma's die we schrijven, 931 00:41:20,580 --> 00:41:23,746 als je gewoon blindelings iets te doen en uiteindelijk de conditie. 932 00:41:23,746 --> 00:41:25,205 Dat is niet per se een slechte zaak. 933 00:41:25,205 --> 00:41:27,912 Als we willen variabelen, kunnen we doen het in een paar verschillende manieren. 934 00:41:27,912 --> 00:41:30,290 En we zagen in de FoxTrot cartoon, een manier van doen, 935 00:41:30,290 --> 00:41:33,400 waar u uw variabele declareren, zoals int teller puntkomma, 936 00:41:33,400 --> 00:41:36,570 en dan later-- misschien de volgende lijn, misschien 10 lijnen later-- 937 00:41:36,570 --> 00:41:37,800 je eigenlijk initialiseren. 938 00:41:37,800 --> 00:41:42,230 Dus deze 2 regels code verklaren een variabele van het type int 939 00:41:42,230 --> 00:41:44,930 en noemen het toonbank, dus het geeft me genoeg bits naar een int houden. 940 00:41:44,930 --> 00:41:48,230 En dan uiteindelijk, het brengt de waarde 0 in de variabele. 941 00:41:48,230 --> 00:41:51,250 Het regelt de 0 en 1 in een patroon, dat we kennen van vorige week, 942 00:41:51,250 --> 00:41:53,260 staat voor het aantal die we kennen als 0. 943 00:41:53,260 --> 00:41:56,920 Of eerlijk gezegd, kunt u dit veel doen beknopter, net als dit. 944 00:41:56,920 --> 00:41:59,390 >> Nu hebben we ook de vermogen om functies aan te roepen. 945 00:41:59,390 --> 00:42:03,070 En in feite, hier is een lijn 2 programma, of een uittreksel daarvan, 946 00:42:03,070 --> 00:42:06,157 die ons in staat stelt om daadwerkelijk schrijf wat code die 947 00:42:06,157 --> 00:42:08,990 krijgt een string uit de user-- veel zoals onze vrijwilligers een moment ago-- 948 00:42:08,990 --> 00:42:11,320 opslaan van het resultaat in een variabele genaamd naam, 949 00:42:11,320 --> 00:42:15,470 en then-- net als met onze vrijwilligers met printf-- drukt die waarden 950 00:42:15,470 --> 00:42:19,180 door het passeren twee argumenten, de koord, gevolgd door de variabele 951 00:42:19,180 --> 00:42:20,781 genoemd, naam zelf. 952 00:42:20,781 --> 00:42:23,155 Dus laten we een kijkje nemen, voordat we terug naar Mario komen daar, 953 00:42:23,155 --> 00:42:26,010 op een paar nu, voorbeelden van. 954 00:42:26,010 --> 00:42:30,537 >> Ik ga verder open gaan up, laten we zeggen, de functie-0.c. 955 00:42:30,537 --> 00:42:33,120 En zoals altijd, deze code is beschikbaar op de website van de cursus, 956 00:42:33,120 --> 00:42:35,660 dus je kunt meespelen op thuis en kijk naar het later. 957 00:42:35,660 --> 00:42:40,400 Maar hier is het programma in het essentie, van regel 17 tot 22. 958 00:42:40,400 --> 00:42:43,270 Het hoofdprogramma is waar de programma gaat altijd om te beginnen. 959 00:42:43,270 --> 00:42:46,980 Dit programma, blijkbaar, gaat uit te printen uw naam, dikke darm. 960 00:42:46,980 --> 00:42:50,320 Het is vervolgens naar GetString noemen, net zoals we deden met onze vrijwilligers. 961 00:42:50,320 --> 00:42:53,365 En dan, dit is interessant, het gaat om PrintName noemen. 962 00:42:53,365 --> 00:42:56,490 Het blijkt, al die tijd is er lijkt een functie genaamd PrintName zijn. 963 00:42:56,490 --> 00:42:57,614 Dat drukt de naam van iemand. 964 00:42:57,614 --> 00:43:01,210 We hebben geen behoefte om printf te gebruiken van weleer, er is PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Maar dat is misleidend omdat PrintName niet 966 00:43:03,500 --> 00:43:06,760 komen met C. mensen niet uitvinden ongeveer 40 of 50 jaar geleden, 967 00:43:06,760 --> 00:43:07,990 Ik heb, in plaats daarvan. 968 00:43:07,990 --> 00:43:10,330 En in feite, als ik blader verder omlaag, bericht 969 00:43:10,330 --> 00:43:14,200 hoe ik mijn eigen kunnen schrijven functies in C. We zullen uiteindelijk 970 00:43:14,200 --> 00:43:16,319 uitleggen waarom we blijven zeggen, leegte, in een paar plaatsen, 971 00:43:16,319 --> 00:43:18,110 maar voor vandaag, laten we kijk maar naar de naam. 972 00:43:18,110 --> 00:43:20,905 >> Op lijn 24, als je wilt creëer je eigen functie, 973 00:43:20,905 --> 00:43:22,780 je letterlijk schrijf de naam van de functie. 974 00:43:22,780 --> 00:43:24,340 Ik koos PrintName. 975 00:43:24,340 --> 00:43:26,159 Haakjes, u vervolgens welke soorten 976 00:43:26,159 --> 00:43:28,450 ingangen, en hoeveel u wil deze functie over te nemen. 977 00:43:28,450 --> 00:43:31,906 In dit geval wil ik nemen 1 variabele genaamd, naam, 978 00:43:31,906 --> 00:43:34,030 en het gaat te zijn het type, touwtje, dus het gaat 979 00:43:34,030 --> 00:43:35,780 sommige opeenvolging van karakters. 980 00:43:35,780 --> 00:43:39,170 En dan, dit program-- net als in Scratch, 981 00:43:39,170 --> 00:43:42,590 kunt u aangepaste puzzel hebben pieces-- gaat deze gewoonte gedrag. 982 00:43:42,590 --> 00:43:46,760 Het gaat om printf noemen passeren in, hello, placeholder, 983 00:43:46,760 --> 00:43:49,110 en dan gaat het om aan te sluiten in welke de gebruiker genoemd. 984 00:43:49,110 --> 00:43:51,450 >> Dit is dus een voorbeeld van wat een computer wetenschapper zou 985 00:43:51,450 --> 00:43:55,090 oproep abstractie of functionele decompositie, die gewoon 986 00:43:55,090 --> 00:43:58,110 chique manieren saying-- Is als je dit hoge niveau idee, 987 00:43:58,110 --> 00:44:01,569 zoals ik wil functionaliteit die drukt iemands naam, absoluut u 988 00:44:01,569 --> 00:44:04,360 kan letterlijk schrijven printf en vervolgens pas in de argumenten die je wilt, 989 00:44:04,360 --> 00:44:07,340 en het programma zal werken, zoals zij heeft sinds woensdag. 990 00:44:07,340 --> 00:44:10,510 Maar je kunt beginnen met het abstracte weg het begrip afdrukken van een naam. 991 00:44:10,510 --> 00:44:13,270 Je kan het een naam geven, zoals PrintName, en dit 992 00:44:13,270 --> 00:44:15,280 is dit idee van gelaagdheid van week 0. 993 00:44:15,280 --> 00:44:19,910 >> Voortaan weet ik en je niet te weten of schelen hoe PrintName wordt geïmplementeerd. 994 00:44:19,910 --> 00:44:22,470 Ja, het maakt gebruik van printf, misschien niet, wie weet wat er gebruikt? 995 00:44:22,470 --> 00:44:23,410 Dat boeit niemand? 996 00:44:23,410 --> 00:44:26,034 Nu ik heb het hier op, in plaats van hier naar beneden. 997 00:44:26,034 --> 00:44:28,700 En inderdaad, als onze programma's te krijgen meer geavanceerde en verfijnde, 998 00:44:28,700 --> 00:44:32,550 we gaan om te blijven nemen voor lief dat lager niveau puzzelstukjes bestaan. 999 00:44:32,550 --> 00:44:34,780 Omdat we ze schreef of iemand anders deed, dus 1000 00:44:34,780 --> 00:44:36,910 dat we dan kunnen bouwen op de top van hen. 1001 00:44:36,910 --> 00:44:39,430 Laten we eens een kijkje op deze variant functioneren één. 1002 00:44:39,430 --> 00:44:41,780 >> Dus dit is een beetje meer geavanceerde, maar het blijkt 1003 00:44:41,780 --> 00:44:44,570 dat in de bibliotheek CS50's, er is maar een getint functie. 1004 00:44:44,570 --> 00:44:47,720 We wisten niet dat, jaren geleden, om implementeren van een GetPositiveInt functie. 1005 00:44:47,720 --> 00:44:50,970 En dat is een beetje vervelend, want als jullie zijn het schrijven van een programma, waarin 1006 00:44:50,970 --> 00:44:53,325 je wilt een positieve krijgen geheel getal van de gebruiker, 1007 00:44:53,325 --> 00:44:55,010 je absoluut gebruiken getint. 1008 00:44:55,010 --> 00:44:57,840 En je kunt absoluut contact op met de conditie en misschien een lus 1009 00:44:57,840 --> 00:45:00,320 indien deze int groter dan 0 en schreeuwen tegen de gebruiker 1010 00:45:00,320 --> 00:45:02,699 als hij of zij niet geven u een positief getal. 1011 00:45:02,699 --> 00:45:04,740 Maar laten we bouwen deze gebouw zelf blokkeren, een, 1012 00:45:04,740 --> 00:45:06,555 aangepaste Scratch stuk, als je wil. 1013 00:45:06,555 --> 00:45:08,680 Ik ga een programma Hier die uiteindelijk ik 1014 00:45:08,680 --> 00:45:11,780 willen in staat zijn om te bellen GetPositiveInt, en ik wil zijn 1015 00:45:11,780 --> 00:45:14,200 in staat om uit te drukken wat dat int is. 1016 00:45:14,200 --> 00:45:16,240 Maar dit wordt nu geabstraheerd weg. 1017 00:45:16,240 --> 00:45:19,050 Het is gewoon gekregen van een hoog niveau naam die zegt wat het doet, 1018 00:45:19,050 --> 00:45:21,780 dat is geweldig, want het is zeer intuïtief nu te lezen. 1019 00:45:21,780 --> 00:45:24,710 En als ik dat doe schelen wat er onder de kap, laat me naar beneden scrollen. 1020 00:45:24,710 --> 00:45:27,140 En het is een beetje intimiderend eerst, met name 1021 00:45:27,140 --> 00:45:29,470 als dit je eerste programma, maar laten we eens een kijkje nemen. 1022 00:45:29,470 --> 00:45:32,860 >> Ik ben niet meer zeggen, leegte, want het blijkt functies 1023 00:45:32,860 --> 00:45:34,777 net als GetString, kan terug een waarde voor mij. 1024 00:45:34,777 --> 00:45:36,610 Ze hebben niet alleen om af te drukken op het scherm, 1025 00:45:36,610 --> 00:45:38,410 ze daadwerkelijk kunnen overhandigen me iets terug. 1026 00:45:38,410 --> 00:45:41,535 En terwijl voor PrintName, Ik heb niets terug nodig. 1027 00:45:41,535 --> 00:45:44,160 Ik als bijwerking nodig iets te zien op het scherm, 1028 00:45:44,160 --> 00:45:46,570 maar ik heb een mens niet nodig om me terug te geven iets. 1029 00:45:46,570 --> 00:45:48,840 Hier, met GetPositiveInt, zoals met getint, 1030 00:45:48,840 --> 00:45:50,640 Ik wil terug worden ingeleverd iets. 1031 00:45:50,640 --> 00:45:53,220 Dus ik zeg niet, leegte, op lijn 23, maar int, 1032 00:45:53,220 --> 00:45:55,570 dat zegt, deze functie dat ik schrijf, 1033 00:45:55,570 --> 00:45:58,860 genaamd GetPositiveInt gaat geef me terug een geheel getal, niet niets, 1034 00:45:58,860 --> 00:45:59,890 niet nietig. 1035 00:45:59,890 --> 00:46:03,280 >> Ondertussen gaat het niet nemen ingangen, dus ik heb, een soort van, omgekeerd is. 1036 00:46:03,280 --> 00:46:08,280 Ik geef elke GetPositiveInt input, ik wil het aan mij zijn output te geven. 1037 00:46:08,280 --> 00:46:09,800 En wat gebeurt er nu? 1038 00:46:09,800 --> 00:46:11,640 Dus hier is hoe ik een variabele kan verklaren. 1039 00:46:11,640 --> 00:46:15,090 Ik heb het gedaan buiten de lus, om redenen die we zullen uiteindelijk zien, 1040 00:46:15,090 --> 00:46:17,700 maar dit gewoon geeft me 32 bit genoemd, n, 1041 00:46:17,700 --> 00:46:20,952 en ik heb pre-het bepalen ze integer slaan. 1042 00:46:20,952 --> 00:46:23,660 En hier is dat, doen terwijl construct, en dit is waarom het nuttig is. 1043 00:46:23,660 --> 00:46:26,700 Dit letterlijk doen, terwijl n kleiner is dan 1. 1044 00:46:26,700 --> 00:46:28,030 Dus laten we zien wat er gebeurt. 1045 00:46:28,030 --> 00:46:30,760 Ik print, gelieve geef me een positieve int. 1046 00:46:30,760 --> 00:46:34,300 Ik krijg dan een int, met CS50's functioneren en opgeslagen in n. 1047 00:46:34,300 --> 00:46:38,990 >> En dan, wat regel code waarschijnlijk wordt uitgevoerd naast, logisch? 1048 00:46:38,990 --> 00:46:41,890 Welke lijn nummer? 1049 00:46:41,890 --> 00:46:42,571 Ja, dus 31. 1050 00:46:42,571 --> 00:46:45,320 Je zou het niet weten dit totdat je hebt verteld of soort afleiden dat, 1051 00:46:45,320 --> 00:46:45,986 maar dat is waar. 1052 00:46:45,986 --> 00:46:48,280 Het gaat boven naar beneden en dan blijft herhalen. 1053 00:46:48,280 --> 00:46:55,840 Dus als ik zeg, het nummer hebt getypt negatieve 1, n is minder dan negatieve 1? 1054 00:46:55,840 --> 00:46:56,340 Ja. 1055 00:46:56,340 --> 00:46:58,470 Omdat negatieve 1 kleiner is dan 1. 1056 00:46:58,470 --> 00:46:59,510 Dus wat er moet gebeuren? 1057 00:46:59,510 --> 00:47:03,260 Ik ga dit doen terwijl n kleiner is dan 1, 1058 00:47:03,260 --> 00:47:05,760 dus ik ga terug naar lijn 28 gaan. 1059 00:47:05,760 --> 00:47:09,530 >> En elke tijd-- en laten draaien dit-- maken functie 1 om het te compileren, 1060 00:47:09,530 --> 00:47:11,340 en nu dot slash functie 1. 1061 00:47:11,340 --> 00:47:14,280 Als ik typ negatief 1, het is gaande te houden schreeuwend op me 1062 00:47:14,280 --> 00:47:17,530 totdat ik samenwerken omdat elke mijn input is dan 1 1063 00:47:17,530 --> 00:47:20,070 en als het terwijl minder dan 1, Ik ga blijven doen. 1064 00:47:20,070 --> 00:47:24,240 Als ik eindelijk geef het een nummer, zoals 50, gelukkig, het zegt, bedankt voor de 50. 1065 00:47:24,240 --> 00:47:24,970 Waarom? 1066 00:47:24,970 --> 00:47:30,640 Want zodra n minimaal 1, stop ik vast komen te zitten in deze lus, 1067 00:47:30,640 --> 00:47:33,840 en deze nieuwe zoekwoord vandaag, terugkeer, doet letterlijk dat. 1068 00:47:33,840 --> 00:47:36,800 Dus ik heb net geïmplementeerd, in een gevoel, het equivalent van GetString, 1069 00:47:36,800 --> 00:47:40,590 waar ik overhandigen terug naar wie is het gebruik van me, wat waarde. 1070 00:47:40,590 --> 00:47:42,820 Het hoeft niet te worden een string, het is een int. 1071 00:47:42,820 --> 00:47:44,990 Dus een eenvoudige, snelle Bijvoorbeeld, maar we zullen binnenkort 1072 00:47:44,990 --> 00:47:47,930 zie een aantal meer geavanceerde versies nog steeds. 1073 00:47:47,930 --> 00:47:53,882 In feite, laten we eens een kijkje nemen op een numeriek die return.c genoemd. 1074 00:47:53,882 --> 00:47:55,590 En dit is eigenlijk een beetje eenvoudiger. 1075 00:47:55,590 --> 00:47:59,010 Dus het doel van dit programma in leven-- laten compileren en voer het uit, 1076 00:47:59,010 --> 00:48:03,090 dus zorg terugkeer, dot slash, return-- bericht 1077 00:48:03,090 --> 00:48:05,530 het programma kubussen gewoon de waarde 2. 1078 00:48:05,530 --> 00:48:08,410 Het is nogal dom, het is moeilijk code, heeft het geen input te nemen, 1079 00:48:08,410 --> 00:48:12,220 maar het toont wel aan een ander functie die ik zelf heb geschreven. 1080 00:48:12,220 --> 00:48:15,760 Dus hier heb ik verklaard variabele, genaamd x, van het type int, 1081 00:48:15,760 --> 00:48:17,840 gelijk aan het aantal 2, volkomen willekeurig. 1082 00:48:17,840 --> 00:48:19,530 Dit is slechts een paar pluizige afdrukken. 1083 00:48:19,530 --> 00:48:23,070 Het zegt x is nu, en dergelijke zodanig cubing dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 En de magie is blijkbaar in de lijn 21. 1085 00:48:26,390 --> 00:48:30,120 Ik bel een functie genaamd, kubus, Ik ben overhandigen het een vel papier 1086 00:48:30,120 --> 00:48:32,890 met het nummer 2 geschreven, en welke waarde, wiskundig, 1087 00:48:32,890 --> 00:48:34,860 wil ik uit te komen? 1088 00:48:34,860 --> 00:48:36,570 Net zoals een sanity check? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Rechts? 1091 00:48:37,570 --> 00:48:40,160 Ik wil 2 blokjes terug, 2 de kracht van 3, dus 8 terug. 1092 00:48:40,160 --> 00:48:42,570 >> Dus waar is kubus geïmplementeerd? 1093 00:48:42,570 --> 00:48:44,349 Nou, merken dat het hier geïmplementeerd beneden. 1094 00:48:44,349 --> 00:48:47,140 En net als voorheen, logisch, hoewel de syntax waarschijnlijk 1095 00:48:47,140 --> 00:48:49,320 erg nieuw voor velen van jullie, Ik wil deze functie 1096 00:48:49,320 --> 00:48:51,780 bij de hand me terug een vel papier met een int erop. 1097 00:48:51,780 --> 00:48:53,990 Dus ik heb een int, de naam is willekeurig, 1098 00:48:53,990 --> 00:48:55,530 maar gunstig genoemd kubus. 1099 00:48:55,530 --> 00:48:58,430 De invoer naar het, n van typt integer, dus dat is 1100 00:48:58,430 --> 00:49:00,800 hoe ik kan passeren van het aantal 2 op een vel papier. 1101 00:49:00,800 --> 00:49:03,910 En dan blijkt C steunen wiskunde, zodat u niet hoeft x voor tijd, 1102 00:49:03,910 --> 00:49:06,680 je gewoon gebruik maken van de asterisk voor vermenigvuldiging. 1103 00:49:06,680 --> 00:49:11,070 En dit geeft n maal n keer n, dat is gewoon een waarde in blokjes. 1104 00:49:11,070 --> 00:49:12,840 >> Dus waar gaan we heen met dit alles? 1105 00:49:12,840 --> 00:49:14,570 Dit is zeker een wervelwind tour, wees gerust, 1106 00:49:14,570 --> 00:49:16,410 dat de super secties en in probleem set 1, 1107 00:49:16,410 --> 00:49:18,368 u zult liep door dit alles des. 1108 00:49:18,368 --> 00:49:22,490 En in probleem set 1, zullen we de overgang uit de grafische wereld van Scratch 1109 00:49:22,490 --> 00:49:25,640 iets meer command line in C. Maar we inspiratie 1110 00:49:25,640 --> 00:49:27,680 van deze hier spel van weleer, waarin 1111 00:49:27,680 --> 00:49:31,591 met behulp van C en de standaard editie van de p set je Mario's piramide te implementeren. 1112 00:49:31,591 --> 00:49:34,340 En in de hacker editie van de p set, als je daarvoor kiest om te kiezen, 1113 00:49:34,340 --> 00:49:38,280 je zult een beetje meer uit te voeren uitdagend piramide met twee pieken. 1114 00:49:38,280 --> 00:49:41,239 U zult ook een werktuig algoritme, een hebzuchtige algoritme. 1115 00:49:41,239 --> 00:49:43,030 Het blijkt er's enkele interessante logica 1116 00:49:43,030 --> 00:49:45,640 achter het proces van running station een kassier 1117 00:49:45,640 --> 00:49:47,410 en eigenlijk overhandigen iemand terug veranderen. 1118 00:49:47,410 --> 00:49:50,410 Er is een algoritme dat is vrij eenvoudig, dat je misschien zelfs 1119 00:49:50,410 --> 00:49:53,576 intuïtief te begrijpen wanneer je voor het eerst gelezen het-- beseffen dat is wat ik heb altijd 1120 00:49:53,576 --> 00:49:57,110 gedaan elke keer dat ik iemand wat gezien geld back-- waarmee u altijd 1121 00:49:57,110 --> 00:50:00,679 verminderen het aantal notities op papier of metalen munten 1122 00:50:00,679 --> 00:50:02,220 dat je overhandigen aan de gebruiker. 1123 00:50:02,220 --> 00:50:04,610 En natuurlijk is dwingend want als je naar CVS of wat, 1124 00:50:04,610 --> 00:50:06,430 je wilt niet overhandigd worden een hele hoop van degenen 1125 00:50:06,430 --> 00:50:07,596 of een hele hoop centen. 1126 00:50:07,596 --> 00:50:10,120 U wilt de minste munten, waarschijnlijk, mogelijk. 1127 00:50:10,120 --> 00:50:13,070 >> Ten slotte, zult u ook worden aangevochten te ploeteren in de wereld van het water 1128 00:50:13,070 --> 00:50:17,220 en eigenlijk een appreciatie een mapping tussen stroomsnelheden, 1129 00:50:17,220 --> 00:50:19,890 van willen, water in een douche, hoeveel water wordt gebruikt. 1130 00:50:19,890 --> 00:50:22,640 En de toespeling daarin, zal deze clip hier te zijn, 1131 00:50:22,640 --> 00:50:24,840 die wij op je uiteindelijk voor slechts 60 seconden, dat 1132 00:50:24,840 --> 00:50:29,070 schetst een beeld van low-flow douchekoppen. 1133 00:50:29,070 --> 00:50:30,886 >> [VIDEO AFSPELEN] 1134 00:50:30,886 --> 00:50:31,385 -Prima. 1135 00:50:31,385 --> 00:50:32,774 Ik heb hier alles. 1136 00:50:32,774 --> 00:50:35,800 Ik kreeg de Cyclone F-serie, Hydra, Jetflow, Stockholm 1137 00:50:35,800 --> 00:50:37,660 Supersteam, noem maar op. 1138 00:50:37,660 --> 00:50:39,265 >> -En Wat raden jullie aan? 1139 00:50:39,265 --> 00:50:40,460 >> -Wat zoek je? 1140 00:50:40,460 --> 00:50:41,300 >> -power Man. 1141 00:50:41,300 --> 00:50:42,285 Macht. 1142 00:50:42,285 --> 00:50:42,910 -achtige Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Dat Is voor straling. 1144 00:50:44,520 --> 00:50:46,335 -Dat klopt. 1145 00:50:46,335 --> 00:50:48,275 -Nu Wat is dit? 1146 00:50:48,275 --> 00:50:49,704 -Dat Is het Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Ik denk niet dat één verkopen. 1148 00:50:50,620 --> 00:50:51,700 >> -maar Dat is wat we willen. 1149 00:50:51,700 --> 00:50:52,680 Het is een commando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -geen Geloof me. 1151 00:50:53,882 --> 00:50:55,090 Het wordt alleen gebruikt in het circus. 1152 00:50:55,090 --> 00:50:56,512 Het is voor de olifanten. 1153 00:50:56,512 --> 00:50:59,356 >> -Ik Betalen niets. 1154 00:50:59,356 --> 00:51:01,252 >> -Wat Over Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -Hij Kon niet omgaan met dat. 1156 00:51:02,760 --> 00:51:04,910 Hij is delicaat. 1157 00:51:04,910 --> 00:51:05,750 Zeker weten. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [END AFSPELEN] 1160 00:51:37,320 --> 00:51:37,700 DAVID J MALAN: Oké. 1161 00:51:37,700 --> 00:51:38,820 Dat is als voor de CS50. 1162 00:51:38,820 --> 00:51:40,050 We zien je volgende week. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> SPEAKER 1: [? Scully?], [? Ian,?] voor zover dit outro project, 1165 00:51:49,029 --> 00:51:50,362 wat hebben jullie verzinnen? 1166 00:51:50,362 --> 00:51:51,990 >> Luidspreker 2: Nou, we hebben gezien Het diverse gedachte, 1167 00:51:51,990 --> 00:51:53,250 en we denken dat de beste manier to-- 1168 00:51:53,250 --> 00:51:53,660 >> SPEAKER 3: Mag ik? 1169 00:51:53,660 --> 00:51:54,326 >> Luidspreker 2: Ja. 1170 00:51:54,326 --> 00:51:56,360 Door alle middelen, eigenlijk. 1171 00:51:56,360 --> 00:51:59,425 >> SPEAKER 3: Dus ik denk dat we kunnen samenvatten ons idee 1172 00:51:59,425 --> 00:52:05,450 voor de outro's met één word-- niets. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID J MALAN: Niets? 1175 00:52:10,409 --> 00:52:11,200 SPEAKER 3: Niets. 1176 00:52:11,200 --> 00:52:12,990 DAVID J MALAN: Wat betekent dat? 1177 00:52:12,990 --> 00:52:16,260 SPEAKER 3: De outro's zijn over niets. 1178 00:52:16,260 --> 00:52:21,720 Luidspreker 2: Nou, ik bedoel, in de filosofie, Ik bedoel, niets is altijd wel iets. 1179 00:52:21,720 --> 00:52:24,200 SPEAKER 1: Dus what's-- wat is het uitgangspunt? 1180 00:52:24,200 --> 00:52:25,720 SPEAKER 3: Dus het is net als het leven. 1181 00:52:25,720 --> 00:52:26,680 OK. 1182 00:52:26,680 --> 00:52:28,294 Wat heb je vandaag gedaan? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID J MALAN: ik opstond, had ontbijt, en kwam te werken. 1184 00:52:31,811 --> 00:52:34,056 >> SPEAKER 3: Dat is een outro. 1185 00:52:34,056 --> 00:52:36,806 Luidspreker 2: Maar, ik bedoel, moet niet er iets gebeuren om hem the-- 1186 00:52:36,806 --> 00:52:37,889 SPEAKER 3: Nee, nee, nee, nee. 1187 00:52:37,889 --> 00:52:40,220 Niks gebeurt. 1188 00:52:40,220 --> 00:52:42,910 >> SPEAKER 1: Dus waarom zijn we kijken? 1189 00:52:42,910 --> 00:52:46,956 >> SPEAKER 3: Omdat het is een outro voor CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID J MALAN: Nog niet. 1191 00:52:48,652 --> 00:52:49,151