1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [Muusika mängimine] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. Humala: Olgu. 5 00:00:12,660 --> 00:00:15,590 See on CS50 ja see on alguse nädal kaks. 6 00:00:15,590 --> 00:00:19,120 Seega alustagem täna viga. 7 00:00:19,120 --> 00:00:20,974 Viga, on muidugi see, viga programmi 8 00:00:20,974 --> 00:00:22,890 ja saad väga tuttav selle mõiste 9 00:00:22,890 --> 00:00:26,050 Kui sa pole kunagi programmeeritud enne. pset0 ja nüüd pset1. 10 00:00:26,050 --> 00:00:29,280 Kuid olgem kaaluma midagi väike lihtne esimesel. 11 00:00:29,280 --> 00:00:32,189 See programm siin, et ma viskasin koos ette, 12 00:00:32,189 --> 00:00:37,280 ja ma väita, et see peaks printida 10 tähte ekraanile printf, 13 00:00:37,280 --> 00:00:41,020 aga see on ilmselt lollakas mingil moel. 14 00:00:41,020 --> 00:00:45,370 >> Kuna sama spetsifikatsiooniga tuleb trükkida 10 tähte, 15 00:00:45,370 --> 00:00:50,230 kuid see ei ole ilmselt, mida oleks sa väidad on viga? 16 00:00:50,230 --> 00:00:52,004 Jah? 17 00:00:52,004 --> 00:00:54,420 Nii et see on maha üks viga, ja mida sa mõtled? 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 Suurepärane. 22 00:01:10,410 --> 00:01:13,930 Nii et me oleme määratud alustada väärtus null i, 23 00:01:13,930 --> 00:01:18,399 ja me oleme määratud n väärtus 10, aga meil kasutada on väiksem või võrdne. 24 00:01:18,399 --> 00:01:21,190 Ja põhjus, et see on kahe tegelased ja mitte ainult ühe sümboli, 25 00:01:21,190 --> 00:01:22,630 nagu matemaatika raamat, on see, et sa ei pea 26 00:01:22,630 --> 00:01:24,880 viis väljendada üks märk samaväärne. 27 00:01:24,880 --> 00:01:28,450 >> Nii et see tähendab alla, kuid kui hakkad nullist, 28 00:01:28,450 --> 00:01:31,690 aga loete kõik viis üles läbi ja võrdub 10, 29 00:01:31,690 --> 00:01:34,170 sa oled muidugi läheb loe 11 asjad kokku. 30 00:01:34,170 --> 00:01:35,900 Ja nii sa lähed printida 11 tähte. 31 00:01:35,900 --> 00:01:37,990 Niisiis, milline võiks olla fix selle eest? 32 00:01:37,990 --> 00:01:39,970 Jah? 33 00:01:39,970 --> 00:01:43,980 >> Nii lihtsalt reguleerida alla või võrdne lihtsalt olla väiksem, 34 00:01:43,980 --> 00:01:46,250 ja seal ma väita, võibolla teine ​​lahendus ka. 35 00:01:46,250 --> 00:01:47,210 Mida võiks veel teha? 36 00:01:47,210 --> 00:01:48,590 Jah? 37 00:01:48,590 --> 00:01:53,660 >> Nii algab võrdub see 1 ja jätnud väiksem või võrdne. 38 00:01:53,660 --> 00:01:56,187 Ja ausalt öeldes ma väita, , et tüüpiline inimese, 39 00:01:56,187 --> 00:01:57,770 see on ilmselt rohkem arusaadav. 40 00:01:57,770 --> 00:02:00,280 Alusta lugedes 1 ja arvata kokku kuni 10. 41 00:02:00,280 --> 00:02:01,690 Sisuliselt seda, mida sa mõtled. 42 00:02:01,690 --> 00:02:04,010 >> Kuid reaalsus on programmeerimine, nagu me oleme näinud, 43 00:02:04,010 --> 00:02:07,598 infotehnoloogid ja programmeerijad üldiselt ei hakata nullist. 44 00:02:07,598 --> 00:02:09,389 Ja nii see on hea, kui sa harjud sellega. 45 00:02:09,389 --> 00:02:12,640 Teie seisundit üldiselt olla midagi alla. 46 00:02:12,640 --> 00:02:14,910 Nii lihtsalt loogiline viga, et me võiksime nüüd 47 00:02:14,910 --> 00:02:17,990 määrata ja lõpuks uuesti kompileerima see ja saada just 10. 48 00:02:17,990 --> 00:02:19,610 >> Noh, kuidas sellest veast siin? 49 00:02:19,610 --> 00:02:24,200 Ka siin, ma väita, et mul on Eesmärk trükkimine 10 stars-- 50 00:02:24,200 --> 00:02:28,140 üks rea seekord, kuid see ei ole. 51 00:02:28,140 --> 00:02:30,940 Enne teeme ettepaneku, mis fix on, mida see 52 00:02:30,940 --> 00:02:34,640 prindi visuaalselt kui ma kompileerida ja käivitada see programm sa arvad? 53 00:02:34,640 --> 00:02:35,140 Jah? 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 Nii et kõik tähed Sama liin on see, mida ma kuulsin, 57 00:02:41,690 --> 00:02:43,391 ja siis reavahetusmärki. 58 00:02:43,391 --> 00:02:44,140 Nii et proovime seda. 59 00:02:44,140 --> 00:02:48,710 Nii et lollakas-1, sisestada, ja ma näen rõkkama käsk 60 00:02:48,710 --> 00:02:50,090 et me rääkisime eelmisel korral. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, ja tõesti ma näen kõiki 10 tärni samal liinil, kuigi ma väita, 62 00:02:55,180 --> 00:02:58,690 minu spetsifikatsioon lihtsalt kommentaar atop kood, mis ma ette teha ühe inimese kohta 63 00:02:58,690 --> 00:02:59,230 line. 64 00:02:59,230 --> 00:03:00,580 Aga see tundub õige. 65 00:03:00,580 --> 00:03:04,620 >> Nüüd line 15 tundub, et ma olen trükkimine star, ja siis joon 16 66 00:03:04,620 --> 00:03:06,620 tundub, et ma olen trükkimine reavahetusmärki, 67 00:03:06,620 --> 00:03:09,560 ja nad mõlemad liigestatud nii Ma olen sees silmus selgelt. 68 00:03:09,560 --> 00:03:13,610 Nii et ma ei peaks seda tegema star, uus line, star, uus liin, star, uus liin? 69 00:03:13,610 --> 00:03:14,110 Jah? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Jah, erinevalt keeles nagu Python, kui te olete juba tuttav, 72 00:03:21,240 --> 00:03:23,540 taandus ei loe arvutiga. 73 00:03:23,540 --> 00:03:25,280 See vaid tähtis inimene. 74 00:03:25,280 --> 00:03:29,860 Samas kui siin olen leiutanud read 15 ja 16-- mis näeb välja ilus, 75 00:03:29,860 --> 00:03:31,330 kuid arvuti ei hooli. 76 00:03:31,330 --> 00:03:34,640 Arvuti hoolib tegelikult võttes looksulg 77 00:03:34,640 --> 00:03:36,310 ümber nende rida koodi. 78 00:03:36,310 --> 00:03:39,520 >> Nii et see on selged-- just nagu Scratch-- et need kaks rida koodi 79 00:03:39,520 --> 00:03:40,450 tuleks täita. 80 00:03:40,450 --> 00:03:44,390 Nagu üks neist kollastest Scratch puzzle tükki uuesti ja uuesti ja uuesti. 81 00:03:44,390 --> 00:03:50,920 >> Nüüd, kui ma uuesti käivitada program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Mul on viga kohe. 83 00:03:51,770 --> 00:03:54,212 Mida ma unustada seda teha? 84 00:03:54,212 --> 00:03:55,420 Jah, ma ei kompileerida. 85 00:03:55,420 --> 00:03:56,740 Nii et lollakas-2. 86 00:03:56,740 --> 00:03:59,840 No sellist faili, sest ma ei tegelikult kompileerida teine ​​versioon. 87 00:03:59,840 --> 00:04:04,860 Nüüd huvitav deklareerimata variable-- mitte 2. 88 00:04:04,860 --> 00:04:05,510 Me teeme 1. 89 00:04:05,510 --> 00:04:11,050 Tee lollakas-1-- ./buggy-1-- ja nüüd igaüks neist on samal joonel. 90 00:04:11,050 --> 00:04:13,880 >> Nüüd on erand see peaks nõude kaevanduse 91 00:04:13,880 --> 00:04:15,520 et sa pead need looksulg. 92 00:04:15,520 --> 00:04:20,160 Millal on tegelikult OK-- kui olete märganud jaos või textbooks-- 93 00:04:20,160 --> 00:04:22,130 jätta looksulg? 94 00:04:22,130 --> 00:04:22,630 Jah? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Täpselt. 97 00:04:26,870 --> 00:04:28,940 Kui seal on ainult üks rida koodi, mis sa 98 00:04:28,940 --> 00:04:32,830 soovi olla seotud loop nagu meie esimene näide. 99 00:04:32,830 --> 00:04:36,380 See on täiesti õigustatud jätta looksulg 100 00:04:36,380 --> 00:04:40,310 just nagu omamoodi mugavuse alates koostaja teile. 101 00:04:40,310 --> 00:04:40,810 Jah? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Hea küsimus. 104 00:04:43,930 --> 00:04:45,500 Kas see loetakse stiilis vea? 105 00:04:45,500 --> 00:04:49,340 Soovime promote-- nagu CS50 stiili juhend, URL, mille 106 00:04:49,340 --> 00:04:51,926 on pset1-- et alati kasutada looksulg. 107 00:04:51,926 --> 00:04:53,550 Muidugi, kui sa oled uus programmeerimine. 108 00:04:53,550 --> 00:04:56,800 Reaalsus on see, et me ei ole läheb keela teil 109 00:04:56,800 --> 00:04:58,680 tegemast neid mugavustega. 110 00:04:58,680 --> 00:05:00,846 Aga kui sa oled lihtsalt saada pöörduks asju, 111 00:05:00,846 --> 00:05:04,020 absoluutselt vaid kasutage alati lokkis traksid, kuni sa saad aru saama sellest. 112 00:05:04,020 --> 00:05:04,640 Hea küsimus. 113 00:05:04,640 --> 00:05:05,320 >> Olgu. 114 00:05:05,320 --> 00:05:07,660 Nii et siis oli viga. 115 00:05:07,660 --> 00:05:09,190 Vähemalt midagi üsna lihtne. 116 00:05:09,190 --> 00:05:11,260 Ja veel sa võiksid mõelda selle on algelised, eks? 117 00:05:11,260 --> 00:05:13,635 See on justkui esimese nädala vaadeldes keel 118 00:05:13,635 --> 00:05:14,890 nagu näha oma vigu seal. 119 00:05:14,890 --> 00:05:17,250 Kuid reaalsus on need tegelikult esindaja 120 00:05:17,250 --> 00:05:20,310 on päris hirmutav probleeme mis võivad tekkida reaalses maailmas. 121 00:05:20,310 --> 00:05:23,530 >> Nii et mõned teist võivad meenutada kui te järgite tech news, 122 00:05:23,530 --> 00:05:25,740 või isegi püütud tuul selle aasta veebruaris 123 00:05:25,740 --> 00:05:29,434 Selle viimase aasta jooksul, et Apple oli tehtud natuke viga nii iOS, 124 00:05:29,434 --> 00:05:31,350 operatsioonisüsteem nende telefonid ja ka 125 00:05:31,350 --> 00:05:34,220 Mac OS operatsioonisüsteemi nende lauaarvutid ja sülearvutid. 126 00:05:34,220 --> 00:05:36,480 Ja nägid sellised pealkirjad nagu see. 127 00:05:36,480 --> 00:05:41,120 Ja pärast seda, Apple lubas määrata see viga, 128 00:05:41,120 --> 00:05:45,950 ja väga kiiresti ei paranda iOS, aga siis lõpuks fikseeritud see Mac OS 129 00:05:45,950 --> 00:05:46,810 samuti. 130 00:05:46,810 --> 00:05:50,370 >> Nüüd ükski neist pealkirju üksi tõesti paljastada, mis Põhiprobleem oli, 131 00:05:50,370 --> 00:05:55,640 aga viga oli lõpuks vähendatakse viga SSL Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 Ja pikk lugu lühike, see tarkvara 133 00:05:57,390 --> 00:06:01,030 et meie brauserid ja muu tarkvara, mida kasutatakse tee mida? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Kui ma ütlesin, et SSL on kaasatud, kui sa 136 00:06:06,860 --> 00:06:13,920 külastage URL, mis algab HTTPS, Mis siis võiks SSL olla seotud? 137 00:06:13,920 --> 00:06:14,580 Krüpteerimist. 138 00:06:14,580 --> 00:06:16,470 Nii et me räägime see lähipäevil. 139 00:06:16,470 --> 00:06:18,750 Encryption, kunst skrambling teavet. 140 00:06:18,750 --> 00:06:22,200 >> Aga pikk lugu lühike, Apple millalgi tagasi oli teinud vea 141 00:06:22,200 --> 00:06:25,970 nende rakendamise SSL, tarkvara, mis lõppkokkuvõttes viib 142 00:06:25,970 --> 00:06:30,120 Aadresse nagu HTTPS või max ühendused ka seal. 143 00:06:30,120 --> 00:06:32,850 Mille tulemuseks on, et teie ühendused võivad tekkida 144 00:06:32,850 --> 00:06:33,920 kinni pidada. 145 00:06:33,920 --> 00:06:37,130 Ning ühendused olid pruugi krüptitud 146 00:06:37,130 --> 00:06:40,350 kui teil on olnud halbu mees vahel te ja sihtveebisaidi kes 147 00:06:40,350 --> 00:06:42,170 teadis, kuidas seda ära kasutada. 148 00:06:42,170 --> 00:06:45,090 >> Nüüd Apple lõpuks postitatud määrata selle lõpuks 149 00:06:45,090 --> 00:06:46,920 ja kirjeldus nende fix oli see. 150 00:06:46,920 --> 00:06:49,878 Turvaline transport ei kinnita autentsuse ühendus. 151 00:06:49,878 --> 00:06:52,920 Teemat käsitlenud taastada puuduvad kinnitamine samme. 152 00:06:52,920 --> 00:06:57,250 >> Nii et see on väga käsi laineline selgitus jaoks lihtsalt, et me silmamunad. 153 00:06:57,250 --> 00:07:00,920 Seal on sõna otseses mõttes üks rida koodi, mis oli lollakas 154 00:07:00,920 --> 00:07:05,130 nende rakendamise SSL ja Kui sa lähed online ja otsida 155 00:07:05,130 --> 00:07:07,210 tegelikult võite leida algallika koodi. 156 00:07:07,210 --> 00:07:11,960 Näiteks on see ekraanipilt ainult osa üsna suur fail, 157 00:07:11,960 --> 00:07:15,965 kuid see funktsioon ilmselt nimetatakse SSL kontrollida märk server võtme vahetamine. 158 00:07:15,965 --> 00:07:17,840 Ja see võtab kamp argumendid ja sisendeid. 159 00:07:17,840 --> 00:07:20,298 Ja me ei kavatse keskenduda liiga palju eritunnuste seal, 160 00:07:20,298 --> 00:07:24,390 aga kui teil keskenduda koodi sees selle tähtsaim funktsioon-- olgem 161 00:07:24,390 --> 00:07:25,590 suurendada ka. 162 00:07:25,590 --> 00:07:28,140 Sul võib juba arvata, mis viga võiks 163 00:07:28,140 --> 00:07:31,230 isegi kui sa ei tea, lõpuks, mida te vaatate. 164 00:07:31,230 --> 00:07:35,924 Seal on selline anomaalia siin, mis on mis? 165 00:07:35,924 --> 00:07:38,940 >> Jah, ma tõesti ei meeldi välimuse kaks goto ebaõnnestub. 166 00:07:38,940 --> 00:07:42,060 Ausalt, ma tõesti ei tea, mida goto ebaõnnestuda teel, kuid millel on kaks neist 167 00:07:42,060 --> 00:07:42,810 tagasi tagasi. 168 00:07:42,810 --> 00:07:45,290 See lihtsalt selline röövib mind intellektuaalselt valesti, 169 00:07:45,290 --> 00:07:48,910 ja tõesti, kui me suumida ainult need read, see on C. 170 00:07:48,910 --> 00:07:52,220 >> Nii palju Apple'i kood on ise kirjutatud C, 171 00:07:52,220 --> 00:07:55,780 ja see ilmselt on tõesti equivalent-- 172 00:07:55,780 --> 00:07:59,060 mitte et päris taandus versioon, aga kui sa tunnistama asjaolu, 173 00:07:59,060 --> 00:08:02,560 et pole looksulg, mida Apple tõesti kirjutas oli kood, mis näeb 174 00:08:02,560 --> 00:08:03,540 niimoodi. 175 00:08:03,540 --> 00:08:07,080 Nii et ma olen suumitud välja ja ma lihtsalt fikseeritud süvend mõttes 176 00:08:07,080 --> 00:08:10,690 et kui pole looksulg, et Teine goto suuda see kollane 177 00:08:10,690 --> 00:08:12,500 läheb täide ükskõik mida. 178 00:08:12,500 --> 00:08:15,540 See ei ole seotud kui tingimus kohal. 179 00:08:15,540 --> 00:08:19,590 >> Nii et isegi uuesti, kui sa ei ole päris mõista, mida see võib minna 180 00:08:19,590 --> 00:08:23,230 on teinud, teavad, et kõik need conditions-- nende joonte 181 00:08:23,230 --> 00:08:26,180 on väga oluline samm aastal protsessi kontrollimiseks 182 00:08:26,180 --> 00:08:28,350 Kui teie andmed on tegelikult krüpteeritud. 183 00:08:28,350 --> 00:08:31,710 Niisiis vahele üks neist meetmeid, ei ole parim idee. 184 00:08:31,710 --> 00:08:34,840 >> Aga kuna meil on see Teine goto ei kollasena 185 00:08:34,840 --> 00:08:36,840 ja siis, kui oleme omamoodi esteetiliselt 186 00:08:36,840 --> 00:08:40,480 liigutada vasakule, kus see loogiliselt on hetkel, mida 187 00:08:40,480 --> 00:08:43,230 kas see tähendab, et liin koodi alla, et teine ​​goto 188 00:08:43,230 --> 00:08:46,480 ei oleks te arvate? 189 00:08:46,480 --> 00:08:48,860 See on alati saab vahele jätta. 190 00:08:48,860 --> 00:08:52,100 Nii gotos üldiselt kortsutas kulmu põhjustel me tegelikult ei lähe, 191 00:08:52,100 --> 00:08:54,940 ja tõepoolest CS50 me ei kipu õpetada seda avaldust goto, 192 00:08:54,940 --> 00:08:58,130 aga sa ei mõtle goto ei suuda nii minna hüpata 193 00:08:58,130 --> 00:08:59,600 mõnede teiste osa koodi. 194 00:08:59,600 --> 00:09:03,120 >> Teisisõnu hüpata üle see viimane rida kokku, 195 00:09:03,120 --> 00:09:07,420 ja nii tulemus see loll lihtne viga, et oli lihtsalt 196 00:09:07,420 --> 00:09:10,330 tulemus ilmselt keegi kopeerige üks liiga 197 00:09:10,330 --> 00:09:14,150 mitu korda oli kogu turvalisuse iOS ja Mac OS 198 00:09:14,150 --> 00:09:18,240 oli haavatav pealtkuulamine halvad poisid juba mõnda aega. 199 00:09:18,240 --> 00:09:19,940 Kuni Apple lõpuks kindlaks selle. 200 00:09:19,940 --> 00:09:23,100 >> Nüüd, kui mõned teist on tegelikult töötab vana versiooni iOS või Mac OS, 201 00:09:23,100 --> 00:09:27,250 võite minna gotofail.com mis on veebisait, et keegi luua 202 00:09:27,250 --> 00:09:29,190 sisuliselt kindlaks programmiliselt 203 00:09:29,190 --> 00:09:30,980 Kui teie arvuti on endiselt ohustatud. 204 00:09:30,980 --> 00:09:33,600 Ja ausalt öeldes, kui see on see on ilmselt hea mõte 205 00:09:33,600 --> 00:09:36,870 uuendada oma telefoni või Mac selles punktis. 206 00:09:36,870 --> 00:09:40,120 Aga seal, vaid märk sellest, kuidas tunnustust nende madalama 207 00:09:40,120 --> 00:09:42,400 detailid ja õiglaselt lihtne ideid võib tõesti 208 00:09:42,400 --> 00:09:44,590 tõlkida otsused ja probleeme, mis 209 00:09:44,590 --> 00:09:47,320 affected-- selles juhul-- miljoneid inimesi. 210 00:09:47,320 --> 00:09:49,107 >> Nüüd sõna manustamist. 211 00:09:49,107 --> 00:09:50,690 § algab sel pühapäeval. 212 00:09:50,690 --> 00:09:53,360 Te saate e-posti teel nädalavahetusel umbes lõik, misjärel 213 00:09:53,360 --> 00:09:55,290 resectioning protsess algab, kui olete 214 00:09:55,290 --> 00:09:56,998 avastasin, et sa nüüd mõned uued konfliktid. 215 00:09:56,998 --> 00:10:00,180 Nii juhtub igal aastal, ja me mahutab päevil tulla. 216 00:10:00,180 --> 00:10:02,430 >> Office hours-- tegema hoida silma peal ajakava siin. 217 00:10:02,430 --> 00:10:05,100 Muudab natuke sel nädalal eriti algusaeg 218 00:10:05,100 --> 00:10:08,180 ja asukoha, nii et ärge nõu et enne pealkirja tööaega 219 00:10:08,180 --> 00:10:09,520 iga järgmise nelja ööd. 220 00:10:09,520 --> 00:10:12,680 Ja nüüd sõna hinnangu eriti kui sa sukelduda probleem 221 00:10:12,680 --> 00:10:14,350 määrab üks ja kaugemalgi. 222 00:10:14,350 --> 00:10:17,070 >> Nii ühe spetsifikatsiooni, need on tavaliselt 223 00:10:17,070 --> 00:10:20,360 piki mis me hinnata oma tööd. 224 00:10:20,360 --> 00:10:23,170 Ulatus viitab sellele, mida määral oma koodi rakendab 225 00:10:23,170 --> 00:10:25,690 funktsioone vaja meie spetsifikatsioon. 226 00:10:25,690 --> 00:10:28,290 Teisisõnu, kui palju osaline komplekt sa hammustada. 227 00:10:28,290 --> 00:10:30,440 Kas sa tegid kolmandiku see, pool sellest, 100% ära. 228 00:10:30,440 --> 00:10:33,000 Isegi kui see ei ole õige, Kui palju te üritate? 229 00:10:33,000 --> 00:10:35,290 Nii et lööb tasemel vaeva ja kogus 230 00:10:35,290 --> 00:10:38,260 kuhu hammustasime Ülesanded probleeme. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- see, et Mil määral on oma kood 232 00:10:40,690 --> 00:10:43,150 kooskõlas meie kirjeldused ja vigadeta. 233 00:10:43,150 --> 00:10:44,770 Nii et see töötab korralikult? 234 00:10:44,770 --> 00:10:48,700 Kui me anname seda mõned sisend, kas see anna meile väljund, et me ootame? 235 00:10:48,700 --> 00:10:52,570 Design-- nüüd see on esimene eriti kvalitatiivsed, 236 00:10:52,570 --> 00:10:56,180 või need, mis nõuavad inimese hinnangul. 237 00:10:56,180 --> 00:10:59,690 Ja tõepoolest, see on põhjus, miks meil on töötajad nii palju õpetamise stipendiaatide ja muidugi 238 00:10:59,690 --> 00:11:00,350 assistendid. 239 00:11:00,350 --> 00:11:03,480 Mil määral on Teie kood kirjutatud hästi? 240 00:11:03,480 --> 00:11:05,810 >> Ja samas on see väga kvalitatiivne hindamine 241 00:11:05,810 --> 00:11:09,100 mis töötab koos teiega kahesuunaliselt nädalatel tulla. 242 00:11:09,100 --> 00:11:12,060 Nii et kui sa ei ainult numbriline hinded, vaid ka 243 00:11:12,060 --> 00:11:16,682 kirjutatud tulemusi või trükitud tagasiside või kirjalikku tagasisidet inglise sõnad. 244 00:11:16,682 --> 00:11:19,640 See, mida me kasutame, et juhtida teid suunas tegelikult kirjalikult paremini kood. 245 00:11:19,640 --> 00:11:23,320 Ja loeng ja lõik, püüame juhtida minemas-- nii tihti kui me saan-- 246 00:11:23,320 --> 00:11:26,420 teebki programmi mitte ainult õige ja funktsionaalselt hea, 247 00:11:26,420 --> 00:11:28,200 vaid ka hästi disainitud. 248 00:11:28,200 --> 00:11:31,850 Kõige tõhusam võiks olla, või isegi kõige ilus see olla võib. 249 00:11:31,850 --> 00:11:33,100 >> Mis viib meid stiilis. 250 00:11:33,100 --> 00:11:36,876 Style lõpuks on esteetiline kohtuotsus. 251 00:11:36,876 --> 00:11:38,750 Kas sa valida hea nimed oma muutujad? 252 00:11:38,750 --> 00:11:40,330 Oled sa liigestatud oma koodi õigesti? 253 00:11:40,330 --> 00:11:44,010 Kas see tundub hea, ja seetõttu see on lihtne teise inimese 254 00:11:44,010 --> 00:11:46,550 lugeda oma vastavate selle õigsust. 255 00:11:46,550 --> 00:11:50,300 >> Nüüd tavaliselt ühe õppekava, me koguda need asjad on viie punkti skaalal. 256 00:11:50,300 --> 00:11:53,640 Ja las ma haamer kodus punkt et kolm on tõesti hea. 257 00:11:53,640 --> 00:11:55,550 Väga kiiresti teha inimesed alustada teed aritmeetika. 258 00:11:55,550 --> 00:11:58,133 Kui nad kolm välja viie aasta õigsuse mõned pset 259 00:11:58,133 --> 00:12:02,040 ja nad arvavad, et kurat, mul läheb 60% mis on sisuliselt D või E. 260 00:12:02,040 --> 00:12:03,980 >> See pole nii, nagu me mõtle neid numbreid. 261 00:12:03,980 --> 00:12:06,880 Kolm on tõesti hea, ja see, mida me üldiselt oodata alguses 262 00:12:06,880 --> 00:12:09,820 mõiste on see, et kui te saate hunnik three's-- võibolla paar 263 00:12:09,820 --> 00:12:12,540 messide, paar fours-- või Paar kahed paar fours-- 264 00:12:12,540 --> 00:12:13,748 see on hea koht alustamiseks. 265 00:12:13,748 --> 00:12:16,320 Ja nii kaua, kui me näeme, ülespoole trajektoori aja jooksul, 266 00:12:16,320 --> 00:12:18,540 sa oled eriti hea koht. 267 00:12:18,540 --> 00:12:20,752 >> Valem, mida me kasutame kaal asjad on sisuliselt 268 00:12:20,752 --> 00:12:22,710 Selle kohta ainekava, mis tähendab lihtsalt, et me 269 00:12:22,710 --> 00:12:24,750 anda rohkem kaalu õigsuses. 270 00:12:24,750 --> 00:12:27,930 Sest see on väga sageli õigsust mis võtab kõige rohkem aega. 271 00:12:27,930 --> 00:12:28,760 Usu mind nüüd. 272 00:12:28,760 --> 00:12:31,190 Sa find-- vähemalt ühes pset-- et sa 273 00:12:31,190 --> 00:12:36,790 veedavad 90% oma ajast töötab 10% probleem. 274 00:12:36,790 --> 00:12:39,320 >> Ja kõik omamoodi töötab välja arvatud üks või kaks vigu, 275 00:12:39,320 --> 00:12:41,570 ja need on vead, mis hoiab sind kuni hilisõhtuni. 276 00:12:41,570 --> 00:12:43,380 Need on need, mis omamoodi põgeneda sind. 277 00:12:43,380 --> 00:12:45,560 Aga pärast magab see, või käivad tööaega 278 00:12:45,560 --> 00:12:48,844 või esitada küsimusi online, on kui saad, et 100% eesmärk, 279 00:12:48,844 --> 00:12:50,760 ja sellepärast me kaal õigsuse kõige rohkem. 280 00:12:50,760 --> 00:12:54,102 Disain veidi vähem, ja stiili veidi väiksem. 281 00:12:54,102 --> 00:12:56,060 Kuid pidage mind-- stiil on ehk kõige lihtsam 282 00:12:56,060 --> 00:12:58,890 Nende hammustada off ühe stiili juhend. 283 00:12:58,890 --> 00:13:01,580 >> Ja nüüd, raskemad tähele akadeemilise aususe. 284 00:13:01,580 --> 00:13:05,000 CS50 on kahetsusväärne vahet on suurim tootja Ad Board 285 00:13:05,000 --> 00:13:07,330 juhtudel peaaegu igal aastal läbi aegade. 286 00:13:07,330 --> 00:13:11,012 See ei ole, sest õpilased petta CS50 enam nii kui ükski teine ​​klass, 287 00:13:11,012 --> 00:13:13,720 vaid sellepärast, et oma olemuselt on töö, Asjaolu, et see elektrooniline, 288 00:13:13,720 --> 00:13:16,636 Asjaolu, et me vaatame seda, ja Tegelikult oleme infotehnoloogid, 289 00:13:16,636 --> 00:13:20,570 Ma võin öelda, et meil on kahjuks väga hea avastada see. 290 00:13:20,570 --> 00:13:22,710 >> Nii et mida see tähendab reaalselt? 291 00:13:22,710 --> 00:13:24,820 Seega, iga ainekava, Muidugi filosoofia 292 00:13:24,820 --> 00:13:28,090 tõesti Keeta olema mõistlik. 293 00:13:28,090 --> 00:13:31,684 On see piir teed ühe töö oma 294 00:13:31,684 --> 00:13:34,100 ja saada natuke mõistlikku abi oma sõbralt, 295 00:13:34,100 --> 00:13:38,020 ja lausa teed, et töö oma sõber või saates talle oma koodi 296 00:13:38,020 --> 00:13:41,080 nii et ta saab lihtsalt võtta või laenata see välja küll. 297 00:13:41,080 --> 00:13:43,580 Ja mis läbib liin et me tõmmatud klass. 298 00:13:43,580 --> 00:13:45,410 >> Vaata, õppekava lõppkokkuvõttes read 299 00:13:45,410 --> 00:13:48,209 et tõmbame nagu oleks mõistlik ja ebamõistlik käitumine, 300 00:13:48,209 --> 00:13:50,000 kuid see tõesti ei keeda alla sisuliselt 301 00:13:50,000 --> 00:13:53,980 oma tööd, kellel on vaja olla oma lõpuni. 302 00:13:53,980 --> 00:13:56,230 Nüüd, mis ütles, on heuristiline. 303 00:13:56,230 --> 00:13:58,980 Sest kui sa võiksid kujutan ametist tundi ja visuaalid 304 00:13:58,980 --> 00:14:01,060 ja videos me oleme näidatud seega kaugelt-- CS50 305 00:14:01,060 --> 00:14:04,530 on tõepoolest mõeldud koostööl ja kui ühistu ja sotsiaalse 306 00:14:04,530 --> 00:14:06,450 kui võimalik. 307 00:14:06,450 --> 00:14:08,570 Kuna koostöö, nagu see on range. 308 00:14:08,570 --> 00:14:11,314 >> Aga see ütles, heuristiline, nagu näete ainekava, 309 00:14:11,314 --> 00:14:12,980 on see, et kui sul on mingi probleem. 310 00:14:12,980 --> 00:14:16,470 Teil on viga teie koodi, mida ei saa lahendada, on mõistlik teile 311 00:14:16,470 --> 00:14:18,039 näidata oma koodi kellelegi teisele. 312 00:14:18,039 --> 00:14:21,080 Sõber isegi klassi sõbrale istub teile tööaega 313 00:14:21,080 --> 00:14:22,680 või personali liige. 314 00:14:22,680 --> 00:14:25,810 Aga nad ei pruugi oma koodi teile. 315 00:14:25,810 --> 00:14:27,710 >> Teisisõnu vastata oma question-- 316 00:14:27,710 --> 00:14:29,940 Vajan help-- ei oh, siin on minu kood. 317 00:14:29,940 --> 00:14:32,440 Heitke pilk see ja järeldada seda, mida soovite. 318 00:14:32,440 --> 00:14:34,580 Nüüd, muidugi, seal on selgesti mängu 319 00:14:34,580 --> 00:14:37,760 see süsteem, kus ma näitan sulle minu kood enne, kui küsimus. 320 00:14:37,760 --> 00:14:40,150 Sa näita mulle mu oma koodi enne, kui küsimus. 321 00:14:40,150 --> 00:14:45,870 Aga vaata ainekava uuesti peenemaid üksikasju, kui see liin on. 322 00:14:45,870 --> 00:14:50,606 >> Just nüüd maalida pilt ja jagada võimalikult läbipaistvalt 323 00:14:50,606 --> 00:14:53,480 kus me oleme viimastel aastatel see on arv, Ad Board juhtudel 324 00:14:53,480 --> 00:14:56,260 et CS50 on olnud üle Viimase seitsme aasta jooksul. 325 00:14:56,260 --> 00:14:58,717 14 juhul on see viimaste sügisel. 326 00:14:58,717 --> 00:15:01,300 Seoses üliõpilastele, see oli 20 mõned kummalised õpilased 327 00:15:01,300 --> 00:15:02,490 Möödunud sügisel. 328 00:15:02,490 --> 00:15:05,670 Seal oli tipp 33 üliõpilased mõned aastad tagasi. 329 00:15:05,670 --> 00:15:08,830 Paljud neist on kahjuks pole enam siin ülikoolilinnakus. 330 00:15:08,830 --> 00:15:13,100 >> Õpilased osalevad protsendina klass on ajalooliselt vahemikus 0% 331 00:15:13,100 --> 00:15:17,300 5,3%, mis on ainult öelda See on igal aastal suur väljakutse. 332 00:15:17,300 --> 00:15:20,390 Ja suunas, et lõpuks, mida me tahame teha, on edasi üks 333 00:15:20,390 --> 00:15:24,310 et me dd-- lihtsalt FYI-- võrrelda kell õiglus neile õpilastele, kes 334 00:15:24,310 --> 00:15:26,520 on järgmine rida vastavalt. 335 00:15:26,520 --> 00:15:29,620 Teeme võrrelda kõiki praegusi väidetele vastu kõik viimase missioone 336 00:15:29,620 --> 00:15:30,840 alates viimase mitu aastat. 337 00:15:30,840 --> 00:15:33,620 >> Me teame ka, kuidas Google ümber ja leida koodi hoidlates 338 00:15:33,620 --> 00:15:36,360 online, foorumeid online, töö sites online. 339 00:15:36,360 --> 00:15:41,580 Kui üliõpilane ei leia seda, mida suudame kindlasti leiavad, et nii palju kui me kahjuks teha. 340 00:15:41,580 --> 00:15:45,330 Niisiis, mida näete ainekava kuigi see on kahetsusväärne klausel. 341 00:15:45,330 --> 00:15:47,500 Ma küll hindame ja me kõik on 342 00:15:47,500 --> 00:15:50,870 töötajatele, kes on teinud muidugi nagu Selle või selle ühe ise ajas 343 00:15:50,870 --> 00:15:53,997 Kindlasti tead, mis tunne on, kui elu läheb nii, nagu siis, kui teil on 344 00:15:53,997 --> 00:15:56,080 mõned hilisõhtul deadline-- mitte ainult selles klassis, 345 00:15:56,080 --> 00:15:58,660 kuid järgmise-- kui oled ammendatud, stressis, 346 00:15:58,660 --> 00:16:00,659 on ääretult number muid asju teha. 347 00:16:00,659 --> 00:16:03,660 Sa teed mingil hetkel elu kindlasti halb, võibolla hilja 348 00:16:03,660 --> 00:16:04,620 öösel otsus. 349 00:16:04,620 --> 00:16:06,520 >> Nii et ühe õppekava, on see klausel, 350 00:16:06,520 --> 00:16:10,629 selline, et kui 72 tunni jooksul teha viletsat otsust, sa seda tunnistada 351 00:16:10,629 --> 00:16:12,670 ja jõuda mind ja üks kursus peadesse 352 00:16:12,670 --> 00:16:14,300 ja meil on vestlus. 353 00:16:14,300 --> 00:16:16,220 Me asjadega hakkama sisemiselt loodab 354 00:16:16,220 --> 00:16:18,770 see muutumas õpetamise hetk või elu õppetund, 355 00:16:18,770 --> 00:16:22,120 mitte midagi Eriti drastiline tagajärgi 356 00:16:22,120 --> 00:16:24,570 nagu võite näha nende graafikuid siin. 357 00:16:24,570 --> 00:16:26,540 >> Nii et see on väga raske tooni. 358 00:16:26,540 --> 00:16:29,960 Olgem pausi paar sekundit pinget maandada. 359 00:16:29,960 --> 00:16:34,442 >> [Muusika mängimine] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. Humala: Olgu, nii kuidas oli, et Segue? 362 00:17:20,250 --> 00:17:22,059 Tänase peateemasid. 363 00:17:22,059 --> 00:17:23,859 Esimene on abstraktsioon. 364 00:17:23,859 --> 00:17:26,900 Teine, mis saab olema esindatuse andmed, mis ausalt öeldes 365 00:17:26,900 --> 00:17:31,640 on tõesti kuiv viis öelda, kuidas me saame minna probleemide lahendamine ja mõtlemine 366 00:17:31,640 --> 00:17:33,250 umbes probleemide lahendamisel? 367 00:17:33,250 --> 00:17:37,285 Nii et olete näinud Scratch ja olete näha ehk juba pset1 koos C 368 00:17:37,285 --> 00:17:39,930 et sa mitte ainult ei kasuta funktsioone, nagu printf, 369 00:17:39,930 --> 00:17:42,770 et teised inimesed aastat varem kirjutasin teile. 370 00:17:42,770 --> 00:17:45,340 Võite kirjutada oma funktsioone. 371 00:17:45,340 --> 00:17:48,440 >> Ja kuigi sa ei pruugi olla seda teinud C, ja ausalt öeldes pset1 372 00:17:48,440 --> 00:17:51,866 sa tõesti ei pea kirjutama oma oma funktsiooni, sest probleemiga-- 373 00:17:51,866 --> 00:17:53,990 samas võib-olla heidutav Esimene glance-- näete 374 00:17:53,990 --> 00:17:57,910 lõplikult saab lahendada mitte kõik, et palju ridu koodi. 375 00:17:57,910 --> 00:18:01,140 Kuid seda öelnud, nii kirjalikult oma funktsiooni, 376 00:18:01,140 --> 00:18:03,570 aru, et C ei anna sa see võimalus. 377 00:18:03,570 --> 00:18:06,940 >> Ma lähen täna lähtekoodi mis on saadaval juba võrgus, 378 00:18:06,940 --> 00:18:10,900 ja ma lähen edasi minna ja avatud up programmi nimega funktsiooni 0.C, 379 00:18:10,900 --> 00:18:14,620 ja funktsiooni null me näeme mõned asjad. 380 00:18:14,620 --> 00:18:19,160 Aasta esimestel ridadel 18 kuni 23 on minu peamine ülesanne. 381 00:18:19,160 --> 00:18:22,414 Ja nüüd, kui me hakkame lugema kood, mis me ei kirjuta lennult, 382 00:18:22,414 --> 00:18:25,080 vaid olen kirjutanud varem või et teil on probleem määrata 383 00:18:25,080 --> 00:18:27,910 võib saada võttes on kirjutatud ette. 384 00:18:27,910 --> 00:18:30,040 Hea viis alustada lugedes kellegi kood 385 00:18:30,040 --> 00:18:31,400 on otsida põhiülesanne. 386 00:18:31,400 --> 00:18:34,420 Aru saada, kus see kanne Asi on selles, et töötab programm, 387 00:18:34,420 --> 00:18:36,580 ja järgige seda loogiliselt sealt. 388 00:18:36,580 --> 00:18:40,190 >> Nii et see programm ilmselt prints oma nimi, millele järgneb koolon. 389 00:18:40,190 --> 00:18:42,490 Me siis kasuta getString alates CS50 raamatukogu 390 00:18:42,490 --> 00:18:46,050 saada string või sõna või fraas kasutaja klaviatuuri. 391 00:18:46,050 --> 00:18:48,390 Ja siis on see asi siin-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Nüüd PrintName ei ole funktsioon, mis on kaasas C. 393 00:18:51,420 --> 00:18:52,970 See ei ole standard io.h. 394 00:18:52,970 --> 00:18:55,570 See ei ole CS50.h. 395 00:18:55,570 --> 00:18:57,880 See on pigem samasse faili. 396 00:18:57,880 --> 00:19:01,000 Pange tähele, kui ma keri bit-- read 25 kuni 27-- 397 00:19:01,000 --> 00:19:05,330 see on lihtsalt ilus viis kommenteeris oma koodi kasutades tähti ja kaldkriipsud. 398 00:19:05,330 --> 00:19:07,320 See on multi-line märkusi, ja see on lihtsalt 399 00:19:07,320 --> 00:19:10,570 Minu kirjeldus sinine Mida see funktsioon teeb. 400 00:19:10,570 --> 00:19:14,530 >> Sest read 28 kuni 31, Olen kirjutanud super lihtne funktsioon 401 00:19:14,530 --> 00:19:16,280 kelle nimi on PrintName. 402 00:19:16,280 --> 00:19:19,560 Kulub mitu argumente sa ütleksid? 403 00:19:19,560 --> 00:19:25,120 Nii et üks argument-- sest seal on üks argument loetletud sulgudesse. 404 00:19:25,120 --> 00:19:27,000 Liik, mis on stringid. 405 00:19:27,000 --> 00:19:30,240 Mis tähendab, PrintName on selline must kast 406 00:19:30,240 --> 00:19:32,910 või funktsioon, mis võtab kui sisend string. 407 00:19:32,910 --> 00:19:35,730 >> Ja selle inimese nimi String Asudes on nimi. 408 00:19:35,730 --> 00:19:37,840 Mitte S, mitte N, kuid nimi. 409 00:19:37,840 --> 00:19:41,090 Mis siis PrintName teha? 410 00:19:41,090 --> 00:19:42,210 See on tore, lihtne. 411 00:19:42,210 --> 00:19:45,390 Just nagu üks rida koodi jaoks printf, kuid ilmselt on see 412 00:19:45,390 --> 00:19:47,950 trükib "Tere," nii ja nii. 413 00:19:47,950 --> 00:19:50,070 Kui nii ja naa pärineb argument. 414 00:19:50,070 --> 00:19:52,300 >> Nüüd ei ole see suur innovatsioon siin. 415 00:19:52,300 --> 00:19:56,710 Tõesti, ma olen võtnud programmi, mis võiks on kirjutatud ühe rida koodi 416 00:19:56,710 --> 00:20:00,190 pannes selle siia üles, ja muuta see midagi, 417 00:20:00,190 --> 00:20:04,920 mis hõlmab umbes kuus või seitse või nii rida koodi kogu tee siia. 418 00:20:04,920 --> 00:20:08,190 >> Aga see on praktiseerimisele põhimõtet tuntakse võtmiseks. 419 00:20:08,190 --> 00:20:12,550 Objekti kapslimaterjali sees uus funktsioon, mis on nimi ja parem 420 00:20:12,550 --> 00:20:14,590 veel, et nimi sõna otseses mõttes ütleb, mida ta teeb. 421 00:20:14,590 --> 00:20:16,880 Ma mõtlen printf-- see pole eriti kirjeldav. 422 00:20:16,880 --> 00:20:18,932 Kui ma tahan luua puzzle tükk, või kui ma 423 00:20:18,932 --> 00:20:21,140 soovite luua funktsioon mis prindib kellegi nime, 424 00:20:21,140 --> 00:20:23,230 Ilu seda teed on see, et ma ei saa tegelikult 425 00:20:23,230 --> 00:20:27,170 anna selle funktsiooni nimi mis kirjeldab, mida ta teeb. 426 00:20:27,170 --> 00:20:29,844 >> Nüüd võtab sisendi Olen omavoliliselt nimetatakse nimi, 427 00:20:29,844 --> 00:20:32,760 kuid ka see on suurepäraselt kirjeldav selle asemel, et veidi rohkem 428 00:20:32,760 --> 00:20:36,140 geneeriliste nagu S. Ja tühine, nüüd, tähendab lihtsalt 429 00:20:36,140 --> 00:20:38,330 et see funktsioon ei anna mulle tagasi midagi. 430 00:20:38,330 --> 00:20:41,127 See ei ole nagu getString et sõna otseses mõttes käed mulle tagasi string 431 00:20:41,127 --> 00:20:43,960 nagu me tegime koos paberitükke koos oma klassikaaslastega eelmisel nädalal 432 00:20:43,960 --> 00:20:45,990 vaid see lihtsalt on kõrvaltoime. 433 00:20:45,990 --> 00:20:48,080 Ta prindib midagi ekraanil. 434 00:20:48,080 --> 00:20:53,880 >> Nii lõpus päeval, kui ma ei tee funktsioon-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 me näeme, et ta küsib mu nime. 436 00:20:55,450 --> 00:20:58,150 I tüüpi David, ja see liigid välja minu nime. 437 00:20:58,150 --> 00:21:01,080 Kui ma seda uuesti koos Rob, see saab öelda: "Tere, Rob." 438 00:21:01,080 --> 00:21:04,280 Nii lihtne idee, kuid võib-olla üldistusi selle vaimselt 439 00:21:04,280 --> 00:21:06,750 et kui teie programmid saavad veidi keerulisem, 440 00:21:06,750 --> 00:21:10,290 ja sa tahad kirjutada patakas kood ja kõne, et code-- invoke 441 00:21:10,290 --> 00:21:13,270 et code-- mõned kirjeldav nime nagu PrintName, 442 00:21:13,270 --> 00:21:15,600 C teeb endale meile see võimalus. 443 00:21:15,600 --> 00:21:17,660 >> Siin on veel üks lihtne näide. 444 00:21:17,660 --> 00:21:22,940 Näiteks, kui ma avada esitada alates tänasest nimetatakse return.c, 445 00:21:22,940 --> 00:21:24,270 teate, mida ma olen teinud siin. 446 00:21:24,270 --> 00:21:26,330 Enamik selle peamine funktsioon on printf. 447 00:21:26,330 --> 00:21:30,360 Ma esimest omavoliliselt initsialiseerida muutuja nimega x number 2. 448 00:21:30,360 --> 00:21:34,110 Ma siis välja printida "x on nüüd % I "läbimise väärtuse x. 449 00:21:34,110 --> 00:21:35,500 Nii et ma lihtsalt ütlen, mis see on. 450 00:21:35,500 --> 00:21:37,208 >> Nüüd ma olen lihtsalt julgelt väites koos printf. 451 00:21:37,208 --> 00:21:42,050 Olen cubing et väärtus x, ja ma olen Seejuures helistades funktsioon 452 00:21:42,050 --> 00:21:45,590 nimega kuup möödaminnes x kui argument, 453 00:21:45,590 --> 00:21:49,300 ja siis säästa väljund aastal muutuja ise, x. 454 00:21:49,300 --> 00:21:51,340 Nii et ma clobbering x väärtus. 455 00:21:51,340 --> 00:21:53,380 Ma ülekaalukate väärtuse x iganes 456 00:21:53,380 --> 00:21:56,510 tulemusena kutsudes Kuubiku funktsioon. 457 00:21:56,510 --> 00:21:59,530 Ja siis ma lihtsalt välja printida mõned kohev kraam siin öelda, mida ma tegin. 458 00:21:59,530 --> 00:22:01,600 >> Nii et mida siis on kuup? 459 00:22:01,600 --> 00:22:03,510 Pane tähele, mida on põhimõtteliselt erinevad siin. 460 00:22:03,510 --> 00:22:05,540 Olen antud ülesanne nimi nagu enne. 461 00:22:05,540 --> 00:22:08,270 Ma olen määratud nimi argument. 462 00:22:08,270 --> 00:22:11,650 Seekord seda nimetatakse n asemel nimi, aga ma kutsun seda, mida tahan. 463 00:22:11,650 --> 00:22:12,650 Aga see on erinev. 464 00:22:12,650 --> 00:22:14,080 See asi vasakul. 465 00:22:14,080 --> 00:22:16,290 Varem oli see, mida märksõna? 466 00:22:16,290 --> 00:22:16,870 Poisid. 467 00:22:16,870 --> 00:22:18,580 Nüüd on ilmselt int. 468 00:22:18,580 --> 00:22:20,630 >> Mis siis võib-olla ära võtta? 469 00:22:20,630 --> 00:22:24,090 Arvestades tühine tähistab omamoodi olematus, ja see oli nii. 470 00:22:24,090 --> 00:22:25,970 PrintName tagasi midagi. 471 00:22:25,970 --> 00:22:27,942 Ta tegi midagi, kuid see ei anna mulle tagasi 472 00:22:27,942 --> 00:22:30,650 midagi, mida ma võiksin panna vasakul pool võrdusmärki 473 00:22:30,650 --> 00:22:32,460 nagu ma olen teinud siin on line 22. 474 00:22:32,460 --> 00:22:36,780 >> Nii et kui ma ütlen meie real 30, mis see ilmselt tähendab, 475 00:22:36,780 --> 00:22:38,610 mida kuubik teeb mulle? 476 00:22:38,610 --> 00:22:41,110 Jah? 477 00:22:41,110 --> 00:22:42,310 Ta naaseb täisarv. 478 00:22:42,310 --> 00:22:44,590 Nii et ta jätab mind tagasi, Näiteks paberileht 479 00:22:44,590 --> 00:22:46,580 kohta, mida ta on kirjutanud vastuse. 480 00:22:46,580 --> 00:22:50,130 2 kuubis, või 3 kuubis, või 4 cubed-- iganes ma möödunud aastal, 481 00:22:50,130 --> 00:22:51,540 ja kuidas ma rakendada seda? 482 00:22:51,540 --> 00:22:54,810 Noh, lihtsalt n korda n korda n kuidas ma võiks kuup väärtus. 483 00:22:54,810 --> 00:22:57,110 Nii et taas, super lihtne idee, kuid demonstratiivne 484 00:22:57,110 --> 00:23:00,100 nüüd, kuidas me saame kirjutada funktsioone et tegelikult oli meil tagasi 485 00:23:00,100 --> 00:23:02,380 väärtused, mis võiks huvi pakkuda. 486 00:23:02,380 --> 00:23:05,740 >> Vaatame viimane näide siin nimetatakse funktsiooni ühes. 487 00:23:05,740 --> 00:23:08,530 Selles näites, hakkab saada selgem. 488 00:23:08,530 --> 00:23:12,400 Nii funktsiooni üks, see program-- teate lõpuks 489 00:23:12,400 --> 00:23:14,920 nõuab funktsiooni nimetatakse GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt ei ole funktsiooni CS50 raamatukogu 491 00:23:17,800 --> 00:23:20,400 aga me otsustasime me tahaks ta olemast. 492 00:23:20,400 --> 00:23:24,550 >> Nii et kui me keri hiljem fail teate, kuidas ma läksin umbes rakendamisel 493 00:23:24,550 --> 00:23:26,560 saada positiivse int, ja ma öelda, et see on rohkem kaalukaid 494 00:23:26,560 --> 00:23:28,992 sest see on korralik ridade arvu kood. 495 00:23:28,992 --> 00:23:30,700 See ei ole lihtsalt rumal väike mänguasi programm. 496 00:23:30,700 --> 00:23:33,870 See on tegelikult sain mõned vigade kontrolli ja midagi enam kasulik. 497 00:23:33,870 --> 00:23:38,470 >> Nii et kui sa pole näinud läbikäiguks videos, et oleme surutud pset1, 498 00:23:38,470 --> 00:23:42,350 tean, et see on tüüp loop C, sarnase sisuga 499 00:23:42,350 --> 00:23:44,270 et asju Scratch saab teha. 500 00:23:44,270 --> 00:23:46,320 Ja seda ütleb seda. 501 00:23:46,320 --> 00:23:47,500 Trüki välja. 502 00:23:47,500 --> 00:23:51,860 Siis minna ja saada n-- saada int ja hoidke seda n, 503 00:23:51,860 --> 00:23:55,760 ja hoida teeme seda ikka ja jälle ja jälle nii kaua kui n on väiksem kui üks. 504 00:23:55,760 --> 00:23:58,720 >> Nii n saab olema väiksem kui üks ainult siis, kui inimene ei ole koostööd. 505 00:23:58,720 --> 00:24:01,980 Kui ta kirjutab aastal 0 või -1 või -50, 506 00:24:01,980 --> 00:24:04,790 see ahel läheb, et hoida täidesaatva ja jälle. 507 00:24:04,790 --> 00:24:07,549 Ja lõpuks teate, ma lihtsalt tagasi raha. 508 00:24:07,549 --> 00:24:09,590 Nii et nüüd on meil funktsioon et oleks tore olnud, 509 00:24:09,590 --> 00:24:14,040 kui CS50 oleks rakendada CS50.h ja CS50.c teile, 510 00:24:14,040 --> 00:24:16,520 Siit aga nüüd rakendada seda ise. 511 00:24:16,520 --> 00:24:19,230 >> Aga kaks märkust mõned olulised detailid. 512 00:24:19,230 --> 00:24:24,390 Keegi-- miks ma kuulutada int n, kas sa arvad, on line 29 513 00:24:24,390 --> 00:24:27,139 asemel lihtsalt teeme seda siin, mis on 514 00:24:27,139 --> 00:24:28,930 rohkem kooskõlas mida me tegime eelmisel nädalal? 515 00:24:28,930 --> 00:24:29,430 Jah? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Hea mõte. 518 00:24:35,110 --> 00:24:37,080 Nii et kui me panna see siin, et see on nii, nagu me 519 00:24:37,080 --> 00:24:39,110 hoida kuulutatakse seda uuesti ja uuesti. 520 00:24:39,110 --> 00:24:42,000 See iseenesest on mitte problemaatiline, per se, 521 00:24:42,000 --> 00:24:43,940 sest meil on vaja ainult raha üks kord ja siis 522 00:24:43,940 --> 00:24:45,330 me ei kavatse osta uus niikuinii. 523 00:24:45,330 --> 00:24:45,940 Aga hea mõte. 524 00:24:45,940 --> 00:24:46,440 Jah? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Sule. 527 00:24:53,330 --> 00:24:59,030 Nii et kuna ma olen deklareerinud n kohta rida 29 väljaspool tsüklina 528 00:24:59,030 --> 00:25:01,390 see on kättesaadav kogu kogu see funktsioon. 529 00:25:01,390 --> 00:25:05,400 Ei muud funktsioonid, sest n on ikka sees need lokkis 530 00:25:05,400 --> 00:25:06,470 traksid siin. 531 00:25:06,470 --> 00:25:07,940 Nii-- kindel. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Täpselt. 534 00:25:12,940 --> 00:25:14,356 Nii et see on isegi rohkem punkti. 535 00:25:14,356 --> 00:25:18,600 Kui me selle asemel deklareeritud n siin real 32, 536 00:25:18,600 --> 00:25:22,340 see on problemaatiline, sest arvan, Kus mujal ma pean seda kasutada? 537 00:25:22,340 --> 00:25:25,620 On line 34 ja Lihtne rusikareegel on 538 00:25:25,620 --> 00:25:30,060 mis saab kasutada ainult muutuja sees uusimaid looksulg 539 00:25:30,060 --> 00:25:31,420 kus sa kuulutanud. 540 00:25:31,420 --> 00:25:35,230 >> Kahjuks, rida 34 on üks joon liiga hilja, 541 00:25:35,230 --> 00:25:38,560 sest ma olen juba suletud lokkis traksidega line 33 542 00:25:38,560 --> 00:25:41,220 mis vastab lokkis traksidega line 30. 543 00:25:41,220 --> 00:25:44,180 Ja nii see on viis öelda et see muutuja int on scoped, 544 00:25:44,180 --> 00:25:46,970 nii rääkida, vaid sees need looksulg. 545 00:25:46,970 --> 00:25:48,910 See lihtsalt ei eksisteeri väljaspool neid. 546 00:25:48,910 --> 00:25:51,580 >> Nii et tõesti, kui ma teen seda vale, lubage mul päästa kood 547 00:25:51,580 --> 00:25:53,530 kui see ongi valesti kirjutatud. 548 00:25:53,530 --> 00:25:57,990 Lubage mul minna ja ei tee funktsiooni-1 ja notice-- viga. 549 00:25:57,990 --> 00:26:03,502 Kasutada deklareerimata tunnus n real 35, mis on siinsamas. 550 00:26:03,502 --> 00:26:05,210 Ja kui me liikuge üles lisaks veel üks. 551 00:26:05,210 --> 00:26:08,750 Kasutada deklareerimata identifikaatorit n real 34. 552 00:26:08,750 --> 00:26:11,200 >> Nii kompilaator, rõkkama, on märganud, et see lihtsalt 553 00:26:11,200 --> 00:26:13,720 ei ole olemas isegi selgelt, et see on visuaalselt. 554 00:26:13,720 --> 00:26:16,090 Nii lihtne fix kuulutab ta seal. 555 00:26:16,090 --> 00:26:18,790 >> Nüüd lubage mul leidke top faili. 556 00:26:18,790 --> 00:26:21,080 Mis hüppab läbi teie kui on natuke erinev 557 00:26:21,080 --> 00:26:23,070 alates kraam me vaatasime eelmisel nädalal? 558 00:26:23,070 --> 00:26:26,990 Mitte ainult mul on nimi, mitte ainult ei Mul on mõned teravad sisaldab kuni top, 559 00:26:26,990 --> 00:26:29,340 Mul on midagi, mida ma olen kutsudes prototüüp. 560 00:26:29,340 --> 00:26:36,100 Nüüd, tundub kohutavalt sarnane sellega, mida me just nägin hetk tagasi on line 27. 561 00:26:36,100 --> 00:26:39,230 >> Nii et olgem järeldada eri veateate, miks ma olen seda teinud. 562 00:26:39,230 --> 00:26:42,050 Lubage mul minna ja kustutada need read seal. 563 00:26:42,050 --> 00:26:44,240 Ja nii me ei tea midagi prototüüp. 564 00:26:44,240 --> 00:26:45,430 Remake seda pilti. 565 00:26:45,430 --> 00:26:46,890 Tee funktsioon üks. 566 00:26:46,890 --> 00:26:48,090 Ja nüüd, kurat, neli viga. 567 00:26:48,090 --> 00:26:50,220 Olgem kerida kuni esimene. 568 00:26:50,220 --> 00:26:55,070 >> Kaudsed deklaratsiooni funktsioon saada positiivse int on kehtetu C99. 569 00:26:55,070 --> 00:26:57,780 C99 tähendab lihtsalt 1999 versioon keel 570 00:26:57,780 --> 00:26:59,710 C, mis on see, mida me tegelikult kasutab. 571 00:26:59,710 --> 00:27:01,050 Mida see tähendab? 572 00:27:01,050 --> 00:27:05,250 Noh C-- täpsemalt C compilers-- on päris loll programme. 573 00:27:05,250 --> 00:27:07,420 Nad ainult ei tea, mida te olete ütlesin neile, ja see on 574 00:27:07,420 --> 00:27:08,960 tegelikult temaatiliste eelmisel nädalal. 575 00:27:08,960 --> 00:27:12,910 >> Probleem on selles, et kui ma lähen umbes rakendamisel nimi siia üles, 576 00:27:12,910 --> 00:27:17,640 ja ma kutsun funktsiooni nimetatakse GetPositiveInt siin on line 20, 577 00:27:17,640 --> 00:27:22,520 et funktsioon tehniliselt ei eksisteerida kuni koostaja näeb line 27. 578 00:27:22,520 --> 00:27:25,450 Kahjuks koostaja on asju top, alla, vasakule, paremale, 579 00:27:25,450 --> 00:27:29,580 seda sellepärast, et ta ei ole näinud rakendamise GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 kuid see näeb sind üritab kasutada seda siia üles, 581 00:27:32,400 --> 00:27:35,810 see on lihtsalt läheb bail-- kisa Teile viga message-- ehk 582 00:27:35,810 --> 00:27:38,440 segasena, ja tegelikult ei koostada fail. 583 00:27:38,440 --> 00:27:41,940 >> Nii et nn prototüüp üles siin on küll üleliigne. 584 00:27:41,940 --> 00:27:47,870 Sõna otseses mõttes, ma käisin siin ja ma kopeeritud ja kleepida see, ja ma panen selle siia. 585 00:27:47,870 --> 00:27:51,020 Void oleks õige, nii me sõna otseses mõttes kopeeri ja kleebi see seekord. 586 00:27:51,020 --> 00:27:52,854 Ma sõna otseses mõttes kopeerida ja kleepida see. 587 00:27:52,854 --> 00:27:54,270 Tõesti lihtsalt nii nagu riivsaiaga. 588 00:27:54,270 --> 00:27:56,260 >> Vähe aimu tõlkija. 589 00:27:56,260 --> 00:27:58,860 Ma ei tea, mida see teeb veel, aga ma paljutõotav sa 590 00:27:58,860 --> 00:28:00,260 et see on olemas lõpuks. 591 00:28:00,260 --> 00:28:04,010 Ja sellepärast see LINE sisse line 16-- lõpeb semikooloniga. 592 00:28:04,010 --> 00:28:05,486 See on koondatud disain. 593 00:28:05,486 --> 00:28:05,986 Jah? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Kui te ei ühendada oma raamatukogu et see-- oh, hea küsimus. 596 00:28:14,360 --> 00:28:17,350 Sharp on päisefailist kandmisel. 597 00:28:17,350 --> 00:28:20,040 Vajad olema-- peaks peaaegu alati tipus 598 00:28:20,040 --> 00:28:23,270 faili jaoks sarnased-- eest täpselt samal põhjusel, jah. 599 00:28:23,270 --> 00:28:26,430 Sest standard io.h on sõna otseses mõttes joon 600 00:28:26,430 --> 00:28:30,560 meeldib see, kuid sõna printf ja tema argumendid ja tema tagasisaatmist tüüp. 601 00:28:30,560 --> 00:28:33,310 Ja nii tehes teravaid sisaldada kuni siin, mida sa oled sõna otseses mõttes teed 602 00:28:33,310 --> 00:28:36,380 on kopeerige sisu keegi teine ​​kirjutas üleval. 603 00:28:36,380 --> 00:28:39,660 Seejuures cluing oma koodi sisse Asjaolu, et need funktsioonid on olemas. 604 00:28:39,660 --> 00:28:40,160 Jah? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Absoluutselt. 607 00:28:48,260 --> 00:28:51,690 Nii et väga tark ja õige lahendus oleks, tead mida? 608 00:28:51,690 --> 00:28:53,760 Ma ei tea, mida Prototüüp on, aga ma tean, 609 00:28:53,760 --> 00:28:56,390 kui ma aru saan, et C on lihtsalt loll ja rethinks ülevalt alla. 610 00:28:56,390 --> 00:28:57,820 Noh olgem annavad seda, mida ta tahab. 611 00:28:57,820 --> 00:29:01,650 Lõikame selle koodi, kleepige see üles top, ja nüüd suruda peamised allapoole. 612 00:29:01,650 --> 00:29:03,470 Ka see lahendaks probleemi. 613 00:29:03,470 --> 00:29:07,409 >> Aga sa võiksid väga kergesti tulla stsenaarium, kus on vaja helistada B, 614 00:29:07,409 --> 00:29:10,075 ja võibolla B kutsub tagasi A. See on midagi, mida nimetatakse rekursiooni, 615 00:29:10,075 --> 00:29:11,370 ja me tuleme tagasi selle. 616 00:29:11,370 --> 00:29:13,911 Ja see võib olla või mitte olla hea asi, kuid saate kindlasti 617 00:29:13,911 --> 00:29:15,110 murda lahendus. 618 00:29:15,110 --> 00:29:17,690 >> Ja pealegi, ma oleks väidavad stiililiselt, 619 00:29:17,690 --> 00:29:20,760 eriti kui teie programmid saada see kaua ja nii kaua, 620 00:29:20,760 --> 00:29:23,064 see on lihtsalt super mugav panna peamised tipus 621 00:29:23,064 --> 00:29:25,730 sest see on asi, mida kõige programmeerijad hakkavad hooli. 622 00:29:25,730 --> 00:29:28,150 Ja nii see on veidi puhtamaks, väidetavalt seda teha nii, 623 00:29:28,150 --> 00:29:30,380 Ma algselt tegin seda prototüübi isegi 624 00:29:30,380 --> 00:29:33,396 kuigi see tundub veidi koondatud esmapilgul. 625 00:29:33,396 --> 00:29:33,895 Jah? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Sorry, ei sa öelda, et see valjem? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Kui lähete asukohad rakendamise ja prototüüp? 630 00:29:49,580 --> 00:29:51,270 Nii et see on hea küsimus. 631 00:29:51,270 --> 00:29:53,780 Kui sa uuesti deklareerima alla siin, vaatame, mis juhtub. 632 00:29:53,780 --> 00:29:55,530 Nii et kui ma panen selle üles siin sa räägid. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Oh, vabandust. 635 00:29:58,360 --> 00:29:58,859 Louder? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Isegi valjemini. 638 00:30:04,011 --> 00:30:04,760 Oh, hea küsimus. 639 00:30:04,760 --> 00:30:05,860 Kas see kehtetuks funktsioon? 640 00:30:05,860 --> 00:30:08,901 Sa tead, et pärast kõiki neid aastaid, ma on kunagi prototüüp hiljem. 641 00:30:08,901 --> 00:30:13,810 Teeme teha funktsioon-1 Pärast seda tehes. 642 00:30:13,810 --> 00:30:15,279 >> [Pomisedes] 643 00:30:15,279 --> 00:30:16,320 DAVID J. Humala: Oh, oota. 644 00:30:16,320 --> 00:30:17,944 Meil on veel panna kõik üleval. 645 00:30:17,944 --> 00:30:21,400 Nii et teeme seda siin, kui ma mõista oma küsimusele õigesti. 646 00:30:21,400 --> 00:30:24,700 Panen kõik, kaasa arvatud Prototüübi eespool peamine, 647 00:30:24,700 --> 00:30:28,180 aga ma panen prototüüp Allpool rakendamist. 648 00:30:28,180 --> 00:30:33,190 >> Nii et kui ma saaks, siis ma saan tagasi error-- kasutamata muutuja n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Oh, seal. 651 00:30:37,860 --> 00:30:38,360 Aitäh. 652 00:30:38,360 --> 00:30:39,430 Vaatame, me vabaneda sellest. 653 00:30:39,430 --> 00:30:41,304 See on erinev viga, niiet seda ignoreerida. 654 00:30:41,304 --> 00:30:43,910 Lähme tõesti kiiresti uusversioon see. 655 00:30:43,910 --> 00:30:48,100 >> OK, nii et andmed argument ei kasutada stringi 656 00:30:48,100 --> 00:30:52,310 n-- oh, see on sellepärast, Muutsin neid siin. 657 00:30:52,310 --> 00:30:55,885 Hea küll, me teame, mis vastus läheb to-- Olgu, siin me läheme. 658 00:30:55,885 --> 00:31:00,560 Ah, aitäh positiivne. 659 00:31:00,560 --> 00:31:03,430 Olgu, ma määrata see kood kui-- ignoreeri seda eriti viga 660 00:31:03,430 --> 00:31:08,300 kuna see oli-- see töötab, on vastus. 661 00:31:08,300 --> 00:31:11,560 >> Nii et see ei ole kirjutada mida sa oled teinud. 662 00:31:11,560 --> 00:31:14,800 Ma kahtlustan, koostaja kirjutatakse nii 663 00:31:14,800 --> 00:31:18,420 et ta eirab oma prototüüp sest keha nii rääkida, 664 00:31:18,420 --> 00:31:20,922 funktsioon on juba ellu viidud kõrgemale. 665 00:31:20,922 --> 00:31:23,380 Oleksin tegelikult konsulteerida käsiraamatu koostaja 666 00:31:23,380 --> 00:31:26,171 aru, kas seal on mõni muu kaudselt, kuid esmapilgul 667 00:31:26,171 --> 00:31:29,290 lihtsalt üritan ja katsetavad, tundub, et ei mõju. 668 00:31:29,290 --> 00:31:30,730 Hea küsimus. 669 00:31:30,730 --> 00:31:33,660 >> Nii et olgem liikuda edasi nüüd, liikudes eemal kõrvaltoimed, mis 670 00:31:33,660 --> 00:31:36,660 on funktsioone, mis midagi sellist visuaalselt ekraanil koos printf, 671 00:31:36,660 --> 00:31:38,090 kuid ei tule raha. 672 00:31:38,090 --> 00:31:41,550 Ja funktsioone, mis on tulu väärtusi, nagu me nägime mõned. 673 00:31:41,550 --> 00:31:45,350 Me juba nägime seda mõistet ulatus, ja me näeme seda ikka ja jälle. 674 00:31:45,350 --> 00:31:47,210 Aga nüüd jälle kasutada rusikareegel 675 00:31:47,210 --> 00:31:51,410 et muutuja võib kasutada ainult sees kõige hiljuti avatud 676 00:31:51,410 --> 00:31:54,350 ja suletud looksulg nagu me nägin, et konkreetne näide. 677 00:31:54,350 --> 00:31:56,910 >> Ja kui meenutada, on ability-- 678 00:31:56,910 --> 00:32:00,040 sa võiks lahendada mõned neist probleemidest pannes muutuja maailmas 679 00:32:00,040 --> 00:32:01,290 tipus faili. 680 00:32:01,290 --> 00:32:03,630 Kuid peaaegu kõikidel juhtudel me pahaks panema, et 681 00:32:03,630 --> 00:32:06,170 ja tõesti ei ole isegi minna arvesse, et lahendus nüüd. 682 00:32:06,170 --> 00:32:09,890 Nii et nüüd, Buffee, et muutujad on selle mõiste ulatust. 683 00:32:09,890 --> 00:32:13,430 >> Aga nüüd vaatame veel kuiv viis tegelikult otsin 684 00:32:13,430 --> 00:32:15,810 mõned päris huvitav rakendamise üksikasju. 685 00:32:15,810 --> 00:32:17,810 Kuidas me võiksime informatsiooniks. 686 00:32:17,810 --> 00:32:20,370 Ja me juba vaatasime seda aastal esimesel nädalal tasemega. 687 00:32:20,370 --> 00:32:23,320 Vaadates binaarpaketist ja meenutamist koma. 688 00:32:23,320 --> 00:32:28,310 >> Aga mäletate eelmisel nädalal, et C on Eri andmetüüpide ja kobarad rohkem, 689 00:32:28,310 --> 00:32:30,600 kuid kõige kasulikum ones nüüd võib neid. 690 00:32:30,600 --> 00:32:36,030 Char või märk, mis juhtub üks bait, või kaheksa biti kokku. 691 00:32:36,030 --> 00:32:40,060 Ja see tähendab, et suurus of char on vaid üks bait. 692 00:32:40,060 --> 00:32:45,370 Bait on kaheksa bitti, nii et see tähendab, et saame esindada, kui palju märke. 693 00:32:45,370 --> 00:32:47,320 Mitu tähte või klaviatuuril 694 00:32:47,320 --> 00:32:49,210 kui meil on üks bait või kaheksa bitti. 695 00:32:49,210 --> 00:32:51,546 Mõtle tagasi nädalal null. 696 00:32:51,546 --> 00:32:53,420 Kui teil on kaheksa bitti, kui palju kogu väärtused 697 00:32:53,420 --> 00:32:55,503 saab esindada koos mustrid nulle ja milliseid? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 Keegi-- rohkem. 700 00:33:00,260 --> 00:33:03,490 Nii et 256 kokku, kui sa hakka lugema nullist. 701 00:33:03,490 --> 00:33:07,120 Nii et kui teil on kaheksa bits-- nii et kui me oli meie binaarne sibulad siin jälle 702 00:33:07,120 --> 00:33:12,180 me võiks omakorda nende lampide kohta ja välja ükskõik 256 unikaalse mustrid. 703 00:33:12,180 --> 00:33:13,640 >> Nüüd on see natuke problemaatiline. 704 00:33:13,640 --> 00:33:16,857 Mitte nii palju inglise ja romaani keeled, kuid kindlasti 705 00:33:16,857 --> 00:33:19,190 kui kasutusele võtta Näiteks Aasia keeled, mis 706 00:33:19,190 --> 00:33:22,580 on palju sümboleid kui nagu 26 tähestiku tähti. 707 00:33:22,580 --> 00:33:24,390 Me tegelikult vaja läheb rohkem kui ühe baidi. 708 00:33:24,390 --> 00:33:28,240 Ja õnneks sisse Viimastel aastatel on ühiskonna 709 00:33:28,240 --> 00:33:31,040 vastu muid standardeid, mis kasutavad rohkem kui üks bait ühe laadimisega. 710 00:33:31,040 --> 00:33:34,210 >> Aga nüüd on C, vaikimisi on vaid üks bait või kaheksa bitti. 711 00:33:34,210 --> 00:33:38,195 Täisarv, vahepeal on neli baiti, teisiti tuntud kui 32 bitti. 712 00:33:38,195 --> 00:33:41,320 Mis tähendab, mis on suurim võimalik number saame esindada koos int 713 00:33:41,320 --> 00:33:41,820 ilmselt? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Mis miljardit. 716 00:33:45,050 --> 00:33:46,760 Nii et see on 4000000000 anda või võtta. 717 00:33:46,760 --> 00:33:49,840 2 32th võimu, kui me ei võta negatiivsed arvud 718 00:33:49,840 --> 00:33:52,530 ja lihtsalt kasutada kõik positiivne numbrid, see on 4000000000 719 00:33:52,530 --> 00:33:53,730 anda või võtta võimalused. 720 00:33:53,730 --> 00:33:57,890 Float, vahepeal on teist tüüpi andmete tüübi C. See on ikka number, 721 00:33:57,890 --> 00:33:58,990 aga see on reaalne number. 722 00:33:58,990 --> 00:34:00,660 Midagi koma. 723 00:34:00,660 --> 00:34:03,000 Ja selgub, et C ka kasutab nelja baiti 724 00:34:03,000 --> 00:34:05,340 esindama murdarve. 725 00:34:05,340 --> 00:34:09,420 >> Kahjuks, kui palju ujuva punkt väärtused on seal maailmas? 726 00:34:09,420 --> 00:34:11,582 Mitu tegelik arv on olemas? 727 00:34:11,582 --> 00:34:13,540 Seal on lõputu number, ja et asi 728 00:34:13,540 --> 00:34:15,164 seal on lõpmata palju täisarvud. 729 00:34:15,164 --> 00:34:18,070 Nii et me oleme juba omamoodi kaevamine end auk siin. 730 00:34:18,070 --> 00:34:21,780 Kusjuures ilmselt arvuteid-- juures vähemalt programme kirjutatud C on neid-- 731 00:34:21,780 --> 00:34:24,110 saab loendada 4000000000 anda või võtta, 732 00:34:24,110 --> 00:34:26,260 ujukoma väärtused võib ainult näiliselt 733 00:34:26,260 --> 00:34:28,330 on mõned piiratud kogus täpsusega. 734 00:34:28,330 --> 00:34:30,810 Ainult nii palju numbreid pärast nende koma. 735 00:34:30,810 --> 00:34:32,822 >> Sest, muidugi, kui sul on ainult 32 bitti, 736 00:34:32,822 --> 00:34:36,030 Ma ei tea, kuidas me läheme edasi minna esindavad tõeline numbers-- ilmselt 737 00:34:36,030 --> 00:34:37,409 koos erinevaid mustreid. 738 00:34:37,409 --> 00:34:40,030 Aga seal on kindlasti piiratud Mitmed sellised mustrid, 739 00:34:40,030 --> 00:34:41,830 nii ka siin, see on problemaatiline. 740 00:34:41,830 --> 00:34:43,710 >> Nüüd saame vältida probleemi veidi. 741 00:34:43,710 --> 00:34:45,710 Kui te ei kasuta float, võid kasutada topelt 742 00:34:45,710 --> 00:34:50,230 C, mis annab sulle kaheksa baiti, mis on palju rohkem võimalik mustrid nulle 743 00:34:50,230 --> 00:34:50,730 ja ones. 744 00:34:50,730 --> 00:34:55,199 Aga see on veel piiratud, mis läheb olla problemaatiline, kui sa kirjutad tarkvara 745 00:34:55,199 --> 00:34:57,670 graafika või väljamõeldud matemaatilisi valemeid. 746 00:34:57,670 --> 00:35:00,410 Nii et te võiks tegelikult tahavad loendab suurem kui see. 747 00:35:00,410 --> 00:35:05,640 Pikk long-- rumalalt named-- Samuti on kaheksa baiti või 64 bitti, 748 00:35:05,640 --> 00:35:10,260 ja see on kaks korda pikem kui int, ja see on juba pikka täisarvuni. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- kui int on neli baiti, kui pikk on pikk C tavaliselt? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Ka neli baiti, kuid pikk pikk on kaheksa baiti, 752 00:35:21,560 --> 00:35:23,050 ja see on ajaloolistel põhjustel. 753 00:35:23,050 --> 00:35:26,450 >> Aga Buffee nüüd on lihtsalt selles, et andmed on 754 00:35:26,450 --> 00:35:29,625 olla esindatud computer-- see füüsilise seadmega elektri, 755 00:35:29,625 --> 00:35:32,190 see on üldiselt sõidu need nullid ja ones-- 756 00:35:32,190 --> 00:35:34,320 Piiratud koguses täpsusega. 757 00:35:34,320 --> 00:35:35,620 Nii et milles probleem siis? 758 00:35:35,620 --> 00:35:37,480 >> Noh seal on probleem täisarv ülevool. 759 00:35:37,480 --> 00:35:39,780 Mitte ainult C, kuid arvutid üldiselt. 760 00:35:39,780 --> 00:35:42,590 Näiteks, kui see on bait väärt bit-- 761 00:35:42,590 --> 00:35:45,120 nii et kui see on kaheksa bit-- kõik mis on number üks. 762 00:35:45,120 --> 00:35:47,300 Mis number see on esindavad, kui me eeldame, 763 00:35:47,300 --> 00:35:50,730 see on kõik positiivsed väärtused kahendsüsteemis? 764 00:35:50,730 --> 00:35:54,410 >> 255, ja see ei ole 256, kuna null on väikseim number. 765 00:35:54,410 --> 00:35:56,760 Nii et 255 on kõige suurem üks, kuid probleem 766 00:35:56,760 --> 00:36:00,330 oletame, et ma tahtsin juurdekasvu see muutuja, mis 767 00:36:00,330 --> 00:36:04,030 kasutab kokku kaheksa bitti kui ma tahan juurdekasvu ta. 768 00:36:04,030 --> 00:36:07,160 >> Noh, niipea kui ma lisan üks kuni kõik need ones, 769 00:36:07,160 --> 00:36:10,500 saab ehk kujutada visually-- lihtsalt nagu bilansiline üks kasutades decimals-- 770 00:36:10,500 --> 00:36:12,300 midagi läheb voolama vasakule. 771 00:36:12,300 --> 00:36:15,590 Ja tõepoolest, kui ma lisan number üks sellele, mis juhtub binaarne 772 00:36:15,590 --> 00:36:17,670 on, et see voolaks tagasi nulli. 773 00:36:17,670 --> 00:36:21,730 >> Nii et kui te ainult use-- mitte int, vaid ühe baidi loota täisarvud 774 00:36:21,730 --> 00:36:27,170 aastal programmi poolt vaikimisi kujundust niipea saad 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 eelnesid 255, mis ei ole ilmselt, mida 776 00:36:32,710 --> 00:36:34,790 kasutaja saab oodata. 777 00:36:34,790 --> 00:36:39,620 >> Nüüd vahepeal ujukoma maailma teil ka sarnane probleem. 778 00:36:39,620 --> 00:36:42,670 Mitte niivõrd suurima number-- kuigi see on veel küsimus. 779 00:36:42,670 --> 00:36:45,360 Aga summa täpsus et te ei esinda. 780 00:36:45,360 --> 00:36:49,490 Võtame pilk see näiteks siin ka tänapäeva allikas code-- 781 00:36:49,490 --> 00:36:52,070 float-0.c. 782 00:36:52,070 --> 00:36:54,280 >> Ja teate, et see on super lihtne programm, mis 783 00:36:54,280 --> 00:36:56,580 peaks ilmselt välja trükkida, millist väärtust? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Mida sa kihla, et see saab printida kuigi seal on natuke uus süntaks 786 00:37:04,110 --> 00:37:05,540 siin? 787 00:37:05,540 --> 00:37:06,700 Loodetavasti 0.1. 788 00:37:06,700 --> 00:37:10,000 Niisiis võrdub ühe kümnendiku sest ma teen 1 jagatud 10. 789 00:37:10,000 --> 00:37:12,430 Ma ladustamiseks vastus aastal muutuva nimetatakse f. 790 00:37:12,430 --> 00:37:15,850 See muutuja on tüüpi float, mis on märksõna Ma lihtsalt ettepaneku olemas. 791 00:37:15,850 --> 00:37:18,910 >> Me ei näinud seda enne, kuid see on selline kena viis printf 792 00:37:18,910 --> 00:37:22,110 täpsustada, mitu numbrit sa tahan näha pärast koma. 793 00:37:22,110 --> 00:37:25,020 Nii et see märkus tähendab lihtsalt et siin on kohatäide. 794 00:37:25,020 --> 00:37:27,900 See on ujukoma väärtus, ja oh, muide, 795 00:37:27,900 --> 00:37:31,389 näitab see koma koos üks number pärast koma. 796 00:37:31,389 --> 00:37:33,180 Nii et see number komakohtadest, 797 00:37:33,180 --> 00:37:34,650 nii rääkida, et te võiksite. 798 00:37:34,650 --> 00:37:40,450 >> Nii et lubage mul minna ja teha teha float-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 ja ilmselt 1 jagatud 10 on 0,0. 800 00:37:46,660 --> 00:37:47,760 Nüüd, miks see on? 801 00:37:47,760 --> 00:37:51,380 >> Noh jälle arvuti võtab mulle sõna-sõnalt, ja ma olen kirjutanud 1 802 00:37:51,380 --> 00:37:56,680 ja ma kirjutanud 10 ning võtab ära arvata, mida on eeldatud andmetüüp nende kahe 803 00:37:56,680 --> 00:37:58,440 väärtused? 804 00:37:58,440 --> 00:38:00,970 Int, see on tehniliselt midagi veidi erinev. 805 00:38:00,970 --> 00:38:04,150 See on tavaliselt pikk, kuid see on lõppkokkuvõttes lahutamatu väärtust. 806 00:38:04,150 --> 00:38:06,030 Ei Murdarv. 807 00:38:06,030 --> 00:38:09,456 >> Mis tähendab, et kui see on int ja see on int, 808 00:38:09,456 --> 00:38:11,830 Probleem on selles, et arvuti ei ole võimet 809 00:38:11,830 --> 00:38:13,680 isegi salvestada et koma. 810 00:38:13,680 --> 00:38:16,430 Nii et kui sa seda teed 1 jagatud 10 lehe täisarvud 811 00:38:16,430 --> 00:38:20,950 nii lugeja ja nimetaja, vastus peaks olema 0,1. 812 00:38:20,950 --> 00:38:24,930 Aga computer-- sest need on integers-- 813 00:38:24,930 --> 00:38:27,430 ei tea, mida teha 0.1. 814 00:38:27,430 --> 00:38:30,010 >> Mis siis on see selgelt teed? 815 00:38:30,010 --> 00:38:33,120 See on lihtsalt viskamine selle ära, ja mida ma näen lõpuks 816 00:38:33,120 --> 00:38:38,830 on 0,0 ainult, sest ma rõhutanud, et printf näita mulle üks koma. 817 00:38:38,830 --> 00:38:41,740 Probleem on aga selles, et kui sa jagada täisarv poolt täisarv 818 00:38:41,740 --> 00:38:44,347 siis saame-- definitsiooni kohta C-- täisarv. 819 00:38:44,347 --> 00:38:46,680 Ja ta ei kavatse teha midagi ilusat ja mugavalt 820 00:38:46,680 --> 00:38:49,040 nagu selle ümber kuni lähima üles või alla. 821 00:38:49,040 --> 00:38:51,860 See saab kärpida kõik pärast koma. 822 00:38:51,860 --> 00:38:54,030 >> Nii lihtsalt intuitiivselt, mis on ilmselt fix? 823 00:38:54,030 --> 00:38:55,351 Mis on kõige lihtsam fix siin? 824 00:38:55,351 --> 00:38:55,850 Jah? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Täpselt. 827 00:39:01,100 --> 00:39:04,200 Miks me ei võiks käsitleda neid kui murdarve tõhusalt 828 00:39:04,200 --> 00:39:05,860 muutes need ujukite või kahekordistub. 829 00:39:05,860 --> 00:39:10,500 Ja nüüd, kui ma ei tee ujukid-0, või kui ma kompileerida ujukite-1, 830 00:39:10,500 --> 00:39:12,570 mis on identne mis oli lihtsalt ettepanek. 831 00:39:12,570 --> 00:39:16,400 Ja nüüd ma ujukite-0, nüüd ma saan oma 0,1. 832 00:39:16,400 --> 00:39:17,234 >> Nüüd see on hämmastav. 833 00:39:17,234 --> 00:39:19,441 Aga nüüd ma lähen tegema midagi veidi erinev. 834 00:39:19,441 --> 00:39:22,280 Ma olen uudishimulik näha, mida on tõesti toimub all kapuuts, 835 00:39:22,280 --> 00:39:26,050 ja ma lähen välja trükkida välja 28 kohta pärast koma. 836 00:39:26,050 --> 00:39:29,730 Ma tahan tõesti näha 0.1000-- infinite-- 837 00:39:29,730 --> 00:39:32,710 [Kuuldamatu] 27 nulle pärast, et 0.1. 838 00:39:32,710 --> 00:39:34,740 >> Noh vaatame, kas see on mida ma tõesti saada. 839 00:39:34,740 --> 00:39:39,430 Tee ujukite-0 sama faili. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Olgem suumida dramaatiline vastus. 842 00:39:44,380 --> 00:39:49,980 Kogu selle aja, oled olnud mõtlesin 1 jagatud 10 on 10% või 0,1. 843 00:39:49,980 --> 00:39:50,810 See ei ole. 844 00:39:50,810 --> 00:39:53,210 Vähemalt nii palju kui arvuti puhul. 845 00:39:53,210 --> 00:39:57,060 >> Nüüd miks-- OK, see on täielik vale 1 jagatud 10 on 0.1. 846 00:39:57,060 --> 00:39:59,710 Aga miks--, mis ei ole Buffee täna. 847 00:39:59,710 --> 00:40:04,010 Miks siis arvuti arvan, Erinevalt meie kõigi ruumis, 848 00:40:04,010 --> 00:40:06,870 et 1 jagatud 10 on tegelikult see hull raha? 849 00:40:06,870 --> 00:40:10,620 Mis on arvuti teeb ilmselt? 850 00:40:10,620 --> 00:40:12,490 Mis see on? 851 00:40:12,490 --> 00:40:13,785 >> See ei uputa, per se. 852 00:40:13,785 --> 00:40:15,910 Ülevoolu on tavaliselt siis, kui sa ümbritsev väärtus. 853 00:40:15,910 --> 00:40:18,970 See on see küsimus ebatäpsust aastal Murdarv 854 00:40:18,970 --> 00:40:22,220 kui sul on ainult 32 või isegi 64 bit. 855 00:40:22,220 --> 00:40:25,230 Aga kui seal on lõpmatu arvu tegelike numbers-- 856 00:40:25,230 --> 00:40:27,940 numbreid peale koma ja numbrid thereafter-- kindlasti 857 00:40:27,940 --> 00:40:29,380 sa ei saa endast kõik. 858 00:40:29,380 --> 00:40:32,870 Nii et arvuti on andnud meile lähim vaste 859 00:40:32,870 --> 00:40:37,090 et ta võib esindada abil, et paljud bitti väärtusega ma tegelikult tahan, 860 00:40:37,090 --> 00:40:38,690 mis on 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Kahjuks, kui te hakkan matemaatikat või te 862 00:40:40,685 --> 00:40:44,360 alustada hõlmavad selliseid ujuv punkt väärtuste oluline programs-- 863 00:40:44,360 --> 00:40:46,770 raamatupidamistarkvara, sõjaline software-- midagi 864 00:40:46,770 --> 00:40:49,090 kus taju ilmselt päris oluline. 865 00:40:49,090 --> 00:40:51,520 Ja kui hakkate lisades numbrid niimoodi, ja algus 866 00:40:51,520 --> 00:40:54,050 töötab, et tarkvara koos tõesti suur sisendite 867 00:40:54,050 --> 00:40:56,890 või palju tundi või palju päevade või palju aastaid, 868 00:40:56,890 --> 00:41:01,060 need pisikesed vead kindlasti saab lisada aja jooksul. 869 00:41:01,060 --> 00:41:04,252 >> Nüüd nagu kõrvale, kui sa oled kunagi näinud Superman 3 või Office Space 870 00:41:04,252 --> 00:41:05,960 ja te võiks meenutada, kuidas need mehed varastasid 871 00:41:05,960 --> 00:41:08,668 palju raha oma arvuti abil murdarve 872 00:41:08,668 --> 00:41:11,290 ning avada vähe jäägid, loodetavasti seda filmi 873 00:41:11,290 --> 00:41:12,390 nüüd mõttekam. 874 00:41:12,390 --> 00:41:14,930 See on see, mida nad olid vihjates selles filmis. 875 00:41:14,930 --> 00:41:16,710 Asjaolu, et enamik ettevõtted ei vaata 876 00:41:16,710 --> 00:41:18,600 pärast teatud arvu kohta pärast koma, 877 00:41:18,600 --> 00:41:20,009 kuid need on fraktsioonid senti. 878 00:41:20,009 --> 00:41:22,550 Nii et kui hakkate lisades need üles, hakkate tegema palju raha 879 00:41:22,550 --> 00:41:23,424 Teie pangakontole. 880 00:41:23,424 --> 00:41:25,160 Nii et see Office Space selgitatud. 881 00:41:25,160 --> 00:41:28,220 >> Nüüd kahjuks kaugemale Bürooruumid, seal 882 00:41:28,220 --> 00:41:31,794 on mõned õiguspäraselt murettekitav ja olulist mõju 883 00:41:31,794 --> 00:41:33,710 taoliste aluseks disaini otsuseid, 884 00:41:33,710 --> 00:41:35,990 ja tõesti üks põhjustest me kasutame C loomulikult 885 00:41:35,990 --> 00:41:39,640 on nii, et teil on tõesti see maa üles mõista, kuidas arvutid töötavad, 886 00:41:39,640 --> 00:41:42,440 kuidas tarkvara töötab ja ei võta midagi iseenesestmõistetavana. 887 00:41:42,440 --> 00:41:45,820 >> Ja tõepoolest kahjuks isegi et oluline mõista, 888 00:41:45,820 --> 00:41:47,370 meie, inimesed teevad vigu. 889 00:41:47,370 --> 00:41:51,310 Ja ma mõtlesin, et ma jagada on Selle kaheksa minuti pikkune video siin tehtud 890 00:41:51,310 --> 00:41:56,980 alates Modern Marvels episood, mis on haridus näidata, kuidas asjad töötavad 891 00:41:56,980 --> 00:42:00,370 mis maalib kaks pilti millal väära kasutamise 892 00:42:00,370 --> 00:42:02,540 ja mõistmine murdarve 893 00:42:02,540 --> 00:42:05,610 viinud mõned olulised Kahjuks tulemusi. 894 00:42:05,610 --> 00:42:06,363 Võtame pilk. 895 00:42:06,363 --> 00:42:07,029 [VIDEO PLAYBACK] 896 00:42:07,029 --> 00:42:11,290 Me nüüd tagasi "ehitus Katastroofid "Modern Marvels. 897 00:42:11,290 --> 00:42:12,940 Arvutid. 898 00:42:12,940 --> 00:42:15,580 Me kõik oleme tulnud vastu võtta sageli heidutav probleeme, mis 899 00:42:15,580 --> 00:42:20,960 sain koos neid-- vead, viiruste ja tarkvara glitches-- väikeste hindadega 900 00:42:20,960 --> 00:42:23,100 maksma mugavuse. 901 00:42:23,100 --> 00:42:27,770 Aga kõrgtehnoloogia ja kiire sõjaväe ja kosmoseprogrammi rakendused 902 00:42:27,770 --> 00:42:32,780 Väikseim probleemi saab suurendatult arvesse katastroof. 903 00:42:32,780 --> 00:42:38,880 >> 4. juunil 1996 teadlast valmis käivitada mehitamata Ariane 5 raketi. 904 00:42:38,880 --> 00:42:41,190 Ta vedas teadusliku satelliidid, mille eesmärk 905 00:42:41,190 --> 00:42:44,570 täpselt määratleda, kuidas Maa magnetvälja suhtleb 906 00:42:44,570 --> 00:42:47,380 koos päikesetuul. 907 00:42:47,380 --> 00:42:50,580 Raketi ehitati Euroopa Kosmoseagentuuri, 908 00:42:50,580 --> 00:42:54,400 ja välja tõsta selle rajatise rannikul Prantsuse Guajaana. 909 00:42:54,400 --> 00:42:57,520 >> -Aega Umbes 37 sekundiks lend, nad esimest korda 910 00:42:57,520 --> 00:42:59,070 märkasin, et midagi on valesti. 911 00:42:59,070 --> 00:43:02,240 Et pihustid olid pööratava nii nad tõesti ei tohiks. 912 00:43:02,240 --> 00:43:06,550 Umbes 40 sekundit arvesse lendu selgelt sõiduk oli probleeme, 913 00:43:06,550 --> 00:43:08,820 ja see on siis, kui nad on valmistatud otsus hävitada. 914 00:43:08,820 --> 00:43:12,370 Vahemikus ohutuse ohvitser, kellel tohutult julgust, pressitud nuppu 915 00:43:12,370 --> 00:43:18,030 ja plahvatas rakett enne seda võiks saada oht avalikule korrale. 916 00:43:18,030 --> 00:43:21,010 >> -See Oli neiu reis Ariane 5 917 00:43:21,010 --> 00:43:23,920 ja selle hävitamine võttis koht, sest viga 918 00:43:23,920 --> 00:43:25,932 varjatud raketi tarkvara. 919 00:43:25,932 --> 00:43:27,640 -The Probleem Ariane oli see, et 920 00:43:27,640 --> 00:43:30,500 oli number, mis vaja 64 bitti väljendada, 921 00:43:30,500 --> 00:43:33,560 ja nad tahtsid muuta seda 16-bitine number. 922 00:43:33,560 --> 00:43:36,820 Eeldati, et mitmeid oli kunagi väga suur. 923 00:43:36,820 --> 00:43:40,940 Et enamik neist numbrit 64-bitine number olid nullid. 924 00:43:40,940 --> 00:43:42,450 Nad eksisid. 925 00:43:42,450 --> 00:43:45,000 >> -The Võimetus ühe tarkvara aktsepteerima 926 00:43:45,000 --> 00:43:49,460 selline number loodud teine ​​oli keskmes rike. 927 00:43:49,460 --> 00:43:54,260 Tarkvaraarendus on muutunud väga kulukas osa uue tehnoloogia. 928 00:43:54,260 --> 00:43:57,060 Ariane 4 rakett oli olnud väga edukas. 929 00:43:57,060 --> 00:44:01,600 Nii palju tarkvara luuakse seda kasutatakse ka Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -The Põhiprobleem oli see, et Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Aastal faster-- kiirendatud kiiremini ja tarkvara ei ole arvestatud seda. 932 00:44:11,200 --> 00:44:14,910 >> -The Hävitamine raketi oli suur rahaline katastroof. 933 00:44:14,910 --> 00:44:18,630 Kõik tänu minut tarkvara viga. 934 00:44:18,630 --> 00:44:21,160 Aga see ei olnud esimene ajal andmete konverteerimise probleeme 935 00:44:21,160 --> 00:44:24,770 oli vaevavad tänapäeva raketi tehnoloogia. 936 00:44:24,770 --> 00:44:28,020 >> -In 1991 algus esimese Lahesõja 937 00:44:28,020 --> 00:44:30,540 Patriot rakettide kogenud Samalaadsed 938 00:44:30,540 --> 00:44:32,465 kohta mitmeid muundamise probleemi. 939 00:44:32,465 --> 00:44:36,760 Ja tulemus 28 inimesi-- 28 American soldiers-- tapeti, 940 00:44:36,760 --> 00:44:39,010 ja umbes sada teisi haavata. 941 00:44:39,010 --> 00:44:42,830 Kui Patriot, mis pidi kaitsmiseks sissetulevad Scudid, 942 00:44:42,830 --> 00:44:45,780 ei tule rakett. 943 00:44:45,780 --> 00:44:51,610 >> Millal Iraagist Kuveiti tungis ja Ameerikas käivitatud Desert Storm alguses 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot rakettide patareid lähetati kaitsta Saudi Araabia ja Iisraeli 945 00:44:55,720 --> 00:44:59,180 Iraagi Scud rakettide rünnakud. 946 00:44:59,180 --> 00:45:03,080 Patriot on USA keskmise ulatusega pind-õhk süsteem 947 00:45:03,080 --> 00:45:06,530 valmistatud Raytheon ettevõte. 948 00:45:06,530 --> 00:45:09,500 >> -The Suurus Patriot Interceptor itself-- 949 00:45:09,500 --> 00:45:14,705 see on umbes umbes 20 jalga pikk, ja ta kaalub umbes 2000 kilo. 950 00:45:14,705 --> 00:45:19,090 Ja see viib lõhkepea umbes, Ma arvan, et see on umbes 150 £. 951 00:45:19,090 --> 00:45:23,880 Ja lõhkepea ise kõrge lõhkeaine, mis 952 00:45:23,880 --> 00:45:26,700 on killud tema ümber. 953 00:45:26,700 --> 00:45:31,630 Nii korpust lõhkepea on , mille eesmärk on tegutseda nagu haavlid. 954 00:45:31,630 --> 00:45:34,040 >> -The Raketid viiakse neli konteineri kohta, 955 00:45:34,040 --> 00:45:37,170 ja veetakse semi trailer. 956 00:45:37,170 --> 00:45:44,880 >> -The Patriot raketitõrjesüsteemi ulatub vähemalt 20 aastat. 957 00:45:44,880 --> 00:45:48,380 See oli algselt mõeldud kui õhutõrje rakett 958 00:45:48,380 --> 00:45:50,810 tulistada alla vaenlase lennukid. 959 00:45:50,810 --> 00:45:54,410 Esimesel Lahesõja kui see sõda tuli, 960 00:45:54,410 --> 00:45:59,650 Armee tahtis seda kasutada tulistama Scudid, ei lennukeid. 961 00:45:59,650 --> 00:46:03,580 Iraagi õhujõudude oli mitte niivõrd probleemi 962 00:46:03,580 --> 00:46:06,590 kuid armee oli mures Scudid. 963 00:46:06,590 --> 00:46:10,120 Ja nii nad püüdsid uuendada Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Vaenlane rakett liigub Mach 5 965 00:46:12,740 --> 00:46:15,670 pidi olema pisut üksluine. 966 00:46:15,670 --> 00:46:18,440 Aga kui Patriot aastal tormas teenus, 967 00:46:18,440 --> 00:46:22,580 Armee ei olnud teadlik Iraagi muudatustest, mis 968 00:46:22,580 --> 00:46:25,880 tegid oma Scudid ligi võimatu seda. 969 00:46:25,880 --> 00:46:30,690 >> Mis juhtus on Scudid et olid tulemas olid ebastabiilsed. 970 00:46:30,690 --> 00:46:32,000 Nad olid ebakindel. 971 00:46:32,000 --> 00:46:37,210 Selle põhjuseks oli Iraqis-- selleks, et saada 600 kilomeetrisel 972 00:46:37,210 --> 00:46:41,680 kohta 300 kilomeetri vahemikku missile-- võttis kaalust välja ees lõhkepea 973 00:46:41,680 --> 00:46:43,340 ja tehtud lõhkepea kergem. 974 00:46:43,340 --> 00:46:48,490 Nüüd Patriot üritab tulla at Scud ja enamik aeg-- 975 00:46:48,490 --> 00:46:52,880 Valdav osa aeg-- see oleks lihtsalt lennata Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Kui Patriot haldurid mõistis Patriot oma eesmärki täitnud, 977 00:46:57,120 --> 00:47:01,630 nad lõhkeda Patriot lõhkepea vältida võimalikke kaotusi kui see 978 00:47:01,630 --> 00:47:04,440 lubati langevad maapinnale. 979 00:47:04,440 --> 00:47:08,700 >> See oli see, mida enamik inimesi näinud kui suur fireballs taevas, 980 00:47:08,700 --> 00:47:14,180 ja mõista kui lõikepunktide Scud lõhkepeade. 981 00:47:14,180 --> 00:47:18,020 >> -Although Öösel taevas, Patriots osutus edukaks hävitades 982 00:47:18,020 --> 00:47:23,280 Scudid kell Dhahran võiks olla mingit kahtlust selle tulemuslikkust. 983 00:47:23,280 --> 00:47:27,930 Seal Patriot radari süsteem kaotanud jälgida sissetuleva Scud 984 00:47:27,930 --> 00:47:30,260 ja kunagi käivitas tõttu et tarkvara viga. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> See oli iisraellasi, kes esimesena avastas et mida kauem süsteem oli, 987 00:47:38,880 --> 00:47:41,130 suurema aja lahknevus sai. 988 00:47:41,130 --> 00:47:44,770 Tänu kella varjatud aastal süsteemi arvutisse. 989 00:47:44,770 --> 00:47:48,190 >> Umbes kaks nädalat enne tragöödia Dhahranis, 990 00:47:48,190 --> 00:47:50,720 Iisraeli teatatud Defense Department 991 00:47:50,720 --> 00:47:52,410 et süsteem oli kaotanud aega. 992 00:47:52,410 --> 00:47:54,410 Pärast umbes kaheksa tunni jooksmise, märkasid nad, 993 00:47:54,410 --> 00:47:57,690 et süsteemi muutub märgatavalt vähem täpne. 994 00:47:57,690 --> 00:48:01,850 Defense Department reageeris ütleb kõik Patriot patareid 995 00:48:01,850 --> 00:48:04,800 ei jääks süsteemid juba pikka aega. 996 00:48:04,800 --> 00:48:06,980 Nad ei ole kunagi öelnud, mida pikka aega oli. 997 00:48:06,980 --> 00:48:09,140 8 tundi, 10 tundi, tuhat tundi. 998 00:48:09,140 --> 00:48:11,300 Keegi ei teadnud. 999 00:48:11,300 --> 00:48:13,320 >> -The Patriot aku seisvad kasarmud 1000 00:48:13,320 --> 00:48:18,310 at Dhahran ja selle vigane sisemine Kell oli kestnud juba üle 100 tunni 1001 00:48:18,310 --> 00:48:21,520 ööl vastu 25. veebruar. 1002 00:48:21,520 --> 00:48:25,792 >> -See Jälitatud aeg täpsus umbes kümnendik sekundit. 1003 00:48:25,792 --> 00:48:27,950 Nüüd kümnendik teine on huvitav number 1004 00:48:27,950 --> 00:48:31,850 sest see ei saa väljendada binaarne täpselt, mis 1005 00:48:31,850 --> 00:48:36,500 tähendab seda ei saa väljendada täpselt kogu kaasaegset digitaalset arvutit. 1006 00:48:36,500 --> 00:48:41,070 On raske uskuda, kuid kasutada seda kui näidet. 1007 00:48:41,070 --> 00:48:43,420 >> Võtame number üks kolmandik. 1008 00:48:43,420 --> 00:48:47,330 Üks kolmandik ei saa väljendatud kohaga täpselt. 1009 00:48:47,330 --> 00:48:52,060 Üks kolmandik on 0,333 kestnud lõpmatuseni. 1010 00:48:52,060 --> 00:48:56,420 Ei ole nii, et seda teha koos absoluutne täpsus koma. 1011 00:48:56,420 --> 00:48:59,530 See on täpselt selline probleem mis juhtus Patriot. 1012 00:48:59,530 --> 00:49:04,040 Mida pikem on süsteem jooksis hullem aeg viga sai. 1013 00:49:04,040 --> 00:49:08,840 >> -Peale 100 töötunni viga ajal oli ainult umbes üks kolmandik 1014 00:49:08,840 --> 00:49:10,440 teise. 1015 00:49:10,440 --> 00:49:14,150 Aga nii on suunatud rakett liigub Mach 5, 1016 00:49:14,150 --> 00:49:18,560 see põhjustas jälgimine viga üle 600 meetri. 1017 00:49:18,560 --> 00:49:21,870 Oleks saatuslik viga sõdurite juures Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> Mis juhtus on Scud käivitamine oli avastatud varajase hoiatamise satelliitide 1019 00:49:28,455 --> 00:49:32,710 ja nad teadsid Scud tuli nende üldine suund. 1020 00:49:32,710 --> 00:49:35,150 Nad ei tea, kust see tuli. 1021 00:49:35,150 --> 00:49:38,210 See oli nüüd kuni radar komponent Patriot süsteem 1022 00:49:38,210 --> 00:49:43,150 kaitsta Dhahran leida ja hoida jälgida sissetulevad vaenlase rakett. 1023 00:49:43,150 --> 00:49:44,561 >> -The Radar oli väga tark. 1024 00:49:44,561 --> 00:49:46,560 Oleks tegelikult jälgida positsiooni Scud 1025 00:49:46,560 --> 00:49:48,930 ja siis ennustada, kus siis ilmselt oleks 1026 00:49:48,930 --> 00:49:51,380 järgmine kord radar saadetud impulsi välja. 1027 00:49:51,380 --> 00:49:53,040 See kutsuti vahemikus värav. 1028 00:49:53,040 --> 00:49:57,620 >> -Mis Kord Patriot otsustab piisavalt aega on 1029 00:49:57,620 --> 00:50:02,400 edasi minna tagasi ja vaadata järgmise Asukoht selle avastatud objekt 1030 00:50:02,400 --> 00:50:03,550 see läheb tagasi. 1031 00:50:03,550 --> 00:50:07,820 Nii et kui ta läks tagasi vale paigas, siis ei näe objekti. 1032 00:50:07,820 --> 00:50:10,360 Ja kui ta otsustab, et ei olnud eseme. 1033 00:50:10,360 --> 00:50:13,630 See oli vale avastamine ja see langeb suunas. 1034 00:50:13,630 --> 00:50:16,970 >> -The Sissetulevate Scud kadus radari ekraanil 1035 00:50:16,970 --> 00:50:20,200 ja sekundid hiljem, slammed arvesse kasarmud. 1036 00:50:20,200 --> 00:50:22,570 Scud hukkus 28. 1037 00:50:22,570 --> 00:50:26,110 See oli viimane vallandati esimese Lahesõja. 1038 00:50:26,110 --> 00:50:31,920 Traagiliselt, uuendatud tarkvara saabus koidik järgmisel päeval. 1039 00:50:31,920 --> 00:50:34,870 Tarkvara viga oli ole kindlaks määratud, sulgemine 1040 00:50:34,870 --> 00:50:39,150 ühe peatüki raskustes ajalugu Patriot raketti. 1041 00:50:39,150 --> 00:50:40,030 >> [END VIDEO PLAYBACK] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. Humala: Ongi CS50. 1043 00:50:41,488 --> 00:50:42,820 Me näeme teid kolmapäeval. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [Muusika mängimine] 1046 00:50:50,370 --> 00:54:23,446