1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [Zenelejátszás] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 David J. MALAN: Rendben. 5 00:00:12,660 --> 00:00:15,590 Ez CS50, és ez a a hét elején két. 6 00:00:15,590 --> 00:00:19,120 Kezdjük tehát ma a hibát. 7 00:00:19,120 --> 00:00:20,974 A hiba, persze, egy hiba a programban, 8 00:00:20,974 --> 00:00:22,890 és kapsz nagyon ismerik ezt a fogalmat 9 00:00:22,890 --> 00:00:26,050 ha soha nem programozott előtt. pset0 és most pset1. 10 00:00:26,050 --> 00:00:29,280 De nézzük meg valamit egy kis egyszerű az elején. 11 00:00:29,280 --> 00:00:32,189 Ez a program, hogy itt én dobta össze előre, 12 00:00:32,189 --> 00:00:37,280 és azt állítják, hogy ezt ki kell nyomtatnia 10 csillag a képernyőn a printf, 13 00:00:37,280 --> 00:00:41,020 de ez nyilvánvalóan hibás a valamilyen módon. 14 00:00:41,020 --> 00:00:45,370 >> Tekintettel arra, hogy előírás, hogy kell nyomtatni 10 csillag, 15 00:00:45,370 --> 00:00:50,230 de nem úgy tűnik, hogy mi azt állítják, ez a hiba? 16 00:00:50,230 --> 00:00:52,004 Igen? 17 00:00:52,004 --> 00:00:54,420 Szóval ez egy ki egy hiba, és mit értesz ez alatt? 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 Kiváló. 22 00:01:10,410 --> 00:01:13,930 Így már meg a kezdeti érték nulla i, 23 00:01:13,930 --> 00:01:18,399 és mi már meg egy n értéke 10, de már használt kisebb vagy egyenlő. 24 00:01:18,399 --> 00:01:21,190 És az oka, hogy ez a két karakterek és nem csak egy szimbólum, 25 00:01:21,190 --> 00:01:22,630 mint egy matematikai könyvet, az, hogy nem kell 26 00:01:22,630 --> 00:01:24,880 egy módja kifejező egy karakterrel ekvivalens. 27 00:01:24,880 --> 00:01:28,450 >> Ez azt jelenti, kevesebb, de ha elkezd számolás nulla, 28 00:01:28,450 --> 00:01:31,690 de számít az utat egészen és legalább 10, 29 00:01:31,690 --> 00:01:34,170 Ön természetesen fog száma 11 dolog összesen. 30 00:01:34,170 --> 00:01:35,900 És így fogsz nyomtatni 11 csillag. 31 00:01:35,900 --> 00:01:37,990 Szóval, mi lehet egy fix ehhez? 32 00:01:37,990 --> 00:01:39,970 Igen? 33 00:01:39,970 --> 00:01:43,980 >> Tehát csak állítsa be a kisebb vagy egyenlő, csak kevesebb, mint, 34 00:01:43,980 --> 00:01:46,250 és van, azt állítom, talán egy másik megoldás is. 35 00:01:46,250 --> 00:01:47,210 Mi lehet még tenni? 36 00:01:47,210 --> 00:01:48,590 Igen? 37 00:01:48,590 --> 00:01:53,660 >> Így kezdődik egyenlő 1-re, és hagyja el a kisebb vagy egyenlő. 38 00:01:53,660 --> 00:01:56,187 És őszintén szólva azt állítják, , hogy egy tipikus emberi, 39 00:01:56,187 --> 00:01:57,770 ez valószínűleg egyszerűbb. 40 00:01:57,770 --> 00:02:00,280 Kezdje számolás 1 és számít fel a 10. 41 00:02:00,280 --> 00:02:01,690 Lényegében, amit gondolsz. 42 00:02:01,690 --> 00:02:04,010 >> De a valóság az programozás, mint láttuk, 43 00:02:04,010 --> 00:02:07,598 számítógépes szakemberek és programozók általában nem indul számolás nulla. 44 00:02:07,598 --> 00:02:09,389 És ez rendben van, ha Ön szokni. 45 00:02:09,389 --> 00:02:12,640 Ön állapotát általában valami ilyesmi kevesebb. 46 00:02:12,640 --> 00:02:14,910 Tehát csak a logikai hiba, hogy tudnánk most 47 00:02:14,910 --> 00:02:17,990 fix és végül újrafordítani ezt, és már éppen 10. 48 00:02:17,990 --> 00:02:19,610 >> Nos, hogy ezt a hibát itt? 49 00:02:19,610 --> 00:02:24,200 Itt megint, azt állítom, hogy én a cél a nyomtatás 10 stars-- 50 00:02:24,200 --> 00:02:28,140 soronként egy ebben az időben, de ez nem az. 51 00:02:28,140 --> 00:02:30,940 Mielőtt javaslatot, amit A javítás, mit jelent ez 52 00:02:30,940 --> 00:02:34,640 nyomtatni vizuálisan ha én lefordítani és a program futtatásához gondolsz? 53 00:02:34,640 --> 00:02:35,140 Igen? 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 Tehát minden a csillagok a ugyanabban a sorban az, amit hallottam, 57 00:02:41,690 --> 00:02:43,391 majd az új sor karaktert. 58 00:02:43,391 --> 00:02:44,140 Szóval próbáljuk ezt. 59 00:02:44,140 --> 00:02:48,710 Tehát, hogy hibás-1, be, és látom a csengés parancs 60 00:02:48,710 --> 00:02:50,090 hogy beszéltünk utoljára. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, sőt látom, mind a 10 csillag ugyanabban a sorban, bár azt állítom, 62 00:02:55,180 --> 00:02:58,690 az én specifikáció csak egy megjegyzés tetején A kód, amit szándékoznak tenni egy darab 63 00:02:58,690 --> 00:02:59,230 vonal. 64 00:02:59,230 --> 00:03:00,580 De ez úgy néz ki, rendben. 65 00:03:00,580 --> 00:03:04,620 >> Most a 15. sor úgy néz ki, mint én vagyok, nyomtat, csillag, majd a vonal 16 66 00:03:04,620 --> 00:03:06,620 úgy néz ki, mintha én lennék a nyomtatás új sor karakterrel, 67 00:03:06,620 --> 00:03:09,560 és ők mindketten beljebb így Bent vagyok a hurok tisztán. 68 00:03:09,560 --> 00:03:13,610 Tehát nem én csinál csillag, új vonal, csillag, új vonal, csillag, új vonal? 69 00:03:13,610 --> 00:03:14,110 Igen? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Igen, ellentétben a nyelv, mint a Python, ha ismerős, 72 00:03:21,240 --> 00:03:23,540 behúzás nem számít a számítógéphez. 73 00:03:23,540 --> 00:03:25,280 Csak az a fontos, hogy az ember. 74 00:03:25,280 --> 00:03:29,860 Tehát, míg itt, amit kitalált sor 15. és 16-- úgy néz ki, szép, 75 00:03:29,860 --> 00:03:31,330 de a számítógép nem érdekli. 76 00:03:31,330 --> 00:03:34,640 A számítógép törődik hogy ténylegesen kapcsos zárójelek 77 00:03:34,640 --> 00:03:36,310 körül ezeket a sorokat a kód. 78 00:03:36,310 --> 00:03:39,520 >> Úgy, hogy ez az clear-- akárcsak Scratch-- hogy e két sornyi kód 79 00:03:39,520 --> 00:03:40,450 kell végrehajtani. 80 00:03:40,450 --> 00:03:44,390 Mint azok a sárga Scratch puzzle darabokat újra és újra és újra. 81 00:03:44,390 --> 00:03:50,920 >> Tehát most, ha újra futtatni ezt képzés-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Van egy hiba most. 83 00:03:51,770 --> 00:03:54,212 Mit tettem felejts el? 84 00:03:54,212 --> 00:03:55,420 Igen, így nem összeállításhoz. 85 00:03:55,420 --> 00:03:56,740 Tehát, hogy hibás-2. 86 00:03:56,740 --> 00:03:59,840 Nincs ilyen fájl, mert nem tulajdonképpen össze a második verzió. 87 00:03:59,840 --> 00:04:04,860 Így most érdekes be nem jelentett változó-- nem 2. 88 00:04:04,860 --> 00:04:05,510 Megcsináljuk 1. 89 00:04:05,510 --> 00:04:11,050 Készíts buggy-1-- ./buggy-1-- és most mindegyik ugyanabban a sorban. 90 00:04:11,050 --> 00:04:13,880 >> Most van egy kivétel ez állítólagos követelés az enyém 91 00:04:13,880 --> 00:04:15,520 hogy meg kell ezeket kapcsos zárójelek. 92 00:04:15,520 --> 00:04:20,160 Mikor valójában OK-- ha már észre szakasz vagy textbooks-- 93 00:04:20,160 --> 00:04:22,130 hogy kihagyja a kapcsos zárójelek? 94 00:04:22,130 --> 00:04:22,630 Igen? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Pontosan. 97 00:04:26,870 --> 00:04:28,940 Amikor csak egy kódsor, amit 98 00:04:28,940 --> 00:04:32,830 szeretné, hogy vonják be a hurok, mint az első példa. 99 00:04:32,830 --> 00:04:36,380 Ez teljesen jogos hogy kihagyja a kapcsos zárójelek 100 00:04:36,380 --> 00:04:40,310 mint egyfajta kényelem a fordító az Ön számára. 101 00:04:40,310 --> 00:04:40,810 Igen? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Jó kérdés. 104 00:04:43,930 --> 00:04:45,500 Lenne tekinthető stílus hiba? 105 00:04:45,500 --> 00:04:49,340 Szeretnénk promote-- mint CS50 stílus útmutató, az URL-t, amely 106 00:04:49,340 --> 00:04:51,926 van pset1-- hogy mindig használja a kapcsos zárójelek. 107 00:04:51,926 --> 00:04:53,550 Bizonyára, ha új a programozás. 108 00:04:53,550 --> 00:04:56,800 A valóság az, hogy nem vagyunk fogja megtiltani, hogy 109 00:04:56,800 --> 00:04:58,680 csinálja ezeket komforttal. 110 00:04:58,680 --> 00:05:00,846 De ha csak most a hinta a dolgok, 111 00:05:00,846 --> 00:05:04,020 feltétlenül csak mindig a göndör nadrágtartó, amíg nem kap a nyitjára. 112 00:05:04,020 --> 00:05:04,640 Jó kérdés. 113 00:05:04,640 --> 00:05:05,320 >> Rendben. 114 00:05:05,320 --> 00:05:07,660 Annak érdekében, hogy akkor volt a hiba. 115 00:05:07,660 --> 00:05:09,190 Legalábbis valami nagyon egyszerű. 116 00:05:09,190 --> 00:05:11,260 És mégis azt gondolhatja ezt meglehetősen kezdetleges, nem igaz? 117 00:05:11,260 --> 00:05:13,635 Ez a fajta az első héten nézi a nyelv 118 00:05:13,635 --> 00:05:14,890 mint látni a hibákat benne. 119 00:05:14,890 --> 00:05:17,250 De a valóság ezek valójában képviselő 120 00:05:17,250 --> 00:05:20,310 Néhány szép ijesztő problémák amelyek felmerülhetnek a valós világban. 121 00:05:20,310 --> 00:05:23,530 >> Néhányan talán felidézni ha követed tech hírek, 122 00:05:23,530 --> 00:05:25,740 vagy talán még fogott szél ezt a február 123 00:05:25,740 --> 00:05:29,434 Az elmúlt évben, hogy az Apple már készült egy kis hiba mindkét iOS, 124 00:05:29,434 --> 00:05:31,350 Az operációs rendszer a telefonját, és azt is 125 00:05:31,350 --> 00:05:34,220 Mac OS, az operációs rendszer a saját asztali és hordozható. 126 00:05:34,220 --> 00:05:36,480 És akkor látta, mint címoldalára, mint ez. 127 00:05:36,480 --> 00:05:41,120 Majd ezt követően, az Apple megígérte, hogy javítja a hibát, 128 00:05:41,120 --> 00:05:45,950 és nagyon gyorsan tette megjavítani iOS, de aztán végül fix, hogy a Mac OS 129 00:05:45,950 --> 00:05:46,810 is. 130 00:05:46,810 --> 00:05:50,370 >> Most ezek közül egyik sem főcím csak igazán kiderüljön, mi a mögöttes probléma, 131 00:05:50,370 --> 00:05:55,640 de a hiba végül csökkent egy hiba SSL, a Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 És hosszú történet rövid, ez a szoftver 133 00:05:57,390 --> 00:06:01,030 hogy a böngészők és egyéb használt szoftver hogy mit csináljon? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Ha azt mondanám, hogy az SSL szó, amikor 136 00:06:06,860 --> 00:06:13,920 meglátogat egy URL-t, amely kezdődik HTTPS, akkor mi lehet SSL köthető? 137 00:06:13,920 --> 00:06:14,580 Titkosítást. 138 00:06:14,580 --> 00:06:16,470 Így fogunk beszélni, ez az elkövetkező napokban. 139 00:06:16,470 --> 00:06:18,750 Titkosítás, a művészet kódolási információ. 140 00:06:18,750 --> 00:06:22,200 >> De hosszú történet rövid, az Apple valamikor ezelőtt, hogy hibázott 141 00:06:22,200 --> 00:06:25,970 azok végrehajtása SSL, a szoftver, amely végül megvalósítja 142 00:06:25,970 --> 00:06:30,120 URL-ek, mint a HTTPS vagy max kapcsolatok ott is. 143 00:06:30,120 --> 00:06:32,850 Melynek eredménye az, hogy a kapcsolatok potenciálisan 144 00:06:32,850 --> 00:06:33,920 hozzáférhetnek. 145 00:06:33,920 --> 00:06:37,130 És a kapcsolatok is nem feltétlenül titkosított 146 00:06:37,130 --> 00:06:40,350 ha volt valami rossz srác között Ön és a cél weboldal, aki 147 00:06:40,350 --> 00:06:42,170 tudta, hogyan kell kihasználni ezt. 148 00:06:42,170 --> 00:06:45,090 >> Most az Apple végül írt A javítás erre végül 149 00:06:45,090 --> 00:06:46,920 és a leírást ezek fix volt ez. 150 00:06:46,920 --> 00:06:49,878 Biztonságos közlekedés nem érvényesítették a hitelességét a kapcsolatot. 151 00:06:49,878 --> 00:06:52,920 A probléma megoldásaként helyreállítása hiányzó érvényesítés lépéseket. 152 00:06:52,920 --> 00:06:57,250 >> Tehát ez egy nagyon kézzel hullámos magyarázata az csak annyit mondok, hogy elcseszte. 153 00:06:57,250 --> 00:07:00,920 Szó szerint egy kódsor volt hibás 154 00:07:00,920 --> 00:07:05,130 azok végrehajtásában SSL, és ha megy online, és keresse meg a jelen 155 00:07:05,130 --> 00:07:07,210 akkor valóban talál az eredeti forráskód. 156 00:07:07,210 --> 00:07:11,960 Például, ez a képernyő lövés csak egy része meglehetősen nagy fájlt, 157 00:07:11,960 --> 00:07:15,965 de ez nyilvánvalóan egy olyan funkció az úgynevezett SSL ellenőrizze jel server kulcs csere. 158 00:07:15,965 --> 00:07:17,840 És tart egy csomó érvek és bemenetek. 159 00:07:17,840 --> 00:07:20,298 És nem fogunk koncentrálni túl sok a minutia ott, 160 00:07:20,298 --> 00:07:24,390 de ha elsősorban a kódrészletet Az, hogy a legfelső function-- nézzük 161 00:07:24,390 --> 00:07:25,590 ráközelít az. 162 00:07:25,590 --> 00:07:28,140 Lehet, hogy már gyanakszik mi a hiba miatt 163 00:07:28,140 --> 00:07:31,230 lehet akkor is, ha fogalma sincs, végül mit nézel. 164 00:07:31,230 --> 00:07:35,924 Van egyfajta anomália itt, amely a mi? 165 00:07:35,924 --> 00:07:38,940 >> Ja, én nem igazán szeretem a megjelenés két goto nem. 166 00:07:38,940 --> 00:07:42,060 Őszintén szólva, én nem igazán tudom, mi goto eszközökkel nem rendelkezik, de két közülük 167 00:07:42,060 --> 00:07:42,810 háttal. 168 00:07:42,810 --> 00:07:45,290 Hogy csak ilyen súrolja nekem szellemileg a rossz irányba, 169 00:07:45,290 --> 00:07:48,910 sőt ha nagyítani csak azokat a sorokat, ez a C. 170 00:07:48,910 --> 00:07:52,220 >> Szóval egy csomó Apple kód maga is C-ben írt, 171 00:07:52,220 --> 00:07:55,780 és ez nyilvánvalóan nagyon equivalent-- 172 00:07:55,780 --> 00:07:59,060 nem, hogy a szép behúzás változat, de ha ismeri a tény 173 00:07:59,060 --> 00:08:02,560 hogy nincs kapcsos zárójelek, milyen Apple tényleg írtam, kód, hogy néz ki 174 00:08:02,560 --> 00:08:03,540 mint ez. 175 00:08:03,540 --> 00:08:07,080 Szóval lekicsinyíti, és én csak rögzítette a behúzás abban az értelemben, 176 00:08:07,080 --> 00:08:10,690 hogy ha nincs kapcsos zárójelek, hogy második goto nem ez a sárga 177 00:08:10,690 --> 00:08:12,500 fog végrehajtani nem számít, mit. 178 00:08:12,500 --> 00:08:15,540 Ez nem jár az, ha feltétel felette. 179 00:08:15,540 --> 00:08:19,590 >> Tehát még egyszer, ha nem teljesen értem, mi ez esetleg 180 00:08:19,590 --> 00:08:23,230 keresne, tudja, hogy minden ilyen állapotra mindegyik sor 181 00:08:23,230 --> 00:08:26,180 egy nagyon fontos lépés a folyamat ellenőrzése 182 00:08:26,180 --> 00:08:28,350 ha az adatok valójában titkosított. 183 00:08:28,350 --> 00:08:31,710 Így kihagyva egy ilyen lépések, nem a legjobb ötlet. 184 00:08:31,710 --> 00:08:34,840 >> Hanem azért, mert van ez a második goto nem sárga, 185 00:08:34,840 --> 00:08:36,840 és mert ha egyszer egyfajta esztétikai 186 00:08:36,840 --> 00:08:40,480 mozgassa balra, ahol logikusan van a pillanat, amit 187 00:08:40,480 --> 00:08:43,230 jelent ez a sor Az alábbi kód a második goto 188 00:08:43,230 --> 00:08:46,480 nem gondolod? 189 00:08:46,480 --> 00:08:48,860 Mindig lesz kimarad. 190 00:08:48,860 --> 00:08:52,100 Tehát GOTOS általában elítélik okokból nem fogunk igazán megy bele, 191 00:08:52,100 --> 00:08:54,940 és valóban CS50 hajlamosak vagyunk nem tanítani ezt a kijelentést goto, 192 00:08:54,940 --> 00:08:58,130 de tudsz gondolni goto nem bekezdését go ugrás 193 00:08:58,130 --> 00:08:59,600 egy másik része a kód. 194 00:08:59,600 --> 00:09:03,120 >> Más szavakkal átugrani Ez az utolsó sor teljesen, 195 00:09:03,120 --> 00:09:07,420 és így az eredmény ennek a hülye egyszerű hiba, hogy csak 196 00:09:07,420 --> 00:09:10,330 eredményeként valószínűleg valaki másolás és beillesztés egy túl 197 00:09:10,330 --> 00:09:14,150 sokszor az volt, hogy az egész biztonsága iOS és Mac OS 198 00:09:14,150 --> 00:09:18,240 volt téve a lehallgatást a rossz fiúk jó ideje. 199 00:09:18,240 --> 00:09:19,940 Míg az Apple végül fix ezt. 200 00:09:19,940 --> 00:09:23,100 >> Most, ha néhány, amelyek ténylegesen futó régi verziói iOS vagy Mac OS, 201 00:09:23,100 --> 00:09:27,250 mehetsz gotofail.com amely egy weboldal, hogy valaki létrehozott 202 00:09:27,250 --> 00:09:29,190 lényegében meghatározza programból 203 00:09:29,190 --> 00:09:30,980 Ha a számítógép még mindig sebezhető. 204 00:09:30,980 --> 00:09:33,600 És őszintén szólva, ha az, ez talán egy jó ötlet 205 00:09:33,600 --> 00:09:36,870 frissíteni a telefont, vagy Mac ezen a ponton. 206 00:09:36,870 --> 00:09:40,120 De, csak bizonyíték arra, hogy mennyire ismeri ezeket az alacsonyabb szintű 207 00:09:40,120 --> 00:09:42,400 részletek és meglehetősen egyszerű ötletek valóban 208 00:09:42,400 --> 00:09:44,590 lefordítani döntések és problémák 209 00:09:44,590 --> 00:09:47,320 affected-- ebben case-- emberek milliói. 210 00:09:47,320 --> 00:09:49,107 >> Most egy szót adminisztráció. 211 00:09:49,107 --> 00:09:50,690 Szakasza indul a jövő vasárnap. 212 00:09:50,690 --> 00:09:53,360 Kap egy e-mailt a hétvégén mintegy szakasz, amely ponton 213 00:09:53,360 --> 00:09:55,290 a resectioning folyamat akkor kezdődik, ha már 214 00:09:55,290 --> 00:09:56,998 rájött, most már néhány új konfliktusokat. 215 00:09:56,998 --> 00:10:00,180 Tehát ez történik minden évben, és mi befogadására a napokban. 216 00:10:00,180 --> 00:10:02,430 >> Office hours-- do tartsa szemmel ezt az ütemtervet itt. 217 00:10:02,430 --> 00:10:05,100 Változik egy kicsit ezen a héten, különösen a kezdés időpontját 218 00:10:05,100 --> 00:10:08,180 és a helyet, úgyhogy ne forduljon hogy mielőtt a hivatali órák 219 00:10:08,180 --> 00:10:09,520 bármely következő négy éjszakát. 220 00:10:09,520 --> 00:10:12,680 És most egy szót értékelés különösen, ahogy belevetik magukat probléma 221 00:10:12,680 --> 00:10:14,350 állítja egy és azon túl. 222 00:10:14,350 --> 00:10:17,070 >> Tehát egy a specifikáció, ezek általában 223 00:10:17,070 --> 00:10:20,360 a tengely, amely mentén értékeljük a munkát. 224 00:10:20,360 --> 00:10:23,170 Hatálya vonatkozik, amit mértékben a kódot eszközök 225 00:10:23,170 --> 00:10:25,690 szükséges funkciók által specifikáció. 226 00:10:25,690 --> 00:10:28,290 Más szóval, hogy mennyi egy darab set ugye harap ki. 227 00:10:28,290 --> 00:10:30,440 Csináltál egy harmadik is, egy felét, 100% belőle. 228 00:10:30,440 --> 00:10:33,000 Még ha ez nem megfelelő, mennyit megpróbálja? 229 00:10:33,000 --> 00:10:35,290 Ahhoz, hogy rögzíti a szint Az erőfeszítés és az összeg 230 00:10:35,290 --> 00:10:38,260 , amelyre leharapta a probléma meg problémáit. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- ezt, hogy milyen mértékben, ez a kód 232 00:10:40,690 --> 00:10:43,150 összhangban van a műszaki és mentes a hibákat. 233 00:10:43,150 --> 00:10:44,770 Így működik helyesen? 234 00:10:44,770 --> 00:10:48,700 Ha adunk neki egy kis bemenet, ugye nekünk a kimenetet várunk? 235 00:10:48,700 --> 00:10:52,570 Design-- most ez az első a különösen kvalitatív, 236 00:10:52,570 --> 00:10:56,180 vagy az is, hogy igényel emberi ítélet. 237 00:10:56,180 --> 00:10:59,690 És valóban, ez az oka annak, hogy van egy személyzet a sok tanítás társaival és természetesen 238 00:10:59,690 --> 00:11:00,350 asszisztensek. 239 00:11:00,350 --> 00:11:03,480 Milyen mértékben a írt kód is? 240 00:11:03,480 --> 00:11:05,810 >> És ismét, ez egy nagyon minőségi értékelés 241 00:11:05,810 --> 00:11:09,100 hogy működni fog veled kétirányú az elkövetkező hetekben. 242 00:11:09,100 --> 00:11:12,060 Tehát, hogy ha kap nem csak numerikus eredmények, hanem a 243 00:11:12,060 --> 00:11:16,682 írásbeli eredmények, vagy gépelt visszacsatolás, vagy írásbeli visszajelzést angol szavakat. 244 00:11:16,682 --> 00:11:19,640 Ez az, amit majd használni, hogy elvinni felé valójában írni jobb kódot. 245 00:11:19,640 --> 00:11:23,320 És előadás és részben megpróbáljuk pont out--, amilyen gyakran csak can-- 246 00:11:23,320 --> 00:11:26,420 mitől lesz egy program nem csak helyes és funkcionálisan jó, 247 00:11:26,420 --> 00:11:28,200 hanem a jól megtervezett. 248 00:11:28,200 --> 00:11:31,850 A leghatékonyabb is lehet, vagy még a legszebb lehet. 249 00:11:31,850 --> 00:11:33,100 >> Amely elvezet minket a stílus. 250 00:11:33,100 --> 00:11:36,876 Stílus végső soron esztétikai ítélet. 251 00:11:36,876 --> 00:11:38,750 Döntöttetek úgy jó neveket a változók? 252 00:11:38,750 --> 00:11:40,330 Már beljebb a kódot helyesen? 253 00:11:40,330 --> 00:11:44,010 Úgy néz ki, és ezért a ez egyszerűen egy másik emberi lény 254 00:11:44,010 --> 00:11:46,550 hogy olvassa el a saját annak helyességét. 255 00:11:46,550 --> 00:11:50,300 >> Ma már általában egy a tananyag, akkor gólt ezeket a dolgokat egy öt fokozatú skálán. 256 00:11:50,300 --> 00:11:53,640 És hadd kalapács haza a pontot hogy a három valóban jó. 257 00:11:53,640 --> 00:11:55,550 Nagyon gyorsan csinálni emberek kezdeni ezzel számtani. 258 00:11:55,550 --> 00:11:58,133 Amikor kap egy három közül öt a korrektség néhány Pset 259 00:11:58,133 --> 00:12:02,040 és azt hiszik, a francba, majd 60% amely lényegében egy D-vel vagy egy E. 260 00:12:02,040 --> 00:12:03,980 >> Ez nem így van Szerintem ezeket a számokat. 261 00:12:03,980 --> 00:12:06,880 A három valóban jó, és mi általában elvárják az elején 262 00:12:06,880 --> 00:12:09,820 A kifejezés az, hogy ha kapok egy csomó three's-- talán egy pár 263 00:12:09,820 --> 00:12:12,540 A vásárok, egy pár fours-- vagy egy pár kettest, egy pár fours-- 264 00:12:12,540 --> 00:12:13,748 ez egy jó kiindulópont. 265 00:12:13,748 --> 00:12:16,320 És amíg látunk emelkedő röppálya idővel, 266 00:12:16,320 --> 00:12:18,540 te egy különösen jó hely. 267 00:12:18,540 --> 00:12:20,752 >> A képlet az általunk használt súly dolgok alapvetően 268 00:12:20,752 --> 00:12:22,710 ez a per a tanmenet, ami éppen azt jelenti, hogy 269 00:12:22,710 --> 00:12:24,750 nagyobb súlyt a korrektség. 270 00:12:24,750 --> 00:12:27,930 Mert nagyon gyakran korrektség hogy azon a legtöbb időt. 271 00:12:27,930 --> 00:12:28,760 Higgy nekem most. 272 00:12:28,760 --> 00:12:31,190 Lesz find-- legalább egy pset-- hogy 273 00:12:31,190 --> 00:12:36,790 töltik a 90% idejét 10% dolgozik a probléma. 274 00:12:36,790 --> 00:12:39,320 >> És minden fajta munkák kivéve egy-két hiba, 275 00:12:39,320 --> 00:12:41,570 és ezek a hibát, hogy mindig késő este. 276 00:12:41,570 --> 00:12:43,380 Ezek az is, hogy egyfajta menekülés te. 277 00:12:43,380 --> 00:12:45,560 De miután alszik el, vagy részvétel munkaidőben 278 00:12:45,560 --> 00:12:48,844 vagy kérdéseket az interneten, a ha kap, hogy a 100% cél, 279 00:12:48,844 --> 00:12:50,760 és ezért mi súly korrektség a legtöbb. 280 00:12:50,760 --> 00:12:54,102 Tervezz egy kicsit kevesebb, és stílus egy kicsit kevesebb. 281 00:12:54,102 --> 00:12:56,060 De ne mind-- stílusban talán a legegyszerűbb 282 00:12:56,060 --> 00:12:58,890 Ezen harapni le mint egy a stílus vezető. 283 00:12:58,890 --> 00:13:01,580 >> És most, a komolyabb vegye figyelembe akadémiai őszinteség. 284 00:13:01,580 --> 00:13:05,000 CS50 az a szerencsétlen megkülönböztetés hogy a legnagyobb gyártó a Hírdetőtábla 285 00:13:05,000 --> 00:13:07,330 esetek szinte minden évben történelmileg. 286 00:13:07,330 --> 00:13:11,012 Nem azért, mert a diákok csalni CS50 többet, mint bármely más osztály, 287 00:13:11,012 --> 00:13:13,720 hanem azért, mert a természet, a munka, az a tény, hogy ez az elektronikus, 288 00:13:13,720 --> 00:13:16,636 Az a tény, hogy keresse meg, és az a tény, mi számítógépes szakemberek, 289 00:13:16,636 --> 00:13:20,570 Én azt mondom, sajnos nagyon jó, hogy észlelje azt. 290 00:13:20,570 --> 00:13:22,710 >> Szóval, mit jelent ez a gyakorlatban? 291 00:13:22,710 --> 00:13:24,820 Szóval, egy a tanterv, A tanfolyam filozófiája 292 00:13:24,820 --> 00:13:28,090 valóban szűkülnek le ésszerűnek. 293 00:13:28,090 --> 00:13:31,684 Van ez a vonal között Ennek egyik munka a saját 294 00:13:31,684 --> 00:13:34,100 és kapok egy kis ésszerű segítséget egy barát, 295 00:13:34,100 --> 00:13:38,020 és nyíltan csinálja, hogy a munka a barát, vagy küld neki a kódot 296 00:13:38,020 --> 00:13:41,080 hogy ő is csak venni vagy kölcsönözni ki jobbra. 297 00:13:41,080 --> 00:13:43,580 És hogy keresztezi a vonalat hogy mi húzott az osztályban. 298 00:13:43,580 --> 00:13:45,410 >> Lásd, a tanterv végső soron a vonalak 299 00:13:45,410 --> 00:13:48,209 hogy felhívjuk, hogy ésszerű és ésszerűtlen viselkedés, 300 00:13:48,209 --> 00:13:50,000 de valóban forraljuk le, hogy a lényeg 301 00:13:50,000 --> 00:13:53,980 a munka kelljen hogy a saját a végén. 302 00:13:53,980 --> 00:13:56,230 Most, hogy azt mondta, van egy heurisztikus. 303 00:13:56,230 --> 00:13:58,980 Mert lehet, hogy imagine-- a munkaidőn és a látvány 304 00:13:58,980 --> 00:14:01,060 és a videókat mi már jelölése far-- CS50 305 00:14:01,060 --> 00:14:04,530 valóban azt jelentette, hogy az együttműködő és szövetkezeti és társadalmi 306 00:14:04,530 --> 00:14:06,450 amennyire csak lehetséges. 307 00:14:06,450 --> 00:14:08,570 Az együttműködésen alapuló, mert szigorú. 308 00:14:08,570 --> 00:14:11,314 >> De ez azt mondta, a heurisztikus, ahogy látni fogod a tananyag, 309 00:14:11,314 --> 00:14:12,980 az, hogy amikor némi probléma. 310 00:14:12,980 --> 00:14:16,470 Van néhány hiba a kódban, hogy nem tudja megoldani, akkor ésszerű az Ön számára 311 00:14:16,470 --> 00:14:18,039 megmutatni a kódot, hogy valaki mást. 312 00:14:18,039 --> 00:14:21,080 Egy barátom is az osztályban, a barát ül melletted a munkaidő, 313 00:14:21,080 --> 00:14:22,680 vagy a személyzet tagja. 314 00:14:22,680 --> 00:14:25,810 De lehet, hogy nem mutatja a kódot az Ön számára. 315 00:14:25,810 --> 00:14:27,710 >> Más szóval, egy válaszolni a question-- 316 00:14:27,710 --> 00:14:29,940 Szükségem help-- nem ó, itt a kód. 317 00:14:29,940 --> 00:14:32,440 Vessen egy pillantást erre és levezetni, amit akarsz. 318 00:14:32,440 --> 00:14:34,580 Most, persze, ott van olyan módon, egyértelműen a játék 319 00:14:34,580 --> 00:14:37,760 Ez a rendszer, amelyben megmutatom a kód, mielőtt a kérdés. 320 00:14:37,760 --> 00:14:40,150 Megmutatod nekem a kódot mielőtt egy kérdést. 321 00:14:40,150 --> 00:14:45,870 De látni a tanterv ismét a finomabb részleteket, ha ez a sor. 322 00:14:45,870 --> 00:14:50,606 >> Csak azért, hogy most festeni a képet, és megosztani az átlátható lehető 323 00:14:50,606 --> 00:14:53,480 hol vagyunk az elmúlt években, ez az a szám, Hírdetőtábla ügyek 324 00:14:53,480 --> 00:14:56,260 hogy CS50 már több mint az elmúlt hét évben. 325 00:14:56,260 --> 00:14:58,717 14 esetben ez a legutóbbi ősszel. 326 00:14:58,717 --> 00:15:01,300 Ami a részt vevő tanulók, volt 20 valami furcsa diák 327 00:15:01,300 --> 00:15:02,490 ez a múlt ősszel. 328 00:15:02,490 --> 00:15:05,670 Volt a legmagasabb, 33 a diákok néhány éve. 329 00:15:05,670 --> 00:15:08,830 Akik közül sokan sajnos nincs itt az egyetemen. 330 00:15:08,830 --> 00:15:13,100 >> Hallgatók számára százalékában a osztály történelmileg mozgott 0% 331 00:15:13,100 --> 00:15:17,300 5,3%, ami csak azt Ez évente egy kihívás. 332 00:15:17,300 --> 00:15:20,390 Felé, hogy a végén, hogy mi azt akarjuk, hogy a közvetíteni egy 333 00:15:20,390 --> 00:15:24,310 hogy mi dd-- csak FYI-- összehasonlítani a a méltányosság azok a diákok, akik 334 00:15:24,310 --> 00:15:26,520 vannak vonalát követve kell. 335 00:15:26,520 --> 00:15:29,620 Tesszük hasonlítsa össze az összes jelenlegi beadványok ellen múlt misszió 336 00:15:29,620 --> 00:15:30,840 Az elmúlt évek. 337 00:15:30,840 --> 00:15:33,620 >> Azt is tudjuk, hogy a Google körül és megtalálni kódtáraihoz 338 00:15:33,620 --> 00:15:36,360 online vitafórumok online munka oldalak az interneten. 339 00:15:36,360 --> 00:15:41,580 Ha egy diák megtalálja, mi biztosan találják, mint mi sajnálkozva csinálni. 340 00:15:41,580 --> 00:15:45,330 Szóval, mit fogsz látni a tananyag bár ez a sajnálkozás záradék. 341 00:15:45,330 --> 00:15:47,500 Én minden bizonnyal értékelik, és mi minden van 342 00:15:47,500 --> 00:15:50,870 személyzet miután végzett a pályán, mint ez, vagy ez maga az idő múlásával, 343 00:15:50,870 --> 00:15:53,997 biztosan tudjuk, milyen az, amikor élet útban, ha van 344 00:15:53,997 --> 00:15:56,080 néhány késő este deadline-- nem csak ebben az osztályban, 345 00:15:56,080 --> 00:15:58,660 de másik-- amikor teljesen kimerült, stresszes, 346 00:15:58,660 --> 00:16:00,659 van egy oda nem illő számot más dolgom van. 347 00:16:00,659 --> 00:16:03,660 Lesz, hogy egy bizonyos ponton élet biztosan rossz, talán késő 348 00:16:03,660 --> 00:16:04,620 éjszaka döntés. 349 00:16:04,620 --> 00:16:06,520 >> Tehát egy a tanterv, van ez a záradék, 350 00:16:06,520 --> 00:16:10,629 oly módon, hogy 72 órán belül, ha készítés néhány rossz döntés, akkor látja be 351 00:16:10,629 --> 00:16:12,670 és el kell jutnia hozzám és az egyik természetesen feje 352 00:16:12,670 --> 00:16:14,300 és mi lesz a beszélgetés. 353 00:16:14,300 --> 00:16:16,220 Mi lesz kezelni a dolgokat belül abban a reményben, 354 00:16:16,220 --> 00:16:18,770 belőle egyre inkább egy tanítás pillanat vagy élet leckét, 355 00:16:18,770 --> 00:16:22,120 és nem valami különösen drasztikus következményei 356 00:16:22,120 --> 00:16:24,570 ahogy lehet látni a következő táblázatok itt. 357 00:16:24,570 --> 00:16:26,540 >> Szóval ez egy nagyon komoly hangon. 358 00:16:26,540 --> 00:16:29,960 Álljunk csak egy pár másodperc megtörni a feszültséget. 359 00:16:29,960 --> 00:16:34,442 >> [Zenelejátszás] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> David J. MALAN: Rendben, Szóval, hogy volt, hogy egy Segue? 362 00:17:20,250 --> 00:17:22,059 A mai fő téma. 363 00:17:22,059 --> 00:17:23,859 Az első, ami absztrakció. 364 00:17:23,859 --> 00:17:26,900 Egy másik, amely lesz a képviselete az adatokat, amelyek nyíltan 365 00:17:26,900 --> 00:17:31,640 egy nagyon száraz szóval hogyan megy a problémamegoldás és gondolkodás 366 00:17:31,640 --> 00:17:33,250 a problémák megoldása? 367 00:17:33,250 --> 00:17:37,285 Szóval láttam a Scratch, és akkor már látott talán már pset1 C 368 00:17:37,285 --> 00:17:39,930 hogy nem csak használni funkciók, mint a printf, 369 00:17:39,930 --> 00:17:42,770 hogy más emberek elmúlt években írt az Ön számára. 370 00:17:42,770 --> 00:17:45,340 Azt is írja meg önálló működését. 371 00:17:45,340 --> 00:17:48,440 >> És bár lehet, hogy nem tette ezt a C, és őszintén szólva a pset1 372 00:17:48,440 --> 00:17:51,866 nem igazán kell írni a saját funkció, mert a problem-- 373 00:17:51,866 --> 00:17:53,990 míg talán ijesztő a első glance-- meglátod 374 00:17:53,990 --> 00:17:57,910 végül is megoldható nem olyan sok sornyi kódot. 375 00:17:57,910 --> 00:18:01,140 De azt mondta, tekintve Az írásban a saját funkciója, 376 00:18:01,140 --> 00:18:03,570 észre, hogy C nem ad Ön ezt a képességet. 377 00:18:03,570 --> 00:18:06,940 >> Én megyek a mai forráskód, mely elérhető már az interneten, 378 00:18:06,940 --> 00:18:10,900 és én megyek előre, és nyitott egy programot hívott függvény 0.C, 379 00:18:10,900 --> 00:18:14,620 és a függvény nulla majd meglátjuk pár dolgot. 380 00:18:14,620 --> 00:18:19,160 Első sor 18 keresztül 23 az én fő funkciója. 381 00:18:19,160 --> 00:18:22,414 És most, hogy kezdjük olvasni kód, hogy nem írsz on the fly, 382 00:18:22,414 --> 00:18:25,080 hanem írtam előre vagy azt, hogy a probléma beállított 383 00:18:25,080 --> 00:18:27,910 kaphat, amelyek írva előre. 384 00:18:27,910 --> 00:18:30,040 Egy jó módja annak, hogy olvassa valaki másnak a kódját 385 00:18:30,040 --> 00:18:31,400 az keresse meg a fő funkciója. 386 00:18:31,400 --> 00:18:34,420 Kitalálni, ahol ezt a bejegyzést pont az, hogy fut a program, 387 00:18:34,420 --> 00:18:36,580 és kövesse azt logikusan onnan. 388 00:18:36,580 --> 00:18:40,190 >> Így ez a program nyilvánvalóan nyomatok Az Ön neve kettőspont követ. 389 00:18:40,190 --> 00:18:42,490 Mi majd getString A CS50 könyvtár 390 00:18:42,490 --> 00:18:46,050 hogy egy húr, vagy egy szót vagy kifejezést a felhasználó a billentyűzetet. 391 00:18:46,050 --> 00:18:48,390 És akkor itt van ez a dolog itt-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Most nem egy PrintName funkció, hogy jön a C. 393 00:18:51,420 --> 00:18:52,970 Ez nem a szokásos io.h. 394 00:18:52,970 --> 00:18:55,570 Ez nem a CS50.h. 395 00:18:55,570 --> 00:18:57,880 Ez inkább az ugyanabban a fájlban. 396 00:18:57,880 --> 00:19:01,000 Figyeld meg, ha görgetni lefelé a bit-- vonalak 25 27-- 397 00:19:01,000 --> 00:19:05,330 ez csak egy szép módon kommentálja A kód segítségével a csillagok és a vágás. 398 00:19:05,330 --> 00:19:07,320 Ez egy többsoros megjegyzést, és ez csak 399 00:19:07,320 --> 00:19:10,570 a leírás kék mi ez a függvény. 400 00:19:10,570 --> 00:19:14,530 >> Mivel a sorok 28 és 31, Írtam egy szuper egyszerű függvény 401 00:19:14,530 --> 00:19:16,280 akinek a neve PrintName. 402 00:19:16,280 --> 00:19:19,560 Tart hány érvek mit mondana? 403 00:19:19,560 --> 00:19:25,120 Tehát az egyik argument-- mert van egy érv szerepel a zárójelben. 404 00:19:25,120 --> 00:19:27,000 A típusa, amely a String. 405 00:19:27,000 --> 00:19:30,240 Ami azt PrintName olyan, mint ez a fekete doboz 406 00:19:30,240 --> 00:19:32,910 vagy funkciója, amely során mint egy szöveggel. 407 00:19:32,910 --> 00:19:35,730 >> És a nevét, hogy a karakterlánc kényelmes lesz neve. 408 00:19:35,730 --> 00:19:37,840 Nem S, nem N, hanem nevét. 409 00:19:37,840 --> 00:19:41,090 Szóval mit PrintName csinálni? 410 00:19:41,090 --> 00:19:42,210 Nagyon szép egyszerű. 411 00:19:42,210 --> 00:19:45,390 Ugyanúgy, ahogy egy sor kód a printf, de úgy tűnik, 412 00:19:45,390 --> 00:19:47,950 kiírja, hogy "Helló", így és így. 413 00:19:47,950 --> 00:19:50,070 Amennyiben az így és így származik az érvelés. 414 00:19:50,070 --> 00:19:52,300 >> Most ez nem egy nagy innováció itt. 415 00:19:52,300 --> 00:19:56,710 Tényleg, vettem egy programot, amely írtak már egy sor kódot 416 00:19:56,710 --> 00:20:00,190 azzal, hogy ez itt, és megváltoztatta a valami 417 00:20:00,190 --> 00:20:04,920 amely magában foglalja a mintegy hat vagy hét, vagy úgy sornyi kódot egészen itt. 418 00:20:04,920 --> 00:20:08,190 >> De ez a gyakorlás a elv néven absztrakció. 419 00:20:08,190 --> 00:20:12,550 Egyfajta külvilágtól belsejében egy új funkció, amely a nevét, és a jobb 420 00:20:12,550 --> 00:20:14,590 mégis ez a név a szó szoros értelmében azt mondja, hogy mit csinál. 421 00:20:14,590 --> 00:20:16,880 Úgy értem printf-- ez nem különösen leíró. 422 00:20:16,880 --> 00:20:18,932 Ha azt akarom, hogy hozzon létre egy puzzle-darab, vagy ha 423 00:20:18,932 --> 00:20:21,140 szeretnénk létrehozni egy funkciót hogy kiírja valakinek a nevét, 424 00:20:21,140 --> 00:20:23,230 a szépség ezt az, hogy tudok valójában 425 00:20:23,230 --> 00:20:27,170 adni, hogy a funkció a név hogy leírja, mit csinál. 426 00:20:27,170 --> 00:20:29,844 >> Most vesz kimeneten Már önkényesen hívott nevét, 427 00:20:29,844 --> 00:20:32,760 de ez is csodálatosan leíró ahelyett, hogy egy kicsit 428 00:20:32,760 --> 00:20:36,140 általános, mint az S. és érvénytelen, mert most, csak azt jelenti, 429 00:20:36,140 --> 00:20:38,330 hogy ez a funkció nem adja vissza semmit. 430 00:20:38,330 --> 00:20:41,127 Ez nem olyan, mint getString hogy szó szerint a kezembe vissza a húr 431 00:20:41,127 --> 00:20:43,960 mint mi a darab papír az osztálytársaival a múlt héten, 432 00:20:43,960 --> 00:20:45,990 hanem ez csak egy mellékhatás. 433 00:20:45,990 --> 00:20:48,080 Nyomtat valamit a képernyőn. 434 00:20:48,080 --> 00:20:53,880 >> Így a végén a nap, ha nem teszik funkció-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 majd meglátjuk, hogy kéri a nevem. 436 00:20:55,450 --> 00:20:58,150 I típusú David, és típusai a nevemet. 437 00:20:58,150 --> 00:21:01,080 Ha megteszem ismét Rob, azt fogja mondani: "Helló, Rob." 438 00:21:01,080 --> 00:21:04,280 Így egy egyszerű ötlet, de talán következtetéseket levonni ezt mentálisan 439 00:21:04,280 --> 00:21:06,750 hogy mivel a programokat, hogy egy kicsit bonyolultabb, 440 00:21:06,750 --> 00:21:10,290 és azt szeretné, hogy írjon egy darab kód és hívást, hogy code-- Invoke 441 00:21:10,290 --> 00:21:13,270 hogy code-- néhány leíró nevet, mint PrintName, 442 00:21:13,270 --> 00:21:15,600 C nem engedheti meg magának, nekünk ezt a lehetőséget. 443 00:21:15,600 --> 00:21:17,660 >> Itt van egy másik egyszerű példa. 444 00:21:17,660 --> 00:21:22,940 Például, ha nyit egy fájl a mai úgynevezett return.c, 445 00:21:22,940 --> 00:21:24,270 észre, mit csináltam itt. 446 00:21:24,270 --> 00:21:26,330 A legtöbb ilyen fő feladata a printf. 447 00:21:26,330 --> 00:21:30,360 Először önkényesen inicializálni nevű változó x a 2-es szám. 448 00:21:30,360 --> 00:21:34,110 Ezután nyomtassa ki "x ma % I "halad az x értékét. 449 00:21:34,110 --> 00:21:35,500 Szóval csak azt mondom, hogy mi az. 450 00:21:35,500 --> 00:21:37,208 >> Most csak bátran azt állítva, a printf. 451 00:21:37,208 --> 00:21:42,050 Én Cubing hogy x értéke, és én vagyok Ezzel hívja a funkció 452 00:21:42,050 --> 00:21:45,590 úgynevezett kocka múló az x az érv, 453 00:21:45,590 --> 00:21:49,300 majd mentés a kimenet a változó magában, x. 454 00:21:49,300 --> 00:21:51,340 Szóval felülírja az x értékét. 455 00:21:51,340 --> 00:21:53,380 Én felülírja a értéke x, bármilyen 456 00:21:53,380 --> 00:21:56,510 az eredmény a hívó ez kocka funkció. 457 00:21:56,510 --> 00:21:59,530 Aztán csak nyomtassa ki néhány bolyhos cucc itt azt mondja, amit én tettem. 458 00:21:59,530 --> 00:22:01,600 >> Tehát akkor mi kocka? 459 00:22:01,600 --> 00:22:03,510 Figyeljük meg, mi alapvetően más itt. 460 00:22:03,510 --> 00:22:05,540 Megadtam a funkció nevet, mint korábban. 461 00:22:05,540 --> 00:22:08,270 Én meg egy nevet egy érv. 462 00:22:08,270 --> 00:22:11,650 Ezúttal ez az úgynevezett n helyett név, de nem tudtam nevezni, amit csak akarok. 463 00:22:11,650 --> 00:22:12,650 De ez más. 464 00:22:12,650 --> 00:22:14,080 Ez a dolog a bal oldalon. 465 00:22:14,080 --> 00:22:16,290 Korábban úgy volt, hogy mi kulcsszó? 466 00:22:16,290 --> 00:22:16,870 Fiúk. 467 00:22:16,870 --> 00:22:18,580 Most nyilvánvalóan int. 468 00:22:18,580 --> 00:22:20,630 >> Akkor mi talán az, hogy el? 469 00:22:20,630 --> 00:22:24,090 Mivel void jelenti: valami semmi, és ez volt a helyzet. 470 00:22:24,090 --> 00:22:25,970 PrintName vissza semmit. 471 00:22:25,970 --> 00:22:27,942 Ez nem valami, hanem nem adja vissza 472 00:22:27,942 --> 00:22:30,650 valamit, hogy én is fel a bal oldalán egy egyenlőségjel 473 00:22:30,650 --> 00:22:32,460 mint én csináltam itt a 22. sorban. 474 00:22:32,460 --> 00:22:36,780 >> Tehát, ha azt mondom, a on-line 30 mi ez valószínűleg arra utal 475 00:22:36,780 --> 00:22:38,610 mit kocka csinál nekem? 476 00:22:38,610 --> 00:22:41,110 Igen? 477 00:22:41,110 --> 00:22:42,310 Ad vissza egy egész szám. 478 00:22:42,310 --> 00:22:44,590 Szóval a kezembe vissza, a Például, egy darab papírra 479 00:22:44,590 --> 00:22:46,580 az általa írt a választ. 480 00:22:46,580 --> 00:22:50,130 2 kockára vágott, vagy 3 kockára vágott, vagy 4 cubed-- bármit is telt el, 481 00:22:50,130 --> 00:22:51,540 és hogyan én végre ez? 482 00:22:51,540 --> 00:22:54,810 Nos, csak n-szer n-szer n Én így lehet CUBE értéket. 483 00:22:54,810 --> 00:22:57,110 Tehát ismét, szuper egyszerű ötlet, de demonstratív 484 00:22:57,110 --> 00:23:00,100 most, hogy tudjuk írni funkciókat hogy valóban volt minket 485 00:23:00,100 --> 00:23:02,380 értékek, amelyek érdekesek lehetnek. 486 00:23:02,380 --> 00:23:05,740 >> Nézzünk egy utolsó példa itt hívott függvény egy. 487 00:23:05,740 --> 00:23:08,530 Ebben a példában, akkor elindítja hogy vonzóbb. 488 00:23:08,530 --> 00:23:12,400 Tehát funkció egy, ez képzés-- közlemény végül 489 00:23:12,400 --> 00:23:14,920 meghív egy függvényt hívott GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 Nem egy GetPositiveInt funkciót a CS50 könyvtár, 491 00:23:17,800 --> 00:23:20,400 de úgy döntöttünk, azt szeretném, hogy létezik. 492 00:23:20,400 --> 00:23:24,550 >> Ha tehát lépjünk le később a fájlban, észre, hogy elmentem a végrehajtó 493 00:23:24,550 --> 00:23:26,560 kap pozitív int, és én azt mondják, hogy vonzóbb 494 00:23:26,560 --> 00:23:28,992 mert ez egy tisztességes több sornyi kódot. 495 00:23:28,992 --> 00:23:30,700 Ez nem csak egy buta kis játék programot. 496 00:23:30,700 --> 00:23:33,870 Igazából van egy kis hiba ellenőrzés és csinál valami hasznos. 497 00:23:33,870 --> 00:23:38,470 >> Tehát, ha már nem látta a végigjátszást videók már ágyazott pset1, 498 00:23:38,470 --> 00:23:42,350 tudják, hogy ez egy olyan típusú hurok C, hasonló szellemben 499 00:23:42,350 --> 00:23:44,270 a dolgokat Scratch tehetünk. 500 00:23:44,270 --> 00:23:46,320 És mit mond erre. 501 00:23:46,320 --> 00:23:47,500 Nyomtassa ki ezt. 502 00:23:47,500 --> 00:23:51,860 Akkor megy előre, és kap n-- kap egy int és tárolja n, 503 00:23:51,860 --> 00:23:55,760 és tartsa ezt újra és újra, és mindaddig, amíg ismét n értéke kisebb, mint egy. 504 00:23:55,760 --> 00:23:58,720 >> Tehát n lesz, kevesebb, mint egy csak akkor, ha az ember nem együttműködő. 505 00:23:58,720 --> 00:24:01,980 Ha ő gépelés 0 vagy 1 vagy -50, 506 00:24:01,980 --> 00:24:04,790 Ez a hurok fog tartani végrehajtó újra és újra. 507 00:24:04,790 --> 00:24:07,549 És végül észre, én egyszerűen vissza az értéket. 508 00:24:07,549 --> 00:24:09,590 Tehát most van egy funkció hogy lett volna jó 509 00:24:09,590 --> 00:24:14,040 ha CS50 végrehajtja a CS50.h és CS50.c az Ön számára, 510 00:24:14,040 --> 00:24:16,520 de itt most már végrehajtja ezt magunk. 511 00:24:16,520 --> 00:24:19,230 >> De két megjegyzést néhány kulcsfontosságú részleteket. 512 00:24:19,230 --> 00:24:24,390 Az egyet miért Kijelentem int n, mit gondolsz, on line 29 513 00:24:24,390 --> 00:24:27,139 ahelyett, hogy csak azt teszi, ezt itt, ami 514 00:24:27,139 --> 00:24:28,930 nagyobb összhangban mit tettünk a múlt héten? 515 00:24:28,930 --> 00:24:29,430 Igen? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Egy jó gondolat. 518 00:24:35,110 --> 00:24:37,080 Tehát, ha mi voltunk, hogy tegye itt, olyan, mintha mi 519 00:24:37,080 --> 00:24:39,110 tartsa kijelenti, hogy újra és újra. 520 00:24:39,110 --> 00:24:42,000 Hogy önmagában is nem problémás, önmagában, 521 00:24:42,000 --> 00:24:43,940 mert csak akkor kell az érték egyszer, majd 522 00:24:43,940 --> 00:24:45,330 fogunk, hogy egy újat egyébként. 523 00:24:45,330 --> 00:24:45,940 De egy jó gondolat. 524 00:24:45,940 --> 00:24:46,440 Igen? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Közel. 527 00:24:53,330 --> 00:24:59,030 , Mert én már kijelentette n on 29 vonal kívül a hurok, 528 00:24:59,030 --> 00:25:01,390 ez elérhető az egész A teljes funkció. 529 00:25:01,390 --> 00:25:05,400 Nem a többi funkció, mert n még benne ilyen göndör 530 00:25:05,400 --> 00:25:06,470 nadrágtartó itt. 531 00:25:06,470 --> 00:25:07,940 Úgyhogy-- biztos. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Pontosan. 534 00:25:12,940 --> 00:25:14,356 Tehát ez még inkább arra a pontra. 535 00:25:14,356 --> 00:25:18,600 Ha ehelyett kijelentette, n itt a sorban 32, 536 00:25:18,600 --> 00:25:22,340 ez problémás, mert találgatás ahol mást kell hozzáférni? 537 00:25:22,340 --> 00:25:25,620 A 34. sorban, és a egyszerű ökölszabály 538 00:25:25,620 --> 00:25:30,060 hogy csak akkor tudjuk használni a változó belül a legutóbbi kapcsos zárójelek 539 00:25:30,060 --> 00:25:31,420 , amelyben kijelentette azt. 540 00:25:31,420 --> 00:25:35,230 >> Sajnos, vonal 34 egy sor túl későn, 541 00:25:35,230 --> 00:25:38,560 mert én már zárva A kapcsos zárójel on line 33 542 00:25:38,560 --> 00:25:41,220 amely megfelel az zárójel on line 30. 543 00:25:41,220 --> 00:25:44,180 És így ez egy szóval hogy ez a változó int a távcsöves, 544 00:25:44,180 --> 00:25:46,970 hogy úgy mondjam, csak belül ilyen kapcsos zárójelek. 545 00:25:46,970 --> 00:25:48,910 Egyszerűen nem létezik kívül őket. 546 00:25:48,910 --> 00:25:51,580 >> Tehát valóban, ha ezt rossz, hadd mentse a kód 547 00:25:51,580 --> 00:25:53,530 mivel Ez- helytelenül írt. 548 00:25:53,530 --> 00:25:57,990 Hadd menjek előre, és nem teszik funkció-1, és notice-- hiba. 549 00:25:57,990 --> 00:26:03,502 A be nem jelentett azonosító n on line 35, ami itt van. 550 00:26:03,502 --> 00:26:05,210 És ha felfelé további, egy másik. 551 00:26:05,210 --> 00:26:08,750 A be nem jelentett azonosító n on line 34. 552 00:26:08,750 --> 00:26:11,200 >> Tehát a fordító, csenget, van látva, hogy ez csak 553 00:26:11,200 --> 00:26:13,720 nem létezik, bár egyértelműen ott van vizuálisan. 554 00:26:13,720 --> 00:26:16,090 Így egy egyszerű fix kijelenti ott. 555 00:26:16,090 --> 00:26:18,790 >> Most hadd léptessen a a tetején a fájl. 556 00:26:18,790 --> 00:26:21,080 Mi ugrik ki rád, hogy egy kicsit más 557 00:26:21,080 --> 00:26:23,070 A cucc néztük a múlt héten? 558 00:26:23,070 --> 00:26:26,990 Nem csak én nevet, nem csak Van néhány éles is akár felső, 559 00:26:26,990 --> 00:26:29,340 Van valami vagyok hív egy prototípus. 560 00:26:29,340 --> 00:26:36,100 Most, hogy úgy néz ki, szörnyen hasonló ahhoz, amit Most láttam egy perce on line 27. 561 00:26:36,100 --> 00:26:39,230 >> Szóval következtetni egy másik hibaüzenet miért tettem ezt. 562 00:26:39,230 --> 00:26:42,050 Hadd menjek előre, és törölni ezeket a sorokat is. 563 00:26:42,050 --> 00:26:44,240 És így nem tudunk semmit prototípus. 564 00:26:44,240 --> 00:26:45,430 Remake ezt a fájlt. 565 00:26:45,430 --> 00:26:46,890 , Hogy a funkció egy. 566 00:26:46,890 --> 00:26:48,090 És most, a fenébe, négy hibákat. 567 00:26:48,090 --> 00:26:50,220 Nézzük felfelé, hogy az első. 568 00:26:50,220 --> 00:26:55,070 >> Implicit nyilatkozat funkció kap pozitív int érvénytelen C99. 569 00:26:55,070 --> 00:26:57,780 C99 csak azt jelenti, a 1999 változata a nyelv 570 00:26:57,780 --> 00:26:59,710 C, amely a mi mi valóban használ. 571 00:26:59,710 --> 00:27:01,050 Szóval, mit jelent ez? 572 00:27:01,050 --> 00:27:05,250 Nos C-- C és konkrétabban compilers-- elég hülye programokat. 573 00:27:05,250 --> 00:27:07,420 Ők csak azt tudják, mit mondta nekik, és ez 574 00:27:07,420 --> 00:27:08,960 valójában tematikus a múlt héten. 575 00:27:08,960 --> 00:27:12,910 >> A probléma az, hogy ha elmegyek a végrehajtási név itt, 576 00:27:12,910 --> 00:27:17,640 és arra kérem a nevezett funkció GetPositiveInt itt on line 20 577 00:27:17,640 --> 00:27:22,520 ez a funkció technikailag nem létezik mindaddig, amíg a fordító látja sor 27. 578 00:27:22,520 --> 00:27:25,450 Sajnos, a fordító dolgok top, le, balra, jobbra, 579 00:27:25,450 --> 00:27:29,580 így, mert még nem látta a végrehajtása GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 de úgy tûnik, hogy megpróbálja használja fel itt, 581 00:27:32,400 --> 00:27:35,810 ez csak fog bail-- kiabálni Ön egy hiba message-- talán 582 00:27:35,810 --> 00:27:38,440 rejtélyes, és valójában nem össze a fájlt. 583 00:27:38,440 --> 00:27:41,940 >> Tehát egy úgynevezett prototípus up Itt kétségkívül felesleges. 584 00:27:41,940 --> 00:27:47,870 Szó szerint, mentem le ide, és másoltam és beillesztett ezt, és tettem fel ide. 585 00:27:47,870 --> 00:27:51,020 Void lenne helyes, így fogunk szó szerint másolja be ezúttal. 586 00:27:51,020 --> 00:27:52,854 Szó szerint a vágólapra másolni azt. 587 00:27:52,854 --> 00:27:54,270 Tényleg csak úgy, mint a kenyér morzsát. 588 00:27:54,270 --> 00:27:56,260 >> Egy kis nyom a fordító. 589 00:27:56,260 --> 00:27:58,860 Nem tudom, hogy ez mire jó még, de én megígérte, hogy Ön 590 00:27:58,860 --> 00:28:00,260 hogy létezni fog végül. 591 00:28:00,260 --> 00:28:04,010 És ez az, amiért ez line-- a vonal 16-- pontosvesszővel végződjön. 592 00:28:04,010 --> 00:28:05,486 Ez feleslegessé design. 593 00:28:05,486 --> 00:28:05,986 Igen? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Ha nem hivatkozik a könyvtár a a-- ó, jó kérdés. 596 00:28:14,360 --> 00:28:17,350 Sharp tartalmaz header file felvételen. 597 00:28:17,350 --> 00:28:20,040 Kell be-- kellene szinte mindig az egyik legfontosabb 598 00:28:20,040 --> 00:28:23,270 A fájl a similar-- számára pontosan ugyanezen okból, igen. 599 00:28:23,270 --> 00:28:26,430 Mert szabvány io.h szó egy vonal 600 00:28:26,430 --> 00:28:30,560 , mint ez, de a szó printf, és A érveit és visszatérési típus. 601 00:28:30,560 --> 00:28:33,310 És ezzel éles közé fel itt, amit te csinálsz a szó szoros értelmében 602 00:28:33,310 --> 00:28:36,380 A másolás és beillesztés a tartalom valaki más írta fel tetején. 603 00:28:36,380 --> 00:28:39,660 Ezáltal cluing a kódot, hogy az tény, hogy ezek a funkciók léteznek. 604 00:28:39,660 --> 00:28:40,160 Igen? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Abszolút. 607 00:28:48,260 --> 00:28:51,690 Tehát egy nagyon okos és helyes megoldás az lenne, tudod mit? 608 00:28:51,690 --> 00:28:53,760 Én nem tudom, mi a prototípus, de én tudom, 609 00:28:53,760 --> 00:28:56,390 ha jól értem, hogy a C csak néma és újragondolja fentről lefelé. 610 00:28:56,390 --> 00:28:57,820 Nos nézzük, hogy ez mit akar. 611 00:28:57,820 --> 00:29:01,650 Vágjuk a kódot, illessze fel tetején, és most nyomja legfontosabb lent. 612 00:29:01,650 --> 00:29:03,470 Ez is megoldaná a problémát. 613 00:29:03,470 --> 00:29:07,409 >> De akkor nagyon könnyen elér olyan esetben, amikor kell hívni B, 614 00:29:07,409 --> 00:29:10,075 és talán B hív vissza A. Ez a az úgynevezett rekurzív, 615 00:29:10,075 --> 00:29:11,370 és mi jön vissza, hogy a. 616 00:29:11,370 --> 00:29:13,911 És ez lehet, hogy nem lehet egy jó dolog, de akkor feltétlenül 617 00:29:13,911 --> 00:29:15,110 megtörni ezt a megoldást. 618 00:29:15,110 --> 00:29:17,690 >> Sőt, szeretném állítják stilisztikailag, 619 00:29:17,690 --> 00:29:20,760 különösen akkor, ha a programokat lesz ez a hosszú, és ez a hosszú, 620 00:29:20,760 --> 00:29:23,064 ez csak szuper kényelmes , hogy fő a tetején 621 00:29:23,064 --> 00:29:25,730 mert ez a dolog, a legtöbb programozók fog törődni. 622 00:29:25,730 --> 00:29:28,150 És ez így egy kicsit tisztább, Vitathatatlan, hogy nem úgy, ahogy 623 00:29:28,150 --> 00:29:30,380 Én eredetileg nem azt a prototípus még 624 00:29:30,380 --> 00:29:33,396 bár úgy néz ki, egy kicsit redundáns első pillantásra. 625 00:29:33,396 --> 00:29:33,895 Igen? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Elnézést, meg tudja mondani, hogy hangosabban? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Ha bekapcsolja a helyét a végrehajtás és a prototípus? 630 00:29:49,580 --> 00:29:51,270 Szóval ez egy jó kérdés. 631 00:29:51,270 --> 00:29:53,780 Ha újra ezt bejelenteni le itt, nézzük meg, mi történik. 632 00:29:53,780 --> 00:29:55,530 Tehát, ha én, hogy ezt le itt, amit mond. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Ó, bocsánat. 635 00:29:58,360 --> 00:29:58,859 Hangosabban? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Még hangosabban. 638 00:30:04,011 --> 00:30:04,760 Oh, jó kérdés. 639 00:30:04,760 --> 00:30:05,860 Vajon érvényteleníti a funkció? 640 00:30:05,860 --> 00:30:08,901 Tudod, ennyi év után, én soha nem tesz egy prototípus utána. 641 00:30:08,901 --> 00:30:13,810 Tehát lássuk, hogy a funkció-1 után csinálja. 642 00:30:13,810 --> 00:30:15,279 >> [Motyogva] 643 00:30:15,279 --> 00:30:16,320 David J. MALAN: Oh, várj. 644 00:30:16,320 --> 00:30:17,944 Még mindig van, hogy mindent fel tetején. 645 00:30:17,944 --> 00:30:21,400 Szóval ezt itt, ha én vagyok megértése a kérdésre helyesen. 646 00:30:21,400 --> 00:30:24,700 Teszem mindent, beleértve a A prototípus fenti fő, 647 00:30:24,700 --> 00:30:28,180 de én leteszem a prototípus alatt a végrehajtás. 648 00:30:28,180 --> 00:30:33,190 >> Tehát, ha én, hogy egy, kapok vissza az error-- használt változó n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Oh, ott. 651 00:30:37,860 --> 00:30:38,360 Köszönöm. 652 00:30:38,360 --> 00:30:39,430 Lássuk, mi, hogy eltűnjön ez. 653 00:30:39,430 --> 00:30:41,304 Ez egy másik hiba, úgyhogy figyelmen kívül hagyják ezt. 654 00:30:41,304 --> 00:30:43,910 Nézzük nagyon gyorsan remake ezt. 655 00:30:43,910 --> 00:30:48,100 >> OK, így az adatok érv nem által használt formátum string 656 00:30:48,100 --> 00:30:52,310 n-- ó, csak azért, mert Megváltoztattam ezeket itt. 657 00:30:52,310 --> 00:30:55,885 Rendben, tudjuk, hogy mi a válasz megy hogy-- minden rendben, itt is van. 658 00:30:55,885 --> 00:31:00,560 Ah, köszönöm a pozitív. 659 00:31:00,560 --> 00:31:03,430 Rendben, akkor oldja meg a kódot after-- hagyja ki ezt a különleges bug 660 00:31:03,430 --> 00:31:08,300 mivel ez was-- működik ez a válasz. 661 00:31:08,300 --> 00:31:11,560 >> Tehát ez nem írja felül amit most tett. 662 00:31:11,560 --> 00:31:14,800 Gyanítom, a fordító van írva, oly módon, 663 00:31:14,800 --> 00:31:18,420 hogy figyelmen kívül hagyva a prototípus mert a szervezet, hogy úgy mondjam, 664 00:31:18,420 --> 00:31:20,922 A funkció már valósult meg feljebb. 665 00:31:20,922 --> 00:31:23,380 Szerettem volna, hogy valóban konzultálni a kézi a fordító 666 00:31:23,380 --> 00:31:26,171 megérteni, ha van más közvetve, de első pillantásra 667 00:31:26,171 --> 00:31:29,290 csak azzal, hogy megpróbálja és kísérletezés, úgy tűnik, hogy nincs hatása. 668 00:31:29,290 --> 00:31:30,730 Jó kérdés. 669 00:31:30,730 --> 00:31:33,660 >> Szóval haladjanak előre most, mozgó távol mellékhatások 670 00:31:33,660 --> 00:31:36,660 olyan funkciókat is valami hasonló vizuálisan a képernyőn printf, 671 00:31:36,660 --> 00:31:38,090 de nem adnak vissza értéket. 672 00:31:38,090 --> 00:31:41,550 És funkciók, amelyek visszatérés értékek, mint mi, csak láttam egy pár. 673 00:31:41,550 --> 00:31:45,350 Már látta ezt a fogalmat a hatály, és majd meglátjuk, ezt újra és újra. 674 00:31:45,350 --> 00:31:47,210 De most, ismét, használja az ökölszabály 675 00:31:47,210 --> 00:31:51,410 hogy egy változó csak akkor használható belül a legutóbb megnyitott 676 00:31:51,410 --> 00:31:54,350 és zárt kapcsos zárójelek, mint mi látta, az adott példában. 677 00:31:54,350 --> 00:31:56,910 >> És ahogy rámutatott, van egy ability-- 678 00:31:56,910 --> 00:32:00,040 Ön tudta megoldani néhány ilyen problémák azáltal, hogy a változó globális 679 00:32:00,040 --> 00:32:01,290 legtetején egy fájlt. 680 00:32:01,290 --> 00:32:03,630 De szinte minden esetben mi lenne rándul fel arra, 681 00:32:03,630 --> 00:32:06,170 és valóban nem is megy abba a megoldás most. 682 00:32:06,170 --> 00:32:09,890 Tehát most, az elvihető, hogy a változó ilyen fogalom hatálya alá. 683 00:32:09,890 --> 00:32:13,430 >> De most nézzük meg egy másik száraz módon valóban keresi 684 00:32:13,430 --> 00:32:15,810 néhány nagyon érdekes végrehajtás részleteit. 685 00:32:15,810 --> 00:32:17,810 Hogyan jelenthet információ. 686 00:32:17,810 --> 00:32:20,370 És már néztem ezt Az első héten az osztály. 687 00:32:20,370 --> 00:32:23,320 Keresi a binárisok, és elgondolkodnunk tizedes. 688 00:32:23,320 --> 00:32:28,310 >> De emlékszem a múlt héten, hogy C-nek különböző adattípusok és fürtök több, 689 00:32:28,310 --> 00:32:30,600 de a leghasznosabb közül most lehet ezeket. 690 00:32:30,600 --> 00:32:36,030 A karakter, vagy karakter, ami történik, hogy egy byte, vagy nyolc bit teljes. 691 00:32:36,030 --> 00:32:40,060 És ez azt jelenti, hogy a méret Egy char csak egy byte. 692 00:32:40,060 --> 00:32:45,370 A byte nyolc bit, tehát ez azt jelenti, hogy mi is jelzik, hogy hány karaktert. 693 00:32:45,370 --> 00:32:47,320 Hány betű vagy szimbólumok a billentyűzet 694 00:32:47,320 --> 00:32:49,210 ha van egy byte vagy nyolc bit. 695 00:32:49,210 --> 00:32:51,546 Gondolj vissza a hét nulla. 696 00:32:51,546 --> 00:32:53,420 Ha nyolc bit, hány teljes összeget 697 00:32:53,420 --> 00:32:55,503 tud képviselt minták nullák? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 Az egyet több. 700 00:33:00,260 --> 00:33:03,490 Tehát, 256 teljes, ha indul számított nulla. 701 00:33:03,490 --> 00:33:07,120 Tehát, ha van nyolc bits-- így ha volt a bináris izzók fel itt is, 702 00:33:07,120 --> 00:33:12,180 tudtuk kapcsolni ezeket izzók és kikapcsolása bármelyikében 256 egyedi mintákat. 703 00:33:12,180 --> 00:33:13,640 >> Most ez egy kicsit problémás. 704 00:33:13,640 --> 00:33:16,857 Nem annyira az angol és újlatin nyelvek, de biztosan 705 00:33:16,857 --> 00:33:19,190 amikor bevezetni, a Például ázsiai nyelvek, melyek 706 00:33:19,190 --> 00:33:22,580 sokkal több szimbólum, mint a hasonló 26. az ábécé. 707 00:33:22,580 --> 00:33:24,390 Valójában szüksége lehet egynél több bájtot. 708 00:33:24,390 --> 00:33:28,240 És szerencsére elmúlt években a társadalom 709 00:33:28,240 --> 00:33:31,040 elfogadott egyéb szabványok, amelyek a több mint egy byte egy feltöltéssel. 710 00:33:31,040 --> 00:33:34,210 >> De most a C, az alapértelmezett csak egy byte vagy nyolc bit. 711 00:33:34,210 --> 00:33:38,195 Egy egész szám, eközben négy bájt, más néven a 32 bitet. 712 00:33:38,195 --> 00:33:41,320 Ami azt jelenti, hogy mi az a lehető legnagyobb szám tudunk ábrázolni egy int 713 00:33:41,320 --> 00:33:41,820 látszólag? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Egy milliárd. 716 00:33:45,050 --> 00:33:46,760 Szóval négymilliárd ide vagy oda. 717 00:33:46,760 --> 00:33:49,840 2. A 32th hatalom, ha nem vállal a negatív számok 718 00:33:49,840 --> 00:33:52,530 és csak használja minden pozitív számok, ez négymilliárd 719 00:33:52,530 --> 00:33:53,730 ide vagy oda lehetőséget. 720 00:33:53,730 --> 00:33:57,890 Az úszó, eközben egy más típusú Az adattípus C. Ez még mindig egy szám, 721 00:33:57,890 --> 00:33:58,990 de ez egy valós szám. 722 00:33:58,990 --> 00:34:00,660 Valami a tizedes pont. 723 00:34:00,660 --> 00:34:03,000 És kiderül, hogy a C is használ négy bájt 724 00:34:03,000 --> 00:34:05,340 képviseli lebegőpontos értékek. 725 00:34:05,340 --> 00:34:09,420 >> Sajnos hány úszó pont értékek vannak a világon? 726 00:34:09,420 --> 00:34:11,582 Hány valós szám van? 727 00:34:11,582 --> 00:34:13,540 Van egy végtelen számot, és ami azt illeti 728 00:34:13,540 --> 00:34:15,164 van egy végtelen számú egész. 729 00:34:15,164 --> 00:34:18,070 Így vagyunk már ilyen ásni magunkat egy lyuk van. 730 00:34:18,070 --> 00:34:21,780 Amelynek látszólag computers-- a legkevésbé írt programok C them-- 731 00:34:21,780 --> 00:34:24,110 csak akkor számíthat olyan magas, mint négymilliárd ide vagy oda, 732 00:34:24,110 --> 00:34:26,260 és lebegőpontos értékek csak látszólag 733 00:34:26,260 --> 00:34:28,330 néhány véges mennyiségű pontossággal. 734 00:34:28,330 --> 00:34:30,810 Csak annyi számjegy után a tizedes pont. 735 00:34:30,810 --> 00:34:32,822 >> Mert, természetesen, ha már csak 32 bit, 736 00:34:32,822 --> 00:34:36,030 Nem tudom, hogyan fogunk menni a ami igazi numbers-- valószínűleg 737 00:34:36,030 --> 00:34:37,409 különböző típusú mintákat. 738 00:34:37,409 --> 00:34:40,030 De van biztosan véges számú ilyen minták, 739 00:34:40,030 --> 00:34:41,830 így itt is, ez problematikus. 740 00:34:41,830 --> 00:34:43,710 >> Most már tudjuk elkerülni a problémát egy kicsit. 741 00:34:43,710 --> 00:34:45,710 Ha nem használja a float, jól jönne a dupla 742 00:34:45,710 --> 00:34:50,230 C-ben, amely ad nyolc bájt, ami így több lehetséges mintáinak nullák 743 00:34:50,230 --> 00:34:50,730 és is. 744 00:34:50,730 --> 00:34:55,199 De ez még mindig véges, ami megy hogy problémás, ha írsz szoftver 745 00:34:55,199 --> 00:34:57,670 grafikus vagy képzelet matematikai képletek. 746 00:34:57,670 --> 00:35:00,410 Szóval lehet, hogy tényleg akar számít fel nagyobb. 747 00:35:00,410 --> 00:35:05,640 A hosszú long-- ostobán named-- is nyolc bájt vagy 64 bit, 748 00:35:05,640 --> 00:35:10,260 és ez kétszer olyan hosszú, mint egy int, és ez egy hosszú egész szám. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- ha egy int négy bájt, milyen hosszú egy hosszú C általában? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Továbbá négy bájt, de a hosszú, hosszú nyolc bájt, 752 00:35:21,560 --> 00:35:23,050 és ez a történelmi okok miatt. 753 00:35:23,050 --> 00:35:26,450 >> De az elvihető most csak, hogy az adatok 754 00:35:26,450 --> 00:35:29,625 az ábrázolható computer-- ami fizikai eszköz villamos energiával, 755 00:35:29,625 --> 00:35:32,190 ez általában a vezetés azok nullák és ones-- 756 00:35:32,190 --> 00:35:34,320 A véges mennyiségű pontossággal. 757 00:35:34,320 --> 00:35:35,620 Szóval, mi a probléma akkor? 758 00:35:35,620 --> 00:35:37,480 >> Hát van egy probléma Az integer túlcsordulás. 759 00:35:37,480 --> 00:35:39,780 Nem csak a C, hanem a számítógépek általában. 760 00:35:39,780 --> 00:35:42,590 Például, ha ez a egy byte érdemes bit-- 761 00:35:42,590 --> 00:35:45,120 Szóval, ha ez a nyolc bit-- minden amelyek közül az első számú. 762 00:35:45,120 --> 00:35:47,300 Mi a szám ez ami ha azt feltételezzük, 763 00:35:47,300 --> 00:35:50,730 ez mind a pozitív értékek bináris? 764 00:35:50,730 --> 00:35:54,410 >> 255., és ez nem 256, mert nulla a legalacsonyabb szám. 765 00:35:54,410 --> 00:35:56,760 Tehát 255 a legmagasabb az egyik, de a probléma 766 00:35:56,760 --> 00:36:00,330 tegyük fel, hogy szerettem volna növekmény ez változó 767 00:36:00,330 --> 00:36:04,030 használ nyolc bit összesen Ha azt akarom, hogy megnöveljük. 768 00:36:04,030 --> 00:36:07,160 >> Nos, amint hozzá az egyik, hogy az összes ilyen közül, 769 00:36:07,160 --> 00:36:10,500 tudod talán képzelni visually-- csak mint a könyv az egyik a decimals-- 770 00:36:10,500 --> 00:36:12,300 valami fog folyni a bal oldalon. 771 00:36:12,300 --> 00:36:15,590 És valóban, ha a szám aki ezt, mi történik a bináris 772 00:36:15,590 --> 00:36:17,670 az, hogy túlcsordul vissza nullára. 773 00:36:17,670 --> 00:36:21,730 >> Tehát, ha csak felhasználáshoz nem int, de egy byte számolni egész 774 00:36:21,730 --> 00:36:27,170 a program által default-- amint kapsz 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 után jön 255, ami valószínűleg nem az, amit 776 00:36:32,710 --> 00:36:34,790 felhasználó fog várni. 777 00:36:34,790 --> 00:36:39,620 >> Most közben lebegőpontos világban, Önnek is van egy hasonló probléma. 778 00:36:39,620 --> 00:36:42,670 Nem annyira a legnagyobb number-- bár ez még mindig probléma. 779 00:36:42,670 --> 00:36:45,360 De az összeg a pontosság , amit képviselnek. 780 00:36:45,360 --> 00:36:49,490 Szóval vessünk egy pillantást a példa itt is a mai forrásból code-- 781 00:36:49,490 --> 00:36:52,070 úszó-0.c. 782 00:36:52,070 --> 00:36:54,280 >> És észre, hogy ez egy szuper egyszerű program, amely 783 00:36:54,280 --> 00:36:56,580 kell nyilvánvalóan ki kell nyomtatni, mi az érték? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Mit fogadást ez fog nyomtatni annak ellenére, hogy van egy kis új szintaxis 786 00:37:04,110 --> 00:37:05,540 itt? 787 00:37:05,540 --> 00:37:06,700 Így remélhetőleg 0.1. 788 00:37:06,700 --> 00:37:10,000 Így az megegyezik az egy tized mert csinálok 1 osztva 10. 789 00:37:10,000 --> 00:37:12,430 Én tárolása válasz a változó nevű f. 790 00:37:12,430 --> 00:37:15,850 Hogy változó típusú float, amely egy kulcsszó csak javasolt létezett. 791 00:37:15,850 --> 00:37:18,910 >> Már nem láttam ilyet, de ez a fajta egy ügyes módon printf 792 00:37:18,910 --> 00:37:22,110 határozza meg, hogy hány számjegy van szeretné látni, miután a tizedes pontot. 793 00:37:22,110 --> 00:37:25,020 Tehát ez a jelölés csak azt jelenti, hogy itt egy helykitöltő. 794 00:37:25,020 --> 00:37:27,900 Ez a lebegőpontos érték, és jaj, az úton, 795 00:37:27,900 --> 00:37:31,389 mutasd meg a tizedes pont egy számot a tizedesvessző után. 796 00:37:31,389 --> 00:37:33,180 Szóval ez a szám A számjeggyel, 797 00:37:33,180 --> 00:37:34,650 hogy úgy mondjam, hogy érdemes. 798 00:37:34,650 --> 00:37:40,450 >> Szóval, hadd menjen előre, és nem hogy úszó-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 és látszólag 1 osztva 10 0.0. 800 00:37:46,660 --> 00:37:47,760 Most miért van ez? 801 00:37:47,760 --> 00:37:51,380 >> Ismét jól, a számítógép vesz én a szó szoros értelmében, és írtam 1 802 00:37:51,380 --> 00:37:56,680 és én írott 10, és akkor gondolom, amit a feltételezett adattípus e két 803 00:37:56,680 --> 00:37:58,440 értékek? 804 00:37:58,440 --> 00:38:00,970 Int, ez technikailag valami egy kicsit más. 805 00:38:00,970 --> 00:38:04,150 Ez általában egy hosszú, de végül szerves értéket. 806 00:38:04,150 --> 00:38:06,030 Nem egy lebegőpontos értéket. 807 00:38:06,030 --> 00:38:09,456 >> Ami azt jelenti, hogy ha ez a egy int, és ez egy int, 808 00:38:09,456 --> 00:38:11,830 A probléma az, hogy a számítógép nem rendelkezik a képessége 809 00:38:11,830 --> 00:38:13,680 még tárolni, hogy az tizedes pontossággal. 810 00:38:13,680 --> 00:38:16,430 Tehát, ha nem 1 osztott 10 segítségével egész 811 00:38:16,430 --> 00:38:20,950 mind a számlálóban és a nevező, a válasz legyen 0,1. 812 00:38:20,950 --> 00:38:24,930 Hanem a computer-- mert ezek integers-- 813 00:38:24,930 --> 00:38:27,430 nem tudja, mit kezdjen a 0.1. 814 00:38:27,430 --> 00:38:30,010 >> Tehát mi egyértelműen csinál? 815 00:38:30,010 --> 00:38:33,120 Ez csak dobott el, és mit látok végül 816 00:38:33,120 --> 00:38:38,830 0.0 csak azért, mert ragaszkodott hozzá, hogy printf mutasd meg egy tizedes pontossággal. 817 00:38:38,830 --> 00:38:41,740 De a probléma az, hogy ha felosztjuk az egész egy egész szám, 818 00:38:41,740 --> 00:38:44,347 akkor get-- definíció A C-- egész. 819 00:38:44,347 --> 00:38:46,680 És ez nem fog csinálni valami szép és kényelmesen 820 00:38:46,680 --> 00:38:49,040 mint kerek fel, hogy a legközelebbi felfelé vagy lefelé. 821 00:38:49,040 --> 00:38:51,860 Meg fog vágjon minden után a tizedes. 822 00:38:51,860 --> 00:38:54,030 >> Így csak ösztönösen, mi valószínűleg egy fix? 823 00:38:54,030 --> 00:38:55,351 Mi a legegyszerűbb fix itt? 824 00:38:55,351 --> 00:38:55,850 Igen? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Pontosan. 827 00:39:01,100 --> 00:39:04,200 Miért nem csak kezelni ezeket lebegőpontos értékek hatékonyan 828 00:39:04,200 --> 00:39:05,860 alakítja át őket úszók vagy páros. 829 00:39:05,860 --> 00:39:10,500 És most, ha én nem, hogy lebeg-0, vagy ha fordítani úszók-1, 830 00:39:10,500 --> 00:39:12,570 amely azonos a mi csak javaslatot. 831 00:39:12,570 --> 00:39:16,400 És most én lebeg-0, most már értem a 0.1. 832 00:39:16,400 --> 00:39:17,234 >> Most ez csodálatos. 833 00:39:17,234 --> 00:39:19,441 De most fogok csinálni valami egy kicsit más. 834 00:39:19,441 --> 00:39:22,280 Kíváncsi vagyok, hogy mi az igazán folyik a motorháztető alatt, 835 00:39:22,280 --> 00:39:26,050 és fogom nyomtatni ezt ki 28 tizedesjegy pontossággal. 836 00:39:26,050 --> 00:39:29,730 Azt szeretnénk, hogy valóban látni 0.1000-- egy infinite-- 837 00:39:29,730 --> 00:39:32,710 [Nem hallható] 27 nulla után 0,1. 838 00:39:32,710 --> 00:39:34,740 >> Hát lássuk, hogy ez amit valóban kap. 839 00:39:34,740 --> 00:39:39,430 Készíts úszók-0 ugyanabban a fájlban. 840 00:39:39,430 --> 00:39:41,150 ./floats-0-ra. 841 00:39:41,150 --> 00:39:44,380 Nézzük ráközelít a drámai válasz. 842 00:39:44,380 --> 00:39:49,980 Egész idő alatt, akkor gondolkoztam 1 osztva 10-10%, vagy 0,1. 843 00:39:49,980 --> 00:39:50,810 Ez nem. 844 00:39:50,810 --> 00:39:53,210 Legalábbis amennyiben a számítógép érintett. 845 00:39:53,210 --> 00:39:57,060 >> Most why-- OK, ez teljes hazugság 1 osztva 10 0.1. 846 00:39:57,060 --> 00:39:59,710 De ez nem why-- az elvihető ma. 847 00:39:59,710 --> 00:40:04,010 Akkor miért a számítógép gondol, ellentétben mindannyian a szobában, 848 00:40:04,010 --> 00:40:06,870 hogy az 1 osztva 10 valójában az őrült érték? 849 00:40:06,870 --> 00:40:10,620 Mi az a számítógép csinál látszólag? 850 00:40:10,620 --> 00:40:12,490 Mi ez? 851 00:40:12,490 --> 00:40:13,785 >> Ez nem overflow, önmagában. 852 00:40:13,785 --> 00:40:15,910 Túlcsordulás jellemzően a tekerje körül egy értéket. 853 00:40:15,910 --> 00:40:18,970 Ez az a kérdés a pontatlanság egy lebegőpontos érték 854 00:40:18,970 --> 00:40:22,220 ahol már csak 32 vagy talán még 64 bit. 855 00:40:22,220 --> 00:40:25,230 De ha van egy végtelen száma real numbers-- 856 00:40:25,230 --> 00:40:27,940 számok tizedes pont és számok thereafter-- biztosan 857 00:40:27,940 --> 00:40:29,380 nem képviseli mindet. 858 00:40:29,380 --> 00:40:32,870 Így a számítógép adott bennünket a legközelebbi mérkőzés 859 00:40:32,870 --> 00:40:37,090 Az értéket képviselhet a hogy sok bit értékének Igazából szeretnék, 860 00:40:37,090 --> 00:40:38,690 ami 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Sajnos, ha kezdeni ezzel a matematika, vagy 862 00:40:40,685 --> 00:40:44,360 indítsa járó ilyen típusú úszó pont értékek fontos programs-- 863 00:40:44,360 --> 00:40:46,770 pénzügyi szoftver, katonai software-- semmit 864 00:40:46,770 --> 00:40:49,090 ahol észlelés valószínűleg nagyon fontos. 865 00:40:49,090 --> 00:40:51,520 És elkezd hozzá számok, mint ez, és a Start 866 00:40:51,520 --> 00:40:54,050 fut, szoftver igazán nagy bemenettel 867 00:40:54,050 --> 00:40:56,890 vagy sok órát vagy tételekből napok vagy sok éve, 868 00:40:56,890 --> 00:41:01,060 ezek az apró kis hibát biztosan adhat fel az idők során. 869 00:41:01,060 --> 00:41:04,252 >> Most, mint egy félre, ha valaha látott Superman 3 vagy iroda 870 00:41:04,252 --> 00:41:05,960 és lehet felidézni hogyan ezek a srácok lopott 871 00:41:05,960 --> 00:41:08,668 egy csomó pénzt a saját számítógépén használatával lebegőpontos értékek 872 00:41:08,668 --> 00:41:11,290 és összeadjuk a kis maradványok, remélhetőleg azt a filmet 873 00:41:11,290 --> 00:41:12,390 most több értelme van. 874 00:41:12,390 --> 00:41:14,930 Ez az, amit ők utalva abban a filmben. 875 00:41:14,930 --> 00:41:16,710 Az a tény, hogy a legtöbb vállalat nem lenne 876 00:41:16,710 --> 00:41:18,600 miután egy bizonyos számú A tizedes, 877 00:41:18,600 --> 00:41:20,009 de ezek frakciói cent. 878 00:41:20,009 --> 00:41:22,550 Szóval elkezd hozzá őket, elkezdi, hogy egy csomó pénzt 879 00:41:22,550 --> 00:41:23,424 a bankszámláján. 880 00:41:23,424 --> 00:41:25,160 Szóval ez Office Space magyarázta. 881 00:41:25,160 --> 00:41:28,220 >> Most sajnos túl Office Space, ott 882 00:41:28,220 --> 00:41:31,794 néhány jogosan aggasztó és jelentős hatásokat 883 00:41:31,794 --> 00:41:33,710 Az ilyen típusú alapvető tervezési döntéseket, 884 00:41:33,710 --> 00:41:35,990 sőt az egyik oka használjuk C során 885 00:41:35,990 --> 00:41:39,640 annyira, hogy valóban ez a föld fel megértése számítógépek működnek, 886 00:41:39,640 --> 00:41:42,440 szoftver, hogyan működik, és nem hogy semmit biztosra. 887 00:41:42,440 --> 00:41:45,820 >> És valóban sajnos, még az alapvető megértés, 888 00:41:45,820 --> 00:41:47,370 mi, emberek hibáznak. 889 00:41:47,370 --> 00:41:51,310 És amit gondoltam megosztani az Ez a nyolc perces videó itt venni 890 00:41:51,310 --> 00:41:56,980 egy modern csodák epizód, ami oktatási mutatják, hogy hogyan működnek a dolgok 891 00:41:56,980 --> 00:42:00,370 hogy fest a két kép Az, ha egy nem megfelelő használat 892 00:42:00,370 --> 00:42:02,540 és megértése lebegőpontos értékek 893 00:42:02,540 --> 00:42:05,610 vezetett, hogy néhány jelentős szerencsétlen eredményeket. 894 00:42:05,610 --> 00:42:06,363 Vessünk egy pillantást. 895 00:42:06,363 --> 00:42:07,029 [Videolejátszás] 896 00:42:07,029 --> 00:42:11,290 -Mi Most vissza a "Műszaki Disasters "a modern csodák. 897 00:42:11,290 --> 00:42:12,940 Számítógépek. 898 00:42:12,940 --> 00:42:15,580 Mindannyian jönnek, hogy elfogadja a gyakran frusztráló problémák 899 00:42:15,580 --> 00:42:20,960 Van a them-- hibákat, vírusok és szoftver glitches-- kis áron 900 00:42:20,960 --> 00:42:23,100 fizetni a kényelem. 901 00:42:23,100 --> 00:42:27,770 De a high-tech és a nagy sebességű katonai és űrprogram alkalmazások 902 00:42:27,770 --> 00:42:32,780 A legkisebb probléma nagyíthatók a katasztrófa. 903 00:42:32,780 --> 00:42:38,880 >> Június 4-én, 1996, a tudósok előkészített hogy indítson egy pilóta nélküli Ariane 5 rakéta. 904 00:42:38,880 --> 00:42:41,190 Ez vitt tudományos műholdak tervezett 905 00:42:41,190 --> 00:42:44,570 megállapítani pontosan, hogy a Föld mágneses mező kölcsönhatásba lép 906 00:42:44,570 --> 00:42:47,380 A napszél. 907 00:42:47,380 --> 00:42:50,580 A rakéta épült az Európai Űrügynökség 908 00:42:50,580 --> 00:42:54,400 és felemelte le a létesítmény a tengerparton, Francia Guyana. 909 00:42:54,400 --> 00:42:57,520 >> -At Körülbelül 37 másodpercet a repülés, először 910 00:42:57,520 --> 00:42:59,070 Észrevettem, hogy valami nincs rendjén. 911 00:42:59,070 --> 00:43:02,240 Hogy a fúvókák is forgatható olyan módon, hogy tényleg nem kellene. 912 00:43:02,240 --> 00:43:06,550 Körülbelül 40 másodperc a repülés, egyértelműen a jármű volt a baj, 913 00:43:06,550 --> 00:43:08,820 és ez mikor történt A döntés, hogy elpusztítsa azt. 914 00:43:08,820 --> 00:43:12,370 A tartomány biztonsági tiszt, a óriási belek, megnyomta a gombot 915 00:43:12,370 --> 00:43:18,030 és felrobbant a rakéta előtt lehetett válik a veszélyt a közbiztonságra. 916 00:43:18,030 --> 00:43:21,010 >> Ez volt az lánykori út az Ariane 5, 917 00:43:21,010 --> 00:43:23,920 és pusztítások sor, mert a hiba 918 00:43:23,920 --> 00:43:25,932 beágyazva a rakéta szoftver. 919 00:43:25,932 --> 00:43:27,640 -A Problémát a Ariane az volt, hogy 920 00:43:27,640 --> 00:43:30,500 volt a szám, hogy a szükséges 64 bit kifejezni, 921 00:43:30,500 --> 00:43:33,560 és azt akarták átalakítani azt, hogy egy 16-bites szám. 922 00:43:33,560 --> 00:43:36,820 Azt feltételezték, hogy a szám soha nem lesz nagyon nagy. 923 00:43:36,820 --> 00:43:40,940 Hogy a legtöbb ilyen számjegy A 64-bites szám is nulla. 924 00:43:40,940 --> 00:43:42,450 Tévedtek. 925 00:43:42,450 --> 00:43:45,000 >> -A Képtelenség egy szoftver elfogadni 926 00:43:45,000 --> 00:43:49,460 az a fajta által generált szám Egy másik volt a gyökere a hiba. 927 00:43:49,460 --> 00:43:54,260 Szoftverfejlesztés vált nagyon költséges része az új technológia. 928 00:43:54,260 --> 00:43:57,060 Az Ariane 4 rakéta volt nagyon sikeres volt. 929 00:43:57,060 --> 00:44:01,600 Ennyit a szoftver létrehozott azt is használják az Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -A Alapvető probléma az volt, hogy az Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Vajon faster-- felgyorsult gyorsabb, és A szoftver nem számolják el az. 932 00:44:11,200 --> 00:44:14,910 >> -az Megsemmisítése a rakéta hatalmas pénzügyi katasztrófa. 933 00:44:14,910 --> 00:44:18,630 Minden miatt egy percet szoftver hiba. 934 00:44:18,630 --> 00:44:21,160 De nem ez volt az első idő adatkonverzió problémák 935 00:44:21,160 --> 00:44:24,770 már sújtja a modern rakéta technológia. 936 00:44:24,770 --> 00:44:28,020 >> -A 1991 a kezdet Az első Öböl-háború, 937 00:44:28,020 --> 00:44:30,540 A Patriot rakéta tapasztalt hasonló jellegű 938 00:44:30,540 --> 00:44:32,465 számos konverziós probléma. 939 00:44:32,465 --> 00:44:36,760 És ennek eredményeként 28 emberekre, 28 Amerikai soldiers-- öltek meg, 940 00:44:36,760 --> 00:44:39,010 és mintegy száz másik megsebesült. 941 00:44:39,010 --> 00:44:42,830 Amikor a Patriot, ami kellett volna elleni bejövő Scuds, 942 00:44:42,830 --> 00:44:45,780 nem a tűz egy rakéta. 943 00:44:45,780 --> 00:44:51,610 >> Mikor Irak lerohanta Kuvait, és Amerikában indított Sivatagi Vihar 1991 elején, 944 00:44:51,610 --> 00:44:55,720 Patriot rakéta elemek vezényeltek védelme Szaúd-Arábia és Izrael 945 00:44:55,720 --> 00:44:59,180 az iraki Scud rakéta támadások. 946 00:44:59,180 --> 00:45:03,080 A Patriot egy amerikai közepes hatótávolságú föld-levegő rendszer 947 00:45:03,080 --> 00:45:06,530 által gyártott Raytheon cég. 948 00:45:06,530 --> 00:45:09,500 >> -az Mérete Patriot elfogó itself-- 949 00:45:09,500 --> 00:45:14,705 ez körülbelül mintegy 20 méter hosszú, , tömege körülbelül 2000 kg. 950 00:45:14,705 --> 00:45:19,090 És hordoz robbanófejet kb, Azt hiszem, körülbelül 150 kiló. 951 00:45:19,090 --> 00:45:23,880 És a robbanófej maga nagy robbanó, amely 952 00:45:23,880 --> 00:45:26,700 van töredékek körülötte. 953 00:45:26,700 --> 00:45:31,630 Így a burkolat a robbanófej célja, hogy úgy viselkednek, mint a sörét. 954 00:45:31,630 --> 00:45:34,040 >> -A Rakéták hajtják Négy per konténer, 955 00:45:34,040 --> 00:45:37,170 és szállítják a félpótkocsi. 956 00:45:37,170 --> 00:45:44,880 >> -A Patriot rakétavédelmi rendszer nyúlik vissza, legalább 20 éve. 957 00:45:44,880 --> 00:45:48,380 Eredetileg mint a légvédelmi rakéta 958 00:45:48,380 --> 00:45:50,810 lő le az ellenséges repülőgépek. 959 00:45:50,810 --> 00:45:54,410 Az első Öböl-háború amikor a háború jött, 960 00:45:54,410 --> 00:45:59,650 a hadsereg akarta használni, hogy lő le Scuds, nem repülőgépek. 961 00:45:59,650 --> 00:46:03,580 Az iraki légierő volt nem olyan nagy probléma, 962 00:46:03,580 --> 00:46:06,590 de a hadsereg aggódik Scuds. 963 00:46:06,590 --> 00:46:10,120 És így igyekeztek frissíteni a Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Ellenség rakéta halad Mach 5 965 00:46:12,740 --> 00:46:15,670 volt, lesz elég ambiciózusak. 966 00:46:15,670 --> 00:46:18,440 De amikor a Patriot rohant a szolgáltatás, 967 00:46:18,440 --> 00:46:22,580 A hadsereg nem volt tudatában egy iraki módosítás, amely 968 00:46:22,580 --> 00:46:25,880 tették Scuds közel lehetetlen azt. 969 00:46:25,880 --> 00:46:30,690 >> Mi történt a Scuds hogy jöttek be volt stabil. 970 00:46:30,690 --> 00:46:32,000 Voltak bizonytalan. 971 00:46:32,000 --> 00:46:37,210 Ennek oka az volt az Iraqis-- annak érdekében, hogy 600 km-el 972 00:46:37,210 --> 00:46:41,680 Egy 300 km-es tartomány missile-- vett tömege az elülső robbanófej, 973 00:46:41,680 --> 00:46:43,340 és így a robbanófej könnyebb. 974 00:46:43,340 --> 00:46:48,490 Tehát most a Patriot próbál jönni a Scud, és a legtöbb time-- 975 00:46:48,490 --> 00:46:52,880 a túlnyomó többsége a time-- ez csak repülni a Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Egyszer A Patriot-üzemeltetők felismerte a Patriot tévesztett célt, 977 00:46:57,120 --> 00:47:01,630 ők felrobbantotta a Patriot a robbanófej hogy elkerülje az esetleges baleseteket, ha az 978 00:47:01,630 --> 00:47:04,440 hagyjuk leesik a földre. 979 00:47:04,440 --> 00:47:08,700 >> -Ez, Amit a legtöbb ember látta akkora tűzgolyók az égen, 980 00:47:08,700 --> 00:47:14,180 és félreértették a elfogja a Scud robbanófejeket. 981 00:47:14,180 --> 00:47:18,020 >> -Although Az éjszakai égbolton, Patriots úgy tűnt, hogy sikeresen pusztító 982 00:47:18,020 --> 00:47:23,280 Scuds, a Dhahran lehetne Félreértés ne essék a teljesítményét. 983 00:47:23,280 --> 00:47:27,930 Ott a Patriot a radarrendszer Elvesztettem a bejövő Scud 984 00:47:27,930 --> 00:47:30,260 és soha nem indított kellő a szoftver hibája. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Ez volt az izraeliek, akik először fedezte fel hogy minél hosszabb a rendszer volt, 987 00:47:38,880 --> 00:47:41,130 annál nagyobb az időeltérés vált. 988 00:47:41,130 --> 00:47:44,770 Miatt egy órát beágyazott A rendszer számítógépét. 989 00:47:44,770 --> 00:47:48,190 >> Kábé két héttel a tragédia Dhahran, 990 00:47:48,190 --> 00:47:50,720 az izraeliek jelentett a Honvédelmi Minisztérium 991 00:47:50,720 --> 00:47:52,410 hogy a rendszer időveszteség. 992 00:47:52,410 --> 00:47:54,410 Körülbelül nyolc órán át A futás, amikor észrevették, 993 00:47:54,410 --> 00:47:57,690 hogy a rendszer egyre észrevehetően kevésbé pontos. 994 00:47:57,690 --> 00:48:01,850 A Védelmi Minisztérium reagált mondja az összes Patriot akkumulátorok 995 00:48:01,850 --> 00:48:04,800 hogy ne hagyja el a rendszert a hosszú ideig. 996 00:48:04,800 --> 00:48:06,980 Soha nem azt mondta, amit hosszú idő volt. 997 00:48:06,980 --> 00:48:09,140 8 óra, 10 óra, egy ezer óra. 998 00:48:09,140 --> 00:48:11,300 Senki sem tudta. 999 00:48:11,300 --> 00:48:13,320 >> -A Patriot akkumulátor állomásozott a laktanyában 1000 00:48:13,320 --> 00:48:18,310 A Dhahran és hibás belső óra volt, a több mint 100 óra 1001 00:48:18,310 --> 00:48:21,520 az este a február 25. 1002 00:48:21,520 --> 00:48:25,792 >> -Ez Nyomon idő pontossággal A körülbelül egy tizedmásodpercre. 1003 00:48:25,792 --> 00:48:27,950 Most egy tizedmásodpercre Érdekes szám 1004 00:48:27,950 --> 00:48:31,850 mert nem lehet kifejezni bináris pontosan, ami 1005 00:48:31,850 --> 00:48:36,500 azt jelenti, hogy nem lehet kifejezni pontosan minden modern digitális számítógép. 1006 00:48:36,500 --> 00:48:41,070 Nehéz elhinni, de használja ezt a példát. 1007 00:48:41,070 --> 00:48:43,420 >> Nézzük a számot egyharmadát. 1008 00:48:43,420 --> 00:48:47,330 Egyharmada nem lehet kifejezett tizedes pontosan. 1009 00:48:47,330 --> 00:48:52,060 Egyharmada 0.333 folyik a végtelenbe. 1010 00:48:52,060 --> 00:48:56,420 Nincs módja, hogy a abszolút pontossága a tizedes. 1011 00:48:56,420 --> 00:48:59,530 Ez pontosan az a fajta probléma hogy történt a Patriot. 1012 00:48:59,530 --> 00:49:04,040 Minél hosszabb a rendszer futott, a rosszabb az idő hiba volt. 1013 00:49:04,040 --> 00:49:08,840 >> -Miután 100 üzemóra, a hiba volt az időben csak mintegy egyharmada 1014 00:49:08,840 --> 00:49:10,440 a második. 1015 00:49:10,440 --> 00:49:14,150 De tekintve célba rakéta utazó Mach 5, 1016 00:49:14,150 --> 00:49:18,560 azt eredményezte, hogy tracking hiba a több mint 600 méter. 1017 00:49:18,560 --> 00:49:21,870 Lenne egy végzetes hiba A katonák Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> Mi történt egy Scud dob volt által észlelt korai előrejelző műholdak, 1019 00:49:28,455 --> 00:49:32,710 és tudták, hogy a Scud jön azok általános iránya. 1020 00:49:32,710 --> 00:49:35,150 Nem tudom, hol jön. 1021 00:49:35,150 --> 00:49:38,210 Ez volt már a radar eleme a Patriot rendszer 1022 00:49:38,210 --> 00:49:43,150 védő Dhahran hogy keresse meg és tartsa követi a beérkező ellenséges rakéta. 1023 00:49:43,150 --> 00:49:44,561 >> -A Radar nagyon okos. 1024 00:49:44,561 --> 00:49:46,560 Ez valójában a pálya a helyzet a Scud 1025 00:49:46,560 --> 00:49:48,930 majd megjósolni, ahol valószínűleg lenne 1026 00:49:48,930 --> 00:49:51,380 A következő alkalommal, amikor a radar küldött impulzus ki. 1027 00:49:51,380 --> 00:49:53,040 Hogy hívták a tartományban kapu. 1028 00:49:53,040 --> 00:49:57,620 >> Akkor, ha a Patriot úgy dönt, elég időt 1029 00:49:57,620 --> 00:50:02,400 át, hogy menjen vissza, és ellenőrizze a következő helyszín ehhez észlelt objektum 1030 00:50:02,400 --> 00:50:03,550 megy vissza. 1031 00:50:03,550 --> 00:50:07,820 Tehát, amikor visszament a rossz helyén, akkor nem látja tárgy. 1032 00:50:07,820 --> 00:50:10,360 És úgy dönt, hogy nem volt tárgya. 1033 00:50:10,360 --> 00:50:13,630 Hogy volt egy hamis érzékelés és esik a pályán. 1034 00:50:13,630 --> 00:50:16,970 >> -A Bejövő Scud eltűnt a radar képernyőjén, 1035 00:50:16,970 --> 00:50:20,200 és másodperc múlva az csapódott a laktanyába. 1036 00:50:20,200 --> 00:50:22,570 A Scud megölt 28. 1037 00:50:22,570 --> 00:50:26,110 Ez volt az utolsó lőttek az első Öböl-háború. 1038 00:50:26,110 --> 00:50:31,920 Tragikus, a frissített szoftver érkezett hajnalban a következő napon. 1039 00:50:31,920 --> 00:50:34,870 A szoftver hiba volt állapítottak meg, záró 1040 00:50:34,870 --> 00:50:39,150 egy fejezetet a bajba jutott története a Patriot rakéta. 1041 00:50:39,150 --> 00:50:40,030 >> [END Videolejátszás] 1042 00:50:40,030 --> 00:50:41,488 >> David J. MALAN: Ez az a CS50. 1043 00:50:41,488 --> 00:50:42,820 Látni fogjuk, hogy szerdán. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [Zenelejátszás] 1046 00:50:50,370 --> 00:54:23,446