1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [MUZIKO Ludante] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. Malan: Bone. 5 00:00:12,660 --> 00:00:15,590 Jen CS50, kaj ĉi estas la komenco de la semajno du. 6 00:00:15,590 --> 00:00:19,120 Do ni komencu hodiaŭ kun cimon. 7 00:00:19,120 --> 00:00:20,974 Cimon, kompreneble, estas eraro en programo, 8 00:00:20,974 --> 00:00:22,890 kaj vi ricevos tre familiara kun tiu koncepto 9 00:00:22,890 --> 00:00:26,050 Se vi neniam planis antaŭe. pset0 kaj nun pset1. 10 00:00:26,050 --> 00:00:29,280 Sed ni konsideru ion iom simpla unue. 11 00:00:29,280 --> 00:00:32,189 Tiu programo, ke mi ĵetis kune anticipe, 12 00:00:32,189 --> 00:00:37,280 kaj mi asertas ke tio devus presi 10 steloj sur la ekrano uzante printf, 13 00:00:37,280 --> 00:00:41,020 sed ĝi ŝajne kalesxo iel. 14 00:00:41,020 --> 00:00:45,370 >> Donita ke especificación kiu ĝi devus presi 10 steloj, 15 00:00:45,370 --> 00:00:50,230 sed ne malkasxe, kio ĉu vi asertas estas la bug? 16 00:00:50,230 --> 00:00:52,004 Yeah? 17 00:00:52,004 --> 00:00:54,420 Do ĝi estas for de unu eraro, kaj kion vi volas diri per tio? 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 Bonega. 22 00:01:10,410 --> 00:01:13,930 Do ni specifis komenci valoro de nulo por i, 23 00:01:13,930 --> 00:01:18,399 kaj ni specifita n valoro de 10, sed ni uzas malpli ol aŭ egala al. 24 00:01:18,399 --> 00:01:21,190 Kaj la kialo, ke tio estas du signoj kaj ne nur unu simbolo, 25 00:01:21,190 --> 00:01:22,630 kiel en matematiko libro, estas ke vi ne devas 26 00:01:22,630 --> 00:01:24,880 maniero de esprimi la unu karaktero ekvivalento. 27 00:01:24,880 --> 00:01:28,450 >> Do tio signifas malpli da, sed Se vi komencas rakontante nulo, 28 00:01:28,450 --> 00:01:31,690 sed vi kalkuli la tuta vojo tra kaj egalaj al 10, 29 00:01:31,690 --> 00:01:34,170 vi kompreneble tuj kalkuli 11 aĵojn en entute. 30 00:01:34,170 --> 00:01:35,900 Kaj tial vi tuj presi 11 steloj. 31 00:01:35,900 --> 00:01:37,990 Do kio povus esti embaraso por tio? 32 00:01:37,990 --> 00:01:39,970 Yeah? 33 00:01:39,970 --> 00:01:43,980 >> Do ĝuste ĝustigi la malpli da aŭ egala al nur malpli ol, 34 00:01:43,980 --> 00:01:46,250 kaj ekzistas, mi asertas, eble alia solvo, tro. 35 00:01:46,250 --> 00:01:47,210 Kio povus alie vi faros? 36 00:01:47,210 --> 00:01:48,590 Yeah? 37 00:01:48,590 --> 00:01:53,660 >> Do komencu egalante al 1, kaj forlasi la malpli ol aŭ egala al. 38 00:01:53,660 --> 00:01:56,187 Kaj sincere mi asertas ke, por tipa homa, 39 00:01:56,187 --> 00:01:57,770 tio verŝajne estas pli simpla. 40 00:01:57,770 --> 00:02:00,280 Komenci kalkulon je 1 kaj kalkuli tra 10. 41 00:02:00,280 --> 00:02:01,690 Esence fari kion vi volas diri. 42 00:02:01,690 --> 00:02:04,010 >> Sed la realo estas programado, kiel ni vidis, 43 00:02:04,010 --> 00:02:07,598 komputilo sciencistoj kaj programistoj ĝenerale komencas rakontante nulo. 44 00:02:07,598 --> 00:02:09,389 Kaj tial estas bone unufoje vi kutimiĝos al ĝi. 45 00:02:09,389 --> 00:02:12,640 Via kondiĉo ĝenerale iu kiel malpli ol. 46 00:02:12,640 --> 00:02:14,910 Do simple logika eraro kiun ni povis nun 47 00:02:14,910 --> 00:02:17,990 ripari kaj finfine recompilar tio kaj ricevi nur 10. 48 00:02:17,990 --> 00:02:19,610 >> Nu kio pri tiu besteto tie? 49 00:02:19,610 --> 00:02:24,200 Jen, denove, mi asertas ke mi devas golo videbligi 10 stars-- 50 00:02:24,200 --> 00:02:28,140 unu por linio tiu tempo, sed ne. 51 00:02:28,140 --> 00:02:30,940 Antaŭ ni proponas kion la embaraso estas, kion faras tiu 52 00:02:30,940 --> 00:02:34,640 presi vide se mi estus kompili kaj kuri ĉi programo vi opinias? 53 00:02:34,640 --> 00:02:35,140 Yeah? 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> Stelo. 56 00:02:38,860 --> 00:02:41,690 Do ĉiuj steloj en la sama linio estas kion mi aŭdis, 57 00:02:41,690 --> 00:02:43,391 kaj tiam la nova linio karaktero. 58 00:02:43,391 --> 00:02:44,140 Do ni provu tion. 59 00:02:44,140 --> 00:02:48,710 Do fari kalesxo-1, eniru, kaj mi vidos tin komando 60 00:02:48,710 --> 00:02:50,090 ke ni parolis pri lastaj tempo. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, kaj fakte mi vidas ĉiujn 10 steloj en la sama linio kvankam mi asertas 62 00:02:55,180 --> 00:02:58,690 en mia specifo ĝuste komenton sur la pinto la kodo kiun Mi intencis fari por 63 00:02:58,690 --> 00:02:59,230 linio. 64 00:02:59,230 --> 00:03:00,580 Sed tio aspektas pravas. 65 00:03:00,580 --> 00:03:04,620 >> Nun linio 15 ĝi similas min videbligi stelon, kaj tiam linio 16 66 00:03:04,620 --> 00:03:06,620 Ĝi similas min impreso nova linio karaktero, 67 00:03:06,620 --> 00:03:09,560 kaj ili estas ambaŭ marĝeno tiel Mi interne de la buklo klare. 68 00:03:09,560 --> 00:03:13,610 Do ne mi faros stelo, novaj linio, stelo, nova linio, stelo, nova linio? 69 00:03:13,610 --> 00:03:14,110 Jes? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Yeah, kontraste lingvo kiel Python, se vi estas familiara, 72 00:03:21,240 --> 00:03:23,540 deŝovon ne gravas al la komputilo. 73 00:03:23,540 --> 00:03:25,280 Nur gravas la homo. 74 00:03:25,280 --> 00:03:29,860 Do dum tie mi elpensis linioj 15 kaj 16-- kiuj aspektas bela, 75 00:03:29,860 --> 00:03:31,330 sed la komputilo ne zorgas. 76 00:03:31,330 --> 00:03:34,640 La komputilo zorgas pri efektive havanta frizita krampoj 77 00:03:34,640 --> 00:03:36,310 ĉirkaŭ tiuj linioj de kodo. 78 00:03:36,310 --> 00:03:39,520 >> Tiel ke ĝi estas clear-- ĝuste kiel en Scratch-- ke tiuj du linioj de kodo 79 00:03:39,520 --> 00:03:40,450 devus esti ekzekutita. 80 00:03:40,450 --> 00:03:44,390 Kiel unu el tiuj flavaj Scratch enigmo pecoj denove kaj denove kaj denove. 81 00:03:44,390 --> 00:03:50,920 >> Do nun se mi re-kuri ĉi program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Mi havas eraro nun. 83 00:03:51,770 --> 00:03:54,212 Kion mi forgesas fari? 84 00:03:54,212 --> 00:03:55,420 Yeah, do mi ne kompili ĝin. 85 00:03:55,420 --> 00:03:56,740 Do fari kalesxo-2. 86 00:03:56,740 --> 00:03:59,840 Ne tia dosieron ĉar mi ne fakte kompili la dua versio. 87 00:03:59,840 --> 00:04:04,860 Do nun interesa nedeklarita variable-- ne 2. 88 00:04:04,860 --> 00:04:05,510 Ni faras 1. 89 00:04:05,510 --> 00:04:11,050 Faru kalesxo-1-- ./buggy-1-- kaj nun ĉiu el ili estas en la sama linio. 90 00:04:11,050 --> 00:04:13,880 >> Nun estas escepto al tiu supozita aserto mia 91 00:04:13,880 --> 00:04:15,520 ke vi bezonas tiuj buklaj krampoj. 92 00:04:15,520 --> 00:04:20,160 Kiam estas efektive OK-- se vi havas rimarkita en sekcio aŭ textbooks-- 93 00:04:20,160 --> 00:04:22,130 preterlasi la frizita krampoj? 94 00:04:22,130 --> 00:04:22,630 Yeah? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Ĝuste. 97 00:04:26,870 --> 00:04:28,940 Kiam nur unu linio de kodo kiun vi 98 00:04:28,940 --> 00:04:32,830 volas asocii kun la buklo kiel en nia unua ekzemplo. 99 00:04:32,830 --> 00:04:36,380 Ĝi estas perfekte legitima preterlasi la frizita krampoj 100 00:04:36,380 --> 00:04:40,310 same ia oportunajho el la tradukilo vi. 101 00:04:40,310 --> 00:04:40,810 Yeah? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Bona demando. 104 00:04:43,930 --> 00:04:45,500 Ĉu konsideri stilo eraro? 105 00:04:45,500 --> 00:04:49,340 Ni devus promote-- kiel en CS50 stilo gvidas la URL por kiu 106 00:04:49,340 --> 00:04:51,926 Estas en pset1-- kiu ĉiam uzi la frizita krampoj. 107 00:04:51,926 --> 00:04:53,550 Certe, se vi estas nova al programado. 108 00:04:53,550 --> 00:04:56,800 La realaĵo estas kiu ne estas tuj malpermesos vin 109 00:04:56,800 --> 00:04:58,680 fari al tiuj interesoj. 110 00:04:58,680 --> 00:05:00,846 Sed se vi nur nun en la balancilo aferojn, 111 00:05:00,846 --> 00:05:04,020 absolute simple ĉiam uzi la krispa krampoj ĝis vi akiros la hang de ĝi. 112 00:05:04,020 --> 00:05:04,640 Bona demando. 113 00:05:04,640 --> 00:05:05,320 >> Bone. 114 00:05:05,320 --> 00:05:07,660 Do tiama cimon. 115 00:05:07,660 --> 00:05:09,190 Almenaŭ en iu sufiĉe simpla. 116 00:05:09,190 --> 00:05:11,260 Kaj tamen vi eble pensas tiun Estas sufiĉe rudimentaj, dekstra? 117 00:05:11,260 --> 00:05:13,635 Tiu estas speco de la unua semajno rigardi la lingvon 118 00:05:13,635 --> 00:05:14,890 kiel, vidu viajn erarojn gxi. 119 00:05:14,890 --> 00:05:17,250 Sed la realeco tiuj estas vere reprezentanto 120 00:05:17,250 --> 00:05:20,310 de iu bela timigaj problemoj kiuj povas ekesti en la reala mondo. 121 00:05:20,310 --> 00:05:23,530 >> Do kelkaj el vi eble memoras se vi sekvas tech novaĵoj 122 00:05:23,530 --> 00:05:25,740 aŭ eble eĉ kaptis vento de tiu en februaro 123 00:05:25,740 --> 00:05:29,434 de tiu pasinta jaro ke Apple havis faris iom de eraro en ambaŭ iOS, 124 00:05:29,434 --> 00:05:31,350 la mastruma sistemo sur liaj telefonoj, kaj ankaŭ 125 00:05:31,350 --> 00:05:34,220 Mac VIN, la mastruma sistemo sur ilia desktops kaj tekkomputiloj. 126 00:05:34,220 --> 00:05:36,480 Kaj vi vidis tian titolis kiel ĉi. 127 00:05:36,480 --> 00:05:41,120 Kaj poste, Apple promesis ripari tiun cimon, 128 00:05:41,120 --> 00:05:45,950 kaj tre rapide faris ripari ĝin en iOS, sed tiam finfine fiksis ĝin en Mac OS 129 00:05:45,950 --> 00:05:46,810 tiel. 130 00:05:46,810 --> 00:05:50,370 >> Nun neniu el tiuj titoloj sole vere malkaŝi kion la suba problemo estis, 131 00:05:50,370 --> 00:05:55,640 sed la cimo estis finfine reduktita cimon en SSL, sekura bazojn tavolo. 132 00:05:55,640 --> 00:05:57,390 Kaj longan rakonton, tio estas la programaron 133 00:05:57,390 --> 00:06:01,030 ke nia retumiloj kaj aliaj programaro uzita por fari kion? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Se mi diras ke SSL estas implikita, kiam ajn vi 136 00:06:06,860 --> 00:06:13,920 viziti URL kiu komenciĝas per HTTPS, kion do povus SSL rilatigi? 137 00:06:13,920 --> 00:06:14,580 Ĉifrado. 138 00:06:14,580 --> 00:06:16,470 Do ni parolos pri tiu en la proksimaj tagoj. 139 00:06:16,470 --> 00:06:18,750 Ĉifrado, la arto de grimpadi informo. 140 00:06:18,750 --> 00:06:22,200 >> Sed longan rakonton, Apple iam monato estis eraris 141 00:06:22,200 --> 00:06:25,970 en ilia efektivigo de SSL, La programaro kiu finfine Implementa 142 00:06:25,970 --> 00:06:30,120 URLoj kiel HTTPS aŭ max rilatojn tie ankaŭ. 143 00:06:30,120 --> 00:06:32,850 La rezulto de tio estas ke via rilatoj povis potenciale 144 00:06:32,850 --> 00:06:33,920 oni interkaptis. 145 00:06:33,920 --> 00:06:37,130 Kaj via rilatoj estis Ne nepre ĉifrita 146 00:06:37,130 --> 00:06:40,350 se vi havis iujn malbonajn ulo en inter vi kaj la celloko retejo kiu 147 00:06:40,350 --> 00:06:42,170 sciis utiligi ĉi. 148 00:06:42,170 --> 00:06:45,090 >> Nun Apple fine posteó oni ripari por ĉi fine, 149 00:06:45,090 --> 00:06:46,920 kaj la priskribo ilia embaraso estis ĉi. 150 00:06:46,920 --> 00:06:49,878 Sekura transporto malsukcesis validigi la aŭtentikeco de la ligo. 151 00:06:49,878 --> 00:06:52,920 La temo estis adresita per restarigi mankas validación paŝoj. 152 00:06:52,920 --> 00:06:57,250 >> Do ĉi tiu estas tre mano ondecaj klarigo por simple diri ke ni ŝraŭbita supren. 153 00:06:57,250 --> 00:07:00,920 Estas laŭvorte unu linio de kodo kiu estis buggy 154 00:07:00,920 --> 00:07:05,130 en ilia efektivigo de SSL, kaj se vi iros en linio kaj serĉi ĉi 155 00:07:05,130 --> 00:07:07,210 Vi povas fakte trovi la originala fontkodo. 156 00:07:07,210 --> 00:07:11,960 Ekzemple, ĉi tiu estas ekrankopio de nur parton de sufiĉe granda dosiero, 157 00:07:11,960 --> 00:07:15,965 sed tio estas funkcio ŝajne nomis SSL kontroli signo servilo ŝlosila interŝanĝo. 158 00:07:15,965 --> 00:07:17,840 Kaj ĝi prenas faskon da argumentojn kaj enigoj. 159 00:07:17,840 --> 00:07:20,298 Kaj ni ne tuj enfokusigi tro da en la minutia tie, 160 00:07:20,298 --> 00:07:24,390 sed se vi enfokusigi la kodon ene de tiu plejsupra function-- ni 161 00:07:24,390 --> 00:07:25,590 zomi je tio. 162 00:07:25,590 --> 00:07:28,140 Vi eble jam suspektas kion la eraro eble 163 00:07:28,140 --> 00:07:31,230 estos eĉ se vi ne havas ideon finfine kion vi rigardas. 164 00:07:31,230 --> 00:07:35,924 Estas speco de anomalio ĉi tie, kiu estas kiu? 165 00:07:35,924 --> 00:07:38,940 >> Yeah, Mi ne vere ŝatas la rigardo de du goto malsukcesas. 166 00:07:38,940 --> 00:07:42,060 Sincere, mi ne vere scias kion goto malsukcesos rimedoj, sed havante du de ili 167 00:07:42,060 --> 00:07:42,810 reen al dorso. 168 00:07:42,810 --> 00:07:45,290 Ke nur ia frotas min intelekte malĝustan vojon, 169 00:07:45,290 --> 00:07:48,910 kaj efektive se ni zomi je ĝuste tiuj linioj, tiu estas C. 170 00:07:48,910 --> 00:07:52,220 >> Tiel multa Apple kodo vidas skribitan en C, 171 00:07:52,220 --> 00:07:55,780 kaj tio ŝajne Estas vere equivalent-- 172 00:07:55,780 --> 00:07:59,060 ne ke bela deŝovon versio, sed se vi rekonas la fakton 173 00:07:59,060 --> 00:08:02,560 ke ne estas krispa krampoj, kio Apple vere skribis estis kodo kiu aspektas 174 00:08:02,560 --> 00:08:03,540 kiel tiu. 175 00:08:03,540 --> 00:08:07,080 Do mi zomita eksteren kaj mi ĵus fiksis la deŝovon en la senco 176 00:08:07,080 --> 00:08:10,690 ke se ne estas krispa krampoj, ke dua goto malsukcesos jen en flava 177 00:08:10,690 --> 00:08:12,500 tuj ekzekuti negrave kio. 178 00:08:12,500 --> 00:08:15,540 Ĝi ne estas asociita kun la se kondiĉo super ĝi. 179 00:08:15,540 --> 00:08:19,590 >> Do eĉ pli, se vi ne tute kompreni kion tio povis eble 180 00:08:19,590 --> 00:08:23,230 faru, scias, ke ĉiu el tiuj conditions-- ĉiu de ĉi tiuj linioj 181 00:08:23,230 --> 00:08:26,180 Estas tre grava paŝo en la procezo de kontrolanta 182 00:08:26,180 --> 00:08:28,350 se viaj datumoj estas fakte ĉifrita. 183 00:08:28,350 --> 00:08:31,710 Do saltante unu el tiuj paŝojn, ne la pli bona ideo. 184 00:08:31,710 --> 00:08:34,840 >> Sed ĉar ni havas tiun dua goto malsukcesos en flava, 185 00:08:34,840 --> 00:08:36,840 kaj ĉar iam ni ia estetike 186 00:08:36,840 --> 00:08:40,480 movi ĝin al la maldekstra kie logike estas nuntempe, kion 187 00:08:40,480 --> 00:08:43,230 signifas tio por la linio de kodo sub tiu dua goto 188 00:08:43,230 --> 00:08:46,480 malsukcesos vi opinias? 189 00:08:46,480 --> 00:08:48,860 Ĝi estas ĉiam tuj estos saltis. 190 00:08:48,860 --> 00:08:52,100 Do gotos estas ĝenerale malaprobita pro kialoj ni ne vere iru en, 191 00:08:52,100 --> 00:08:54,940 kaj ĝuste en CS50 inklinas ne instrui ĉi aserto goto, 192 00:08:54,940 --> 00:08:58,130 sed vi povas pensi de goto malsukcesos kiel signifo go salto 193 00:08:58,130 --> 00:08:59,600 al iu alia parto de la kodo. 194 00:08:59,600 --> 00:09:03,120 >> Alivorte transsalti ĉi lasta linio en aro, 195 00:09:03,120 --> 00:09:07,420 kaj do la rezulto de tiu stulta simpla eraro kiu estis ĵus 196 00:09:07,420 --> 00:09:10,330 rezulto de probable iu kopiado kaj alglui unu tro 197 00:09:10,330 --> 00:09:14,150 multfoje, ke la tuta sekureco de iOS kaj Mac VIN 198 00:09:14,150 --> 00:09:18,240 estis vundebla interkaptita per maliculojn por sufiĉe tempo. 199 00:09:18,240 --> 00:09:19,940 Ĝis Apple fine fiksita ĉi. 200 00:09:19,940 --> 00:09:23,100 >> Nun se iu el vi estas reale kurante malnovaj versioj de iOS aŭ Mac VIN, 201 00:09:23,100 --> 00:09:27,250 Vi povas iri al gotofail.com kiu estas retejo kiun iu starigis 202 00:09:27,250 --> 00:09:29,190 esence determini programmatically 203 00:09:29,190 --> 00:09:30,980 se via komputilo estas ankoraŭ vundebla. 204 00:09:30,980 --> 00:09:33,600 Kaj sincere, se ĝi estas, ĝi estas verŝajne bona ideo 205 00:09:33,600 --> 00:09:36,870 ĝisdatigi vian telefonon aŭ via Mac ĉe tiu punkto. 206 00:09:36,870 --> 00:09:40,120 Sed, ĝuste testamento kiom apreciación de tiuj malsupra nivelo 207 00:09:40,120 --> 00:09:42,400 detaloj kaj sufiĉe simplaj ideoj povas vere 208 00:09:42,400 --> 00:09:44,590 traduki en decidoj kaj problemoj 209 00:09:44,590 --> 00:09:47,320 affected-- en ĉi case-- milionoj da homoj. 210 00:09:47,320 --> 00:09:49,107 >> Nun unu vorton pri administrado. 211 00:09:49,107 --> 00:09:50,690 Sekcio komencos tiun venantan dimanĉon. 212 00:09:50,690 --> 00:09:53,360 Vi ricevos retpoŝton de la semajnfino pri sekcio, ĉe kiu punkto 213 00:09:53,360 --> 00:09:55,290 la resectioning procezo komencos se vi havas 214 00:09:55,290 --> 00:09:56,998 rimarkis vin nun iuj novaj konfliktoj. 215 00:09:56,998 --> 00:10:00,180 Do tio okazas ĉiun jaron, kaj ni devos akomodi en la tempo venonta. 216 00:10:00,180 --> 00:10:02,430 >> Oficejo hours-- fari teni okulon sur ĉi horaro tie. 217 00:10:02,430 --> 00:10:05,100 Ŝanĝas iomete tiu semajno, aparte la komenco tempon 218 00:10:05,100 --> 00:10:08,180 kaj la situo, do konsulti ke antaŭ direkti al oficejo horoj 219 00:10:08,180 --> 00:10:09,520 iu el la sekvantaj kvar noktoj. 220 00:10:09,520 --> 00:10:12,680 Kaj nun unu vorton je pritakso, aparte kiel vi plonĝi en problemo 221 00:10:12,680 --> 00:10:14,350 aroj kaj pretere. 222 00:10:14,350 --> 00:10:17,070 >> Do per la specifo, tiuj estas ĝenerale 223 00:10:17,070 --> 00:10:20,360 la hakiloj kune kiujn ni taksos vian laboron. 224 00:10:20,360 --> 00:10:23,170 Amplekso referencas al kio mezuro via kodo Implementa 225 00:10:23,170 --> 00:10:25,690 la karakterizaĵoj bezonata per nia specifo. 226 00:10:25,690 --> 00:10:28,290 En aliaj vortoj, kiom multe de pecon aro faris vin mordi ekstere. 227 00:10:28,290 --> 00:10:30,440 Ĉu vi faros triono de ĝi, duono de gxi, 100% de ĝi. 228 00:10:30,440 --> 00:10:33,000 Eĉ se ĝi ne estas korekta, kiom vi provos? 229 00:10:33,000 --> 00:10:35,290 Do kiu kaptas la nivelo de penado kaj la kvanto 230 00:10:35,290 --> 00:10:38,260 al kiu vi demordis la problemo aro problemoj. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- ĉi tiu, kio punkto estas via kodo 232 00:10:40,690 --> 00:10:43,150 konsekvenca kun niaj especificaciones kaj libera de eraroj. 233 00:10:43,150 --> 00:10:44,770 Tiel funkcias korekte? 234 00:10:44,770 --> 00:10:48,700 Se ni donos iujn enigo, ĉu ĝi donu al ni la eliron ke ni atendas? 235 00:10:48,700 --> 00:10:52,570 Design-- nun ĉi tiu estas la unua de la aparte kvalita karaj, 236 00:10:52,570 --> 00:10:56,180 aŭ kiuj postulas homan juĝon. 237 00:10:56,180 --> 00:10:59,690 Kaj efektive, tio estas kial ni havas bastono de tiom da instruado uloj kaj kompreneble 238 00:10:59,690 --> 00:11:00,350 helpantoj. 239 00:11:00,350 --> 00:11:03,480 Ĝis kio punkto estas via kodo skribita bone? 240 00:11:03,480 --> 00:11:05,810 >> Kaj denove ĉi tio estas tre kvalita taksado 241 00:11:05,810 --> 00:11:09,100 kiu laboros kun vi bi-directionally en la semajnoj veni. 242 00:11:09,100 --> 00:11:12,060 Tiel ke kiam vi ne nur nombraj interpunkcioj, sed ankaŭ 243 00:11:12,060 --> 00:11:16,682 skriba partituroj aŭ tajpita sugestoj, aŭ skribita feedback en anglaj vortoj. 244 00:11:16,682 --> 00:11:19,640 Tio estas kion ni uzas por forpeli vin al reale skribi bonan kodon. 245 00:11:19,640 --> 00:11:23,320 Kaj en prelego kaj sekcio, ni penos atentigi out-- tiel ofte kiel ni can-- 246 00:11:23,320 --> 00:11:26,420 kion faras programon ne nur ĝentila kaj funkcie bono 247 00:11:26,420 --> 00:11:28,200 sed ankaŭ bone desegnita. 248 00:11:28,200 --> 00:11:31,850 La plej efika povus esti, aŭ eĉ la plej belaj povas esti. 249 00:11:31,850 --> 00:11:33,100 >> Kiu kondukas nin al stilo. 250 00:11:33,100 --> 00:11:36,876 Stilo finfine trovas estetika juĝo. 251 00:11:36,876 --> 00:11:38,750 Ĉu vi elektos bonon nomoj por viaj variabloj? 252 00:11:38,750 --> 00:11:40,330 Ĉu vi marĝeno via kodo ĝuste? 253 00:11:40,330 --> 00:11:44,010 Ĉu ĝi aspektas bone, kaj sekve, Estas facile por alia homo 254 00:11:44,010 --> 00:11:46,550 legi viajn respektivajn el lia korekto. 255 00:11:46,550 --> 00:11:50,300 >> Nun ĝenerale por la Syllabus, ni interpunkcio tion sur kvin punkto skalo. 256 00:11:50,300 --> 00:11:53,640 Kaj lasu min martelo domo la punkto ke tri estas ja bona. 257 00:11:53,640 --> 00:11:55,550 Tre rapide fari ulojn komenci fari aritmetiko. 258 00:11:55,550 --> 00:11:58,133 Kiam ili ricevas tri el kvin praveco por iu pset 259 00:11:58,133 --> 00:12:02,040 kaj ili pensas malbenita, mi tuj 60% kio estas esence D aŭ E. 260 00:12:02,040 --> 00:12:03,980 >> Tio ne estas la vojo ni pensi pri tiuj nombroj. 261 00:12:03,980 --> 00:12:06,880 A tri estas ja bona kaj kion ni Ĝenerale atendi ĉe la komenco 262 00:12:06,880 --> 00:12:09,820 la termino estas ke se vi nun estas faskon da three's-- eble paro 263 00:12:09,820 --> 00:12:12,540 de foiroj, paro de fours-- aŭ paro duope, paro de fours-- 264 00:12:12,540 --> 00:12:13,748 tio estas bona loko por komenci. 265 00:12:13,748 --> 00:12:16,320 Kaj tiel longe, kiel ni vidas supren trajektorio super tempo, 266 00:12:16,320 --> 00:12:18,540 vi estas en aparte bona loko. 267 00:12:18,540 --> 00:12:20,752 >> La formulo ni uzas por pezo aferoj estas esence 268 00:12:20,752 --> 00:12:22,710 tiu por la Syllabus, kio signifas, ke ni 269 00:12:22,710 --> 00:12:24,750 doni pli pezo al korekto. 270 00:12:24,750 --> 00:12:27,930 Ĉar estas tre ofte korekteco kiu postrestas pli tempo. 271 00:12:27,930 --> 00:12:28,760 Fidu al mi nun. 272 00:12:28,760 --> 00:12:31,190 Vi find-- almenaŭ en unu pset-- ke vi 273 00:12:31,190 --> 00:12:36,790 elspezi 90% de via tempo laborante en 10% de la problemo. 274 00:12:36,790 --> 00:12:39,320 >> Kaj ĉiu speco de verkoj krom unu aŭ du cimojn, 275 00:12:39,320 --> 00:12:41,570 kaj tiuj estas la bugs kiu gardu vin malfrua nokto. 276 00:12:41,570 --> 00:12:43,380 Tiuj estas kiuj ia eskapi vin. 277 00:12:43,380 --> 00:12:45,560 Sed post dormi sur ĝi, aŭ ĉeesti oficejo horoj 278 00:12:45,560 --> 00:12:48,844 aŭ demandojn enreta, estas kiam vi atingos ke 100% celo, 279 00:12:48,844 --> 00:12:50,760 kaj tio estas kial ni pezo korekteco la plej. 280 00:12:50,760 --> 00:12:54,102 Desegni iom malpli, kaj stiligi iom malpli ol tio. 281 00:12:54,102 --> 00:12:56,060 Sed teni en mind-- stilo Estas eble la plej facila 282 00:12:56,060 --> 00:12:58,890 de tiuj mordi ekstere kiel por la stilo gvidas. 283 00:12:58,890 --> 00:13:01,580 >> Kaj nun, pli seriozan rimarku la akademia honesteco. 284 00:13:01,580 --> 00:13:05,000 CS50 havas la malfeliĉan distingon esti la plej granda produktanto de Ad Board 285 00:13:05,000 --> 00:13:07,330 kazoj preskaŭ ĉiujare historie. 286 00:13:07,330 --> 00:13:11,012 Ĉi tio ne estas ĉar studentoj cheat en CS50 ajna pli ol ajna alia klaso, 287 00:13:11,012 --> 00:13:13,720 sed ĉar per naturo de la laboro, la fakto ke ĝi estas elektronika, 288 00:13:13,720 --> 00:13:16,636 la fakto, ke ni serĉas ĝin, kaj la fakto ni estas komputila sciencistoj 289 00:13:16,636 --> 00:13:20,570 Mi povas diri ni bedaŭrinde tre bona por detekti ĝin. 290 00:13:20,570 --> 00:13:22,710 >> Do kion signifas tio en realaj terminoj? 291 00:13:22,710 --> 00:13:24,820 Do, por la Syllabus, la kurso filozofio 292 00:13:24,820 --> 00:13:28,090 vere bolas malsupren al racia. 293 00:13:28,090 --> 00:13:31,684 Tie estas tiu linio inter fari onia laboro sur via propra 294 00:13:31,684 --> 00:13:34,100 kaj ekhavi iom da racia helpo de amiko, 295 00:13:34,100 --> 00:13:38,020 kaj kategorie fari tiun laboron por via amiko, aŭ sendante lin aŭ ŝin via kodo 296 00:13:38,020 --> 00:13:41,080 por ke li aŭ ŝi povas simple preni aŭ prunteprenis ĝin dekstra. 297 00:13:41,080 --> 00:13:43,580 Kaj kiu transiras la linion ke ni desegnis en la klaso. 298 00:13:43,580 --> 00:13:45,410 >> Vidu, la Syllabus fine por la linioj 299 00:13:45,410 --> 00:13:48,209 ke ni desegni kiel estante raciaj kaj senkaŭza konduto, 300 00:13:48,209 --> 00:13:50,000 sed vere faras sxvelajxon malsupren al la esenco 301 00:13:50,000 --> 00:13:53,980 de via laboro bezonos esti via propra en la fino. 302 00:13:53,980 --> 00:13:56,230 Nun kun kiu diris, estas heŭristiko. 303 00:13:56,230 --> 00:13:58,980 Ĉar kiel vi eble imagine-- el oficejo horoj kaj la vidaĵojn 304 00:13:58,980 --> 00:14:01,060 kaj la vídeos ni montrita tiel far-- CS50 305 00:14:01,060 --> 00:14:04,530 Estas ja signifis esti kiel kunlabora kaj kiel kooperativo kaj sociaj 306 00:14:04,530 --> 00:14:06,450 ebla. 307 00:14:06,450 --> 00:14:08,570 Kiel kunlabora kiel estas striktaj. 308 00:14:08,570 --> 00:14:11,314 >> Sed kun tiu diris la heŭristika, kiel vi vidos en la Syllabus, 309 00:14:11,314 --> 00:14:12,980 estas ke kiam vi havas iun problemon. 310 00:14:12,980 --> 00:14:16,470 Vi havas iun cimon en via kodo, kiun vi ne povas solvi, ĝi estas racia por vi 311 00:14:16,470 --> 00:14:18,039 por montri vian kodon por iu alia. 312 00:14:18,039 --> 00:14:21,080 Amiko eĉ en la klaso, amiko sidis apud vi ĉe oficejo horoj, 313 00:14:21,080 --> 00:14:22,680 aŭ membro de la stabo. 314 00:14:22,680 --> 00:14:25,810 Sed ili ne povas pruvi sian kodon al vi. 315 00:14:25,810 --> 00:14:27,710 >> En aliaj vortoj, respondi al via question-- 316 00:14:27,710 --> 00:14:29,940 Mi bezonas help-- ne ho, jen mia kodo. 317 00:14:29,940 --> 00:14:32,440 Rigardu ĉi kaj dedukti el ĝi, kion vi volas. 318 00:14:32,440 --> 00:14:34,580 Nun kompreneble ekzistas maniero klare al ludo 319 00:14:34,580 --> 00:14:37,760 tiu sistemo per kiu mi montros al vi miaj kodo antaŭ havi demandon. 320 00:14:37,760 --> 00:14:40,150 Bonvolu montri al mi miaj via kodo antaŭ havi demandon. 321 00:14:40,150 --> 00:14:45,870 Sed vidu la Syllabus denove por la fajna detalojn de kie ĉi tiu linio estas. 322 00:14:45,870 --> 00:14:50,606 >> Ĝuste nun pentri la bildon kaj kunhavigi kiel travidebla kiel ebla 323 00:14:50,606 --> 00:14:53,480 kie ni estas en la lastaj jaroj, Jen estas la nombro de Ad Board kazoj 324 00:14:53,480 --> 00:14:56,260 ke CS50 havis super la lastaj sep jaroj. 325 00:14:56,260 --> 00:14:58,717 Kun 14 kazoj ĉi plej freŝa aŭtuno. 326 00:14:58,717 --> 00:15:01,300 En terminoj de la studentoj implikitaj, ĝi estis 20 iuj neparaj studentoj 327 00:15:01,300 --> 00:15:02,490 pasinta aŭtuno. 328 00:15:02,490 --> 00:15:05,670 Estis pinto de 33 studentoj kelkaj jaroj. 329 00:15:05,670 --> 00:15:08,830 Multaj el kiu estas bedaŭrinde Ne plu ekzistas en la campus. 330 00:15:08,830 --> 00:15:13,100 >> Studentoj partoprenas kiel procento de la klaso historie iris de 0% 331 00:15:13,100 --> 00:15:17,300 al 5,3%, kio estas nur por diri tio estas ĉiujare defio. 332 00:15:17,300 --> 00:15:20,390 Kaj al tiu fino, kio ni volas fari estas transdoni unu 333 00:15:20,390 --> 00:15:24,310 ke ni dd-- nur FYI-- kompari je justeco al tiuj studentoj kiuj 334 00:15:24,310 --> 00:15:26,520 Estas sekvante la linio laŭe. 335 00:15:26,520 --> 00:15:29,620 Ni faru kompari ĉiuj aktualaj submissions kontraŭ ĉiuj pasintaj misioj 336 00:15:29,620 --> 00:15:30,840 el la pasinteco multaj jaroj. 337 00:15:30,840 --> 00:15:33,620 >> Ni scias tro kiel Guglas ĉirkaŭe kaj trovi kodo repositorios 338 00:15:33,620 --> 00:15:36,360 linio, diskuto forumoj Interreto, laboro ejoj enreta. 339 00:15:36,360 --> 00:15:41,580 Se studento povas trovi ĝin, ni povas certe trovi kiom ni bedaŭre fari. 340 00:15:41,580 --> 00:15:45,330 Do, kion vi vidos en la Syllabus kvankam estas ĉi bedaŭro klaŭzo. 341 00:15:45,330 --> 00:15:47,500 Mi certe povas estimi, kaj ni ĉiuj havas 342 00:15:47,500 --> 00:15:50,870 bastono plenuminte la kurson kiel tiu, aŭ ĉi tiu mem super tempo, 343 00:15:50,870 --> 00:15:53,997 certe scias kio ĝi estas kiel kiam vivo metas en la vojo, kiam vi havos 344 00:15:53,997 --> 00:15:56,080 iu malfrua nokto deadline-- ne nur en tiu klaso, 345 00:15:56,080 --> 00:15:58,660 sed another-- kiam vi tute elĉerpita, emfazis ekstere, 346 00:15:58,660 --> 00:16:00,659 havi la malorda nombro aliajn farendaĵojn. 347 00:16:00,659 --> 00:16:03,660 Vi faros en iu momento vivo certe estas malbona, eble malfrue 348 00:16:03,660 --> 00:16:04,620 nokto decido. 349 00:16:04,620 --> 00:16:06,520 >> Do por la Syllabus, estas tiu klaŭzo, 350 00:16:06,520 --> 00:16:10,629 tia, ke se ene 72 horoj de fari iu malriĉa decido, vi posedas ĝis ĝi 351 00:16:10,629 --> 00:16:12,670 kaj alveni al mi kaj unu el la kurso kapoj 352 00:16:12,670 --> 00:16:14,300 kaj ni havos konversacio. 353 00:16:14,300 --> 00:16:16,220 Ni manipuli tion interne en esperoj 354 00:16:16,220 --> 00:16:18,770 ĝin igante pli de instruado momento aŭ vivon leciono 355 00:16:18,770 --> 00:16:22,120 kaj ne io kun aparte drastajn sekvojn 356 00:16:22,120 --> 00:16:24,570 kiel vi povus vidi en ĉi tiuj lertaj tie. 357 00:16:24,570 --> 00:16:26,540 >> Do tio estas tre serioza tono. 358 00:16:26,540 --> 00:16:29,960 Ni paŭzi por nur kelkaj sekundoj rompi la streĉiĝo. 359 00:16:29,960 --> 00:16:34,442 >> [MUZIKO Ludante] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. Malan: Bone, tiel kiel estis, ke por segue? 362 00:17:20,250 --> 00:17:22,059 Por hodiaŭaj primara temoj. 363 00:17:22,059 --> 00:17:23,859 La unua el kiuj estas abstraktaĵo. 364 00:17:23,859 --> 00:17:26,900 Alia de kiuj tuj estos la reprezentado de datumoj, kiuj sincere 365 00:17:26,900 --> 00:17:31,640 Estas vere seka maniero diri kiel ni irad solvi problemojn kaj pensante 366 00:17:31,640 --> 00:17:33,250 pri solvi problemojn? 367 00:17:33,250 --> 00:17:37,285 Do vi vidis en Scratch, kaj vi havas vidinta eble jam en pset1 kun C 368 00:17:37,285 --> 00:17:39,930 ke vi ne nur povas uzi funkcioj, kiel printf, 369 00:17:39,930 --> 00:17:42,770 ke aliaj homoj en jaroj pasintaj skribis por vi. 370 00:17:42,770 --> 00:17:45,340 Vi ankaŭ povas skribi viajn proprajn funkciojn. 371 00:17:45,340 --> 00:17:48,440 >> Kaj kvankam vi eble ne havas faris tion en C, kaj sincere en pset1 372 00:17:48,440 --> 00:17:51,866 Ne vere necesas skribi vian propra funkcio ĉar la problem-- 373 00:17:51,866 --> 00:17:53,990 dum eble fortimiga ĉe unua glance-- vi vidos 374 00:17:53,990 --> 00:17:57,910 povas finfine esti solvita per ne ĉiuj tiom da linioj de kodo. 375 00:17:57,910 --> 00:18:01,140 Sed kun kiu diris, en terminoj skribi vian propran funkcion, 376 00:18:01,140 --> 00:18:03,570 rimarkas ke C ne donu vi tiun kapablon. 377 00:18:03,570 --> 00:18:06,940 >> Mi tuj iros en la hodiaŭa fontkodon, kiu estas disponebla jam en linio, 378 00:18:06,940 --> 00:18:10,900 kaj mi tuj iros antaŭen kaj malfermita programon nomita funkcio 0.C, 379 00:18:10,900 --> 00:18:14,620 kaj en funkcio nulo ni vidos kelkon. 380 00:18:14,620 --> 00:18:19,160 En unua linioj 18 tra 23 estas mia ĉefa funkcio. 381 00:18:19,160 --> 00:18:22,414 Kaj nun ke ni komencas legi kodo kiun ni ne skribas sur la muŝo, 382 00:18:22,414 --> 00:18:25,080 sed anstataŭe mi skribis anticipe aŭ ke vi en problemo starigis 383 00:18:25,080 --> 00:18:27,910 ricevu devi skribita anticipe. 384 00:18:27,910 --> 00:18:30,040 Bona maniero por komenci legi aliulaj kodo 385 00:18:30,040 --> 00:18:31,400 estas serĉi la ĉefa funkcio. 386 00:18:31,400 --> 00:18:34,420 Elkompreni kie tiu eniro punkto estas kurante la programo, 387 00:18:34,420 --> 00:18:36,580 kaj do sekvas logike de tie. 388 00:18:36,580 --> 00:18:40,190 >> Do tiu programo ŝajne impresoj via nomo sekvata de dupunkto. 389 00:18:40,190 --> 00:18:42,490 Ni do uzas GetString el la CS50 biblioteko 390 00:18:42,490 --> 00:18:46,050 akiri ĉenon, aŭ vorton aŭ frazon de la uzanto en la klavaro. 391 00:18:46,050 --> 00:18:48,390 Kaj tiam tie estas tio afero here-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Nun PrintName estas ne funkcio kiu venas kun C. 393 00:18:51,420 --> 00:18:52,970 Ne en norma io.h. 394 00:18:52,970 --> 00:18:55,570 Ne en CS50.h. 395 00:18:55,570 --> 00:18:57,880 Estas ĝuste en la sama dosiero. 396 00:18:57,880 --> 00:19:01,000 Rimarkos se mi rulumu malsupren oni bit-- linioj 25 ĝis 27-- 397 00:19:01,000 --> 00:19:05,330 estas nur bela vojo de komentoj via kodo uzante stelojn slashes. 398 00:19:05,330 --> 00:19:07,320 Tiu estas mult-linio diri, kaj tio estas nur 399 00:19:07,320 --> 00:19:10,570 mia priskribo en bluo de kion tiu funkcio faras. 400 00:19:10,570 --> 00:19:14,530 >> Ĉar en linioj 28 tra 31, Mi verkis súper simpla funkcio 401 00:19:14,530 --> 00:19:16,280 kies nomo estas PrintName. 402 00:19:16,280 --> 00:19:19,560 Ĝi prenas kiom argumentoj vi dirus? 403 00:19:19,560 --> 00:19:25,120 Do unu argument-- ĉar ekzistas unu argumento listigitaj ene la krampoj. 404 00:19:25,120 --> 00:19:27,000 La tipo de kiuj estas String. 405 00:19:27,000 --> 00:19:30,240 Kio estas PrintName estas kiel tiu nigra skatolo 406 00:19:30,240 --> 00:19:32,910 aŭ funkcio kiu prenas kiel eniga ĉeno. 407 00:19:32,910 --> 00:19:35,730 >> Kaj la nomo de tiu String oportune estos Nomo. 408 00:19:35,730 --> 00:19:37,840 Ne S, ne N, sed Nomo. 409 00:19:37,840 --> 00:19:41,090 Do kion signifas PrintName fari? 410 00:19:41,090 --> 00:19:42,210 Ĝi estas bela simpla. 411 00:19:42,210 --> 00:19:45,390 Apenaŭ unu linion de kodo por la printf, sed ŝajne ĝi 412 00:19:45,390 --> 00:19:47,950 gravuraĵoj el "Saluton," tiom kaj tiom. 413 00:19:47,950 --> 00:19:50,070 Kie la tiel kaj tiel venas de la argumento. 414 00:19:50,070 --> 00:19:52,300 >> Nun tio ne estas grandega novigo tie. 415 00:19:52,300 --> 00:19:56,710 Vere, mi prenis programo kiu povis estis skribitaj kun unu linio de kodo 416 00:19:56,710 --> 00:20:00,190 metante ĉi tien, kaj ŝanĝis ĝin al io 417 00:20:00,190 --> 00:20:04,920 kiu implikas iujn ses aŭ sep aŭ tiel linioj de kodo tuta vojo malsupren tie. 418 00:20:04,920 --> 00:20:08,190 >> Sed estas la praktikado de principo konata kiel abstraktado. 419 00:20:08,190 --> 00:20:12,550 Speco de encapsulando ene de nova funkcio kiu havas nomon, kaj pli 420 00:20:12,550 --> 00:20:14,590 tamen tiu nomo laŭvorte diras, kion ĝi faras. 421 00:20:14,590 --> 00:20:16,880 Mi volas diri printf-- tio ne aparte priskriba. 422 00:20:16,880 --> 00:20:18,932 Se mi volas krei puzlo peco, aŭ se mi 423 00:20:18,932 --> 00:20:21,140 deziras krei funkcion kiu presas ies nomon, 424 00:20:21,140 --> 00:20:23,230 la belecon de faranta ĉi estas ke mi povas reale 425 00:20:23,230 --> 00:20:27,170 doni tiun funkcion nomon kiu priskribas kion ĝi faras. 426 00:20:27,170 --> 00:20:29,844 >> Nun ĝi prenas en enigaĵoj kiuj Mi arbitre nomas nomon 427 00:20:29,844 --> 00:20:32,760 sed ankaŭ tio mirinde priskriba anstataŭ esti iom pli 428 00:20:32,760 --> 00:20:36,140 genérico kiel S. Kaj void, cxar nun, nur signifas 429 00:20:36,140 --> 00:20:38,330 ke tiu funkcio ne transdonu min nenio. 430 00:20:38,330 --> 00:20:41,127 Ne estas kiel GetString ke laŭvorte manoj min ŝnuro 431 00:20:41,127 --> 00:20:43,960 kiel ni faris kun la pecoj de papero per viaj samklasanoj pasintsemajne, 432 00:20:43,960 --> 00:20:45,990 sed ĝi apenaŭ havas kromefikon. 433 00:20:45,990 --> 00:20:48,080 Ĝi presas ion por la ekrano. 434 00:20:48,080 --> 00:20:53,880 >> Do, je la fino de la tago, se mi farata funkcio-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 Ni vidos ke ĝi petas pro mia nomo. 436 00:20:55,450 --> 00:20:58,150 Mi tajpas David, kaj gxi tipoj Mian nomon. 437 00:20:58,150 --> 00:21:01,080 Se mi faros gxin denove kun Rob, ĝi tuj diru "Saluton, Rob." 438 00:21:01,080 --> 00:21:04,280 Tiel simpla ideo, sed eble extrapolar de ĉi mense 439 00:21:04,280 --> 00:21:06,750 ke kiel viaj programoj akiri iom pli komplikaj, 440 00:21:06,750 --> 00:21:10,290 kaj vi volas skribi eron de kodo kaj alvokon kiu code-- alpreĝi 441 00:21:10,290 --> 00:21:13,270 ke code-- per iu priskriba enoficigi kiel PrintName, 442 00:21:13,270 --> 00:21:15,600 C faras permesi al ni tiun kapablon. 443 00:21:15,600 --> 00:21:17,660 >> Jen alia simpla ekzemplo. 444 00:21:17,660 --> 00:21:22,940 Ekzemple, se mi malfermos supre enarkivigi de hodiaŭ nomita return.c, 445 00:21:22,940 --> 00:21:24,270 rimarki kion mi faris tie. 446 00:21:24,270 --> 00:21:26,330 La plejparto de ĉi tiu ĉefa funkcio estas printf. 447 00:21:26,330 --> 00:21:30,360 Mi unue arbitre pravalorizi a variablon nomata x al la numero 2. 448 00:21:30,360 --> 00:21:34,110 Mi tiam presi "x estas nun % I "pasante en la valoro de x. 449 00:21:34,110 --> 00:21:35,500 Do mi simple diri kio ĝi estas. 450 00:21:35,500 --> 00:21:37,208 >> Nun mi nur sentime asertante kun printf. 451 00:21:37,208 --> 00:21:42,050 Mi cubing ke valoro x, kaj mi fari tiel nomante funkcio 452 00:21:42,050 --> 00:21:45,590 nomita kubo forpaso x kiel la argumento, 453 00:21:45,590 --> 00:21:49,300 kaj do ŝparas la eligo en la variablo mem, x. 454 00:21:49,300 --> 00:21:51,340 Do mi clobbering la valoro de x. 455 00:21:51,340 --> 00:21:53,380 Mi supera la valoro de x kun kiom 456 00:21:53,380 --> 00:21:56,510 la rezulto de vokanta tiu kubo funkcio estas. 457 00:21:56,510 --> 00:21:59,530 Kaj tiam mi simple presi iun lanugaj stuff tie dirante kion mi faris. 458 00:21:59,530 --> 00:22:01,600 >> Do kio do estas kubo? 459 00:22:01,600 --> 00:22:03,510 Rimarki kio estas fundamente malsama tie. 460 00:22:03,510 --> 00:22:05,540 Mi donas la funkcio nomo kiel antaŭe. 461 00:22:05,540 --> 00:22:08,270 Mi specifita nomon argumenton. 462 00:22:08,270 --> 00:22:11,650 Tiu tempon ĝi nomiĝas n anstataŭ nomon sed mi povis nomi lin ajn mi volas. 463 00:22:11,650 --> 00:22:12,650 Sed tio estas malsama. 464 00:22:12,650 --> 00:22:14,080 Tion en la maldekstra. 465 00:22:14,080 --> 00:22:16,290 Antaŭe ĝi estis kio ŝlosilvorto? 466 00:22:16,290 --> 00:22:16,870 Infanoj. 467 00:22:16,870 --> 00:22:18,580 Nun estas evidente int. 468 00:22:18,580 --> 00:22:20,630 >> Do kio eble prenos? 469 00:22:20,630 --> 00:22:24,090 Dum void signifas specon de nenieco, kaj tiu estis la kazo. 470 00:22:24,090 --> 00:22:25,970 PrintName revenis nenion. 471 00:22:25,970 --> 00:22:27,942 Ĝi faris ion, sed ne transdonu min 472 00:22:27,942 --> 00:22:30,650 iu kiun mi povus meti sur la maldekstra flanko de egalsigno 473 00:22:30,650 --> 00:22:32,460 kiel mi faris tie sur linio 22. 474 00:22:32,460 --> 00:22:36,780 >> Do se mi diras en linio 30, kio estas tio verŝajne implicante 475 00:22:36,780 --> 00:22:38,610 pri kio kubo faras por mi? 476 00:22:38,610 --> 00:22:41,110 Yeah? 477 00:22:41,110 --> 00:22:42,310 Revenas entjero. 478 00:22:42,310 --> 00:22:44,590 Do manoj min, por Ekzemple, peco de papero 479 00:22:44,590 --> 00:22:46,580 sur kiuj skribis la respondon. 480 00:22:46,580 --> 00:22:50,130 2 cubed aux 3 cubed aux 4 cubed-- kion mi pasis en, 481 00:22:50,130 --> 00:22:51,540 kaj kiamaniere implemento ĉi? 482 00:22:51,540 --> 00:22:54,810 Nu, simple n × n × n Tiel mi povus kubo valoro. 483 00:22:54,810 --> 00:22:57,110 Do denove, súper simpla ideo, sed demonstrativo 484 00:22:57,110 --> 00:23:00,100 nun kiel oni povas skribi funkciojn kiu fakte havis nin reen 485 00:23:00,100 --> 00:23:02,380 valoroj, kiuj povus esti de intereso. 486 00:23:02,380 --> 00:23:05,740 >> Ni rigardu unu lasta ekzemplo tie nomita funkcio unu. 487 00:23:05,740 --> 00:23:08,530 En tiu ekzemplo, ĝi startas akiri pli konvinka. 488 00:23:08,530 --> 00:23:12,400 Do en funkcio, ĉi program-- avizo finfine 489 00:23:12,400 --> 00:23:14,920 nomas funkcio nomita GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt estas ne funkcio en la CS50 biblioteko, 491 00:23:17,800 --> 00:23:20,400 sed ni decidis nin dezirus ke ĝi ekzistas. 492 00:23:20,400 --> 00:23:24,550 >> Do se ni rulumu malsupren poste en la dosiero, rimarki kiom mi rondiris efektivigo 493 00:23:24,550 --> 00:23:26,560 akiri pozitivajn int, kaj mi diras ke estas pli konvinka 494 00:23:26,560 --> 00:23:28,992 ĉar tio estas deca nombro da linioj de kodo. 495 00:23:28,992 --> 00:23:30,700 Ĝi estas ne nur malsaĝa iom ludilo programo. 496 00:23:30,700 --> 00:23:33,870 Ĝi fakte havas iun eraron kontrolanta kaj fari ion pli utilan. 497 00:23:33,870 --> 00:23:38,470 >> Do se vi ne vidis la walkthrough videos kiu ni enigita en pset1, 498 00:23:38,470 --> 00:23:42,350 scias ke tiu estas tipo de buklo en C, simila en spirito 499 00:23:42,350 --> 00:23:44,270 al la specoj de aferoj Scratch povas fari. 500 00:23:44,270 --> 00:23:46,320 Kaj do diras faros. 501 00:23:46,320 --> 00:23:47,500 Printi. 502 00:23:47,500 --> 00:23:51,860 Tiam iru antaŭen kaj akiri n-- ricevas int kaj stoki ĝin en n, 503 00:23:51,860 --> 00:23:55,760 kaj observu faras ĉi denove kaj denove kaj denove tiel longe kiel n estas malpli ol unu. 504 00:23:55,760 --> 00:23:58,720 >> Do n tuj estos malpli ol unu nur se la homo ne estas kunlaboranta. 505 00:23:58,720 --> 00:24:01,980 Se li aŭ ŝi estas tajpado en 0 aŭ -1 aŭ -50, 506 00:24:01,980 --> 00:24:04,790 tiu buklo tuj subteni ekzekutinte denove kaj denove. 507 00:24:04,790 --> 00:24:07,549 Kaj finfine rimarkos, mi simple redonas la valoron. 508 00:24:07,549 --> 00:24:09,590 Do nun ni havas funkcion kiu vizitis belan 509 00:24:09,590 --> 00:24:14,040 se CS50 devus implementar CS50.h kaj CS50.c por vi, 510 00:24:14,040 --> 00:24:16,520 sed ĉi tie ni povas nun implementar ĉi mem. 511 00:24:16,520 --> 00:24:19,230 >> Sed du rimarkoj pri iuj ŝlosilaj detaloj. 512 00:24:19,230 --> 00:24:24,390 One-- kial mi deklaras int n, ĉu vi opinias, on line 29 513 00:24:24,390 --> 00:24:27,139 anstataŭ simple faranta ĉi tie, kiuj estas 514 00:24:27,139 --> 00:24:28,930 pli kohera kun kion ni faris pasintsemajne? 515 00:24:28,930 --> 00:24:29,430 Yeah? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Bona penso. 518 00:24:35,110 --> 00:24:37,080 Do se ni metis ĝin ĉi tie, ĝi estas kvazaŭ ni 519 00:24:37,080 --> 00:24:39,110 konservi deklarante ĝin denove kaj denove. 520 00:24:39,110 --> 00:24:42,000 Tio en si mem estas ne problemaj, per, 521 00:24:42,000 --> 00:24:43,940 ĉar ni bezonas nur la valoro iam kaj tiam 522 00:24:43,940 --> 00:24:45,330 ni iras por ricevi novan ĉiuokaze. 523 00:24:45,330 --> 00:24:45,940 Sed bona penso. 524 00:24:45,940 --> 00:24:46,440 Yeah? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Fermi. 527 00:24:53,330 --> 00:24:59,030 Do ĉar mi deklaris n sur linio 29 ekster la buklo, 528 00:24:59,030 --> 00:25:01,390 estas alireblaj tra tiu tuta funkcio. 529 00:25:01,390 --> 00:25:05,400 Ne la aliaj funkcioj ĉar n estas ankoraŭ ene de tiuj buklaj 530 00:25:05,400 --> 00:25:06,470 krampoj tie. 531 00:25:06,470 --> 00:25:07,940 So-- certas. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Ĝuste. 534 00:25:12,940 --> 00:25:14,356 Do tio estas eĉ pli al la punkto. 535 00:25:14,356 --> 00:25:18,600 Se ni anstataŭe deklaris n ĝuste ĉi tie sur linio 32, 536 00:25:18,600 --> 00:25:22,340 ĝi estas problema ĉar diveno kie ajn mi bezonos por aliri ĝin? 537 00:25:22,340 --> 00:25:25,620 Sur linio 34, kaj la simpla regulo de thumb estas 538 00:25:25,620 --> 00:25:30,060 ke vi nur povas uzi variablon ene de la plej freŝa krispa krampoj 539 00:25:30,060 --> 00:25:31,420 kiun vi deklaras ĝin. 540 00:25:31,420 --> 00:25:35,230 >> Bedaŭrinde, linio 34 Estas unu linion tro malfrue 541 00:25:35,230 --> 00:25:38,560 ĉar mi jam fermita la frizita krampoj on line 33 542 00:25:38,560 --> 00:25:41,220 kiu respondas al la frizita krampoj en linio 30. 543 00:25:41,220 --> 00:25:44,180 Kaj tiel tio estas maniero diri ke tiu variablo int estas scoped, 544 00:25:44,180 --> 00:25:46,970 tiel diri, nur interne de tiuj buklaj krampoj. 545 00:25:46,970 --> 00:25:48,910 Ĝi simple ne ekzistas ekster ili. 546 00:25:48,910 --> 00:25:51,580 >> Do ja, se mi tion erara, lasu min konservi la kodo 547 00:25:51,580 --> 00:25:53,530 kiel is-- malĝuste skribis. 548 00:25:53,530 --> 00:25:57,990 Lasu min kaj ne fari funkcio-1, kaj notice-- eraro. 549 00:25:57,990 --> 00:26:03,502 Uzo de nedeklarita ensalutilo n sur linio 35, kiu estas tie ĉi. 550 00:26:03,502 --> 00:26:05,210 Kaj se ni rulumu supren tie, alia. 551 00:26:05,210 --> 00:26:08,750 Uzo de nedeklarita ensalutilo n sur linio 34. 552 00:26:08,750 --> 00:26:11,200 >> Do la tradukilo, tin Estas rimarkante ke ĝuste 553 00:26:11,200 --> 00:26:13,720 ne ekzistas eĉ kvankam klare estas tie vide. 554 00:26:13,720 --> 00:26:16,090 Tiel simpla riparas estas deklarante ĝin tie. 555 00:26:16,090 --> 00:26:18,790 >> Nun lasu min rulumi por la supro de la dosiero. 556 00:26:18,790 --> 00:26:21,080 Kio elsaltas ĉe vi kiel esti iom malsama 557 00:26:21,080 --> 00:26:23,070 el la aĵoj ni rigardis pasintan semajnon? 558 00:26:23,070 --> 00:26:26,990 Ne nur mi havas nomon, ne nur fari Mi havas iujn akrajn inkludas supren supro, 559 00:26:26,990 --> 00:26:29,340 Mi havas ion mi nomante prototipo. 560 00:26:29,340 --> 00:26:36,100 Nun ke aspektas ege simila al kio Ni ĵus vidis antaŭ momento en linio 27. 561 00:26:36,100 --> 00:26:39,230 >> Do ni konkludi el malsama erarmesaĝon kial mi faris tion. 562 00:26:39,230 --> 00:26:42,050 Lasu min kaj forigi tiujn liniojn tie. 563 00:26:42,050 --> 00:26:44,240 Kaj ni scias nenion pri prototipon. 564 00:26:44,240 --> 00:26:45,430 Refari tiu dosiero. 565 00:26:45,430 --> 00:26:46,890 Faru funkcio unu. 566 00:26:46,890 --> 00:26:48,090 Kaj nun, malbenita, kvar eraroj. 567 00:26:48,090 --> 00:26:50,220 Ni rulumu ĝis la unua. 568 00:26:50,220 --> 00:26:55,070 >> Implica deklaro de funkcio akiri pozitivajn int estas nevalida en C99. 569 00:26:55,070 --> 00:26:57,780 C99 simple signifas la 1999 versio de la lingvo 570 00:26:57,780 --> 00:26:59,710 C, kiu estas kion ni ja uzas. 571 00:26:59,710 --> 00:27:01,050 Do kion signifas tio? 572 00:27:01,050 --> 00:27:05,250 Nu C-- kaj pli specife C compilers-- estas bela muta programoj. 573 00:27:05,250 --> 00:27:07,420 Ili nur scias kion vi havas rakontis al ili, kaj tio estas 574 00:27:07,420 --> 00:27:08,960 fakte temática de la pasinta semajno. 575 00:27:08,960 --> 00:27:12,910 >> La problemo estas ke se mi iros pri efektivigo nomon ĉi tie, 576 00:27:12,910 --> 00:27:17,640 kaj mi nomas funkcion nomita GetPositiveInt tie sur linio 20, 577 00:27:17,640 --> 00:27:22,520 domadministranto teknike ne ekzistis ĝis la tradukilo vidas linio 27. 578 00:27:22,520 --> 00:27:25,450 Bedaŭrinde, la tradukilo estas faranta aferojn supre, sube, maldekstra, dekstra, 579 00:27:25,450 --> 00:27:29,580 tiel ĉar ĝi ne vidis la efektivigo de GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 sed vidu vi provas uzi ĝin ĉi tie, 581 00:27:32,400 --> 00:27:35,810 ĝi estas nur tuj bail-- krias al vi kun eraro message-- eble 582 00:27:35,810 --> 00:27:38,440 kamufla kaj ne reale kompili la dosieron. 583 00:27:38,440 --> 00:27:41,940 >> Do tn prototipo supren jen rekoni redunda. 584 00:27:41,940 --> 00:27:47,870 Laŭvorte, mi iris malsupren tie kaj mi kopias nuda, kaj tial Mi metis ĝin tie. 585 00:27:47,870 --> 00:27:51,020 Void estus pli taŭga, ni do laŭvorte kopii kaj alglui ĝin de ĉi tiu tempo. 586 00:27:51,020 --> 00:27:52,854 Mi laŭvorte kopiita nuda ĝin. 587 00:27:52,854 --> 00:27:54,270 Vere same kiel panon panero. 588 00:27:54,270 --> 00:27:56,260 >> Iom aŭtoveturejon al la tradukilo. 589 00:27:56,260 --> 00:27:58,860 Mi ne scias kion tiu faras ankoraŭ, sed mi ĵuras al vi 590 00:27:58,860 --> 00:28:00,260 ke ekzistos eventuale. 591 00:28:00,260 --> 00:28:04,010 Kaj tio estas kial ĉi line-- en linio 16-- finiĝas per punktokomo. 592 00:28:04,010 --> 00:28:05,486 Ĝi estas redunda projekte. 593 00:28:05,486 --> 00:28:05,986 Jes? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Se vi ne ligas via biblioteko al the-- ho, bona demando. 596 00:28:14,360 --> 00:28:17,350 Sharp inkludas kaplinion dosiero inkludoj. 597 00:28:17,350 --> 00:28:20,040 Bezonas be-- devus preskaŭ ĉiam estos ĉe la plejsupro 598 00:28:20,040 --> 00:28:23,270 de la dosiero por similar-- por ĝuste la sama kialo, jes. 599 00:28:23,270 --> 00:28:26,430 Ĉar en normo io.h estas laŭvorte linio 600 00:28:26,430 --> 00:28:30,560 kiel tiu, sed kun la vorto printf kaj kun liaj argumentoj kaj lia reveno tipo. 601 00:28:30,560 --> 00:28:33,310 Kaj tiel farante akrajn inkluzivi supren tie, kion vi estas laŭvorte faras 602 00:28:33,310 --> 00:28:36,380 estas kopii kaj alglui la enhavon de iu alia redaktis supro. 603 00:28:36,380 --> 00:28:39,660 Per cluing vian kodon en la fakto ke tiuj funkcioj ne ekzistas. 604 00:28:39,660 --> 00:28:40,160 Yeah? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Absolute. 607 00:28:48,260 --> 00:28:51,690 Do tre saĝa kaj ĝusta solvo estus, vi scias kion? 608 00:28:51,690 --> 00:28:53,760 Mi ne scias, kion prototipo estas, sed mi scias 609 00:28:53,760 --> 00:28:56,390 se mi komprenas ke C estas simple muta kaj rethinks supro al fundo. 610 00:28:56,390 --> 00:28:57,820 Nu donu ĝin kio ajn. 611 00:28:57,820 --> 00:29:01,650 Ni tranĉis tiu kodo, alglui ĝin supro, kaj nun puŝi ĉefa sube. 612 00:29:01,650 --> 00:29:03,470 Tio ankaŭ solvus la problemon. 613 00:29:03,470 --> 00:29:07,409 >> Sed vi povus tre facile veni supren kun scenejo en kiu A bezonos nomi B 614 00:29:07,409 --> 00:29:10,075 kaj eble B nomas reen al A. Tio Estas io nomata rekursio, 615 00:29:10,075 --> 00:29:11,370 kaj ni revenos al tio. 616 00:29:11,370 --> 00:29:13,911 Kaj ĝi povas aŭ ne esti bona afero, sed vi povas definitive 617 00:29:13,911 --> 00:29:15,110 rompi tiun solvon. 618 00:29:15,110 --> 00:29:17,690 >> Kaj cetere, mi volus pretendi stile, 619 00:29:17,690 --> 00:29:20,760 speciale kiam via programoj fariĝis tiu longa kaj tiu longa, 620 00:29:20,760 --> 00:29:23,064 estas nur super konvena meti ĉefa ĉe la supro 621 00:29:23,064 --> 00:29:25,730 ĉar ĝi estas la afero plej programistoj tuj zorgi pri. 622 00:29:25,730 --> 00:29:28,150 Kaj tial estas iom purigisto, disputeble, fari ĝin la vojon 623 00:29:28,150 --> 00:29:30,380 Mi origine faris kun prototipo eĉ 624 00:29:30,380 --> 00:29:33,396 kvankam ĝi aspektas iom redunda unuavide. 625 00:29:33,396 --> 00:29:33,895 Yeah? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Pardonu, ĉu vi povas diri ĝin pli laŭte? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Se vi ŝanĝas la lokojn de la efektivigo kaj la prototipo? 630 00:29:49,580 --> 00:29:51,270 Do, tio estas bona demando. 631 00:29:51,270 --> 00:29:53,780 Se vi re-klarigi cxi malsupren tie, vidu kio okazas. 632 00:29:53,780 --> 00:29:55,530 Do se mi metas ĉi sube tien, vi diras. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Ho, pardonu. 635 00:29:58,360 --> 00:29:58,859 Laŭta? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Eĉ pli laŭte. 638 00:30:04,011 --> 00:30:04,760 Ho, bona demando. 639 00:30:04,760 --> 00:30:05,860 Ĉu ĝi nuligas la funkcio? 640 00:30:05,860 --> 00:30:08,901 Vi scias, post ĉiuj tiuj jaroj, mi neniam metis prototipo poste. 641 00:30:08,901 --> 00:30:13,810 Do ni ja faras funkcio-1 post fari tion. 642 00:30:13,810 --> 00:30:15,279 >> [Murmurante] 643 00:30:15,279 --> 00:30:16,320 DAVID J. Malan: Ha, atendu. 644 00:30:16,320 --> 00:30:17,944 Ni ankoraŭ devas meti ĉiun ĝis supro. 645 00:30:17,944 --> 00:30:21,400 Do ni faru ĉi tien, se mi kompreni vian demandon ĝuste. 646 00:30:21,400 --> 00:30:24,700 Mi metante ĉiun, inkludante la prototipo supre ĉefa, 647 00:30:24,700 --> 00:30:28,180 sed mi meti la prototipo sub la efektivigo. 648 00:30:28,180 --> 00:30:33,190 >> Do, se mi faros unu, mi ricevas reen al error-- neuzitaj variablo n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Ho, tie. 651 00:30:37,860 --> 00:30:38,360 Dankon. 652 00:30:38,360 --> 00:30:39,430 Vidu, ni forigi ĉi. 653 00:30:39,430 --> 00:30:41,304 Tiu estas malsama cimon, do ni ignoras tion. 654 00:30:41,304 --> 00:30:43,910 Ni vere rapide refari tion. 655 00:30:43,910 --> 00:30:48,100 >> OK, do datumoj argumento ne uzita de formato String 656 00:30:48,100 --> 00:30:52,310 n-- ho, tio estas ĉar Mi ŝanĝis al tiuj ĉi tie. 657 00:30:52,310 --> 00:30:55,885 Bone, ni scias, kion la respondo tuj to-- bone, ĉi tie ni iras. 658 00:30:55,885 --> 00:31:00,560 Ha, dankon pro la pozitiva. 659 00:31:00,560 --> 00:31:03,430 Bone, mi korektos tiun kodon after-- ignori ĉi aparta cimon 660 00:31:03,430 --> 00:31:08,300 ekde ĉi was-- funkcias estas la respondo. 661 00:31:08,300 --> 00:31:11,560 >> Do ne reskribi kion vi ĵus faris. 662 00:31:11,560 --> 00:31:14,800 Mi suspektas la tradukilo Estas skribita en tia vojo 663 00:31:14,800 --> 00:31:18,420 ke ignoras vian prototipo ĉar la korpo, por tiel diri, 664 00:31:18,420 --> 00:31:20,922 el la funkcio havas jam implementado pli supren. 665 00:31:20,922 --> 00:31:23,380 Mi devus reale konsulti La manlibro de la tradukilo 666 00:31:23,380 --> 00:31:26,171 kompreni se estas iu alia implikaĵo, sed unuavide 667 00:31:26,171 --> 00:31:29,290 nur provas kaj spertante, tie ŝajnas esti neniu trafo. 668 00:31:29,290 --> 00:31:30,730 Bona demando. 669 00:31:30,730 --> 00:31:33,660 >> Do ni veturu antaŭen nun, movante for de kromefikoj kiuj 670 00:31:33,660 --> 00:31:36,660 estas funkcioj kiuj faras iun kiel vide sur la ekrano kun printf, 671 00:31:36,660 --> 00:31:38,090 sed ne resendas valoron. 672 00:31:38,090 --> 00:31:41,550 Kaj funkcioj kiuj havas revenon valoroj kiel ni ĵus vidis kelkajn. 673 00:31:41,550 --> 00:31:45,350 Ni jam vidis, tiu nocio de atingo, kaj ni vidos ĉi denove kaj denove. 674 00:31:45,350 --> 00:31:47,210 Sed nun, denove, uzi la regulon de dikfingro 675 00:31:47,210 --> 00:31:51,410 ke variablo povas nur esti uzita ene de la plej ĵus malfermiĝis 676 00:31:51,410 --> 00:31:54,350 kaj fermitaj frizita krampoj, kiel ni vidis en tiu aparta ekzemplo. 677 00:31:54,350 --> 00:31:56,910 >> Kaj kiel vi atentigis, estas ability-- 678 00:31:56,910 --> 00:32:00,040 Vi povus solvi kelkajn el tiuj problemoj metante variablo tutmonde 679 00:32:00,040 --> 00:32:01,290 ĉe la plejsupro de dosiero. 680 00:32:01,290 --> 00:32:03,630 Sed en preskaŭ ĉiuj kazoj ni estus sulki la frunton sur tio, 681 00:32:03,630 --> 00:32:06,170 kaj ja eĉ ne iros en tiu solvo ĝis nun. 682 00:32:06,170 --> 00:32:09,890 Do nun, la takeaway estas ke variabloj havas ĉi nocio de atingo. 683 00:32:09,890 --> 00:32:13,430 >> Sed nun ni rigardu alian seka formo de reale serĉi 684 00:32:13,430 --> 00:32:15,810 en iu bela interesa efektivigo detaloj. 685 00:32:15,810 --> 00:32:17,810 Kiel ni povus reprezenti informojn. 686 00:32:17,810 --> 00:32:20,370 Kaj ni jam rigardis ĉi en la unua semajno de la klaso. 687 00:32:20,370 --> 00:32:23,320 Rigardante binaroj, kaj memorante nin el dekuma. 688 00:32:23,320 --> 00:32:28,310 >> Sed memoru el pasintsemajne ke C havas malsamaj datumtipoj kaj faskojn pli, 689 00:32:28,310 --> 00:32:30,600 sed la plej utilaj nun eble tiuj. 690 00:32:30,600 --> 00:32:36,030 A char, aŭ karaktero, kio okazas esti unu bajto, aŭ ok bitoj entute. 691 00:32:36,030 --> 00:32:40,060 Kaj tio estas por diri ke la grandeco de char estas simple unu bajto. 692 00:32:40,060 --> 00:32:45,370 A bajto estas ok bitoj, do tio signifas, ke ni povas reprezenti kiel multaj gravuloj. 693 00:32:45,370 --> 00:32:47,320 Kiom da literoj aŭ simbolojn sur la klavaro 694 00:32:47,320 --> 00:32:49,210 se ni havas unu bajto aŭ ok bitoj. 695 00:32:49,210 --> 00:32:51,546 Pensu reen al semajno nulo. 696 00:32:51,546 --> 00:32:53,420 Se vi havas ok bitoj, kiom entute valoroj 697 00:32:53,420 --> 00:32:55,503 vi povas reprezenti kun mastroj de nuloj kaj? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- pli ol tio. 700 00:33:00,260 --> 00:33:03,490 Do 256 entute se vi komenci kalkulon nulo. 701 00:33:03,490 --> 00:33:07,120 Do se vi havas ok bits-- do se ni havis niajn duuma bulboj supren tien, 702 00:33:07,120 --> 00:33:12,180 ni povus igi tiujn ampolojn en kaj ekstere en ajna de 256 solaj desegnoj. 703 00:33:12,180 --> 00:33:13,640 >> Nun tiu estas iom problema. 704 00:33:13,640 --> 00:33:16,857 Ne tiel por la angla kaj latinidaj lingvoj, sed certe 705 00:33:16,857 --> 00:33:19,190 kiam vi enkonduki, por Ekzemple, aziaj lingvoj, kiuj 706 00:33:19,190 --> 00:33:22,580 havas multe pli simboloj ol kiel 26 literoj de la alfabeto. 707 00:33:22,580 --> 00:33:24,390 Ni efektive povus bezoni pli ol unu bajto. 708 00:33:24,390 --> 00:33:28,240 Kaj dankeme en lastaj jaroj havas socion 709 00:33:28,240 --> 00:33:31,040 adoptis aliajn normojn kiuj uzas pli ol unu bajton por posteno. 710 00:33:31,040 --> 00:33:34,210 >> Sed nuntempe en C, la defaŭlta Estas nur unu bajto aŭ ok bitoj. 711 00:33:34,210 --> 00:33:38,195 Entjera, dume, estas kvar bitokoj, alie sciata kiel 32 bitoj. 712 00:33:38,195 --> 00:33:41,320 Kio signifas kio estas la plej granda ebla numeron ni povas reprezenti kun int 713 00:33:41,320 --> 00:33:41,820 ŝajne? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Kun miliardo. 716 00:33:45,050 --> 00:33:46,760 Do estas kvar miliardoj donu aŭ preni. 717 00:33:46,760 --> 00:33:49,840 2 por la 32th potenco, se ni supozi neniun negativaj nombroj 718 00:33:49,840 --> 00:33:52,530 kaj ĝuste uzi ĉiujn pozitivajn nombroj, estas kvar miliardoj 719 00:33:52,530 --> 00:33:53,730 doni aŭ preni ebloj. 720 00:33:53,730 --> 00:33:57,890 A kaleŝego, dume, estas malsama tipo de datumtipo en C. Ankoraŭ numeron, 721 00:33:57,890 --> 00:33:58,990 sed estas reela nombro. 722 00:33:58,990 --> 00:34:00,660 Io kun dekuma punkto. 723 00:34:00,660 --> 00:34:03,000 Kaj ĝi rezultas ke C ankaŭ uzas kvar bajtoj 724 00:34:03,000 --> 00:34:05,340 reprezenti glitpunktaj valoroj. 725 00:34:05,340 --> 00:34:09,420 >> Bedaŭrinde kiom flotante punkto valoroj estas en la mondo? 726 00:34:09,420 --> 00:34:11,582 Kiom reelaj nombroj ekzistas? 727 00:34:11,582 --> 00:34:13,540 Estas malfinia nombro, kaj por ke afero 728 00:34:13,540 --> 00:34:15,164 ekzistas malfinia nombro de entjeroj. 729 00:34:15,164 --> 00:34:18,070 Do ni estas jam ia fosi nin truon tie. 730 00:34:18,070 --> 00:34:21,780 Per ŝajne computers-- ĉe Almenaŭ programoj skribitaj en C sur them-- 731 00:34:21,780 --> 00:34:24,110 povas nur rakonti kiel alta kiel kvar miliardoj doni aŭ preni, 732 00:34:24,110 --> 00:34:26,260 kaj glitpunktaj valoroj povas nur ŝajne 733 00:34:26,260 --> 00:34:28,330 havas iu finia kvanto de precizeco. 734 00:34:28,330 --> 00:34:30,810 Nur tiom da ciferoj post ilia dekuma punkto. 735 00:34:30,810 --> 00:34:32,822 >> Ĉar, kompreneble, se vi nur havas 32 bitojn, 736 00:34:32,822 --> 00:34:36,030 Mi ne scias, kiel ni tuj iru sur reprezentas realan numbers-- probable 737 00:34:36,030 --> 00:34:37,409 kun malsamaj tipoj de ŝablonoj. 738 00:34:37,409 --> 00:34:40,030 Sed estas certe finia nombro de tiaj ŝablonoj, 739 00:34:40,030 --> 00:34:41,830 do tie ankaŭ, tio estas problema. 740 00:34:41,830 --> 00:34:43,710 >> Nun ni povas eviti la problemon iomete. 741 00:34:43,710 --> 00:34:45,710 Se vi ne uzas kaleŝego, Vi povus uzi duoblan 742 00:34:45,710 --> 00:34:50,230 en C, kiu donas al vi ok bajtoj, kiuj Estas vojo pli eblaj ŝablonoj de nuloj 743 00:34:50,230 --> 00:34:50,730 kaj karaj. 744 00:34:50,730 --> 00:34:55,199 Sed estas ankoraŭ finita, kiu tuj esti problema, se vi skribos programaro 745 00:34:55,199 --> 00:34:57,670 por grafikaĵoj aŭ por kaprico matematikajn formulojn. 746 00:34:57,670 --> 00:35:00,410 Do eble vi efektive volas kalkuli ĝis pli grandaj ol tio. 747 00:35:00,410 --> 00:35:05,640 Longa long-- stulte named-- Estas ankaŭ ok bajtoj, aŭ 64 bitoj, 748 00:35:05,640 --> 00:35:10,260 kaj tio estas duoble longaj kiel int, kaj tio por longa entjera valoro. 749 00:35:10,260 --> 00:35:15,655 >> Amuza fact-- se int estas kvar bajtoj, kiom longe estas longa en C tipe? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Ankaŭ kvar bajtoj, sed longaj ok bajtoj, 752 00:35:21,560 --> 00:35:23,050 kaj tio estas pro historiaj kialoj. 753 00:35:23,050 --> 00:35:26,450 >> Sed la takeaway nun Estas ĝuste tiu datumo havas 754 00:35:26,450 --> 00:35:29,625 esti reprezentita en computer-- tio fizika mekanismo kun elektro, 755 00:35:29,625 --> 00:35:32,190 ĝi estas ĝenerale stiras nulojn kaj ones-- 756 00:35:32,190 --> 00:35:34,320 per finia kvanto de precizeco. 757 00:35:34,320 --> 00:35:35,620 Do kio estas la problemo tiam? 758 00:35:35,620 --> 00:35:37,480 >> Bone estas problemo de entjero overflow. 759 00:35:37,480 --> 00:35:39,780 Ne nur en C, sed en komputiloj gxenerale. 760 00:35:39,780 --> 00:35:42,590 Ekzemple, se tiu estas bajto valoras bit-- 761 00:35:42,590 --> 00:35:45,120 do se tiu estas ok bit-- ĉiuj el kiuj estas la nombro unu. 762 00:35:45,120 --> 00:35:47,300 Kio nombro estas tiu reprezentas se ni supozas 763 00:35:47,300 --> 00:35:50,730 ĝi estas ĉiuj pozitivaj valoroj en duuma? 764 00:35:50,730 --> 00:35:54,410 >> 255, kaj ĝi ne estas 256, pro nulo estas la plej malalta nombro. 765 00:35:54,410 --> 00:35:56,760 Do 255 estas la plej alta unu, sed la problemo 766 00:35:56,760 --> 00:36:00,330 ĝi supozas ke mi volus pliigo tiu variablo kiu 767 00:36:00,330 --> 00:36:04,030 uzas ok bitoj entute se mi volas pliigo ĝin. 768 00:36:04,030 --> 00:36:07,160 >> Nu, kiam mi aldonu unu por ĉiu de ĉi tiuj aĵoj, 769 00:36:07,160 --> 00:36:10,500 Vi povas eble imagi visually-- simple kiel portanta la uzanta decimals-- 770 00:36:10,500 --> 00:36:12,300 io tuj rapidos maldekstren. 771 00:36:12,300 --> 00:36:15,590 Kaj efektive, se mi aldonas la numeron al tio, kio okazas en duuma 772 00:36:15,590 --> 00:36:17,670 estas ke ĝi superfluas reen al nulo. 773 00:36:17,670 --> 00:36:21,730 >> Do se vi nur use-- ne int, sed sola bajto kalkuli entjeroj 774 00:36:21,730 --> 00:36:27,170 en programo, per default-- Kiam vi atingos 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 venos post 255, kiu verŝajne estas ne kio 776 00:36:32,710 --> 00:36:34,790 uzanto tuj atendus. 777 00:36:34,790 --> 00:36:39,620 >> Nun dume en glitpunkta mondo, Vi ankaŭ havas similan problemon. 778 00:36:39,620 --> 00:36:42,670 Ne tiel kun la plej granda number-- kvankam tio estas ankoraŭ afero. 779 00:36:42,670 --> 00:36:45,360 Sed kun la kvanto de precizeco ke vi povas reprezenti. 780 00:36:45,360 --> 00:36:49,490 Do ni rigardu la ekzemplo jen ankaŭ de la hodiaŭa fonto code-- 781 00:36:49,490 --> 00:36:52,070 flosi-0.c. 782 00:36:52,070 --> 00:36:54,280 >> Kaj rimarki estas súper simpla programo kiu 783 00:36:54,280 --> 00:36:56,580 devus ŝajne presi kio valoro? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Kion vi Wager tiu tuj presi kvankam ekzistas iom de nova sintakso 786 00:37:04,110 --> 00:37:05,540 tien? 787 00:37:05,540 --> 00:37:06,700 Do espereble 0.1. 788 00:37:06,700 --> 00:37:10,000 Do la ekvivalento de unu-deka ĉar mi faras 1 dividita per 10. 789 00:37:10,000 --> 00:37:12,430 Mi stokante la respondo en variablo nomis f. 790 00:37:12,430 --> 00:37:15,850 Tiu variablo estas de tipo float, kiu estas ŝlosilvorto Mi nur proponis ekzistis. 791 00:37:15,850 --> 00:37:18,910 >> Ni ne vidis ĉi tion antaŭe, sed tio estas speco de neta vojo en printf 792 00:37:18,910 --> 00:37:22,110 specifi kiom ciferoj vin volas vidi post dekuma punkto. 793 00:37:22,110 --> 00:37:25,020 Do tiu skribmaniero signifas nur ke tie estas lokokupilon. 794 00:37:25,020 --> 00:37:27,900 Estas por glitpunktaj valoro, kaj ho, per la vojo, 795 00:37:27,900 --> 00:37:31,389 montri ĝin kun la dekuma punkto cifero post la dekuma punkto. 796 00:37:31,389 --> 00:37:33,180 Do tio estas la nombro de signifaj ciferoj, 797 00:37:33,180 --> 00:37:34,650 tiel diri, ke vi eble volas. 798 00:37:34,650 --> 00:37:40,450 >> Do lasu min antaŭeniri kaj fari fari float-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 kaj ŝajne 1 dividita per 10 estas 0.0. 800 00:37:46,660 --> 00:37:47,760 Nun, kial estas tiu? 801 00:37:47,760 --> 00:37:51,380 >> Nu denove, la komputilo prenas mi laŭlitere, kaj mi skribis 1 802 00:37:51,380 --> 00:37:56,680 kaj mi skribis 10 kaj vi prenos diveno kio estas la supozita datumtipo por tiuj du 803 00:37:56,680 --> 00:37:58,440 valoroj? 804 00:37:58,440 --> 00:38:00,970 An int, estas teknike io iom malsama. 805 00:38:00,970 --> 00:38:04,150 Ĝi estas tipe longa, sed ĝi finfine integra valoro. 806 00:38:04,150 --> 00:38:06,030 Ne glitpunkta valoro. 807 00:38:06,030 --> 00:38:09,456 >> Kio estas ke se tiu estas int kaj tio estas int, 808 00:38:09,456 --> 00:38:11,830 la problemo estas ke la komputilo ne havas la kapablon 809 00:38:11,830 --> 00:38:13,680 eĉ stoki ke dekuma punkto. 810 00:38:13,680 --> 00:38:16,430 Do kiam vi faras 1 dividita per 10 uzante entjeroj 811 00:38:16,430 --> 00:38:20,950 por ambaŭ la numeratoro kaj la denominatoro, la respondo devus esti 0.1. 812 00:38:20,950 --> 00:38:24,930 Sed la computer-- ĉar tiuj estas integers-- 813 00:38:24,930 --> 00:38:27,430 ne scias kion fari kun la 0.1. 814 00:38:27,430 --> 00:38:30,010 >> Do kio estas klare faras? 815 00:38:30,010 --> 00:38:33,120 Ĝi simple ĵeti ĝin for, kaj kion mi vidas finfine 816 00:38:33,120 --> 00:38:38,830 estas 0.0 nur ĉar mi insistis ke printf montri al mi unu dekuma punkto. 817 00:38:38,830 --> 00:38:41,740 Sed la problemo estas ke se vi dividi entjero per entjero, 818 00:38:41,740 --> 00:38:44,347 Vi get-- per difino de C-- entjero. 819 00:38:44,347 --> 00:38:46,680 Kaj ĝi ne faros io agrabla kaj conveniently 820 00:38:46,680 --> 00:38:49,040 kiel ronda ĝi ĝis la proksima supren aŭ malsupren. 821 00:38:49,040 --> 00:38:51,860 Ĝi okazas detranĉi ĉio post la dekuma. 822 00:38:51,860 --> 00:38:54,030 >> Do nur intuicie, kio estas probable embaraso? 823 00:38:54,030 --> 00:38:55,351 Kio estas la plej simpla riparas ĉi tie? 824 00:38:55,351 --> 00:38:55,850 Yeah? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Ĝuste. 827 00:39:01,100 --> 00:39:04,200 Kial ni ne simple trakti tiujn kiel glitpunktaj valoroj efike 828 00:39:04,200 --> 00:39:05,860 igante ilin kaleŝegoj aŭ duobloj. 829 00:39:05,860 --> 00:39:10,500 Kaj nun se mi faros kaleŝegoj-0, aŭ ĉu mi kompilos kaleŝegoj-1, 830 00:39:10,500 --> 00:39:12,570 kiu estas identa al kio ĝuste proponitaj. 831 00:39:12,570 --> 00:39:16,400 Kaj nun mi faras kaleŝegoj-0, nun mi ricevos mian 0.1. 832 00:39:16,400 --> 00:39:17,234 >> Nun tiu estas mirinda. 833 00:39:17,234 --> 00:39:19,441 Sed nun mi tuj faros io iom malsama. 834 00:39:19,441 --> 00:39:22,280 Mi scivolas kio estas vere irante sur sub la kapuĉo, 835 00:39:22,280 --> 00:39:26,050 kaj mi tuj presi ĉi el 28 dekumaj lokoj. 836 00:39:26,050 --> 00:39:29,730 Mi volas vere vidos 0.1000-- oni infinite-- 837 00:39:29,730 --> 00:39:32,710 [Inaudible] 27 nuloj post 0.1. 838 00:39:32,710 --> 00:39:34,740 >> Nu ni vidu se tio kion mi ja akiras. 839 00:39:34,740 --> 00:39:39,430 Faru kaleŝegoj-0 sama dosiero. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Ni zomi en la drama respondon. 842 00:39:44,380 --> 00:39:49,980 Ĉio ĉi momento, vi estis pensante 1 dividita per 10 estas 10%, aŭ 0.1. 843 00:39:49,980 --> 00:39:50,810 Ĝi ne estas. 844 00:39:50,810 --> 00:39:53,210 Almenaŭ tiel for kiel la komputilan koncernita. 845 00:39:53,210 --> 00:39:57,060 >> Nun why-- okej, tio estas kompleta mensogo 1 dividita per 10 estas 0.1. 846 00:39:57,060 --> 00:39:59,710 Sed why-- kiu ne la takeaway hodiaŭ. 847 00:39:59,710 --> 00:40:04,010 Do kial la komputilo kredas, kontraste kun ĉiuj el ni en la ĉambron, 848 00:40:04,010 --> 00:40:06,870 ke 1 dividita per 10 estas fakte tiu freneza valoron? 849 00:40:06,870 --> 00:40:10,620 Kio estas la komputilo faras ŝajne? 850 00:40:10,620 --> 00:40:12,490 Kio estas tio? 851 00:40:12,490 --> 00:40:13,785 >> Tio ne dronigos, por se. 852 00:40:13,785 --> 00:40:15,910 Overflow estas tipe kiam vi envolver ĉirkaŭ valoro. 853 00:40:15,910 --> 00:40:18,970 Estas ĉi tiu temo de imprecision en Reela valoro 854 00:40:18,970 --> 00:40:22,220 kie vi havas nur 32 aŭ eble eĉ 64 bitoj. 855 00:40:22,220 --> 00:40:25,230 Sed se estas malfinia numeron de reelaj numbers-- 856 00:40:25,230 --> 00:40:27,940 nombroj kun decimalaj punktoj kaj ciferoj thereafter-- asekuro 857 00:40:27,940 --> 00:40:29,380 vi ne povas reprezenti ĉiujn. 858 00:40:29,380 --> 00:40:32,870 Do la komputilo donita ni la proksima partio 859 00:40:32,870 --> 00:40:37,090 al valoro povas reprezenti uzante tiu multaj bitoj por la valoro mi vere volas, 860 00:40:37,090 --> 00:40:38,690 kio estas 0.1. 861 00:40:38,690 --> 00:40:40,685 >> Bedaŭrinde, se vi komenci fari math, aŭ vi 862 00:40:40,685 --> 00:40:44,360 komenci engaĝante tiuj specoj de flosanta punkto valoroj en gravaj programs-- 863 00:40:44,360 --> 00:40:46,770 financa programaro, milita software-- ion 864 00:40:46,770 --> 00:40:49,090 kie percepto verŝajne bela grava. 865 00:40:49,090 --> 00:40:51,520 Kaj vi komencos aldoni nombroj kiel tiu, kaj komenco 866 00:40:51,520 --> 00:40:54,050 kurante ke programaro kun vere granda enigoj 867 00:40:54,050 --> 00:40:56,890 aŭ por multaj horoj aŭ multe el tempo aŭ multe da jaroj, 868 00:40:56,890 --> 00:41:01,060 tiuj eta erarojn certe povas aldoni super tempo. 869 00:41:01,060 --> 00:41:04,252 >> Nun kiel flanken, se vi iam vidita Superman 3 aŭ Office Space 870 00:41:04,252 --> 00:41:05,960 kaj vi eble memoras kiom tiuj infanoj sxtelis 871 00:41:05,960 --> 00:41:08,668 multan monon de siaj komputiloj uzante glitpunktaj valoroj 872 00:41:08,668 --> 00:41:11,290 kaj aldonante la malgrandan forĵetaĵojn, atendu ke movie 873 00:41:11,290 --> 00:41:12,390 nun faras pli sentita. 874 00:41:12,390 --> 00:41:14,930 Jen kion ili aludante en tiu filmo. 875 00:41:14,930 --> 00:41:16,710 La fakto ke la plimulto kompanioj ne ekrigardus 876 00:41:16,710 --> 00:41:18,600 post certa nombro el dekumaj lokoj, 877 00:41:18,600 --> 00:41:20,009 sed tiuj estas frakcioj de cendoj. 878 00:41:20,009 --> 00:41:22,550 Do vi komencas aldonante ilin, vi komencos fari multan monon 879 00:41:22,550 --> 00:41:23,424 en via banka konto. 880 00:41:23,424 --> 00:41:25,160 Do jen Office Space klarigis. 881 00:41:25,160 --> 00:41:28,220 >> Nun bedaŭrinde tie Office Space tie 882 00:41:28,220 --> 00:41:31,794 kelkaj laŭleĝe tumulti kaj signifaj trafoj 883 00:41:31,794 --> 00:41:33,710 de tiuj specoj de suba dezajno decidoj, 884 00:41:33,710 --> 00:41:35,990 kaj ja unu el la kialoj ni uzas C en la kurso 885 00:41:35,990 --> 00:41:39,640 Estas tiel, ke vi vere havas tiun teron ĝis kompreno de kiel komputiloj labori, 886 00:41:39,640 --> 00:41:42,440 kiel programaro funkcias kaj ne prenu ion por sentado. 887 00:41:42,440 --> 00:41:45,820 >> Kaj ja bedaŭrinde eĉ kun ke fundamenta kompreno, 888 00:41:45,820 --> 00:41:47,370 ni homoj faras erarojn. 889 00:41:47,370 --> 00:41:51,310 Kaj kion mi pensis mi dividas estas ĉi ok minutoj de vídeo tie prenita 890 00:41:51,310 --> 00:41:56,980 el Modernaj Mirindaĵoj epizodo, kiu estas eduka programo en kiel aferoj funkcias 891 00:41:56,980 --> 00:42:00,370 kiu pentras du bildoj de kiam nepropra uzo 892 00:42:00,370 --> 00:42:02,540 kaj komprenemo glitpunktaj valoroj 893 00:42:02,540 --> 00:42:05,610 kondukis al iu signifa bedaŭrinda rezultojn. 894 00:42:05,610 --> 00:42:06,363 Ni rigardu. 895 00:42:06,363 --> 00:42:07,029 [VIDEO Playback] 896 00:42:07,029 --> 00:42:11,290 -Ni Nun reveni al "Inĝenierio Katastrofoj "sur Modernaj Mirindaĵoj. 897 00:42:11,290 --> 00:42:12,940 Komputiloj. 898 00:42:12,940 --> 00:42:15,580 Ni cxiuj venu al akcepti la ofte frustrante problemoj 899 00:42:15,580 --> 00:42:20,960 alvenis kun them-- cimoj, virusoj, kaj programaro glitches-- por malgrandaj prezoj 900 00:42:20,960 --> 00:42:23,100 pagi por la komforto. 901 00:42:23,100 --> 00:42:27,770 Sed en alta teknologio kaj alta rapido milita kaj spaca programo aplikoj, 902 00:42:27,770 --> 00:42:32,780 la plej malgranda problemo povas glorata en katastrofo. 903 00:42:32,780 --> 00:42:38,880 >> La 4an de junio 1996, sciencistoj preparita ĵeti senpilotaj Ariane 5 raketo. 904 00:42:38,880 --> 00:42:41,190 Ĝi portis sciencaj satelitoj desegnita 905 00:42:41,190 --> 00:42:44,570 establi precize kiel la Tera magneta kampo interagas 906 00:42:44,570 --> 00:42:47,380 kun sunaj ventoj. 907 00:42:47,380 --> 00:42:50,580 La raketo estis konstruita por Eŭropa Spaca Agentejo, 908 00:42:50,580 --> 00:42:54,400 kaj levis gxin el lia facileco sur la marbordo de Franca Gviano. 909 00:42:54,400 --> 00:42:57,520 >> Aýdis pri 37 sekundoj en la flugo, ili unue 910 00:42:57,520 --> 00:42:59,070 rimarkis ion tuj erara. 911 00:42:59,070 --> 00:43:02,240 Ke la toberas estis swiveling laŭ maniero vere ne devus. 912 00:43:02,240 --> 00:43:06,550 Ĉirkaŭ 40 sekundoj en la flugo, klare la veturilo estis en mizero, 913 00:43:06,550 --> 00:43:08,820 kaj tio estas, kiam ili la decido detrui ĝin. 914 00:43:08,820 --> 00:43:12,370 La gamo sekureco oficiro, kun terura intestoj, premis la butonon 915 00:43:12,370 --> 00:43:18,030 kaj blovis la raketo antaŭ ĝi povis fariĝis danĝero por publika sekureco. 916 00:43:18,030 --> 00:43:21,010 >> -tio Estis la virgulino vojaĝo de la Ariane 5, 917 00:43:21,010 --> 00:43:23,920 kaj lia detruo prenis meti pro la difekto 918 00:43:23,920 --> 00:43:25,932 enigita en la raketo programaro. 919 00:43:25,932 --> 00:43:27,640 -la Problemo en la Ariane estis ke 920 00:43:27,640 --> 00:43:30,500 estis numero kiu postulas 64 bitojn por esprimi, 921 00:43:30,500 --> 00:43:33,560 kaj ili volis konverti tio al 16-bita nombro. 922 00:43:33,560 --> 00:43:36,820 Ili supozis ke la nombro neniam tuj estos tre granda. 923 00:43:36,820 --> 00:43:40,940 Ke plejparto de tiuj ciferoj en la 64-bita nombro estis nuloj. 924 00:43:40,940 --> 00:43:42,450 Ili estis erara. 925 00:43:42,450 --> 00:43:45,000 >> -la Nekapablo de unu programaro akcepti 926 00:43:45,000 --> 00:43:49,460 la tipo de numero generita per alia estis ĉe la radiko de la malsukceso. 927 00:43:49,460 --> 00:43:54,260 Programaro evoluo fariĝis tre peniga parto de nova teknologio. 928 00:43:54,260 --> 00:43:57,060 La Ariane 4 raketo havis estis tre sukcesa. 929 00:43:57,060 --> 00:44:01,600 Tiom de la programaro kreita por Ĝi ankaŭ estis uzita en la Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -la Baza problemo estis ke la Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Estis faster-- akcelis rapidan kaj La programaro ne konsistigis tion. 932 00:44:11,200 --> 00:44:14,910 >> -la Detruo de la raketo Estis grandega financa katastrofo. 933 00:44:14,910 --> 00:44:18,630 Ĉio pro minuto programaro eraro. 934 00:44:18,630 --> 00:44:21,160 Sed tio ne estis la unua tempo datumoj konvertiĝo problemoj 935 00:44:21,160 --> 00:44:24,770 estis plagado moderna raketo teknologio. 936 00:44:24,770 --> 00:44:28,020 >> -in 1991 kun la komenco de la Golf-Milito 937 00:44:28,020 --> 00:44:30,540 la Patriot misilon spertis similan specon 938 00:44:30,540 --> 00:44:32,465 de nombro konvertiĝo problemon. 939 00:44:32,465 --> 00:44:36,760 Kaj kiel rezulto 28 people-- 28 Usona soldiers-- estis mortigitaj, 940 00:44:36,760 --> 00:44:39,010 kaj proksimume cent aliaj vunditaj. 941 00:44:39,010 --> 00:44:42,830 Kiam la Patriot, kiuj estis supozitaj protekti kontraŭ alvenantaj Scuds, 942 00:44:42,830 --> 00:44:45,780 malsukcesa pafi misilon. 943 00:44:45,780 --> 00:44:51,610 >> -When Irako invadis Kuvajton kaj Ameriko ĵetis Desert Storm en frua 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot misilon piloj estis deplojitaj protekti Saŭda Arabio kaj Israelo 945 00:44:55,720 --> 00:44:59,180 el iraka Scud misiloj atakoj. 946 00:44:59,180 --> 00:45:03,080 La Patriot estas usona duona atingo surfaco-aero sistemo 947 00:45:03,080 --> 00:45:06,530 fabrikita de la Raytheon kompanio. 948 00:45:06,530 --> 00:45:09,500 >> -la Grandeco de la Patriot interceptor itself-- 949 00:45:09,500 --> 00:45:14,705 temas pri proksimume 20 metrojn longa, kaj ĝi pezas proksimume 2,000 funtojn. 950 00:45:14,705 --> 00:45:19,090 Kaj portas kapon de ĉirkaŭ, Mi kredas ke estas malglate 150 funtoj. 951 00:45:19,090 --> 00:45:23,880 Kaj la kapo sin trovas alta eksploda, kiu 952 00:45:23,880 --> 00:45:26,700 havas fragmentojn ĉirkaŭe. 953 00:45:26,700 --> 00:45:31,630 Do la carcasa de la kapo estas desegnita por agi kiel Buckshot. 954 00:45:31,630 --> 00:45:34,040 >> -la Misiloj estas plenumataj kvar por ujo, 955 00:45:34,040 --> 00:45:37,170 kaj estas transportitaj per duone tráiler. 956 00:45:37,170 --> 00:45:44,880 >> -la Patriot antimisiles sistemo superas almenaŭ 20 jaroj nun. 957 00:45:44,880 --> 00:45:48,380 Ĝi estis origine desegnita kiel aera arierulo misilon 958 00:45:48,380 --> 00:45:50,810 pafi malsupren aviadiloj malamikoj. 959 00:45:50,810 --> 00:45:54,410 En la unua Golfa Milito kiam tiu milito ŝaltis, 960 00:45:54,410 --> 00:45:59,650 Armeo volis uzi ĝin malkonstrui Scuds, ne aviadilojn. 961 00:45:59,650 --> 00:46:03,580 La iraka Aera Forto estis Ne tiom multe de problemo, 962 00:46:03,580 --> 00:46:06,590 sed la Armeo estis maltrankviligita Scuds. 963 00:46:06,590 --> 00:46:10,120 Kaj tiel ili provis ĝisdatigi la Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Malamiko misilon vojaĝante al Mach 5 965 00:46:12,740 --> 00:46:15,670 tuj estos defianta sufiĉas. 966 00:46:15,670 --> 00:46:18,440 Sed kiam la Patriot Estis enkuris servo, 967 00:46:18,440 --> 00:46:22,580 la Armeo ne konscias pri irakan modifo ke 968 00:46:22,580 --> 00:46:25,880 faris iliaj scuds preskaŭ neeble ĝin. 969 00:46:25,880 --> 00:46:30,690 >> -Kio Okazis estas la Scuds ke estis eniranta estis malstabilaj. 970 00:46:30,690 --> 00:46:32,000 Ili estis malfirma. 971 00:46:32,000 --> 00:46:37,210 La kialo por tio estis la Iraqis-- por atingi 600 kilometrojn el 972 00:46:37,210 --> 00:46:41,680 de 300-kilometro gamo missile-- prenis pezon el la antaŭa kapo, 973 00:46:41,680 --> 00:46:43,340 kaj ili faris la kapo fajrilo. 974 00:46:43,340 --> 00:46:48,490 Do nun la Patriot La provas veni ĉe la Scud kaj plejparto de la time-- 975 00:46:48,490 --> 00:46:52,880 la grandega plimulto de la time-- estus nur flugas per la Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Once La Patriot sistemo operatoroj realigis la Patriot maltrafis lian celon, 977 00:46:57,120 --> 00:47:01,630 ili detonado la Patriot la kapo por eviti eblajn viktimojn se 978 00:47:01,630 --> 00:47:04,440 estis permesita fali al la grundo. 979 00:47:04,440 --> 00:47:08,700 >> -Tio Estis kio plej homoj vidis kiel grandaj buloj de fajro en la ĉielo, 980 00:47:08,700 --> 00:47:14,180 kaj miskomprenita kiel interkaptas de Scud kapoj. 981 00:47:14,180 --> 00:47:18,020 >> -Although Nokte ĉieloj, Patriots ŝajnis esti sukcese detruas 982 00:47:18,020 --> 00:47:23,280 Scuds, ĉe Dhahran povus esti neniu eraro pri lia agado. 983 00:47:23,280 --> 00:47:27,930 Tie la Patriot radaro sistemo miskalkulis venonta Scud 984 00:47:27,930 --> 00:47:30,260 kaj neniam ĵetis pro por programaro difekto. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Estis la israelanoj kiuj unue malkovris ke la pli longa la sistemo estis, 987 00:47:38,880 --> 00:47:41,130 la plej granda tempo discrepancia fariĝis. 988 00:47:41,130 --> 00:47:44,770 Pro horloĝo enigita en la sistemo de komputilo. 989 00:47:44,770 --> 00:47:48,190 >> -About Du semajnoj antaŭe la tragedio en Dhahran, 990 00:47:48,190 --> 00:47:50,720 la israelanoj raportoj la Fako de Arierulo 991 00:47:50,720 --> 00:47:52,410 ke la sistemo estis perdi tempon. 992 00:47:52,410 --> 00:47:54,410 Post ĉirkaŭ ok horojn de kurado, ili rimarkis 993 00:47:54,410 --> 00:47:57,690 ke la sistemo igas rimarkinde malpli preciza. 994 00:47:57,690 --> 00:48:01,850 La Fako de Arierulo Respondis dirante ĉiuj Patriot piloj 995 00:48:01,850 --> 00:48:04,800 por ne lasi la sistemoj dum longa tempo. 996 00:48:04,800 --> 00:48:06,980 Ili neniam diris kio longe estis. 997 00:48:06,980 --> 00:48:09,140 8 horoj, 10 horoj, mil horoj. 998 00:48:09,140 --> 00:48:11,300 Neniu sciis. 999 00:48:11,300 --> 00:48:13,320 >> -la Patriot pilo postenigitaj ĉe la kazerno 1000 00:48:13,320 --> 00:48:18,310 ĉe Dhahran kaj lia misa interna horloĝo estis en pli ol 100 horoj 1001 00:48:18,310 --> 00:48:21,520 sur la nokto de la 25 de februaro. 1002 00:48:21,520 --> 00:48:25,792 >> -ĝi Spurita tempon korekteco de ĉirkaŭ dekono de sekundo. 1003 00:48:25,792 --> 00:48:27,950 Nun dekono de sekundo Estas interesa nombro 1004 00:48:27,950 --> 00:48:31,850 ĉar oni ne povas esprimi en duuma ekzakte, kion 1005 00:48:31,850 --> 00:48:36,500 signifas ke ne povas esti esprimita akurate en ajna moderna cifereca komputilo. 1006 00:48:36,500 --> 00:48:41,070 Estas malfacile kredi, sed uzi tion kiel ekzemplon. 1007 00:48:41,070 --> 00:48:43,420 >> Ni prenu la numeron unu triono. 1008 00:48:43,420 --> 00:48:47,330 Triono ne povas esti esprimita en dekuma precize. 1009 00:48:47,330 --> 00:48:52,060 Unu triono estas 0,333 irante sur por malfinio. 1010 00:48:52,060 --> 00:48:56,420 Ne estas maniero por fari tion kun absoluta precizeco en dekuma. 1011 00:48:56,420 --> 00:48:59,530 Tio estas ĝuste la speco de problemo kiu okazis en la Patriot. 1012 00:48:59,530 --> 00:49:04,040 La pli longa la sistemo kuris, la malbona momento eraro fariĝis. 1013 00:49:04,040 --> 00:49:08,840 >> -After 100 horoj da operacio, la eraro en la tempo estis nur proksimume triono 1014 00:49:08,840 --> 00:49:10,440 de sekundo. 1015 00:49:10,440 --> 00:49:14,150 Sed en terminoj de celado a misilon vojaĝante al Mach 5 1016 00:49:14,150 --> 00:49:18,560 ĝi rezultis en sekvado eraro de super 600 metroj. 1017 00:49:18,560 --> 00:49:21,870 Estus fatala eraro cxar la soldatoj ĉe Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> -Kio Okazis estas Scud ĵeto estis detektitaj de frua averto satelitoj, 1019 00:49:28,455 --> 00:49:32,710 kaj ili sciis Scud alproksimigxas en lia ĝenerala direkto. 1020 00:49:32,710 --> 00:49:35,150 Ili ne sciis, kie ŝi venas. 1021 00:49:35,150 --> 00:49:38,210 Nun estis ĝis la radaro komponanto de la Patriot sistemo 1022 00:49:38,210 --> 00:49:43,150 defendas Dhahran lokalizi kaj observas aŭtoveturejo de la venonta malamiko misilon. 1023 00:49:43,150 --> 00:49:44,561 >> -la Radaro estis tre inteligenta. 1024 00:49:44,561 --> 00:49:46,560 Estus vere spuri la pozicio de la Scud 1025 00:49:46,560 --> 00:49:48,930 kaj tiam antaŭdiri kie ĝi probable estus 1026 00:49:48,930 --> 00:49:51,380 la sekva fojo la radaron sendis premas el. 1027 00:49:51,380 --> 00:49:53,040 Tio estis nomita la gamo pordego. 1028 00:49:53,040 --> 00:49:57,620 >> -Then Fojon la Patriot Decidas sufiĉa tempo havas 1029 00:49:57,620 --> 00:50:02,400 pasis reiri kaj kontroli la sekvantan situo por ĉi detektita objekto 1030 00:50:02,400 --> 00:50:03,550 ĝi superas. 1031 00:50:03,550 --> 00:50:07,820 Do kiam revenis al la malĝusta loko, ĝi tiam vidas neniun objekton. 1032 00:50:07,820 --> 00:50:10,360 Kaj decidas ke ne estis objekto. 1033 00:50:10,360 --> 00:50:13,630 Tio estis falsa detekto kaj ĝi delasas la aŭtoveturejo. 1034 00:50:13,630 --> 00:50:16,970 >> -la Venonta Scud malaperis el la radaro ekrano, 1035 00:50:16,970 --> 00:50:20,200 kaj duaj poste, brufermis en la fortikajxon. 1036 00:50:20,200 --> 00:50:22,570 La Scud mortigis 28. 1037 00:50:22,570 --> 00:50:26,110 Ĝi estis la lasta ekbriliĝis dum la unua Golfa Milito. 1038 00:50:26,110 --> 00:50:31,920 Tragike, la ĝisdatigita programaro alvenis en la mateniĝo de la sekva tago. 1039 00:50:31,920 --> 00:50:34,870 La programaro difekto devis estis fiksita, fermo 1040 00:50:34,870 --> 00:50:39,150 unu ĉapitro en la tumulta historio de la Patriot misilon. 1041 00:50:39,150 --> 00:50:40,030 >> [FINO VIDEO Playback] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. Malan: Estas tio por CS50. 1043 00:50:41,488 --> 00:50:42,820 Ni vidos vin merkredon. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [MUZIKO Ludante] 1046 00:50:50,370 --> 00:54:23,446