1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [Musiikki soi] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. MALAN: Okei. 5 00:00:12,660 --> 00:00:15,590 Tämä on CS50, ja tämä on alku viikolla kaksi. 6 00:00:15,590 --> 00:00:19,120 Olkaamme siis aloittaa tänään bugi. 7 00:00:19,120 --> 00:00:20,974 Bug, on tietenkin virhe ohjelmassa, 8 00:00:20,974 --> 00:00:22,890 ja saat hyvin tuttu käsite 9 00:00:22,890 --> 00:00:26,050 jos et ole koskaan ohjelmoitu ennen. pset0 ja nyt pset1. 10 00:00:26,050 --> 00:00:29,280 Mutta katsotaanpa harkita jotain hieman yksinkertainen aluksi. 11 00:00:29,280 --> 00:00:32,189 Tämä ohjelma täällä, että minä heitti yhdessä etukäteen, 12 00:00:32,189 --> 00:00:37,280 ja Väitän, että tämän pitäisi tulostaa 10 tähteä ruudulle käyttämällä printf, 13 00:00:37,280 --> 00:00:41,020 mutta se on ilmeisesti viallisista jollakin tavalla. 14 00:00:41,020 --> 00:00:45,370 >> Koska määritys, joka se pitäisi tulostaa 10 tähteä, 15 00:00:45,370 --> 00:00:50,230 mutta se ei ilmeisesti, mitä olisi väität on bugi? 16 00:00:50,230 --> 00:00:52,004 Joo? 17 00:00:52,004 --> 00:00:54,420 Joten se on pois yksi virhe, ja mitä tarkoitat sillä? 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 Erinomainen. 22 00:01:10,410 --> 00:01:13,930 Joten olemme määritetty aloittaa nolla i, 23 00:01:13,930 --> 00:01:18,399 ja olemme määriteltyjen n arvo on 10, mutta olemme käyttäneet vähemmän tai yhtä suuri kuin. 24 00:01:18,399 --> 00:01:21,190 Ja syystä, että tämä on kahden merkkejä eikä vain yksi symboli, 25 00:01:21,190 --> 00:01:22,630 kuten matematiikan kirjan, on, että sinulla ei ole 26 00:01:22,630 --> 00:01:24,880 tapa ilmaista yksi merkki vastaava. 27 00:01:24,880 --> 00:01:28,450 >> Niin se tarkoittaa alle, mutta jos alkaa laskea nollaan, 28 00:01:28,450 --> 00:01:31,690 mutta voit laskea koko matkan läpi ja yhtä suuri kuin 10, 29 00:01:31,690 --> 00:01:34,170 olet tietysti menossa laskea 11 asiat yhteensä. 30 00:01:34,170 --> 00:01:35,900 Ja niin aiot tulostaa 11 tähteä. 31 00:01:35,900 --> 00:01:37,990 Joten mikä voisi olla korjata tämän? 32 00:01:37,990 --> 00:01:39,970 Joo? 33 00:01:39,970 --> 00:01:43,980 >> Joten säätää alle tai yhtä suuri kuin vain olla pienempi kuin, 34 00:01:43,980 --> 00:01:46,250 ja siellä, väitän, ehkä Toinen ratkaisu myös. 35 00:01:46,250 --> 00:01:47,210 Mikä voisi muuta voit tehdä? 36 00:01:47,210 --> 00:01:48,590 Joo? 37 00:01:48,590 --> 00:01:53,660 >> Niin alkaa vastaten sen 1, ja jätä pienempi kuin tai yhtä suuri kuin. 38 00:01:53,660 --> 00:01:56,187 Ja suoraan sanottuna mielestäni sanoa , että tyypillisellä ihmisellä, 39 00:01:56,187 --> 00:01:57,770 tämä on luultavasti enemmän suoraviivaista. 40 00:01:57,770 --> 00:02:00,280 Alkaa laskea 1 ja laskea läpi 10. 41 00:02:00,280 --> 00:02:01,690 Pohjimmiltaan mitä tarkoitat. 42 00:02:01,690 --> 00:02:04,010 >> Mutta todellisuus on ohjelmointi, kuten olemme nähneet, 43 00:02:04,010 --> 00:02:07,598 tietotekniikan tutkijoita ja ohjelmoijat eivät yleensä alkaa laskea nollaan. 44 00:02:07,598 --> 00:02:09,389 Ja niin se on hieno kerran tottuu siihen. 45 00:02:09,389 --> 00:02:12,640 Vointisi on yleensä olla jotain alle. 46 00:02:12,640 --> 00:02:14,910 Niin yksinkertaisesti looginen virhe, että voisimme nyt 47 00:02:14,910 --> 00:02:17,990 korjata ja lopulta uudelleenkääntää tämä ja saada vain 10. 48 00:02:17,990 --> 00:02:19,610 >> No miten tästä ongelmasta täällä? 49 00:02:19,610 --> 00:02:24,200 Tässäkin Väitän, että minulla on tavoitteena tulostus 10 stars-- 50 00:02:24,200 --> 00:02:28,140 yksi per rivi tällä kertaa, mutta se ei ole. 51 00:02:28,140 --> 00:02:30,940 Ennen ehdotamme mitä korjaus on, mitä tämä 52 00:02:30,940 --> 00:02:34,640 tulostaa visuaalisesti jos olisin koota ja suorita tämä ohjelma luulet? 53 00:02:34,640 --> 00:02:35,140 Joo? 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 Joten kaikki tähdet Sama linja on mitä kuulin, 57 00:02:41,690 --> 00:02:43,391 ja sitten uusi rivi merkki. 58 00:02:43,391 --> 00:02:44,140 Joten kokeile sitä. 59 00:02:44,140 --> 00:02:48,710 Joten buginen-1, kirjoita, ja näen kalahtaa komento 60 00:02:48,710 --> 00:02:50,090 että puhuimme viime kerralla. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, ja todellakin näen kaikki 10 tähteä samalla linjalla, vaikka väitän 62 00:02:55,180 --> 00:02:58,690 minun selityksessä vain kommentin huipulla koodin että aioin tehdä yksi per 63 00:02:58,690 --> 00:02:59,230 linja. 64 00:02:59,230 --> 00:03:00,580 Mutta tämä näyttää oikealta. 65 00:03:00,580 --> 00:03:04,620 >> Nyt linja 15 se näyttää olen tulostus tähti, ja sitten linja 16 66 00:03:04,620 --> 00:03:06,620 se näyttää Olen tulostus Uusi linja hahmo, 67 00:03:06,620 --> 00:03:09,560 ja he molemmat sisennetty niin Olen lenkin sisältä selvästi. 68 00:03:09,560 --> 00:03:13,610 Joten ei kannata tehdä tähti, uusi rivi, tähti, uusi rivi, tähti, uusi linja? 69 00:03:13,610 --> 00:03:14,110 Kyllä? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Joo, toisin kuin kieli kuten Python, jos olet perehtynyt, 72 00:03:21,240 --> 00:03:23,540 sisennys ei väliä tietokoneeseen. 73 00:03:23,540 --> 00:03:25,280 Se vain on merkitystä ihmisen. 74 00:03:25,280 --> 00:03:29,860 Joten taas täällä olen keksinyt linjat 15 ja 16-- että näyttää kauniilta, 75 00:03:29,860 --> 00:03:31,330 mutta tietokone ei välitä. 76 00:03:31,330 --> 00:03:34,640 Tietokone välittää todella ottaa aaltosulkeita 77 00:03:34,640 --> 00:03:36,310 noin nämä riviä koodia. 78 00:03:36,310 --> 00:03:39,520 >> Niin, että se on clear-- aivan kuten Scratch-- että nämä kaksi riviä koodia 79 00:03:39,520 --> 00:03:40,450 tulisi suorittaa. 80 00:03:40,450 --> 00:03:44,390 Kuin yksi niistä keltainen Scratch palapeli kappaletta uudestaan ​​ja uudestaan ​​ja uudestaan. 81 00:03:44,390 --> 00:03:50,920 >> Joten jos nyt ajaa uudelleen tämän program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Minulla on virhe nyt. 83 00:03:51,770 --> 00:03:54,212 Mitä unohdan tehdä? 84 00:03:54,212 --> 00:03:55,420 Joo, joten en kääntää sen. 85 00:03:55,420 --> 00:03:56,740 Joten buginen-2. 86 00:03:56,740 --> 00:03:59,840 Tiedostoa koska en itse koota toinen versio. 87 00:03:59,840 --> 00:04:04,860 Joten nyt mielenkiintoinen Pimeän variable-- ei 2. 88 00:04:04,860 --> 00:04:05,510 Meillä menee 1. 89 00:04:05,510 --> 00:04:11,050 Tee buginen-1-- ./buggy-1-- ja nyt kukin niistä on samalla linjalla. 90 00:04:11,050 --> 00:04:13,880 >> Nyt on poikkeus tämä oletettu väite kaivoksen 91 00:04:13,880 --> 00:04:15,520 että tarvitset näitä aaltosulkeita. 92 00:04:15,520 --> 00:04:20,160 Milloin se on todella OK-- jos olet huomannut jaksossa tai textbooks-- 93 00:04:20,160 --> 00:04:22,130 jättää aaltosulkeita? 94 00:04:22,130 --> 00:04:22,630 Joo? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Täsmälleen. 97 00:04:26,870 --> 00:04:28,940 Kun on vain yksi rivi koodia, että olet 98 00:04:28,940 --> 00:04:32,830 haluavat liittyä silmukka kuten meidän ensimmäisessä esimerkissä. 99 00:04:32,830 --> 00:04:36,380 On täysin oikeutettua jättää aaltosulkeita 100 00:04:36,380 --> 00:04:40,310 aivan kuten eräänlainen mukavuutta alkaen kääntäjä sinulle. 101 00:04:40,310 --> 00:04:40,810 Joo? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Hyvä kysymys. 104 00:04:43,930 --> 00:04:45,500 Olisiko harkittava tyyli virhe? 105 00:04:45,500 --> 00:04:49,340 Olisimme promote-- kuin CS50 tyyli opas, URL, joka 106 00:04:49,340 --> 00:04:51,926 on pset1--, että aina Käytä aaltosulkumerkkien. 107 00:04:51,926 --> 00:04:53,550 Varmasti jos olet uusi ohjelmointi. 108 00:04:53,550 --> 00:04:56,800 Todellisuus on, ettemme ole aio kieltää sinua 109 00:04:56,800 --> 00:04:58,680 tekemästä nämä mukavuudet. 110 00:04:58,680 --> 00:05:00,846 Mutta jos olet vasta vauhtiin asioita, 111 00:05:00,846 --> 00:05:04,020 ehdottomasti vain aina kihara henkselit kunnes saat roikkua sitä. 112 00:05:04,020 --> 00:05:04,640 Hyvä kysymys. 113 00:05:04,640 --> 00:05:05,320 >> Kunnossa. 114 00:05:05,320 --> 00:05:07,660 Niin että sitten oli bugi. 115 00:05:07,660 --> 00:05:09,190 Ainakin jotain melko yksinkertaista. 116 00:05:09,190 --> 00:05:11,260 Ja vielä luulisi tämän on melko alkeellinen, eikö? 117 00:05:11,260 --> 00:05:13,635 Tämä on tavallaan ensimmäinen viikko tarkastella kieltä 118 00:05:13,635 --> 00:05:14,890 kuten, katso bugeja siinä. 119 00:05:14,890 --> 00:05:17,250 Mutta todellisuus nämä ovat tosiasiallisesti edustava 120 00:05:17,250 --> 00:05:20,310 joitakin melko pelottavia ongelmia joita voi syntyä todellisessa maailmassa. 121 00:05:20,310 --> 00:05:23,530 >> Joten jotkut teistä saattavat muistaa jos noudatat teknologian uutisia, 122 00:05:23,530 --> 00:05:25,740 tai ehkä jopa kiinni tuuli tämän helmikuussa 123 00:05:25,740 --> 00:05:29,434 Tämän kuluneen vuoden aikana, että Apple oli tehty hieman virhe molemmissa iOS, 124 00:05:29,434 --> 00:05:31,350 käyttöjärjestelmä puhelimeensa, ja myös 125 00:05:31,350 --> 00:05:34,220 Mac OS, käyttöjärjestelmä niiden työasemia ja kannettavia tietokoneita. 126 00:05:34,220 --> 00:05:36,480 Ja näit kuten otsikoita kuten tämä. 127 00:05:36,480 --> 00:05:41,120 Ja sen jälkeen, Apple lupasi korjata tämän vian, 128 00:05:41,120 --> 00:05:45,950 ja hyvin nopeasti teki korjata sen iOS, mutta sitten lopulta korjasi Mac OS 129 00:05:45,950 --> 00:05:46,810 samoin. 130 00:05:46,810 --> 00:05:50,370 >> Nyt mikään näistä otsikoista yksin todella paljastaa, mitä perimmäinen ongelma oli, 131 00:05:50,370 --> 00:05:55,640 mutta vika oli lopulta alennettu vian SSL, Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 Ja pitkä tarina lyhyt, tämä on ohjelmiston 133 00:05:57,390 --> 00:06:01,030 että selaimet ja muut ohjelmistoja käytetään tekemään mitä? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Jos sanoisin, että SSL on mukana, aina kun 136 00:06:06,860 --> 00:06:13,920 käydä URL, joka alkaa HTTPS, mitä sitten voisi SSL liittyä? 137 00:06:13,920 --> 00:06:14,580 Salausta. 138 00:06:14,580 --> 00:06:16,470 Joten me puhumme Tässä lähipäivinä. 139 00:06:16,470 --> 00:06:18,750 Salaus, taidetta muokkaamisella tiedot. 140 00:06:18,750 --> 00:06:22,200 >> Mutta pitkä tarina lyhyt, Apple joskus sitten oli tehnyt virheen 141 00:06:22,200 --> 00:06:25,970 niiden täytäntöönpanossa SSL, ohjelmisto, joka lopulta toteuttaa 142 00:06:25,970 --> 00:06:30,120 URL-osoitteet, kuten HTTPS tai max yhteyksiä sielläkin. 143 00:06:30,120 --> 00:06:32,850 Seurauksena on, että yhteyksiä voisi mahdollisesti 144 00:06:32,850 --> 00:06:33,920 siepata. 145 00:06:33,920 --> 00:06:37,130 Ja yhteydet olivat ei välttämättä ole salattu 146 00:06:37,130 --> 00:06:40,350 jos sinulla on ollut huonoja kaveri välillä sinä ja määränpää sivusto, joka 147 00:06:40,350 --> 00:06:42,170 osasivat hyödyntää tätä. 148 00:06:42,170 --> 00:06:45,090 >> Nyt Apple lopulta lähetetty korjata tämän lopuksi, 149 00:06:45,090 --> 00:06:46,920 ja kuvaus niiden korjaus oli tämä. 150 00:06:46,920 --> 00:06:49,878 Turvallinen kuljetus ei vahvista aitouden yhteyden. 151 00:06:49,878 --> 00:06:52,920 Asiaa käsitellyt palauttaminen puuttuu validointivaiheet. 152 00:06:52,920 --> 00:06:57,250 >> Joten tämä on erittäin käsi aaltoileva selitys yksinkertaisesti sanomalla, että me mokasin. 153 00:06:57,250 --> 00:07:00,920 On kirjaimellisesti yksi riviä koodia, joka oli buginen 154 00:07:00,920 --> 00:07:05,130 niiden täytäntöönpanossa SSL, ja jos mennä verkossa ja etsiä tämän 155 00:07:05,130 --> 00:07:07,210 voit itse löytää alkuperäistä lähdekoodia. 156 00:07:07,210 --> 00:07:11,960 Esimerkiksi tämä on kuvakaappaus vain osa melko suuri tiedosto, 157 00:07:11,960 --> 00:07:15,965 mutta tämä on funktio ilmeisesti nimeltään SSL tarkistaa merkki palvelimen avainten vaihdon. 158 00:07:15,965 --> 00:07:17,840 Ja se vie kasan argumentteja ja tulot. 159 00:07:17,840 --> 00:07:20,298 Ja emme aio keskittyä liikaa Erikoiskohdan siellä, 160 00:07:20,298 --> 00:07:24,390 mutta jos keskitytään koodin sisällä Tämän päällimmäinen function-- katsotaanpa 161 00:07:24,390 --> 00:07:25,590 zoomata että. 162 00:07:25,590 --> 00:07:28,140 Saatat jo epäillä mikä virhe saattaa 163 00:07:28,140 --> 00:07:31,230 olla vaikka sinulla ei ole aavistustakaan lopulta mitä etsit. 164 00:07:31,230 --> 00:07:35,924 On eräänlainen anomalia täällä, joka on mitä? 165 00:07:35,924 --> 00:07:38,940 >> Joo, en todellakaan pidä ulkoasua kahden goto epäonnistuu. 166 00:07:38,940 --> 00:07:42,060 Suoraan sanottuna, en todellakaan tiedä, mitä goto epäonnistua avulla, mutta jossa on kaksi niistä 167 00:07:42,060 --> 00:07:42,810 takaisin takaisin. 168 00:07:42,810 --> 00:07:45,290 Että vain sellainen hieroo minua älyllisesti väärällä tavalla, 169 00:07:45,290 --> 00:07:48,910 ja tosiaan jos me zoomata vain ne linjat, tämä on C. 170 00:07:48,910 --> 00:07:52,220 >> Niin paljon Applen koodia on itse kirjoitettu C, 171 00:07:52,220 --> 00:07:55,780 ja tämä ilmeisesti on todella equivalent-- 172 00:07:55,780 --> 00:07:59,060 ei sille ihan sisennys versio, mutta jos tunnistat siitä, 173 00:07:59,060 --> 00:08:02,560 että ei ole aaltosulkeita, mitä Apple todella kirjoitti oli koodi, joka näyttää 174 00:08:02,560 --> 00:08:03,540 näin. 175 00:08:03,540 --> 00:08:07,080 Joten olen zoomataan ulos ja minä vain Kiinteän syvennys mielessä 176 00:08:07,080 --> 00:08:10,690 että jos ei ole aaltosulkeita, että Toinen goto epäonnistua siinä keltaisella 177 00:08:10,690 --> 00:08:12,500 aikoo toteuttaa vaikka mitä. 178 00:08:12,500 --> 00:08:15,540 Se ei liity jos ehto sen yläpuolella. 179 00:08:15,540 --> 00:08:19,590 >> Joten vaikka uudelleen, jos et ole aivan ymmärtää, mitä tämä voisi mahdollisesti 180 00:08:19,590 --> 00:08:23,230 olla tekemässä, tietää, että jokainen näistä conditions-- kukin näiden linjojen 181 00:08:23,230 --> 00:08:26,180 on erittäin tärkeä askel prosessi tarkastaa 182 00:08:26,180 --> 00:08:28,350 jos tietosi on todellakin salattu. 183 00:08:28,350 --> 00:08:31,710 Niin ohita yksi näistä vaiheita, ei ole paras idea. 184 00:08:31,710 --> 00:08:34,840 >> Mutta koska meillä on tämä Toinen goto epäonnistua keltainen, 185 00:08:34,840 --> 00:08:36,840 ja koska kerran me tavallaan esteettisesti 186 00:08:36,840 --> 00:08:40,480 siirrä sitä vasemmalle, jossa se loogisesti on tällä hetkellä, mitä 187 00:08:40,480 --> 00:08:43,230 tämä tarkoittaa linjaa koodin alla, että toinen goto 188 00:08:43,230 --> 00:08:46,480 hylätty ajattelisit? 189 00:08:46,480 --> 00:08:48,860 Se on aina menossa ohitetaan. 190 00:08:48,860 --> 00:08:52,100 Joten GOTOt yleensä paheksutaan syistä emme todellakaan mennä, 191 00:08:52,100 --> 00:08:54,940 ja todellakin CS50 meillä on tapana ei opettaa tämän lausunnon goto, 192 00:08:54,940 --> 00:08:58,130 mutta voit ajatella goto ei siten mennä hyppy 193 00:08:58,130 --> 00:08:59,600 joihinkin muihin osa koodista. 194 00:08:59,600 --> 00:09:03,120 >> Toisin sanoen hypätä yli tämä viimeinen rivi kokonaan, 195 00:09:03,120 --> 00:09:07,420 ja niin tuloksena tyhmä yksinkertainen virhe, että oli vain 196 00:09:07,420 --> 00:09:10,330 seurauksena todennäköisesti joku kopioimalla yksi liikaa 197 00:09:10,330 --> 00:09:14,150 monta kertaa oli, että koko turvallisuus iOS ja Mac OS 198 00:09:14,150 --> 00:09:18,240 haavoittuvuuden Sieppaukseen by pahiksia jo jonkin aikaa. 199 00:09:18,240 --> 00:09:19,940 Kunnes Apple vihdoin korjannut. 200 00:09:19,940 --> 00:09:23,100 >> Nyt jos jotkut teistä ovat itse asiassa käynnissä vanhat versiot iOS tai Mac OS, 201 00:09:23,100 --> 00:09:27,250 voit mennä gotofail.com joka on sivusto, että joku perustaa 202 00:09:27,250 --> 00:09:29,190 olennaisesti määrittää ohjelmallisesti 203 00:09:29,190 --> 00:09:30,980 jos tietokone on edelleen haavoittuva. 204 00:09:30,980 --> 00:09:33,600 Ja suoraan sanottuna, jos se on, se on luultavasti hyvä idea 205 00:09:33,600 --> 00:09:36,870 Voit päivittää puhelimesi tai Macin tässä vaiheessa. 206 00:09:36,870 --> 00:09:40,120 Mutta on vain osoitus kuinka arvostusta näistä alemman tason 207 00:09:40,120 --> 00:09:42,400 yksityiskohdat ja melko yksinkertaisia ​​ideoita voi todella 208 00:09:42,400 --> 00:09:44,590 kääntää päätökset ja ongelmia, jotka 209 00:09:44,590 --> 00:09:47,320 affected-- tässä case-- miljoonia ihmisiä. 210 00:09:47,320 --> 00:09:49,107 >> Nyt sana hallintoon. 211 00:09:49,107 --> 00:09:50,690 Jakso alkaa tulevana sunnuntaina. 212 00:09:50,690 --> 00:09:53,360 Saat sähköpostilla viikonloppuna noin osiossa, jossa vaiheessa 213 00:09:53,360 --> 00:09:55,290 resektioiden prosessi alkaa jos olet 214 00:09:55,290 --> 00:09:56,998 tajusi sinulla on nyt joitakin uusia konflikteja. 215 00:09:56,998 --> 00:10:00,180 Joten tämä tapahtuu joka vuosi, ja me mahtuu sisään lähipäivinä. 216 00:10:00,180 --> 00:10:02,430 >> Office hours-- tehdä pitää silmällä tätä aikataulut tästä. 217 00:10:02,430 --> 00:10:05,100 Muuttuu hieman tällä viikolla, erityisesti alkamisaika 218 00:10:05,100 --> 00:10:08,180 ja paikka, joten älä ota että ennen kuin suuntaat virka 219 00:10:08,180 --> 00:10:09,520 tahansa seuraavan neljä yötä. 220 00:10:09,520 --> 00:10:12,680 Ja nyt sana arviointi, varsinkin kun sukeltaa ongelma 221 00:10:12,680 --> 00:10:14,350 asetetaan yksi ja sen jälkeen. 222 00:10:14,350 --> 00:10:17,070 >> Joten kohti erittely, nämä ovat yleensä 223 00:10:17,070 --> 00:10:20,360 akselit, joita pitkin me arvioida työsi. 224 00:10:20,360 --> 00:10:23,170 Laajuus viittaa siihen, mitä määrin koodi työkoneet 225 00:10:23,170 --> 00:10:25,690 ominaisuuksia tarvitaan meidän erittely. 226 00:10:25,690 --> 00:10:28,290 Toisin sanoen, kuinka paljon osainen sarja sinä purra. 227 00:10:28,290 --> 00:10:30,440 Teitkö kolmasosa siitä, puolet siitä, 100% siitä. 228 00:10:30,440 --> 00:10:33,000 Vaikka se ei ole oikein, kuinka paljon sinä yrität? 229 00:10:33,000 --> 00:10:35,290 Niin että kaappaa taso vaivaa ja määrä 230 00:10:35,290 --> 00:10:38,260 , johon puri Harjoitus ongelmia. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- tämä yksi, jotta Missä määrin, on koodi 232 00:10:40,690 --> 00:10:43,150 vastaa meidän tekniset ja vailla vikoja. 233 00:10:43,150 --> 00:10:44,770 Joten se toimii oikein? 234 00:10:44,770 --> 00:10:48,700 Jos annamme sille joitakin input, eihän antaa meille lähtö että odotamme? 235 00:10:48,700 --> 00:10:52,570 Design-- nyt tämä on ensimmäinen erityisesti laadullisten puutteiden, 236 00:10:52,570 --> 00:10:56,180 tai ne, jotka vaativat ihmisten tuomion. 237 00:10:56,180 --> 00:10:59,690 Ja todellakin, siksi meillä on henkilökuntaa niin monet opetuksen kaverit ja tietenkin 238 00:10:59,690 --> 00:11:00,350 avustajia. 239 00:11:00,350 --> 00:11:03,480 Missä määrin on koodi kirjoitettu hyvin? 240 00:11:03,480 --> 00:11:05,810 >> Ja taas tämä on erittäin laadullinen arviointi 241 00:11:05,810 --> 00:11:09,100 joka toimii kanssasi kaksisuuntaisesti vuonna lähiviikkoina. 242 00:11:09,100 --> 00:11:12,060 Niin että kun saat ei vain numeerinen tulokset, mutta myös 243 00:11:12,060 --> 00:11:16,682 kirjallinen pistemääriä tai kirjoitetaan palaute, tai kirjallista palautetta in Englanti sanat. 244 00:11:16,682 --> 00:11:19,640 Sitähän käytämme ajaa sinut kohti todella kirjallisesti parempaa koodia. 245 00:11:19,640 --> 00:11:23,320 Ja luento ja kohdassa, yritämme kohtaan out-- niin usein kuin me can-- 246 00:11:23,320 --> 00:11:26,420 mikä tekee ohjelma ei ainoastaan oikea ja toiminnallisesti hyvä, 247 00:11:26,420 --> 00:11:28,200 mutta myös hyvin suunniteltu. 248 00:11:28,200 --> 00:11:31,850 Tehokkain se voisi olla, tai jopa kaunein se voi olla. 249 00:11:31,850 --> 00:11:33,100 >> Joka johtaa meidät tyyliin. 250 00:11:33,100 --> 00:11:36,876 Tyyli lopulta on esteettinen tuomion. 251 00:11:36,876 --> 00:11:38,750 Päätitte hyvä nimet muuttujat? 252 00:11:38,750 --> 00:11:40,330 Oletko sisennetty koodin oikein? 253 00:11:40,330 --> 00:11:44,010 Se näyttää hyvältä, ja siksi, on se helppo toisen ihmisen 254 00:11:44,010 --> 00:11:46,550 lukea teidän kummankin sen oikeellisuutta. 255 00:11:46,550 --> 00:11:50,300 >> Nyt yleensä kohti oppimäärän, me pisteet nämä asiat viiden pisteen asteikolla. 256 00:11:50,300 --> 00:11:53,640 Ja haluan äänekkäästi piste että kolme on todella hyvä. 257 00:11:53,640 --> 00:11:55,550 Hyvin nopeasti tehdä ihmiset alkaa tehdä aritmeettinen. 258 00:11:55,550 --> 00:11:58,133 Kun he saavat kolme viisi oikeellisuudesta jostain PSET 259 00:11:58,133 --> 00:12:02,040 ja he ajattelevat pirun, minä menossa 60% joka on lähinnä D tai E. 260 00:12:02,040 --> 00:12:03,980 >> Se ei ole miten me ajatella näistä numeroista. 261 00:12:03,980 --> 00:12:06,880 Kolme on todella hyvä, ja mitä me odottavat yleensä alussa 262 00:12:06,880 --> 00:12:09,820 termi on, että jos saat nippu three's-- ehkä pari 263 00:12:09,820 --> 00:12:12,540 messujen, pari fours-- tai pari kaksittain, pari fours-- 264 00:12:12,540 --> 00:12:13,748 se on hyvä paikka aloittaa. 265 00:12:13,748 --> 00:12:16,320 Ja niin kauan kuin näemme vussa ajan, 266 00:12:16,320 --> 00:12:18,540 olet erityisen hyvä paikka. 267 00:12:18,540 --> 00:12:20,752 >> Kaava käytämme paino asioita on olennaisesti 268 00:12:20,752 --> 00:12:22,710 Tässä kohden oppimäärän, mikä tarkoittaa vain sitä, että me 269 00:12:22,710 --> 00:12:24,750 enemmän painoa oikeellisuutta. 270 00:12:24,750 --> 00:12:27,930 Koska se on hyvin usein oikeellisuutta joka vie eniten aikaa. 271 00:12:27,930 --> 00:12:28,760 Luota minuun nyt. 272 00:12:28,760 --> 00:12:31,190 Tulet find-- ainakin yhdessä pset-- että olet 273 00:12:31,190 --> 00:12:36,790 viettävät 90% ajastasi työskentelevät 10%: n ongelma. 274 00:12:36,790 --> 00:12:39,320 >> Ja kaikki tavallaan toimii lukuun ottamatta yhtä tai kahta vikoja, 275 00:12:39,320 --> 00:12:41,570 ja ne ovat vikoja, jotka pitää sinut ajan myöhään yöllä. 276 00:12:41,570 --> 00:12:43,380 Nämä ovat niitä, jotka tavallaan paeta sinua. 277 00:12:43,380 --> 00:12:45,560 Mutta kun nukkuminen sitä, tai kokouksen virka 278 00:12:45,560 --> 00:12:48,844 tai kysymällä verkossa, on kun saat että 100% tavoite, 279 00:12:48,844 --> 00:12:50,760 ja siksi me paino oikeellisuuden eniten. 280 00:12:50,760 --> 00:12:54,102 Suunnittele hieman vähemmän, ja tyyli hieman pienempi. 281 00:12:54,102 --> 00:12:56,060 Mutta pitää mind-- tyyliin on ehkä helpoin 282 00:12:56,060 --> 00:12:58,890 Näiden purra kohti tyyliin opas. 283 00:12:58,890 --> 00:13:01,580 >> Ja nyt vakavampi Huomaa akateemiseen rehellisyys. 284 00:13:01,580 --> 00:13:05,000 CS50 on valitettava ero on suurin tuottaja Ad Board 285 00:13:05,000 --> 00:13:07,330 tapauksia lähes vuosittain historiallisesti. 286 00:13:07,330 --> 00:13:11,012 Tämä ei johdu opiskelijat huijata CS50 sen enempää kuin mikä tahansa muu luokka, 287 00:13:11,012 --> 00:13:13,720 mutta koska luonteeltaan työn, se, että se on elektroninen, 288 00:13:13,720 --> 00:13:16,636 että etsimme sitä, ja Itse asiassa olemme tietotekniikan tutkijoita, 289 00:13:16,636 --> 00:13:20,570 Voin sanoa, että olemme valitettavasti erittäin hyvä havaitsemaan sitä. 290 00:13:20,570 --> 00:13:22,710 >> Mitä tämä tarkoittaa reaalisesti? 291 00:13:22,710 --> 00:13:24,820 Joten se, per oppimäärän, Kurssin filosofia 292 00:13:24,820 --> 00:13:28,090 todellakin pohjimmiltaan olla kohtuullinen. 293 00:13:28,090 --> 00:13:31,684 On tämä rivi välillä tekee omaan työhön oman 294 00:13:31,684 --> 00:13:34,100 ja saada hieman kohtuullista apua ystävältä, 295 00:13:34,100 --> 00:13:38,020 ja suoranainen tee sitä työtä varten ystävä, tai lähettämällä hänelle koodi 296 00:13:38,020 --> 00:13:41,080 niin että hän voi yksinkertaisesti ottaa tai lainata sitä oikeaa. 297 00:13:41,080 --> 00:13:43,580 Ja joka ylittää linjan että me piirretään luokassa. 298 00:13:43,580 --> 00:13:45,410 >> Katso, oppimäärä Viime kädessä linjat 299 00:13:45,410 --> 00:13:48,209 että vedämme olevan kohtuullinen ja kohtuuton käytös, 300 00:13:48,209 --> 00:13:50,000 mutta se todellakin kiehua alas ydin 301 00:13:50,000 --> 00:13:53,980 työsi tarvitsematta olla oma lopussa. 302 00:13:53,980 --> 00:13:56,230 Nyt, että sanoi, on heuristinen. 303 00:13:56,230 --> 00:13:58,980 Koska kuten ehkä imagine-- alkaen virka ja grafiikka 304 00:13:58,980 --> 00:14:01,060 ja videot olemme esitetään näin far-- CS50 305 00:14:01,060 --> 00:14:04,530 on todellakin tarkoitus olla yhteisinä ja osuuskunta ja sosiaalista 306 00:14:04,530 --> 00:14:06,450 kuin mahdollista. 307 00:14:06,450 --> 00:14:08,570 Yhteisinä kuin se on tiukka. 308 00:14:08,570 --> 00:14:11,314 >> Mutta tämä sanoi, heuristinen, kuten näet vuonna oppimäärän, 309 00:14:11,314 --> 00:14:12,980 on, että kun sinulla on jokin ongelma. 310 00:14:12,980 --> 00:14:16,470 Sinulla on bugi koodissa, että olet voi ratkaista, on kohtuullista sinulle 311 00:14:16,470 --> 00:14:18,039 näyttää koodin toiselle. 312 00:14:18,039 --> 00:14:21,080 Kaverisi vielä luokassa, ystävä istuu vieressäsi virka, 313 00:14:21,080 --> 00:14:22,680 tai henkilökunnan jäsen. 314 00:14:22,680 --> 00:14:25,810 Mutta ne eivät saa näyttää koodia sinulle. 315 00:14:25,810 --> 00:14:27,710 >> Toisin sanoen, vastaus question-- 316 00:14:27,710 --> 00:14:29,940 Tarvitsen help-- ei oi, tässä on minun koodi. 317 00:14:29,940 --> 00:14:32,440 Katsokaa tätä ja päätellä siitä, mitä haluatte. 318 00:14:32,440 --> 00:14:34,580 Nyt tietenkin, siellä on tapa selvästi peli 319 00:14:34,580 --> 00:14:37,760 Tämän järjestelmän, jossa näytän sinulle minun koodi ennen kuin kysymys. 320 00:14:37,760 --> 00:14:40,150 Näytät minulle koodin ennen kuin kysymys. 321 00:14:40,150 --> 00:14:45,870 Mutta katso oppimäärän uudelleen tarkempia yksityiskohtia jos tämä linja on. 322 00:14:45,870 --> 00:14:50,606 >> Juuri nyt maalata kuvan ja jakamaan mahdollisimman avoimesti 323 00:14:50,606 --> 00:14:53,480 missä olemme viime vuosina, tämä on numero Ad hallituksen tapauksista 324 00:14:53,480 --> 00:14:56,260 että CS50 on ollut yli Viimeisten seitsemän vuoden aikana. 325 00:14:56,260 --> 00:14:58,717 14 tapausta tämän viimeisimmän syksynä. 326 00:14:58,717 --> 00:15:01,300 Mitä opiskelijoiden mukana, se oli 20 jostain kumman opiskelijat 327 00:15:01,300 --> 00:15:02,490 viime syksynä. 328 00:15:02,490 --> 00:15:05,670 Oli huippu 33 opiskelijat joitakin vuosia sitten. 329 00:15:05,670 --> 00:15:08,830 Joista monet ovat valitettavasti enää täällä kampuksella. 330 00:15:08,830 --> 00:15:13,100 >> Opiskelija mukana prosentteina luokka on perinteisesti vaihdellut 0% 331 00:15:13,100 --> 00:15:17,300 5,3%: iin, joka on vain sanoa tämä on vuosittain haaste. 332 00:15:17,300 --> 00:15:20,390 Ja kohti tätä varten, mitä haluamme tehdä, on välittää yhden 333 00:15:20,390 --> 00:15:24,310 että me dd-- vain FYI-- vertaa at oikeudenmukaisuus niille opiskelijoille, jotka 334 00:15:24,310 --> 00:15:26,520 ovat seuraavat riviä vastaavasti. 335 00:15:26,520 --> 00:15:29,620 Teemme vertaa tämänhetkiset näkökannat vastaan ​​kaikki aiemmat tehtävät 336 00:15:29,620 --> 00:15:30,840 menneisyyden monta vuotta. 337 00:15:30,840 --> 00:15:33,620 >> Tiedämme myös, miten Googlen ympärillä ja löytää koodi arkistot 338 00:15:33,620 --> 00:15:36,360 verkossa, keskustelufoorumit verkossa, työmailla verkossa. 339 00:15:36,360 --> 00:15:41,580 Jos opiskelija ei löydä sitä, voimme varmasti löytää sitä niin paljon kuin me valitettavasti tehdä. 340 00:15:41,580 --> 00:15:45,330 Joten mitä näet vuonna oppimäärä vaikka tämä pahoillani lauseke. 341 00:15:45,330 --> 00:15:47,500 Voin varmasti arvostavat, ja me kaikki on 342 00:15:47,500 --> 00:15:50,870 Henkilökunta tehneet kurssin kuten tämä tai tämä itsestään ajan myötä, 343 00:15:50,870 --> 00:15:53,997 varmasti tietää, miltä tuntuu, kun elämä tulee tielle, kun olet 344 00:15:53,997 --> 00:15:56,080 myöhäiseen yöhön deadline-- ei vain tässä luokassa, 345 00:15:56,080 --> 00:15:58,660 mutta another-- kun olet täysin uupunut, stressaantunut, 346 00:15:58,660 --> 00:16:00,659 on kohtuuton määrä Muiden asioita. 347 00:16:00,659 --> 00:16:03,660 Teet jossain vaiheessa elämä varmasti huono, ehkä myöhään 348 00:16:03,660 --> 00:16:04,620 yö päätös. 349 00:16:04,620 --> 00:16:06,520 >> Joten kohti oppimäärän, on tämä lauseke, 350 00:16:06,520 --> 00:16:10,629 niin että jos 72 tunnin kuluessa tehdä jotkut köyhät päätös, omistat sen tasalla 351 00:16:10,629 --> 00:16:12,670 ja tavoittaa minua ja yksi kurssin päät 352 00:16:12,670 --> 00:16:14,300 ja saamme keskustelun. 353 00:16:14,300 --> 00:16:16,220 Hoidamme asiat sisäisesti toiveita 354 00:16:16,220 --> 00:16:18,770 siitä tulossa enemmän Opetuksen hetki tai elämän oppitunti, 355 00:16:18,770 --> 00:16:22,120 eikä jotain erityisen rajuja seurauksia 356 00:16:22,120 --> 00:16:24,570 niin saatat nähdä näitä kaavioita täällä. 357 00:16:24,570 --> 00:16:26,540 >> Niin, että hyvin vakava sävy. 358 00:16:26,540 --> 00:16:29,960 Olkaamme tauko vain muutaman sekuntia rikkoa jännitteitä. 359 00:16:29,960 --> 00:16:34,442 >> [Musiikki soi] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. MALAN: Okei, niin miten tuo oli Segue? 362 00:17:20,250 --> 00:17:22,059 Nykypäivän ensisijainen aiheista. 363 00:17:22,059 --> 00:17:23,859 Joista ensimmäinen on abstraktio. 364 00:17:23,859 --> 00:17:26,900 Joista toinen tulee olemaan tietojen esittämisessä, joka suoraan sanottuna 365 00:17:26,900 --> 00:17:31,640 on todella kuiva tapa sanoa kuinka voimme edetä ongelmien ratkaisemiseen ja ajattelu 366 00:17:31,640 --> 00:17:33,250 noin ongelmien ratkaisemiseen? 367 00:17:33,250 --> 00:17:37,285 Joten olet nähnyt Scratch, ja olet nähdään ehkä jo pset1 C 368 00:17:37,285 --> 00:17:39,930 että et vain voi käyttää toimintoja, kuten printf, 369 00:17:39,930 --> 00:17:42,770 että muut ihmiset takavuosina kirjoitti sinulle. 370 00:17:42,770 --> 00:17:45,340 Voit myös kirjoittaa omia funktioita. 371 00:17:45,340 --> 00:17:48,440 >> Ja vaikka sinulla ei ehkä ole tehnyt tämän C, ja suoraan sanottuna vuonna pset1 372 00:17:48,440 --> 00:17:51,866 et todellakaan tarvitse kirjoittaa oma toiminta, koska problem-- 373 00:17:51,866 --> 00:17:53,990 vaikka ehkä pelottava Ensimmäinen glance-- näet 374 00:17:53,990 --> 00:17:57,910 voidaan viime kädessä ratkaista ole kovin monta riviä koodia. 375 00:17:57,910 --> 00:18:01,140 Mutta että sanoi, mitä kirjallisesti oman toiminnon, 376 00:18:01,140 --> 00:18:03,570 ymmärtää, että C ei anna te tätä ominaisuutta. 377 00:18:03,570 --> 00:18:06,940 >> Aion mennä tänään lähdekoodia, joka on saatavilla jo verkossa, 378 00:18:06,940 --> 00:18:10,900 ja aion mennä eteenpäin ja avata up ohjelma nimeltä toiminto 0.C, 379 00:18:10,900 --> 00:18:14,620 ja toiminnaltaan nolla näemme muutamia asioita. 380 00:18:14,620 --> 00:18:19,160 Ensimmäisessä linjat 18 kautta 23 on minun tärkein toiminto. 381 00:18:19,160 --> 00:18:22,414 Ja nyt kun olemme alkaneet lukea koodin että emme kirjallisesti lennossa, 382 00:18:22,414 --> 00:18:25,080 mutta sen sijaan olen kirjoittanut aiemmin tai että sinulla on ongelma asetettu 383 00:18:25,080 --> 00:18:27,910 saisivat ottaa kirjoitettu etukäteen. 384 00:18:27,910 --> 00:18:30,040 Hyvä tapa aloittaa lukee jonkun toisen koodin 385 00:18:30,040 --> 00:18:31,400 on etsiä päätehtävä. 386 00:18:31,400 --> 00:18:34,420 Selvittää missä kyseinen nimike kohta on käynnissä ohjelma, 387 00:18:34,420 --> 00:18:36,580 ja sitten seuraa se loogisesti sieltä. 388 00:18:36,580 --> 00:18:40,190 >> Joten tämä ohjelma ilmeisesti tulostaa nimesi seuraa kaksoispiste. 389 00:18:40,190 --> 00:18:42,490 Tämän jälkeen käytämme GetString alkaen CS50 kirjastosta 390 00:18:42,490 --> 00:18:46,050 saada merkkijono tai sana tai lause käyttäjän näppäimistöllä. 391 00:18:46,050 --> 00:18:48,390 Ja sitten on tämä asia here-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Nyt PrintName ei ole toiminto, joka tulee C. 393 00:18:51,420 --> 00:18:52,970 Se ei ole tavallinen io.h. 394 00:18:52,970 --> 00:18:55,570 Se ei ole CS50.h. 395 00:18:55,570 --> 00:18:57,880 Se on melko samaan tiedostoon. 396 00:18:57,880 --> 00:19:01,000 Huomaa jos en selaa bit-- linjat 25 27-- 397 00:19:01,000 --> 00:19:05,330 se on vain kaunis tapa kommentoi koodia käyttäen tähdet ja viiltää. 398 00:19:05,330 --> 00:19:07,320 Tämä on multi-line kommentoida, ja tämä on vain 399 00:19:07,320 --> 00:19:10,570 Oma kuvaus sininen mitä tämä toiminto tekee. 400 00:19:10,570 --> 00:19:14,530 >> Koska linjat 28 kautta 31, Olen kirjoittanut Super yksinkertainen funktio 401 00:19:14,530 --> 00:19:16,280 jonka nimi on PrintName. 402 00:19:16,280 --> 00:19:19,560 Se kestää kuinka monta perusteluja sanoisit? 403 00:19:19,560 --> 00:19:25,120 Joten argument-- koska siellä on yksi argumentti lueteltu sulkujen sisään. 404 00:19:25,120 --> 00:19:27,000 Tyyppi on String. 405 00:19:27,000 --> 00:19:30,240 Toisin sanoen PrintName on kuin tämä musta laatikko 406 00:19:30,240 --> 00:19:32,910 tai funktio, joka vie syötteenä merkkijonon. 407 00:19:32,910 --> 00:19:35,730 >> Ja nimi, että String sopivasti tulee nimi. 408 00:19:35,730 --> 00:19:37,840 Ei S, ei N, mutta nimi. 409 00:19:37,840 --> 00:19:41,090 Joten mitä PrintName tehdä? 410 00:19:41,090 --> 00:19:42,210 Se on mukava yksinkertainen. 411 00:19:42,210 --> 00:19:45,390 Vain yksi rivi koodia varten printf, mutta ilmeisesti se 412 00:19:45,390 --> 00:19:47,950 tulostaa "Hei," niin ja niin. 413 00:19:47,950 --> 00:19:50,070 Jos niin ja niin tulee argumentti. 414 00:19:50,070 --> 00:19:52,300 >> Nyt tämä ei ole valtava innovaatio täällä. 415 00:19:52,300 --> 00:19:56,710 Oikeasti, olen ottanut ohjelmaa, jossa voitaisiin on kirjoitettu yhtä riviä koodia 416 00:19:56,710 --> 00:20:00,190 laittamalla tämän tänne, ja muuttanut sen joksikin 417 00:20:00,190 --> 00:20:04,920 johon liittyy noin kuusi tai seitsemän tai niin riviä koodia myöten tänne. 418 00:20:04,920 --> 00:20:08,190 >> Mutta se harjoittamisen periaate tunnetaan abstraktio. 419 00:20:08,190 --> 00:20:12,550 Eräänlainen kapselointi sisällä uuden toiminto, joka on nimi, ja parempi 420 00:20:12,550 --> 00:20:14,590 vielä, että nimi kirjaimellisesti kertoo mitä se tekee. 421 00:20:14,590 --> 00:20:16,880 Tarkoitan printf-- että ei ole Erityisen kuvaileva. 422 00:20:16,880 --> 00:20:18,932 Jos haluan luoda palapelin pala, tai jos olen 423 00:20:18,932 --> 00:20:21,140 haluavat luoda funktion joka tulostaa jonkun nimi, 424 00:20:21,140 --> 00:20:23,230 kauneus Näin on, että voin itse 425 00:20:23,230 --> 00:20:27,170 antaa tämän tehtävän nimi joka kuvaa, mitä se tekee. 426 00:20:27,170 --> 00:20:29,844 >> Nyt se vie tulo, joka Olen mielivaltaisesti kutsutaan nimellä, 427 00:20:29,844 --> 00:20:32,760 mutta sekin on ihanan kuvaileva sen sijaan, on hieman enemmän 428 00:20:32,760 --> 00:20:36,140 geneerinen kuten S. Ja mitätön, ja nyt vain tarkoittaa 429 00:20:36,140 --> 00:20:38,330 että tämä toiminto ei ojennatko takaisin mitään. 430 00:20:38,330 --> 00:20:41,127 Eihän GetString että kirjaimellisesti kädet minut takaisin merkkijonon 431 00:20:41,127 --> 00:20:43,960 kuten teimme paperinpaloja teidän luokkatoverit viime viikolla, 432 00:20:43,960 --> 00:20:45,990 vaan se vain on sivuvaikutus. 433 00:20:45,990 --> 00:20:48,080 Se tulostaa jotain näyttöä. 434 00:20:48,080 --> 00:20:53,880 >> Joten lopussa päivä, jos en älä tee toiminto-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 näemme, että se kysyy nimeni. 436 00:20:55,450 --> 00:20:58,150 Kirjoitan David, ja se tyypit nimeäni. 437 00:20:58,150 --> 00:21:01,080 Jos teen sen uudelleen Rob, se tulee sanoa "Hei, Rob." 438 00:21:01,080 --> 00:21:04,280 Niin yksinkertainen idea, mutta ehkä yleistää tämän henkisesti 439 00:21:04,280 --> 00:21:06,750 että ohjelmat saavat hieman monimutkaisempi, 440 00:21:06,750 --> 00:21:10,290 ja haluat kirjoittaa kimpale koodi ja soittaa että code-- kutsukomponentin 441 00:21:10,290 --> 00:21:13,270 että code-- noin kuvaileva nimi kuten PrintName, 442 00:21:13,270 --> 00:21:15,600 C ei varaa meille tämä kyky. 443 00:21:15,600 --> 00:21:17,660 >> Tässä toinen yksinkertainen esimerkki. 444 00:21:17,660 --> 00:21:22,940 Esimerkiksi jos avaan ylös Tiedosto kehotti tänään return.c, 445 00:21:22,940 --> 00:21:24,270 huomaa, mitä olen tehnyt täällä. 446 00:21:24,270 --> 00:21:26,330 Suurin osa tästä päätehtävä on printf. 447 00:21:26,330 --> 00:21:30,360 Haluan ensin mielivaltaisesti alustaa muuttuja nimeltä x numero 2. 448 00:21:30,360 --> 00:21:34,110 Sitten tulostaa "x on nyt % I "ohimennen arvon x. 449 00:21:34,110 --> 00:21:35,500 Joten sanon vain, mitä se on. 450 00:21:35,500 --> 00:21:37,208 >> Nyt olen vain rohkeasti väittäen kanssa printf. 451 00:21:37,208 --> 00:21:42,050 Olen cubing että arvo x, ja olen Näin kutsumalla toiminto 452 00:21:42,050 --> 00:21:45,590 nimeltään kuutio kulkee vuonna x argumentiksi, 453 00:21:45,590 --> 00:21:49,300 ja tallentamalla lähtö ja itse muuttujan, x. 454 00:21:49,300 --> 00:21:51,340 Joten olen clobbering arvo x. 455 00:21:51,340 --> 00:21:53,380 Olen pakottavista arvo x kanssa, mitä 456 00:21:53,380 --> 00:21:56,510 tulos kutsuvan tämä kuutio toiminto on. 457 00:21:56,510 --> 00:21:59,530 Ja sitten vain tulostaa joitakin pörröinen tavaraa täällä sanoa mitä tein. 458 00:21:59,530 --> 00:22:01,600 >> Niin mikä sitten on kuutio? 459 00:22:01,600 --> 00:22:03,510 Huomaa mitä on pohjimmiltaan täällä erilainen. 460 00:22:03,510 --> 00:22:05,540 Olen antanut toiminto nimi kuin ennen. 461 00:22:05,540 --> 00:22:08,270 Olen määritellyt nimi argumentti. 462 00:22:08,270 --> 00:22:11,650 Tällä kertaa se on nimeltään n sijasta nimi, mutta voisin kutsua sitä mitä haluan. 463 00:22:11,650 --> 00:22:12,650 Mutta tämä on erilainen. 464 00:22:12,650 --> 00:22:14,080 Tämä juttu vasemmalla. 465 00:22:14,080 --> 00:22:16,290 Aiemmin se oli mitä avainsanan? 466 00:22:16,290 --> 00:22:16,870 Pojat. 467 00:22:16,870 --> 00:22:18,580 Nyt on ilmeisesti int. 468 00:22:18,580 --> 00:22:20,630 >> Joten mitä ehkä ottaa pois? 469 00:22:20,630 --> 00:22:24,090 Ottaa huomioon, että void ilmaisee, eräänlainen tyhjyyteen, ja näin oli. 470 00:22:24,090 --> 00:22:25,970 PrintName palasi mitään. 471 00:22:25,970 --> 00:22:27,942 Se teki jotain, mutta se ei Ojentaisitko takaisin 472 00:22:27,942 --> 00:22:30,650 jotain, että voisin laittaa vasemmalla puolella yhtäläisyysmerkki 473 00:22:30,650 --> 00:22:32,460 kuten olen tehnyt täällä linjalla 22. 474 00:22:32,460 --> 00:22:36,780 >> Joten jos sanon osaksi linjalla 30, mikä se luultavasti merkitsee 475 00:22:36,780 --> 00:22:38,610 mitä kuutio tekee minulle? 476 00:22:38,610 --> 00:22:41,110 Joo? 477 00:22:41,110 --> 00:22:42,310 Se palauttaa kokonaisluvun. 478 00:22:42,310 --> 00:22:44,590 Joten se ojentaa minulle takaisin, sillä Esimerkiksi paperille 479 00:22:44,590 --> 00:22:46,580 johon se on kirjoitettu vastaus. 480 00:22:46,580 --> 00:22:50,130 2 kuutioitu tai 3 kuutioitu tai 4 cubed-- mitä ohitin vuonna, 481 00:22:50,130 --> 00:22:51,540 ja miten voin toteuttaa tämän? 482 00:22:51,540 --> 00:22:54,810 No, vain n kertaa n kertaa n miten voisin kuution arvoa. 483 00:22:54,810 --> 00:22:57,110 Joten jälleen, super yksinkertainen Ajatus, mutta demonstratiivinen 484 00:22:57,110 --> 00:23:00,100 nyt miten voimme kirjoittaa toimintoja että todella oli meidät takaisin 485 00:23:00,100 --> 00:23:02,380 arvot, jotka saattavat kiinnostaa. 486 00:23:02,380 --> 00:23:05,740 >> Katsotaanpa yksi viimeinen esimerkki täällä kutsutaan funktio yksi. 487 00:23:05,740 --> 00:23:08,530 Tässä esimerkissä, se alkaa saada enemmän pakottavia. 488 00:23:08,530 --> 00:23:12,400 Joten toiminto yhdessä, tämä program-- huomautus lopulta 489 00:23:12,400 --> 00:23:14,920 kutsuu funktiota kutsutaan GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt ei ole toiminto CS50 kirjastossa, 491 00:23:17,800 --> 00:23:20,400 mutta päätimme haluaisi sen olevan olemassa. 492 00:23:20,400 --> 00:23:24,550 >> Joten jos me selaa myöhemmin tiedoston, huomaa kuinka menin panna täytäntöön 493 00:23:24,550 --> 00:23:26,560 saada myönteisiä int, ja minä sanovat, että se on enemmän pakottavia 494 00:23:26,560 --> 00:23:28,992 koska tämä on kunnollinen rivejä koodia. 495 00:23:28,992 --> 00:23:30,700 Se ei ole vain typerä pikku lelu ohjelma. 496 00:23:30,700 --> 00:23:33,870 Se on itse saanut joitakin virheentarkistus ja tehdä jotain hyödyllisempää. 497 00:23:33,870 --> 00:23:38,470 >> Joten jos et ole nähnyt walkthrough videoita, jotka olemme upotettu pset1, 498 00:23:38,470 --> 00:23:42,350 tietävät, että tämä on eräänlainen silmukka C, hengeltään samanlainen 499 00:23:42,350 --> 00:23:44,270 , minkälaisia ​​asioita Scratch voi tehdä. 500 00:23:44,270 --> 00:23:46,320 Ja tehdä sanoo tähän. 501 00:23:46,320 --> 00:23:47,500 Tulosta tämä ulos. 502 00:23:47,500 --> 00:23:51,860 Sitten mennä eteenpäin ja saada n- saada int ja säilytä sitä n, 503 00:23:51,860 --> 00:23:55,760 ja jatkaa tätä uudestaan ​​ja uudestaan ​​ja jälleen niin kauan kuin n on pienempi kuin yksi. 504 00:23:55,760 --> 00:23:58,720 >> Joten n tulee olla pienempi kuin yksi vain, jos ihminen ei ole yhteistyötä. 505 00:23:58,720 --> 00:24:01,980 Jos hän on kirjoittaa vuonna 0 tai -1 tai -50, 506 00:24:01,980 --> 00:24:04,790 tämä silmukka on menossa pitämään täytäntöönpanosta uudestaan ​​ja uudestaan. 507 00:24:04,790 --> 00:24:07,549 Ja lopulta huomaa, minä palauta arvoa. 508 00:24:07,549 --> 00:24:09,590 Joten nyt meillä on funktio että olisi ollut kiva 509 00:24:09,590 --> 00:24:14,040 jos CS50 voisi toteuttaa CS50.h ja CS50.c sinulle, 510 00:24:14,040 --> 00:24:16,520 mutta täällä voimme nyt toteuttaa tämän itse. 511 00:24:16,520 --> 00:24:19,230 >> Mutta kaksi kommenttia joitakin tärkeitä yksityiskohtia. 512 00:24:19,230 --> 00:24:24,390 One-- miksi Vakuutan int n, luuletko, on line 29 513 00:24:24,390 --> 00:24:27,139 sijaan juuri tekemässä tämä täällä, joka on 514 00:24:27,139 --> 00:24:28,930 johdonmukaisempaa mitä teimme viime viikolla? 515 00:24:28,930 --> 00:24:29,430 Joo? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Hyvä ajatus. 518 00:24:35,110 --> 00:24:37,080 Joten jos me laittaa se täällä, se on ikään kuin me 519 00:24:37,080 --> 00:24:39,110 pitää julistaa sitä uudestaan ​​ja uudestaan. 520 00:24:39,110 --> 00:24:42,000 Että itsessään on ei ongelmallista, sinänsä, 521 00:24:42,000 --> 00:24:43,940 koska meidän tarvitsee vain arvo kerran ja sitten 522 00:24:43,940 --> 00:24:45,330 aiomme saada uuden muutenkin. 523 00:24:45,330 --> 00:24:45,940 Mutta hyvä ajatus. 524 00:24:45,940 --> 00:24:46,440 Joo? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Lähellä. 527 00:24:53,330 --> 00:24:59,030 Joten koska olen julistanut n päälle linja 29 ulkopuolella silmukan, 528 00:24:59,030 --> 00:25:01,390 se on käytettävissä kaikkialla tämä koko toiminto. 529 00:25:01,390 --> 00:25:05,400 Ei muita toimintoja, koska n on vielä sisällä näitä kihara 530 00:25:05,400 --> 00:25:06,470 olkaimet täällä. 531 00:25:06,470 --> 00:25:07,940 Joten-- varma. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Täsmälleen. 534 00:25:12,940 --> 00:25:14,356 Joten tämä on vielä siihen pisteeseen. 535 00:25:14,356 --> 00:25:18,600 Jos sen sijaan julisti n täällä linjalla 32, 536 00:25:18,600 --> 00:25:22,340 se on ongelmallinen, koska arvaus missä muualla minun täytyy käyttää sitä? 537 00:25:22,340 --> 00:25:25,620 Rivillä 34, ja Yksinkertainen nyrkkisääntö on 538 00:25:25,620 --> 00:25:30,060 että voit käyttää vain muuttujan sisällä viimeisimmän aaltosulkeita 539 00:25:30,060 --> 00:25:31,420 jossa olet ilmoittanut sen. 540 00:25:31,420 --> 00:25:35,230 >> Valitettavasti, rivi 34 on yksi rivi liian myöhään, 541 00:25:35,230 --> 00:25:38,560 koska olen jo suljettu kihara ahdin linjalla 33 542 00:25:38,560 --> 00:25:41,220 , joka vastaa kihara ahdin linjalla 30. 543 00:25:41,220 --> 00:25:44,180 Ja niin tämä on tapa sanoa että tämä muuttuja int on scoped, 544 00:25:44,180 --> 00:25:46,970 niin sanotusti vain sisällä Näiden aaltosulkeita. 545 00:25:46,970 --> 00:25:48,910 Se vain ei ole olemassa niiden ulkopuolella. 546 00:25:48,910 --> 00:25:51,580 >> Joten todellakin, jos en tee tätä väärin, haluan pelastaa koodi 547 00:25:51,580 --> 00:25:53,530 koska se on-- virheellisesti kirjoitettu. 548 00:25:53,530 --> 00:25:57,990 Anna minun mennä eteenpäin ja tekevät toiminta-1, ja notice-- virhe. 549 00:25:57,990 --> 00:26:03,502 Käytä pimeän tunnisteen n rivillä 35, joka on täällä. 550 00:26:03,502 --> 00:26:05,210 Ja jos me vierittää ylös Edelleen toinen. 551 00:26:05,210 --> 00:26:08,750 Käytä pimeän tunniste n linjalla 34. 552 00:26:08,750 --> 00:26:11,200 >> Niin kääntäjä, kalahtaa, on huomata, että se vain 553 00:26:11,200 --> 00:26:13,720 ei ole olemassa, vaikka selvästi se on siellä visuaalisesti. 554 00:26:13,720 --> 00:26:16,090 Niin yksinkertainen korjata julistaa sen sinne. 555 00:26:16,090 --> 00:26:18,790 >> Nyt haluan selaa tiedoston alkuun. 556 00:26:18,790 --> 00:26:21,080 Mitä hyppää ulos sinua niin on hieman erilainen 557 00:26:21,080 --> 00:26:23,070 alkaen kamaa me katsoimme viime viikolla? 558 00:26:23,070 --> 00:26:26,990 Ei vain minulla on nimi, ei vain tehdä Minulla on joitakin teräviä sisältää alkuun asti, 559 00:26:26,990 --> 00:26:29,340 Minulla on jotain olen soittamalla prototyyppi. 560 00:26:29,340 --> 00:26:36,100 Nyt näyttää hirveän samanlainen kuin mitä me vain näki hetki sitten linjalla 27. 561 00:26:36,100 --> 00:26:39,230 >> Joten päätellä eri virheilmoitus miksi olen tehnyt tämän. 562 00:26:39,230 --> 00:26:42,050 Anna minun mennä eteenpäin ja poistaa nämä linjat siellä. 563 00:26:42,050 --> 00:26:44,240 Ja niin me tiedä mitään prototyyppi. 564 00:26:44,240 --> 00:26:45,430 Remake tätä tiedostoa. 565 00:26:45,430 --> 00:26:46,890 Tee funktio yksi. 566 00:26:46,890 --> 00:26:48,090 Ja nyt, perkele, neljä virhettä. 567 00:26:48,090 --> 00:26:50,220 Katsotaanpa selaa jopa ensimmäinen. 568 00:26:50,220 --> 00:26:55,070 >> Implisiittinen ilmoitus toiminto saada myönteisiä int on pätemätön C99. 569 00:26:55,070 --> 00:26:57,780 C99 tarkoittaa vain 1999 versio kieli 570 00:26:57,780 --> 00:26:59,710 C, joka on mitä me todella käyttävät. 571 00:26:59,710 --> 00:27:01,050 Mitä tämä tarkoittaa? 572 00:27:01,050 --> 00:27:05,250 Hyvin C-- ja erityisesti C compilers-- ovat aika tyhmiä ohjelmia. 573 00:27:05,250 --> 00:27:07,420 He vain tietävät, mitä olet kertoi heille, ja se on 574 00:27:07,420 --> 00:27:08,960 todella temaattinen viime viikolla. 575 00:27:08,960 --> 00:27:12,910 >> Ongelmana on, että jos menen panna täytäntöön nimi täällä, 576 00:27:12,910 --> 00:27:17,640 Kehotan toiminto nimeltään GetPositiveInt tässä linjalla 20, 577 00:27:17,640 --> 00:27:22,520 että toiminto teknisesti ei olemassa ennen kääntäjä näkee linjan 27. 578 00:27:22,520 --> 00:27:25,450 Valitettavasti kääntäjä on tehdä asioita ylhäältä, alas, vasemmalle, oikealle, 579 00:27:25,450 --> 00:27:29,580 niin, koska se ei ole nähnyt täytäntöönpano GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 mutta se näkee Yritätkö käyttää sitä täällä, 581 00:27:32,400 --> 00:27:35,810 se on juuri menossa bail-- huutaa sinulle virheestä message-- ehkä 582 00:27:35,810 --> 00:27:38,440 arvoituksellinen, eikä oikeastaan koota tiedosto. 583 00:27:38,440 --> 00:27:41,940 >> Joten ns prototyyppi up tässä tosin tarpeeton. 584 00:27:41,940 --> 00:27:47,870 Kirjaimellisesti, menin tänne ja olen kopioinut ja liittää tähän, ja laitoin sen tänne. 585 00:27:47,870 --> 00:27:51,020 Void olisi oikea, niin me kirjaimellisesti kopioi ja liitä se tällä kertaa. 586 00:27:51,020 --> 00:27:52,854 Olen kirjaimellisesti kopioida ja liittää se. 587 00:27:52,854 --> 00:27:54,270 Oikeastaan ​​yhtä kuin leipä murunen. 588 00:27:54,270 --> 00:27:56,260 >> Hieman vihjeen kääntäjä. 589 00:27:56,260 --> 00:27:58,860 En tiedä mitä tämä tekee vielä, mutta olen lupaavat sinulle 590 00:27:58,860 --> 00:28:00,260 että se esiintyy lopulta. 591 00:28:00,260 --> 00:28:04,010 Ja siksi tämä line-- vuonna line 16-- päättyy pilkkuun. 592 00:28:04,010 --> 00:28:05,486 On turha virhe. 593 00:28:05,486 --> 00:28:05,986 Kyllä? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Jos et linkittää kirjastoon to sanot-- oh, hyvä kysymys. 596 00:28:14,360 --> 00:28:17,350 Sharp sisältää header-tiedosto sulkeumia. 597 00:28:17,350 --> 00:28:20,040 Tarve olet-- olisi lähes aina huipulla 598 00:28:20,040 --> 00:28:23,270 Tiedoston varten similar-- varten täsmälleen samasta syystä, kyllä. 599 00:28:23,270 --> 00:28:26,430 Koska standardi io.h on kirjaimellisesti linja 600 00:28:26,430 --> 00:28:30,560 näin, mutta sana printf, ja sen väitteisiin ja palautuva. 601 00:28:30,560 --> 00:28:33,310 Ja niin tekemällä teräviä olla enintään täällä, mitä olet kirjaimellisesti tekemässä 602 00:28:33,310 --> 00:28:36,380 on kopioida ja liittää sisältöä joku muu kirjoitti alkuun asti. 603 00:28:36,380 --> 00:28:39,660 Näin cluing koodi sisään Se, että nämä toiminnot ovat olemassa. 604 00:28:39,660 --> 00:28:40,160 Joo? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Ehdottomasti. 607 00:28:48,260 --> 00:28:51,690 Joten erittäin taitava ja oikea ratkaisu olisi, tiedätkö mitä? 608 00:28:51,690 --> 00:28:53,760 En tiedä mitä Prototyyppi on, mutta tiedän 609 00:28:53,760 --> 00:28:56,390 jos olen ymmärtänyt, että C on vain tyhmä ja mietitään uudestaan ​​ylhäältä alas. 610 00:28:56,390 --> 00:28:57,820 No katsotaanpa antaa sille mitä se haluaa. 611 00:28:57,820 --> 00:29:01,650 Leikataan että koodi, liitä se alkuun, ja nyt työntää tärkeimmät alhaalla. 612 00:29:01,650 --> 00:29:03,470 Myös tämä ratkaisisi ongelman. 613 00:29:03,470 --> 00:29:07,409 >> Mutta voit helposti keksiä skenaario, jossa täytyy soittaa B, 614 00:29:07,409 --> 00:29:10,075 ja ehkä B kutsuu takaisin A. Tämä on jotain kutsutaan rekursio, 615 00:29:10,075 --> 00:29:11,370 ja me palaamme siihen. 616 00:29:11,370 --> 00:29:13,911 Ja se voi olla tai ei voi olla hyvä asia, mutta voit varmasti 617 00:29:13,911 --> 00:29:15,110 rikkoa tätä ratkaisua. 618 00:29:15,110 --> 00:29:17,690 >> Ja lisäksi haluan väittävät tyylillisesti, 619 00:29:17,690 --> 00:29:20,760 varsinkin kun ohjelmia tullut tämän pitkän ja tämän pitkän, 620 00:29:20,760 --> 00:29:23,064 se on vain erittäin kätevä laittaa tärkeimmät huipulla 621 00:29:23,064 --> 00:29:25,730 koska se on asia, useimmat ohjelmoijat ovat menossa välitä. 622 00:29:25,730 --> 00:29:28,150 Ja niin se on vähän puhtaampi, Ilmeisesti tehdä se tavalla 623 00:29:28,150 --> 00:29:30,380 Olen alun perin tein sen kanssa prototyyppi jopa 624 00:29:30,380 --> 00:29:33,396 vaikka se näyttää hieman tarpeeton ensi silmäyksellä. 625 00:29:33,396 --> 00:29:33,895 Joo? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Anteeksi, voit sanoa sen kovempaa? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Jos vaihdat sijainnit täytäntöönpanoa ja prototyyppi? 630 00:29:49,580 --> 00:29:51,270 Niin se on hyvä kysymys. 631 00:29:51,270 --> 00:29:53,780 Jos uudelleen julistaa tämän alas täällä, katsotaanpa mitä tapahtuu. 632 00:29:53,780 --> 00:29:55,530 Joten jos laitan tähän alas täällä, sanot. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Anteeksi. 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 Jopa kovempaa. 638 00:30:04,011 --> 00:30:04,760 Voi, hyvä kysymys. 639 00:30:04,760 --> 00:30:05,860 Olisiko mitätöidä toiminto? 640 00:30:05,860 --> 00:30:08,901 Tiedäthän, kaikkien näiden vuosien jälkeen, olen ole koskaan laittaa prototyyppi jälkeenpäin. 641 00:30:08,901 --> 00:30:13,810 Tehdäänpä tehdä toiminto-1 kun tekee niin. 642 00:30:13,810 --> 00:30:15,279 >> [Mutisten] 643 00:30:15,279 --> 00:30:16,320 DAVID J. MALAN: Hetkinen. 644 00:30:16,320 --> 00:30:17,944 Meillä on vielä laittaa kaiken alkuun asti. 645 00:30:17,944 --> 00:30:21,400 Tehdäänpä tämä täällä, jos olen ymmärtää kysymyksen oikein. 646 00:30:21,400 --> 00:30:24,700 Laitan kaiken, mukaan lukien prototyyppi edellä tärkein, 647 00:30:24,700 --> 00:30:28,180 mutta Laitan prototyyppi Alla täytäntöönpanoa. 648 00:30:28,180 --> 00:30:33,190 >> Joten jos teen yhden, Saan takaisin error-- käyttämättömän muuttujan n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Voi, siellä. 651 00:30:37,860 --> 00:30:38,360 Kiitos. 652 00:30:38,360 --> 00:30:39,430 Katsotaanpa, pääsemme eroon tästä. 653 00:30:39,430 --> 00:30:41,304 Se on eri vika, joten katsotaanpa kintaalla. 654 00:30:41,304 --> 00:30:43,910 Katsotaanpa todella nopeasti remake tästä. 655 00:30:43,910 --> 00:30:48,100 >> OK, joten tiedot väitettä ei käyttämä muotomerkkijonoa 656 00:30:48,100 --> 00:30:52,310 n- oi, se johtuu Vaihdoin näihin täällä. 657 00:30:52,310 --> 00:30:55,885 Okei, me tiedämme, mitä vastaus on menossa to-- kunnossa, tässä sitä mennään. 658 00:30:55,885 --> 00:31:00,560 Ah, kiitos positiivinen. 659 00:31:00,560 --> 00:31:03,430 Okei, aion korjata tämän koodin after-- sivuuttaa tässä bugi 660 00:31:03,430 --> 00:31:08,300 koska tämä oli-- se toimii on vastaus. 661 00:31:08,300 --> 00:31:11,560 >> Joten se ei korvaa mitä juuri teit. 662 00:31:11,560 --> 00:31:14,800 Epäilen kääntäjä on kirjoitettu siten, 663 00:31:14,800 --> 00:31:18,420 että se sivuuttaa prototyyppi koska elimistö, niin sanoakseni, 664 00:31:18,420 --> 00:31:20,922 toiminnon on jo toteutettu ylempänä. 665 00:31:20,922 --> 00:31:23,380 Olisin todella kuulla käsikirja kääntäjä 666 00:31:23,380 --> 00:31:26,171 ymmärtää, jos on muita implisiittisesti, mutta ensi silmäyksellä 667 00:31:26,171 --> 00:31:29,290 vain kokeilemalla ja kokeilemalla, ei näytä olevan mitään vaikutusta. 668 00:31:29,290 --> 00:31:30,730 Hyvä kysymys. 669 00:31:30,730 --> 00:31:33,660 >> Joten eteenpäin nyt siirtymässä pois haittavaikutuksia 670 00:31:33,660 --> 00:31:36,660 ovat toimintoja, jotka tekevät jotain visuaalisesti ruudulla printf, 671 00:31:36,660 --> 00:31:38,090 mutta älä palauta arvoa. 672 00:31:38,090 --> 00:31:41,550 Ja toimintoja, jotka ovat paluu arvoja, kuten me juuri nähnyt muutamia. 673 00:31:41,550 --> 00:31:45,350 Meillä on jo nähnyt tämän käsitteen soveltamisalaan, ja näemme tämän uudestaan ​​ja uudestaan. 674 00:31:45,350 --> 00:31:47,210 Mutta nyt taas, Käytä nyrkkisääntö 675 00:31:47,210 --> 00:31:51,410 että muuttuja voidaan käyttää vain sisällä viimeksi avattu 676 00:31:51,410 --> 00:31:54,350 ja suljetun aaltosulkeita kuin me näki kyseisessä esimerkissä. 677 00:31:54,350 --> 00:31:56,910 >> Ja kun huomautti, on ability-- 678 00:31:56,910 --> 00:32:00,040 voit ratkaista joitakin näistä ongelmista laittamalla muuttuja maailmanlaajuisesti 679 00:32:00,040 --> 00:32:01,290 huipulla tiedoston. 680 00:32:01,290 --> 00:32:03,630 Mutta lähes kaikissa tapauksissa me paheksua, että 681 00:32:03,630 --> 00:32:06,170 ja tosiaan edes mene tuohon ratkaisu nyt. 682 00:32:06,170 --> 00:32:09,890 Joten nyt takeaway on, että muuttujilla on tämä käsite soveltamisalaan. 683 00:32:09,890 --> 00:32:13,430 >> Mutta nyt Katsotaanpa toinen kuiva tapa todella etsivät 684 00:32:13,430 --> 00:32:15,810 jossain aika mielenkiintoinen toteutuksen yksityiskohdat. 685 00:32:15,810 --> 00:32:17,810 Miten voisimme edustaa tietoa. 686 00:32:17,810 --> 00:32:20,370 Ja meillä on jo pohtinut tätä ensimmäisellä viikolla luokka. 687 00:32:20,370 --> 00:32:23,320 Tarkasteltaessa binäärit, ja muistuttaa itseämme desimaalin. 688 00:32:23,320 --> 00:32:28,310 >> Mutta muistaa viime viikolla, että C on erilaiset tiedot ja nippuina enemmän, 689 00:32:28,310 --> 00:32:30,600 mutta hyödyllisin niistä nyt voisi olla näitä. 690 00:32:30,600 --> 00:32:36,030 Nieriä, tai merkki, joka tapahtuu olla yksi tavu, tai kahdeksan bittiä yhteensä. 691 00:32:36,030 --> 00:32:40,060 Ja se on sanoa, että koko ja merkki on vain yksi tavu. 692 00:32:40,060 --> 00:32:45,370 Tavu on kahdeksan bittiä, joten tämä merkitsee sitä, että Voimme edustaa kuinka monta merkkiä. 693 00:32:45,370 --> 00:32:47,320 Montako kirjainta tai symboleja näppäimistöllä 694 00:32:47,320 --> 00:32:49,210 jos meillä on yksi tavu tai kahdeksan bittiä. 695 00:32:49,210 --> 00:32:51,546 Muistelen viikolla nolla. 696 00:32:51,546 --> 00:32:53,420 Jos sinulla on kahdeksan bittiä, kuinka monta yhteensä arvoja 697 00:32:53,420 --> 00:32:55,503 voi te edustatte kanssa kuvioita nollia ja ykkösiä? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- enemmän. 700 00:33:00,260 --> 00:33:03,490 Joten 256 yhteensä, jos alkaa laskea nollasta. 701 00:33:03,490 --> 00:33:07,120 Joten jos sinulla on kahdeksan bits-- joten jos me oli meidän binary sipulit täällä taas, 702 00:33:07,120 --> 00:33:12,180 voisimme kääntää nämä lamput ja pois Jonkin 256 ainutlaatuisia kuvioita. 703 00:33:12,180 --> 00:33:13,640 >> Nyt tämä on vähän ongelmallista. 704 00:33:13,640 --> 00:33:16,857 Ei niinkään Englanti ja romantiikkaa kieliä, mutta varmasti 705 00:33:16,857 --> 00:33:19,190 kun käyttöön, sillä Esimerkiksi Aasian tekstit, jotka 706 00:33:19,190 --> 00:33:22,580 on paljon enemmän symboleita kuin kuin 26 aakkosten kirjainta. 707 00:33:22,580 --> 00:33:24,390 Me itse asiassa ehkä enemmän kuin yksi tavu. 708 00:33:24,390 --> 00:33:28,240 Ja onneksi vuonna Viime vuosina on yhteiskunnan 709 00:33:28,240 --> 00:33:31,040 hyväksyi myös muita standardeja, jotka käyttävät enemmän kuin yksi tavu per lataus. 710 00:33:31,040 --> 00:33:34,210 >> Mutta nyt C, oletus on vain yksi tavu tai kahdeksan bittiä. 711 00:33:34,210 --> 00:33:38,195 Kokonaisluku puolestaan ​​on neljä tavua, joka tunnetaan myös 32 bittiä. 712 00:33:38,195 --> 00:33:41,320 Mikä tarkoittaa sitä, mitä on suurin mahdollinen numero voimme edustaa kanssa int 713 00:33:41,320 --> 00:33:41,820 ilmeisesti? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Kanssa miljardia. 716 00:33:45,050 --> 00:33:46,760 Joten se on neljän miljardin antaa tai ottaa. 717 00:33:46,760 --> 00:33:49,840 2 32th valtaa, jos me ota negatiiviset luvut 718 00:33:49,840 --> 00:33:52,530 ja vain käyttää kaikki positiiviset numeroita, se on neljään miljardiin 719 00:33:52,530 --> 00:33:53,730 antaa tai ottaa mahdollisuuksia. 720 00:33:53,730 --> 00:33:57,890 Float puolestaan ​​on erityyppinen Tietojen tyyppi C. Se on edelleen numero, 721 00:33:57,890 --> 00:33:58,990 mutta se on todellinen määrä. 722 00:33:58,990 --> 00:34:00,660 Jotain desimaalipilkun. 723 00:34:00,660 --> 00:34:03,000 Ja käy ilmi, että C käyttää myös neljä tavua 724 00:34:03,000 --> 00:34:05,340 edustamaan liukuluvuiksi. 725 00:34:05,340 --> 00:34:09,420 >> Valitettavasti kuinka monta kelluva pistearvot ovat siellä maailman? 726 00:34:09,420 --> 00:34:11,582 Kuinka monta todelliset luvut ovat siellä? 727 00:34:11,582 --> 00:34:13,540 On äärettömän numero, ja että asia 728 00:34:13,540 --> 00:34:15,164 siellä on ääretön määrä kokonaislukuja. 729 00:34:15,164 --> 00:34:18,070 Joten olemme jo tavallaan kaivaa itsemme reikä täällä. 730 00:34:18,070 --> 00:34:21,780 Jolloin ilmeisesti computers-- osoitteessa Ainakin kirjoitettuja ohjelmia C them-- 731 00:34:21,780 --> 00:34:24,110 voidaan laskea ainoastaan ​​peräti neljän miljardin antaa tai ottaa, 732 00:34:24,110 --> 00:34:26,260 ja liukulukuarvoja voi vain näennäisesti 733 00:34:26,260 --> 00:34:28,330 on jonkin verran rajallinen määrä tarkkuutta. 734 00:34:28,330 --> 00:34:30,810 Vain niin monta numeroa jälkeen niiden desimaalipilkun. 735 00:34:30,810 --> 00:34:32,822 >> Koska tietenkin, jos sinulla on vain 32 bittiä, 736 00:34:32,822 --> 00:34:36,030 En tiedä, miten aiomme edetä edustaa todellista numbers-- luultavasti 737 00:34:36,030 --> 00:34:37,409 erityyppisiä kuvioita. 738 00:34:37,409 --> 00:34:40,030 Mutta on varmasti rajallinen useita tällaisia ​​malleja, 739 00:34:40,030 --> 00:34:41,830 joten tässäkin tämä on ongelmallista. 740 00:34:41,830 --> 00:34:43,710 >> Nyt voimme välttää hieman. 741 00:34:43,710 --> 00:34:45,710 Jos et käytä float, voit käyttää kaksinkertaista 742 00:34:45,710 --> 00:34:50,230 C, joka antaa sinulle kahdeksan tavua, joka on paljon enemmän mahdollisia malleja nollien 743 00:34:50,230 --> 00:34:50,730 ja niitä. 744 00:34:50,730 --> 00:34:55,199 Mutta se on silti rajallinen, joka on menossa ongelmalliseksi, jos kirjoitat ohjelmisto 745 00:34:55,199 --> 00:34:57,670 grafiikkaa tai fancy matemaattisia kaavoja. 746 00:34:57,670 --> 00:35:00,410 Niin saatat todella haluavat laskea jopa suurempi kuin tuo. 747 00:35:00,410 --> 00:35:05,640 Pitkä long-- stupidly named-- on myös kahdeksan tavua, tai 64 bittiä, 748 00:35:05,640 --> 00:35:10,260 ja tämä on kaksi kertaa niin pitkä kuin int, ja se on pitkään kokonaisluku. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- jos int on neljä tavua, kuinka pitkä on pitkä C tyypillisesti? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Myös neljä tavua, mutta pitkä pitkä on kahdeksan tavua, 752 00:35:21,560 --> 00:35:23,050 ja tämä on historiallisista syistä. 753 00:35:23,050 --> 00:35:26,450 >> Mutta takeaway nyt on vain, että tietoja on 754 00:35:26,450 --> 00:35:29,625 olla edustettuna computer-- joka on fyysisen laitteen sähköä, 755 00:35:29,625 --> 00:35:32,190 se on yleensä ajo nämä nollat ​​ja ones-- 756 00:35:32,190 --> 00:35:34,320 joilla on rajallinen määrä tarkasti. 757 00:35:34,320 --> 00:35:35,620 Joten mikä on ongelma sitten? 758 00:35:35,620 --> 00:35:37,480 >> No siellä ongelma on kokonaisluvun ylivuoto. 759 00:35:37,480 --> 00:35:39,780 Ei vain C, mutta tietokoneissa yleensä. 760 00:35:39,780 --> 00:35:42,590 Esimerkiksi, jos tämä on tavu arvoinen bit-- 761 00:35:42,590 --> 00:35:45,120 joten jos tämä on kahdeksan bit-- kaikki joista numero yksi. 762 00:35:45,120 --> 00:35:47,300 Mikä numero on tämä eli jos oletamme 763 00:35:47,300 --> 00:35:50,730 se kaikki positiiviset arvot binary? 764 00:35:50,730 --> 00:35:54,410 >> 255, ja se ei ole 256, koska nolla on pienin numero. 765 00:35:54,410 --> 00:35:56,760 Joten 255 on korkein yksi, mutta ongelma 766 00:35:56,760 --> 00:36:00,330 on olettaa, että halusin increment tämä muuttuja 767 00:36:00,330 --> 00:36:04,030 käyttää kahdeksan bittiä yhteensä jos haluan kasvattaa sitä. 768 00:36:04,030 --> 00:36:07,160 >> Ja heti kun olen lisännyt yksi kaikkiin näihin niistä, 769 00:36:07,160 --> 00:36:10,500 voit ehkä kuvitella visually-- vain kuin kantaisi käyttävällä decimals-- 770 00:36:10,500 --> 00:36:12,300 jotain tulee virrata vasemmalle. 771 00:36:12,300 --> 00:36:15,590 Ja todellakin, jos voin lisätä numeron yksi tähän, mitä tapahtuu binary 772 00:36:15,590 --> 00:36:17,670 on, että se vuotaa yli takaisin nollaan. 773 00:36:17,670 --> 00:36:21,730 >> Joten jos vain use-- ole int, mutta yhden tavun laskea kokonaislukujen 774 00:36:21,730 --> 00:36:27,170 ohjelmassa, jonka default-- heti saat 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 tulee sen jälkeen 255, joka ei luultavasti ole mitä 776 00:36:32,710 --> 00:36:34,790 käyttäjä tulee odottaa. 777 00:36:34,790 --> 00:36:39,620 >> Nyt puolestaan ​​liukulukukoodattujen maailmassa, sinulla on myös samanlainen ongelma. 778 00:36:39,620 --> 00:36:42,670 Ei niin paljon, joilla on suurin number-- vaikka se on edelleen ongelma. 779 00:36:42,670 --> 00:36:45,360 Mutta määrä tarkkuus että voit edustaa. 780 00:36:45,360 --> 00:36:49,490 Joten katsomaan tätä esimerkkiä täällä myös nykyisestä lähteestä code-- 781 00:36:49,490 --> 00:36:52,070 float-0.c. 782 00:36:52,070 --> 00:36:54,280 >> Ja huomaa sitä erittäin yksinkertainen ohjelma, joka 783 00:36:54,280 --> 00:36:56,580 olisi ilmeisesti tulostaa mitä arvoa? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Mitä vetoa tämä tulee tulostaa vaikka siellä on vähän uusia syntaksin 786 00:37:04,110 --> 00:37:05,540 täällä? 787 00:37:05,540 --> 00:37:06,700 Joten toivottavasti 0.1. 788 00:37:06,700 --> 00:37:10,000 Joten vastaava yksi kymmenesosa koska mulla 1 jaettuna 10. 789 00:37:10,000 --> 00:37:12,430 Olen tallentamiseen vastaus muuttujaan nimeltä f. 790 00:37:12,430 --> 00:37:15,850 Että muuttuja on tyyppiä float, joka on avainsana olen vain ehdottanut olemassa. 791 00:37:15,850 --> 00:37:18,910 >> Emme ole nähnyt tätä ennen, mutta tämä on tavallaan siisti tapa printf 792 00:37:18,910 --> 00:37:22,110 määrittää, kuinka monta numeroa olet halua nähdä jälkeen desimaalipilkun. 793 00:37:22,110 --> 00:37:25,020 Joten tämä merkintä tarkoittaa vain että tässä on paikanvaraajaan. 794 00:37:25,020 --> 00:37:27,900 Se on liukuluku arvo, ja oh, muuten, 795 00:37:27,900 --> 00:37:31,389 näytä sitä desimaalipilkun kanssa yksi numero desimaalipilkun jälkeen. 796 00:37:31,389 --> 00:37:33,180 Niin, että numero on merkitsevää numeroa, 797 00:37:33,180 --> 00:37:34,650 niin sanoakseni, että saatat haluta. 798 00:37:34,650 --> 00:37:40,450 >> Joten anna minun mennä eteenpäin ja tehdä tehdä float-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 ja ilmeisesti 1 jaettuna 10 on 0,0. 800 00:37:46,660 --> 00:37:47,760 Nyt miksi näin? 801 00:37:47,760 --> 00:37:51,380 >> No jälleen, tietokone vie minulle kirjaimellisesti, ja olen kirjoittanut 1 802 00:37:51,380 --> 00:37:56,680 ja minä kirjoitettu 10, ja arvaa mitä on oletettu tietotyyppi näiden kahden 803 00:37:56,680 --> 00:37:58,440 arvot? 804 00:37:58,440 --> 00:38:00,970 Int, se on teknisesti jotain hieman erilaista. 805 00:38:00,970 --> 00:38:04,150 Se on yleensä pitkä, mutta se on lopulta kiinteä arvo. 806 00:38:04,150 --> 00:38:06,030 Ei Liukulukuarvo. 807 00:38:06,030 --> 00:38:09,456 >> Joka on sanoa, että jos tämä on int ja tämä on int, 808 00:38:09,456 --> 00:38:11,830 Ongelmana on, että tietokone ei ole mahdollisuutta 809 00:38:11,830 --> 00:38:13,680 jopa tallentaa joka desimaalipilkun. 810 00:38:13,680 --> 00:38:16,430 Joten kun teet 1 jaettu 10 käyttäen kokonaislukuja 811 00:38:16,430 --> 00:38:20,950 Sekä osoittaja ja nimittäjä, vastaus olisi 0,1. 812 00:38:20,950 --> 00:38:24,930 Mutta computer-- koska nämä ovat integers-- 813 00:38:24,930 --> 00:38:27,430 ei tiedä mitä tehdä 0.1. 814 00:38:27,430 --> 00:38:30,010 >> Joten mitä se selvästi tekee? 815 00:38:30,010 --> 00:38:33,120 Se vain heittää sen pois, ja mitä näen lopulta 816 00:38:33,120 --> 00:38:38,830 on 0,0 vain siksi vaadin, että printf näyttää minulle yhden desimaalin tarkkuudella. 817 00:38:38,830 --> 00:38:41,740 Mutta ongelma on, että jos jakaa kokonaisluvun kokonaisluku, 818 00:38:41,740 --> 00:38:44,347 voit kuin-- määritelmän ja C-- kokonaisluku. 819 00:38:44,347 --> 00:38:46,680 Ja se ei tule tehdä jotain mukavaa ja kätevästi 820 00:38:46,680 --> 00:38:49,040 kuten pyöristää sen lähin ylös tai alas. 821 00:38:49,040 --> 00:38:51,860 Se tulee katkaista kaiken jälkeen desimaalin. 822 00:38:51,860 --> 00:38:54,030 >> Niin vain intuitiivisesti, mikä on luultavasti korjata? 823 00:38:54,030 --> 00:38:55,351 Mikä on yksinkertaisin korjata täällä? 824 00:38:55,351 --> 00:38:55,850 Joo? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Täsmälleen. 827 00:39:01,100 --> 00:39:04,200 Miksi emme vain hoitaa näitä kuin liukulukuarvoja tehokkaasti 828 00:39:04,200 --> 00:39:05,860 kääntämällä ne kellukkeet tai kaksinkertaistuu. 829 00:39:05,860 --> 00:39:10,500 Ja nyt jos en tee kellukkeet-0, tai jos olen koota kellukkeet-1, 830 00:39:10,500 --> 00:39:12,570 joka on identtinen mitä oli juuri ehdotti. 831 00:39:12,570 --> 00:39:16,400 Ja nyt minä kellukkeet-0, nyt saan 0.1. 832 00:39:16,400 --> 00:39:17,234 >> Nyt tämä on hämmästyttävä. 833 00:39:17,234 --> 00:39:19,441 Mutta nyt aion tehdä jotain hieman erilaista. 834 00:39:19,441 --> 00:39:22,280 Olen utelias näkemään, mitä todella takana tapahtuu huppu, 835 00:39:22,280 --> 00:39:26,050 ja aion tulostaa tämän ulos 28 desimaalin tarkkuudella. 836 00:39:26,050 --> 00:39:29,730 Haluan todella nähdä 0.1000-- infinite-- 837 00:39:29,730 --> 00:39:32,710 [Äänetön] 27 nollia jälkeen 0.1. 838 00:39:32,710 --> 00:39:34,740 >> No katsotaanpa jos se mitä minä todellakin saada. 839 00:39:34,740 --> 00:39:39,430 Tee kellukkeet-0 samaa tiedostoa. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Katsotaanpa zoomata dramaattinen vastaus. 842 00:39:44,380 --> 00:39:49,980 Koko tämän ajan olet ollut ajatellut 1 jaettuna 10 on 10%, tai 0,1. 843 00:39:49,980 --> 00:39:50,810 Se ei ole. 844 00:39:50,810 --> 00:39:53,210 Ainakin siltä osin kuin tietokoneen osalta. 845 00:39:53,210 --> 00:39:57,060 >> Nyt why-- OK, se on täydellinen valhe 1 jaettuna 10 on 0,1. 846 00:39:57,060 --> 00:39:59,710 Mutta why--, että ei ole takeaway tänään. 847 00:39:59,710 --> 00:40:04,010 Joten miksi tietokone ajatella, toisin kuin meille kaikille huoneessa, 848 00:40:04,010 --> 00:40:06,870 , että 1 jaettuna 10 on todella että hullu arvo? 849 00:40:06,870 --> 00:40:10,620 Mikä on tietokone tekee ilmeisesti? 850 00:40:10,620 --> 00:40:12,490 Mikä se on? 851 00:40:12,490 --> 00:40:13,785 >> Se ei ole ylivuoto, sinänsä. 852 00:40:13,785 --> 00:40:15,910 Ylivuoto on tyypillisesti silloin, kun voit kietoa arvo. 853 00:40:15,910 --> 00:40:18,970 Se on tämän kysymyksen epätarkkuuden in Liukulukuarvo 854 00:40:18,970 --> 00:40:22,220 jos sinulla on vain 32 tai ehkä jopa 64 bit. 855 00:40:22,220 --> 00:40:25,230 Mutta jos on ääretön useita todellisia numbers-- 856 00:40:25,230 --> 00:40:27,940 numerot desimaaleja ja numerot thereafter-- varmasti 857 00:40:27,940 --> 00:40:29,380 et voi edustaa niitä kaikkia. 858 00:40:29,380 --> 00:40:32,870 Näin tietokone on antanut meitä lähin vastaava 859 00:40:32,870 --> 00:40:37,090 arvoon se voi edustaa käyttäen, että monta bittiä arvoon minä todella haluavat, 860 00:40:37,090 --> 00:40:38,690 joka on 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Valitettavasti, jos alkaa tehdä matematiikkaa, tai et 862 00:40:40,685 --> 00:40:44,360 aloittaa joihin tällaiset kelluvat pistearvot tärkeissä programs-- 863 00:40:44,360 --> 00:40:46,770 Financial Software, sotilaallinen software-- mitään 864 00:40:46,770 --> 00:40:49,090 jos käsitys on luultavasti aika tärkeä. 865 00:40:49,090 --> 00:40:51,520 Ja aloitat lisäämällä numeroita, kuten tämä, ja alku 866 00:40:51,520 --> 00:40:54,050 käynnissä että ohjelmisto todella suuret panokset 867 00:40:54,050 --> 00:40:56,890 tai paljon tunnin tai erien päivien tai paljon vuosia, 868 00:40:56,890 --> 00:41:01,060 nämä pikku virheitä varmasti voi lisätä ajan mittaan. 869 00:41:01,060 --> 00:41:04,252 >> Nyt syrjään, jos olet joskus nähnyt Superman 3 tai Office Space 870 00:41:04,252 --> 00:41:05,960 ja saatat muistaa miten nämä kaverit varasti 871 00:41:05,960 --> 00:41:08,668 paljon rahaa heidän tietokone käyttämällä liukulukuarvoja 872 00:41:08,668 --> 00:41:11,290 ja laskemalla vähän jäännöksiä, toivottavasti elokuva 873 00:41:11,290 --> 00:41:12,390 nyt järkevämpää. 874 00:41:12,390 --> 00:41:14,930 Tämä on mitä he olivat viittaamatta siinä elokuvassa. 875 00:41:14,930 --> 00:41:16,710 Se, että useimmat yritykset eivät katso 876 00:41:16,710 --> 00:41:18,600 sen jälkeen, kun tietty määrä desimaaleja, 877 00:41:18,600 --> 00:41:20,009 mutta ne ovat jakeet senttiä. 878 00:41:20,009 --> 00:41:22,550 Joten voit aloittaa lisäämällä niitä, voit alkaa tehdä paljon rahaa 879 00:41:22,550 --> 00:41:23,424 pankkitilille. 880 00:41:23,424 --> 00:41:25,160 Niin, että Office Space selitti. 881 00:41:25,160 --> 00:41:28,220 >> Nyt valitettavasti yli Toimistotilaa, siellä 882 00:41:28,220 --> 00:41:31,794 On joitakin perustellusti huolestuttavia ja merkittäviä vaikutuksia 883 00:41:31,794 --> 00:41:33,710 Tällaisten taustalla suunnittelun päätöksiä, 884 00:41:33,710 --> 00:41:35,990 ja todellakin yksi syy käytämme C aikana 885 00:41:35,990 --> 00:41:39,640 on niin, että sinulla on todella tällä perusteella jopa käsitys siitä, miten tietokoneet toimivat, 886 00:41:39,640 --> 00:41:42,440 miten ohjelmisto toimii, eivätkä ota mitään itsestään selvänä. 887 00:41:42,440 --> 00:41:45,820 >> Ja todellakin valitettavasti, vaikka että peruskäsitys, 888 00:41:45,820 --> 00:41:47,370 me ihmiset tekevät virheitä. 889 00:41:47,370 --> 00:41:51,310 Ja mitä minä ajattelin jakaa on Tämän kahdeksan minuutin video tästä ottanut 890 00:41:51,310 --> 00:41:56,980 alkaen moderneja ihmeitä episodi, joka on koulutus näyttää, miten asiat toimivat 891 00:41:56,980 --> 00:42:00,370 että maalit kaksi kuvaa milloin virheellisestä käytöstä 892 00:42:00,370 --> 00:42:02,540 ja ymmärrystä liukulukuarvoja 893 00:42:02,540 --> 00:42:05,610 johti joitakin merkittäviä valitettavaa tuloksia. 894 00:42:05,610 --> 00:42:06,363 Katsotaanpa katsomaan. 895 00:42:06,363 --> 00:42:07,029 [VIDEOTOISTOSTA] 896 00:42:07,029 --> 00:42:11,290 -Meidän Nyt palata "Engineering Katastrofit "on moderneja ihmeitä. 897 00:42:11,290 --> 00:42:12,940 Tietokoneet. 898 00:42:12,940 --> 00:42:15,580 Olemme kaikki tulevat hyväksymään usein turhauttavaa ongelmia, jotka 899 00:42:15,580 --> 00:42:20,960 sai kanssa them-- vikoja, viruksia, ja ohjelmisto glitches-- pienille hinnat 900 00:42:20,960 --> 00:42:23,100 maksaa mukavuutta. 901 00:42:23,100 --> 00:42:27,770 Mutta korkean teknologian ja korkean nopeuden sotilaallinen ja avaruusohjelma sovelluksia, 902 00:42:27,770 --> 00:42:32,780 pienin ongelma voi suurennetaan katastrofiin. 903 00:42:32,780 --> 00:42:38,880 >> Kesäkuun 4. päivänä 1996 tutkijat valmistettu käynnistää miehittämättömän Ariane 5 raketti. 904 00:42:38,880 --> 00:42:41,190 Se kantoi tieteellistä satelliittien suunniteltu 905 00:42:41,190 --> 00:42:44,570 vahvistaa tarkasti, miten Maan magneettikenttä vuorovaikuttaa 906 00:42:44,570 --> 00:42:47,380 aurinko tuulet. 907 00:42:47,380 --> 00:42:50,580 Raketti rakennettiin Euroopan avaruusjärjestö 908 00:42:50,580 --> 00:42:54,400 ja nostetaan pois sen laitos rannikolla Ranskan Guayana. 909 00:42:54,400 --> 00:42:57,520 >> -At Noin 37 sekunnin lennon, he ensin 910 00:42:57,520 --> 00:42:59,070 huomasi jotain oli vialla. 911 00:42:59,070 --> 00:43:02,240 Että suuttimet kääntyvä tavallaan he todella pitäisi. 912 00:43:02,240 --> 00:43:06,550 Noin 40 sekunnin lennon, selvästi ajoneuvon oli vaikeuksissa, 913 00:43:06,550 --> 00:43:08,820 ja silloin he tekivät Päätös tuhota sen. 914 00:43:08,820 --> 00:43:12,370 Alue turvallisuudesta vastaavan johtajan kanssa valtava sisua, painetaan nappia 915 00:43:12,370 --> 00:43:18,030 ja räjäytti raketin ennen kuin se voisi tulla vaaraa yleiselle turvallisuudelle. 916 00:43:18,030 --> 00:43:21,010 >> -Tämä oli neito matkan Ariane 5, 917 00:43:21,010 --> 00:43:23,920 ja sen tuhoaminen kesti koska oli virhe 918 00:43:23,920 --> 00:43:25,932 upotettu raketti ohjelmisto. 919 00:43:25,932 --> 00:43:27,640 P ongelma Ariane oli, että 920 00:43:27,640 --> 00:43:30,500 oli numero, joka tarvitaan 64 bittiä ilmaista, 921 00:43:30,500 --> 00:43:33,560 ja he halusivat muuttaa sen 16-bittinen numero. 922 00:43:33,560 --> 00:43:36,820 He olettivat, että numero ei koskaan tule olemaan kovin suuri. 923 00:43:36,820 --> 00:43:40,940 Että useimmat niistä numeroa 64-bittinen numero olivat nollia. 924 00:43:40,940 --> 00:43:42,450 He olivat väärässä. 925 00:43:42,450 --> 00:43:45,000 >> P kyvyttömyys yhden ohjelma hyväksyä 926 00:43:45,000 --> 00:43:49,460 sellainen numero, joka generoidaan toinen oli juureen vika. 927 00:43:49,460 --> 00:43:54,260 Ohjelmistokehitys oli tullut erittäin kalliiksi osa uutta teknologiaa. 928 00:43:54,260 --> 00:43:57,060 Ariane 4 raketti oli onnistunut hyvin. 929 00:43:57,060 --> 00:44:01,600 Niin paljon ohjelmisto luotu sitä käytettiin myös Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> P perusongelmana oli, että Ariane 5. 931 00:44:04,790 --> 00:44:11,200 On faster-- kiihtyi nopeammin, ja ohjelmisto ei ollut osuus siitä. 932 00:44:11,200 --> 00:44:14,910 >> P tuhoaminen raketti oli valtava taloudellinen katastrofi. 933 00:44:14,910 --> 00:44:18,630 Kaikki johtuu minuutin ohjelmiston virhe. 934 00:44:18,630 --> 00:44:21,160 Mutta tämä ei ollut ensimmäinen aikaa tietojen muuntaminen ongelmia 935 00:44:21,160 --> 00:44:24,770 oli vaivannut moderni ohjusteknologia. 936 00:44:24,770 --> 00:44:28,020 >> -In 1991 alku Ensimmäisen Persianlahden sodan, 937 00:44:28,020 --> 00:44:30,540 Patriot ohjus kokenut samankaltaisia 938 00:44:30,540 --> 00:44:32,465 Useiden muuntaminen ongelma. 939 00:44:32,465 --> 00:44:36,760 Ja sen seurauksena 28 people-- 28 Amerikkalainen soldiers-- kuoli, 940 00:44:36,760 --> 00:44:39,010 ja noin sata muuta haavoittui. 941 00:44:39,010 --> 00:44:42,830 Kun Patriot, jonka piti suojaamaan saapuvan Scuds, 942 00:44:42,830 --> 00:44:45,780 ei osunut. 943 00:44:45,780 --> 00:44:51,610 >> Milloin Irak hyökkäsi Kuwaitiin, ja Amerikassa käynnistettiin Desert Storm alkuvuodesta 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot ohjusten akut lähetettiin suojella Saudi-Arabian ja Israelin 945 00:44:55,720 --> 00:44:59,180 Irakin Scud ohjus hyökkäyksiä. 946 00:44:59,180 --> 00:45:03,080 Patriot on Yhdysvaltain keskipitkän kantaman pinta-ilmaan-järjestelmä 947 00:45:03,080 --> 00:45:06,530 valmistanut Raytheon yhtiön. 948 00:45:06,530 --> 00:45:09,500 >> P koko Patriot keräilyaltaan itself-- 949 00:45:09,500 --> 00:45:14,705 se on noin noin 20 metriä pitkä, ja se painaa noin 2000 kiloa. 950 00:45:14,705 --> 00:45:19,090 Ja se harjoittaa taistelukärjellä noin, Minusta se on noin 150 kiloa. 951 00:45:19,090 --> 00:45:23,880 Ja ydinpommi itse voimakas räjähdysaine, joka 952 00:45:23,880 --> 00:45:26,700 on fragmentteja hänen ympärillään. 953 00:45:26,700 --> 00:45:31,630 Joten kotelo ydinpommi on suunniteltu toimimaan kuten Buckshot. 954 00:45:31,630 --> 00:45:34,040 >> P ohjukset kuljetetaan neljä per kontti, 955 00:45:34,040 --> 00:45:37,170 ja kuljetetaan puoliperävaunu. 956 00:45:37,170 --> 00:45:44,880 >> P Patriot ohjuspuolustusjärjestelmä ulottuu vähintään 20 vuotta. 957 00:45:44,880 --> 00:45:48,380 Se oli alun perin suunniteltu kuten ilmatorjuntaohjusjärjestelmään 958 00:45:48,380 --> 00:45:50,810 ampua alas vihollisen lentokoneita. 959 00:45:50,810 --> 00:45:54,410 Ensimmäisessä Persianlahden sodassa kun että sota tuli, 960 00:45:54,410 --> 00:45:59,650 Army halusi käyttää sitä ampua alas Scuds, ei lentokoneita. 961 00:45:59,650 --> 00:46:03,580 Irakin ilmavoimat oli ei niin suuri ongelma, 962 00:46:03,580 --> 00:46:06,590 mutta armeija on huolissaan Scuds. 963 00:46:06,590 --> 00:46:10,120 Ja niin he yrittivät päivittää Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Vihollinen ohjus kulkee Mach 5 965 00:46:12,740 --> 00:46:15,670 tultaisiin riittävän haastava. 966 00:46:15,670 --> 00:46:18,440 Mutta kun Patriot kiidätettiin palvelu, 967 00:46:18,440 --> 00:46:22,580 armeija ei ollut tietoinen Irakin muutoksia, jotka 968 00:46:22,580 --> 00:46:25,880 tekivät Scuds lähes mahdotonta sen. 969 00:46:25,880 --> 00:46:30,690 >> Mitä tapahtui on Scuds että oli tulossa oli epävakaa. 970 00:46:30,690 --> 00:46:32,000 He olivat huojuva. 971 00:46:32,000 --> 00:46:37,210 Syynä tähän oli Iraqis-- saadakseen 600km ulos 972 00:46:37,210 --> 00:46:41,680 ja 300 kilometrin välillä missile-- otti painoa pois edestä ydinpommi, 973 00:46:41,680 --> 00:46:43,340 ja teki ydinpommi kevyempi. 974 00:46:43,340 --> 00:46:48,490 Joten nyt Patriot yrittää tulla klo Scud, ja suurin osa time-- 975 00:46:48,490 --> 00:46:52,880 Valtaosa time-- se vain lentää Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Kun Patriot verkonhaltijoiden tajusi Patriot jäi tavoitteestaan, 977 00:46:57,120 --> 00:47:01,630 ne räjähti Patriot ydinpommi välttää mahdolliset onnettomuudet, jos se 978 00:47:01,630 --> 00:47:04,440 annettiin pudota maahan. 979 00:47:04,440 --> 00:47:08,700 >> Tuo oli se, mitä useimmat ihmiset näkivät yhtä suuri tulipalloja taivaalla, 980 00:47:08,700 --> 00:47:14,180 ja ymmärtää väärin kuuntelevansa Scud ydinkärkien. 981 00:47:14,180 --> 00:47:18,020 >> -vaikka Vuonna yötaivas, Patriots näytti onnistuneesti tuhoamalla 982 00:47:18,020 --> 00:47:23,280 Scuds kello Dhahran voisi olla erehtykö sen suorituskykyä. 983 00:47:23,280 --> 00:47:27,930 Siellä Patriot tutkajärjestelmää kadottaa saapuvan Scud 984 00:47:27,930 --> 00:47:30,260 ja koskaan käynnistetty takia että ohjelmisto virhe. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Se oli israelilaisia, joka ensimmäisenä löysi että pidempi järjestelmä oli, 987 00:47:38,880 --> 00:47:41,130 enemmän aikaa ero tuli. 988 00:47:41,130 --> 00:47:44,770 Johtuen kellon upotettu järjestelmän tietokoneelle. 989 00:47:44,770 --> 00:47:48,190 >> -Noin Kaksi viikkoa ennen tragedia Dhahran, 990 00:47:48,190 --> 00:47:50,720 Israelilaiset ilmoitetaan puolustusministeriön 991 00:47:50,720 --> 00:47:52,410 että järjestelmä oli menettää aikaa. 992 00:47:52,410 --> 00:47:54,410 Noin kahdeksan tuntia käynnissä, he huomasivat 993 00:47:54,410 --> 00:47:57,690 että järjestelmän tulee huomattavasti epätarkempi. 994 00:47:57,690 --> 00:48:01,850 Puolustusministeriö vastasi kertoo kaikki Patriot paristot 995 00:48:01,850 --> 00:48:04,800 ja jättää järjestelmiin on pitkään. 996 00:48:04,800 --> 00:48:06,980 Ne koskaan sanonut, mitä pitkään oli. 997 00:48:06,980 --> 00:48:09,140 8 tuntia, 10 tuntia, tuhat tuntia. 998 00:48:09,140 --> 00:48:11,300 Kukaan ei tiennyt. 999 00:48:11,300 --> 00:48:13,320 >> P Patriot akku sijoitettiin kasarmi 1000 00:48:13,320 --> 00:48:18,310 klo Dhahran ja sen puutteellinen sisäinen Kello oli ollut käynnissä jo yli 100 tuntia 1001 00:48:18,310 --> 00:48:21,520 välisenä yönä 25. helmikuuta. 1002 00:48:21,520 --> 00:48:25,792 >> -se Seurata aika tarkkuus noin kymmenesosa toinen. 1003 00:48:25,792 --> 00:48:27,950 Nyt kymmenesosa toinen on mielenkiintoinen numero 1004 00:48:27,950 --> 00:48:31,850 koska se ei voi ilmaista binary tarkalleen, mikä 1005 00:48:31,850 --> 00:48:36,500 tarkoitetaan sitä ei voida ilmaista tarkasti missä tahansa nykyaikaisessa digitaalisen tietokoneen. 1006 00:48:36,500 --> 00:48:41,070 On vaikea uskoa, mutta käyttää esimerkkinä. 1007 00:48:41,070 --> 00:48:43,420 >> Otetaanpa numero kolmasosaa. 1008 00:48:43,420 --> 00:48:47,330 Kolmasosa ei voi olla ilmaistaan ​​desimaalilukuna tarkalleen. 1009 00:48:47,330 --> 00:48:52,060 Kolmasosa on 0,333 jatkunut jo ääretön. 1010 00:48:52,060 --> 00:48:56,420 Ei ole mitään keinoa tehdä sitä absoluuttinen tarkkuus desimaalin. 1011 00:48:56,420 --> 00:48:59,530 Juuri sellainen ongelma joka tapahtui Patriot. 1012 00:48:59,530 --> 00:49:04,040 Kauemmin järjestelmä juoksi, huonompi aika virhe tuli. 1013 00:49:04,040 --> 00:49:08,840 >> -Kun 100 käyttötunnin virheestä ajassa oli vain noin kolmasosa 1014 00:49:08,840 --> 00:49:10,440 toisen. 1015 00:49:10,440 --> 00:49:14,150 Mutta suhteen kohdistaminen ohjus kulkee Mach 5, 1016 00:49:14,150 --> 00:49:18,560 se johti seuranta virhe on yli 600 metriä. 1017 00:49:18,560 --> 00:49:21,870 Olisi kohtalokas virhe että sotilaat Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> Mitä tapahtui on Scud lanseeraus oli havaita ennakkovaroituksen satelliitit, 1019 00:49:28,455 --> 00:49:32,710 ja he tiesivät Scud oli tulossa heidän yleinen suunta. 1020 00:49:32,710 --> 00:49:35,150 He eivät tiedä, mistä se tuli. 1021 00:49:35,150 --> 00:49:38,210 Nyt oli jopa tutka osa Patriot järjestelmän 1022 00:49:38,210 --> 00:49:43,150 puolustaminen Dhahran paikantaa ja pitää kirjaa saapuvan vihollisen ohjuksia. 1023 00:49:43,150 --> 00:49:44,561 >> P tutka oli hyvin älykäs. 1024 00:49:44,561 --> 00:49:46,560 Olisi todella seurata asema Scud 1025 00:49:46,560 --> 00:49:48,930 ja sitten ennustaa, se todennäköisesti olisi 1026 00:49:48,930 --> 00:49:51,380 seuraavan kerran tutka lähettää pulssin ulos. 1027 00:49:51,380 --> 00:49:53,040 Jota kutsuttiin alue portti. 1028 00:49:53,040 --> 00:49:57,620 >> Sittenhän kun Patriot päättää tarpeeksi aikaa on 1029 00:49:57,620 --> 00:50:02,400 läpäissyt mennä takaisin ja tarkista seuraava paikka tämä havaittu kohde 1030 00:50:02,400 --> 00:50:03,550 se menee takaisin. 1031 00:50:03,550 --> 00:50:07,820 Joten kun se meni takaisin väärin paikka, sillä silloin ei näe mitään esinettä. 1032 00:50:07,820 --> 00:50:10,360 Ja päättää, ettei esinettä. 1033 00:50:10,360 --> 00:50:13,630 Että oli väärä tunnistus ja se putoaa radalla. 1034 00:50:13,630 --> 00:50:16,970 >> P saapuvan Scud katosi tutkanäytöltä, 1035 00:50:16,970 --> 00:50:20,200 ja sekuntia myöhemmin, se lyönyt osaksi kasarmi. 1036 00:50:20,200 --> 00:50:22,570 Scud tappoi 28. 1037 00:50:22,570 --> 00:50:26,110 Se oli viimeinen potkut ensimmäisen Persianlahden sodan. 1038 00:50:26,110 --> 00:50:31,920 Traagisesti, päivitetty ohjelmisto saapui aamunkoitteessa seuraavana päivänä. 1039 00:50:31,920 --> 00:50:34,870 Ohjelmisto virhe oli ollut kiinteä, sulkeminen 1040 00:50:34,870 --> 00:50:39,150 yhden luvun levoton historia Patriot ohjus. 1041 00:50:39,150 --> 00:50:40,030 >> [END VIDEOTOISTOSTA] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. MALAN: Se on se CS50. 1043 00:50:41,488 --> 00:50:42,820 Nähdään keskiviikkona. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [Musiikki soi] 1046 00:50:50,370 --> 00:54:23,446