1 00:00:00,000 --> 00:00:10,920 >> [MUZIKO ludi] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J Malan: Bone, bonvenigas reen al CS50. 3 00:00:14,680 --> 00:00:16,500 Ĉi tiu estas la komenco de semajno du. 4 00:00:16,500 --> 00:00:18,940 Vorto de unu el niaj amikoj sur campus - 5 00:00:18,940 --> 00:00:22,620 se vi interesiĝas, eble, ĉu nun aŭ en iu futura termino 6 00:00:22,620 --> 00:00:25,670 inkluzive, unufoje pli komforta, instruado meza lernejo lernantoj iom 7 00:00:25,670 --> 00:00:27,680 ion pri komputiko, do kapo por ke URL. 8 00:00:27,680 --> 00:00:32,360 Ili estas en aparta bezono nun el instruistoj, aparte se vi havas 9 00:00:32,360 --> 00:00:34,700 havis iun ekspozicion al komputiko. 10 00:00:34,700 --> 00:00:38,060 >> Do memoru ke lasta fojo, ni enkondukis kelkaj datumtipoj en C, kaj 11 00:00:38,060 --> 00:00:40,590 vi eble jam komencis ricevi manoj malpuraj kun ĉi tiuj ĝis nun 12 00:00:40,590 --> 00:00:41,940 en problemo starigis unu. 13 00:00:41,940 --> 00:00:43,230 Kaj ni havis char. 14 00:00:43,230 --> 00:00:49,100 Do iom teknika terminoj, kion Estas char kiel vi scias ĝin hodiaŭ? 15 00:00:49,100 --> 00:00:51,050 >> Do ĝi estas karaktero, sed ni esti pli preciza nun. 16 00:00:51,050 --> 00:00:53,735 Kion ni celas per karaktero aŭ individuaj char? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Ne-nombra karaktero - 19 00:00:59,500 --> 00:01:00,670 tial ne nepre. 20 00:01:00,670 --> 00:01:04,580 Rezultas, ke eĉ nombroj, eĉ interpunkcio kaj leteroj estas 21 00:01:04,580 --> 00:01:06,980 reprezentitaj kun ĉi datumoj tajpi konata kiel char. 22 00:01:06,980 --> 00:01:09,440 Do ĝi ne estas nepre alfabeta. 23 00:01:09,440 --> 00:01:11,100 Jes? 24 00:01:11,100 --> 00:01:12,275 >> Do ĝi estas Askio karaktero. 25 00:01:12,275 --> 00:01:15,510 Do, se vi opinias reen al semajno nulo, kiam ni havis nian bajto de volontuloj 26 00:01:15,510 --> 00:01:19,150 venu, kaj ĉu teni siajn manojn supren aŭ ne ĉiuj, ili reprezentis bitoj. 27 00:01:19,150 --> 00:01:22,450 Sed kolektive kiel grupo de ok, ili reprezentis bajto. 28 00:01:22,450 --> 00:01:26,030 Kaj ni enkondukis la nocion de Askio en tiu prelego, kiu simple estas 29 00:01:26,030 --> 00:01:28,170 surĵeto inter numeroj kaj literoj. 30 00:01:28,170 --> 00:01:32,010 Kaj ASCII uzojn, kiel tiuj homoj implicita, ok bitoj 31 00:01:32,010 --> 00:01:33,660 por reprezenti karaktero. 32 00:01:33,660 --> 00:01:36,890 >> Do laŭe, se ok bitoj povas ĉiu prenos sur unu el du valoroj - 33 00:01:36,890 --> 00:01:38,010 nulo aŭ unu - 34 00:01:38,010 --> 00:01:40,280 tio signifas estis du ebloj por tiu persono - 35 00:01:40,280 --> 00:01:41,230 nulo aŭ unu - 36 00:01:41,230 --> 00:01:44,070 du por tiu persono, du por tiu persono, du por ĉi tiu. 37 00:01:44,070 --> 00:01:47,450 Do tuta de du fojojn du fojoj du fojojn du fojojn du - 38 00:01:47,450 --> 00:01:49,700 tial du la oka en entute. 39 00:01:49,700 --> 00:01:54,320 Do tie estas tuteca nombro de gravuloj 256 ebla ke vi povas 40 00:01:54,320 --> 00:01:55,750 reprezenti kun ok bitoj. 41 00:01:55,750 --> 00:01:59,210 >> Nun, tiuj el vi, kiuj parolas Azia lingvoj sciu, ke ekzistas pli 42 00:01:59,210 --> 00:02:02,620 karakteroj en la mondo ol nur Kiel kaj Bs kaj Cs kaj Ds. 43 00:02:02,620 --> 00:02:06,130 Kaj efektive, ASCII ne suficxos, multe da lingvoj de la mondo. 44 00:02:06,130 --> 00:02:07,760 Sed pli sur tiu alia tempo. 45 00:02:07,760 --> 00:02:11,240 Por nun, sciu ke en C, se vi volas por reprezenti leteron, peco de 46 00:02:11,240 --> 00:02:15,780 interpunkcio, aŭ simple ion karaktero en la naturo, ni uzas char. 47 00:02:15,780 --> 00:02:18,240 Kaj estas unu bajto aŭ ok bitoj. 48 00:02:18,240 --> 00:02:19,690 >> Kion pri int? 49 00:02:19,690 --> 00:02:20,780 Nu, oni int estas entjero. 50 00:02:20,780 --> 00:02:23,175 Kiom da bitoj, se vi memoras, Estis entjero tipe? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Ĉiu revokon? 53 00:02:27,512 --> 00:02:29,600 Do estas tipe 32. 54 00:02:29,600 --> 00:02:32,120 Ĝi fakte dependas de la komputilo ke vi uzas. 55 00:02:32,120 --> 00:02:35,770 Sed en la aparato, kaj en multaj komputiloj, estas 32 bitoj aŭ kvar 56 00:02:35,770 --> 00:02:37,140 bajtoj - ok fojoj kvar. 57 00:02:37,140 --> 00:02:39,790 Kaj ints estas nur uzita por stoki nombroj, aŭ negativa, 58 00:02:39,790 --> 00:02:41,610 pozitiva, aŭ nulo. 59 00:02:41,610 --> 00:02:45,250 >> Kaj se vi havas 32 bitojn kaj vi nur zorgo pri pozitivaj nombroj, povas 60 00:02:45,250 --> 00:02:48,960 iu stadio kiom ebla entjeroj a komputilo povas reprezenti de 61 00:02:48,960 --> 00:02:51,820 nulo plu supren? 62 00:02:51,820 --> 00:02:56,130 Do ĝi estus du al la 32, kiu estas proksimume kvar mil milionoj. 63 00:02:56,130 --> 00:02:59,720 Do tiuj potencoj de du tuj estos _recurring_ temoj en komputiko. 64 00:02:59,720 --> 00:03:03,930 Kiel ni vidos, ili estas tute konvena labori kun eĉ se ĝi ne estas sufiĉe 65 00:03:03,930 --> 00:03:05,790 facile fari la matematiko en ies kapon. 66 00:03:05,790 --> 00:03:07,000 >> Do ni diru proksimume kvar mil milionoj. 67 00:03:07,000 --> 00:03:08,620 Nun, longa tempo - 68 00:03:08,620 --> 00:03:09,770 vi povas speco de konjekton. 69 00:03:09,770 --> 00:03:10,480 Ĝi estas pli longa ol int. 70 00:03:10,480 --> 00:03:12,440 Kiom da bitoj? 71 00:03:12,440 --> 00:03:14,250 Do 64 bitoj aŭ ok bajtoj. 72 00:03:14,250 --> 00:03:17,480 Tiu signifas nur ke oni povas reprezenti eĉ pli grandaj nombroj, pli granda pozitiva aŭ 73 00:03:17,480 --> 00:03:19,160 pli granda negativaj nombroj. 74 00:03:19,160 --> 00:03:20,060 >> Kaj kion pri flosi? 75 00:03:20,060 --> 00:03:22,260 Tio estas glitpunktaj valoro de 32 bitoj. 76 00:03:22,260 --> 00:03:25,180 Ĉi tio estas nur reela nombro, iu kun dekuma punkto. 77 00:03:25,180 --> 00:03:30,100 Sed se vi anstataŭ bezonas pli da lokoj post la dekuma punkto aŭ vi volas 78 00:03:30,100 --> 00:03:33,720 reprezenti pli granda nombro kun iuj frakcio post ĝi, vi povas uzi 79 00:03:33,720 --> 00:03:36,260 duobla, kiu estas 64 bitoj. 80 00:03:36,260 --> 00:03:38,240 >> Sed estas interesa takeaway tie. 81 00:03:38,240 --> 00:03:42,890 Do se ints estas limigitaj de 32 bitoj kaj eĉ longe sopiras estas limigitaj de 64 82 00:03:42,890 --> 00:03:46,180 bitoj, ke ia petegas la demando, kion se vi efektive volas rakonti 83 00:03:46,180 --> 00:03:48,790 pli alta ol 4 miliardoj por int? 84 00:03:48,790 --> 00:03:50,330 Nu, simple uzu longa longa. 85 00:03:50,330 --> 00:03:54,200 Sed kion se vi volas rakonti pli altaj ol du al la 64-a, donu aŭ preni? 86 00:03:54,200 --> 00:03:55,810 >> Nun, tio estas grandega nombro. 87 00:03:55,810 --> 00:03:59,250 Sed eventuale, vi povus reale zorgas pri tiuj specoj de valoroj, 88 00:03:59,250 --> 00:04:03,070 speciale se vi uzas datumbazon kaj komencas kolekti partoj kaj multaj 89 00:04:03,070 --> 00:04:06,190 kaj multe da datumoj kaj atribuante unika nombroj al ĉiu peco de tiu datumo. 90 00:04:06,190 --> 00:04:07,430 Do ni ia havas problemon. 91 00:04:07,430 --> 00:04:10,700 Kaj simile, kun flosanta punkto valoroj - flosas aŭ duobloj - 92 00:04:10,700 --> 00:04:14,290 se vi nur atingis finia nombro de bitoj, kiom da tutaj nombroj vi povis 93 00:04:14,290 --> 00:04:16,980 eble reprezentas? 94 00:04:16,980 --> 00:04:19,540 >> Nu, estas malpli klara, kiam vi engaĝi dekuma punkto. 95 00:04:19,540 --> 00:04:20,899 Sed estas certe finia. 96 00:04:20,899 --> 00:04:24,390 Se vi havas finia nombro de bitoj, finia nombro de homoj, finia 97 00:04:24,390 --> 00:04:27,350 numeron de ampoloj, verŝajne vi povas nur reprezentas finia nombro de 98 00:04:27,350 --> 00:04:28,510 glitpunktaj valoroj. 99 00:04:28,510 --> 00:04:33,170 Sed kiel multaj reelaj nombroj estas ilia en la mondo? 100 00:04:33,170 --> 00:04:33,680 Tie estas malfinia. 101 00:04:33,680 --> 00:04:37,280 Do jen speco de problemo ĉar ni ne havas malfinian kvanton de 102 00:04:37,280 --> 00:04:39,970 memoro aŭ RAM ene de niaj komputiloj. 103 00:04:39,970 --> 00:04:41,780 Do iuj defia aferoj povas okazi. 104 00:04:41,780 --> 00:04:43,900 >> Do ni iru antaŭen kaj provu por esprimi ĉi tie. 105 00:04:43,900 --> 00:04:46,240 Lasu min kaj malfermu gedit. 106 00:04:46,240 --> 00:04:50,360 Mi tuj iros antaŭen kaj konservi dosieron nomita "floats0.c" nur esti 107 00:04:50,360 --> 00:04:54,630 konsekvenca kun ekzemplo, kiu estas disponebla en linio, se vi ŝatus. 108 00:04:54,630 --> 00:04:58,080 Kaj mi tuj iros antaŭen kaj difinas jene - 109 00:04:58,080 --> 00:05:01,540 Mi tuj iros antaŭen kaj diru, int ĉefa malplena, kiel ni ofte faras. 110 00:05:01,540 --> 00:05:07,190 >> Kaj tiam en tiu programo, mi tuj deklaras min kaleŝego, do ĉirkaŭ 32 bitoj 111 00:05:07,190 --> 00:05:09,700 variablo nomis f, arbitre. 112 00:05:09,700 --> 00:05:13,910 Kaj poste mi iros por stoki en ĝi Mi ne scias, unu dekono, do 0,1. 113 00:05:13,910 --> 00:05:16,590 Do mi iros por esprimi ke kiel unu dividita per 10, kiu estas perfekte 114 00:05:16,590 --> 00:05:17,790 legitima en C. 115 00:05:17,790 --> 00:05:20,460 >> Kaj poste sur la dua linio, mi simple volas elprinti tiun valoron. 116 00:05:20,460 --> 00:05:22,950 Do memoru, ke ni povas uzi la familiara printf. 117 00:05:22,950 --> 00:05:25,420 Ni ne volas uzi% i por int. 118 00:05:25,420 --> 00:05:28,360 Ni volas uzi% f por kaleŝego. 119 00:05:28,360 --> 00:05:33,080 Kaj poste mi iros fari backslash n, proksime citaĵo, komo, f, punktokomo. 120 00:05:33,080 --> 00:05:34,400 >> Do jen mia programo. 121 00:05:34,400 --> 00:05:35,820 Ekzistas jam unu cimon. 122 00:05:35,820 --> 00:05:38,640 Ĉu iu por kiu ĉi klakis jam volas atentigi almenaŭ 123 00:05:38,640 --> 00:05:40,220 unu cimon mi faris? 124 00:05:40,220 --> 00:05:42,470 Jes? 125 00:05:42,470 --> 00:05:42,800 Jes. 126 00:05:42,800 --> 00:05:47,860 Mi forgesis "# include" en la supro, ili simptomo ke se mi penas 127 00:05:47,860 --> 00:05:50,490 kompili tiun tuj esti, ke la tradukilo tuj krias al mi, 128 00:05:50,490 --> 00:05:52,770 dirante nedefinita simbolo aŭ ion pri tio. 129 00:05:52,770 --> 00:05:55,360 Ĝi ne komprenas ion ŝatas printf. 130 00:05:55,360 --> 00:05:59,380 >> Do mi tuj faru "# include ", Savu la dosieron. 131 00:05:59,380 --> 00:06:00,400 Kaj nun ĝi estas en pli bona formo. 132 00:06:00,400 --> 00:06:02,690 Sed mi ankaŭ tuj atentigi el unu novan detalon hodiaŭ. 133 00:06:02,690 --> 00:06:08,620 Krom preciziganta loko posedantoj kiel% f% i% s, vi povas 134 00:06:08,620 --> 00:06:12,320 foje influas la konduton de tiu lokokupilo. 135 00:06:12,320 --> 00:06:15,540 Ekzemple, en la kazo de flosanta punkto valoron, se mi nur volas 136 00:06:15,540 --> 00:06:22,200 por montri unu decimala loko post la periodo, mi efektive povas fari 0.1f. 137 00:06:22,200 --> 00:06:26,830 Do alivorte, mi disigi la f kaj la procento signo kun 0.1, nur 138 00:06:26,830 --> 00:06:30,200 dirante al printf, vi eble havas tutajn faskon da numeroj post la dekuma 139 00:06:30,200 --> 00:06:30,930 atentigi min. 140 00:06:30,930 --> 00:06:32,870 Sed mi nur volas vidi unu el ili. 141 00:06:32,870 --> 00:06:36,280 >> Do mi tuj iros antaŭen nun kaj savos tiun programon, iru en mian stacio 142 00:06:36,280 --> 00:06:41,870 fenestro, kaj mi iros por antaŭeniri kaj tipon fari float 0, eniru. 143 00:06:41,870 --> 00:06:44,930 Mi vidas ke iom kamufla linio kiu komencos fari pli sentita kiel ni 144 00:06:44,930 --> 00:06:46,900 turmentus ĝi apartigas tiun semajnon kaj apud. 145 00:06:46,900 --> 00:06:50,480 Nun mi tuj iros antaŭen kaj kuri float nulo. 146 00:06:50,480 --> 00:06:52,020 Kaj, malbenita. 147 00:06:52,020 --> 00:06:54,880 >> Do tie estas alia cimo tie ial. 148 00:06:54,880 --> 00:07:02,490 Mi sufiĉe certas, ke unu deka, aŭ unu dividite per 10, ne estas 0.0. 149 00:07:02,490 --> 00:07:04,590 Eble mi simple ne rigardis ĉe sufiĉe ciferoj. 150 00:07:04,590 --> 00:07:08,580 Do kial ne mi diras du .2 vidi du decimalaj anstataŭ nur unu. 151 00:07:08,580 --> 00:07:11,810 Lasu min reiri al mia fina fenestro tie kaj batis supren kelkaj fojoj 152 00:07:11,810 --> 00:07:12,840 vidi mian historion. 153 00:07:12,840 --> 00:07:15,910 Ĉu fari flosi nulo denove, kaj poste supren denove. 154 00:07:15,910 --> 00:07:17,730 Kaj nun eniri. 155 00:07:17,730 --> 00:07:20,000 >> Kaj nun mi sufiĉe certas ke tiu estas malbone. 156 00:07:20,000 --> 00:07:23,030 Kaj mi povis fari tri kaj kvar, kaj mi estas probable tuj daŭre vidas nuloj. 157 00:07:23,030 --> 00:07:24,880 Do kie estas la cimo? 158 00:07:24,880 --> 00:07:27,910 Unu dividite per 10 devus esti 0.1. 159 00:07:27,910 --> 00:07:30,310 Iu volas preni ponardi je kio la fundamenta demando estas? 160 00:07:30,310 --> 00:07:32,400 Jes? 161 00:07:32,400 --> 00:07:33,420 Ili ambaŭ estas entjeroj. 162 00:07:33,420 --> 00:07:33,920 Do kio? 163 00:07:33,920 --> 00:07:37,820 Do kun unu dividite per 10, kiu estas kion mi faras en aritmetiko. 164 00:07:37,820 --> 00:07:41,185 Kaj mi alvenas 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Jes. 166 00:07:41,660 --> 00:07:43,240 Kaj tiel estas ĝuste tiu temo. 167 00:07:43,240 --> 00:07:46,700 Kiam vi prenos entjero en komputilo kaj vi dividu per alia entjero, 168 00:07:46,700 --> 00:07:50,430 la komputilo defaŭlte tuj supozu ke vi volas entjero. 169 00:07:50,430 --> 00:07:54,620 La problemo kvankam, kompreneble, estas ke 0,1 ne estas entjero. 170 00:07:54,620 --> 00:07:55,680 Estas vera nombro. 171 00:07:55,680 --> 00:07:59,610 Kaj do kion la komputilo faras por implicite estas nur ĵetas for 172 00:07:59,610 --> 00:08:01,070 ĉion post la dekuma punkto. 173 00:08:01,070 --> 00:08:03,380 Ĝi ne rondigi malsupren aŭ supren per si mem. 174 00:08:03,380 --> 00:08:06,480 Ĝi simple ĵetas for ĉio post la dekuma punkto. 175 00:08:06,480 --> 00:08:07,430 Kaj nun, ke havas sencon. 176 00:08:07,430 --> 00:08:09,740 Ĉar nun ni estas klare maldekstra kun nulo. 177 00:08:09,740 --> 00:08:10,250 >> Sed atendu momenton. 178 00:08:10,250 --> 00:08:11,840 Mi ne vidante int nulo. 179 00:08:11,840 --> 00:08:14,910 Mi reale vidi 0.00. 180 00:08:14,910 --> 00:08:16,340 Do kiel mi repacigi ĉi nun? 181 00:08:16,340 --> 00:08:22,850 Se unu dividite per 10 estas nulo, sed mi vidante 0.00, kie ĝi ricevas 182 00:08:22,850 --> 00:08:24,250 konvertiĝis al reela nombro? 183 00:08:24,250 --> 00:08:25,500 Jes. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Ekzakte. 186 00:08:30,630 --> 00:08:35,600 >> Do ĝis ĉi tie en linio kvin, kiam mi vere stoki ke 0,1, kiu estas tiam 187 00:08:35,600 --> 00:08:39,549 Senpintigita al nulo, ene de kaleŝego, tio estas efektive ekvivalenta al 188 00:08:39,549 --> 00:08:42,100 stoki ĝin ne kiel int sed, ja, kiel flosas. 189 00:08:42,100 --> 00:08:46,540 Cetere, mi tiam uzanta printf al eksplicite presi tiu numero du 190 00:08:46,540 --> 00:08:49,740 decimalaj kvankam tie eble ne vere esti ajna. 191 00:08:49,740 --> 00:08:51,020 >> Do ĉi tiu speco de sucks, ĉu ne? 192 00:08:51,020 --> 00:08:53,640 Ŝajne vi ne povas fari matematikon, almenaŭ je tiu nivelo de 193 00:08:53,640 --> 00:08:55,600 precizeco, en komputilo. 194 00:08:55,600 --> 00:08:56,930 Sed certe ekzistas solvo. 195 00:08:56,930 --> 00:09:00,410 Kio estas la plej simpla fix ni povus eble fari, eĉ nur intuicie tie 196 00:09:00,410 --> 00:09:01,130 solvi tion? 197 00:09:01,130 --> 00:09:02,380 Jes? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Turnu la entjeroj en - 200 00:09:06,574 --> 00:09:06,976 yeah. 201 00:09:06,976 --> 00:09:10,420 Eĉ se mi ne tute certa kio estas vere okazas tie, se tio 202 00:09:10,420 --> 00:09:13,440 fundamente devas vidi per tiuj ambaŭ esti ints, bone, kial ne mi 203 00:09:13,440 --> 00:09:18,230 fari ke 10.0, farante tiun 1.0, resave la dosiero. 204 00:09:18,230 --> 00:09:20,990 Lasu min reiri malsupren al la fundo kaj recompilar. 205 00:09:20,990 --> 00:09:23,030 Permesu al mi rerun. 206 00:09:23,030 --> 00:09:23,420 Kaj tie - 207 00:09:23,420 --> 00:09:27,690 nun, mi havas mian unu dekono reprezentita kiel 0.10. 208 00:09:27,690 --> 00:09:28,420 >> Ĉio bone. 209 00:09:28,420 --> 00:09:29,220 Do tio ne estas malbona. 210 00:09:29,220 --> 00:09:31,730 Kaj lasu min atentigi unu alia maniero Ni povis esti solvita ĉi. 211 00:09:31,730 --> 00:09:35,580 Permesu al mi efektive ruliĝas en la tempo al kiam ni havis tiun kiel unu 212 00:09:35,580 --> 00:09:36,680 deka antaŭ momento. 213 00:09:36,680 --> 00:09:40,800 Kaj lasu min antaŭeniri kaj resave tiun dosieron kiel malsama dosiero nomo, nur por 214 00:09:40,800 --> 00:09:41,750 havi iom kontrolpunkto. 215 00:09:41,750 --> 00:09:43,450 Do kiu estis versio unu. 216 00:09:43,450 --> 00:09:45,520 Kaj nun lasu min iri antaŭen kaj fari pli versio. 217 00:09:45,520 --> 00:09:48,540 Ni nomas tiun versio du nulo indeksita. 218 00:09:48,540 --> 00:09:51,280 >> Kaj mi tuj anstataŭ fari tio - vi scias kion? 219 00:09:51,280 --> 00:09:54,400 Aldonante skalara nulo laboras en tiu kazo. 220 00:09:54,400 --> 00:09:56,060 Sed supozu unu estis variablo. 221 00:09:56,060 --> 00:09:57,680 Supozita 10 estis variablo. 222 00:09:57,680 --> 00:10:00,680 En aliaj vortoj, supozu, ke mi ne povis nur malmola-kodo .0 fine 223 00:10:00,680 --> 00:10:02,340 de tiu aritmetika esprimo. 224 00:10:02,340 --> 00:10:05,820 Nu, mi povas vere ion fari en krampoj nomata malplenigita. 225 00:10:05,820 --> 00:10:11,920 Mi povas jxeti ke entjero 10 al kaleŝego, kaj mi povas jxeti ke entjero unu al 226 00:10:11,920 --> 00:10:12,800 flosi, tiel. 227 00:10:12,800 --> 00:10:17,190 Tiam la math ke tuj farenda estas efektive 1.0 dividita de 10.0, 228 00:10:17,190 --> 00:10:19,250 la rezulto de kiu eliras en f kiel antaŭe. 229 00:10:19,250 --> 00:10:26,130 Do se mi recompilar tion kiel fari flosas 2, kaj nun flosas 2, mi ricevas la saman 230 00:10:26,130 --> 00:10:27,020 respondi, ankaŭ. 231 00:10:27,020 --> 00:10:29,640 >> Do ĉi tiu estas sufiĉe elpensita ekzemplo, por solvi tiun problemon 232 00:10:29,640 --> 00:10:31,400 per prezentanta fandon. 233 00:10:31,400 --> 00:10:34,410 Sed ĝenerale, fandon Iĝos potencan aferon, aparte por 234 00:10:34,410 --> 00:10:38,180 problemo starigis du en semajna tempo, kiam vi volas konverti unu datumtipo al 235 00:10:38,180 --> 00:10:41,800 alia ke fine de la tago estas reprezentitaj en la sama maniero. 236 00:10:41,800 --> 00:10:44,970 Je la fino de la tago, ĉiu unuopa kion ni parolis pri tiel for estas 237 00:10:44,970 --> 00:10:46,710 nur ints sub la kapuĉo. 238 00:10:46,710 --> 00:10:48,950 Aŭ se tio estas tro malalta nivelo por vi, ili estas nur nombroj 239 00:10:48,950 --> 00:10:49,750 sub la kapuĉo. 240 00:10:49,750 --> 00:10:52,850 Eĉ karakteroj, denove, rememoran de semajno nulo, estas la numeroj 241 00:10:52,850 --> 00:10:53,990 sub la kapuĉo. 242 00:10:53,990 --> 00:10:57,240 >> Kiuj estas, ni povas konverti inter malsamaj tipoj de nombroj se 243 00:10:57,240 --> 00:10:58,060 ili estas simple bitoj. 244 00:10:58,060 --> 00:11:01,020 Ni povas konverti inter nombroj kaj literoj se ili estas nur 245 00:11:01,020 --> 00:11:02,580 bitoj, kaj inverse. 246 00:11:02,580 --> 00:11:07,170 Kaj malplenigita en ĉi tiu maniero estas mekanismo en programado kiu permesas perforte 247 00:11:07,170 --> 00:11:10,970 ŝanĝi unu datumtipo al alia. 248 00:11:10,970 --> 00:11:14,570 Bedaŭrinde, ĉi tiu ne estas tiel simpla kiel mi povus ŝatis. 249 00:11:14,570 --> 00:11:19,220 >> Mi tuj iros returne en flosoj 1, kiu estis la pli simplaj, pli 250 00:11:19,220 --> 00:11:22,830 simpla kun .0 Aldonataj al ĉiu. 251 00:11:22,830 --> 00:11:25,260 Kaj ĝuste kiel rapida aktualigo, lasu min antaŭeniri kaj recompilar 252 00:11:25,260 --> 00:11:27,670 tiu, fari flosas 2 - 253 00:11:27,670 --> 00:11:30,300 sorry, ĉi tiu estas fari flosas 1. 254 00:11:30,300 --> 00:11:32,050 Kaj nun ni kuras flosas 1. 255 00:11:32,050 --> 00:11:34,810 Kaj en la fundo, rimarki ke mi ja ricevas 0,1. 256 00:11:34,810 --> 00:11:36,165 Do, problemo solvita. 257 00:11:36,165 --> 00:11:37,280 >> Sed ankoraŭ ne. 258 00:11:37,280 --> 00:11:40,000 Mi nun tuj akiri iom stranga, kaj mi tuj reiri en mian 259 00:11:40,000 --> 00:11:41,620 printf deklaron kaj diru, vi scias kion? 260 00:11:41,620 --> 00:11:44,090 Mi ŝatus konfirmi ke tiu Estas vere unu dekono. 261 00:11:44,090 --> 00:11:47,890 Kaj mi tuj volas vidi ĉi al, ni diru, kvin dekumaj lokoj. 262 00:11:47,890 --> 00:11:48,570 Tio ne estas problemo. 263 00:11:48,570 --> 00:11:52,020 Mi ŝanĝas la du al kvin, Mi recompilar kun fari. 264 00:11:52,020 --> 00:11:53,770 Mi rerun ĝin kiel flosas 1. 265 00:11:53,770 --> 00:11:54,990 Looking sufiĉe bone. 266 00:11:54,990 --> 00:11:58,570 Mia prudento ĉekojn povus fini tie, sed Mi ricevas iom pli aventuremaj. 267 00:11:58,570 --> 00:12:00,330 Mi tuj ŝanĝos 0,5 al 0,10. 268 00:12:00,330 --> 00:12:03,440 Mi volas vidi 10 ciferoj post la dekuma loko. 269 00:12:03,440 --> 00:12:09,060 >> Kaj mi tuj iros antaŭen kaj recompilar ĉi tio kaj rerun flosas 1. 270 00:12:09,060 --> 00:12:13,060 Mi specon de bedaŭro esti provita ĉi plu ĉar mia math ne estas tiel 271 00:12:13,060 --> 00:12:14,320 korekti plu, ĝi similas. 272 00:12:14,320 --> 00:12:15,630 Sed atendu momenton, eble ke estas nur hazardo. 273 00:12:15,630 --> 00:12:17,810 Eble la komputilo agas iomete stranga. 274 00:12:17,810 --> 00:12:21,810 Lasu min antaŭeniri kaj fari 20 dekumaj punktoj kaj trankviligi min, ke mi scias 275 00:12:21,810 --> 00:12:22,540 kiel fari math. 276 00:12:22,540 --> 00:12:23,460 Mi scipovas plani. 277 00:12:23,460 --> 00:12:26,960 Faru flosas 1, recompilar kaj damn it. 278 00:12:26,960 --> 00:12:31,110 Tio estas vere, vere atingi for de la marko. 279 00:12:31,110 --> 00:12:32,490 >> Do kio okazas ĉi tie? 280 00:12:32,490 --> 00:12:36,050 Intuicie, bazita sur niaj supozoj pli frue pri la grandeco de datumtipoj, 281 00:12:36,050 --> 00:12:38,040 kio devas esti okazas ĉi tie sub la kapuĉo? 282 00:12:38,040 --> 00:12:39,290 Jes? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Ekzakte. 285 00:12:43,590 --> 00:12:46,480 Se vi volas ĉi multan precizecon, kaj tio estas heck de multe da precizeco - 286 00:12:46,480 --> 00:12:48,770 20 numeroj post la dekuma punkto. 287 00:12:48,770 --> 00:12:51,990 Vi ne povas eble reprezentas arbitran numeron krom se vi havas 288 00:12:51,990 --> 00:12:52,930 arbitra nombro de bitoj. 289 00:12:52,930 --> 00:12:54,190 Sed ni ne faras. 290 00:12:54,190 --> 00:12:57,200 Por kaleŝego, ni nur havas 32 bitojn. 291 00:12:57,200 --> 00:13:02,260 >> Do, se 32 bitoj nur povas permutita en maniero - nur kiel niaj homoj en, etapo 292 00:13:02,260 --> 00:13:05,780 manojn supren aŭ malsupren - en finia nombro de manieroj, estas nur finia nombro 293 00:13:05,780 --> 00:13:08,640 de reelaj nombroj povas reprezenti kun tiuj bitoj. 294 00:13:08,640 --> 00:13:10,500 Kaj tial la komputilo finfine tuj devas 295 00:13:10,500 --> 00:13:11,730 komenci tranĉante anguloj. 296 00:13:11,730 --> 00:13:15,500 La komputilo povas kaŝi tiuj detaloj de ni por iomete da tempo. 297 00:13:15,500 --> 00:13:18,880 Sed se ni komencos ŝovas en la numeroj kaj rigardante pli kaj pli en la 298 00:13:18,880 --> 00:13:23,220 trenante nombroj en la tuta nombro, tiam ni komencas vidi, ke ĝi estas 299 00:13:23,220 --> 00:13:26,480 fakte aproksimanta la ideo de deka. 300 00:13:26,480 --> 00:13:29,860 >> Kaj tiel rezultas, tragike, estas malfinia nombro de nombroj 301 00:13:29,860 --> 00:13:35,060 ni ne povas reprezenti ĝuste en komputilo, almenaŭ kun finia 302 00:13:35,060 --> 00:13:38,030 nombro de bitoj, finia kvanto de RAM. 303 00:13:38,030 --> 00:13:41,210 Nun bedaŭrinde, ĉi foje havas en reala mondo konsekvencoj. 304 00:13:41,210 --> 00:13:45,980 Se homoj ne sufiĉe estimi tiun aŭ speco de preni por donita la fakto 305 00:13:45,980 --> 00:13:48,310 ke ilia komputilo nur faru kion ili diros ĝin fari kaj ne 306 00:13:48,310 --> 00:13:51,430 komprenu tiujn suba reprezento detaloj - 307 00:13:51,430 --> 00:13:55,290 kiu, sincere, en iuj lingvoj estas kaŝita de la uzanto, kontraste en C - 308 00:13:55,290 --> 00:13:56,500 iuj malbonaj aferoj povas okazi. 309 00:13:56,500 --> 00:13:58,650 >> Kaj kion mi pensis ke ni farus estas doni retropaŝon. 310 00:13:58,650 --> 00:14:00,420 Kaj jen estas proksimume ok-minuta video. 311 00:14:00,420 --> 00:14:04,200 Ĝi elsendis kelkajn jarojn antaŭe, kaj ĝi donas enrigardojn en fakte kio povas iri 312 00:14:04,200 --> 00:14:09,290 erara kiam oni sub-taksi tiujn specojn de detaloj en la tre ĉiuj tro 313 00:14:09,290 --> 00:14:10,080 reala mondo. 314 00:14:10,080 --> 00:14:12,965 Se ni povus dim la lumoj dum kelkaj minutoj. 315 00:14:12,965 --> 00:14:14,360 >> Parolanto 1: Ni nun revenu al inĝenierio 316 00:14:14,360 --> 00:14:17,160 katastrofoj en Moderna Mirindaĵoj. 317 00:14:17,160 --> 00:14:18,680 >> World - 318 00:14:18,680 --> 00:14:21,340 ni ĉiuj venas por akcepti la ofte frustra problemoj 319 00:14:21,340 --> 00:14:23,170 kiu iras kun ili. 320 00:14:23,170 --> 00:14:27,570 Cimojn, virusoj, kaj programaro glitches estas malgrandaj prezoj por pagi la 321 00:14:27,570 --> 00:14:28,960 komforto. 322 00:14:28,960 --> 00:14:32,040 Sed en alta teknologio kaj alta rapido milita kaj spaca programo 323 00:14:32,040 --> 00:14:38,650 aplikoj, la plej malgranda problemo povas glorata en katastrofo. 324 00:14:38,650 --> 00:14:44,480 >> 4 de junio de 1996, sciencistoj pretas ĵeti senpilotaj Ariane 5 raketo. 325 00:14:44,480 --> 00:14:48,700 Ĝi portis sciencaj satelitoj desegnita por establi precize kiel 326 00:14:48,700 --> 00:14:53,250 la tera magneta kampo interagas kun sunaj ventoj. 327 00:14:53,250 --> 00:14:57,540 La raketo estis konstruita por la Eŭropa Spaca Agentejo kaj levis el inter lia 328 00:14:57,540 --> 00:14:59,906 facileco sur la marbordon de Franca Gviano. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: Je ĉirkaŭ 37 duaj en la flugo, ili unue rimarkis 330 00:15:03,660 --> 00:15:04,910 io iris malbone. 331 00:15:04,910 --> 00:15:08,130 La cigaredingoj estis swiveling en maniero ili vere ne devus. 332 00:15:08,130 --> 00:15:12,380 Ĉirkaŭ 40 sekundoj en la flugo, klare la veturilo estis en premo. 333 00:15:12,380 --> 00:15:14,400 Kaj tio estas, kiam ili faris decido por gxin pereigi. 334 00:15:14,400 --> 00:15:18,520 La gamo sekureco oficiro, kun terura intestoj, premis la butonon, 335 00:15:18,520 --> 00:15:23,900 eksplodigis la raketo antaŭ ol ĝi povis igi danĝeron por publika sekureco. 336 00:15:23,900 --> 00:15:27,810 >> Parolanto 1: Ĉi tiu estis la unua vojaĝo de la Ariane 5, kaj lia detruo 337 00:15:27,810 --> 00:15:32,020 okazis pro difekto enigita en la raketo de programaro. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: La problemo de la Ariane estis, ke tie estis numero 339 00:15:33,980 --> 00:15:36,390 kiu postulis 64 bitojn por esprimi. 340 00:15:36,390 --> 00:15:39,420 Kaj ili volis igi al 16-bita nombro. 341 00:15:39,420 --> 00:15:43,130 Ili supozis, ke la nombro neniam estis tuj estos tre granda, ke la plimulto de 342 00:15:43,130 --> 00:15:46,810 tiuj ciferoj en la 64-bitan nombro estis nuloj. 343 00:15:46,810 --> 00:15:48,270 Ili estis erara. 344 00:15:48,270 --> 00:15:51,380 >> Parolanto 1: La nekapablo de programaro programo por akcepti la speco de 345 00:15:51,380 --> 00:15:55,350 numeron generitaj per alia estis ĉe la radiko de la fiasko. 346 00:15:55,350 --> 00:15:59,970 Softvaro disvolviĝo fariĝis tre peniga parto de nova teknologio. 347 00:15:59,970 --> 00:16:03,980 La Ariane 4 raketo estis tre sukcesa, tiel de la programaro 348 00:16:03,980 --> 00:16:07,480 kreis por ĝi estis ankaŭ uzata en la Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> Philip Coyle: La baza problemo estis ke la Ariane 5 estis pli rapida, 350 00:16:11,980 --> 00:16:13,720 akcelis pli rapida. 351 00:16:13,720 --> 00:16:17,250 Kaj la programaro ne havis konsistigis tion. 352 00:16:17,250 --> 00:16:20,770 >> Parolanto 1: La detruo de la raketo estis granda financa katastrofo, 353 00:16:20,770 --> 00:16:24,200 ĉiuj pro minuto programaro eraro. 354 00:16:24,200 --> 00:16:27,820 Sed tio ne estis la unua fojo datumoj konvertiĝo problemoj estis plagita moderna 355 00:16:27,820 --> 00:16:30,620 raketo teknologio. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: En 1991, kun la komenco de la Golf-Milito, la Patriot 357 00:16:34,480 --> 00:16:38,610 misilon spertis similan speco de nombro konvertiĝo problemo. 358 00:16:38,610 --> 00:16:44,910 Kiel rezulto, la 28 usonaj soldatoj estis mortigitaj kaj ĉirkaŭ 100 aliaj vunditaj 359 00:16:44,910 --> 00:16:48,600 kiam la Patriot, kiu estis supozita protekti kontraŭ venonta scuds, 360 00:16:48,600 --> 00:16:51,630 malsukcesa pafi misilo. 361 00:16:51,630 --> 00:16:55,110 >> Parolanto 1: Kiam Irako invadis Kuvajton kaj Ameriko ĵetis Dezerta Ŝtormo en 362 00:16:55,110 --> 00:17:00,570 frua 1991, Patriot misilon piloj estis deplojitaj por protekti Saŭda Arabio 363 00:17:00,570 --> 00:17:04,760 kaj Israelo de iraka Scud misilon atakoj. 364 00:17:04,760 --> 00:17:09,720 The Patriot estas usona duona atingo surfaco-sistemo de aero fabrikita de 365 00:17:09,720 --> 00:17:11,569 la Raytheon kompanio. 366 00:17:11,569 --> 00:17:16,410 >> Theodore POSTOL: La grandeco de la Patriot interceptor mem estas krude 367 00:17:16,410 --> 00:17:17,710 20-metrojn longa. 368 00:17:17,710 --> 00:17:20,800 Kaj pezas ĉirkaŭ 2000 funtojn. 369 00:17:20,800 --> 00:17:22,940 Kaj portas kapon de ĉirkaŭ - 370 00:17:22,940 --> 00:17:24,905 Mi kredas ke estas proksimume 150 funtoj. 371 00:17:24,905 --> 00:17:31,030 Kaj la kapo sin estas alta eksploda kiu havas 372 00:17:31,030 --> 00:17:33,270 fragmentoj ĉirkaŭ ĝi. 373 00:17:33,270 --> 00:17:37,490 La envolvaĵo de la kapo estas desegnita agi kiel Buckshot. 374 00:17:37,490 --> 00:17:40,720 >> Parolanto 1: La misiloj estas plenumataj kvar po ujo kaj estas transportitaj 375 00:17:40,720 --> 00:17:43,050 per duone trailer. 376 00:17:43,050 --> 00:17:47,490 >> Philip Coyle: The Patriot kontraŭ misiloj Sistemo superas 377 00:17:47,490 --> 00:17:50,710 almenaŭ 20 jaroj. 378 00:17:50,710 --> 00:17:54,350 Ĝi estis origine desegnita kiel aera defendo misilon al 379 00:17:54,350 --> 00:17:56,190 malkonstrui malamiko aviadiloj. 380 00:17:56,190 --> 00:18:02,490 En la unua Milito de la Golfo, kiam tiu milito venis kune, la Armeo volis uzi ĝin 381 00:18:02,490 --> 00:18:05,535 pafi malsupren scuds, ne aviadiloj. 382 00:18:05,535 --> 00:18:09,310 La iraka aerarmeo ne estis tiel de problemo. 383 00:18:09,310 --> 00:18:12,450 Sed la armeo estis maltrankviligita scuds. 384 00:18:12,450 --> 00:18:15,950 Kaj tiel ili provis ĝisdatigi la Patriot. 385 00:18:15,950 --> 00:18:18,750 >> Parolanto 1: Interceptor malamiko misilon vojaĝante al mach kvin estis 386 00:18:18,750 --> 00:18:20,890 tuj estos defiante sufiĉas. 387 00:18:20,890 --> 00:18:25,590 Sed kiam la Patriot estis enkuris servo, la armeo ne estis konscia de 388 00:18:25,590 --> 00:18:31,710 Iraka modifo kiun faris lia Scuds preskaŭ neeble por bati. 389 00:18:31,710 --> 00:18:35,240 >> Theodore POSTOL: Kio okazis estas la scuds kiuj estis 390 00:18:35,240 --> 00:18:36,570 venon estis malstabila. 391 00:18:36,570 --> 00:18:37,532 Ili estis wobbling. 392 00:18:37,532 --> 00:18:43,220 La kialo de ĉi tiu estis la irakanoj, en Por akiri 600 kilometroj el 393 00:18:43,220 --> 00:18:47,530 300-kilometro atingo misilo, prenis pezo de la antaŭa kapo. 394 00:18:47,530 --> 00:18:49,290 Ili faris la kapo pli malpeza. 395 00:18:49,290 --> 00:18:53,110 Do nun la Patriot estas klopodi veni en la Scud. 396 00:18:53,110 --> 00:18:56,470 Kaj la plejparto de la tempo, la blindiga plimulto de la tempo, ĝi estus nur 397 00:18:56,470 --> 00:18:58,730 flugi por la Scud. 398 00:18:58,730 --> 00:19:01,760 >> Parolanto 1: Kiam la Patriot sistemo operatoroj realigis la Patriot missed 399 00:19:01,760 --> 00:19:06,690 lia celo, ili detonado la Patriotoj kapon por eviti eblajn 400 00:19:06,690 --> 00:19:10,300 viktimojn se ĝi estis permesita fali al la tero. 401 00:19:10,300 --> 00:19:14,540 >> Theodore POSTOL: Tio estis kio plej popolo vidis tiel grandaj buloj de fajro en la ĉielo 402 00:19:14,540 --> 00:19:20,350 kaj miskomprenita kiel haltig survoje de Scud kapoj. 403 00:19:20,350 --> 00:19:23,320 >> Parolanto 1: Kvankam en la nokto ĉielojn Patriotoj ŝajnis esti sukcese 404 00:19:23,320 --> 00:19:27,530 detruante scuds, ĉe Dhahran tie povus esti eraro pri ĝia 405 00:19:27,530 --> 00:19:29,140 agado. 406 00:19:29,140 --> 00:19:34,180 Tie, la Patriota la radaro sistemo perdis spuri de venontaj Scud kaj neniam 407 00:19:34,180 --> 00:19:36,380 lanĉita pro programaro difekto. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Ĝi estis la israelanoj kiuj unue malkovrita ke la pli longa la sistemo 410 00:19:42,700 --> 00:19:48,020 estis, des pli granda la tempo diferenco igis pro horloĝo 411 00:19:48,020 --> 00:19:50,470 enigita en la sistemo de komputilo. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Pri du semajnoj antaŭ la tragedio en Dhahran, la israelanoj 413 00:19:54,640 --> 00:19:58,440 raportis al la defendo Fako ke la sistemo estis perdi tempon. 414 00:19:58,440 --> 00:20:01,280 Post ĉirkaŭ ok horoj de kuri, Ili rimarkis, ke la sistemo estas 415 00:20:01,280 --> 00:20:03,530 igante rimarkinde malpli preciza. 416 00:20:03,530 --> 00:20:07,710 La defendo Fako Respondis dirante al ĉiuj de la Patriot piloj 417 00:20:07,710 --> 00:20:10,500 por ne lasi la sistemoj on por longa tempo. 418 00:20:10,500 --> 00:20:12,430 Ili neniam diris kio longa tempo estis. 419 00:20:12,430 --> 00:20:13,330 Ok horojn? 420 00:20:13,330 --> 00:20:13,810 10 horoj? 421 00:20:13,810 --> 00:20:14,990 1.000 horoj? 422 00:20:14,990 --> 00:20:17,150 Neniu sciis. 423 00:20:17,150 --> 00:20:20,220 >> Parolanto 1: The Patriot pilo lokitaj en la kazerno ĉe Dhahran 424 00:20:20,220 --> 00:20:24,660 kaj lia misa interna horloĝo estis sur pli ol 100 horojn en la nokto de 425 00:20:24,660 --> 00:20:27,470 Februaro 25a. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: Ĝi spuris tempo al precizeco de ĉirkaŭ dekono de sekundo. 427 00:20:31,770 --> 00:20:34,480 Nun, dekono de sekundo estas interesa nombro ĉar ĝi ne povas esti 428 00:20:34,480 --> 00:20:39,940 esprimita en duuma precize, kion signifas ĝi ne povas esti esprimita akurate en 429 00:20:39,940 --> 00:20:42,500 ajna moderna cifereca komputilo. 430 00:20:42,500 --> 00:20:46,920 Estas malfacile kredi, sed uzi tion kiel ekzemplon. 431 00:20:46,920 --> 00:20:49,000 Ni prenu la numero unu triono. 432 00:20:49,000 --> 00:20:53,150 Unu triono ne povas esti esprimita en dekuma ĝuste. 433 00:20:53,150 --> 00:20:57,500 Tria estas 0,333 irante on por malfinio. 434 00:20:57,500 --> 00:21:02,270 Ne estas maniero por fari tion kun absoluta precizeco en dekuma. 435 00:21:02,270 --> 00:21:05,370 Tio estas ĝuste la sama tipo de problemo kiu pasis en la Patriot. 436 00:21:05,370 --> 00:21:09,880 Ju pli longe la sistemo kuris, la plej malbona la tempo eraro fariĝis. 437 00:21:09,880 --> 00:21:13,840 >> Parolanto 1: Post 100 horoj de funkciado, la eraron en la tempo estis nur 438 00:21:13,840 --> 00:21:16,140 ĉirkaŭ triono de sekundo. 439 00:21:16,140 --> 00:21:20,800 Sed en terminoj de celado misilon vojaĝante al mach kvin, ĝi rezultigis 440 00:21:20,800 --> 00:21:24,410 de spuras eraro de pli ol 600 metroj. 441 00:21:24,410 --> 00:21:27,670 Estus fatala eraro por la soldatoj ĉe Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> Theodore POSTOL: Kio okazis estas Scud ĵeto estis detektita de frua 443 00:21:33,450 --> 00:21:34,280 averto satelitoj. 444 00:21:34,280 --> 00:21:38,550 Kaj ili eksciis, ke la Scud venis en lia ĝenerala direkto. 445 00:21:38,550 --> 00:21:41,000 Ili ne scias, kie ĝi venas. 446 00:21:41,000 --> 00:21:43,900 >> Parolanto 1: Nun estis ĝis la radaro komponanto de la Patriot sistemo 447 00:21:43,900 --> 00:21:48,910 defendi Dhahran lokalizi kaj observu spuri de la venonta malamiko misilo. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: La radaro estis tre inteligenta. 449 00:21:50,580 --> 00:21:53,770 Estus vere spuri la pozicio de la Scud kaj poste antaŭdiri kie 450 00:21:53,770 --> 00:21:57,160 probable estus la proksima fojo la radaro sendis premas eksteren. 451 00:21:57,160 --> 00:21:58,870 Kiu nomis la gamo pordego. 452 00:21:58,870 --> 00:22:04,020 >> Theodore POSTOL: Tiam tuj la Patriot decidas sufiĉa tempo pasis iri 453 00:22:04,020 --> 00:22:09,420 apogi kaj kontroli la venonta loko por ĉi detektita objekto, ĝi superas. 454 00:22:09,420 --> 00:22:14,450 Do kiam reiris al la malĝusta loko, do ne vidas objekto. 455 00:22:14,450 --> 00:22:18,200 Kaj decidas ke ne estis objekto, ĝi estis falsa detekto, kaj 456 00:22:18,200 --> 00:22:19,680 delasas la relo. 457 00:22:19,680 --> 00:22:22,970 >> Parolanto 1: La venonta Scud malaperis de la radaro ekrano, kaj 458 00:22:22,970 --> 00:22:26,050 sekundoj poste frapis en la fortikajxon. 459 00:22:26,050 --> 00:22:31,950 La Scud mortigis 28 kaj estis la lasta pafita dum la Golf-Milito. 460 00:22:31,950 --> 00:22:37,700 Tragike, la ĝisdatigita programaro alvenis ĉe Dhahran la sekva tago. 461 00:22:37,700 --> 00:22:41,800 La programaro difekto estis riparita, fermante unu ĉapitro en la tumulta 462 00:22:41,800 --> 00:22:43,690 historio de la Patriot misilo. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot estas fakte acrónimo por forigita array Spurado 465 00:22:50,710 --> 00:22:51,960 Interkapti De Target. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J Malan: Bone, do aleccionadora Ekzemple, por esti certa. 468 00:23:00,840 --> 00:23:03,430 Kaj feliĉe, tiuj malsupera nivelo cimoj ne estas iu kiun ni instruos vin 469 00:23:03,430 --> 00:23:06,220 tipe devas estimi, certe Ne kun iuj de niaj 470 00:23:06,220 --> 00:23:07,360 plej fruaj de programoj. 471 00:23:07,360 --> 00:23:10,450 Pli ĝuste, la plimulto de la cimoj vi instruos vin renkonto estos logika en la naturo, 472 00:23:10,450 --> 00:23:12,900 sintaksa naturo per kiu la kodo simple ne funkcias bone. 473 00:23:12,900 --> 00:23:14,140 Kaj vi scias ĝin sufiĉe rapide. 474 00:23:14,140 --> 00:23:16,850 >> Sed aparte kiam ni atingos la Fine de la semestro, ĝi tuj 475 00:23:16,850 --> 00:23:20,620 fariĝis pli kaj pli de ebleco vere kredas forte pri la dezajno 476 00:23:20,620 --> 00:23:22,960 de viaj programoj kaj la suba prezento 477 00:23:22,960 --> 00:23:24,520 tie, ankaŭ, de la datumoj. 478 00:23:24,520 --> 00:23:28,010 Ekzemple, ni enkondukos MySQL, kiu estas populara datumbazo motoro 479 00:23:28,010 --> 00:23:30,850 ke vi povas uzi kun retejoj stoki datumoj sur la dorso fino. 480 00:23:30,850 --> 00:23:34,630 Kaj vi devos komenci decidi ĉe Fine de la semestro ne nur kion 481 00:23:34,630 --> 00:23:38,790 tipoj de datumoj laŭ ĉi tiuj linioj uzi sed ĝuste kiom da bitoj por uzi, 482 00:23:38,790 --> 00:23:42,740 ĉu aŭ ne vi volas konservi datoj kiel datoj kaj tempoj kiel fojojn, kaj ankaŭ 483 00:23:42,740 --> 00:23:46,890 aĵoj kiel kiom granda vi volas ke la unika IDs esti por, ni diru, la uzantoj 484 00:23:46,890 --> 00:23:47,680 en via datumbazo. 485 00:23:47,680 --> 00:23:51,210 >> Fakte, se iuj el vi havas havis Facebook reprezentas sufiĉe tempo, 486 00:23:51,210 --> 00:23:53,680 kaj vi scias kiel akiri aliron al viaj Vikipediisto ID - 487 00:23:53,680 --> 00:23:57,930 kiuj kelkfoje aperas en via profilon la URL-krom se vi elektis 488 00:23:57,930 --> 00:24:02,070 kromnomo por la URL, aŭ se vi havas uzita Facebook Diagramo API, la 489 00:24:02,070 --> 00:24:05,510 publike havebla API per kiu vi povas demandi Facebook por krudaj datumoj - 490 00:24:05,510 --> 00:24:07,580 vi povas vidi kion via numera ID estas. 491 00:24:07,580 --> 00:24:10,880 Kaj antaŭ kelkaj jaroj, Facebook esence devis ŝanĝi de uzo 492 00:24:10,880 --> 00:24:15,980 la ekvivalento de ints uzi longajn longa ĉar la tempo kiel uzantoj venas 493 00:24:15,980 --> 00:24:19,780 kaj iru kaj krei multajn kontoj kaj falsa kontoj, eĉ ili tre facile 494 00:24:19,780 --> 00:24:24,630 povis elĉerpi iu kiel 4 miliardoj ebla valoro kiel int. 495 00:24:24,630 --> 00:24:28,340 >> Do pli sur tiujn specojn de demandoj laŭ la vojo, kiel bone. 496 00:24:28,340 --> 00:24:30,750 Bone, tiel ke estis elpelanta. 497 00:24:30,750 --> 00:24:31,670 Tio estis imprecision. 498 00:24:31,670 --> 00:24:32,730 Paro de rapidaj anoncoj. 499 00:24:32,730 --> 00:24:35,710 Do sekcioj formale komencas ĉi venas Dimanĉo, lundo, mardo. 500 00:24:35,710 --> 00:24:39,080 Vi aŭdas per retpoŝto poste tiu semajno pri via sekcio farita. 501 00:24:39,080 --> 00:24:42,570 Kaj vi ankaŭ ĉi tie en tiu punkto kiel por ŝanĝi vian sekcio se via 502 00:24:42,570 --> 00:24:45,660 horaro nun ŝanĝis aŭ via komforto nivelo nun ŝanĝis. 503 00:24:45,660 --> 00:24:49,380 Dume P-aro kaj hacker unu estas pro ĉi ĵaŭdo kun la eblo 504 00:24:49,380 --> 00:24:52,450 etendi tiun limdato por la specifoj por vendredo 505 00:24:52,450 --> 00:24:53,830 en tipa maniero. 506 00:24:53,830 --> 00:24:57,500 >> Konscii, kiu inkludis la problemon aro specifoj estas instrukcioj 507 00:24:57,500 --> 00:25:02,770 kiel uzi la CS50 aparato, fari, tiel kiel iuj CS50 specifaj iloj 508 00:25:02,770 --> 00:25:06,540 kiel stilo 50, kiuj povas provizi vin kun sugestoj dinamike en la 509 00:25:06,540 --> 00:25:10,230 kvalito de via kodo stilo kaj ankaŭ kontrolu 50, kiuj povas provizi vin per 510 00:25:10,230 --> 00:25:13,160 dinamika sugestoj pri via kodo la korekteco. 511 00:25:13,160 --> 00:25:16,850 Pardonu, ke ni ankoraŭ gladi el kelkaj Kinks kun ĉeko 50. 512 00:25:16,850 --> 00:25:21,490 Kelkaj el viaj samklasanoj, kiuj ne komencos ĉirkaŭ kvar GMT vendredon nokto kiam 513 00:25:21,490 --> 00:25:25,130 la spec supreniris rimarkis tiam kelkaj bugs kiu ni laboras 514 00:25:25,130 --> 00:25:29,010 tra, kaj pardonpetoj por iu ajn kiu spertis tro frustroj. 515 00:25:29,010 --> 00:25:30,340 La kulpo estas mia. 516 00:25:30,340 --> 00:25:34,080 Sed ni sekvu sur la CS50 diskuti kiam tiu estas solvita. 517 00:25:34,080 --> 00:25:35,700 >> Do vorto sur partituroj sin. 518 00:25:35,700 --> 00:25:38,990 Do estos unu-du semajnoj antaŭ vi komencu akiri reagojn pri problemo aroj 519 00:25:38,990 --> 00:25:40,640 ĉar vi ankoraŭ ne havas instruanta ulo. 520 00:25:40,640 --> 00:25:44,510 Kaj eĉ tiam, ni komencos pritaksi la C problemo aroj antaŭ ol ni 521 00:25:44,510 --> 00:25:46,970 reiru kaj taksi nulo tiel ke vi akiras pli adekvataj 522 00:25:46,970 --> 00:25:48,150 sugestoj pli rapide. 523 00:25:48,150 --> 00:25:51,870 Sed ĝenerale por la Syllabus, CS50 problemo aroj estas taksitaj laŭ la 524 00:25:51,870 --> 00:25:53,580 post kvar aksoj - 525 00:25:53,580 --> 00:25:55,760 atingo, korekteco, dezajno, kaj stilo. 526 00:25:55,760 --> 00:25:59,210 >> Medio tuj esti nombro tipe inter nulo kaj kvin kiun 527 00:25:59,210 --> 00:26:01,830 kaptas kiom de la peco kiu vin mordis malproksime. 528 00:26:01,830 --> 00:26:03,750 Tipe, vi volas ĉi tion al esti kvin. 529 00:26:03,750 --> 00:26:05,300 Vi almenaŭ provis ĉion. 530 00:26:05,300 --> 00:26:09,330 Kaj rimarki ĝi estas multiplika faktoro tiel ke farante nur parto de la 531 00:26:09,330 --> 00:26:12,520 problemo aro ne estas la plej bona strategio. 532 00:26:12,520 --> 00:26:15,610 >> Dume, pli evidenta estas la gravecon de ĝusteco - 533 00:26:15,610 --> 00:26:18,620 nur estas via programo korekta kun respekti la specifo? 534 00:26:18,620 --> 00:26:21,510 Ĉi tio pezis intence pli forte ol la aliaj du aksoj de 535 00:26:21,510 --> 00:26:24,450 faktoro de tri ĉar ni rekonas kiu tipe vi tuj pasigi 536 00:26:24,450 --> 00:26:28,600 multe pli da tempo persekutante malsupren iujn cimojn, atingi vian kodon por labori, tiam vi 537 00:26:28,600 --> 00:26:31,540 estas blankaj kaj elekti taŭga variablo nomoj kaj la 538 00:26:31,540 --> 00:26:33,800 kiel, kio estas ĉe la alia fino de la spektro de stilo. 539 00:26:33,800 --> 00:26:36,160 >> Tio ne estas diri stilo ne estas grava, kaj ni prediki ĝin 540 00:26:36,160 --> 00:26:37,920 tempo ambaŭ en prelegoj kaj en sekcioj. 541 00:26:37,920 --> 00:26:40,520 Stilo raportas al la estetiko de via kodo. 542 00:26:40,520 --> 00:26:43,980 Ĉu vi elektis bone nomita variabloj ke estas mallonga sed iom 543 00:26:43,980 --> 00:26:44,680 priskriba? 544 00:26:44,680 --> 00:26:47,840 Ĉu via kodo dentado kiel vi vidis en prelego kaj en maniero konsekvenca 545 00:26:47,840 --> 00:26:49,070 kun stilo 50? 546 00:26:49,070 --> 00:26:51,220 >> Laste estas dezajno dekstra tie en la mezo. 547 00:26:51,220 --> 00:26:54,090 Dezajno estas la pli malfacila unu meti fingro sur ĉar ĝi estas multe pli 548 00:26:54,090 --> 00:26:55,000 subjektiva. 549 00:26:55,000 --> 00:26:58,610 Sed estas eble la plej grava de la tri aksoj en terminoj de pedagogia 550 00:26:58,610 --> 00:27:02,050 valoro tempo kaj ke ĉi tiu estos la instruado ulo la ŝancon 551 00:27:02,050 --> 00:27:04,110 provizi vin per kvalita sugestoj. 552 00:27:04,110 --> 00:27:08,100 Efektive, en CS50 eĉ kvankam ni ja havas ĉi tiuj formuloj kaj partiturojn, fine 553 00:27:08,100 --> 00:27:11,350 de la tago ĉi tiuj estas tre intence tre malgrandaj siteloj - punkto valoroj 554 00:27:11,350 --> 00:27:13,460 inter nul kaj tri kaj nulo kaj kvin. 555 00:27:13,460 --> 00:27:17,800 Ni ne provu desegni tre maldelikata linioj inter problemo aroj aŭ inter 556 00:27:17,800 --> 00:27:21,490 studentoj sed prefere enfokusigi tiel kiel ni povas sur kvalita, longhand 557 00:27:21,490 --> 00:27:25,490 sugestoj, aŭ tajpitaj aŭ parola de via aparta instruado ulo, 558 00:27:25,490 --> 00:27:27,050 vi konatiĝi sufiĉe bone. 559 00:27:27,050 --> 00:27:32,340 >> Sed ĝenerale, tiuj estas la pezoj ke la diversaj aksoj havos. 560 00:27:32,340 --> 00:27:35,480 Dume, ankaŭ, ĝi valoras tenanta en Forgesu tion vi ne devus supozi, ke 561 00:27:35,480 --> 00:27:38,870 tri el kvin estas 60% kaj do proksimume malsukcesi. 562 00:27:38,870 --> 00:27:41,410 Tri estas intence destinita al esti ia mezo de la vojo bona. 563 00:27:41,410 --> 00:27:43,480 Se vi fariĝas triope ĉe la komenco de la semestro, jen 564 00:27:43,480 --> 00:27:46,340 ja signifis esti bona meti komenci. 565 00:27:46,340 --> 00:27:50,510 Se vi fariĝas duope, foiroj, estas definitive iun laboron por pagi iom 566 00:27:50,510 --> 00:27:53,250 pli da atento, utiligi de sekcioj kaj oficejo horoj. 567 00:27:53,250 --> 00:27:54,590 >> Se vi fariĝas kvarpiede kaj Fives, granda. 568 00:27:54,590 --> 00:27:57,430 Sed vere, ni atendas vidi trajektorioj inter studentoj - tre 569 00:27:57,430 --> 00:28:00,575 individualizados po lernanto, sed startanta la semestro tie en ia 570 00:28:00,575 --> 00:28:04,100 la du al la tri gamo sed finante ĝis ĉi tie en la kvar al kvin gamo. 571 00:28:04,100 --> 00:28:05,440 Tio estas kion ni vere serĉas. 572 00:28:05,440 --> 00:28:09,590 Kaj ni memoru la delta ke vi eksponi inter semajno nulo kaj semajnon 573 00:28:09,590 --> 00:28:12,170 12 kiam mi faras notoj. 574 00:28:12,170 --> 00:28:16,380 Ne gravas al ni absolute kiom vi ĝuste komence se via 575 00:28:16,380 --> 00:28:19,330 trajektorio estas ja supren kaj forta. 576 00:28:19,330 --> 00:28:24,000 >> Akademia honesteco - do mi metis sur mia pli serioza voĉo por nur momento. 577 00:28:24,000 --> 00:28:28,510 Do tiu kurso havas la distingon de sendi pli da studentoj ol iu ajn alia 578 00:28:28,510 --> 00:28:30,950 en la historio por la anonco tabulo, mi kredas. 579 00:28:30,950 --> 00:28:34,220 Ni havas ia perdis grafo en ĉi punkto de kiom ofte tio okazas. 580 00:28:34,220 --> 00:28:37,090 Kaj tio ne estas ĉar studentoj en 50 Estas neniu pli malhonesta ol iliaj 581 00:28:37,090 --> 00:28:38,690 samklasanoj aliloke. 582 00:28:38,690 --> 00:28:42,800 Sed realigi, ankaŭ, ke ni estas tre bona ĉe detekti ĉi tia afero. 583 00:28:42,800 --> 00:28:45,920 >> Kaj tiu estas la avantaĝo ke komputiko klaso havas en ni 584 00:28:45,920 --> 00:28:49,110 povas kaj ni komparu ĉiuj studentoj problemo aroj paro-saĝa kontraŭ ĉiu 585 00:28:49,110 --> 00:28:51,470 aliaj, ne nur ĉi tiu jaro sed ĉiuj antaŭaj jaroj. 586 00:28:51,470 --> 00:28:55,080 Ni havas la kapablecon, kiel studentoj en la klaso, al Google kaj trovi kodo 587 00:28:55,080 --> 00:28:57,440 en lokoj kiel GitHub kaj diskuto forumoj. 588 00:28:57,440 --> 00:29:00,840 Estas absolute solvojn al CS50 la p-aroj ŝvebantan tie. 589 00:29:00,840 --> 00:29:02,710 Sed se vi povas trovi ilin, ni povas trovi ilin. 590 00:29:02,710 --> 00:29:07,130 Kaj ĉio ĉi estas tre aŭtomatigita kaj facila kaj malĝoja por ni trovi. 591 00:29:07,130 --> 00:29:10,990 >> Sed mi volas substreki, ankaŭ, ke la Kompreneble la akademia honesteco politiko estas 592 00:29:10,990 --> 00:29:13,960 tre intencis esti tre la malo de tiu spirito. 593 00:29:13,960 --> 00:29:17,506 Fakte, ĉi tiu jaro ni _rephrased_ aĵoj en la Syllabus esti ĉi tio, punkto 594 00:29:17,506 --> 00:29:19,790 dot dot, kun pli detale en la Syllabus. 595 00:29:19,790 --> 00:29:22,860 Sed la komunajn temo en la kurso vere estas esti racia. 596 00:29:22,860 --> 00:29:26,160 Ni agnoskas ke ekzistas signifa kvanto de pedagogia 597 00:29:26,160 --> 00:29:30,550 valoro en kunlaborante, iugrade, kun samklasanoj, per kiu vi 598 00:29:30,550 --> 00:29:33,700 du aŭ vi tri aŭ vi estas pli staris blanka tabulo 599 00:29:33,700 --> 00:29:35,670 whiteboarding, por tiel paroli, viaj ideoj - 600 00:29:35,670 --> 00:29:39,480 skribo el _pseudocode_ en pentraĵoj, diagramming kio devus esti se Mario 601 00:29:39,480 --> 00:29:41,350 vi estis skribi ĝin unue en _pseudocode_. 602 00:29:41,350 --> 00:29:43,240 Kio devus la avida algoritmo - 603 00:29:43,240 --> 00:29:46,100 kial ĝi kondutas po problemo aroj unu? 604 00:29:46,100 --> 00:29:50,440 >> Kaj tiel rimarkas ke konduto ke ni kuraĝigas estas tre 605 00:29:50,440 --> 00:29:51,470 multe kune tiujn liniojn. 606 00:29:51,470 --> 00:29:53,890 Kaj en la Syllabus, vi vidos tutan faskon da kugloj sub 607 00:29:53,890 --> 00:29:57,740 racia kategorio kaj ne racia kategorio kiu helpas nin helpos 608 00:29:57,740 --> 00:30:00,740 vi enpaki vian menson ĉirkaŭ kie ni desegni tiun linion. 609 00:30:00,740 --> 00:30:04,340 Kaj ĝenerale, decan regulo de thumb estas ke se vi luktas por solvi 610 00:30:04,340 --> 00:30:07,990 iu cimo kaj via amiko aŭ samklasano sidas apud vi, estas 611 00:30:07,990 --> 00:30:11,530 racia por vi montros al li aŭ ŝi via kodo kaj diru, hej, vi povas helpi 612 00:30:11,530 --> 00:30:13,700 mi diveni kio okazas malĝusta ĉi tie? 613 00:30:13,700 --> 00:30:17,110 >> Ni ne tipe brakumi la kontraŭa flanko. 614 00:30:17,110 --> 00:30:20,730 Ĝi ne estas korekta respondo por via amiko aŭ samklasano tie diri, oh, 615 00:30:20,730 --> 00:30:22,510 nur rigardi mia kaj figuro ĝin el tiu. 616 00:30:22,510 --> 00:30:24,400 Tio estas speco de neracia. 617 00:30:24,400 --> 00:30:27,750 Sed havante iun alian, alia cerbo, alia paro de okuloj rigardu 618 00:30:27,750 --> 00:30:31,620 via ekrano aŭ rigardi vian kodo kaj diru, ĉu vi certas ke vi volas 619 00:30:31,620 --> 00:30:32,760 havi buklo tie? 620 00:30:32,760 --> 00:30:34,800 Aŭ ĉu vi certas ke vi volas ke punktokomo tie? 621 00:30:34,800 --> 00:30:37,090 Aŭ oh, ke erarmesaĝo signifas ĉi. 622 00:30:37,090 --> 00:30:39,580 Tiuj estas tre raciaj kaj kuraĝigis kondutoj. 623 00:30:39,580 --> 00:30:44,010 >> La kazoj, al kiu mi estis aludante antaŭaj boli malsupren al kiam studentoj estas 624 00:30:44,010 --> 00:30:47,350 malfrua nokto farante malriĉa juĝo decidoj kaj emailing sian kodon al 625 00:30:47,350 --> 00:30:50,130 iu alia aŭ simple dirante: ĉi tie, ĝi estas en Dropbox aŭ 626 00:30:50,130 --> 00:30:51,610 Googling malfrua nokto. 627 00:30:51,610 --> 00:30:54,880 Kaj tiel mi kuraĝigas kaj petegas de vi, se vi havas tiuj nepra 628 00:30:54,880 --> 00:30:58,450 momentoj de streso, vi batigxante supren kontraŭ la limdato, vi ne havas malfrue 629 00:30:58,450 --> 00:31:01,490 tago, de kiam ĝi estas jam vendredon en tiu punkto, retposxtu la kurso la kapojn aŭ 630 00:31:01,490 --> 00:31:02,330 min rekte. 631 00:31:02,330 --> 00:31:04,790 Diru, aŭskultu, mi estas ĉe mia rompi punkto ĉi tie. 632 00:31:04,790 --> 00:31:06,660 Ni havi konversacion kaj diveni ĝin. 633 00:31:06,660 --> 00:31:10,400 Recurriendo al la reto, aŭ iu alia ne racia konduto neniam estas la 634 00:31:10,400 --> 00:31:13,070 solvo, kaj tro da viaj samklasanoj ne plu estas ĉi tie 635 00:31:13,070 --> 00:31:15,150 kampuso pro tiu kompatinda juĝo. 636 00:31:15,150 --> 00:31:17,840 Sed ĝi estas tre facile jupo tiun linion. 637 00:31:17,840 --> 00:31:22,950 >> Kaj ĉi tie estas iom bildo por gajigi vin el Reddit tiel ke nun 638 00:31:22,950 --> 00:31:25,720 ĉiu estos bone. 639 00:31:25,720 --> 00:31:30,210 >> Tiel rapida recap do de kie ni lasis. 640 00:31:30,210 --> 00:31:33,690 Do pasintsemajne, memoru ke ni enkondukas kondiĉoj, ne en Scratch 641 00:31:33,690 --> 00:31:34,880 sed en C tiu tempo. 642 00:31:34,880 --> 00:31:38,300 Kaj estis iu nova sintakso sed vere neniu novajn ideojn per si mem. 643 00:31:38,300 --> 00:31:42,630 Ni havis Buleaj esprimoj, ke ni povus aŭ kune kun du vertikalaj 644 00:31:42,630 --> 00:31:46,490 stangoj aŭ kaj kune kun du ampersands, dirante, ke tiel la maldekstra 645 00:31:46,490 --> 00:31:49,990 kaj la rajto devas esti vera por ĉi ekzekuti. 646 00:31:49,990 --> 00:31:53,150 Tiam ni havis ŝaltiloj, kion ni rigardis ĉe mallonge, sed mi proponas estas vere 647 00:31:53,150 --> 00:31:56,830 nur malsama sintakso por atingi la sama speco de golo se vi konas en 648 00:31:56,830 --> 00:31:59,270 antaŭi kion via kazoj tuj estos. 649 00:31:59,270 --> 00:32:00,160 >> Ni rigardis maŝojn. 650 00:32:00,160 --> 00:32:03,340 A por buklo estas eble la plej ofta, aŭ almenaŭ kiu la homo 651 00:32:03,340 --> 00:32:05,330 tipe atingi por instinkte. 652 00:32:05,330 --> 00:32:08,240 Kvankam ĝi aspektas iom kripta, vi vidos multajn, multajn ekzemplojn de tiu 653 00:32:08,240 --> 00:32:11,590 antaŭ longe, kiel vi havas Jam fine de la pasinta semajno. 654 00:32:11,590 --> 00:32:14,280 Dum cikloj povas simile atingi la saman aferon. 655 00:32:14,280 --> 00:32:17,550 Sed se vi volas fari ajnan incrementation aŭ ĝisdatigon de 656 00:32:17,550 --> 00:32:20,230 variablo valoroj, vi devas fari ĝin pli permane ol la 657 00:32:20,230 --> 00:32:22,440 por buklo antaŭ permesas. 658 00:32:22,440 --> 00:32:25,310 Kaj tiam ekzistas la do-dum buklo, kiu permesas al ni fari ion, je 659 00:32:25,310 --> 00:32:28,460 almenaŭ unufoje dum ion alia estas vera. 660 00:32:28,460 --> 00:32:31,550 Kaj jen estas aparte bona por programoj aŭ por ludoj, kie vi volas 661 00:32:31,550 --> 00:32:33,810 instigi la uzanto por io almenaŭ unufoje. 662 00:32:33,810 --> 00:32:37,110 Kaj tiam se li aŭ ŝi ne kunlabori, vi eble volas fari ĝin 663 00:32:37,110 --> 00:32:38,420 denove kaj denove. 664 00:32:38,420 --> 00:32:41,270 >> Kun variabloj, dume, ni havis linioj de kodo kiel tiu, kiu povus 665 00:32:41,270 --> 00:32:41,950 esti du linioj. 666 00:32:41,950 --> 00:32:44,830 Vi povus deklari int nomata vendotablo, punktokomo. 667 00:32:44,830 --> 00:32:47,660 Aŭ vi povas simple deklari kaj difini ĝin, por tiel diri. 668 00:32:47,660 --> 00:32:49,950 Donu ĝin valoro al la sama tempo. 669 00:32:49,950 --> 00:32:51,890 >> Kaj poste laste, ni parolis pri funkcioj. 670 00:32:51,890 --> 00:32:54,270 Kaj tio estis bela ekzemplo en la senso kiu ilustras 671 00:32:54,270 --> 00:32:55,840 du tipoj de funkcioj. 672 00:32:55,840 --> 00:32:59,030 Unu estas GetString (), kiu, denove, gets ĉenon de la uzanto. 673 00:32:59,030 --> 00:33:02,040 Sed GetString () estas speco de interesa, Kiom ni uzis ĝin, 674 00:33:02,040 --> 00:33:05,620 ĉar ni ĉiam uzis ĝin kun iun sur la maldekstra flanko de 675 00:33:05,620 --> 00:33:06,600 egalsigno. 676 00:33:06,600 --> 00:33:09,830 Tio estas ke GetString () redonas valoron. 677 00:33:09,830 --> 00:33:11,970 Denove, kompreneble, cxeno. 678 00:33:11,970 --> 00:33:15,130 Kaj poste sur la maldekstra flanko, ni estas simple savante ke kordo ene de 679 00:33:15,130 --> 00:33:16,580 variablo vokis nomon. 680 00:33:16,580 --> 00:33:21,100 >> Tiu estas malsama, iusence, de printf ĉar printf, almenaŭ en nia 681 00:33:21,100 --> 00:33:23,540 uzado ĉi tie, ne revenas nenion. 682 00:33:23,540 --> 00:33:24,960 Kiel flanken, ĝi faras reveno ion. 683 00:33:24,960 --> 00:33:26,380 Ni nur ne gravas kion ĝi estas. 684 00:33:26,380 --> 00:33:29,090 Sed ĝi havas kio estas nomata flanko efekton. 685 00:33:29,090 --> 00:33:31,840 Kaj kio estas tiu flanko efekto en ĉiu kazo ni vidis tiel multe? 686 00:33:31,840 --> 00:33:34,720 Kion printf fari? 687 00:33:34,720 --> 00:33:37,780 Ĝi presas ion al la ekrano, ekranoj teksto aŭ nombroj aŭ iu 688 00:33:37,780 --> 00:33:38,380 en la ekrano. 689 00:33:38,380 --> 00:33:41,170 Kaj tio estas ĝuste konsiderata kromefikon ĉar ĝi ne vere disdonado 690 00:33:41,170 --> 00:33:41,900 ĝin al mi. 691 00:33:41,900 --> 00:33:44,770 Ne respondon ene de nigra skatolo, ke mi povas tiam 692 00:33:44,770 --> 00:33:46,130 atingi en kaj kroĉi. 693 00:33:46,130 --> 00:33:49,160 Ĝi simple fari ĝin sur ĝia propra, multe kiel Colton estis ŝtopita en tiun 694 00:33:49,160 --> 00:33:52,560 nigra skatolo pasintsemajne, kaj li iel magie estis desegni sur la tabulo 695 00:33:52,560 --> 00:33:54,500 sen mi vere implikitaj. 696 00:33:54,500 --> 00:33:55,560 Tio estus kromefikon. 697 00:33:55,560 --> 00:33:59,100 Sed se mi efektive devis atingi denove en ĉi tie kaj diru: Ho, jen estas la kordo 698 00:33:59,100 --> 00:34:02,040 de la uzanto, ke estus esti reveno valoro. 699 00:34:02,040 --> 00:34:05,650 >> Kaj ĝis nun ni uzas nur funkciojn ke aliaj homoj skribis. 700 00:34:05,650 --> 00:34:09,219 Sed ni povas efektive fari tiujn specojn de aĵoj ni mem. 701 00:34:09,219 --> 00:34:12,730 Do mi tuj iras en la CS50 aparato denove. 702 00:34:12,730 --> 00:34:16,020 Lasu min fermi la langeton ke ni estis malfermita antaŭ momento. 703 00:34:16,020 --> 00:34:18,530 Kaj lasu min antaŭeniri kaj krei novan dosieron. 704 00:34:18,530 --> 00:34:22,400 Kaj mi tuj iros antaŭen kaj nomas tiun unu positive.c. 705 00:34:22,400 --> 00:34:24,770 Do mi volas fari ion kun pozitivaj nombroj tie. 706 00:34:24,770 --> 00:34:27,219 Do mi tuj iros antaŭen kaj faru int - 707 00:34:27,219 --> 00:34:28,000 sorry - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Ni ne faras tiun saman eraro kiel antaŭe. 710 00:34:34,280 --> 00:34:40,020 Int main (void), malfermita krispa streĉa, fermita krispa streĉa. 711 00:34:40,020 --> 00:34:41,639 >> Kaj nun mi volas fari la sekvajn. 712 00:34:41,639 --> 00:34:44,600 Mi volas skribi programon kiu insistas, ke la uzanto donas 713 00:34:44,600 --> 00:34:46,770 min pozitiva entjero. 714 00:34:46,770 --> 00:34:50,969 Do ne ekzistas GetPositiveInt funkcio en la CS50 biblioteko. 715 00:34:50,969 --> 00:34:52,610 Estas nur GetInt (). 716 00:34:52,610 --> 00:34:55,790 Sed tio estas okej ĉar mi havas la konstruoj kun kiu mi povas postuli 717 00:34:55,790 --> 00:34:59,360 iom pli limigo sur tiu valoro. 718 00:34:59,360 --> 00:35:00,990 Mi povus fari ion kiel ĉi tio. 719 00:35:00,990 --> 00:35:02,780 >> Do int n - 720 00:35:02,780 --> 00:35:04,920 kaj se vi tajpas kune, simple realigi Mi tuj iros tien kaj 721 00:35:04,920 --> 00:35:06,430 ŝanĝi iujn aĵojn en momento - 722 00:35:06,430 --> 00:35:09,960 tiel int n egalas GetInt (). 723 00:35:09,960 --> 00:35:11,780 Kaj tio tuj metos an int ene de n. 724 00:35:11,780 --> 00:35:13,830 Kaj lasu min esti pli priskriba. 725 00:35:13,830 --> 00:35:23,270 Permesu min diri ion kiel Mi postulas ke vi donu al mi pozitiva entjero. 726 00:35:23,270 --> 00:35:23,550 >> Ĉio bone. 727 00:35:23,550 --> 00:35:25,250 Do nur iom da instrukcioj. 728 00:35:25,250 --> 00:35:26,270 Kaj nun kion mi povas fari? 729 00:35:26,270 --> 00:35:29,840 Nu, mi jam scias de mia simpla kondiĉoj aŭ branĉoj, samkiel mi 730 00:35:29,840 --> 00:35:36,100 havis en Scratch, mi povus diri ion kiel se n estas malpli ol aŭ egala al 731 00:35:36,100 --> 00:35:44,460 nulo, tiam mi volas fari ion kiel, kiu ne estas pozitiva. 732 00:35:44,460 --> 00:35:45,560 Kaj tiam mi povus fari - 733 00:35:45,560 --> 00:35:47,310 Bone, sed mi vere volas ke int. 734 00:35:47,310 --> 00:35:52,020 Do mi povis iri tien kaj mi povis speco de kopio tiu kaj indent ĉi. 735 00:35:52,020 --> 00:35:52,570 Kaj tiam, OK. 736 00:35:52,570 --> 00:35:56,990 Do se n estas malpli ol aŭ egala al nulo fari ĉi tion. 737 00:35:56,990 --> 00:35:58,900 >> Nun, kio okazos se la uzanto ne kunlaboras? 738 00:35:58,900 --> 00:36:01,560 Nu, tiam mi tuj pruntepreni ĉi tie. 739 00:36:01,560 --> 00:36:03,130 Kaj poste mi iros tien kaj tie kaj tie. 740 00:36:03,130 --> 00:36:06,420 Do tiu estas klare ne la solvo, ĉu ne? 741 00:36:06,420 --> 00:36:07,810 Ĉar ne estas fino en vido. 742 00:36:07,810 --> 00:36:13,100 Se mi volas postuli ke la uzanto donas min pozitiva entjero, mi povas 743 00:36:13,100 --> 00:36:14,150 reale preni la int. 744 00:36:14,150 --> 00:36:15,620 Mi povas do kontroli, ke int. 745 00:36:15,620 --> 00:36:18,570 Sed tiam mi volas kontroli ĝin denove kaj kontroli ĝin denove kaj kontroli ĝin denove. 746 00:36:18,570 --> 00:36:21,680 Do evidente, kio estas la bona konstrui esti uzanta ĉi tie? 747 00:36:21,680 --> 00:36:22,840 Bone, do ia buklo. 748 00:36:22,840 --> 00:36:25,430 >> Do mi tuj forigi de preskaŭ ĉiuj ĉi. 749 00:36:25,430 --> 00:36:27,320 Kaj mi volas ricevas tiun int almenaŭ unufoje. 750 00:36:27,320 --> 00:36:28,890 Do mi intencis diri do - 751 00:36:28,890 --> 00:36:32,110 kaj mi revenos al la dum en nur momento - 752 00:36:32,110 --> 00:36:33,050 nun, faru kion? 753 00:36:33,050 --> 00:36:35,860 Mi tuj faros int n gets GetInt (). 754 00:36:35,860 --> 00:36:36,080 Akcepti. 755 00:36:36,080 --> 00:36:37,250 Por ke estas sufiĉe bona. 756 00:36:37,250 --> 00:36:39,750 Kaj nun kiom ofte faras Mi volas fari ĉi tion? 757 00:36:39,750 --> 00:36:45,770 >> Permesu al mi metis la printf ene de la ciklo do mi povas postuli denove kaj denove, 758 00:36:45,770 --> 00:36:46,740 se bezono esti. 759 00:36:46,740 --> 00:36:49,720 Kaj kion mi volas tiun dum kondiĉo por fari? 760 00:36:49,720 --> 00:36:53,870 Mi volas daŭre fari ĉi dum kio estas la kazo? 761 00:36:53,870 --> 00:36:54,125 Jes. 762 00:36:54,125 --> 00:36:55,390 N estas malpli ol aŭ egala al nulo. 763 00:36:55,390 --> 00:36:58,180 Do jam, ni signife purigis tiu kodo supren. 764 00:36:58,180 --> 00:37:00,700 Ni prunteprenis tre simpla konstrui - la do-dum buklo. 765 00:37:00,700 --> 00:37:04,690 Mi ŝtelis nur la gravaj linioj de kodo ke mi komencis kopiante kaj 766 00:37:04,690 --> 00:37:05,960 intergluajn, kio ne estis saĝa. 767 00:37:05,960 --> 00:37:09,790 Kaj tiel nun mi iros al reale algluota ĝin ĉi tie kaj nur faru tion unufoje. 768 00:37:09,790 --> 00:37:12,990 >> Kaj nun kion mi volas fari en la fino de tiu programo? 769 00:37:12,990 --> 00:37:16,810 Mi nur diras, iu simpla kiel, dankon pro la - kaj 770 00:37:16,810 --> 00:37:18,980 Mi tion faros% i por int - 771 00:37:18,980 --> 00:37:23,270 backslash n, komo, kaj poste kontaktŝtopilo en n, punktokomo. 772 00:37:23,270 --> 00:37:23,910 >> Ĉio bone. 773 00:37:23,910 --> 00:37:27,290 Do ni vidu kio okazas nun kiam mi kuros ĉi tiu programo. 774 00:37:27,290 --> 00:37:30,600 Mi tuj iros antaŭen kaj Kion fari pozitiva. 775 00:37:30,600 --> 00:37:30,880 Malbenita. 776 00:37:30,880 --> 00:37:31,600 Kelkaj eraroj. 777 00:37:31,600 --> 00:37:32,960 Do lasu min rulumi reen ĝis la unua. 778 00:37:32,960 --> 00:37:34,020 Ne funkcias tra ili malantaŭen. 779 00:37:34,020 --> 00:37:37,000 Labori per ili de supre malsupren por ke ili ne akvofalo kaj nur 780 00:37:37,000 --> 00:37:38,630 unu afero estu malbone. 781 00:37:38,630 --> 00:37:42,532 Implicitan deklaron de funkcio GetInt (). 782 00:37:42,532 --> 00:37:43,020 Jes. 783 00:37:43,020 --> 00:37:44,420 Do tio ne sufiĉas. 784 00:37:44,420 --> 00:37:46,760 Mi ia faris la saman eraron sed iom malsama ĉi tiu tempo. 785 00:37:46,760 --> 00:37:51,940 Mi bezonas ne nur inkluzivas stdio.h sed ankaŭ cs50.h, kiu inkludas la 786 00:37:51,940 --> 00:37:56,770 tn deklaroj de akiri int, kiu instrui la aparato, nek instruas 787 00:37:56,770 --> 00:37:58,760 C kion GetInt () estas. 788 00:37:58,760 --> 00:37:59,550 >> Do mi resave. 789 00:37:59,550 --> 00:38:02,040 Mi tuj ignori la aliaj eraroj ĉar mi tuj esperas, ke ili estas 790 00:38:02,040 --> 00:38:05,210 iel rilataj al la eraro Mi jam fiksita. 791 00:38:05,210 --> 00:38:08,710 Do lasu min antaŭeniri kaj recompilar kun fari pozitivan, Enter. 792 00:38:08,710 --> 00:38:09,020 Malbenita. 793 00:38:09,020 --> 00:38:09,985 Tri eraroj, silentu. 794 00:38:09,985 --> 00:38:12,650 Lasu min rulumi supren al la unua. 795 00:38:12,650 --> 00:38:14,320 Neuzataj variablo n. 796 00:38:14,320 --> 00:38:15,850 Ni ne vidis ĉi tion antaŭe. 797 00:38:15,850 --> 00:38:17,200 Kaj jen, ankaŭ, estas iom enigmaj. 798 00:38:17,200 --> 00:38:18,850 Ĉi tiu estas la eliro de la tradukilo. 799 00:38:18,850 --> 00:38:23,610 Kaj kion tio emfazita linio tie - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 diras, ĝi estas jene on line naŭ de positive.c, je la 13a karaktero, 801 00:38:28,960 --> 00:38:31,510 13-a kolumno, vi faris tiun eraron. 802 00:38:31,510 --> 00:38:34,230 >> Kaj en aparta, ĝi estas diri mi neuzitaj variablo n. 803 00:38:34,230 --> 00:38:35,790 Do vidu - 804 00:38:35,790 --> 00:38:37,150 linio naŭ. 805 00:38:37,150 --> 00:38:40,430 Mi uzas n en la senco ke Mi donas al ĝi valoron. 806 00:38:40,430 --> 00:38:44,200 Sed kion la tradukilo ne ŝatas estas ke mi ne ŝajne uzante ĝin. 807 00:38:44,200 --> 00:38:45,560 Sed atendu momenton, mi uzas ĝin. 808 00:38:45,560 --> 00:38:48,170 En linio 11, Mi uzas ĝin ĉi tie. 809 00:38:48,170 --> 00:38:52,430 Sed se mi rulumas malsupren pli ĉe positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 tiel ankaux en linio 11, karaktero 12, la tradukilo estas telling me, uzo de 811 00:38:56,230 --> 00:38:58,670 nedeklarita ensalutilo n. 812 00:38:58,670 --> 00:39:02,760 >> Do nedeklarita rimedoj mi devas ne specifita kiel 813 00:39:02,760 --> 00:39:04,970 variablo kun datumtipo. 814 00:39:04,970 --> 00:39:05,500 Sed atendu momenton. 815 00:39:05,500 --> 00:39:09,150 Mi faris ekzakte ke en linio naŭ. 816 00:39:09,150 --> 00:39:11,100 Do iu vere konfuzita tie. 817 00:39:11,100 --> 00:39:14,900 Ĝi estas ĉu mi aŭ la tradukilo ĉar en linio naŭ, denove, mi deklaras kun 818 00:39:14,900 --> 00:39:18,650 int n, kaj mi atribui al ĝi la redoni valoro de GetInt (). 819 00:39:18,650 --> 00:39:22,930 Tiam Mi uzas tiu variablo n en linio 11 kaj kontrolado se ĝia valoro estas malpli 820 00:39:22,930 --> 00:39:24,050 ol aŭ egala al nulo. 821 00:39:24,050 --> 00:39:27,430 Sed tio ŝajne estas malbona kaj rompitaj kial? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Diru ĝin denove? 824 00:39:32,490 --> 00:39:35,690 >> Ha, mi devas deklari n antaŭ enirante la banton. 825 00:39:35,690 --> 00:39:36,370 Sed kial? 826 00:39:36,370 --> 00:39:39,830 Mi volas diri, ni nur proponis iom antaŭe ke ĝi estas bone por deklari variablojn 827 00:39:39,830 --> 00:39:43,600 ĉiuj laŭ unu linio, kaj poste atribui al ili iom da valoro. 828 00:39:43,600 --> 00:39:46,790 Tutmonda variablo - ni revenos al tiu ideo en nur momento. 829 00:39:46,790 --> 00:39:48,690 Kial vi volas, ke mi metis ĝin ekster la buklo? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Ĝi estas. 832 00:40:03,830 --> 00:40:06,780 Ekzakte. 833 00:40:06,780 --> 00:40:09,610 >> Do, kvankam, iom _counterintuitive_, lasu min resumi. 834 00:40:09,610 --> 00:40:13,510 Kiam vi rakontos n ene de la do bloko tie - 835 00:40:13,510 --> 00:40:16,320 specife ene de tiuj buklaj krampoj - 836 00:40:16,320 --> 00:40:19,210 ke variablo n havas kio estas vokis medio - 837 00:40:19,210 --> 00:40:23,210 nerilataj al nia komentario sistemo en la Kompreneble - sed havas atingon tio 838 00:40:23,210 --> 00:40:25,190 limigita al tiuj buklaj krampoj. 839 00:40:25,190 --> 00:40:28,460 En aliaj vortoj, tipe se vi rakontos variablo ene aro de 840 00:40:28,460 --> 00:40:33,370 krispa krampoj, ke variablo nur ekzistas ene de tiuj buklaj krampoj. 841 00:40:33,370 --> 00:40:37,320 Do per tiu logiko sola, kvankam Mi jam deklaris n en linio naŭjaraĝa, 842 00:40:37,320 --> 00:40:41,910 esence malaperas de atingo, malaperas el la memoro, por tiel diri, 843 00:40:41,910 --> 00:40:43,370 por kiam mi batis linio 11. 844 00:40:43,370 --> 00:40:47,370 Ĉar linio 11, bedaŭrinde, estas ekstere de tiuj buklaj krampoj. 845 00:40:47,370 --> 00:40:51,540 >> Do mi bedaŭrinde ne povas fiksi tion per reiri al kion mi faris antaŭe. 846 00:40:51,540 --> 00:40:53,370 Vi povus unue fari ĉi tion. 847 00:40:53,370 --> 00:40:56,370 Sed kion vi nun ne fari cikle? 848 00:40:56,370 --> 00:40:58,260 Vi evidente ne alveni la int cikle. 849 00:40:58,260 --> 00:41:01,320 Do ni povas lasi la GetInt (), kaj ni devus lasi la GetInt () ene de la 850 00:41:01,320 --> 00:41:04,420 buklo ĉar tio kion ni volas Pester la uzanto por denove kaj denove. 851 00:41:04,420 --> 00:41:08,660 Sed ĝi sufiĉas iri ĝis linio, ni diru, ses. 852 00:41:08,660 --> 00:41:10,150 Int n, punktokomo. 853 00:41:10,150 --> 00:41:12,990 Ne donu al ĝi valoron ankoraŭ ĉar vi ne bezonas nur ankoraŭ. 854 00:41:12,990 --> 00:41:16,220 >> Sed nun ĉi tie, avizo - tio Estus tre facile erari. 855 00:41:16,220 --> 00:41:19,440 Mi ne volas ombro mia antaŭa deklaro de n. 856 00:41:19,440 --> 00:41:22,830 Mi volas uzi la n ke reale ekzistas. 857 00:41:22,830 --> 00:41:25,780 Kaj tiel nun en linio 10, Mi atribuas n valoron. 858 00:41:25,780 --> 00:41:28,580 Sed en linio ses, mi deklaras n. 859 00:41:28,580 --> 00:41:32,940 Ankaux mi aŭ mi povas ne uzas ĝin en la linio 12 nun? 860 00:41:32,940 --> 00:41:37,120 Mi ne povas ĉar inter kiuj krispa krampoj estas n deklaris nun? 861 00:41:37,120 --> 00:41:38,770 La unu ĝis ĉi tie sur linio kvin. 862 00:41:38,770 --> 00:41:40,330 Al unu tie sur linio 14. 863 00:41:40,330 --> 00:41:49,770 Do, se mi nun malzomi, krom cxi tiu dosiero, iru apogi en kaj kuri fari pozitivan, ĝi 864 00:41:49,770 --> 00:41:50,820 kompilis ĉi tiu tempo. 865 00:41:50,820 --> 00:41:51,940 Do jen jam progreso. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Pozitiva, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Mi postulas ke vi donu al mi pozitiva entjero. 868 00:41:56,060 --> 00:41:57,750 Negativaj 1. 869 00:41:57,750 --> 00:41:59,020 Negativaj 2. 870 00:41:59,020 --> 00:42:00,680 Negativaj 3. 871 00:42:00,680 --> 00:42:01,760 Nulo. 872 00:42:01,760 --> 00:42:03,000 Unu. 873 00:42:03,000 --> 00:42:05,130 Kaj dankon pro la unu estas kio nun presita. 874 00:42:05,130 --> 00:42:07,400 >> Lasu min provi ion alian, pro scivolemo. 875 00:42:07,400 --> 00:42:09,600 Mi lin diris al enigo entjero. 876 00:42:09,600 --> 00:42:12,870 Sed kion se mi anstataŭ entajpi ŝafido? 877 00:42:12,870 --> 00:42:14,460 Do vi nun vidas alian prompto - 878 00:42:14,460 --> 00:42:15,350 reprovi. 879 00:42:15,350 --> 00:42:17,670 Sed nenie en mia kodo mi ja skribis reprovi. 880 00:42:17,670 --> 00:42:22,320 Do kie, supozeble, estas ĉi reprovi instigas devenante, vi dirus? 881 00:42:22,320 --> 00:42:23,540 Jes, de GetInt () mem. 882 00:42:23,540 --> 00:42:26,650 Do unu el la aĵoj CS50 bastono de faras por vi, almenaŭ en tiuj unuaj kelkaj 883 00:42:26,650 --> 00:42:30,400 semajnoj, estas ni skribis kelkajn kvanto de eraro kontrolanta por certigi, ke se 884 00:42:30,400 --> 00:42:34,260 vi nomas GetInt (), vi volas almenaŭ reiri al int de la uzanto. 885 00:42:34,260 --> 00:42:35,460 Vi ne ricevos ĉenon. 886 00:42:35,460 --> 00:42:36,440 Vi ne akiros char. 887 00:42:36,440 --> 00:42:39,660 Vi ne ricevos ion alie tute. 888 00:42:39,660 --> 00:42:40,510 Vi ricevos la int. 889 00:42:40,510 --> 00:42:41,890 >> Nun, ĝi ne povus esti pozitiva. 890 00:42:41,890 --> 00:42:42,770 Ĝi povus ne esti negativa. 891 00:42:42,770 --> 00:42:44,550 Ni faru garantiojn ĉirkaŭ tiu. 892 00:42:44,550 --> 00:42:48,960 Sed ni Pester la uzanto reprovi, reprovi, reprovi ĝis li aŭ ŝi vere 893 00:42:48,960 --> 00:42:49,810 kunlaboru. 894 00:42:49,810 --> 00:42:53,085 Simile, se mi faras 1.23, kiu ne estas int. 895 00:42:53,085 --> 00:42:58,400 Sed se mi tajpas en, ekzemple, 50, kiu donas al mi la valoron kiun mi volis. 896 00:42:58,400 --> 00:42:59,050 >> Ĉio bone. 897 00:42:59,050 --> 00:43:01,380 Do ne estas malbona. 898 00:43:01,380 --> 00:43:04,780 Demandojn sur kio ni ĵus faris? 899 00:43:04,780 --> 00:43:07,930 La ŝlosilo takeaway esti, esti klara, ne tiel la banton, kiun ni vidis 900 00:43:07,930 --> 00:43:10,880 antaŭ ol eĉ se ni ne vere uzas ĝin, sed la demando de medio, kie 901 00:43:10,880 --> 00:43:17,045 variablojn nur povas nur povas uzi ene de iu specifa medio. 902 00:43:17,045 --> 00:43:19,830 >> Bone, lasu min alparoli la sugesto vi faris pli frue, tiu de 903 00:43:19,830 --> 00:43:20,860 malloka variablo. 904 00:43:20,860 --> 00:43:24,880 Kiel flanken, rezultas ke alia solvon al tiu problemo, sed 905 00:43:24,880 --> 00:43:28,880 tipe malĝusta solvo aŭ oni malbone desegnita solvo, estas 906 00:43:28,880 --> 00:43:31,670 deklari vian variablon kiel kio estas nomas tutmonda variablo. 907 00:43:31,670 --> 00:43:34,610 Nun mi estas speco de seksperforti mia difino de medio ĉar estas 908 00:43:34,610 --> 00:43:37,680 neniu krispa krampoj ĉe la plejsupro kaj la tre fundo de dosiero. 909 00:43:37,680 --> 00:43:40,190 Sed la implikaĵo de tiu estas, ke nun en linio kvar, 910 00:43:40,190 --> 00:43:41,710 n estas malloka variablo. 911 00:43:41,710 --> 00:43:44,460 Kaj kiel la nomo implicas, estas nur alirebla ĉie. 912 00:43:44,460 --> 00:43:45,790 >> Nulo vere havas tiujn. 913 00:43:45,790 --> 00:43:48,650 Se vi uzas variablon, eble vi memoras vi devis elekti se ĝi estas por 914 00:43:48,650 --> 00:43:50,780 ĉi sprite aŭ por ĉiuj spiritoj. 915 00:43:50,780 --> 00:43:54,270 Nu, ĉiuj spiritoj estas nur la pli klara maniero diri tutmonda. 916 00:43:54,270 --> 00:43:55,520 Jes? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ha, vere bona demando. 919 00:44:10,990 --> 00:44:14,310 >> Do memoru, ke en la unua versio de miaj kodon, kiam mi malĝuste 920 00:44:14,310 --> 00:44:17,700 deklaris kaj difinis n en linio naŭ - 921 00:44:17,700 --> 00:44:19,980 Mi deklaris ĝin kiel variablo kaj mi donis al ĝi valoron kun 922 00:44:19,980 --> 00:44:21,160 la atribuo operatoro - 923 00:44:21,160 --> 00:44:22,520 ĉi tiu donis al mi du erarojn. 924 00:44:22,520 --> 00:44:26,560 Unu, la fakto ke n ne estis uzata, kaj du, ke en linion 11 925 00:44:26,560 --> 00:44:27,770 ĝi simple ne estis deklarita. 926 00:44:27,770 --> 00:44:31,120 Do la unua mi ne adreso de la epoko. 927 00:44:31,120 --> 00:44:35,130 Ĝi ne estas strikte eraron deklari variablo sed ne uzis ĝin. 928 00:44:35,130 --> 00:44:38,540 Sed unu el la aferoj ni faris en la CS50 aparato, intence, 929 00:44:38,540 --> 00:44:43,340 pedagogie, estas ni cranked ĝis la atendoj de la tradukilo fari 930 00:44:43,340 --> 00:44:46,970 certa, ke vi faras tion ne nur korekte sed vere ĝuste. 931 00:44:46,970 --> 00:44:51,520 >> Ĉar se vi deklari variablon kiel n kaj neniam uzas ĝin, aŭ uzante ĝin 932 00:44:51,520 --> 00:44:53,700 ĝuste, tiam kio Estas ĝi faras tie? 933 00:44:53,700 --> 00:44:55,650 Ĝi vere utilas sen celo. 934 00:44:55,650 --> 00:44:58,980 Kaj estas tre facila tra la tempo, se vi Ne agordi vian propran komputilon en 935 00:44:58,980 --> 00:45:01,960 tiel, ke vi nur devas kodon kiu havas iom restaĵoj tie, restoj tie. 936 00:45:01,960 --> 00:45:04,390 Kaj tiam monatojn poste vi retrorigardas kaj vi estas kiel, kial estas tiu linio de 937 00:45:04,390 --> 00:45:05,060 kodo tie? 938 00:45:05,060 --> 00:45:07,940 Kaj se ne estas bona kialo, ne profitigas vin aŭ vian kolegoj 939 00:45:07,940 --> 00:45:10,650 laŭ la vojo al devas falpusxigxos sur ĝi tiam. 940 00:45:10,650 --> 00:45:12,540 >> Kiel flanken, kie estas ke devenante? 941 00:45:12,540 --> 00:45:16,410 Nu, memoru, ke ĉiufoje kiam ni kompilos programo, ĉiuj ĉi aferoj estas 942 00:45:16,410 --> 00:45:17,380 esti presita. 943 00:45:17,380 --> 00:45:18,350 Do ni revenos al ĉi tio. 944 00:45:18,350 --> 00:45:22,230 Sed denove, fari estas ilo kiu aŭtomatigas la procezo de kompili per 945 00:45:22,230 --> 00:45:24,830 kurante la reala tradukilo vokis clang. 946 00:45:24,830 --> 00:45:27,650 Tiu afero, ni fine vidas, havas fari kun elpuriganta kun speciala 947 00:45:27,650 --> 00:45:29,060 programo nomata la erarserĉilo. 948 00:45:29,060 --> 00:45:32,150 Ĉi tio havas al fari kun optimizando la kodo - pli en kiuj en estonteco. 949 00:45:32,150 --> 00:45:33,620 Std = C99 - 950 00:45:33,620 --> 00:45:37,870 ĉi nur signifas uzi la version de 1999 C. C jam pasis ĉirkaŭ eĉ pli longa ol 951 00:45:37,870 --> 00:45:40,830 tio, sed ili faris iujn bela ŝanĝojn 10 plus jarojn. 952 00:45:40,830 --> 00:45:42,690 >> Kaj jen la koncerna ones. 953 00:45:42,690 --> 00:45:45,880 Ni diras fari ion antaŭe estus estinta averto 954 00:45:45,880 --> 00:45:48,560 eraro neebligante la lernanto el kompili. 955 00:45:48,560 --> 00:45:51,400 Kaj muro pere fari tion por tuta amaso de aferoj, ne 956 00:45:51,400 --> 00:45:53,060 nur rilate al variabloj. 957 00:45:53,060 --> 00:45:54,700 Kaj tiam mi rulumas al la fino de ĉi tiu linio. 958 00:45:54,700 --> 00:45:56,430 Kaj ĉi tio, tro, ni fine revenu al. 959 00:45:56,430 --> 00:45:59,040 Tio estas evidente la nomo de la dosieron mi kompili. 960 00:45:59,040 --> 00:46:02,160 Tiu memoras la nomon de la dosiero Mi elirigi kiel la nomo 961 00:46:02,160 --> 00:46:04,070 de miaj runnable programo. 962 00:46:04,070 --> 00:46:08,970 Ĉi-lcs50 nur signifas uzi la CS50 biblioteko, kaj ajna nuloj kaj ke 963 00:46:08,970 --> 00:46:12,390 la bastono, skribis kaj kompilis pli frua ĉi tiu jaro, ili integras 964 00:46:12,390 --> 00:46:13,490 ilin en mian programon. 965 00:46:13,490 --> 00:46:16,130 >> Kaj neniu scias kion-lm, estas? 966 00:46:16,130 --> 00:46:18,150 Ĝi estas la matematika biblioteko, kiu estas nur tie eĉ se vi estas 967 00:46:18,150 --> 00:46:19,320 ne fari ajnan math. 968 00:46:19,320 --> 00:46:22,620 Ĝi simple aŭtomate havigis al ni por fari. 969 00:46:22,620 --> 00:46:26,540 >> Nu, lasu min fari unu alia ekzemplo tie malfermante novan dosieron. 970 00:46:26,540 --> 00:46:30,560 Kaj lasu min savi ĉi tiu kiel string.c. 971 00:46:30,560 --> 00:46:37,980 Ĝi rezultas ke ni parolas pri datumoj tipoj hodiaŭ, estas eĉ pli 972 00:46:37,980 --> 00:46:40,630 okazas sub la kapuĉo ol ni vidis tiom. 973 00:46:40,630 --> 00:46:42,290 Do mi rapide faros rapidan programo. 974 00:46:42,290 --> 00:46:44,510 Inkluzivi stdio.h. 975 00:46:44,510 --> 00:46:45,730 Kaj mi savi. 976 00:46:45,730 --> 00:46:48,110 Kaj vi scias, mi ne faru la saman eraron denove kaj denove. 977 00:46:48,110 --> 00:46:50,540 Inkluzivi cs50.h. 978 00:46:50,540 --> 00:46:54,870 Kaj lasu min iri antaŭen nun kaj faru int main (void). 979 00:46:54,870 --> 00:46:58,790 >> Kaj nun mi simple volas fari programon kiu faras tion - deklarus ŝnureto 980 00:46:58,790 --> 00:47:03,610 vokis s kaj akiri kordo de la uzanto. 981 00:47:03,610 --> 00:47:05,820 Kaj lasu min fari iom instrukcioj tie - 982 00:47:05,820 --> 00:47:09,960 bonvolu doni al mi kordo - tiel la uzanto sciu, kion fari. 983 00:47:09,960 --> 00:47:13,190 Kaj tiam cxi tie sub tiu ĉi, Mi volas fari la sekvan - 984 00:47:13,190 --> 00:47:16,060 por int i ricevas nulo. 985 00:47:16,060 --> 00:47:18,580 Denove, komputikistoj tipe komenci rakonti je nulo, sed ni povus 986 00:47:18,580 --> 00:47:20,340 fari, ke oni se ni vere volis. 987 00:47:20,340 --> 00:47:27,240 Nun mi intencas fari i estas malpli ol la korda longeco de s. 988 00:47:27,240 --> 00:47:28,430 Do strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-Kaj-N - 990 00:47:29,510 --> 00:47:31,650 denove, ĝi estas konciza ĉar ĝi estas pli facile tajpi, eĉ se ĝi estas 991 00:47:31,650 --> 00:47:32,590 iom kamufla. 992 00:47:32,590 --> 00:47:35,290 >> Tio estas funkcio ni ne uzas antaŭe sed laŭvorte faras tion - 993 00:47:35,290 --> 00:47:37,810 revenu al Mi numero kiu reprezentas la longo de la kordo 994 00:47:37,810 --> 00:47:38,690 ke la uzanto tajpas. 995 00:47:38,690 --> 00:47:41,740 Se ili enigis en saluton, denove kvin ĉar ekzistas kvin 996 00:47:41,740 --> 00:47:42,890 literojn en saluton. 997 00:47:42,890 --> 00:47:45,390 Tiam, je ĉiu ripeto de tiu buklo, i plus plus. 998 00:47:45,390 --> 00:47:49,170 Do denove, normo konstrui eĉ se vi ne estas tute tro komforta aŭ 999 00:47:49,170 --> 00:47:50,420 familiara kun ĝi ankoraŭ. 1000 00:47:50,420 --> 00:47:53,220 >> Sed nun en ĉiu ripeto de tiu ciklo, rimarki kion mi faros. 1001 00:47:53,220 --> 00:47:56,690 Mi volas iri antaŭen kaj presi el sola karaktero - 1002 00:47:56,690 --> 00:47:59,940 tial% c backslash n sur nova linio. 1003 00:47:59,940 --> 00:48:00,990 Kaj tiam, vi scias, kion mi volas fari? 1004 00:48:00,990 --> 00:48:05,090 Sendepende de la vorto estas, ke la uzanto tajpas en, kiel saluton, mi volas printi 1005 00:48:05,090 --> 00:48:09,530 H-Kaj-L-L-O, unu signo por linio. 1006 00:48:09,530 --> 00:48:13,080 Alivorte, mi volas akiri en la individuaj karakteroj en cxeno, 1007 00:48:13,080 --> 00:48:16,770 per kiu ĝis nun ĉeno havas nur estis vico de signoj. 1008 00:48:16,770 --> 00:48:21,690 >> Kaj ĝi rezultas mi povas fari s, krampo, i, proksime krampo, fermi 1009 00:48:21,690 --> 00:48:23,580 parentezo, punktokomo. 1010 00:48:23,580 --> 00:48:25,640 Kaj mi devas fari pli aferon. 1011 00:48:25,640 --> 00:48:30,570 Ĝi estas en dosiero nomata string.h ke strlen estas deklarita. 1012 00:48:30,570 --> 00:48:33,190 Do se mi volas uzi tiun funkcion, Mi bezonas diri al la tradukilo, 1013 00:48:33,190 --> 00:48:34,450 atendi por uzi ĝin. 1014 00:48:34,450 --> 00:48:37,040 Nun lasu min antaŭeniri kaj realigi la programo nomita linio. 1015 00:48:37,040 --> 00:48:39,150 Dot, oblikvo, kordoj. 1016 00:48:39,150 --> 00:48:40,130 >> Bonvolu doni al mi kordo. 1017 00:48:40,130 --> 00:48:40,900 Mi iros antaŭen kaj tajpi ĝin. 1018 00:48:40,900 --> 00:48:43,040 Saluton, en ĉiuj kaskedoj, Enter. 1019 00:48:43,040 --> 00:48:47,390 Kaj nun rimarkas mi presis tiun unu signo post la alia. 1020 00:48:47,390 --> 00:48:51,450 Do la nova detalo estas, ke ĉeno, ĉe la fino de la tago, povas esti 1021 00:48:51,450 --> 00:48:54,810 Montrita pere de liaj individuaj karakteroj por enkonduki la kvadrato 1022 00:48:54,810 --> 00:48:55,840 krampo skribmaniero. 1023 00:48:55,840 --> 00:48:59,090 Kaj tio estas ĉar ĉenon sube la kapuĉo ja estas vico de 1024 00:48:59,090 --> 00:48:59,810 gravuloj. 1025 00:48:59,810 --> 00:49:02,010 Sed kio estas neta pri ili estas en via komputilo RAM - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, kia ajn ĝi estas - ili estas laŭvorte malantaŭo al malantaŭo al dorso - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 ĉe individuo, najbara bitokoj en memoro. 1029 00:49:09,920 --> 00:49:13,210 >> Do se vi volas atingi la oka tiaj bitoko, kiu en ĉi buklo estus 1030 00:49:13,210 --> 00:49:16,900 krampo nulo, krampo unu, krampo du, krampo tri, kvar krampo - 1031 00:49:16,900 --> 00:49:18,890 ke estas nulo indeksita ĝis kvin - 1032 00:49:18,890 --> 00:49:23,330 ke estos presi H-E-L-L-O sur ĝia propra linio. 1033 00:49:23,330 --> 00:49:26,320 >> Nun, kiel teaser, lasu min montri al vi la klason de aĵoj vi eventuale esti 1034 00:49:26,320 --> 00:49:31,950 povis kompreni, almenaŭ kun iuj proksimaj rigardante. 1035 00:49:31,950 --> 00:49:35,610 Por unu, kion ni inkludis en la hodiaŭa ekzemploj, se vi ŝatus, estas fakte 1036 00:49:35,610 --> 00:49:38,300 unu el la tre unua jailbreaks por la iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking signifas krakas la telefono do vi povas reale uzi ĝin sur 1038 00:49:40,800 --> 00:49:43,380 malsamaj portanto aŭ instalon vian propran programaron. 1039 00:49:43,380 --> 00:49:45,660 Kaj vi rimarkos ĉi aspektas tute kripta, plej probabla. 1040 00:49:45,660 --> 00:49:46,520 Sed rigardu tion ĉi. 1041 00:49:46,520 --> 00:49:50,420 La iPhone estis ŝajne krakis kun a por ciklo, kun se kondiĉo, estas alia 1042 00:49:50,420 --> 00:49:52,580 kondiĉo, faskon de funkcioj ni ne vidis. 1043 00:49:52,580 --> 00:49:54,230 >> Kaj denove, vi ne faros en unua rigardo probable 1044 00:49:54,230 --> 00:49:55,620 kompreni kiel tio funkcias. 1045 00:49:55,620 --> 00:49:58,940 Sed ĉiu, ke ni ia prenu por donita en nia moderna vivo 1046 00:49:58,940 --> 00:50:02,040 fakte emas redukti eĉ al iu de ĉi tiuj fundamentaj ni vizitis 1047 00:50:02,040 --> 00:50:02,820 rigardante. 1048 00:50:02,820 --> 00:50:06,680 Lasu min antaŭeniri kaj malfermu unu alia programo, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Do tio, ankaŭ, estas io, kion vi ne vere scias. 1050 00:50:08,970 --> 00:50:12,440 Eĉ neniu de la stabo aŭ mi povis probable kompreni tion ĉi oni rigardas 1051 00:50:12,440 --> 00:50:15,450 ĉar ĉi tiu estis ies kodo kiu estis donita al kio 1052 00:50:15,450 --> 00:50:19,630 historie konata kiel sekur C konkurso, kie vi skribos programon 1053 00:50:19,630 --> 00:50:24,670 kiu kompilas kaj kuras sed estas tiel malbenita kamufla neniu homo povas kompreni kion 1054 00:50:24,670 --> 00:50:27,530 ĝi tuj fari ĝis ili efektive ruli ĝin. 1055 00:50:27,530 --> 00:50:29,940 >> Do ja, se vi rigardas tiun kodo, mi vidas ŝaltilon. 1056 00:50:29,940 --> 00:50:30,870 Mi vidas ĉefa. 1057 00:50:30,870 --> 00:50:33,800 Mi vidas tiujn kvadrataj krampoj implico ia tabelo. 1058 00:50:33,800 --> 00:50:35,970 Ĉu iu volas diveni kion tiu programo efektive 1059 00:50:35,970 --> 00:50:37,220 faras se mi kuros Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Jes. 1062 00:50:40,750 --> 00:50:43,050 Akcepti. 1063 00:50:43,050 --> 00:50:44,690 Bonege. 1064 00:50:44,690 --> 00:50:48,090 Do nur la bastonon kaj mi ne povas diveni el kio tion fari. 1065 00:50:48,090 --> 00:50:51,670 >> Kaj nun laste, lasu min iri antaŭen kaj malfermu unu alia programo. 1066 00:50:51,670 --> 00:50:53,440 Ĉi tiu - 1067 00:50:53,440 --> 00:50:55,550 denove, ni faros la fontkodo havebla surlinia - ĉi tiu estas nur 1068 00:50:55,550 --> 00:50:57,480 speco de belaspekta. 1069 00:50:57,480 --> 00:50:59,750 Ĉiuj ili estas batis la spaco trinkejo sufiĉe. 1070 00:50:59,750 --> 00:51:01,320 Sed tio estas reala kodo. 1071 00:51:01,320 --> 00:51:04,790 Do, se vi pensas ke estas sufiĉe, se ni fakte kuri ĉi ĉe la prompto, 1072 00:51:04,790 --> 00:51:08,970 eventuale vi vidos kiel ni povus fari tion kiel ĉi tio. 1073 00:51:08,970 --> 00:51:14,008 >> Do ni lasos vin en tiu noto kaj vin vidos merkredon. 1074 00:51:14,008 --> 00:51:18,440 >> [MUZIKO ludi] 1075 00:51:18,440 --> 00:51:23,380 >> Speaker 2: En la sekvanta CS50, la TFS okazigi ribelon. 1076 00:51:23,380 --> 00:51:24,112 >> Parolanto 3: Tie li estas. 1077 00:51:24,112 --> 00:51:25,362 Get li! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [MUZIKO ludi]