1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [Speel van musiek] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 David J. Malan Alle regte. 5 00:00:12,660 --> 00:00:15,590 Dit is CS50, en dit is die begin van die week twee. 6 00:00:15,590 --> 00:00:19,120 So laat ons begin vandag met 'n fout. 7 00:00:19,120 --> 00:00:20,974 'N fout, natuurlik, is 'n fout in 'n program, 8 00:00:20,974 --> 00:00:22,890 en jy sal baie kry vertroud is met die konsep 9 00:00:22,890 --> 00:00:26,050 As jy nog nooit geprogrammeer voor. pset0 en nou pset1. 10 00:00:26,050 --> 00:00:29,280 Maar laat ons kyk na iets 'n bietjie eenvoudig op die eerste. 11 00:00:29,280 --> 00:00:32,189 Hierdie program hier dat ek gooi saam in advance, 12 00:00:32,189 --> 00:00:37,280 en ek beweer dat dit moet druk 10 sterre op die skerm met printf, 13 00:00:37,280 --> 00:00:41,020 maar dit is blykbaar karretjie in een of ander manier. 14 00:00:41,020 --> 00:00:45,370 >> Gegewe dat spesifikasie wat dit moet druk 10 sterre, 15 00:00:45,370 --> 00:00:50,230 Maar dit beteken nie glo, wat sou jy sê is die fout? 16 00:00:50,230 --> 00:00:52,004 Ja? 17 00:00:52,004 --> 00:00:54,420 So dit is 'n af deur een fout, en wat bedoel jy daarmee? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 OK. 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 Uitstekend. 22 00:01:10,410 --> 00:01:13,930 Dus het ons 'n gespesifiseerde begin waarde van nul vir i, 23 00:01:13,930 --> 00:01:18,399 en ons het 'n gespesifiseerde n waarde van 10, maar ons het minder as of gelyk aan gebruik. 24 00:01:18,399 --> 00:01:21,190 En die rede dat dit twee karakters en nie net een simbool, 25 00:01:21,190 --> 00:01:22,630 soos in 'n wiskunde boek, is dat jy nie het nie 26 00:01:22,630 --> 00:01:24,880 'n manier om die een karakter ekwivalent. 27 00:01:24,880 --> 00:01:28,450 >> So dit beteken dat minder as, maar As jy begin tel op nul, 28 00:01:28,450 --> 00:01:31,690 maar jy al die pad tel om deur middel van en gelyk aan 10, 29 00:01:31,690 --> 00:01:34,170 jy natuurlik gaan tel 11 dinge in totaal. 30 00:01:34,170 --> 00:01:35,900 En so gaan jy 11 sterre te druk. 31 00:01:35,900 --> 00:01:37,990 So, wat dalk 'n oplossing hiervoor wees? 32 00:01:37,990 --> 00:01:39,970 Ja? 33 00:01:39,970 --> 00:01:43,980 >> Dus net pas die minder as of gelyk aan net minder as wees, 34 00:01:43,980 --> 00:01:46,250 en daar is, ek eis, miskien 'n ander oplossing, ook. 35 00:01:46,250 --> 00:01:47,210 Wat kan jy nog doen? 36 00:01:47,210 --> 00:01:48,590 Ja? 37 00:01:48,590 --> 00:01:53,660 >> So begin gelykstaande dit tot 1, en laat die minder as of gelyk aan. 38 00:01:53,660 --> 00:01:56,187 En eerlik ek sou beweer dat, vir 'n tipiese menslike, 39 00:01:56,187 --> 00:01:57,770 hierdie is waarskynlik meer eenvoudig. 40 00:01:57,770 --> 00:02:00,280 Begin tel op 1 en tel deur 10. 41 00:02:00,280 --> 00:02:01,690 In wese doen wat jy bedoel. 42 00:02:01,690 --> 00:02:04,010 >> Maar die werklikheid is in ontwikkeling, soos ons gesien het, 43 00:02:04,010 --> 00:02:07,598 rekenaar wetenskaplikes en programmeerders algemeen nie begin tel by nul. 44 00:02:07,598 --> 00:02:09,389 En so is dit goed een keer jy gebruik om dit te. 45 00:02:09,389 --> 00:02:12,640 Jou toestand sal oor die algemeen wees iets soos minder as. 46 00:02:12,640 --> 00:02:14,910 So eenvoudig 'n logiese fout wat ons kon nou 47 00:02:14,910 --> 00:02:17,990 los en uiteindelik heropstel hierdie en net 10 kry. 48 00:02:17,990 --> 00:02:19,610 >> Wel hoe oor hierdie fout hier? 49 00:02:19,610 --> 00:02:24,200 Hier, weer, ek beweer dat ek 'n doel van die druk van 10 stars-- 50 00:02:24,200 --> 00:02:28,140 een per lyn hierdie keer, maar dit nie doen nie. 51 00:02:28,140 --> 00:02:30,940 Voordat ons voor wat Die oplossing is, wat beteken dit 52 00:02:30,940 --> 00:02:34,640 druk visueel as ek op te stel en die uitvoering van hierdie program dink jy? 53 00:02:34,640 --> 00:02:35,140 Ja? 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> Star. 56 00:02:38,860 --> 00:02:41,690 So al die sterre op die dieselfde lyn is wat ek gehoor het, 57 00:02:41,690 --> 00:02:43,391 en dan die nuwe lyn karakter. 58 00:02:43,391 --> 00:02:44,140 So laat ons probeer dit. 59 00:02:44,140 --> 00:02:48,710 So maak karretjie-1, betree, en ek sien die klang opdrag 60 00:02:48,710 --> 00:02:50,090 dat ons het gepraat oor die laaste keer. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, en ja, ek sien al 10 sterre op dieselfde lyn, selfs al het ek beweer 62 00:02:55,180 --> 00:02:58,690 in my spesifikasie net 'n opmerking bo die kode wat ek bedoel een per te doen 63 00:02:58,690 --> 00:02:59,230 lyn. 64 00:02:59,230 --> 00:03:00,580 Maar dit lyk reg. 65 00:03:00,580 --> 00:03:04,620 >> Nou lyn 15 lyk dit asof ek druk van 'n ster, en dan reël 16 66 00:03:04,620 --> 00:03:06,620 dit lyk asof ek druk 'n nuwe lyn karakter, 67 00:03:06,620 --> 00:03:09,560 en hulle is albei ingekeep so Ek is binnekant van die loop duidelik. 68 00:03:09,560 --> 00:03:13,610 So moet ek nie doen ster, nuwe lyn, ster, nuwe lyn, ster, nuwe lyn? 69 00:03:13,610 --> 00:03:14,110 Ja? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Ja, in teenstelling met 'n taal soos Python, as jy vertroud is, 72 00:03:21,240 --> 00:03:23,540 inkeping nie saak na die rekenaar. 73 00:03:23,540 --> 00:03:25,280 Dit is belangrik om eers die mens. 74 00:03:25,280 --> 00:03:29,860 So, terwyl hier Ek het uitgevind lyne 15 en 16-- daardie pragtige lyk, 75 00:03:29,860 --> 00:03:31,330 Maar die rekenaar nie omgee nie. 76 00:03:31,330 --> 00:03:34,640 Die rekenaar omgee eintlik met krulhakies 77 00:03:34,640 --> 00:03:36,310 rondom hierdie reëls van die kode. 78 00:03:36,310 --> 00:03:39,520 >> Sodat dit clear-- net soos in Scratch-- dat die twee reëls van die kode 79 00:03:39,520 --> 00:03:40,450 uitgevoer moet word. 80 00:03:40,450 --> 00:03:44,390 Soos een van daardie geel Scratch legkaart stukke weer en weer en weer. 81 00:03:44,390 --> 00:03:50,920 >> So as ek nou weer uit te voer hierdie program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Ek het 'n fout nou. 83 00:03:51,770 --> 00:03:54,212 Wat het ek vergeet om te doen? 84 00:03:54,212 --> 00:03:55,420 Ja, so ek het nie stel nie. 85 00:03:55,420 --> 00:03:56,740 So maak karretjie-2. 86 00:03:56,740 --> 00:03:59,840 Geen sodanige lêer want ek het nie eintlik stel die tweede weergawe. 87 00:03:59,840 --> 00:04:04,860 So nou interessant swart variable-- nie 2. 88 00:04:04,860 --> 00:04:05,510 Ons doen 1. 89 00:04:05,510 --> 00:04:11,050 Maak karretjie-1-- ./buggy-1-- en nou elkeen van hulle is op dieselfde lyn. 90 00:04:11,050 --> 00:04:13,880 >> Nou is daar 'n uitsondering op hierdie sogenaamde eis van my 91 00:04:13,880 --> 00:04:15,520 wat jy nodig het om hierdie krulhakies. 92 00:04:15,520 --> 00:04:20,160 Wanneer is dit eintlik OK-- as jy het opgemerk in artikel of textbooks-- 93 00:04:20,160 --> 00:04:22,130 die krulhakies te laat? 94 00:04:22,130 --> 00:04:22,630 Ja? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Presies. 97 00:04:26,870 --> 00:04:28,940 Wanneer daar is net een reël van die kode wat jy 98 00:04:28,940 --> 00:04:32,830 geassosieer wil word met die lus as in ons eerste voorbeeld. 99 00:04:32,830 --> 00:04:36,380 Dit is heeltemal wettig die krulhakies te laat 100 00:04:36,380 --> 00:04:40,310 net as 'n soort van 'n gerief van die vertaler te jou. 101 00:04:40,310 --> 00:04:40,810 Ja? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Goeie vraag. 104 00:04:43,930 --> 00:04:45,500 Sou dit oorweeg word om 'n styl fout? 105 00:04:45,500 --> 00:04:49,340 Ons wil promote-- as in CS50 styl gids, die URL waarvoor 106 00:04:49,340 --> 00:04:51,926 is in pset1-- wat altyd gebruik die krulhakies. 107 00:04:51,926 --> 00:04:53,550 Seker as jy nuut is tot ontwikkeling. 108 00:04:53,550 --> 00:04:56,800 Die werklikheid is dat ons nie gaan jy te verbied 109 00:04:56,800 --> 00:04:58,680 te doen om hierdie geriewe. 110 00:04:58,680 --> 00:05:00,846 Maar as jy net om in die gang van dinge, 111 00:05:00,846 --> 00:05:04,020 absoluut net altyd die krullerige draadjies totdat jy die hang van dit. 112 00:05:04,020 --> 00:05:04,640 Goeie vraag. 113 00:05:04,640 --> 00:05:05,320 >> Alle regte. 114 00:05:05,320 --> 00:05:07,660 So wat was 'n fout. 115 00:05:07,660 --> 00:05:09,190 Ten minste in iets redelik eenvoudig. 116 00:05:09,190 --> 00:05:11,260 En tog is jy dalk dink hierdie is redelik basiese, reg? 117 00:05:11,260 --> 00:05:13,635 Dit is 'n soort van die eerste week om te kyk na die taal 118 00:05:13,635 --> 00:05:14,890 soos, sien jou foute daarin. 119 00:05:14,890 --> 00:05:17,250 Maar die werklikheid is hierdie eintlik verteenwoordiger 120 00:05:17,250 --> 00:05:20,310 van 'n paar mooi skrikwekkende probleme wat kan ontstaan ​​in die werklike wêreld. 121 00:05:20,310 --> 00:05:23,530 >> So 'n paar van julle kan onthou as jy tegnologie nuus volg, 122 00:05:23,530 --> 00:05:25,740 of miskien selfs gevang wind van hierdie in Februarie 123 00:05:25,740 --> 00:05:29,434 van die afgelope jaar dat Apple het het 'n bietjie van 'n fout in beide IOS, 124 00:05:29,434 --> 00:05:31,350 die bedryfstelsel op hul selfone, en ook 125 00:05:31,350 --> 00:05:34,220 Mac OS, die bedryfstelsel op hul rekenaars en skootrekenaars. 126 00:05:34,220 --> 00:05:36,480 En jy het so nuus soos hierdie. 127 00:05:36,480 --> 00:05:41,120 En daarna, Apple belowe dat hierdie fout reg te stel, 128 00:05:41,120 --> 00:05:45,950 en baie vinnig het dit reg in IOS, maar dan uiteindelik het dit in Mac OS 129 00:05:45,950 --> 00:05:46,810 sowel. 130 00:05:46,810 --> 00:05:50,370 >> Nou een van hierdie nuus alleen werklik openbaar wat die onderliggende probleem is, 131 00:05:50,370 --> 00:05:55,640 maar die fout is uiteindelik verminder tot 'n fout in SSL, veilige voetstukke laag. 132 00:05:55,640 --> 00:05:57,390 En 'n lang storie kort, dit is die sagteware 133 00:05:57,390 --> 00:06:01,030 dat ons blaaier en ander sagteware wat gebruik word om te doen wat? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> As ek sê dat SSL betrokke is, wanneer jy 136 00:06:06,860 --> 00:06:13,920 besoek 'n URL wat met HTTPS begin, wat dan kan SSL verband hou? 137 00:06:13,920 --> 00:06:14,580 Enkripsie. 138 00:06:14,580 --> 00:06:16,470 So ons sal praat oor dit in die komende dae. 139 00:06:16,470 --> 00:06:18,750 Kodering, die kuns van skommeling inligting. 140 00:06:18,750 --> 00:06:22,200 >> Maar lang storie kort, Apple tyd gelede het 'n fout gemaak 141 00:06:22,200 --> 00:06:25,970 in die uitvoering van die SSL, die sagteware wat uiteindelik implemente 142 00:06:25,970 --> 00:06:30,120 URLs soos HTTPS of maksimum verbindings ook daar. 143 00:06:30,120 --> 00:06:32,850 Die gevolg hiervan is dat jou verbindings kan potensieel 144 00:06:32,850 --> 00:06:33,920 onderskep word. 145 00:06:33,920 --> 00:06:37,130 En jou verskaffers was nie noodwendig geïnkripteer 146 00:06:37,130 --> 00:06:40,350 As jy het 'n paar slegte man in tussen jy en die bestemming webwerf wat 147 00:06:40,350 --> 00:06:42,170 geweet hoe om voordeel te trek uit hierdie. 148 00:06:42,170 --> 00:06:45,090 >> Nou Apple uiteindelik gepos 'n oplossing vir hierdie uiteindelik, 149 00:06:45,090 --> 00:06:46,920 en die beskrywing van hul fix was nie. 150 00:06:46,920 --> 00:06:49,878 Veilige vervoer versuim het om te bekragtig die egtheid van die verbinding. 151 00:06:49,878 --> 00:06:52,920 Die kwessie is aangespreek deur herstel ontbreek validering stappe. 152 00:06:52,920 --> 00:06:57,250 >> So, dit is 'n baie hand golwende verduideliking vir net sê dat ons geskroef. 153 00:06:57,250 --> 00:07:00,920 Daar is letterlik 'n reël van die kode wat karretjie 154 00:07:00,920 --> 00:07:05,130 in die uitvoering van die SSL, en As jy aanlyn gaan en soek vir hierdie 155 00:07:05,130 --> 00:07:07,210 jy eintlik kan vind die oorspronklike bron-kode. 156 00:07:07,210 --> 00:07:11,960 Byvoorbeeld, dit is 'n screen shot van net 'n gedeelte van 'n redelik groot lêer, 157 00:07:11,960 --> 00:07:15,965 maar dit is 'n funksie blykbaar genoem SSL verifieer teken bediener sleutel ruil. 158 00:07:15,965 --> 00:07:17,840 En dit neem om 'n klomp van die argumente en insette. 159 00:07:17,840 --> 00:07:20,298 En ons is nie van plan om te fokus te veel op die minutia daar, 160 00:07:20,298 --> 00:07:24,390 Maar as jy fokus op die kode binne-in van daardie boonste function-- laat 161 00:07:24,390 --> 00:07:25,590 zoom in op dit. 162 00:07:25,590 --> 00:07:28,140 Jy kan reeds vermoed wat die fout mag 163 00:07:28,140 --> 00:07:31,230 wees, selfs as jy het geen idee uiteindelik wat jy is op soek na. 164 00:07:31,230 --> 00:07:35,924 Daar is soort van 'n anomalie hier, en dit is wat? 165 00:07:35,924 --> 00:07:38,940 >> Ja, ek het regtig nie hou nie die voorkoms van twee goto versuim. 166 00:07:38,940 --> 00:07:42,060 Om eerlik te wees, ek weet nie regtig wat goto misluk beteken nie, maar dat twee van hulle 167 00:07:42,060 --> 00:07:42,810 rug aan rug. 168 00:07:42,810 --> 00:07:45,290 Dit is net soort vryf my intellektueel op die verkeerde manier, 169 00:07:45,290 --> 00:07:48,910 en inderdaad as ons zoom in op net diegene lyne, dit is C. 170 00:07:48,910 --> 00:07:52,220 >> So 'n baie van Apple se kode is self geskryf in C, 171 00:07:52,220 --> 00:07:55,780 en dit glo is regtig equivalent-- 172 00:07:55,780 --> 00:07:59,060 nie op daardie mooi inkeping weergawe, maar as jy die feit 173 00:07:59,060 --> 00:08:02,560 dat daar geen krulhakies, wat Apple eintlik geskryf het, was kode wat lyk 174 00:08:02,560 --> 00:08:03,540 soos hierdie. 175 00:08:03,540 --> 00:08:07,080 So ek hou zoomde uit en ek het net die inkeping in die sin vaste 176 00:08:07,080 --> 00:08:10,690 dat indien daar geen krulhakies, wat tweede goto versuim wat in geel 177 00:08:10,690 --> 00:08:12,500 gaan maak nie saak wat uit te voer. 178 00:08:12,500 --> 00:08:15,540 Dit is nie verband hou met die indien toestand bo dit. 179 00:08:15,540 --> 00:08:19,590 >> So selfs weer, as jy nie heeltemal verstaan ​​wat dit kon moontlik 180 00:08:19,590 --> 00:08:23,230 wees doen, weet dat elkeen van hierdie conditions-- elk van hierdie lyne 181 00:08:23,230 --> 00:08:26,180 is 'n baie belangrike stap in die proses van kontrole 182 00:08:26,180 --> 00:08:28,350 As jou data is in werklikheid geïnkripteer. 183 00:08:28,350 --> 00:08:31,710 So draai een van hierdie stappe, en nie die beste idee. 184 00:08:31,710 --> 00:08:34,840 >> Maar omdat ons hierdie tweede goto misluk in geel, 185 00:08:34,840 --> 00:08:36,840 en omdat wanneer ons soort estetiese 186 00:08:36,840 --> 00:08:40,480 skuif dit na die links waar dit logies is op die oomblik, wat 187 00:08:40,480 --> 00:08:43,230 beteken dit vir die lyn beteken van die kode hieronder wat tweede goto 188 00:08:43,230 --> 00:08:46,480 versuim sou jy dink? 189 00:08:46,480 --> 00:08:48,860 Dit is altyd gaan oorgeslaan word. 190 00:08:48,860 --> 00:08:52,100 So gotos is oor die algemeen afgekeur om redes wat ons nie regtig in te gaan, 191 00:08:52,100 --> 00:08:54,940 en inderdaad in CS50 ons geneig is om nie hierdie stelling gaan na om te leer, 192 00:08:54,940 --> 00:08:58,130 maar jy kan dink goto versuim om betekenis gaan spring 193 00:08:58,130 --> 00:08:59,600 aan 'n ander deel van die kode. 194 00:08:59,600 --> 00:09:03,120 >> Met ander woorde spring oor hierdie laaste reël heeltemal, 195 00:09:03,120 --> 00:09:07,420 en so die gevolg van hierdie stupid eenvoudige fout dit was net 196 00:09:07,420 --> 00:09:10,330 gevolg van waarskynlik iemand kopieer en plak een te 197 00:09:10,330 --> 00:09:14,150 baie keer was dat die hele veiligheid van IOS en Mac OS 198 00:09:14,150 --> 00:09:18,240 was kwesbaar vir onderskepping deur slegte ouens vir 'n geruime tyd. 199 00:09:18,240 --> 00:09:19,940 Tot Apple uiteindelik vaste hierdie. 200 00:09:19,940 --> 00:09:23,100 >> En as sommige van julle is eintlik hardloop ou weergawes van IOS of Mac OS, 201 00:09:23,100 --> 00:09:27,250 jy kan gaan na gotofail.com wat is 'n webwerf dat iemand opgestel 202 00:09:27,250 --> 00:09:29,190 wesenlik bepaal programmaties 203 00:09:29,190 --> 00:09:30,980 As jou rekenaar is steeds kwesbaar. 204 00:09:30,980 --> 00:09:33,600 En eerlik, as dit is, dit is waarskynlik 'n goeie idee 205 00:09:33,600 --> 00:09:36,870 jou selfoon te werk of Mac op hierdie punt. 206 00:09:36,870 --> 00:09:40,120 Maar daar, net getuig van hoe 'n waardering vir hierdie laer vlak 207 00:09:40,120 --> 00:09:42,400 besonderhede en redelik eenvoudige idees kan regtig 208 00:09:42,400 --> 00:09:44,590 vertaal in besluite en probleme wat 209 00:09:44,590 --> 00:09:47,320 affected-- in hierdie case-- miljoene mense. 210 00:09:47,320 --> 00:09:49,107 >> Nou is 'n woord op administrasie. 211 00:09:49,107 --> 00:09:50,690 Afdeling sal eerskomende Sondag begin. 212 00:09:50,690 --> 00:09:53,360 Jy sal 'n e-pos ontvang wat deur die naweek oor artikel, op watter punt 213 00:09:53,360 --> 00:09:55,290 die resectioning proses sal begin as jy het 214 00:09:55,290 --> 00:09:56,998 besef jy nou 'n paar nuwe konflikte. 215 00:09:56,998 --> 00:10:00,180 So dit gebeur elke jaar, en ons sal akkommodeer in die dae wat kom. 216 00:10:00,180 --> 00:10:02,430 >> Kantoor hours-- doen hou 'n oog op die skedule hier. 217 00:10:02,430 --> 00:10:05,100 Verander 'n bietjie hierdie week, veral die aanvang van die tyd 218 00:10:05,100 --> 00:10:08,180 en die plek, so moenie te raadpleeg wat voor die opskrif na kantoorure 219 00:10:08,180 --> 00:10:09,520 enige van die volgende vier nagte. 220 00:10:09,520 --> 00:10:12,680 En nou 'n woord oor assessering, veral as jy duik in die probleem 221 00:10:12,680 --> 00:10:14,350 stel een en daarna. 222 00:10:14,350 --> 00:10:17,070 >> So per die spesifikasie, Dit is oor die algemeen 223 00:10:17,070 --> 00:10:20,360 die asse waarlangs ons evalueer jou werk. 224 00:10:20,360 --> 00:10:23,170 Omvang verwys na wat mate jou kode implemente 225 00:10:23,170 --> 00:10:25,690 die elemente wat nodig is deur ons spesifikasie. 226 00:10:25,690 --> 00:10:28,290 Met ander woorde, hoeveel van 'n stuk stel het jy byt. 227 00:10:28,290 --> 00:10:30,440 Het jy 'n derde van dit, 'n helfte van dit, 100% van dit. 228 00:10:30,440 --> 00:10:33,000 Selfs al is dit nie korrek nie, Hoeveel het jy probeer? 229 00:10:33,000 --> 00:10:35,290 So wat vang die vlak moeite en die bedrag 230 00:10:35,290 --> 00:10:38,260 wat jy afgebyt die probleem stel se probleme. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- hierdie een, te watter mate is jou kode 232 00:10:40,690 --> 00:10:43,150 ooreenstemming met ons spesifikasies en vry van foute. 233 00:10:43,150 --> 00:10:44,770 So is dit korrek te werk? 234 00:10:44,770 --> 00:10:48,700 As ons dit gee 'n paar insette, doen dit gee ons die produksie wat ons verwag? 235 00:10:48,700 --> 00:10:52,570 Vormgeving dit is nou die eerste die besonder kwalitatiewe kinders, 236 00:10:52,570 --> 00:10:56,180 of die mense wat die menslike oordeel vereis. 237 00:10:56,180 --> 00:10:59,690 En inderdaad, dit is hoekom ons 'n personeel van soveel onderrig genote en natuurlik 238 00:10:59,690 --> 00:11:00,350 assistente. 239 00:11:00,350 --> 00:11:03,480 Tot watter mate is u kode goed geskryf? 240 00:11:03,480 --> 00:11:05,810 >> En weer is dit 'n baie kwalitatiewe assessering 241 00:11:05,810 --> 00:11:09,100 wat sal werk met jou op bidirectioneel in die komende weke. 242 00:11:09,100 --> 00:11:12,060 Sodat wanneer jy nie slegs numeriese tellings nie, maar ook 243 00:11:12,060 --> 00:11:16,682 'n skriftelike tellings, of getik terugvoer of skriftelike terugvoering in Engels woorde. 244 00:11:16,682 --> 00:11:19,640 Dit is wat ons sal gebruik om jou te ry teenoor eintlik skryf beter code. 245 00:11:19,640 --> 00:11:23,320 En in lesing en artikel sal ons probeer wys out-- so dikwels as ons can-- 246 00:11:23,320 --> 00:11:26,420 Wat maak 'n program nie net korrekte en funksioneel goed, 247 00:11:26,420 --> 00:11:28,200 maar ook goed ontwerp. 248 00:11:28,200 --> 00:11:31,850 Die mees doeltreffende dit kan wees, of selfs die mooiste wat dit kan wees. 249 00:11:31,850 --> 00:11:33,100 >> Wat lei tot die styl. 250 00:11:33,100 --> 00:11:36,876 Styl uiteindelik is 'n estetiese oordeel. 251 00:11:36,876 --> 00:11:38,750 Het jy kies 'n goeie name vir jou veranderlikes? 252 00:11:38,750 --> 00:11:40,330 Het jy jou kode behoorlik ingekeep? 253 00:11:40,330 --> 00:11:44,010 Is dit goed lyk, en dus is dit maklik vir 'n ander mens 254 00:11:44,010 --> 00:11:46,550 jou eie te lees van die korrektheid. 255 00:11:46,550 --> 00:11:50,300 >> Nou algemeen per die leerplan, ons score hierdie dinge op 'n vyf punt skaal. 256 00:11:50,300 --> 00:11:53,640 En laat my huis hamer die punt dat 'n drie is inderdaad 'n goeie. 257 00:11:53,640 --> 00:11:55,550 Baie vinnig doen mense begin doen rekenkundige. 258 00:11:55,550 --> 00:11:58,133 Toe hulle 'n drie uit vyf korrektheid vir 'n paar pset 259 00:11:58,133 --> 00:12:02,040 en hulle dink damn, ek gaan 60% wat is in wese 'n D of E. 260 00:12:02,040 --> 00:12:03,980 >> Dit is nie die manier waarop ons dink van hierdie getalle. 261 00:12:03,980 --> 00:12:06,880 'N drie is inderdaad 'n goeie, en wat ons algemeen verwag aan die begin 262 00:12:06,880 --> 00:12:09,820 van die term is dat as jy kry 'n klomp van three's-- miskien 'n paar 263 00:12:09,820 --> 00:12:12,540 van die feeste, 'n paar van die fours-- of 'n paar tweë, 'n paar van die fours-- 264 00:12:12,540 --> 00:12:13,748 dit is 'n goeie plek om te begin. 265 00:12:13,748 --> 00:12:16,320 En so lank as wat ons sien 'n opwaartse trajek oor tyd, 266 00:12:16,320 --> 00:12:18,540 jy is in 'n besonder goeie plek. 267 00:12:18,540 --> 00:12:20,752 >> Die formule gebruik ons gewig dinge is in wese 268 00:12:20,752 --> 00:12:22,710 hierdie per die leerplan, wat beteken net dat ons 269 00:12:22,710 --> 00:12:24,750 gee meer gewig te korrektheid. 270 00:12:24,750 --> 00:12:27,930 Want dit is baie dikwels korrektheid wat neem die meeste tyd. 271 00:12:27,930 --> 00:12:28,760 Glo my nou. 272 00:12:28,760 --> 00:12:31,190 Jy sal find-- ten minste in een pset-- dat jy 273 00:12:31,190 --> 00:12:36,790 spandeer 90% van jou tyd werk op 10% van die probleem. 274 00:12:36,790 --> 00:12:39,320 >> En alles soort van werk behalwe vir een of twee foute, 275 00:12:39,320 --> 00:12:41,570 en dit is die foute wat hou jou tot laat in die nag. 276 00:12:41,570 --> 00:12:43,380 Dit is die mense wat soort van ontsnap nie. 277 00:12:43,380 --> 00:12:45,560 Maar na die slaap op dit, of die bywoning kantoorure 278 00:12:45,560 --> 00:12:48,844 of om vrae te vra online, is wanneer jy na dat 100% doelwit 279 00:12:48,844 --> 00:12:50,760 en dit is hoekom ons gewig korrektheid van die meeste. 280 00:12:50,760 --> 00:12:54,102 Ontwerp 'n bietjie minder, en styl 'n bietjie minder as dit. 281 00:12:54,102 --> 00:12:56,060 Maar hou in mind-- styl is dalk die maklikste 282 00:12:56,060 --> 00:12:58,890 van hierdie af te byt soos per die styl gids. 283 00:12:58,890 --> 00:13:01,580 >> En nou, 'n meer ernstige daarop op akademiese eerlikheid. 284 00:13:01,580 --> 00:13:05,000 CS50 het die ongelukkige onderskeiding synde die grootste produsent van Ad Board 285 00:13:05,000 --> 00:13:07,330 gevalle byna elke jaar histories. 286 00:13:07,330 --> 00:13:11,012 Dit is nie omdat die studente te kul in CS50 meer as enige ander klas, 287 00:13:11,012 --> 00:13:13,720 maar omdat uit die aard van die werk, die feit dat dit 'n elektroniese, 288 00:13:13,720 --> 00:13:16,636 die feit dat ons kyk vir dit, en die feit dat ons die rekenaar wetenskaplikes, 289 00:13:16,636 --> 00:13:20,570 Ek kan sê ons is ongelukkig baie goed in die opsporing van dit. 290 00:13:20,570 --> 00:13:22,710 >> So wat beteken dit in reële terme? 291 00:13:22,710 --> 00:13:24,820 So dit, volgens die leerplan, die kursus se filosofie 292 00:13:24,820 --> 00:13:28,090 regtig nie neer op redelik wees. 293 00:13:28,090 --> 00:13:31,684 Daar is hierdie lyn tussen doen 'n mens se werk op jou eie 294 00:13:31,684 --> 00:13:34,100 en om 'n bietjie van redelike hulp van 'n vriend, 295 00:13:34,100 --> 00:13:38,020 en blatante doen dat die werk vir jou vriend, of stuur hom of haar jou kode 296 00:13:38,020 --> 00:13:41,080 sodat hy of sy kan eenvoudig neem of leen dit reg. 297 00:13:41,080 --> 00:13:43,580 En dit gaan oor die lyn dat ons getrek in die klas. 298 00:13:43,580 --> 00:13:45,410 >> Sien, die leerplan uiteindelik vir die lyne 299 00:13:45,410 --> 00:13:48,209 wat ons trek as redelike en onredelike gedrag, 300 00:13:48,209 --> 00:13:50,000 maar dit regtig nie kook af na die essensie 301 00:13:50,000 --> 00:13:53,980 van jou werk hoef te wees om jou eie in die einde. 302 00:13:53,980 --> 00:13:56,230 Nou met wat gesê het, daar is 'n heuristiese. 303 00:13:56,230 --> 00:13:58,980 Want soos jy dalk imagine-- vanaf kantoorure en die visuele 304 00:13:58,980 --> 00:14:01,060 en die video's wat ons het getoon dus far-- CS50 305 00:14:01,060 --> 00:14:04,530 is inderdaad bedoel om te wees as gesamentlike en as koöperatiewe en sosiale 306 00:14:04,530 --> 00:14:06,450 as moontlik. 307 00:14:06,450 --> 00:14:08,570 As gesamentlike soos dit is streng. 308 00:14:08,570 --> 00:14:11,314 >> Maar met hierdie gesê, die heuristiese, as jy sien in die leerplan, 309 00:14:11,314 --> 00:14:12,980 is dat wanneer jy met 'n probleem. 310 00:14:12,980 --> 00:14:16,470 Jy het 'n paar fout in die kode wat jy kan nie los nie, is dit redelik vir jou 311 00:14:16,470 --> 00:14:18,039 jou kode aan iemand anders te wys. 312 00:14:18,039 --> 00:14:21,080 'N Vriend, selfs in die klas, 'n vriend wat langs jou sit op kantoorure, 313 00:14:21,080 --> 00:14:22,680 of 'n lid van die personeel. 314 00:14:22,680 --> 00:14:25,810 Maar hulle kan nie hul kode wys. 315 00:14:25,810 --> 00:14:27,710 >> Met ander woorde, 'n beantwoord aan jou question-- 316 00:14:27,710 --> 00:14:29,940 Ek moet help-- is nie O, hier is my kode. 317 00:14:29,940 --> 00:14:32,440 Neem 'n blik op hierdie en aflei uit dit wat jy wil. 318 00:14:32,440 --> 00:14:34,580 Nou, natuurlik, daar is 'n manier duidelik te spel 319 00:14:34,580 --> 00:14:37,760 hierdie stelsel waardeur ek jy sal wys my kode voordat hy 'n vraag. 320 00:14:37,760 --> 00:14:40,150 Jy wys my jou kode voordat hy 'n vraag. 321 00:14:40,150 --> 00:14:45,870 Maar kyk leerplan weer vir die fyner besonderhede van waar die lyn is. 322 00:14:45,870 --> 00:14:50,606 >> Net nou verf die prentjie en deel as deursigtig as moontlik 323 00:14:50,606 --> 00:14:53,480 waar ons is in die afgelope jaar, dit is die getal van die Ad Board gevalle 324 00:14:53,480 --> 00:14:56,260 dat CS50 het oor Die afgelope sewe jaar. 325 00:14:56,260 --> 00:14:58,717 Met 14 gevalle mees onlangse val. 326 00:14:58,717 --> 00:15:01,300 In terme van die studente wat betrokke is, dit was 20 sommige vreemd studente 327 00:15:01,300 --> 00:15:02,490 afgelope val. 328 00:15:02,490 --> 00:15:05,670 Daar was 'n hoogtepunt van 33 studente 'n paar jaar gelede. 329 00:15:05,670 --> 00:15:08,830 Baie van hulle is ongelukkig nie meer hier op die kampus. 330 00:15:08,830 --> 00:15:13,100 >> Studente wat betrokke is as 'n persentasie van die klas het histories gewissel van 0% 331 00:15:13,100 --> 00:15:17,300 tot 5.3%, wat net om te sê Dit is jaarliks ​​'n uitdaging. 332 00:15:17,300 --> 00:15:20,390 En in die rigting van die einde, wat ons wil doen, is dra een 333 00:15:20,390 --> 00:15:24,310 dat ons dd-- net FYI-- vergelyk ten 'n regverdigheid studente wat 334 00:15:24,310 --> 00:15:26,520 is as gevolg van die lyn daarvolgens. 335 00:15:26,520 --> 00:15:29,620 Ons doen alle huidige vergelyk voorleggings teen al die afgelope missies 336 00:15:29,620 --> 00:15:30,840 uit die verlede baie jare. 337 00:15:30,840 --> 00:15:33,620 >> Ons weet ook hoe om tot Google en vind kode repositories 338 00:15:33,620 --> 00:15:36,360 aanlyn gespreksforums aanlyn, werk webwerwe aanlyn. 339 00:15:36,360 --> 00:15:41,580 Indien 'n student dit kan kry, kan ons seker vind dit soveel as wat ons ongelukkig nie. 340 00:15:41,580 --> 00:15:45,330 So, wat jy sal sien in die leerplan al is dit jammer klousule. 341 00:15:45,330 --> 00:15:47,500 Ek kan beslis waardeer, en ons almal het 342 00:15:47,500 --> 00:15:50,870 personeel wat die kursus soos gedoen hierdie, of hierdie een self oor tyd, 343 00:15:50,870 --> 00:15:53,997 beslis weet wat dit is soos wanneer lewe kry in die pad wanneer jy 344 00:15:53,997 --> 00:15:56,080 sommige laat nag deadline-- nie net in hierdie klas, 345 00:15:56,080 --> 00:15:58,660 maar another-- wanneer jy heeltemal uitgeput, beklemtoon uit, 346 00:15:58,660 --> 00:16:00,659 het 'n buitensporige aantal ander dinge te doen. 347 00:16:00,659 --> 00:16:03,660 Jy sal op 'n stadium in lewe beslis 'n slegte, miskien laat 348 00:16:03,660 --> 00:16:04,620 nag besluit. 349 00:16:04,620 --> 00:16:06,520 >> So volgens die leerplan, daar is hierdie klousule, 350 00:16:06,520 --> 00:16:10,629 sodanig dat indien binne 72 uur van die maak van sommige swak besluit, jy besit tot dit 351 00:16:10,629 --> 00:16:12,670 en uit te reik na my en een van die kursus se koppe 352 00:16:12,670 --> 00:16:14,300 en ons sal 'n gesprek. 353 00:16:14,300 --> 00:16:16,220 Ons sal dinge hanteer intern in die hoop 354 00:16:16,220 --> 00:16:18,770 dit meer van 'n onderrig oomblik of lewe les, 355 00:16:18,770 --> 00:16:22,120 en nie iets met veral drastiese gevolge 356 00:16:22,120 --> 00:16:24,570 as jy kan sien op hierdie kaarte hier. 357 00:16:24,570 --> 00:16:26,540 >> So dit is 'n baie ernstige toon. 358 00:16:26,540 --> 00:16:29,960 Kom ons breek vir net 'n paar sekondes om die spanning te breek. 359 00:16:29,960 --> 00:16:34,442 >> [Speel van musiek] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> David J. MALAN: Alle reg, so hoe was dat 'n segue? 362 00:17:20,250 --> 00:17:22,059 Vandag se primêre onderwerpe. 363 00:17:22,059 --> 00:17:23,859 Die eerste is die onttrekking. 364 00:17:23,859 --> 00:17:26,900 Nog een van wat gaan aan die wees voorstelling van data, wat eerlik 365 00:17:26,900 --> 00:17:31,640 is 'n baie droë manier om te sê hoe kan ons gaan om probleme en dink 366 00:17:31,640 --> 00:17:33,250 oor die oplossing van probleme? 367 00:17:33,250 --> 00:17:37,285 So jy gesien het in Scratch, en jy het gesien dalk reeds in pset1 met C 368 00:17:37,285 --> 00:17:39,930 dat jy nie net kan gebruik funksies, soos printf, 369 00:17:39,930 --> 00:17:42,770 dat ander mense in die afgelope jare het vir jou. 370 00:17:42,770 --> 00:17:45,340 Jy kan ook skryf jou eie funksies. 371 00:17:45,340 --> 00:17:48,440 >> En selfs al het jy dalk nie ' gedoen in C, en eerlik in pset1 372 00:17:48,440 --> 00:17:51,866 jy nie regtig nodig het om te skryf jou eie funksie omdat die problem-- 373 00:17:51,866 --> 00:17:53,990 terwyl dalk skrikwekkend by eerste glance-- jy sal sien 374 00:17:53,990 --> 00:17:57,910 uiteindelik met opgelos moet word nie al dat baie reëls van die kode. 375 00:17:57,910 --> 00:18:01,140 Maar met wat gesê het, in terme skryf jou eie funksie, 376 00:18:01,140 --> 00:18:03,570 besef dat C nie gee jy hierdie vermoë. 377 00:18:03,570 --> 00:18:06,940 >> Ek gaan om te gaan in vandag se bron-kode, wat beskikbaar is reeds aanlyn is, 378 00:18:06,940 --> 00:18:10,900 en ek gaan om voort te gaan en 'n oop 'n program genaamd funksie 0.C, 379 00:18:10,900 --> 00:18:14,620 en in die funksie nul ons sal sien 'n paar dinge. 380 00:18:14,620 --> 00:18:19,160 In die eerste lyne 18 deur 23 is my belangrikste funksie. 381 00:18:19,160 --> 00:18:22,414 En nou dat ons begin om te lees kode wat ons nie op die vlieg skryf, 382 00:18:22,414 --> 00:18:25,080 maar Ek het vooraf skriftelike of dat jy in 'n probleem stel 383 00:18:25,080 --> 00:18:27,910 kan ontvang wat is vooraf geskryf. 384 00:18:27,910 --> 00:18:30,040 'N goeie manier om te begin lees iemand anders se kode 385 00:18:30,040 --> 00:18:31,400 is op soek na die belangrikste funksie. 386 00:18:31,400 --> 00:18:34,420 Uit te vind waar daardie inskrywing punt is om die bestuur van die program, 387 00:18:34,420 --> 00:18:36,580 en dan volg dit logies van daar af. 388 00:18:36,580 --> 00:18:40,190 >> So hierdie program glo afdrukke jou naam, gevolg deur 'n dubbelpunt. 389 00:18:40,190 --> 00:18:42,490 Ons gebruik dan GetString van die CS50 biblioteek 390 00:18:42,490 --> 00:18:46,050 'n string, of 'n woord of frase te kry van die gebruiker op die sleutelbord. 391 00:18:46,050 --> 00:18:48,390 En dan is daar hierdie ding here-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Nou PrintName is nie 'n funksie wat kom met C. 393 00:18:51,420 --> 00:18:52,970 Dit is nie in die standaard io.h. 394 00:18:52,970 --> 00:18:55,570 Dit is nie in CS50.h. 395 00:18:55,570 --> 00:18:57,880 Dit is eerder in dieselfde lêer. 396 00:18:57,880 --> 00:19:01,000 Agterkom as ek rol af 'n bit-- lyne 25 tot 27-- 397 00:19:01,000 --> 00:19:05,330 dit is net 'n mooi manier om kommentaar te lewer jou kode met behulp van die sterre en houe. 398 00:19:05,330 --> 00:19:07,320 Dit is 'n multi-line kommentaar te lewer, en dit is net 399 00:19:07,320 --> 00:19:10,570 my beskrywing in blou wat hierdie funksie doen. 400 00:19:10,570 --> 00:19:14,530 >> Want in lyne 28 deur 31 Ek het 'n super eenvoudige funksie geskryf 401 00:19:14,530 --> 00:19:16,280 wie se naam is PrintName. 402 00:19:16,280 --> 00:19:19,560 Dit neem hoeveel argumente, sou jy sê? 403 00:19:19,560 --> 00:19:25,120 So een argument--, want daar is 'n argument gelys in die hakies. 404 00:19:25,120 --> 00:19:27,000 Die tipe wat String. 405 00:19:27,000 --> 00:19:30,240 Wat om te sê PrintName is soos hierdie swart boks 406 00:19:30,240 --> 00:19:32,910 of funksie wat ' as toevoer 'n string. 407 00:19:32,910 --> 00:19:35,730 >> En die naam van die String gerieflik sal wees Naam. 408 00:19:35,730 --> 00:19:37,840 Nie S, nie N, maar Naam. 409 00:19:37,840 --> 00:19:41,090 So wat beteken PrintName doen? 410 00:19:41,090 --> 00:19:42,210 Dit is lekker eenvoudig. 411 00:19:42,210 --> 00:19:45,390 Net soos 'n reël van die kode vir die printf, maar glo dit 412 00:19:45,390 --> 00:19:47,950 druk uit "Hallo," so en so. 413 00:19:47,950 --> 00:19:50,070 Waar die so en so kom van die argument. 414 00:19:50,070 --> 00:19:52,300 >> En dit is nie 'n groot innovasie hier. 415 00:19:52,300 --> 00:19:56,710 Regtig, het ek 'n program wat geneem kan is met 'n lyn van die kode wat geskryf 416 00:19:56,710 --> 00:20:00,190 deur om dit op hier, en verander dit na iets wat 417 00:20:00,190 --> 00:20:04,920 wat behels sowat ses of sewe of so reëls van die kode al die pad af hier. 418 00:20:04,920 --> 00:20:08,190 >> Maar dit is die beoefening van 'n beginsel bekend as die onttrekking. 419 00:20:08,190 --> 00:20:12,550 Soort vat binnekant van 'n nuwe funksie wat 'n naam het, en 'n beter 420 00:20:12,550 --> 00:20:14,590 nog die naam letterlik sê wat dit doen. 421 00:20:14,590 --> 00:20:16,880 Ek bedoel printf-- dit is nie veral beskrywende. 422 00:20:16,880 --> 00:20:18,932 As ek wil 'n te skep legkaart stuk, of as ek 423 00:20:18,932 --> 00:20:21,140 wil 'n funksie te skep dat druk iemand se naam, 424 00:20:21,140 --> 00:20:23,230 die skoonheid van om dit te doen is dat ek kan eintlik 425 00:20:23,230 --> 00:20:27,170 gee die funksie 'n naam wat beskryf wat hy doen nie. 426 00:20:27,170 --> 00:20:29,844 >> Nou neem dit in 'n bydrae wat Ek het arbitrêr genoem naam, 427 00:20:29,844 --> 00:20:32,760 maar ook dit is 'n wonderlike beskrywende in plaas van om 'n bietjie meer 428 00:20:32,760 --> 00:20:36,140 generiese soos S. En leemte, vir nou, beteken net 429 00:20:36,140 --> 00:20:38,330 dat hierdie funksie nie oorhandig my terug nie. 430 00:20:38,330 --> 00:20:41,127 Dit is nie soos GetString wat letterlik my hande terug 'n string 431 00:20:41,127 --> 00:20:43,960 soos ons gedoen het met die stukkies papier met jou klasmaats verlede week, 432 00:20:43,960 --> 00:20:45,990 maar eerder dit net 'n newe-effek. 433 00:20:45,990 --> 00:20:48,080 Hy druk iets aan die skerm. 434 00:20:48,080 --> 00:20:53,880 >> So aan die einde van die dag, as ek maak funksie-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 ons sal sien wat dit vra vir my naam. 436 00:20:55,450 --> 00:20:58,150 Ek tik Dawid, en dit tipes my naam. 437 00:20:58,150 --> 00:21:01,080 As ek dit weer doen met Rob, dit gaan om te sê "Hallo, Rob." 438 00:21:01,080 --> 00:21:04,280 So 'n eenvoudige idee, maar miskien ekstrapoleer uit hierdie geestelik 439 00:21:04,280 --> 00:21:06,750 dat as jou programme te kry 'n bietjie meer ingewikkeld, 440 00:21:06,750 --> 00:21:10,290 en jy wil 'n deel van te skryf kode en oproep wat code-- Roep 441 00:21:10,290 --> 00:21:13,270 dat code-- deur sommige beskrywende noem soos PrintName, 442 00:21:13,270 --> 00:21:15,600 C nie bekostig om ons hierdie vermoë. 443 00:21:15,600 --> 00:21:17,660 >> Hier is nog 'n eenvoudige voorbeeld. 444 00:21:17,660 --> 00:21:22,940 Byvoorbeeld, as ek maak 'n lêer van vandag genoem return.c, 445 00:21:22,940 --> 00:21:24,270 kennis wat ek hier gedoen het. 446 00:21:24,270 --> 00:21:26,330 Die meeste van hierdie belangrikste funksie is printf. 447 00:21:26,330 --> 00:21:30,360 Ek het die eerste arbitrêr inisialiseer 'n veranderlike genoem x tot die nommer 2. 448 00:21:30,360 --> 00:21:34,110 Ek druk dan "x is nou % I "verby in die waarde van x. 449 00:21:34,110 --> 00:21:35,500 So is ek net sê wat dit is. 450 00:21:35,500 --> 00:21:37,208 >> Nou is ek net vrymoedigheid beweer met printf. 451 00:21:37,208 --> 00:21:42,050 Ek derdemagte wat waarde x, en ek is doen deur te bel 'n funksie 452 00:21:42,050 --> 00:21:45,590 genoem kubus afsterwe in x as die argument, 453 00:21:45,590 --> 00:21:49,300 en dan die redding van die uitset in die veranderlike self, x. 454 00:21:49,300 --> 00:21:51,340 So ek beuken die waarde van x. 455 00:21:51,340 --> 00:21:53,380 Ek oorheersende die waarde van x met alles wat 456 00:21:53,380 --> 00:21:56,510 die gevolg van die roeping hierdie kubus funksie is. 457 00:21:56,510 --> 00:21:59,530 En dan het ek net die druk van 'n paar sagte dinge hier te sê wat ek gedoen het. 458 00:21:59,530 --> 00:22:01,600 >> So wat is dan kubus? 459 00:22:01,600 --> 00:22:03,510 Let op wat is fundamenteel anders hier. 460 00:22:03,510 --> 00:22:05,540 Ek het die funksie gegee 'n naam soos tevore. 461 00:22:05,540 --> 00:22:08,270 Ek het gespesifiseerde 'n naam vir 'n argument. 462 00:22:08,270 --> 00:22:11,650 Hierdie keer is dit genoem N in plaas van die naam, maar ek kon dit noem iets wat ek wil hê. 463 00:22:11,650 --> 00:22:12,650 Maar dit is anders. 464 00:22:12,650 --> 00:22:14,080 Hierdie ding aan die linkerkant. 465 00:22:14,080 --> 00:22:16,290 Voorheen was dit wat navraag? 466 00:22:16,290 --> 00:22:16,870 Boys. 467 00:22:16,870 --> 00:22:18,580 Nou is dit natuurlik int. 468 00:22:18,580 --> 00:22:20,630 >> So, wat is dalk die weg te neem? 469 00:22:20,630 --> 00:22:24,090 Terwyl leemte te kenne soort nietigheid, en dat dit die geval was. 470 00:22:24,090 --> 00:22:25,970 PrintName teruggekeer niks. 471 00:22:25,970 --> 00:22:27,942 Dit het iets te doen, maar dit het nie oorhandig my terug 472 00:22:27,942 --> 00:22:30,650 iets wat ek kon op die linkerkant van 'n gelyke teken 473 00:22:30,650 --> 00:22:32,460 soos ek hier gedoen op die lyn 22. 474 00:22:32,460 --> 00:22:36,780 >> So as ek sê in op die lyn 30, wat is dit waarskynlik beteken 475 00:22:36,780 --> 00:22:38,610 oor wat kubus vir my doen? 476 00:22:38,610 --> 00:22:41,110 Ja? 477 00:22:41,110 --> 00:22:42,310 Dit gee 'n heelgetal. 478 00:22:42,310 --> 00:22:44,590 So dit hande my terug, vir Byvoorbeeld, 'n stukkie van die papier 479 00:22:44,590 --> 00:22:46,580 waarop dit die antwoord geskryf. 480 00:22:46,580 --> 00:22:50,130 2 blokkies, of 3 blokkies, of 4 cubed-- wat ek geslaag in, 481 00:22:50,130 --> 00:22:51,540 en hoe het ek die uitvoering van hierdie? 482 00:22:51,540 --> 00:22:54,810 Wel, net n keer n keer n is hoe ek dalk 'n waarde kubus. 483 00:22:54,810 --> 00:22:57,110 So weer, super eenvoudige idee, maar demonstratiewe 484 00:22:57,110 --> 00:23:00,100 nou hoe ons funksies kan skryf wat ons eintlik moes terug 485 00:23:00,100 --> 00:23:02,380 waardes wat van belang kan wees. 486 00:23:02,380 --> 00:23:05,740 >> Kom ons kyk na 'n laaste voorbeeld hier genoem funksie een. 487 00:23:05,740 --> 00:23:08,530 In hierdie voorbeeld, dit begin om meer aantreklik. 488 00:23:08,530 --> 00:23:12,400 So in die funksie, in hierdie program-- kennisgewing uiteindelik 489 00:23:12,400 --> 00:23:14,920 noem 'n funksie genoem GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt is nie 'n funksie in die CS50 biblioteek, 491 00:23:17,800 --> 00:23:20,400 maar ons het besluit ons wil dit voorkom. 492 00:23:20,400 --> 00:23:24,550 >> So as ons scroll down later in die lêer, sien hoe ek gaan oor die implementering 493 00:23:24,550 --> 00:23:26,560 kry positiewe int, en ek sê dit is meer oortuigend 494 00:23:26,560 --> 00:23:28,992 want dit is 'n ordentlike aantal reëls van die kode. 495 00:23:28,992 --> 00:23:30,700 Dit is nie net 'n dom klein speelgoed program. 496 00:23:30,700 --> 00:23:33,870 Dit is eintlik 'n paar foutopsporing en doen iets meer nuttig. 497 00:23:33,870 --> 00:23:38,470 >> So as jy nie gesien het nie die instruksies video's wat ons in pset1 ingesluit het, 498 00:23:38,470 --> 00:23:42,350 weet dat dit 'n tipe lus in C, soortgelyk in die gees 499 00:23:42,350 --> 00:23:44,270 om die soort dinge Scratch kan doen. 500 00:23:44,270 --> 00:23:46,320 En doen, sê dit doen. 501 00:23:46,320 --> 00:23:47,500 Druk dit uit. 502 00:23:47,500 --> 00:23:51,860 Dan voort te gaan en kry n-- kry 'n int en stoor dit in n, 503 00:23:51,860 --> 00:23:55,760 en hou om dit te doen weer en weer en weer so lank as wat n is minder as een. 504 00:23:55,760 --> 00:23:58,720 >> So n gaan wees minder as een slegs indien die Human se nie saamwerk nie. 505 00:23:58,720 --> 00:24:01,980 As hy of sy tik in 0 of -1 of -50, 506 00:24:01,980 --> 00:24:04,790 hierdie lus is die gang te hou uitvoering van weer en weer. 507 00:24:04,790 --> 00:24:07,549 En uiteindelik sien, het ek eenvoudig die standaard van die waarde. 508 00:24:07,549 --> 00:24:09,590 So nou het ons 'n funksie wat sou lekker gewees het 509 00:24:09,590 --> 00:24:14,040 As CS50 sal implementeer in CS50.h en CS50.c vir jou, 510 00:24:14,040 --> 00:24:16,520 maar hier kan ons nou implementeer onsself. 511 00:24:16,520 --> 00:24:19,230 >> Maar twee kommentaar op 'n paar belangrike inligting. 512 00:24:19,230 --> 00:24:24,390 One-- hoekom het ek verklaar int n, dink jy, op die lyn 29 513 00:24:24,390 --> 00:24:27,139 in plaas van net te doen Dit is hier, wat 514 00:24:27,139 --> 00:24:28,930 meer in ooreenstemming met wat ons gedoen het die afgelope week? 515 00:24:28,930 --> 00:24:29,430 Ja? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 'N goeie gedagte. 518 00:24:35,110 --> 00:24:37,080 So as ons dit te sit hier, dis asof ons 519 00:24:37,080 --> 00:24:39,110 hou dit weer en weer te verklaar. 520 00:24:39,110 --> 00:24:42,000 Dit op sigself is nie problematies, per se, 521 00:24:42,000 --> 00:24:43,940 omdat ons net nodig die waarde een keer en dan 522 00:24:43,940 --> 00:24:45,330 ons gaan 'n nuwe een in elk geval kry. 523 00:24:45,330 --> 00:24:45,940 Maar 'n goeie gedagte. 524 00:24:45,940 --> 00:24:46,440 Ja? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Close. 527 00:24:53,330 --> 00:24:59,030 So, want ek het n op verklaar lyn 29 buite die lus, 528 00:24:59,030 --> 00:25:01,390 dit is toeganklik dwarsdeur hierdie hele funksie. 529 00:25:01,390 --> 00:25:05,400 Nie die ander funksies, want N is nog in hierdie krullerige 530 00:25:05,400 --> 00:25:06,470 draadjies hier. 531 00:25:06,470 --> 00:25:07,940 So-- seker. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Presies. 534 00:25:12,940 --> 00:25:14,356 So dit is selfs meer tot die punt. 535 00:25:14,356 --> 00:25:18,600 As ons plaas verklaar N reg hier op die lyn 32, 536 00:25:18,600 --> 00:25:22,340 dit is problematies omdat raaiskoot waar anders wat ek nodig het om dit te bekom? 537 00:25:22,340 --> 00:25:25,620 On line 34, en die eenvoudige reël is 538 00:25:25,620 --> 00:25:30,060 dat jy net kan gebruik om 'n veranderlike binnekant van die mees onlangse krulhakies 539 00:25:30,060 --> 00:25:31,420 waarin jy dit verklaar. 540 00:25:31,420 --> 00:25:35,230 >> Ongelukkig, lyn 34 is een lyn te laat, 541 00:25:35,230 --> 00:25:38,560 want ek het reeds gesluit die krullerige stut op die lyn 33 542 00:25:38,560 --> 00:25:41,220 wat ooreenstem met die krullerige stut op die lyn 30. 543 00:25:41,220 --> 00:25:44,180 En so is dit 'n manier om te sê dat hierdie veranderlike int is scoped, 544 00:25:44,180 --> 00:25:46,970 om so te praat, net binnekant van daardie krulhakies. 545 00:25:46,970 --> 00:25:48,910 Dit is net nie buite hulle bestaan ​​nie. 546 00:25:48,910 --> 00:25:51,580 >> So inderdaad, as ek dit doen verkeerd is, laat my die kode red 547 00:25:51,580 --> 00:25:53,530 as dit is-- verkeerd geskryf. 548 00:25:53,530 --> 00:25:57,990 Laat my gaan voort en maak funksie-1, en notice-- fout. 549 00:25:57,990 --> 00:26:03,502 Gebruik van swart identifiseerder n op die lyn 35, wat is reg hier. 550 00:26:03,502 --> 00:26:05,210 En as ons te blaai verder, 'n ander een. 551 00:26:05,210 --> 00:26:08,750 Gebruik van swart identifikasie N op die lyn 34. 552 00:26:08,750 --> 00:26:11,200 >> So het die samesteller, klang, is te merk dat dit net 553 00:26:11,200 --> 00:26:13,720 nie, selfs al bestaan duidelik dit is daar visueel. 554 00:26:13,720 --> 00:26:16,090 So 'n eenvoudige oplossing is verklaar dat dit daar. 555 00:26:16,090 --> 00:26:18,790 >> Nou kan ek gaan na die top van die lêer. 556 00:26:18,790 --> 00:26:21,080 Wat spring uit by jou as 'n bietjie anders 557 00:26:21,080 --> 00:26:23,070 van die dinge wat ons gekyk na die afgelope week? 558 00:26:23,070 --> 00:26:26,990 Nie net het ek die naam, nie net Ek het 'n paar skerp sluit tot bo, 559 00:26:26,990 --> 00:26:29,340 Ek het iets wat ek roep 'n prototipe. 560 00:26:29,340 --> 00:26:36,100 Nou wat lyk vreeslik soortgelyk aan wat sien ons net 'n oomblik gelede op die lyn 27. 561 00:26:36,100 --> 00:26:39,230 >> So laat ons aflei uit 'n ander fout boodskap waarom ek dit gedoen het. 562 00:26:39,230 --> 00:26:42,050 Laat my voort te gaan en verwyder hierdie lyne is daar. 563 00:26:42,050 --> 00:26:44,240 En so het ons niks weet nie prototipe. 564 00:26:44,240 --> 00:26:45,430 Remake hierdie lêer. 565 00:26:45,430 --> 00:26:46,890 Maak funksie een. 566 00:26:46,890 --> 00:26:48,090 En nou, damn, vier foute. 567 00:26:48,090 --> 00:26:50,220 Kom ons blaai tot by die eerste een. 568 00:26:50,220 --> 00:26:55,070 >> Implisiete verklaring van funksie kry positiewe int is ongeldig in C99. 569 00:26:55,070 --> 00:26:57,780 C99 beteken net die 1999 weergawe van die taal 570 00:26:57,780 --> 00:26:59,710 C, en dit is wat ons wel is met behulp van. 571 00:26:59,710 --> 00:27:01,050 So, wat beteken dit? 572 00:27:01,050 --> 00:27:05,250 Wel C-- en meer spesifiek C compilers-- is redelik dom programme. 573 00:27:05,250 --> 00:27:07,420 Hulle weet net wat jy het vir hulle gesê, en dit is 574 00:27:07,420 --> 00:27:08,960 eintlik tematiese van verlede week. 575 00:27:08,960 --> 00:27:12,910 >> Die probleem is dat as ek gaan oor die implementering van die naam hier, 576 00:27:12,910 --> 00:27:17,640 en ek noem 'n funksie genoem GetPositiveInt hier op die lyn 20, 577 00:27:17,640 --> 00:27:22,520 daardie funksie nie tegnies nie bestaan ​​totdat die samesteller sien reël 27. 578 00:27:22,520 --> 00:27:25,450 Ongelukkig is die samesteller is om dinge te doen top, af, links, regs, 579 00:27:25,450 --> 00:27:29,580 omdat dit nie gesien het nie die implementering van GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 maar dit sien jy probeer om dit te gebruik tot hier, 581 00:27:32,400 --> 00:27:35,810 dit is net gaan om te bail-- skree jy met 'n fout message-- miskien 582 00:27:35,810 --> 00:27:38,440 kriptiese, en nie eintlik stel die lêer. 583 00:27:38,440 --> 00:27:41,940 >> So 'n sogenaamde prototipe up hier is weliswaar oorbodig. 584 00:27:41,940 --> 00:27:47,870 Letterlik, het ek hier sit en ek kopieer en geplak het, en ek het dit hier. 585 00:27:47,870 --> 00:27:51,020 Nietig sou wees meer behoorlike, so ons sal letterlik kopieer en plak dit op hierdie tyd. 586 00:27:51,020 --> 00:27:52,854 Ek het letterlik gekopieer en geplak het. 587 00:27:52,854 --> 00:27:54,270 Eintlik net as soos 'n brood krummel. 588 00:27:54,270 --> 00:27:56,260 >> 'N Klein idee om die samesteller. 589 00:27:56,260 --> 00:27:58,860 Ek weet nie wat dit beteken nie, maar ek belowe om jou 590 00:27:58,860 --> 00:28:00,260 dat dit uiteindelik sal bestaan. 591 00:28:00,260 --> 00:28:04,010 En dit is die rede waarom hierdie line-- in lyn 16-- eindig met 'n kommapunt. 592 00:28:04,010 --> 00:28:05,486 Dit is oorbodig deur ontwerp. 593 00:28:05,486 --> 00:28:05,986 Ja? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> As jy nie jou biblioteek skakel te the-- O, goeie vraag. 596 00:28:14,360 --> 00:28:17,350 Skerp sluit kop lêer insluitings. 597 00:28:17,350 --> 00:28:20,040 Nodig het om te behoort amper be-- altyd op die top 598 00:28:20,040 --> 00:28:23,270 van die lêer vir 'n similar-- vir presies dieselfde rede, ja. 599 00:28:23,270 --> 00:28:26,430 Omdat in die standaard io.h is letterlik 'n lyn 600 00:28:26,430 --> 00:28:30,560 soos hierdie, maar met die woord printf, en met sy argumente en sy terugkeer tipe. 601 00:28:30,560 --> 00:28:33,310 En so deur te doen skerp sluit op hier, wat jy letterlik doen 602 00:28:33,310 --> 00:28:36,380 kopieer en plak die inhoud van iemand anders geskryf het tot bo-op. 603 00:28:36,380 --> 00:28:39,660 Daardeur cluing jou kode in die feit dat die funksies nie bestaan ​​nie. 604 00:28:39,660 --> 00:28:40,160 Ja? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Absoluut. 607 00:28:48,260 --> 00:28:51,690 So 'n baie slim en korrekte oplossing sou wees, weet jy wat? 608 00:28:51,690 --> 00:28:53,760 Ek weet nie wat 'n prototipe is, maar ek weet 609 00:28:53,760 --> 00:28:56,390 as ek verstaan ​​dat C is net stom en rethinks bo tot onder. 610 00:28:56,390 --> 00:28:57,820 Wel, laat ons gee dit wat hulle wil. 611 00:28:57,820 --> 00:29:01,650 Kom ons sny dat kode, plak dit top, en nou druk hoof hier neer. 612 00:29:01,650 --> 00:29:03,470 Dit sou ook die probleem op te los. 613 00:29:03,470 --> 00:29:07,409 >> Maar jy kan baie maklik kom met 'n scenario waarin 'n behoefte B te roep, 614 00:29:07,409 --> 00:29:10,075 en miskien B oproepe terug na A. Dit is iets genoem rekursie, 615 00:29:10,075 --> 00:29:11,370 en ons sal terug kom. 616 00:29:11,370 --> 00:29:13,911 En dit mag of nie mag wees om 'n goeie ding, maar jy kan beslis 617 00:29:13,911 --> 00:29:15,110 breek hierdie oplossing. 618 00:29:15,110 --> 00:29:17,690 >> En ook, sou ek eis stilisties, 619 00:29:17,690 --> 00:29:20,760 veral wanneer jou programme hierdie lang en hierdie lang geword, 620 00:29:20,760 --> 00:29:23,064 dit is net super gerieflik hoof aan die bokant te sit 621 00:29:23,064 --> 00:29:25,730 want dit is die ding wat die meeste programmeerders gaan omgee. 622 00:29:25,730 --> 00:29:28,150 En so het dit is 'n bietjie skoner, waarskynlik, om dit te doen om die manier 623 00:29:28,150 --> 00:29:30,380 Ek het aanvanklik het dit met 'n prototipe selfs 624 00:29:30,380 --> 00:29:33,396 al is dit lyk 'n bietjie oorbodig met die eerste oogopslag. 625 00:29:33,396 --> 00:29:33,895 Ja? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Jammer, jy kan sê dat dit harder? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> As jy skakel die plekke van die implementering en die prototipe? 630 00:29:49,580 --> 00:29:51,270 So dit is 'n goeie vraag. 631 00:29:51,270 --> 00:29:53,780 As jy weer verklaar dit neer hier, laat ons sien wat gebeur. 632 00:29:53,780 --> 00:29:55,530 So as ek dit neer hier, jy sê. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Ag, jammer. 635 00:29:58,360 --> 00:29:58,859 Harder? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Selfs harder. 638 00:30:04,011 --> 00:30:04,760 O ja, goeie vraag. 639 00:30:04,760 --> 00:30:05,860 Sou dit ongeldig die funksie? 640 00:30:05,860 --> 00:30:08,901 Jy weet, na al die jare, het ek het nog nooit 'n prototipe sit daarna. 641 00:30:08,901 --> 00:30:13,810 So kom ons doen maak funksie-1 nadat dit te doen. 642 00:30:13,810 --> 00:30:15,279 >> [Gemompel] 643 00:30:15,279 --> 00:30:16,320 David J. Malan O, wag. 644 00:30:16,320 --> 00:30:17,944 Ons het nog alles te sit bo-op. 645 00:30:17,944 --> 00:30:21,400 So laat ons doen dit hier, as ek jou vraag verstaan ​​korrek. 646 00:30:21,400 --> 00:30:24,700 Ek is om alles, insluitende die prototipe bogenoemde hoof, 647 00:30:24,700 --> 00:30:28,180 maar ek is besig om die prototipe onder die implementering. 648 00:30:28,180 --> 00:30:33,190 >> So as ek een kry ek terug 'n error-- ongebruikte veranderlike n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 O, daar. 651 00:30:37,860 --> 00:30:38,360 Dankie. 652 00:30:38,360 --> 00:30:39,430 Kom ons kyk, raak ons ​​ontslae van hierdie. 653 00:30:39,430 --> 00:30:41,304 Dit is 'n ander fout, so laat ons ignoreer dit. 654 00:30:41,304 --> 00:30:43,910 Kom ons regtig vinnig remake hierdie. 655 00:30:43,910 --> 00:30:48,100 >> OK, so data argument nie gebruik word deur formaat String 656 00:30:48,100 --> 00:30:52,310 n-- O, dit is omdat Ek verander na hierdie hier. 657 00:30:52,310 --> 00:30:55,885 Alle reg, ons weet wat die antwoord gaan aan- alles reg, hier gaan ons. 658 00:30:55,885 --> 00:31:00,560 Ag, dankie vir die positiewe. 659 00:31:00,560 --> 00:31:03,430 Alle reg, sal ek hierdie kode te los after-- ignoreer hierdie spesifieke fout 660 00:31:03,430 --> 00:31:08,300 aangesien dit was-- dit werk, is die antwoord. 661 00:31:08,300 --> 00:31:11,560 >> Daarom is dit nie oorskryf wat jy nou net gedoen het. 662 00:31:11,560 --> 00:31:14,800 Ek vermoed dat die opsteller is in so 'n manier geskryf 663 00:31:14,800 --> 00:31:18,420 dat dit jou prototipe ignoreer omdat die liggaam, so te sê, 664 00:31:18,420 --> 00:31:20,922 van die funksie het reeds geïmplementeer hoër op. 665 00:31:20,922 --> 00:31:23,380 Ek sou hê om werklik te raadpleeg die handleiding van die samesteller 666 00:31:23,380 --> 00:31:26,171 om te verstaan ​​as daar enige ander implikasie nie, maar met die eerste oogopslag 667 00:31:26,171 --> 00:31:29,290 net deur te probeer en te eksperimenteer, dit lyk asof daar geen impak te wees. 668 00:31:29,290 --> 00:31:30,730 Goeie vraag. 669 00:31:30,730 --> 00:31:33,660 >> So laat ons voor uitkom nou, beweeg weg van die newe-effekte wat 670 00:31:33,660 --> 00:31:36,660 funksies is dat so iets visueel op die skerm met printf, 671 00:31:36,660 --> 00:31:38,090 maar nie terugkeer nie 'n waarde. 672 00:31:38,090 --> 00:31:41,550 En funksies wat terugkeer waardes soos ons nou net gesien het 'n paar van. 673 00:31:41,550 --> 00:31:45,350 Ons het reeds gesien hierdie idee van die omvang, en ons sal weer en weer hierdie sien. 674 00:31:45,350 --> 00:31:47,210 Maar vir nou, weer, gebruik om die oppergesag van die duim 675 00:31:47,210 --> 00:31:51,410 dat 'n veranderlike kan slegs gebruik word binnekant van die mees onlangs geopen 676 00:31:51,410 --> 00:31:54,350 en geslote krulhakies as ons sien in daardie spesifieke voorbeeld. 677 00:31:54,350 --> 00:31:56,910 >> En as jy sê, daar is 'n ability-- 678 00:31:56,910 --> 00:32:00,040 jy 'n paar van die probleme kan oplos deur 'n veranderlike wêreldwyd 679 00:32:00,040 --> 00:32:01,290 op die top van 'n lêer. 680 00:32:01,290 --> 00:32:03,630 Maar in byna alle gevalle ons sal frons op dat, 681 00:32:03,630 --> 00:32:06,170 en inderdaad selfs nie in daardie oplossing vir nou. 682 00:32:06,170 --> 00:32:09,890 So vir nou, die afhaal is dat veranderlikes het hierdie idee van die omvang. 683 00:32:09,890 --> 00:32:13,430 >> Maar laat ons nou kyk na 'n ander droë manier eintlik soek 684 00:32:13,430 --> 00:32:15,810 op 'n paar mooi interessante implementering besonderhede. 685 00:32:15,810 --> 00:32:17,810 Hoe ons kan inligting verteenwoordig. 686 00:32:17,810 --> 00:32:20,370 En ons het reeds gekyk na die in die eerste week van die klas. 687 00:32:20,370 --> 00:32:23,320 Kyk na binaries en onsself herinner aan desimaal. 688 00:32:23,320 --> 00:32:28,310 >> Maar onthou van verlede week wat C verskillende data tipes en trosse meer 689 00:32:28,310 --> 00:32:30,600 maar die mees bruikbare kinders nou mag wees om hierdie. 690 00:32:30,600 --> 00:32:36,030 'N kar, of karakter, wat gebeur een greep, of agt stukkies totale te wees. 691 00:32:36,030 --> 00:32:40,060 En dit is om te sê dat die grootte van 'n kar is net een byte. 692 00:32:40,060 --> 00:32:45,370 'N greep is agt stukkies, so dit beteken dat ons kan verteenwoordig hoeveel karakters. 693 00:32:45,370 --> 00:32:47,320 Hoeveel briewe of simbole op die sleutelbord 694 00:32:47,320 --> 00:32:49,210 As ons een byte of agt stukkies. 695 00:32:49,210 --> 00:32:51,546 Dink terug aan week nul. 696 00:32:51,546 --> 00:32:53,420 As jy agt stukkies, hoeveel totale waardes 697 00:32:53,420 --> 00:32:55,503 kan jy verteenwoordig met patrone van nulle en ene? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- meer as dit. 700 00:33:00,260 --> 00:33:03,490 So totale 256 as jy begin tel vanaf nul. 701 00:33:03,490 --> 00:33:07,120 So as jy het agt bits-- so as ons het ons binêre bolle hier weer 702 00:33:07,120 --> 00:33:12,180 ons kon die gloeilampe draai op en af ​​in enige van 256 unieke patrone. 703 00:33:12,180 --> 00:33:13,640 >> Nou is dit 'n bietjie problematies. 704 00:33:13,640 --> 00:33:16,857 Nie soseer vir Engels en romanse tale, maar beslis 705 00:33:16,857 --> 00:33:19,190 wanneer jy stel vir Byvoorbeeld, Asiatiese tale, wat 706 00:33:19,190 --> 00:33:22,580 veel meer as simbole soos 26 letters van die alfabet. 707 00:33:22,580 --> 00:33:24,390 Ons is eintlik dalk nodig meer as een greep. 708 00:33:24,390 --> 00:33:28,240 En gelukkig in die afgelope jaar het die gemeenskap 709 00:33:28,240 --> 00:33:31,040 aangeneem ander standaarde wat gebruik meer as een greep per lading. 710 00:33:31,040 --> 00:33:34,210 >> Maar vir nou in C, die standaard is net een byte of agt stukkies. 711 00:33:34,210 --> 00:33:38,195 'N heelgetal is, intussen, is vier grepe, andersins bekend as 32 stukkies. 712 00:33:38,195 --> 00:33:41,320 Wat beteken, wat is die grootste moontlike getal wat ons kan voorstel met 'n int 713 00:33:41,320 --> 00:33:41,820 glo? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Met 'n miljard. 716 00:33:45,050 --> 00:33:46,760 So dit is 4000000000 gee of neem. 717 00:33:46,760 --> 00:33:49,840 2 by die 32th krag, as ons aanvaar geen negatiewe getalle 718 00:33:49,840 --> 00:33:52,530 en net gebruik om alle positiewe getalle, dit is 4000000000 719 00:33:52,530 --> 00:33:53,730 gee of neem moontlikhede. 720 00:33:53,730 --> 00:33:57,890 'N float, intussen, is 'n ander soort van data tipe in C. Dit is nog steeds 'n aantal, 721 00:33:57,890 --> 00:33:58,990 maar dit is 'n reële getal is. 722 00:33:58,990 --> 00:34:00,660 Iets met 'n desimale punt. 723 00:34:00,660 --> 00:34:03,000 En dit blyk dat C maak ook gebruik van vier grepe 724 00:34:03,000 --> 00:34:05,340 drywende punt waardes te verteenwoordig. 725 00:34:05,340 --> 00:34:09,420 >> Ongelukkig hoeveel swaai punt waardes is daar in die wêreld? 726 00:34:09,420 --> 00:34:11,582 Hoeveel reële getalle is daar? 727 00:34:11,582 --> 00:34:13,540 Daar is 'n oneindige nommer, en vir die saak 728 00:34:13,540 --> 00:34:15,164 daar is 'n oneindige aantal van heelgetalle. 729 00:34:15,164 --> 00:34:18,070 So ons is reeds soort grawe onsself 'n gat hier. 730 00:34:18,070 --> 00:34:21,780 Waardeur glo in computers-- by minste programme geskryf in C op them-- 731 00:34:21,780 --> 00:34:24,110 kan net so hoog soos tel 4000000000 gee of te neem, 732 00:34:24,110 --> 00:34:26,260 en swaai punt waardes kan net glo 733 00:34:26,260 --> 00:34:28,330 het 'n paar beperkte bedrag van akkuraatheid. 734 00:34:28,330 --> 00:34:30,810 Slegs so baie syfers na hul desimale punt. 735 00:34:30,810 --> 00:34:32,822 >> Omdat, natuurlik, indien jy het net 32 ​​stukkies, 736 00:34:32,822 --> 00:34:36,030 Ek weet nie hoe ons dit gaan om verteenwoordig real numbers-- waarskynlik 737 00:34:36,030 --> 00:34:37,409 met verskillende tipes patrone. 738 00:34:37,409 --> 00:34:40,030 Maar daar is sekerlik 'n beperkte aantal van sulke patrone, 739 00:34:40,030 --> 00:34:41,830 so ook hier is dit problematies. 740 00:34:41,830 --> 00:34:43,710 >> Nou kan ons die probleem effens vermy. 741 00:34:43,710 --> 00:34:45,710 As jy nie 'n float gebruik nie, jy kan gebruik om 'n dubbele 742 00:34:45,710 --> 00:34:50,230 in C, wat gee jou agt grepe, wat is manier om meer moontlike patrone van nulle 743 00:34:50,230 --> 00:34:50,730 en kinders. 744 00:34:50,730 --> 00:34:55,199 Maar dit is nog steeds eindig, wat gaan problematies wees as jy skryf sagteware 745 00:34:55,199 --> 00:34:57,670 vir grafiese of fancy wiskundige formules. 746 00:34:57,670 --> 00:35:00,410 So kan jy eintlik wil tel tot groter as dit. 747 00:35:00,410 --> 00:35:05,640 'N Lang long-- dom named-- is ook agt grepe of 64 stukkies, 748 00:35:05,640 --> 00:35:10,260 en dit is twee keer so lank as wat 'n int, en dit is vir 'n lang heelgetal waarde. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- as 'n int is vier grepe, hoe lank is 'n lang in C tipies? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Ook vier grepe, maar 'n lank lank is agt grepe, 752 00:35:21,560 --> 00:35:23,050 en dit is vir historiese redes. 753 00:35:23,050 --> 00:35:26,450 >> Maar die afhaal nou is net dat data het 754 00:35:26,450 --> 00:35:29,625 om in 'n computer-- wat verteenwoordig word 'n fisiese toestel met elektrisiteit, 755 00:35:29,625 --> 00:35:32,190 Dit is algemeen ry diegene nulle en ones-- 756 00:35:32,190 --> 00:35:34,320 met 'n beperkte hoeveelheid van presisie. 757 00:35:34,320 --> 00:35:35,620 So wat is die probleem dan? 758 00:35:35,620 --> 00:35:37,480 >> Wel, daar is 'n probleem van heelgetal oorloop. 759 00:35:37,480 --> 00:35:39,780 Nie net in C nie, maar in rekenaars in die algemeen. 760 00:35:39,780 --> 00:35:42,590 Byvoorbeeld, indien dit is 'n byte moeite werd 'n bit-- 761 00:35:42,590 --> 00:35:45,120 so as dit is agt bit-- al waarvan die nommer een. 762 00:35:45,120 --> 00:35:47,300 Watter getal is hierdie verteenwoordig as ons aanvaar 763 00:35:47,300 --> 00:35:50,730 dit is alles positiewe waardes in binêre? 764 00:35:50,730 --> 00:35:54,410 >> 255, en dit is nie 256 nie, want zero is die laagste getal. 765 00:35:54,410 --> 00:35:56,760 So 255 is die hoogste een nie, maar die probleem 766 00:35:56,760 --> 00:36:00,330 word veronderstel dat ek wou inkrementeer hierdie veranderlike wat 767 00:36:00,330 --> 00:36:04,030 is agt stukkies totaal gebruik as ek wil om dit te inkrementeer. 768 00:36:04,030 --> 00:36:07,160 >> Wel so gou as ek 'n een vir al hierdie mense, 769 00:36:07,160 --> 00:36:10,500 jy kan dalk dink visually-- net soos wat die een gebruik decimals-- 770 00:36:10,500 --> 00:36:12,300 iets gaan vloei na links. 771 00:36:12,300 --> 00:36:15,590 En inderdaad, as ek die nommer een van hierdie, wat gebeur in binêre 772 00:36:15,590 --> 00:36:17,670 is dat dit oorloop terug na nul. 773 00:36:17,670 --> 00:36:21,730 >> So as jy net use-- nie 'n int, maar 'n enkele byte heelgetalle te tel 774 00:36:21,730 --> 00:36:27,170 in 'n program, deur default-- so gou as jy tot 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 kom nadat 255, wat waarskynlik nie wat 776 00:36:32,710 --> 00:36:34,790 'n gebruiker gaan om te verwag. 777 00:36:34,790 --> 00:36:39,620 >> Nou intussen in drywende punt wêreld, jy het ook 'n soortgelyke probleem. 778 00:36:39,620 --> 00:36:42,670 Nie so baie met die grootste number-- Hoewel dit is nog steeds 'n probleem. 779 00:36:42,670 --> 00:36:45,360 Maar met die bedrag van akkuraatheid dat jy kan verteenwoordig. 780 00:36:45,360 --> 00:36:49,490 So laat ons neem 'n blik op hierdie voorbeeld hier ook van vandag se bron code-- 781 00:36:49,490 --> 00:36:52,070 dryf-0.C. 782 00:36:52,070 --> 00:36:54,280 >> En sien dit is 'n super eenvoudige program wat 783 00:36:54,280 --> 00:36:56,580 moet glo druk watter waarde? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Wat wed jy nie dit gaan druk selfs al is daar 'n bietjie van 'n nuwe sintaksis 786 00:37:04,110 --> 00:37:05,540 hier? 787 00:37:05,540 --> 00:37:06,700 So hopelik 0.1. 788 00:37:06,700 --> 00:37:10,000 So het die ekwivalent van een tiende want ek doen 1 gedeel deur 10. 789 00:37:10,000 --> 00:37:12,430 Ek stoor die antwoord in 'n veranderlike genoem f. 790 00:37:12,430 --> 00:37:15,850 Dit veranderlike van tipe float, wat is 'n navraag het ek net voorgestel bestaan. 791 00:37:15,850 --> 00:37:18,910 >> Ons het dit nie gesien het nie, maar hierdie is 'n soort van 'n netjiese manier printf 792 00:37:18,910 --> 00:37:22,110 spesifiseer hoeveel syfers jy wil sien na 'n desimale punt. 793 00:37:22,110 --> 00:37:25,020 So hierdie notasie beteken net dat hier is 'n tydelike. 794 00:37:25,020 --> 00:37:27,900 Dit is vir 'n drywende punt waarde, en oh, op die pad, 795 00:37:27,900 --> 00:37:31,389 wys dit met die desimale punt met een nommer na die desimale punt. 796 00:37:31,389 --> 00:37:33,180 So dit is die getal van beduidende syfers, 797 00:37:33,180 --> 00:37:34,650 om so te praat, wat jy dalk wil. 798 00:37:34,650 --> 00:37:40,450 >> So laat my gaan voort en doen maak float-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 en blykbaar 1 gedeel deur 10 is 0.0. 800 00:37:46,660 --> 00:37:47,760 Nou hoekom is dit? 801 00:37:47,760 --> 00:37:51,380 >> Weer goed is, word die rekenaar neem my letterlik, en ek het geskryf 1 802 00:37:51,380 --> 00:37:56,680 en ek geskryf 10, en 'n raaiskoot wat is die veronderstelde data tipe vir die twee 803 00:37:56,680 --> 00:37:58,440 waardes? 804 00:37:58,440 --> 00:38:00,970 'N int, dit is tegnies iets wat 'n bietjie anders. 805 00:38:00,970 --> 00:38:04,150 Dit is gewoonlik 'n lang, maar dit is uiteindelik 'n integrale waarde. 806 00:38:04,150 --> 00:38:06,030 Nie 'n drywende punt waarde. 807 00:38:06,030 --> 00:38:09,456 >> Wat is dat as dit te sê is 'n int, en dit is 'n int, 808 00:38:09,456 --> 00:38:11,830 Die probleem is dat die rekenaar het nie die vermoë om 809 00:38:11,830 --> 00:38:13,680 om selfs die stoor desimale punt. 810 00:38:13,680 --> 00:38:16,430 So wanneer jy 1 gedeel 10 gebruik heelgetalle 811 00:38:16,430 --> 00:38:20,950 vir beide die teller en die deler, moet die antwoord wees 0.1. 812 00:38:20,950 --> 00:38:24,930 Maar die computer-- omdat dit is integers-- 813 00:38:24,930 --> 00:38:27,430 weet nie wat om te doen met die 0.1. 814 00:38:27,430 --> 00:38:30,010 >> So, wat is dit duidelik doen? 815 00:38:30,010 --> 00:38:33,120 Dit is net gooi dit weg, en wat ek uiteindelik sien 816 00:38:33,120 --> 00:38:38,830 is 0.0 net omdat ek daarop aangedring dat printf wys my een desimale punt. 817 00:38:38,830 --> 00:38:41,740 Maar die probleem is dat as jy deel 'n heelgetal deur 'n heelgetal is, 818 00:38:41,740 --> 00:38:44,347 jy sal get-- per definisie van C-- 'n heelgetal. 819 00:38:44,347 --> 00:38:46,680 En dit is nie van plan om te doen iets mooi en gerieflik 820 00:38:46,680 --> 00:38:49,040 soos ronde dit tot die naaste aan of af. 821 00:38:49,040 --> 00:38:51,860 Dit gaan afkap alles na die desimaal. 822 00:38:51,860 --> 00:38:54,030 >> Dus net intuïtief, wat waarskynlik 'n fix? 823 00:38:54,030 --> 00:38:55,351 Wat is die eenvoudigste oplossing hier? 824 00:38:55,351 --> 00:38:55,850 Ja? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Presies. 827 00:39:01,100 --> 00:39:04,200 Hoekom het ons nie net behandel soos drywende punt waardes effektief 828 00:39:04,200 --> 00:39:05,860 draai hulle in dryf of dubbelspel. 829 00:39:05,860 --> 00:39:10,500 En as ek nou doen maak dryf-0, of as Ek stel dryf-1, 830 00:39:10,500 --> 00:39:12,570 wat identies is aan wat was net voorgestel. 831 00:39:12,570 --> 00:39:16,400 En nou doen ek dit dryf-0, nou kry ek my 0.1. 832 00:39:16,400 --> 00:39:17,234 >> En dit is ongelooflik. 833 00:39:17,234 --> 00:39:19,441 Maar nou is ek gaan doen iets wat 'n bietjie anders. 834 00:39:19,441 --> 00:39:22,280 Ek is nuuskierig om te sien wat regtig gaan op onder die enjinkap, 835 00:39:22,280 --> 00:39:26,050 en ek gaan om dit te druk uit tot 28 desimale plekke. 836 00:39:26,050 --> 00:39:29,730 Ek wil nie regtig sien 0.1000-- n infinite-- 837 00:39:29,730 --> 00:39:32,710 [Onhoorbaar] 27 nulle daarna 0.1. 838 00:39:32,710 --> 00:39:34,740 >> Wel, laat ons sien of dit is wat ek wel kry. 839 00:39:34,740 --> 00:39:39,430 Maak dryf-0 dieselfde lêer. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Kom ons zoom in op die dramatiese antwoord. 842 00:39:44,380 --> 00:39:49,980 Al hierdie tyd, het jy al gedink 1 gedeel deur 10 is 10%, of 0.1. 843 00:39:49,980 --> 00:39:50,810 Dit is nie. 844 00:39:50,810 --> 00:39:53,210 Ten minste so ver as die rekenaar betref. 845 00:39:53,210 --> 00:39:57,060 >> Nou why-- OK, dit is volledige leuen 1 gedeel deur 10 is 0.1. 846 00:39:57,060 --> 00:39:59,710 Maar why-- wat nie die afhaal vandag. 847 00:39:59,710 --> 00:40:04,010 So waarom nie die rekenaar dink, Anders as ons almal in die kamer, 848 00:40:04,010 --> 00:40:06,870 dat 1 gedeel deur 10 is eintlik dat gek waarde? 849 00:40:06,870 --> 00:40:10,620 Wat is die rekenaar doen glo? 850 00:40:10,620 --> 00:40:12,490 Wat is dit? 851 00:40:12,490 --> 00:40:13,785 >> Dit is nie oorstroom, per se. 852 00:40:13,785 --> 00:40:15,910 Oorloop is tipies wanneer jy draai om 'n waarde. 853 00:40:15,910 --> 00:40:18,970 Dit is hierdie uitgawe van onakkuraatheid in 'n drywende punt waarde 854 00:40:18,970 --> 00:40:22,220 waar jy net 32 of miskien selfs 64 bit. 855 00:40:22,220 --> 00:40:25,230 Maar as daar 'n oneindige aantal werklike numbers-- 856 00:40:25,230 --> 00:40:27,940 getalle met desimale punte en getalle thereafter-- sekerlik 857 00:40:27,940 --> 00:40:29,380 jy kan nie almal van hulle verteenwoordig. 858 00:40:29,380 --> 00:40:32,870 So het die rekenaar gegee ons die naaste wedstryd 859 00:40:32,870 --> 00:40:37,090 ter waarde kan dit stel die gebruik van daardie baie stukkies van die waarde wat ek eintlik wil hê nie, 860 00:40:37,090 --> 00:40:38,690 wat is 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Ongelukkig, as jy begin doen wiskunde, of jy 862 00:40:40,685 --> 00:40:44,360 begin met hierdie soort van drywende punt waardes in belangrike programs-- 863 00:40:44,360 --> 00:40:46,770 finansiële sagteware, militêre software-- enigiets 864 00:40:46,770 --> 00:40:49,090 waar persepsie is waarskynlik redelik belangrik. 865 00:40:49,090 --> 00:40:51,520 En jy begin met die toevoeging getalle soos hierdie, en begin 866 00:40:51,520 --> 00:40:54,050 loop dat sagteware met 'n baie groot insette 867 00:40:54,050 --> 00:40:56,890 of vir baie ure of baie dae of baie van die jaar, 868 00:40:56,890 --> 00:41:01,060 hierdie klein bietjie foute sekerlik kan optel met verloop van tyd. 869 00:41:01,060 --> 00:41:04,252 >> Nou as 'n eenkant, as jy al ooit gesien Superman 3 of Office Space 870 00:41:04,252 --> 00:41:05,960 en jy kan onthou hoe die ouens gesteel 871 00:41:05,960 --> 00:41:08,668 'n klomp geld uit hul rekenaar deur die gebruik van drywende punt waardes 872 00:41:08,668 --> 00:41:11,290 en die toevoeging tot die klein reste, hopelik dat die film 873 00:41:11,290 --> 00:41:12,390 maak nou meer sin. 874 00:41:12,390 --> 00:41:14,930 Dit is wat hulle verwys na in die fliek. 875 00:41:14,930 --> 00:41:16,710 Die feit dat die meeste maatskappye sal kyk nie 876 00:41:16,710 --> 00:41:18,600 na 'n sekere aantal desimale plekke, 877 00:41:18,600 --> 00:41:20,009 maar dit is breuke sent. 878 00:41:20,009 --> 00:41:22,550 So jy begin dit toe te voeg tot, jy begin 'n klomp geld te maak 879 00:41:22,550 --> 00:41:23,424 in jou bankrekening. 880 00:41:23,424 --> 00:41:25,160 So dit is Office Space verduidelik. 881 00:41:25,160 --> 00:41:28,220 >> Nou ongelukkig buite Office Space, is daar 882 00:41:28,220 --> 00:41:31,794 is 'n paar wettig kommerwekkende en beduidende impak 883 00:41:31,794 --> 00:41:33,710 van hierdie soort onderliggende ontwerp besluite te neem, 884 00:41:33,710 --> 00:41:35,990 en inderdaad een van die redes Ons gebruik C in die kursus 885 00:41:35,990 --> 00:41:39,640 word sodat jy regtig hierdie grond tot begrip van hoe rekenaars werk, 886 00:41:39,640 --> 00:41:42,440 hoe sagteware werk, en dit nie doen nie niks as vanselfsprekend aanvaar. 887 00:41:42,440 --> 00:41:45,820 >> En inderdaad ongelukkig, selfs met dat die fundamentele begrip, 888 00:41:45,820 --> 00:41:47,370 ons mense maak foute. 889 00:41:47,370 --> 00:41:51,310 En wat ek gedink ek wil deel is hierdie agt minute video hier geneem 890 00:41:51,310 --> 00:41:56,980 van 'n moderne Marvels episode, wat 'n opvoedkundige program op hoe dinge werk 891 00:41:56,980 --> 00:42:00,370 wat verf twee foto's wanneer 'n onbehoorlike gebruik 892 00:42:00,370 --> 00:42:02,540 en begrip van drywende punt waardes 893 00:42:02,540 --> 00:42:05,610 gelei tot 'n beduidende ongelukkige resultate. 894 00:42:05,610 --> 00:42:06,363 Kom ons neem 'n blik. 895 00:42:06,363 --> 00:42:07,029 [Video speel] 896 00:42:07,029 --> 00:42:11,290 -Ons Nou terug te keer na "Engineering Rampe "op moderne Marvels. 897 00:42:11,290 --> 00:42:12,940 Rekenaars. 898 00:42:12,940 --> 00:42:15,580 Ons het almal kom om te aanvaar dikwels frustrerende probleme wat 899 00:42:15,580 --> 00:42:20,960 het met them-- foute, virusse, en sagteware glitches-- vir klein pryse 900 00:42:20,960 --> 00:42:23,100 om te betaal vir die gerief. 901 00:42:23,100 --> 00:42:27,770 Maar in 'n hoë-tegnologie en 'n hoë spoed militêre en ruimte program aansoeke, 902 00:42:27,770 --> 00:42:32,780 die kleinste probleem kan word in 'n ramp vergroot. 903 00:42:32,780 --> 00:42:38,880 >> Op 4 Junie 1996, wetenskaplikes voorberei 'n onbemande Ariane 5-vuurpyl te loods. 904 00:42:38,880 --> 00:42:41,190 Dit was die uitvoering van wetenskaplike satelliete ontwerp 905 00:42:41,190 --> 00:42:44,570 presies hoe die stel Aarde se magneetveld interaksie 906 00:42:44,570 --> 00:42:47,380 met sonkrag winde. 907 00:42:47,380 --> 00:42:50,580 Die vuurpyl is gebou vir die Europese Ruimte-agentskap, 908 00:42:50,580 --> 00:42:54,400 en gelig van sy fasiliteit aan die kus van Frans-Guyana. 909 00:42:54,400 --> 00:42:57,520 >> -Ten Sowat 37 sekondes in die vlug, het hulle eerste 910 00:42:57,520 --> 00:42:59,070 opgemerk iets verkeerd loop. 911 00:42:59,070 --> 00:43:02,240 Dat die spuitpunte is draaibare in 'n manier waarop hulle moet regtig nie. 912 00:43:02,240 --> 00:43:06,550 Sowat 40 sekondes in die vlug, duidelik die voertuig was in die moeilikheid, 913 00:43:06,550 --> 00:43:08,820 en dit is toe hulle die besluit om dit te vernietig. 914 00:43:08,820 --> 00:43:12,370 Die reeks veiligheid beampte, met geweldige guts, die knoppie gedruk 915 00:43:12,370 --> 00:43:18,030 en blaas die vuurpyl voordat dit kon 'n gevaar vir die openbare veiligheid. 916 00:43:18,030 --> 00:43:21,010 >> -Hierdie Was die eerste reis van die Ariane 5, 917 00:43:21,010 --> 00:43:23,920 en die vernietiging het plaas as gevolg van die fout 918 00:43:23,920 --> 00:43:25,932 ingesluit in die vuurpyl se sagteware. 919 00:43:25,932 --> 00:43:27,640 -Die probleem op die Ariane was dat daar 920 00:43:27,640 --> 00:43:30,500 'n getal wat nodig is 64 stukkies uit te druk, 921 00:43:30,500 --> 00:43:33,560 en hulle wou omskep dit na 'n 16-bit nommer. 922 00:43:33,560 --> 00:43:36,820 Hulle het aanvaar dat die aantal nooit gaan baie groot. 923 00:43:36,820 --> 00:43:40,940 Dat die meeste van die syfers in die 64-bis getal was nulle. 924 00:43:40,940 --> 00:43:42,450 Hulle was verkeerd. 925 00:43:42,450 --> 00:43:45,000 >> -Die onvermoë van een sagteware program te aanvaar 926 00:43:45,000 --> 00:43:49,460 die aard van die getal wat deur ander was aan die wortel van die versuim. 927 00:43:49,460 --> 00:43:54,260 Sagteware-ontwikkeling het 'n baie duur deel van die nuwe tegnologie. 928 00:43:54,260 --> 00:43:57,060 Die Ariane 4-vuurpyl het was baie suksesvol. 929 00:43:57,060 --> 00:44:01,600 So baie van die sagteware geskep vir dit is ook gebruik in die Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -Die basiese probleem was dat die Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Was faster-- vinniger versnel, en die sagteware nie verantwoordelik vir dit. 932 00:44:11,200 --> 00:44:14,910 >> -Die vernietiging van die vuurpyl was 'n groot finansiële ramp. 933 00:44:14,910 --> 00:44:18,630 Alles te danke aan 'n minuut sagteware fout. 934 00:44:18,630 --> 00:44:21,160 Maar dit was nie die eerste time data omskakeling probleme 935 00:44:21,160 --> 00:44:24,770 het geteister moderne vuurpyl tegnologie. 936 00:44:24,770 --> 00:44:28,020 >> -In 1991 met die begin van die eerste Golf-oorlog, 937 00:44:28,020 --> 00:44:30,540 die Patriot raket ervaar 'n soortgelyke 938 00:44:30,540 --> 00:44:32,465 van 'n aantal sukses probleem. 939 00:44:32,465 --> 00:44:36,760 En as 'n gevolg 28 people-- 28 Amerikaanse soldiers-- is dood, 940 00:44:36,760 --> 00:44:39,010 en oor 'n honderd ander is gewond. 941 00:44:39,010 --> 00:44:42,830 Wanneer die Patriot, wat veronderstel was om te beskerm teen die inkomende Scuds, 942 00:44:42,830 --> 00:44:45,780 nie 'n missiel te vuur. 943 00:44:45,780 --> 00:44:51,610 >> -Wanneer Irak Koeweit, en Amerika geloods Desert Storm in die vroeë 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot missiel batterye ontplooi Saoedi-Arabië en Israel te beskerm 945 00:44:55,720 --> 00:44:59,180 uit die Irakse Scud missiel aanvalle. 946 00:44:59,180 --> 00:45:03,080 Die Patriot is 'n Amerikaanse medium-reeks oppervlak-tot-lug-stelsel 947 00:45:03,080 --> 00:45:06,530 vervaardig deur die Raytheon maatskappy. 948 00:45:06,530 --> 00:45:09,500 >> -Die grootte van die Patriot Interceptor itself-- 949 00:45:09,500 --> 00:45:14,705 dit is oor ongeveer 20 meter lank, en dit weeg ongeveer £ 2000. 950 00:45:14,705 --> 00:45:19,090 En dit dra 'n plofkop van ongeveer, Ek dink dit is ongeveer £ 150. 951 00:45:19,090 --> 00:45:23,880 En die Warhead self is 'n hoë plofstof, wat 952 00:45:23,880 --> 00:45:26,700 het fragmente rondom hom. 953 00:45:26,700 --> 00:45:31,630 So het die omhulsel van die Warhead is ontwerp om op te tree soos 'n Buck. 954 00:45:31,630 --> 00:45:34,040 >> -Die missiele is uitgevoer vier per houer, 955 00:45:34,040 --> 00:45:37,170 en is deur 'n semi sleepwa vervoer word. 956 00:45:37,170 --> 00:45:44,880 >> -Die Patriot anti-missiel-stelsel gaan terug ten minste 20 jaar nou. 957 00:45:44,880 --> 00:45:48,380 Dit is oorspronklik ontwerp as 'n lug verdediging missiel 958 00:45:48,380 --> 00:45:50,810 te skiet vyand vliegtuie. 959 00:45:50,810 --> 00:45:54,410 In die eerste Golf-oorlog toe dat die oorlog het op, 960 00:45:54,410 --> 00:45:59,650 die weermag wou dit te gebruik om te skiet Scuds, nie vliegtuie. 961 00:45:59,650 --> 00:46:03,580 Die Irakse Air Force was nie so veel van 'n probleem, 962 00:46:03,580 --> 00:46:06,590 Maar die leër is bekommerd oor Scuds. 963 00:46:06,590 --> 00:46:10,120 En so het hulle probeer om te die opgradering van die pad. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting 'N vyand missiel wat teen Mach 5 965 00:46:12,740 --> 00:46:15,670 gaan word genoeg uitdagend. 966 00:46:15,670 --> 00:46:18,440 Maar toe die Patriot was in diens gehaas, 967 00:46:18,440 --> 00:46:22,580 die weermag was nie bewus van 'n Irakse verandering wat 968 00:46:22,580 --> 00:46:25,880 het hul scuds byna onmoontlik om dit te. 969 00:46:25,880 --> 00:46:30,690 >> -Wat Gebeur het, is die Scuds wat is in die komende was onstabiel. 970 00:46:30,690 --> 00:46:32,000 Hulle was wankelrig. 971 00:46:32,000 --> 00:46:37,210 Die rede hiervoor was die Iraqis-- ten einde tot 600 kilometer uit te kry 972 00:46:37,210 --> 00:46:41,680 van 'n 300-kilometer missile-- het gewig uit die voorkant Warhead, 973 00:46:41,680 --> 00:46:43,340 en hy het die Warhead ligter. 974 00:46:43,340 --> 00:46:48,490 So het die Patriot se probeer om te kom by die Scud, en die meeste van die time-- 975 00:46:48,490 --> 00:46:52,880 die oorgrote meerderheid van die time-- dit sou net vlieg deur die Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Wanneer Die Patriot-stelsel operateurs besef die Patriot sy teiken gemis het, 977 00:46:57,120 --> 00:47:01,630 hulle ontplof die Patriot se Warhead moontlike slagoffers as dit te vermy 978 00:47:01,630 --> 00:47:04,440 is toegelaat om op die grond val. 979 00:47:04,440 --> 00:47:08,700 >> -Dat is wat die meeste mense sien so groot vuurballe in die lug, 980 00:47:08,700 --> 00:47:14,180 en misverstaan ​​as afsnitte van Scud hoofde. 981 00:47:14,180 --> 00:47:18,020 >> -Although In die nag lug, Patriotte blyk te wees suksesvol vernietig 982 00:47:18,020 --> 00:47:23,280 Scuds op Dhahran daar kan geen fout van sy prestasie. 983 00:47:23,280 --> 00:47:27,930 Daar het die Patriot se radarstelsel verloor die spoor van 'n inkomende Scud 984 00:47:27,930 --> 00:47:30,260 en nooit van stapel gestuur weens 'n sagteware fout. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Dit was die Israeli's wat die eerste keer ontdek dat hoe langer die stelsel was, 987 00:47:38,880 --> 00:47:41,130 hoe groter is die tyd verskil het. 988 00:47:41,130 --> 00:47:44,770 As gevolg van 'n klok ingesluit in die stelsel se rekenaar. 989 00:47:44,770 --> 00:47:48,190 >> -About Twee weke voor die tragedie in Dhahran, 990 00:47:48,190 --> 00:47:50,720 die Israeli berig die Departement van Verdediging 991 00:47:50,720 --> 00:47:52,410 dat die stelsel verloor tyd. 992 00:47:52,410 --> 00:47:54,410 Na ongeveer agt uur hardloop, het hulle opgemerk 993 00:47:54,410 --> 00:47:57,690 dat die stelsel se wording merkbaar minder akkuraat. 994 00:47:57,690 --> 00:48:01,850 Die Departement van Verdediging het gereageer deur vertel al die Patriot batterye 995 00:48:01,850 --> 00:48:04,800 om nie die stelsels verlaat vir 'n lang tyd. 996 00:48:04,800 --> 00:48:06,980 Hulle het nooit gesê wat 'n lang tyd was. 997 00:48:06,980 --> 00:48:09,140 8 uur, 10 uur, 'n duisend uur. 998 00:48:09,140 --> 00:48:11,300 Niemand het geweet. 999 00:48:11,300 --> 00:48:13,320 >> -Die Patriot battery gestasioneer by die kamp 1000 00:48:13,320 --> 00:48:18,310 by Dhahran en sy gebrekkige interne klok was vir meer as 100 uur 1001 00:48:18,310 --> 00:48:21,520 op die aand van 25 Februarie. 1002 00:48:21,520 --> 00:48:25,792 >> -Dit Nagespoor tyd tot 'n akkuraatheid van ongeveer 'n tiende van 'n sekonde. 1003 00:48:25,792 --> 00:48:27,950 Nou 'n tiende van 'n sekonde is 'n interessante aantal 1004 00:48:27,950 --> 00:48:31,850 omdat dit nie uitgedruk kan word in binêre presies wat 1005 00:48:31,850 --> 00:48:36,500 beteken dit kan nie presies uitgedruk word in 'n moderne digitale rekenaar. 1006 00:48:36,500 --> 00:48:41,070 Dit is moeilik om te glo, maar gebruik dit as 'n voorbeeld. 1007 00:48:41,070 --> 00:48:43,420 >> Kom ons neem die nommer een derde plek. 1008 00:48:43,420 --> 00:48:47,330 Een derde kan nie uitgedruk in desimale presies. 1009 00:48:47,330 --> 00:48:52,060 Een derde is 0,333 gaan vir oneindig. 1010 00:48:52,060 --> 00:48:56,420 Daar is geen manier om dit te doen met absolute akkuraatheid in 'n desimaal. 1011 00:48:56,420 --> 00:48:59,530 Dit is presies die soort van probleem wat gebeur het in die pad. 1012 00:48:59,530 --> 00:49:04,040 Hoe langer die stelsel het, die erger die tyd fout is. 1013 00:49:04,040 --> 00:49:08,840 >> -na 100 ure van die operasie, die fout in die tyd was net ongeveer een derde 1014 00:49:08,840 --> 00:49:10,440 van 'n sekonde. 1015 00:49:10,440 --> 00:49:14,150 Maar in terme van die fokus op 'n missiel wat teen Mach 5, 1016 00:49:14,150 --> 00:49:18,560 dit het gelei tot 'n dop fout van meer as 600 meter. 1017 00:49:18,560 --> 00:49:21,870 Dit sou 'n fatale fout wees vir die soldate by Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> -Wat Gebeur het, is 'n Scud bekendstelling was waargeneem deur vroeë waarskuwing satelliete, 1019 00:49:28,455 --> 00:49:32,710 en hulle het geweet dat 'n Scud kom in hul rigting. 1020 00:49:32,710 --> 00:49:35,150 Hulle het nie geweet waar dit vandaan kom. 1021 00:49:35,150 --> 00:49:38,210 Dit was nou tot die radar komponent van die Patriot-stelsel 1022 00:49:38,210 --> 00:49:43,150 verdedig Dhahran op te spoor en te hou spoor van die inkomende vyand raket. 1023 00:49:43,150 --> 00:49:44,561 >> -Die radar was baie slim. 1024 00:49:44,561 --> 00:49:46,560 Dit sou eintlik spoor die posisie van die Scud 1025 00:49:46,560 --> 00:49:48,930 en voorspel dan waar dit sal waarskynlik 1026 00:49:48,930 --> 00:49:51,380 die volgende keer die radar het 'n pols uit. 1027 00:49:51,380 --> 00:49:53,040 Dit was bekend as die reeks hek. 1028 00:49:53,040 --> 00:49:57,620 >> -Dan Sodra die Patriot besluit genoeg tyd het 1029 00:49:57,620 --> 00:50:02,400 geslaag om terug te gaan en kyk of die volgende plek vir hierdie bespeur voorwerp 1030 00:50:02,400 --> 00:50:03,550 dit gaan terug. 1031 00:50:03,550 --> 00:50:07,820 So wanneer dit gaan terug na die verkeerde plek, dit sien dan geen voorwerp. 1032 00:50:07,820 --> 00:50:10,360 En dit besluit dat daar geen voorwerp. 1033 00:50:10,360 --> 00:50:13,630 Dat daar 'n valse opsporing en dit val van die baan. 1034 00:50:13,630 --> 00:50:16,970 >> -Die inkomende Scud verdwyn van die radar skerm, 1035 00:50:16,970 --> 00:50:20,200 en sekondes later, is dit klap in die kamp. 1036 00:50:20,200 --> 00:50:22,570 Die Scud vermoor 28. 1037 00:50:22,570 --> 00:50:26,110 Dit is die laaste een geskiet tydens die eerste Golfoorlog. 1038 00:50:26,110 --> 00:50:31,920 Dit is tragies dat die updated sagteware aangekom teen dagbreek die volgende dag. 1039 00:50:31,920 --> 00:50:34,870 Die sagteware fout het vasgestel is, sluit 1040 00:50:34,870 --> 00:50:39,150 een hoofstuk in die onstuimige geskiedenis van die Patriot raket. 1041 00:50:39,150 --> 00:50:40,030 >> [Einde video speel] 1042 00:50:40,030 --> 00:50:41,488 >> David J. Malan Dit is dit vir CS50. 1043 00:50:41,488 --> 00:50:42,820 Ons sal jy sien op Woensdag. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [Speel van musiek] 1046 00:50:50,370 --> 00:54:23,446