1 00:00:00,000 --> 00:00:10,920 >> [MUSIC PLAYING] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J MALAN: Rendben, szívesen vissza CS50. 3 00:00:14,680 --> 00:00:16,500 Ez a kezdete a hét kettő. 4 00:00:16,500 --> 00:00:18,940 Néhány szó az egyik barátai az egyetemen - 5 00:00:18,940 --> 00:00:22,620 ha érdekel, esetleg, vagy most vagy a jövőben bizonyos távon 6 00:00:22,620 --> 00:00:25,670 még egyszer kényelmesebb, oktatás középiskolás diákok egy kis 7 00:00:25,670 --> 00:00:27,680 valamit a számítógép-tudomány, ezt fejét, hogy az URL-t. 8 00:00:27,680 --> 00:00:32,360 Ezek különösen nagy szükség van most a tanárok, különösen, ha 9 00:00:32,360 --> 00:00:34,700 volt néhány expozíció számítástechnika. 10 00:00:34,700 --> 00:00:38,060 >> Így emlékszem, hogy az utolsó alkalom, hogy be néhány adattípusok a C, és a 11 00:00:38,060 --> 00:00:40,590 lehet, hogy elkezdtem a keze piszkos ezekkel eddig 12 00:00:40,590 --> 00:00:41,940 A probléma az egyiket. 13 00:00:41,940 --> 00:00:43,230 És volt egy char. 14 00:00:43,230 --> 00:00:49,100 Így kissé technikai szempontból, milyen egy char mint tudjuk, ma? 15 00:00:49,100 --> 00:00:51,050 >> Szóval ez a karakter, de most Pontosabban most. 16 00:00:51,050 --> 00:00:53,735 Mit értünk karakter vagy az egyéni char? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 A nem numerikus jellegű - 19 00:00:59,500 --> 00:01:00,670 így nem feltétlenül. 20 00:01:00,670 --> 00:01:04,580 Kiderült, hogy még a számokat, akár írásjelek és betűk 21 00:01:04,580 --> 00:01:06,980 képviseltette magát az adatok írjon ismert char. 22 00:01:06,980 --> 00:01:09,440 Tehát nem feltétlenül ábécé. 23 00:01:09,440 --> 00:01:11,100 Igen? 24 00:01:11,100 --> 00:01:12,275 >> Szóval ez egy ASCII karaktert. 25 00:01:12,275 --> 00:01:15,510 Tehát, ha úgy gondolja, vissza a héten nullára ha mi volt a byte önkéntesek 26 00:01:15,510 --> 00:01:19,150 jön, és vagy tartsa a kezét vagy nem minden, általuk képviselt bit. 27 00:01:19,150 --> 00:01:22,450 Hanem együttesen, mint egy csoport nyolc, képviseltek a bájt. 28 00:01:22,450 --> 00:01:26,030 És mi vezette be a fogalmat ASCII abban az előadás, ami csak egy 29 00:01:26,030 --> 00:01:28,170 közötti leképezés számokat és betűket. 30 00:01:28,170 --> 00:01:32,010 És ASCII használ, mint azok az emberek hallgatólagos, nyolc bit 31 00:01:32,010 --> 00:01:33,660 hogy képviselje a karaktert. 32 00:01:33,660 --> 00:01:36,890 >> Tehát ennek megfelelően ha nyolc bit mindegyik vesz egy két érték - 33 00:01:36,890 --> 00:01:38,010 nulla vagy egy - 34 00:01:38,010 --> 00:01:40,280 Ez azt jelenti, két lehetőség ez a személy - 35 00:01:40,280 --> 00:01:41,230 nulla vagy egy - 36 00:01:41,230 --> 00:01:44,070 kettő ez az ember, két e személy két ez. 37 00:01:44,070 --> 00:01:47,450 Így összesen két alkalommal kétszer kétszer kétszer kettő - 38 00:01:47,450 --> 00:01:49,700 így két a nyolcadik összesen. 39 00:01:49,700 --> 00:01:54,320 Szóval van egy karakterek száma 256 lehet, hogy tudod 40 00:01:54,320 --> 00:01:55,750 képviselt nyolc bit. 41 00:01:55,750 --> 00:01:59,210 >> Nos, azok, akik beszélnek ázsiai nyelvek is tudják, hogy van még 42 00:01:59,210 --> 00:02:02,620 karakter a világon, mint As és B és Cs és Ds. 43 00:02:02,620 --> 00:02:06,130 És valóban, nem ASCII elegendő sok nyelven a világ. 44 00:02:06,130 --> 00:02:07,760 De még az, hogy egy másik időben. 45 00:02:07,760 --> 00:02:11,240 Most, tudom, hogy a C, ha szeretné hogy képviselje a levelet, egy darab 46 00:02:11,240 --> 00:02:15,780 írásjelek, vagy csak valami karakter a természetben, használjuk a char. 47 00:02:15,780 --> 00:02:18,240 És ez egy byte vagy nyolc bit. 48 00:02:18,240 --> 00:02:19,690 >> Mit szólnál egy int? 49 00:02:19,690 --> 00:02:20,780 Nos, egy int egész szám. 50 00:02:20,780 --> 00:02:23,175 Hány bit, ha emlékszel, volt egy egész szám általában? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Bárki visszahívás? 53 00:02:27,512 --> 00:02:29,600 Szóval ez tipikusan 32. 54 00:02:29,600 --> 00:02:32,120 Ez valójában attól függ, hogy a számítógép hogy használ. 55 00:02:32,120 --> 00:02:35,770 De a készüléket, és a sok számítógépek, ez 32 bites vagy négy 56 00:02:35,770 --> 00:02:37,140 bájt - nyolcszor négy. 57 00:02:37,140 --> 00:02:39,790 És ints csak tárolásához használt számokat, akár negatív, 58 00:02:39,790 --> 00:02:41,610 pozitív, vagy nulla. 59 00:02:41,610 --> 00:02:45,250 >> És ha van 32 bites, és csak törődnek pozitív számok, lehet 60 00:02:45,250 --> 00:02:48,960 valaki stadion, hány egészek egy számítógép is képviseli a 61 00:02:48,960 --> 00:02:51,820 nullára fel? 62 00:02:51,820 --> 00:02:56,130 Így lenne két 32, amely nagyjából négymilliárd. 63 00:02:56,130 --> 00:02:59,720 Tehát ezeket a hatásköröket a két lesznek visszatérő témák a számítástechnikában. 64 00:02:59,720 --> 00:03:03,930 Mint látni fogjuk, ők nagyon kényelmes dolgozni, még ha ez nem is 65 00:03:03,930 --> 00:03:05,790 egyszerűen nem a matek az ember feje. 66 00:03:05,790 --> 00:03:07,000 >> Szóval mondom mintegy négy milliárd euróra. 67 00:03:07,000 --> 00:03:08,620 Most, egy hosszú, hosszú - 68 00:03:08,620 --> 00:03:09,770 akkor milyen kitalálni. 69 00:03:09,770 --> 00:03:10,480 Ez hosszabb, mint egy int. 70 00:03:10,480 --> 00:03:12,440 Hány bit? 71 00:03:12,440 --> 00:03:14,250 Így 64 bit vagy nyolc bájt. 72 00:03:14,250 --> 00:03:17,480 Ez csak azt jelenti, hogy még akkor is képviselt nagyobb számban, nagyobb pozitív vagy 73 00:03:17,480 --> 00:03:19,160 nagyobb negatív számok. 74 00:03:19,160 --> 00:03:20,060 >> És mi van a float? 75 00:03:20,060 --> 00:03:22,260 Ez egy lebegőpontos érték 32 bit. 76 00:03:22,260 --> 00:03:25,180 Ez csak egy valós szám, valami a tizedespont. 77 00:03:25,180 --> 00:03:30,100 De ha inkább szüksége van több helyen a tizedesvessző után, vagy szeretne 78 00:03:30,100 --> 00:03:33,720 képviselnek nagyobb szám néhány része után, akkor a 79 00:03:33,720 --> 00:03:36,260 dupla, ami 64 bit. 80 00:03:36,260 --> 00:03:38,240 >> De van egy érdekes elvihető itt. 81 00:03:38,240 --> 00:03:42,890 Tehát, ha ints korlátozza 32 bit és még a hosszú longs korlátozza 64 82 00:03:42,890 --> 00:03:46,180 bit, hogy a fajta felveti a kérdést, mi van, ha tényleg akar számolni 83 00:03:46,180 --> 00:03:48,790 nagyobb, mint 4 milliárd egy int? 84 00:03:48,790 --> 00:03:50,330 Nos, akkor csak használ egy hosszú, hosszú. 85 00:03:50,330 --> 00:03:54,200 De mi van, ha szeretné számolni magasabb kettőnél a 64., ide vagy oda? 86 00:03:54,200 --> 00:03:55,810 >> Nos, ez egy nagy szám. 87 00:03:55,810 --> 00:03:59,250 De végül, lehet, hogy tényleg érdekel ilyen típusú értékek 88 00:03:59,250 --> 00:04:03,070 különösen akkor, ha az adatbázisszerver és kezdő összegyűjteni sok-sok 89 00:04:03,070 --> 00:04:06,190 és sok-sok adat és kiosztása egyedi számok minden egyes az adatokat. 90 00:04:06,190 --> 00:04:07,430 Tehát ilyen problémája. 91 00:04:07,430 --> 00:04:10,700 És hasonlóképpen, a lebegőpontos értékek - úszók vagy páros - 92 00:04:10,700 --> 00:04:14,290 ha már csak véges számú bit, összesen hány számot tudnád 93 00:04:14,290 --> 00:04:16,980 esetleg képvisel? 94 00:04:16,980 --> 00:04:19,540 >> Nos, ez kevésbé egyértelmű, ha jár tizedespont. 95 00:04:19,540 --> 00:04:20,899 De ez biztosan véges. 96 00:04:20,899 --> 00:04:24,390 Ha van egy véges számú bitet, véges számú emberre, egy véges 97 00:04:24,390 --> 00:04:27,350 száma izzók, biztosan akkor csak képviseli véges számú 98 00:04:27,350 --> 00:04:28,510 lebegőpontos értékeket. 99 00:04:28,510 --> 00:04:33,170 De hány valós számok van, hogy a világban? 100 00:04:33,170 --> 00:04:33,680 Van egy végtelen. 101 00:04:33,680 --> 00:04:37,280 Szóval ez a fajta probléma, mert nincs végtelen mennyiségű 102 00:04:37,280 --> 00:04:39,970 memória vagy RAM belül a számítógépek. 103 00:04:39,970 --> 00:04:41,780 Szóval néhány kihívást jelentő dolog történhet. 104 00:04:41,780 --> 00:04:43,900 >> Szóval menjünk előre, és próbálja , hogy ezt itt. 105 00:04:43,900 --> 00:04:46,240 Hadd menjek előre, és nyisd ki gedit. 106 00:04:46,240 --> 00:04:50,360 Én megyek előre, és mentse a fájlt úgynevezett "floats0.c", csak hogy 107 00:04:50,360 --> 00:04:54,630 megfelel egy példa, amely online elérhető, ha szeretné. 108 00:04:54,630 --> 00:04:58,080 És én megyek előre, és határozza meg, hogy a következő - 109 00:04:58,080 --> 00:05:01,540 Én megyek előre, és azt mondják, int fő érvénytelen, hiszen gyakran. 110 00:05:01,540 --> 00:05:07,190 >> És akkor ez a program, fogok kijelentik magamnak egy úszó, így egy 32 bites 111 00:05:07,190 --> 00:05:09,700 nevű változó f, önkényesen. 112 00:05:09,700 --> 00:05:13,910 És akkor fogom tárolni benne Nem tudom, egy tizedét, így 0,1. 113 00:05:13,910 --> 00:05:16,590 Így fogom kifejezni, hogy az egyik osztva 10, ami tökéletesen 114 00:05:16,590 --> 00:05:17,790 legitim C. 115 00:05:17,790 --> 00:05:20,460 >> És akkor a második sorban, egyszerűen szeretné kinyomtatni, hogy értéket. 116 00:05:20,460 --> 00:05:22,950 Így emlékeztetni arra, hogy tudjuk használni az ismerős printf. 117 00:05:22,950 --> 00:05:25,420 Nem akarjuk, hogy a% i egy int. 118 00:05:25,420 --> 00:05:28,360 Azt akarjuk, hogy a% f egy úszó. 119 00:05:28,360 --> 00:05:33,080 És akkor fogok csinálni backslash n szoros idézet, vessző, f, pontosvessző. 120 00:05:33,080 --> 00:05:34,400 >> Tehát itt az én programot. 121 00:05:34,400 --> 00:05:35,820 Van már egy bug. 122 00:05:35,820 --> 00:05:38,640 Van valaki, akinek ez a kattintás Már szeretnénk mutatni legalább 123 00:05:38,640 --> 00:05:40,220 Egy bug csináltam? 124 00:05:40,220 --> 00:05:42,470 Igen? 125 00:05:42,470 --> 00:05:42,800 Igen. 126 00:05:42,800 --> 00:05:47,860 Elfelejtettem "# include" a felső, akkor tünete, amely, ha megpróbálom 127 00:05:47,860 --> 00:05:50,490 össze ez lesz az, hogy a fordító fog kiabálni rám, 128 00:05:50,490 --> 00:05:52,770 mondván meghatározatlan szimbólum vagy valami ebben az értelemben. 129 00:05:52,770 --> 00:05:55,360 Nem értesz valamit mint printf. 130 00:05:55,360 --> 00:05:59,380 >> Így fogok tenni "# include ", Mentse a fájlt. 131 00:05:59,380 --> 00:06:00,400 És most már jobb formában. 132 00:06:00,400 --> 00:06:02,690 De én is fog mutatni ki az egyik új részlet ma. 133 00:06:02,690 --> 00:06:08,620 Amellett, hogy a meghatározó helyre tulajdonosai, mint a% f% i% s, akkor 134 00:06:08,620 --> 00:06:12,320 néha magatartásának befolyásolására , hogy a helyőrző. 135 00:06:12,320 --> 00:06:15,540 Például, abban az esetben, ha a lebegő pontértéke, ha csak azt akarom 136 00:06:15,540 --> 00:06:22,200 megjeleníteni egy tizedesjegyig után időszak, én valójában 0.1f. 137 00:06:22,200 --> 00:06:26,830 Más szóval, azt külön a és f A százalék jel 0,1, csak 138 00:06:26,830 --> 00:06:30,200 mondja printf, akkor lehet, hogy egy egész csomó szám után a tizedes 139 00:06:30,200 --> 00:06:30,930 pont nekem. 140 00:06:30,930 --> 00:06:32,870 De én csak azt akarom, hogy az egyik közülük. 141 00:06:32,870 --> 00:06:36,280 >> Szóval megyek előre, most és spóroljon a program, menj be a terminál 142 00:06:36,280 --> 00:06:41,870 ablak, és én megyek előre és írd be: make úszó 0, adja meg. 143 00:06:41,870 --> 00:06:44,930 Úgy látom, hogy kissé rejtélyes vonal kezd, hogy több értelme, mint mi 144 00:06:44,930 --> 00:06:46,900 kötekedik szét ezen a héten és a jövő. 145 00:06:46,900 --> 00:06:50,480 Most megyek előre és fuss úszó nulla. 146 00:06:50,480 --> 00:06:52,020 És átkozott. 147 00:06:52,020 --> 00:06:54,880 >> Tehát van egy másik hiba Itt valamilyen okból. 148 00:06:54,880 --> 00:07:02,490 Biztos vagyok benne, hogy egy tized, vagy egy osztva 10, nem 0.0. 149 00:07:02,490 --> 00:07:04,590 Talán csak nem keresek A számok elég. 150 00:07:04,590 --> 00:07:08,580 Akkor miért nem azt mondom, két 0,2, hogy két tizedes, hanem csak egy. 151 00:07:08,580 --> 00:07:11,810 Hadd menjek vissza a terminál ablak Itt és a hit egy-két alkalommal 152 00:07:11,810 --> 00:07:12,840 látom a történelem. 153 00:07:12,840 --> 00:07:15,910 Van, hogy úszó nullát, , majd újra. 154 00:07:15,910 --> 00:07:17,730 És most be. 155 00:07:17,730 --> 00:07:20,000 >> És most már biztos vagyok benne, hogy ez helytelen. 156 00:07:20,000 --> 00:07:23,030 És nem tudtam nem három, négy, és én vagyok valószínűleg fog is látom nullák. 157 00:07:23,030 --> 00:07:24,880 Szóval, hol van a hiba? 158 00:07:24,880 --> 00:07:27,910 Egy osztva 10 legyen 0,1. 159 00:07:27,910 --> 00:07:30,310 Valaki szeretné, hogy a stab, hogy mi az alapvető kérdés? 160 00:07:30,310 --> 00:07:32,400 Igen? 161 00:07:32,400 --> 00:07:33,420 Mindketten egész. 162 00:07:33,420 --> 00:07:33,920 Szóval, mi van? 163 00:07:33,920 --> 00:07:37,820 Tehát egy osztva 10, ez mit csinálok a matematikában. 164 00:07:37,820 --> 00:07:41,185 És kapok 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Igen. 166 00:07:41,660 --> 00:07:43,240 És ez így van valóban ebben a kérdésben. 167 00:07:43,240 --> 00:07:46,700 Amikor Ön egy egész egy számítógépes és ossza meg egy másik egész, 168 00:07:46,700 --> 00:07:50,430 A számítógép alapértelmezés szerint fog azt feltételezik, hogy szeretne egy egész szám. 169 00:07:50,430 --> 00:07:54,620 A probléma azonban, természetesen, hogy a 0,1 nem egész szám. 170 00:07:54,620 --> 00:07:55,680 Ez egy valós szám. 171 00:07:55,680 --> 00:07:59,610 És akkor mi van a számítógép nem a alapértelmezésben ez csak eldobja 172 00:07:59,610 --> 00:08:01,070 Mindent a tizedesvessző után. 173 00:08:01,070 --> 00:08:03,380 Nem kerek le vagy fel önmagában. 174 00:08:03,380 --> 00:08:06,480 Csak dob el mindent tizedesvessző után. 175 00:08:06,480 --> 00:08:07,430 És most, hogy van értelme. 176 00:08:07,430 --> 00:08:09,740 Mert most vagyunk világosan maradt nulla. 177 00:08:09,740 --> 00:08:10,250 >> De várjunk csak egy percet. 178 00:08:10,250 --> 00:08:11,840 Én nem látok egy int nulla. 179 00:08:11,840 --> 00:08:14,910 Én valóban látta 0.00. 180 00:08:14,910 --> 00:08:16,340 Szóval hogyan tudom összeegyeztetni ezt most? 181 00:08:16,340 --> 00:08:22,850 Ha valaki osztva 10 nulla, de én látva 0,00, hol van ez kezd 182 00:08:22,850 --> 00:08:24,250 át vissza a valós szám? 183 00:08:24,250 --> 00:08:25,500 Igen. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Pontosan. 186 00:08:30,630 --> 00:08:35,600 >> Tehát itt a sorban öt, amikor valóban tárolni, hogy a 0,1, amely aztán 187 00:08:35,600 --> 00:08:39,549 csonka nullára, belsejében egy úszó, ez gyakorlatilag egyenértékű 188 00:08:39,549 --> 00:08:42,100 tárolás nem int, hanem Valóban, mint a float. 189 00:08:42,100 --> 00:08:46,540 Sőt, én majd a printf a kifejezetten nyomtatás ez a szám két 190 00:08:46,540 --> 00:08:49,740 tizedes bár lehet, hogy valójában nem ilyen. 191 00:08:49,740 --> 00:08:51,020 >> Tehát ez a fajta szar, nem igaz? 192 00:08:51,020 --> 00:08:53,640 Úgy látszik, nem tudja matematika, legalábbis ezen a szinten a 193 00:08:53,640 --> 00:08:55,600 pontosság, egy számítógép. 194 00:08:55,600 --> 00:08:56,930 De biztosan van egy megoldás. 195 00:08:56,930 --> 00:09:00,410 Mi a legegyszerűbb fix tudnánk talán igen, akár csak ösztönösen ide 196 00:09:00,410 --> 00:09:01,130 megoldani ezt? 197 00:09:01,130 --> 00:09:02,380 Igen? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Kapcsolja be az egész szám a - 200 00:09:06,574 --> 00:09:06,976 igen. 201 00:09:06,976 --> 00:09:10,420 Még ha nem vagyok egészen biztos benne, mi folyik itt valójában, ha 202 00:09:10,420 --> 00:09:13,440 alapvetően arról szól, hogy ezeket mind hogy ints, jól, miért nem 203 00:09:13,440 --> 00:09:18,230 tenni, hogy 10,0, így ez 1.0, mentse a fájlt. 204 00:09:18,230 --> 00:09:20,990 Hadd menjek vissza a alsó és újrafordítani. 205 00:09:20,990 --> 00:09:23,030 Hadd futtassa újra. 206 00:09:23,030 --> 00:09:23,420 És ott - 207 00:09:23,420 --> 00:09:27,690 Most kaptam a tizede képviseletében a 0.10. 208 00:09:27,690 --> 00:09:28,420 >> Rendben van. 209 00:09:28,420 --> 00:09:29,220 Szóval ez nem rossz. 210 00:09:29,220 --> 00:09:31,730 És hadd rámutatni egy másik út tudtuk volna megoldani ezt. 211 00:09:31,730 --> 00:09:35,580 Hadd tényleg térjen vissza az időben hogy mikor volt ez, mint egy 212 00:09:35,580 --> 00:09:36,680 tizedik egy perce. 213 00:09:36,680 --> 00:09:40,800 És hadd menjen előre, és mentse a fájlt mint egy másik fájl nevét, csak azért, hogy 214 00:09:40,800 --> 00:09:41,750 Van egy kis ellenőrzőpont. 215 00:09:41,750 --> 00:09:43,450 Szóval ez volt az egyik verzió. 216 00:09:43,450 --> 00:09:45,520 És most hadd menjen előre, és ezt még egy változat. 217 00:09:45,520 --> 00:09:48,540 Hívjuk ezt a verziót két nulla indexelt. 218 00:09:48,540 --> 00:09:51,280 >> És fogok helyette csinálni ez - Tudod mit? 219 00:09:51,280 --> 00:09:54,400 Hozzáadása dot nulla működik ebben az esetben. 220 00:09:54,400 --> 00:09:56,060 De tegyük fel, az egyik volt a változót. 221 00:09:56,060 --> 00:09:57,680 Állítólag 10 volt változó. 222 00:09:57,680 --> 00:10:00,680 Más szavakkal, tegyük fel, hogy nem tudtam csak a kemény-kód 0,0 végén 223 00:10:00,680 --> 00:10:02,340 Ennek aritmetikai kifejezés. 224 00:10:02,340 --> 00:10:05,820 Nos, valóban tenni valamit zárójelben nevezzük casting. 225 00:10:05,820 --> 00:10:11,920 Tudom leadni, hogy egész 10 úszó, és én is, hogy az egész öntött egy-egy 226 00:10:11,920 --> 00:10:12,800 float, valamint. 227 00:10:12,800 --> 00:10:17,190 Aztán a matek, hogy fog tenni hatékonyan 1,0 osztva 10,0, 228 00:10:17,190 --> 00:10:19,250 az eredménye, ami túllép az f, mint korábban. 229 00:10:19,250 --> 00:10:26,130 Tehát, ha úgy újrafordítani ezt teszi úszók 2, és most úszik 2. kapok ugyanazt 230 00:10:26,130 --> 00:10:27,020 válaszolni, valamint. 231 00:10:27,020 --> 00:10:29,640 >> Tehát ez egy meglehetősen kitalált példa, megoldani ezt a problémát 232 00:10:29,640 --> 00:10:31,400 bevezetésével casting. 233 00:10:31,400 --> 00:10:34,410 De általában, öntés lesz hatalmas dolog, különösen a 234 00:10:34,410 --> 00:10:38,180 probléma meg kettő egy hét múlva, amikor a szeretnénk átalakítani egy adattípus 235 00:10:38,180 --> 00:10:41,800 egy másik, hogy a végén a nap képviselve vannak azonos módon. 236 00:10:41,800 --> 00:10:44,970 Végén a nap, minden egyes dolog, amit beszéltünk eddig is 237 00:10:44,970 --> 00:10:46,710 csak ints a motorháztető alatt. 238 00:10:46,710 --> 00:10:48,950 Vagy ha ez túl alacsony szinten te, ők csak számok 239 00:10:48,950 --> 00:10:49,750 a motorháztető alatt. 240 00:10:49,750 --> 00:10:52,850 Még karakterekből ismét felidézni héttől nulla, számok 241 00:10:52,850 --> 00:10:53,990 a motorháztető alatt. 242 00:10:53,990 --> 00:10:57,240 >> Ami azt jelenti, hogy tudja alakítani között különbözõ típusú számokat, ha 243 00:10:57,240 --> 00:10:58,060 ők csak bit. 244 00:10:58,060 --> 00:11:01,020 Meg tudja alakítani a számok között és levelek, ha ők csak 245 00:11:01,020 --> 00:11:02,580 bit, és vice versa. 246 00:11:02,580 --> 00:11:07,170 És öntés ily módon egy olyan mechanizmus programozás lehetővé teszi, hogy erőszakkal 247 00:11:07,170 --> 00:11:10,970 megváltoztassa adattípust a másikra. 248 00:11:10,970 --> 00:11:14,570 Sajnos, ez nem olyan egyszerű, mint talán volna. 249 00:11:14,570 --> 00:11:19,220 >> Én megyek vissza úszók 1, amely az egyszerűbb, 250 00:11:19,220 --> 00:11:22,830 egyszerű egyik 0,0 feltöltés minden. 251 00:11:22,830 --> 00:11:25,260 És ahogy egy gyors frissítő, hadd menjen előre, és újrafordítani 252 00:11:25,260 --> 00:11:27,670 ez, hogy úszók 2 - 253 00:11:27,670 --> 00:11:30,300 Sajnálom, de ez, hogy úszik 1. 254 00:11:30,300 --> 00:11:32,050 És most fussunk úszók 1. 255 00:11:32,050 --> 00:11:34,810 És az alsó, észre hogy valóban kap 0,1. 256 00:11:34,810 --> 00:11:36,165 Tehát, a probléma megoldódott. 257 00:11:36,165 --> 00:11:37,280 >> De még nem. 258 00:11:37,280 --> 00:11:40,000 Én most megy, hogy egy kicsit furcsa, és én megyek vissza az én 259 00:11:40,000 --> 00:11:41,620 printf utasítás és mondjuk, tudod mit? 260 00:11:41,620 --> 00:11:44,090 Szeretném megerősíteni, hogy ez a tényleg tizede. 261 00:11:44,090 --> 00:11:47,890 És fogok, hogy szeretné látni ezt , mondjuk, öt tizedes. 262 00:11:47,890 --> 00:11:48,570 Ez nem jelent problémát. 263 00:11:48,570 --> 00:11:52,020 Tudom megváltoztatni a két öt, Én újrafordítani a make. 264 00:11:52,020 --> 00:11:53,770 Azt futtasd azt lebeg 1. 265 00:11:53,770 --> 00:11:54,990 Keres nagyon jó. 266 00:11:54,990 --> 00:11:58,570 Az alapvető ellenőrzést is a végén ott van, de Kezdek egy kicsit kalandos. 267 00:11:58,570 --> 00:12:00,330 Fogok változtatni 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Látni akarom 10 számjegy után A tizedes. 269 00:12:03,440 --> 00:12:09,060 >> És én megyek előre, és újrafordítani ezt, és futtassa újra úszik 1. 270 00:12:09,060 --> 00:12:13,060 Valahogy bánta teszteltem tovább, mert a matematika nem annyira 271 00:12:13,060 --> 00:12:14,320 helyes már, úgy tűnik. 272 00:12:14,320 --> 00:12:15,630 De várjunk egy percet, talán ez csak a véletlen műve. 273 00:12:15,630 --> 00:12:17,810 Lehet, hogy a számítógép jár egy kicsit furcsa. 274 00:12:17,810 --> 00:12:21,810 Hadd menjek előre, és nem 20 tizedes és megnyugtatni magam, hogy tudom 275 00:12:21,810 --> 00:12:22,540 hogyan kell csinálni matek. 276 00:12:22,540 --> 00:12:23,460 Tudom, hogyan kell programozni. 277 00:12:23,460 --> 00:12:26,960 Legyen úszók 1 újrafordítani, és a fenébe is. 278 00:12:26,960 --> 00:12:31,110 Ez nagyon, nagyon kezd messze a védjegyet. 279 00:12:31,110 --> 00:12:32,490 >> Szóval, mi folyik itt? 280 00:12:32,490 --> 00:12:36,050 Ösztönösen, amely a mi feltételezések korábban körülbelül akkora, adattípusok, 281 00:12:36,050 --> 00:12:38,040 mit kell itt történik a motorháztető alatt? 282 00:12:38,040 --> 00:12:39,290 Igen? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Pontosan. 285 00:12:43,590 --> 00:12:46,480 Ha szeretné, hogy ez sokkal pontosság, ez egy fene nagy pontosság - 286 00:12:46,480 --> 00:12:48,770 20 szám tizedesvessző után. 287 00:12:48,770 --> 00:12:51,990 Nem lehet esetleg jelent tetszőleges számot, ha van egy 288 00:12:51,990 --> 00:12:52,930 tetszőleges számú bit. 289 00:12:52,930 --> 00:12:54,190 De mi nem. 290 00:12:54,190 --> 00:12:57,200 Egy úszó, már csak 32 bit. 291 00:12:57,200 --> 00:13:02,260 >> Tehát, ha 32 bit csak permutálódnak a módon - akárcsak mi emberek a, színpadon 292 00:13:02,260 --> 00:13:05,780 kezét felfelé vagy lefelé - a véges számú módon, csak véges számú 293 00:13:05,780 --> 00:13:08,640 A valós számok is képviseli azokkal bit. 294 00:13:08,640 --> 00:13:10,500 És így a számítógép végül az lesz, hogy 295 00:13:10,500 --> 00:13:11,730 kezd vágás sarkok. 296 00:13:11,730 --> 00:13:15,500 A számítógép tudja elrejteni ezeket az adatokat tőlünk egy kis időt. 297 00:13:15,500 --> 00:13:18,880 De ha elkezdjük dugta meg a számokat és keres egyre messzebb és messzebb a 298 00:13:18,880 --> 00:13:23,220 záró számok az egész szám, akkor kezdjük látni, hogy ez 299 00:13:23,220 --> 00:13:26,480 tulajdonképpen közelítő ötlet egytized. 300 00:13:26,480 --> 00:13:29,860 >> Így kiderül, tragikusan, van végtelen számú számok 301 00:13:29,860 --> 00:13:35,060 nem tudunk jelent pontosan a számítógép, legalább egy véges 302 00:13:35,060 --> 00:13:38,030 bitek száma, egy véges RAM mennyisége. 303 00:13:38,030 --> 00:13:41,210 Most sajnos, ez néha van valós következményei vannak. 304 00:13:41,210 --> 00:13:45,980 Ha az emberek nem nagyon értékelik ezt vagy valami magától értetődőnek azt a tényt, 305 00:13:45,980 --> 00:13:48,310 hogy a számítógép csak csináld, amit azt mondani, hogy igen, és nem 306 00:13:48,310 --> 00:13:51,430 megérteni ezeket mögöttes képviselet adatai - 307 00:13:51,430 --> 00:13:55,290 ami, őszintén szólva, az egyes nyelvek rejtve maradnak a felhasználó, ellentétben a C - 308 00:13:55,290 --> 00:13:56,500 néhány rossz dolog történhet. 309 00:13:56,500 --> 00:13:58,650 >> És amit gondoltam, hogy a az egy lépést hátra. 310 00:13:58,650 --> 00:14:00,420 És ez körülbelül egy nyolc perces videó. 311 00:14:00,420 --> 00:14:04,200 Ez sugárzott néhány évvel ezelőtt, és ez ad betekintést valójában mi mehet 312 00:14:04,200 --> 00:14:09,290 baj, ha alul-értékelni ezeket típusú adatok az igen túlságosan 313 00:14:09,290 --> 00:14:10,080 valós világban. 314 00:14:10,080 --> 00:14:12,965 Ha tudnánk homályos a fények néhány percig. 315 00:14:12,965 --> 00:14:14,360 >> SPEAKER 1: Most pedig a mérnöki 316 00:14:14,360 --> 00:14:17,160 katasztrófák Modern csodák. 317 00:14:17,160 --> 00:14:18,680 >> Számítógépek - 318 00:14:18,680 --> 00:14:21,340 már minden jön, hogy elfogadja a gyakran zavaró problémák 319 00:14:21,340 --> 00:14:23,170 , hogy menjen velük. 320 00:14:23,170 --> 00:14:27,570 Hibák, vírusok, és a szoftver hibák olyan alacsony áron, hogy fizessen a 321 00:14:27,570 --> 00:14:28,960 kényelem. 322 00:14:28,960 --> 00:14:32,040 De a high-tech és a nagy sebességű katonai és űrprogram 323 00:14:32,040 --> 00:14:38,650 alkalmazások, a legkisebb probléma lehet nagyítani a katasztrófa. 324 00:14:38,650 --> 00:14:44,480 >> Június 4-én, 1996, tudósok kész indít pilóta nélküli Ariane 5 rakéta. 325 00:14:44,480 --> 00:14:48,700 Ez vitt Tudományos műholdak megteremtésén pontosan hogyan 326 00:14:48,700 --> 00:14:53,250 A Föld mágneses mezeje kölcsönhatásba a napszél. 327 00:14:53,250 --> 00:14:57,540 A rakéta épült az európai Űrügynökség és emelte ki annak 328 00:14:57,540 --> 00:14:59,906 lehetőség a tengerparton Francia Guyana. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: Körülbelül 37 másodperc után a repülés, először észre 330 00:15:03,660 --> 00:15:04,910 valami rosszul megy. 331 00:15:04,910 --> 00:15:08,130 A fúvókák is forgatható a olyan módon, hogy tényleg nem. 332 00:15:08,130 --> 00:15:12,380 Körülbelül 40 másodperccel a repülés, egyértelműen a jármű volt a baj. 333 00:15:12,380 --> 00:15:14,400 És ez az, amikor elkészítették a döntés, hogy elpusztítsa azt. 334 00:15:14,400 --> 00:15:18,520 A tartomány biztonsági tiszt, a óriási belek, megnyomta a gombot, 335 00:15:18,520 --> 00:15:23,900 felrobbantották a rakéta előtt lehetett lesz veszélyt a közbiztonságra. 336 00:15:23,900 --> 00:15:27,810 >> SPEAKER 1: Ez volt az első út Az Ariane 5, és a pusztítás 337 00:15:27,810 --> 00:15:32,020 került sor, mert egy hiba beágyazott A rakéta szoftver. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: A probléma az Ariane az volt, hogy egy számot 339 00:15:33,980 --> 00:15:36,390 hogy a szükséges 64 bites kifejezni. 340 00:15:36,390 --> 00:15:39,420 És azt akarták átalakítani hogy egy 16-bites szám. 341 00:15:39,420 --> 00:15:43,130 Azt feltételezték, hogy a szám soha nem volt lesz nagyon nagy, hogy a legtöbb 342 00:15:43,130 --> 00:15:46,810 a számjegyek a 64-bites szám is nulla. 343 00:15:46,810 --> 00:15:48,270 Tévedtek. 344 00:15:48,270 --> 00:15:51,380 >> SPEAKER 1: A képtelenség az egyetlen szoftver program elfogadja a fajta 345 00:15:51,380 --> 00:15:55,350 generált egy másik volt a gyökere a hiba. 346 00:15:55,350 --> 00:15:59,970 Szoftverfejlesztés vált nagyon költséges része az új technológia. 347 00:15:59,970 --> 00:16:03,980 Az Ariane 4 rakéta már nagyon sikeres volt, így sok a szoftver 348 00:16:03,980 --> 00:16:07,480 létre azt is használt Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: Az alapvető probléma az volt, hogy az Ariane 5 gyorsabb volt, 350 00:16:11,980 --> 00:16:13,720 felgyorsult gyorsabb. 351 00:16:13,720 --> 00:16:17,250 , És a szoftver nem volt elszámolni ezt. 352 00:16:17,250 --> 00:16:20,770 >> SPEAKER 1: A pusztítás a rakéta egy hatalmas pénzügyi katasztrófa, 353 00:16:20,770 --> 00:16:24,200 minden miatt egy percig szoftver hiba. 354 00:16:24,200 --> 00:16:27,820 De nem ez volt az első alkalom, adatok konverziós problémák is gyötörte modern 355 00:16:27,820 --> 00:16:30,620 rakéta technológia. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: 1991-ben, és a start Az első Öböl-háború, a Patriot 357 00:16:34,480 --> 00:16:38,610 rakéta tapasztalt hasonló jellegű Egy szám konverziós probléma. 358 00:16:38,610 --> 00:16:44,910 Ennek eredményeként a 28 amerikai katonák meghalt és mintegy 100 másik megsebesült 359 00:16:44,910 --> 00:16:48,600 amikor a Patriot, ami kellett volna elleni bejövő Scuds, 360 00:16:48,600 --> 00:16:51,630 nem a tűz egy rakéta. 361 00:16:51,630 --> 00:16:55,110 >> SPEAKER 1: Ha Irak lerohanta Kuvait és Amerikában indított Sivatagi Vihar 362 00:16:55,110 --> 00:17:00,570 1991 elején, Patriot rakéta elemek vezényeltek védeni Szaúd-Arábia 363 00:17:00,570 --> 00:17:04,760 és Izrael az iraki Scud rakéta támadások. 364 00:17:04,760 --> 00:17:09,720 A Patriot egy amerikai közepes hatótávolságú föld-levegő rendszer által előállított 365 00:17:09,720 --> 00:17:11,569 A Raytheon cég. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE Postol: A méret a Patriot elfogó maga nagyjából 367 00:17:16,410 --> 00:17:17,710 20 méter hosszú. 368 00:17:17,710 --> 00:17:20,800 És súlya mintegy 2000 kg. 369 00:17:20,800 --> 00:17:22,940 És ez hordoz robbanófejet mintegy - 370 00:17:22,940 --> 00:17:24,905 Azt hiszem, ez nagyjából 150 £. 371 00:17:24,905 --> 00:17:31,030 És a robbanófej maga a nagy robbanó amely 372 00:17:31,030 --> 00:17:33,270 töredékek körül. 373 00:17:33,270 --> 00:17:37,490 A burkolat a robbanófej célja úgy viselkedni, mint sörét. 374 00:17:37,490 --> 00:17:40,720 >> SPEAKER 1: A rakéták hajtják négy egy konténer és szállítják 375 00:17:40,720 --> 00:17:43,050 egy félpótkocsi. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: The Patriot rakétavédelmi rendszer megy vissza 377 00:17:47,490 --> 00:17:50,710 legalább 20 éve. 378 00:17:50,710 --> 00:17:54,350 Ez volt az eredeti, mint egy légvédelmi rakéta 379 00:17:54,350 --> 00:17:56,190 lő le az ellenséges repülőgépek. 380 00:17:56,190 --> 00:18:02,490 Az első Öböl-háború, amikor a háború jött, a hadsereg akarta használni 381 00:18:02,490 --> 00:18:05,535 lő le Scuds, nem repülőgépek. 382 00:18:05,535 --> 00:18:09,310 Az iraki légierő nem volt így sok a probléma. 383 00:18:09,310 --> 00:18:12,450 De a hadsereg aggódott Scuds. 384 00:18:12,450 --> 00:18:15,950 És így igyekeztek frissíteni a Patriot. 385 00:18:15,950 --> 00:18:18,750 >> SPEAKER 1: lehallgató ellenséges rakéta közlekedő mach öt volt 386 00:18:18,750 --> 00:18:20,890 lesz elég ambiciózusak. 387 00:18:20,890 --> 00:18:25,590 De amikor a Patriot rohant be szolgáltatás, a hadsereg nem volt tudatában a 388 00:18:25,590 --> 00:18:31,710 Iraki módosítással, hogy tette a Scuds szinte lehetetlen, hogy elérje. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE Postol: Mi történt a Scuds voltak 390 00:18:35,240 --> 00:18:36,570 jön a volt stabil. 391 00:18:36,570 --> 00:18:37,532 Voltak ingadozik. 392 00:18:37,532 --> 00:18:43,220 Ennek oka az volt az irakiak, a Ahhoz, hogy 600 kilométerre a 393 00:18:43,220 --> 00:18:47,530 300 km-es hatótávolságú rakéta került Tömeg az első robbanófej. 394 00:18:47,530 --> 00:18:49,290 Tették a robbanófej könnyebb. 395 00:18:49,290 --> 00:18:53,110 Tehát most a Patriot megpróbálja hogy jöjjön a Scud. 396 00:18:53,110 --> 00:18:56,470 És a legtöbb időt, a túlnyomó többség az idő, akkor csak 397 00:18:56,470 --> 00:18:58,730 repülni a Scud. 398 00:18:58,730 --> 00:19:01,760 >> SPEAKER 1: Ha a Patriot rendszer szolgáltatók felismerték a Patriot fogadott 399 00:19:01,760 --> 00:19:06,690 a cél, hogy felrobbantotta a Patriots robbanófej hogy elkerülje az esetleges 400 00:19:06,690 --> 00:19:10,300 veszteségek, ha azt szabad hogy leesik a földre. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE Postol: Ez volt, amit a legtöbb az emberek látták, amint nagy tűzgolyók az égen 402 00:19:14,540 --> 00:19:20,350 és félreértik, mint elfogja A Scud robbanófejeket. 403 00:19:20,350 --> 00:19:23,320 >> SPEAKER 1: Bár az éjszakai égen Patriots úgy tűnt, hogy sikeresen 404 00:19:23,320 --> 00:19:27,530 megsemmisítése Scuds, a Dhahran ott lehet tévedés arról a 405 00:19:27,530 --> 00:19:29,140 teljesítmény. 406 00:19:29,140 --> 00:19:34,180 Ott, a Patriot radarrendszer elveszett nyomon bejövő Scud, és soha nem 407 00:19:34,180 --> 00:19:36,380 indított szoftverhiba miatt hiba. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Ez volt az izraeliek, akik először fedezte fel hogy minél hosszabb a rendszer 410 00:19:42,700 --> 00:19:48,020 volt, annál nagyobb az időeltérés esedékessé vált, hogy az óra 411 00:19:48,020 --> 00:19:50,470 beágyazott rendszer számítógéphez. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Körülbelül két héttel a tragédia Dhahran, az izraeliek 413 00:19:54,640 --> 00:19:58,440 jelentette a Honvédelmi Minisztérium hogy a rendszer időveszteség. 414 00:19:58,440 --> 00:20:01,280 Körülbelül nyolc óra futás, észrevették, hogy a rendszer 415 00:20:01,280 --> 00:20:03,530 egyre észrevehetően kevésbé pontos. 416 00:20:03,530 --> 00:20:07,710 A Védelmi Minisztérium reagált mondja az összes Patriot akkumulátorok 417 00:20:07,710 --> 00:20:10,500 , hogy ne hagyja el a rendszer a hosszú ideig. 418 00:20:10,500 --> 00:20:12,430 Soha nem azt mondta, amit hosszú idő volt. 419 00:20:12,430 --> 00:20:13,330 Nyolc óra? 420 00:20:13,330 --> 00:20:13,810 10 óra? 421 00:20:13,810 --> 00:20:14,990 1000 óra? 422 00:20:14,990 --> 00:20:17,150 Senki sem tudta. 423 00:20:17,150 --> 00:20:20,220 >> SPEAKER 1: The Patriot akkumulátor állomásozó A barakkban Dhahran 424 00:20:20,220 --> 00:20:24,660 és hibás belső óra volt több mint 100 óra éjjel 425 00:20:24,660 --> 00:20:27,470 Február 25. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: A nyomon az idő egy pontossága körülbelül egy tized másodperc. 427 00:20:31,770 --> 00:20:34,480 Most, egy tized másodperccel egy érdekes számot, mert nem lehet 428 00:20:34,480 --> 00:20:39,940 kifejezve pontosan bináris, ami azt jelenti, nem lehet pontosan kifejezni 429 00:20:39,940 --> 00:20:42,500 a modern digitális számítógép. 430 00:20:42,500 --> 00:20:46,920 Nehéz elhinni, de használja ezt a példát. 431 00:20:46,920 --> 00:20:49,000 Nézzük az első számú harmadikat. 432 00:20:49,000 --> 00:20:53,150 Egyharmada nem lehet kifejezni decimális pontosan. 433 00:20:53,150 --> 00:20:57,500 Egyharmada 0.333 folyik az a végtelen. 434 00:20:57,500 --> 00:21:02,270 Nincs módja, hogy a abszolút pontosság tizedes. 435 00:21:02,270 --> 00:21:05,370 Ez pontosan ugyanaz a fajta probléma hogy történt a Patriot. 436 00:21:05,370 --> 00:21:09,880 Minél hosszabb a rendszer futott, a legrosszabb az idő, hiba volt. 437 00:21:09,880 --> 00:21:13,840 >> SPEAKER 1: Miután 100 üzemóra, a hiba csak az időben 438 00:21:13,840 --> 00:21:16,140 mintegy egyharmada a második. 439 00:21:16,140 --> 00:21:20,800 De tekintve a célzás egy rakéta utazás Mach öt, azt eredményezte, hogy 440 00:21:20,800 --> 00:21:24,410 a követési hiba több mint 600 méter. 441 00:21:24,410 --> 00:21:27,670 Lenne egy végzetes hibát A katonák Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE Postol: Mi történt a Scud elindítása volt kimutatható a korai 443 00:21:33,450 --> 00:21:34,280 figyelmeztetés műholdak. 444 00:21:34,280 --> 00:21:38,550 És tudták, hogy a Scud jött azok általános irányt. 445 00:21:38,550 --> 00:21:41,000 Nem tudták, honnan jön. 446 00:21:41,000 --> 00:21:43,900 >> SPEAKER 1: volt már, hogy a radar eleme a Patriot rendszer 447 00:21:43,900 --> 00:21:48,910 védő Dhahran megtalálni és megtartani nyomon a bejövő ellenséges rakéta. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: a radar nagyon okos. 449 00:21:50,580 --> 00:21:53,770 Ez valóban nyomon helyzetét A Scud majd megjósolni, ahol 450 00:21:53,770 --> 00:21:57,160 valószínűleg a következő alkalommal A radar küldött impulzus ki. 451 00:21:57,160 --> 00:21:58,870 Ez volt az úgynevezett tartomány kaput. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE Postol: Akkor, amikor a Patriot dönt elegendő idő telt el, hogy menjen 453 00:22:04,020 --> 00:22:09,420 vissza és ellenőrizze a következő helyen ez észlelt objektum, megy vissza. 454 00:22:09,420 --> 00:22:14,450 Tehát, ha visszament a rossz helyén, akkor nem látja objektumot. 455 00:22:14,450 --> 00:22:18,200 És úgy dönt, hogy nem volt tárgya, ez egy hamis felderítése és 456 00:22:18,200 --> 00:22:19,680 csepp a pályán. 457 00:22:19,680 --> 00:22:22,970 >> SPEAKER 1: A beérkező Scud eltűnt A radar képernyőjén, és 458 00:22:22,970 --> 00:22:26,050 másodperccel később becsapódott a laktanyába. 459 00:22:26,050 --> 00:22:31,950 A Scud megölte 28 és ez volt az utolsó lőtt az első Öböl-háború. 460 00:22:31,950 --> 00:22:37,700 Tragikus, a frissített szoftver megérkezett a Dhahran a következő napon. 461 00:22:37,700 --> 00:22:41,800 A szoftver hiba volt fix, záró egy fejezetet a bajba jutott 462 00:22:41,800 --> 00:22:43,690 története Patriot rakéta. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot valójában egy mozaikszó A Fázisvezérelt nyomkövető 465 00:22:50,710 --> 00:22:51,960 Metszéspontja cél. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J MALAN: Rendben, így a kijózanító példa, az biztos. 468 00:23:00,840 --> 00:23:03,430 És szerencsére, az alacsonyabb szintű hiba nem valami, hogy mi lesz 469 00:23:03,430 --> 00:23:06,220 általában értékelni, természetesen nem pedig néhány 470 00:23:06,220 --> 00:23:07,360 legkorábbi programok. 471 00:23:07,360 --> 00:23:10,450 Inkább a legtöbb hiba azt is megtudhatod találkozás lesz logikus a természetben, 472 00:23:10,450 --> 00:23:12,900 szintaktikai természetű, amelyben a kód csak nem működik rendben. 473 00:23:12,900 --> 00:23:14,140 És tudod, hogy elég gyors. 474 00:23:14,140 --> 00:23:16,850 >> De különösen akkor, ha eljutunk a a szemeszter végén, ez lesz a 475 00:23:16,850 --> 00:23:20,620 egyre inkább annak lehetőségéről, hogy Tényleg azt hiszed, nehéz a tervezés 476 00:23:20,620 --> 00:23:22,960 a programok és a mögöttes képviselet 477 00:23:22,960 --> 00:23:24,520 ott is az adatok. 478 00:23:24,520 --> 00:23:28,010 Például mindjárt a MySQL, amely egy népszerű adatbázis motor 479 00:23:28,010 --> 00:23:30,850 amelyek segítségével a weboldalak adattárolásra a háttérben. 480 00:23:30,850 --> 00:23:34,630 És akkor meg kell kezdeni, hogy dönteni a a végén a félév nem csak az, amit 481 00:23:34,630 --> 00:23:38,790 típusú adatok ebbe az irányba kell használni de hogy pontosan hány bitet kell használni, 482 00:23:38,790 --> 00:23:42,740 függetlenül attól, hogy a tárolni kívánt óra a dátumok és időpontok, mint idő, és még 483 00:23:42,740 --> 00:23:46,890 dolgok, mint a milyen nagy akarsz a egyedi azonosító, hogy, mondjuk, a felhasználók 484 00:23:46,890 --> 00:23:47,680 az adatbázisban. 485 00:23:47,680 --> 00:23:51,210 >> Sőt, ha néhány van már Facebook számlák jó ideje, 486 00:23:51,210 --> 00:23:53,680 és tudja, hogyan kell, hogy hozzáférjenek a felhasználói ID - 487 00:23:53,680 --> 00:23:57,930 ami néha megjelenik a profil URL-je, kivéve, ha már kiválasztott egy 488 00:23:57,930 --> 00:24:02,070 beceneve az URL, vagy ha már használt Facebook grafikon API, a 489 00:24:02,070 --> 00:24:05,510 nyilvánosan elérhető API, amellyel kérheti Facebook a nyers adat - 490 00:24:05,510 --> 00:24:07,580 tudod mi a numerikus azonosító. 491 00:24:07,580 --> 00:24:10,880 És néhány évvel ezelőtt, a Facebook alapvetően kellett változtatni használja 492 00:24:10,880 --> 00:24:15,980 egyenértékű ints használata hosszú sokáig, mert az idő múlásával a felhasználók jönnek 493 00:24:15,980 --> 00:24:19,780 és megy, és hozzon létre sok számlák és hamis számlákkal, még ők is nagyon könnyen 494 00:24:19,780 --> 00:24:24,630 tudták kimeríteni olyasmi, mint egy 4 milliárd lehetséges értéke, mint egy int. 495 00:24:24,630 --> 00:24:28,340 >> Így több az ilyen jellegű kérdések az úton is. 496 00:24:28,340 --> 00:24:30,750 Jól van, ez volt casting. 497 00:24:30,750 --> 00:24:31,670 Ez pontatlanság. 498 00:24:31,670 --> 00:24:32,730 Néhány gyors bejelentések. 499 00:24:32,730 --> 00:24:35,710 Így szakaszok hivatalosan kezdődik a jövő Vasárnap, hétfő, kedd. 500 00:24:35,710 --> 00:24:39,080 Majd hallani mailben később ezen a héten mint a rész feladat. 501 00:24:39,080 --> 00:24:42,570 És akkor is itt, ezen a ponton, hogy hogy változtassa meg a részt, ha a 502 00:24:42,570 --> 00:24:45,660 menetrend mára megváltozott, vagy a komfort mára megváltozott. 503 00:24:45,660 --> 00:24:49,380 Közben P-set egy és hacker egy olyan mivel ez a csütörtök a lehetőséget, hogy 504 00:24:49,380 --> 00:24:52,450 kiterjeszti a határidőt egy a előírások péntek 505 00:24:52,450 --> 00:24:53,830 egy tipikus módon. 506 00:24:53,830 --> 00:24:57,500 >> Ismerd fel, hogy tartalmazza a probléma set specifikáció utasításokat 507 00:24:57,500 --> 00:25:02,770 hogyan kell használni a CS50 készüléket, győződjön meg, valamint néhány CS50 speciális eszközök 508 00:25:02,770 --> 00:25:06,540 mint a stílus 50, amely az Ön visszacsatolással dinamikusan a 509 00:25:06,540 --> 00:25:10,230 minősége a kódot stílus és ellenőrzés 50, ami az Ön számára 510 00:25:10,230 --> 00:25:13,160 dinamikus visszajelzést, hogy a kód helyessége. 511 00:25:13,160 --> 00:25:16,850 Bocsáss meg, hogy még mindig vasalás ki néhány csomó visszacsapó 50. 512 00:25:16,850 --> 00:25:21,490 Néhány az osztálytársaival, akik nem indul körül 04:00 péntek este, amikor 513 00:25:21,490 --> 00:25:25,130 A spec felment észre azóta néhány hiba, hogy mi dolgozunk 514 00:25:25,130 --> 00:25:29,010 keresztül, és elnézést, aki tapasztalt indokolatlan frusztrációt. 515 00:25:29,010 --> 00:25:30,340 Az én hibám. 516 00:25:30,340 --> 00:25:34,080 De majd nyomon követi a CS50 Beszéljétek meg, amikor, hogy megoldódott. 517 00:25:34,080 --> 00:25:35,700 >> Tehát egy szó pontszámok magukat. 518 00:25:35,700 --> 00:25:38,990 Így lesz egy-két hétig, mielőtt kezdenek visszajelzést probléma határozza 519 00:25:38,990 --> 00:25:40,640 mert még nincs tanítási fickó. 520 00:25:40,640 --> 00:25:44,510 És még akkor is, kezdjük értékelni A C probléma határozza, mielőtt 521 00:25:44,510 --> 00:25:46,970 menj vissza, és értékeli semmiből így hogy minél több releváns 522 00:25:46,970 --> 00:25:48,150 visszajelzések gyorsabban. 523 00:25:48,150 --> 00:25:51,870 De általában egy a tananyag, CS50 probléma határozza értékelik mentén 524 00:25:51,870 --> 00:25:53,580 a következő négy tengely - 525 00:25:53,580 --> 00:25:55,760 körét, korrektség, design, és stílus. 526 00:25:55,760 --> 00:25:59,210 >> Köre lesz a szám általában nulla és öt, hogy 527 00:25:59,210 --> 00:26:01,830 rögzíti, hogy mennyi a darab, amit leharapta. 528 00:26:01,830 --> 00:26:03,750 Általában, ha szeretné, hogy ez az öt. 529 00:26:03,750 --> 00:26:05,300 Akkor legalább megpróbált mindent. 530 00:26:05,300 --> 00:26:09,330 És észre, hogy ez egy multiplikatív tényező úgy, hogy ezzel csak egy része a 531 00:26:09,330 --> 00:26:12,520 probléma meg nem a legjobb stratégia. 532 00:26:12,520 --> 00:26:15,610 >> Eközben több nyilvánvaló az jelentősége korrektség - 533 00:26:15,610 --> 00:26:18,620 egyszerűen a programot korrekt tiszteletben tartja a specifikáció? 534 00:26:18,620 --> 00:26:21,510 Ez a súlyozott szándékosan több erősen, mint a másik két tengely által 535 00:26:21,510 --> 00:26:24,450 háromszorosára, mert felismertük, jellemzően fogsz tölteni 536 00:26:24,450 --> 00:26:28,600 sokkal több időt kergeti néhány hibát, kezd a kód működik, akkor 537 00:26:28,600 --> 00:26:31,540 vannak beljebb, és választás megfelelő változó nevek és a 538 00:26:31,540 --> 00:26:33,800 mint például, amely a másik végén A spektrum a stílus. 539 00:26:33,800 --> 00:26:36,160 >> Ez nem azt jelenti, a stílus nem fontos, és mi prédikálni át 540 00:26:36,160 --> 00:26:37,920 idő mind előadások és szakaszok. 541 00:26:37,920 --> 00:26:40,520 Stílus utal az esztétika a kód. 542 00:26:40,520 --> 00:26:43,980 Már választott jól megnevezett változókra amelyek rövid, de valamivel 543 00:26:43,980 --> 00:26:44,680 leíró? 544 00:26:44,680 --> 00:26:47,840 Van a kódot tagolt, mint amit látott előadás és módon következetes 545 00:26:47,840 --> 00:26:49,070 a stílus 50? 546 00:26:49,070 --> 00:26:51,220 >> Végül a mintaoltalom ott a közepén. 547 00:26:51,220 --> 00:26:54,090 Design a keményebb, hogy a ujját, mert ez sokkal 548 00:26:54,090 --> 00:26:55,000 szubjektív. 549 00:26:55,000 --> 00:26:58,610 De ez talán a legfontosabb A három tengely tekintetében pedagógiai 550 00:26:58,610 --> 00:27:02,050 értéke az idő múlásával, és ez lesz a A tanítási fickó lehetőséget 551 00:27:02,050 --> 00:27:04,110 az Ön számára a minőségi visszajelzést. 552 00:27:04,110 --> 00:27:08,100 Valóban, CS50 bár mi van ezek a képletek és a pontszámok, a végén 553 00:27:08,100 --> 00:27:11,350 A nap ezek nagyon szándékosan kis vödör - a pont értékek 554 00:27:11,350 --> 00:27:13,460 a nulla és három és nulla és öt. 555 00:27:13,460 --> 00:27:17,800 Mi nem próbáljuk felhívni nagyon durva vonalak a problémás készletek között, vagy 556 00:27:17,800 --> 00:27:21,490 a diákok, hanem elsősorban mint tudjuk a minőségi, kézírás 557 00:27:21,490 --> 00:27:25,490 visszajelzés, akár gépelt vagy szóbeli a az adott tanítás fickó, 558 00:27:25,490 --> 00:27:27,050 kapsz, hogy tudja, elég jól. 559 00:27:27,050 --> 00:27:32,340 >> De általában, ezek a súlyok hogy a különböző tengelyek lesz. 560 00:27:32,340 --> 00:27:35,480 Közben is érdemes szem bánod, hogy nem kell feltételezni, hogy a 561 00:27:35,480 --> 00:27:38,870 ötből három egy 60%-os ezért nagyjából nem. 562 00:27:38,870 --> 00:27:41,410 Három szándékosan célja, hogy egyfajta út közepén jó. 563 00:27:41,410 --> 00:27:43,480 Ha kapok hármasával a elején a félév, az 564 00:27:43,480 --> 00:27:46,340 valóban azt jelentette, hogy a jó helyen kezdeni. 565 00:27:46,340 --> 00:27:50,510 Ha kapok kettest, vásárok, ott van mindenképpen valami munkát fizetni egy kicsit 566 00:27:50,510 --> 00:27:53,250 több figyelmet, hogy kihasználják A szakaszok és munkaidőben. 567 00:27:53,250 --> 00:27:54,590 >> Ha kapok négyes és ötös, nagyszerű. 568 00:27:54,590 --> 00:27:57,430 De tényleg, reméljük, hogy pályák a diákok körében - igen 569 00:27:57,430 --> 00:28:00,575 személyre szabott egy diák, de a kezdő A félév itt egyfajta 570 00:28:00,575 --> 00:28:04,100 A két a három tartományban, de véget itt a 4-5 tartományban. 571 00:28:04,100 --> 00:28:05,440 Ez az, amit igazából keres. 572 00:28:05,440 --> 00:28:09,590 És mi szem előtt tartani, a delta, hogy Ön mutatnak hét között nulla és hét 573 00:28:09,590 --> 00:28:12,170 12 ha csinálok évfolyamon. 574 00:28:12,170 --> 00:28:16,380 Nem számít, hogy mi egyáltalán hogyan Ön vásár az elején, ha a 575 00:28:16,380 --> 00:28:19,330 pálya valóban felfelé és erős. 576 00:28:19,330 --> 00:28:24,000 >> Akadémiai őszinteség - úgyhogy tegyem én komolyabb hang egy pillanatra. 577 00:28:24,000 --> 00:28:28,510 Tehát ez a kurzus a különbséget küld több diák, mint bármely más 578 00:28:28,510 --> 00:28:30,950 a történelem, hogy a hirdetés fórumon, azt hiszem. 579 00:28:30,950 --> 00:28:34,220 Van egyfajta számolni ezen pontja, hogy milyen gyakran ez történik. 580 00:28:34,220 --> 00:28:37,090 És ez nem azért, mert a hallgatók 50 bármilyen nagyobb, mint a becstelen 581 00:28:37,090 --> 00:28:38,690 osztálytársak máshol. 582 00:28:38,690 --> 00:28:42,800 De észre azt is, hogy nagyon jók vagyunk észlelje ilyesmi. 583 00:28:42,800 --> 00:28:45,920 >> És ez az az előnye, hogy a számítástechnika osztály az, hogy mi 584 00:28:45,920 --> 00:28:49,110 lehet, és mi hasonlítsa össze az összes diák probléma határozza páronként ellen minden 585 00:28:49,110 --> 00:28:51,470 más, nem csak ebben az évben hanem minden korábbi évben. 586 00:28:51,470 --> 00:28:55,080 Megvan a képessége, mint a hallgatók az osztály, a Google és megtalálni kód 587 00:28:55,080 --> 00:28:57,440 oldalak, mint a GitHub és vitafórumokon. 588 00:28:57,440 --> 00:29:00,840 Egyáltalán megoldások CS50 a p-készletek lebeg ott. 589 00:29:00,840 --> 00:29:02,710 De ha megtalálja őket, megtaláljuk őket. 590 00:29:02,710 --> 00:29:07,130 És mindez nagyon automatizált és egyszerű, és szomorú, hogy megtaláljuk. 591 00:29:07,130 --> 00:29:10,990 >> De szeretném hangsúlyozni azt is, hogy a Természetesen az akadémiai őszinteség politikája 592 00:29:10,990 --> 00:29:13,960 nagyon azt jelentette, hogy nagyon a másik, hogy a szellem. 593 00:29:13,960 --> 00:29:17,506 Sőt, ebben az évben már fogalmazzák újra a dolgokat a tananyag, hogy ilyen, pont 594 00:29:17,506 --> 00:29:19,790 dot dot, és részletesebben a tantervet. 595 00:29:19,790 --> 00:29:22,860 De az átfogó témája során valóban ésszerűnek. 596 00:29:22,860 --> 00:29:26,160 Tisztában vagyunk azzal, hogy van egy jelentős mennyiségű pedagógiai 597 00:29:26,160 --> 00:29:30,550 értéket együttműködni, bizonyos mértékig, osztálytársaival, amely akkor 598 00:29:30,550 --> 00:29:33,700 két vagy három, vagy több is állt a táblán 599 00:29:33,700 --> 00:29:35,670 Whiteboarding, így beszél, a gondolatok - 600 00:29:35,670 --> 00:29:39,480 írásban ki pszeudokódját képekben, diagramm mi Mario, ha 601 00:29:39,480 --> 00:29:41,350 fel, hogy írja meg az első A pszeudokódja. 602 00:29:41,350 --> 00:29:43,240 Mit kell a mohó algoritmus - 603 00:29:43,240 --> 00:29:46,100 hogyan kell viselkednie, hogy egy probléma határozza egyet? 604 00:29:46,100 --> 00:29:50,440 >> És rájön, hogy viselkedése hogy arra ösztönözzük nagyon 605 00:29:50,440 --> 00:29:51,470 sok ezekhez hasonlót. 606 00:29:51,470 --> 00:29:53,890 És a tananyag, akkor megjelenik egy csomó golyó alatt 607 00:29:53,890 --> 00:29:57,740 ésszerű kategória és a nem megfelelő kategória, amely segít, hogy segítsünk 608 00:29:57,740 --> 00:30:00,740 Ön tekerje elméd körül, ahol mi rajzolni a vonalat. 609 00:30:00,740 --> 00:30:04,340 És általában, a tisztességes szabály az, hogy ha küzd megoldani 610 00:30:04,340 --> 00:30:07,990 néhány hiba, és a barát vagy osztálytárs ül melletted, akkor 611 00:30:07,990 --> 00:30:11,530 indokolt, hogy megmutathassa neki a kódot, és azt mondják, hé, tud segíteni 612 00:30:11,530 --> 00:30:13,700 meg kitalálni, mi baj van? 613 00:30:13,700 --> 00:30:17,110 >> Mi általában nem ölelés a szemközti oldalon. 614 00:30:17,110 --> 00:30:20,730 Ez nem a helyes válasz a barát vagy osztálytárs itt mondani, ó, 615 00:30:20,730 --> 00:30:22,510 csak nézd meg az enyém, és a szám ki azt, hogy az. 616 00:30:22,510 --> 00:30:24,400 Ez a fajta, ésszerűtlen. 617 00:30:24,400 --> 00:30:27,750 De, hogy valaki más, egy másik agy, másik szempár nézni 618 00:30:27,750 --> 00:30:31,620 a képernyőn, vagy nézd meg a kódot és azt mondják, nem akarod 619 00:30:31,620 --> 00:30:32,760 , hogy egy hurok itt? 620 00:30:32,760 --> 00:30:34,800 Vagy akarod hogy pontosvessző itt? 621 00:30:34,800 --> 00:30:37,090 Vagy ó, hibaüzenet jelent meg. 622 00:30:37,090 --> 00:30:39,580 Ezek nagyon ésszerű és ösztönözni viselkedést. 623 00:30:39,580 --> 00:30:44,010 >> Az esetekben, amelyekre én utalva korábban szűkülnek le, hogy ha a diákok 624 00:30:44,010 --> 00:30:47,350 késő este, hogy rossz ítélet döntések és küldje a kódot, hogy 625 00:30:47,350 --> 00:30:50,130 valaki mást, vagy csak azt mondom, Itt, ez a Dropbox vagy 626 00:30:50,130 --> 00:30:51,610 Googling késő este. 627 00:30:51,610 --> 00:30:54,880 És így azt javasoljuk, és Könyörgöm, ha van az elkerülhetetlen 628 00:30:54,880 --> 00:30:58,450 pillanatok a stressz, akkor bumping fel szemben a határidő, nincs késő 629 00:30:58,450 --> 00:31:01,490 nap, mivel ez már pénteken, hogy az pont, e-mailben a tanfolyam feje vagy 630 00:31:01,490 --> 00:31:02,330 magam közvetlenül. 631 00:31:02,330 --> 00:31:04,790 Mondd, figyelj, én vagyok az én töréspontot itt. 632 00:31:04,790 --> 00:31:06,660 Vessünk egy beszélgetés és kitalálni. 633 00:31:06,660 --> 00:31:10,400 Igénybe az interneten, vagy más nem ésszerű viselkedés soha nem a 634 00:31:10,400 --> 00:31:13,070 oldatot, és a túl sok a osztálytársai már nem itt 635 00:31:13,070 --> 00:31:15,150 campus azért rossz ítélet. 636 00:31:15,150 --> 00:31:17,840 De ez nagyon könnyű szoknya, hogy a vonal. 637 00:31:17,840 --> 00:31:22,950 >> És itt van egy kis kép felvidítani akkor fel Reddit így most 638 00:31:22,950 --> 00:31:25,720 minden rendben lesz. 639 00:31:25,720 --> 00:31:30,210 >> Tehát egy gyors bedugni, akkor , ahol abbahagytuk. 640 00:31:30,210 --> 00:31:33,690 Így a múlt héten, emlékeztetni arra, hogy be körülmények között, nem Scratch 641 00:31:33,690 --> 00:31:34,880 de C ebben az időben. 642 00:31:34,880 --> 00:31:38,300 És volt néhány új szintaxis, de Tényleg nem az új ötletek önmagában. 643 00:31:38,300 --> 00:31:42,630 Volt logikai kifejezések, hogy mi lehetett vagy azzal együtt két függőleges 644 00:31:42,630 --> 00:31:46,490 rudak vagy és ezzel együtt a két ampersands, mondván, hogy a bal 645 00:31:46,490 --> 00:31:49,990 és a jobb kell, hogy igaz legyen ezt végrehajtani. 646 00:31:49,990 --> 00:31:53,150 Aztán volt kapcsolók, amely néztünk A rövid, de azt javaslom, tényleg 647 00:31:53,150 --> 00:31:56,830 csak a különböző szintaxis eléréséhez ugyanaz a fajta cél, ha tudod, hogy a 648 00:31:56,830 --> 00:31:59,270 előre, milyen esetben lesznek. 649 00:31:59,270 --> 00:32:00,160 >> Megnéztük hurkok. 650 00:32:00,160 --> 00:32:03,340 A for ciklus talán a leggyakoribb, vagy legalább az egyik, hogy az emberek 651 00:32:03,340 --> 00:32:05,330 általában eléri az ösztönösen. 652 00:32:05,330 --> 00:32:08,240 Annak ellenére, hogy úgy néz ki, egy kicsit rejtélyes, látni fogod, sok-sok példa erre 653 00:32:08,240 --> 00:32:11,590 nemsokára, ahogy van Már a múlt hét végén. 654 00:32:11,590 --> 00:32:14,280 While hasonlóképpen elérni ugyanazt a dolgot. 655 00:32:14,280 --> 00:32:17,550 De ha azt szeretnénk, hogy nem minden incrementation vagy frissítése 656 00:32:17,550 --> 00:32:20,230 változó értékeit, akkor a csinálni többet kézzel, mint a 657 00:32:20,230 --> 00:32:22,440 A ciklus előtt teszi. 658 00:32:22,440 --> 00:32:25,310 És akkor ott van a do-while ciklus, amely lehetővé teszi számunkra, hogy tegyünk valamit a 659 00:32:25,310 --> 00:32:28,460 legalább egyszer, míg valami más igaz. 660 00:32:28,460 --> 00:32:31,550 És ez különösen jó programok vagy a játékok, ahol szeretné 661 00:32:31,550 --> 00:32:33,810 jelezve a felhasználónak, hogy valami legalább egyszer. 662 00:32:33,810 --> 00:32:37,110 És akkor, ha ő nem működik együtt, érdemes csinálni 663 00:32:37,110 --> 00:32:38,420 újra és újra. 664 00:32:38,420 --> 00:32:41,270 >> Változók, eközben volt vonalak A kód, mint ez, ami 665 00:32:41,270 --> 00:32:41,950 két sor. 666 00:32:41,950 --> 00:32:44,830 Lehet nyilvánítják int hívott számláló, pontosvessző. 667 00:32:44,830 --> 00:32:47,660 Vagy csak bevallani és határozza meg azt, hogy úgy mondjam. 668 00:32:47,660 --> 00:32:49,950 Ad ez egy értéket ugyanabban az időben. 669 00:32:49,950 --> 00:32:51,890 >> És akkor végül, beszélgettünk a funkciókat. 670 00:32:51,890 --> 00:32:54,270 És ez egy jó példa az értelemben, hogy ez szemlélteti 671 00:32:54,270 --> 00:32:55,840 kétféle funkciót. 672 00:32:55,840 --> 00:32:59,030 Az egyik getString (), amely ismét kap egy stringet a felhasználó. 673 00:32:59,030 --> 00:33:02,040 De getString () a fajta érdekes, amennyiben már használta, 674 00:33:02,040 --> 00:33:05,620 mert már mindig azt valamit a bal oldalon egy 675 00:33:05,620 --> 00:33:06,600 egyenlőségjel. 676 00:33:06,600 --> 00:33:09,830 Ez azt jelenti, hogy getString () visszaad egy értéket. 677 00:33:09,830 --> 00:33:11,970 Visszatér, természetesen, a string. 678 00:33:11,970 --> 00:33:15,130 És akkor a bal oldali, vagyunk egyszerűen megtakarítás, hogy a húr belsejében egy 679 00:33:15,130 --> 00:33:16,580 nevű változó nevét. 680 00:33:16,580 --> 00:33:21,100 >> Ez más, bizonyos értelemben, a printf mert printf, legalábbis a mi 681 00:33:21,100 --> 00:33:23,540 használata itt nem adott vissza semmit. 682 00:33:23,540 --> 00:33:24,960 Mellesleg, ez vissza valamit. 683 00:33:24,960 --> 00:33:26,380 Egyszerűen nem érdekel, hogy mi van. 684 00:33:26,380 --> 00:33:29,090 De ez van, amit az nevezett mellékhatás. 685 00:33:29,090 --> 00:33:31,840 És mi az, hogy a mellékhatás minden esetben láttunk eddig? 686 00:33:31,840 --> 00:33:34,720 Mit jelent a printf csinálni? 687 00:33:34,720 --> 00:33:37,780 Kiírja valamit a képernyőn, feliratokat vagy számok, vagy valami 688 00:33:37,780 --> 00:33:38,380 a képernyőn. 689 00:33:38,380 --> 00:33:41,170 És ez csak úgy egy mellékhatás mert nem igazán adják 690 00:33:41,170 --> 00:33:41,900 vissza nekem. 691 00:33:41,900 --> 00:33:44,770 Ez nem válasz belsejében egy fekete doboz, hogy én is, majd 692 00:33:44,770 --> 00:33:46,130 elérjen és megragad. 693 00:33:46,130 --> 00:33:49,160 Ez csak csinálja a saját, sokkal mint Colton volt dugva a 694 00:33:49,160 --> 00:33:52,560 fekete doboz a múlt héten, és valahogy varázslatosan rajzolt a fórumon 695 00:33:52,560 --> 00:33:54,500 nélkülem valójában szó. 696 00:33:54,500 --> 00:33:55,560 Ez lenne a mellékhatás. 697 00:33:55,560 --> 00:33:59,100 De ha tényleg kellett elérni vissza itt, és azt mondják, ó, itt a szöveg 698 00:33:59,100 --> 00:34:02,040 a felhasználó, ami egy visszatérési értéket. 699 00:34:02,040 --> 00:34:05,650 >> És eddig még csak használt funkciókhoz hogy mások írtak. 700 00:34:05,650 --> 00:34:09,219 De mi is valójában ezek a dolgokat magunk. 701 00:34:09,219 --> 00:34:12,730 Szóval megyek a CS50 készüléket újra. 702 00:34:12,730 --> 00:34:16,020 Hadd fejezzem be a lap, hogy már nyitott egy perce. 703 00:34:16,020 --> 00:34:18,530 És hadd menjen előre, és hozzon létre egy új fájlt. 704 00:34:18,530 --> 00:34:22,400 És én megyek előre, és hívják ezt positive.c. 705 00:34:22,400 --> 00:34:24,770 Szóval szeretnék csinálni valamit pozitív számok itt. 706 00:34:24,770 --> 00:34:27,219 Szóval megyek előre, és nem int - 707 00:34:27,219 --> 00:34:28,000 megijedni - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Ne tegyük, hogy ugyanaz hiba, mint korábban. 710 00:34:34,280 --> 00:34:40,020 Int main (void), nyitott göndör zárójel, zárt zárójel. 711 00:34:40,020 --> 00:34:41,639 >> És most azt akarom, hogy tegye a következőket. 712 00:34:41,639 --> 00:34:44,600 Szeretnék írni egy programot, amely ragaszkodik ahhoz, hogy a felhasználó megadja 713 00:34:44,600 --> 00:34:46,770 nekem egy pozitív egész szám. 714 00:34:46,770 --> 00:34:50,969 Tehát nincs GetPositiveInt funkció A CS50 könyvtárban. 715 00:34:50,969 --> 00:34:52,610 Csak getInt (). 716 00:34:52,610 --> 00:34:55,790 De ez rendben van, mert a konstrukciókat amit szabhat 717 00:34:55,790 --> 00:34:59,360 kicsit több korlátot, hogy az értéket. 718 00:34:59,360 --> 00:35:00,990 Én is valami ilyesmit. 719 00:35:00,990 --> 00:35:02,780 >> Így int n - 720 00:35:02,780 --> 00:35:04,920 és ha gépelés mellett, csak észre Én megyek vissza, és 721 00:35:04,920 --> 00:35:06,430 változtatni néhány dolgot, egy pillanat - 722 00:35:06,430 --> 00:35:09,960 így int n értéke getInt (). 723 00:35:09,960 --> 00:35:11,780 És ez megy, hogy egy int n belül. 724 00:35:11,780 --> 00:35:13,830 És hadd legyek egy leíró jellegű. 725 00:35:13,830 --> 00:35:23,270 Hadd mondjak valamit, mint én, hogy a kereslet adsz nekem egy pozitív egész szám. 726 00:35:23,270 --> 00:35:23,550 >> Rendben van. 727 00:35:23,550 --> 00:35:25,250 Tehát csak egy kis útmutató. 728 00:35:25,250 --> 00:35:26,270 És most mit tehetek? 729 00:35:26,270 --> 00:35:29,840 Nos, azt már tudjuk, az én egyszerű feltételek vagy ágak, mint én 730 00:35:29,840 --> 00:35:36,100 volt a Scratch, tudnék mondani valamit mint ha n értéke kisebb, vagy egyenlő, mint 731 00:35:36,100 --> 00:35:44,460 nulla, akkor akarok valamit tetszik, hogy nem pozitív. 732 00:35:44,460 --> 00:35:45,560 És akkor tudtam csinálni - 733 00:35:45,560 --> 00:35:47,310 OK, de azt szeretné, hogy, hogy az int. 734 00:35:47,310 --> 00:35:52,020 Így tudtam felmenni ide, és tudtam, kedves példány ezt, és a francia. 735 00:35:52,020 --> 00:35:52,570 És akkor, OK. 736 00:35:52,570 --> 00:35:56,990 Tehát, ha n értéke kisebb, mint, vagy nullával egyenlő erre. 737 00:35:56,990 --> 00:35:58,900 >> Nos, mi van, ha a felhasználó nem működik együtt? 738 00:35:58,900 --> 00:36:01,560 Nos, akkor megyek kölcsönzése itt. 739 00:36:01,560 --> 00:36:03,130 Aztán megy itt és itt és itt. 740 00:36:03,130 --> 00:36:06,420 Tehát ez nyilvánvalóan nem a megoldás, nem igaz? 741 00:36:06,420 --> 00:36:07,810 Mert nincs vége a láthatáron. 742 00:36:07,810 --> 00:36:13,100 Ha azt akarom, hogy a kereslet, hogy a felhasználó megadja nekem egy pozitív egész szám, én 743 00:36:13,100 --> 00:36:14,150 tényleg csak az int. 744 00:36:14,150 --> 00:36:15,620 Én majd ellenőrizze, hogy az int. 745 00:36:15,620 --> 00:36:18,570 De aztán érdemes ellenőrizni, hogy újra és ellenőrizze, hogy újra és ellenőrizze ismét. 746 00:36:18,570 --> 00:36:21,680 Tehát nyilvánvaló, hogy mi a jobb konstrukciót használ itt? 747 00:36:21,680 --> 00:36:22,840 Rendben, tehát valamiféle hurok. 748 00:36:22,840 --> 00:36:25,430 >> Így fogok megszabadulni szinte minden ezt. 749 00:36:25,430 --> 00:36:27,320 És azt szeretnénk, hogy ez int legalább egyszer. 750 00:36:27,320 --> 00:36:28,890 Így fogok mondani csinálni - 751 00:36:28,890 --> 00:36:32,110 és jövök vissza míg csak egy pillanatra - 752 00:36:32,110 --> 00:36:33,050 Most mit csináljak? 753 00:36:33,050 --> 00:36:35,860 Fogok csinálni int n kapja getInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Szóval ez elég jó. 756 00:36:37,250 --> 00:36:39,750 És most milyen gyakran Azt akarom, hogy ez? 757 00:36:39,750 --> 00:36:45,770 >> Hadd tegye a printf belsejében a hurok így a kereslet újra és újra, 758 00:36:45,770 --> 00:36:46,740 ha kell. 759 00:36:46,740 --> 00:36:49,720 És mit akarok ezt míg a feltétel, hogy nem? 760 00:36:49,720 --> 00:36:53,870 Azt akarom, hogy ezt míg mi a helyzet? 761 00:36:53,870 --> 00:36:54,125 Igen. 762 00:36:54,125 --> 00:36:55,390 N értéke kisebb, vagy egyenlő, mint nulla. 763 00:36:55,390 --> 00:36:58,180 Így már, most már jelentősen takarítani ezt a kódot fel. 764 00:36:58,180 --> 00:37:00,700 Már kölcsön egy nagyon egyszerű konstrukció - A do-while ciklus. 765 00:37:00,700 --> 00:37:04,690 Loptam csak a fontos vonalak A kód, hogy elkezdtem a másolás és 766 00:37:04,690 --> 00:37:05,960 beillesztés, ami nem volt bölcs. 767 00:37:05,960 --> 00:37:09,790 És most megyek, hogy ténylegesen be ez itt, és csak csináld egyszer. 768 00:37:09,790 --> 00:37:12,990 >> És most mit akarok csinálni A legvégén a program? 769 00:37:12,990 --> 00:37:16,810 Én csak mondom, valami egyszerű, tetszik, köszönöm a - és 770 00:37:16,810 --> 00:37:18,980 Megteszem% i az int - 771 00:37:18,980 --> 00:37:23,270 backslash n, vessző, majd csatlakozó n, pontosvessző. 772 00:37:23,270 --> 00:37:23,910 >> Rendben van. 773 00:37:23,910 --> 00:37:27,290 Úgyhogy lássuk, mi történik most amikor elindul a program. 774 00:37:27,290 --> 00:37:30,600 Én megyek előre, és nem, hogy pozitív. 775 00:37:30,600 --> 00:37:30,880 Rohadt. 776 00:37:30,880 --> 00:37:31,600 A néhány hibát. 777 00:37:31,600 --> 00:37:32,960 Hadd lépjünk vissza az első. 778 00:37:32,960 --> 00:37:34,020 Ne dolgozzon rajtuk keresztül visszafelé. 779 00:37:34,020 --> 00:37:37,000 A munka rajtuk keresztül felülről lefelé nehogy kaszkád, és csak 780 00:37:37,000 --> 00:37:38,630 egy dolog, hogy tévedek. 781 00:37:38,630 --> 00:37:42,532 Implicit nyilatkozat funkció getInt (). 782 00:37:42,532 --> 00:37:43,020 Igen. 783 00:37:43,020 --> 00:37:44,420 Tehát ez nem volt elég. 784 00:37:44,420 --> 00:37:46,760 Valahogy ugyanazt a hibát, de egy kicsit más ebben az időben. 785 00:37:46,760 --> 00:37:51,940 Azt kell, hogy ne csak azokat, hanem stdio.h cs50.h is, amely magában foglalja a 786 00:37:51,940 --> 00:37:56,770 úgynevezett nyilatkozatok kap int, amely tanítják a készülék, vagy tanít 787 00:37:56,770 --> 00:37:58,760 C mit getInt () függvény. 788 00:37:58,760 --> 00:37:59,550 >> Hadd mentse. 789 00:37:59,550 --> 00:38:02,040 Megyek figyelmen kívül hagyja a többi hibák mert fogom remélni, hogy ők 790 00:38:02,040 --> 00:38:05,210 módon kapcsolódik a hiba Már rögzített. 791 00:38:05,210 --> 00:38:08,710 Hadd megy előre, és újrafordítani az, hogy pozitív, Enter. 792 00:38:08,710 --> 00:38:09,020 Rohadt. 793 00:38:09,020 --> 00:38:09,985 Három hibák, még mindig. 794 00:38:09,985 --> 00:38:12,650 Hadd felfelé az első. 795 00:38:12,650 --> 00:38:14,320 A fel nem használt változó n. 796 00:38:14,320 --> 00:38:15,850 Már nem láttam ilyet. 797 00:38:15,850 --> 00:38:17,200 És ez is egy kicsit rejtélyes. 798 00:38:17,200 --> 00:38:18,850 Ez a kimenet a fordító. 799 00:38:18,850 --> 00:38:23,610 És hogy ez mit kiemelt sor ott - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 azt mondja, ez azt mondja on line kilenc positive.c, a 13. karakter 801 00:38:28,960 --> 00:38:31,510 13. oszlopban elkövette ezt a hibát. 802 00:38:31,510 --> 00:38:34,230 >> És különösen, hogy mondja nekem nem használt változó n. 803 00:38:34,230 --> 00:38:35,790 Tehát lássuk - 804 00:38:35,790 --> 00:38:37,150 vonal kilenc. 805 00:38:37,150 --> 00:38:40,430 Én vagyok a n abban az értelemben, hogy a Adok neki értéket. 806 00:38:40,430 --> 00:38:44,200 De amit a fordító nem szeretek, hogy nem vagyok látszólag használja. 807 00:38:44,200 --> 00:38:45,560 De várjunk egy percet, én vagyok használ ez. 808 00:38:45,560 --> 00:38:48,170 A 11. sor, én vagyok a itt. 809 00:38:48,170 --> 00:38:52,430 De ha tovább lapozás at positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 így sorban 11 karakter 12, a fordító mondja el, használata 811 00:38:56,230 --> 00:38:58,670 be nem jelentett azonosító n. 812 00:38:58,670 --> 00:39:02,760 >> Így a be nem jelentett módon van nincs megadva, mint egy 813 00:39:02,760 --> 00:39:04,970 változó adat típusát. 814 00:39:04,970 --> 00:39:05,500 De várjunk csak egy percet. 815 00:39:05,500 --> 00:39:09,150 Én pontosan ezt tette a sorban kilenc. 816 00:39:09,150 --> 00:39:11,100 Tehát valaki nagyon zavaros itt. 817 00:39:11,100 --> 00:39:14,900 Ez sem engem, sem a fordító, mert sorban kilenc, megint én érvényben, amely a 818 00:39:14,900 --> 00:39:18,650 int n, és én, hogy hozzárendeli a visszatérési értéke getInt (). 819 00:39:18,650 --> 00:39:22,930 Akkor én használ, hogy n változó sorban 11. és ellenőrzése, ha annak értéke kisebb, 820 00:39:22,930 --> 00:39:24,050 mint, vagy egyenlő nullával. 821 00:39:24,050 --> 00:39:27,430 De ez a látszólag rossz, törött, miért? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Mondd még egyszer? 824 00:39:32,490 --> 00:39:35,690 >> Ah, azt be kell jelenteniük n előtt belépő a hurok. 825 00:39:35,690 --> 00:39:36,370 De miért? 826 00:39:36,370 --> 00:39:39,830 Úgy értem, mi csak javaslatot egy kicsit ezelőtt ez rendben van, hogy állapítsa meg változókat 827 00:39:39,830 --> 00:39:43,600 minden egy sorban, majd a hozzá nekik értéket. 828 00:39:43,600 --> 00:39:46,790 A globális változó - térjünk vissza az, hogy az ötlet csak egy pillanat. 829 00:39:46,790 --> 00:39:48,690 Miért akarod, hogy kívülre a hurok? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Ez az. 832 00:40:03,830 --> 00:40:06,780 Pontosan. 833 00:40:06,780 --> 00:40:09,610 >> Tehát, bár kissé ellentétes az, hadd foglaljam össze. 834 00:40:09,610 --> 00:40:13,510 Amikor Ön kijelenti n belül A do blokkban - 835 00:40:13,510 --> 00:40:16,320 külön belső a zárójelek - 836 00:40:16,320 --> 00:40:19,210 hogy a változó n mi úgynevezett hatály - 837 00:40:19,210 --> 00:40:23,210 független a pontozási rendszer a természetesen -, de van egy köre, ami 838 00:40:23,210 --> 00:40:25,190 csak azok zárójelek. 839 00:40:25,190 --> 00:40:28,460 Más szóval, általában ha kijelentik egy változó belsejében egy sor 840 00:40:28,460 --> 00:40:33,370 zárójelek, hogy a változó csak akkor létezik belül a zárójelek. 841 00:40:33,370 --> 00:40:37,320 Tehát, hogy a logika egyedül, még akkor is Már kijelentette n sorban kilenc, a 842 00:40:37,320 --> 00:40:41,910 lényegében eltűnik a hatály, eltűnik a memóriából, hogy úgy mondjam, 843 00:40:41,910 --> 00:40:43,370 mire hit line 11. 844 00:40:43,370 --> 00:40:47,370 Mivel a 11. sor, sajnos, kívül a zárójelek. 845 00:40:47,370 --> 00:40:51,540 >> Szóval sajnos nem tudja kijavítani ezt megy vissza, amit tettem ilyet. 846 00:40:51,540 --> 00:40:53,370 Lehet, hogy először ezt. 847 00:40:53,370 --> 00:40:56,370 De mi most nem csinál ciklikusan? 848 00:40:56,370 --> 00:40:58,260 Te nyilván nem kap Az int ciklikusan. 849 00:40:58,260 --> 00:41:01,320 Így tudjuk elhagyni a getInt (), és kell hagyni a getInt () belül a 850 00:41:01,320 --> 00:41:04,420 loop mert ez az, amit szeretnénk ellep a felhasználó újra és újra. 851 00:41:04,420 --> 00:41:08,660 De ez nem elegendő ahhoz, hogy menjen akár vonal, mondjuk, hat. 852 00:41:08,660 --> 00:41:10,150 Int n, pontosvessző. 853 00:41:10,150 --> 00:41:12,990 Ne add értéke még, mert nem kell, hogy csak még. 854 00:41:12,990 --> 00:41:16,220 >> De most itt, felhívás - ez lenne egy nagyon egyszerű hiba. 855 00:41:16,220 --> 00:41:19,440 Nem akarom, hogy az árnyék a korábbi nyilatkozat n. 856 00:41:19,440 --> 00:41:22,830 Szeretném használni az n, hogy valóban létezik. 857 00:41:22,830 --> 00:41:25,780 És most a 10. sorban, Én hozzá n értéket. 858 00:41:25,780 --> 00:41:28,580 De soros hathengeres, kijelentem n. 859 00:41:28,580 --> 00:41:32,940 És akkor én is, vagy nem tudok használni a 12-es vonal most? 860 00:41:32,940 --> 00:41:37,120 Nem tudok, mert amelyek között göndör fogszabályozó n kijelentette, most? 861 00:41:37,120 --> 00:41:38,770 Az egyik itt vonalon öt. 862 00:41:38,770 --> 00:41:40,330 Egy itt 14. sor. 863 00:41:40,330 --> 00:41:49,770 Tehát, ha most kicsinyíteni, mentse ezt a fájlt, menj vissza, és fut a pozitív, a 864 00:41:49,770 --> 00:41:50,820 össze ebben az időben. 865 00:41:50,820 --> 00:41:51,940 Szóval ez már folyamatban van. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Pozitív, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Követelem, hogy adjon nekem pozitív egész. 868 00:41:56,060 --> 00:41:57,750 Negatív 1. 869 00:41:57,750 --> 00:41:59,020 Negatív 2. 870 00:41:59,020 --> 00:42:00,680 Negatív 3.. 871 00:42:00,680 --> 00:42:01,760 Zero. 872 00:42:01,760 --> 00:42:03,000 Egy. 873 00:42:03,000 --> 00:42:05,130 És köszönöm az egyik mi már nyomtatott. 874 00:42:05,130 --> 00:42:07,400 >> Hadd próbáljak valami mást, kíváncsiságból. 875 00:42:07,400 --> 00:42:09,600 Én is azt mondta, hogy be egy egész számot. 876 00:42:09,600 --> 00:42:12,870 De mi van, ha ahelyett, hogy írja bárány? 877 00:42:12,870 --> 00:42:14,460 Szóval most már látni egy másik gyors - 878 00:42:14,460 --> 00:42:15,350 próbálja újra. 879 00:42:15,350 --> 00:42:17,670 De sehol a kódomat írtam újra. 880 00:42:17,670 --> 00:42:22,320 Tehát ahol feltehetően ez újra azonnali érkező, mit mondana? 881 00:42:22,320 --> 00:42:23,540 Igen, az getInt () is. 882 00:42:23,540 --> 00:42:26,650 Tehát az egyik dolog, CS50 munkatársai nem az Ön számára, legalábbis ezek az első néhány 883 00:42:26,650 --> 00:42:30,400 héten, már írt egy összeget hiba ellenőrzése annak biztosítására, hogy 884 00:42:30,400 --> 00:42:34,260 hívja getInt (), akkor legalább vissza egy int a felhasználó. 885 00:42:34,260 --> 00:42:35,460 Ön nem fog egy string. 886 00:42:35,460 --> 00:42:36,440 Ön nem fog egy char. 887 00:42:36,440 --> 00:42:39,660 Ön nem fog valami mássá. 888 00:42:39,660 --> 00:42:40,510 Kapsz egy int. 889 00:42:40,510 --> 00:42:41,890 >> Nos, lehet, hogy nem lehet pozitív. 890 00:42:41,890 --> 00:42:42,770 Lehet, hogy nem lehet negatív. 891 00:42:42,770 --> 00:42:44,550 Azt, hogy nincs garancia, hogy körül. 892 00:42:44,550 --> 00:42:48,960 De mi ellep a felhasználó számára, hogy újra, újra, újra, amíg ő tényleg 893 00:42:48,960 --> 00:42:49,810 együttműködik. 894 00:42:49,810 --> 00:42:53,085 Hasonlóképpen, ha én 1,23, amely nem int. 895 00:42:53,085 --> 00:42:58,400 De ha írja, mondjuk, 50, hogy a ad nekem egy értéket, amit akartam. 896 00:42:58,400 --> 00:42:59,050 >> Rendben van. 897 00:42:59,050 --> 00:43:01,380 Tehát nem rossz. 898 00:43:01,380 --> 00:43:04,780 Bármilyen kérdése, amit már most tenni? 899 00:43:04,780 --> 00:43:07,930 A kulcs, hogy elvihető, hogy világos legyen, nem annyira a hurok, amit láttunk 900 00:43:07,930 --> 00:43:10,880 mielőtt még akkor is, még nem igazán használt, de a kérdés a hatály, ahol 901 00:43:10,880 --> 00:43:17,045 változók csak akkor lehet csak akkor lehet használni belül egyes meghatározott hatálya alá. 902 00:43:17,045 --> 00:43:19,830 >> Jól van, hadd foglalkozzon a javaslatot amit korábban, hogy a 903 00:43:19,830 --> 00:43:20,860 globális változót. 904 00:43:20,860 --> 00:43:24,880 Mellesleg, kiderül, hogy egy másik megoldás erre a problémára, de a 905 00:43:24,880 --> 00:43:28,880 általában helytelen megoldás, vagy egy rosszul megtervezett megoldás az, hogy 906 00:43:28,880 --> 00:43:31,670 állapítsa meg a változó, mint mi úgynevezett globális változót. 907 00:43:31,670 --> 00:43:34,610 Most én vagyok ilyen megsértése a definíció A hatály mert 908 00:43:34,610 --> 00:43:37,680 nincs zárójelek az egyik legfontosabb és a legalján egy fájlt. 909 00:43:37,680 --> 00:43:40,190 De a következménye, hogy a az, hogy most sorban négy, 910 00:43:40,190 --> 00:43:41,710 n egy globális változót. 911 00:43:41,710 --> 00:43:44,460 És ahogy a neve is mutatja, ez csak elérhető mindenhol. 912 00:43:44,460 --> 00:43:45,790 >> Scratch valójában ezeket. 913 00:43:45,790 --> 00:43:48,650 Ha használt változó, lehet felidézni választani kellett, ha ez az 914 00:43:48,650 --> 00:43:50,780 ez a szellem, vagy az összes sprite. 915 00:43:50,780 --> 00:43:54,270 Nos, minden sprite csak a tisztább szóval globális. 916 00:43:54,270 --> 00:43:55,520 Igen? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, nagyon jó kérdés. 919 00:44:10,990 --> 00:44:14,310 >> Így emlékeztetnek arra, hogy már az első verzió a kódomat, amikor helytelenül 920 00:44:14,310 --> 00:44:17,700 bejelentett és meghatározott n a sorban kilenc - 921 00:44:17,700 --> 00:44:19,980 Én kijelentette, hogy a változó és adtam egy értéket 922 00:44:19,980 --> 00:44:21,160 Az értékadó operátor - 923 00:44:21,160 --> 00:44:22,520 ez adott nekem két hiba. 924 00:44:22,520 --> 00:44:26,560 Egy, az a tény, hogy n nem vette igénybe, és két, hogy line 11 925 00:44:26,560 --> 00:44:27,770 csak nem jelentették. 926 00:44:27,770 --> 00:44:31,120 Tehát az első, akit nem cím abban az időben. 927 00:44:31,120 --> 00:44:35,130 Ez nem feltétlenül hiba, hogy állapítsa meg Változó, de nem használja. 928 00:44:35,130 --> 00:44:38,540 De az egyik dolog, amit tenni A CS50 készülék, szándékosan, 929 00:44:38,540 --> 00:44:43,340 pedagógiai, az már hajlított fel a elvárások a fordító, hogy a 930 00:44:43,340 --> 00:44:46,970 arról, hogy te a dolgokat nem csak helyesen, de nagyon helyesen. 931 00:44:46,970 --> 00:44:51,520 >> Mert ha nyilvánító változó mint n és soha nem használja, vagy használja 932 00:44:51,520 --> 00:44:53,700 helyesen, akkor mi van az ott? 933 00:44:53,700 --> 00:44:55,650 Ez igazán nem szolgál semmilyen célt. 934 00:44:55,650 --> 00:44:58,980 És ez nagyon egyszerű az idő múlásával, ha nem konfigurálja a saját számítógép 935 00:44:58,980 --> 00:45:01,960 Így, hogy csak olyan kód, amely kis maradék itt, maradványai ott. 936 00:45:01,960 --> 00:45:04,390 Aztán hónap múlva nézel vissza, és Ön, mint, hogy miért van ez a sor 937 00:45:04,390 --> 00:45:05,060 kód van? 938 00:45:05,060 --> 00:45:07,940 És ha nincs jó ok, hogy nem részesül Ön vagy munkatársai 939 00:45:07,940 --> 00:45:10,650 az úton, hogy meg kell megbotlik rajta akkor. 940 00:45:10,650 --> 00:45:12,540 >> Mellesleg, hol van hogy jön? 941 00:45:12,540 --> 00:45:16,410 Nos, emlékeztetni arra, hogy minden alkalommal, amikor össze programja, mind ez a cucc 942 00:45:16,410 --> 00:45:17,380 nyomtatás alatt. 943 00:45:17,380 --> 00:45:18,350 Szóval majd még visszatérünk erre. 944 00:45:18,350 --> 00:45:22,230 De ismétlem, hogy egy olyan segédprogram, amely automatizálja összeállításának folyamata által 945 00:45:22,230 --> 00:45:24,830 fut az aktuális fordító nevű csenget. 946 00:45:24,830 --> 00:45:27,650 Ez a dolog, akkor előbb-utóbb látni, van köze hibakeresési speciális 947 00:45:27,650 --> 00:45:29,060 program neve a debugger. 948 00:45:29,060 --> 00:45:32,150 Ennek köze van optimális kód - inkább az, hogy a jövőben. 949 00:45:32,150 --> 00:45:33,620 Std = C99 - 950 00:45:33,620 --> 00:45:37,870 ez csak azt jelenti, használja a 1999 verzióját C. C már körül még hosszabb, mint 951 00:45:37,870 --> 00:45:40,830 hogy, de néhány szép változások 10 plusz évvel ezelőtt. 952 00:45:40,830 --> 00:45:42,690 >> És itt van a megfelelő is. 953 00:45:42,690 --> 00:45:45,880 Azt mondjuk, hogy mindent, ami korábban lett volna a figyelmeztetés 954 00:45:45,880 --> 00:45:48,560 hiba megakadályozza a tanuló az összeállítása. 955 00:45:48,560 --> 00:45:51,400 És a Wall esetre sem, hogy a csomó dolog, nem 956 00:45:51,400 --> 00:45:53,060 csak a kapcsolódó változókat. 957 00:45:53,060 --> 00:45:54,700 És akkor hadd lépjen a végén ez a sor. 958 00:45:54,700 --> 00:45:56,430 És ez is fogjuk végül gyere vissza. 959 00:45:56,430 --> 00:45:59,040 Ez nyilvánvalóan a neve A fájl vagyok összeállítása. 960 00:45:59,040 --> 00:46:02,160 Ez emlékeztet a fájl nevét Én kimenetre, mint a neve 961 00:46:02,160 --> 00:46:04,070 az én futtatható programot. 962 00:46:04,070 --> 00:46:08,970 Ez csak azt jelenti, lcs50 használja a CS50 könyvtár, és a nullák és egyesek, hogy 963 00:46:08,970 --> 00:46:12,390 a személyzet írt és összeállított korábbi ebben az évben, integrálása 964 00:46:12,390 --> 00:46:13,490 őket a programba. 965 00:46:13,490 --> 00:46:16,130 >> És valaki, hogy mi-lm az? 966 00:46:16,130 --> 00:46:18,150 Ez a matematikai könyvtárat, amely Csak ott akkor is, ha 967 00:46:18,150 --> 00:46:19,320 nem tesz semmilyen matek. 968 00:46:19,320 --> 00:46:22,620 Ez csak automatikusan, feltéve, nekünk tenni. 969 00:46:22,620 --> 00:46:26,540 >> Nos, hadd tegye egy másik példa itt nyit egy új fájlt. 970 00:46:26,540 --> 00:46:30,560 És hadd mentse ezt mint string.c. 971 00:46:30,560 --> 00:46:37,980 Kiderül, hogy ahogy beszélünk adatok típusok ma még nagyobb 972 00:46:37,980 --> 00:46:40,630 folyik a motorháztető alatt mint láttuk eddig. 973 00:46:40,630 --> 00:46:42,290 Hadd gyorsan egy gyors programot. 974 00:46:42,290 --> 00:46:44,510 Tartalmazza stdio.h. 975 00:46:44,510 --> 00:46:45,730 És én, kivéve azt. 976 00:46:45,730 --> 00:46:48,110 És tudod, hadd ne, hogy a ugyanazt a hibát újra és újra. 977 00:46:48,110 --> 00:46:50,540 Tartalmazza cs50.h. 978 00:46:50,540 --> 00:46:54,870 És hadd menjen előre, már és nem int main (void). 979 00:46:54,870 --> 00:46:58,790 >> És most csak akarok egy programot hogy működik ez - mondja a szöveg 980 00:46:58,790 --> 00:47:03,610 hívott s, és kap egy húr a felhasználó elől. 981 00:47:03,610 --> 00:47:05,820 És hadd tegyek egy kis útmutató itt - 982 00:47:05,820 --> 00:47:09,960 kérlek adj egy húr - így a felhasználó tudja, mit kell tennie. 983 00:47:09,960 --> 00:47:13,190 És akkor itt lent ez alatt, Azt akarom, hogy a következő - 984 00:47:13,190 --> 00:47:16,060 az int i lesz nulla. 985 00:47:16,060 --> 00:47:18,580 Ismét, számítógépes szakemberek általában kezdődik számláló nulla, de tudtuk 986 00:47:18,580 --> 00:47:20,340 tenni, hogy az egyik, ha igazán akar. 987 00:47:20,340 --> 00:47:27,240 Most fogom tenni az i kisebb mint a húr hossza s. 988 00:47:27,240 --> 00:47:28,430 Így strlen - 989 00:47:28,430 --> 00:47:29,510 S-R-T-L-E-N - 990 00:47:29,510 --> 00:47:31,650 Ismét, ez tömör, mert könnyebb írja, annak ellenére, hogy a 991 00:47:31,650 --> 00:47:32,590 kis rejtélyes. 992 00:47:32,590 --> 00:47:35,290 >> Ez egy olyan funkció, általunk nem használt előtt, de szó szerint ez azt - 993 00:47:35,290 --> 00:47:37,810 vissza nekem egy számot, amely képviseli a hossza a húr 994 00:47:37,810 --> 00:47:38,690 hogy a felhasználó beírt. 995 00:47:38,690 --> 00:47:41,740 Ha beírt hello, akkor vissza öt, mert van öt 996 00:47:41,740 --> 00:47:42,890 betűk Hello. 997 00:47:42,890 --> 00:47:45,390 Ezután minden egyes iterációs Ez a ciklus, én plus plus. 998 00:47:45,390 --> 00:47:49,170 Tehát megint a szokásos konstrukció akkor is, ha te nem egészen túl kényelmes, vagy 999 00:47:49,170 --> 00:47:50,420 ismeri még. 1000 00:47:50,420 --> 00:47:53,220 >> De most minden iterációban erre a ciklusra, észre, mit fogok csinálni. 1001 00:47:53,220 --> 00:47:56,690 Azt akarom, hogy menjen előre és nyomtatás ki egy karakter - 1002 00:47:56,690 --> 00:47:59,940 így% c backslash n új sorban. 1003 00:47:59,940 --> 00:48:00,990 És akkor, tudod, mit akarok csinálni? 1004 00:48:00,990 --> 00:48:05,090 Bármi legyen is szó, az az, hogy a felhasználó beír be, mint a Hello, szeretnék nyomtatni 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, egy karakter soronként. 1006 00:48:09,530 --> 00:48:13,080 Más szóval, azt akarom, hogy a egyes karaktereket a string, 1007 00:48:13,080 --> 00:48:16,770 ahol eddig egy string éppen volt karaktersorozat. 1008 00:48:16,770 --> 00:48:21,690 >> És kiderül, meg tudom csinálni s, konzol, i, záró zárójel, közel 1009 00:48:21,690 --> 00:48:23,580 zárójel, pontosvessző. 1010 00:48:23,580 --> 00:48:25,640 És nekem kell csinálni még egy dolog. 1011 00:48:25,640 --> 00:48:30,570 Ez a nevű fájlt string.h hogy strlen nyilvánították. 1012 00:48:30,570 --> 00:48:33,190 Tehát, ha azt szeretné használni ezt a funkciót, El kell mondanom a fordító, 1013 00:48:33,190 --> 00:48:34,450 elvárják, hogy használja. 1014 00:48:34,450 --> 00:48:37,040 Most hadd menjen előre, és A program neve string. 1015 00:48:37,040 --> 00:48:39,150 Dot, slash, string. 1016 00:48:39,150 --> 00:48:40,130 >> Kérek egy string. 1017 00:48:40,130 --> 00:48:40,900 Én megyek előre, és írja. 1018 00:48:40,900 --> 00:48:43,040 Helló, a nagybetűs, Enter. 1019 00:48:43,040 --> 00:48:47,390 És most veszi észre, amit nyomtatott ezt egy karakter a másik után. 1020 00:48:47,390 --> 00:48:51,450 Így az új részlet az, hogy egy string, a végén a nap, lehet 1021 00:48:51,450 --> 00:48:54,810 útján elérhető az egyes karakterek bevezetésével a tér 1022 00:48:54,810 --> 00:48:55,840 konzol jelölést. 1023 00:48:55,840 --> 00:48:59,090 És ez azért van, mert a szöveg alatt a motorháztető valóban sorozata 1024 00:48:59,090 --> 00:48:59,810 karakter. 1025 00:48:59,810 --> 00:49:02,010 De mi szép róluk a számítógép RAM - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, bármi is legyen az -, ők szó háttal a vissza - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 az egyes szomszédos bájt a memóriában. 1029 00:49:09,920 --> 00:49:13,210 >> Tehát, ha azt szeretnénk, hogy a nyolcadik olyan byte, amely ebben a hurokban lenne 1030 00:49:13,210 --> 00:49:16,900 konzol nulla, egy konzol, konzol két, konzol három, négy konzol - 1031 00:49:16,900 --> 00:49:18,890 ez nulla indexelt ig öt - 1032 00:49:18,890 --> 00:49:23,330 kiírja, hogy a H-L-E-L-O külön sorban. 1033 00:49:23,330 --> 00:49:26,320 >> Most, a teaser, hadd mutassam meg a dolgok, hogy akkor végül is 1034 00:49:26,320 --> 00:49:31,950 képes megérteni, legalábbis néhány szoros néz. 1035 00:49:31,950 --> 00:49:35,610 Az egyik, amit tartalmaz a mai példa, ha szeretné, valójában 1036 00:49:35,610 --> 00:49:38,300 az egyik legelső szökik az iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreak jelenti repedés a telefon így valóban használni a 1038 00:49:40,800 --> 00:49:43,380 más fuvarozó vagy telepítés saját szoftver. 1039 00:49:43,380 --> 00:49:45,660 És észre fogod venni, ez úgy néz ki teljesen rejtélyes, valószínűleg. 1040 00:49:45,660 --> 00:49:46,520 De nézd meg ezt. 1041 00:49:46,520 --> 00:49:50,420 Az iPhone nyilvánvalóan repedt A for ciklus egy, ha a feltétel, a más 1042 00:49:50,420 --> 00:49:52,580 állapotban, egy csomó funkció már nem láttam. 1043 00:49:52,580 --> 00:49:54,230 >> És ismét, akkor nem Első pillantásra talán 1044 00:49:54,230 --> 00:49:55,620 érti, hogy ez hogyan működik. 1045 00:49:55,620 --> 00:49:58,940 De minden, amit a fajta, hogy értetődőnek modern életünk 1046 00:49:58,940 --> 00:50:02,040 ténylegesen általában csökkenti sőt bizonyos Ezen alapvető voltunk 1047 00:50:02,040 --> 00:50:02,820 nézett. 1048 00:50:02,820 --> 00:50:06,680 Hadd menjek előre, és nyitott egy másik program, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Szóval ez is az, amit Nem igazán tudom. 1050 00:50:08,970 --> 00:50:12,440 Még sem a személyzet vagy a tudtam Valószínűleg ezt meg nézi 1051 00:50:12,440 --> 00:50:15,450 , mert ez a valaki kódja küldtünk el, hogy milyen 1052 00:50:15,450 --> 00:50:19,630 történelmileg néven eltorzítva C verseny, ahol írni egy programot 1053 00:50:19,630 --> 00:50:24,670 hogy lefordul és fut, de átkozottul rejtélyes ember sem megérteni, hogy mi 1054 00:50:24,670 --> 00:50:27,530 meg fog tenni, amíg valójában futtatni. 1055 00:50:27,530 --> 00:50:29,940 >> Tehát valóban, ha megnézi ezt kódot, látok egy kapcsolót. 1056 00:50:29,940 --> 00:50:30,870 Látom fő. 1057 00:50:30,870 --> 00:50:33,800 Én ezeket a szögletes zárójelek ami valamilyen tömb. 1058 00:50:33,800 --> 00:50:35,970 Akar valaki kitalálni, hogy mi ez a program valóban 1059 00:50:35,970 --> 00:50:37,220 nem, ha futok Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Igen. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Jól sikerült. 1064 00:50:44,690 --> 00:50:48,090 Tehát csak a személyzet, és nem tudok rájönni , mi ezeket a dolgokat csinálni. 1065 00:50:48,090 --> 00:50:51,670 >> És most végül, hadd menjek előre és megnyitja egy másik programot. 1066 00:50:51,670 --> 00:50:53,440 Ez az egy - 1067 00:50:53,440 --> 00:50:55,550 Ismét megpróbáljuk a forráskódot online elérhető - ez csak 1068 00:50:55,550 --> 00:50:57,480 milyen szép, hogy nézd meg. 1069 00:50:57,480 --> 00:50:59,750 Minden ők a hit a szóköz egy kicsit. 1070 00:50:59,750 --> 00:51:01,320 De ez az igazi kódot. 1071 00:51:01,320 --> 00:51:04,790 Tehát, ha úgy gondolja, hogy elég, ha valóban futtatni ezt a parancsot, 1072 00:51:04,790 --> 00:51:08,970 végül látni fogod, hogyan talán a dolgok, mint ez. 1073 00:51:08,970 --> 00:51:14,008 >> Szóval majd hagyjuk azon megjegyzés és találkozunk szerdán. 1074 00:51:14,008 --> 00:51:18,440 >> [MUSIC PLAYING] 1075 00:51:18,440 --> 00:51:23,380 >> SPEAKER 2: A következő CS50, A TF-színpadon a lázadás. 1076 00:51:23,380 --> 00:51:24,112 >> SPEAKER 3: Ott van. 1077 00:51:24,112 --> 00:51:25,362 Kapd el! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [MUSIC PLAYING]