1 00:00:00,000 --> 00:00:10,920 >> [Speel van musiek] 2 00:00:10,920 --> 00:00:14,680 >> David J MALAN: Alle reg, Welkom terug na CS50. 3 00:00:14,680 --> 00:00:16,500 Dit is die begin van die week twee. 4 00:00:16,500 --> 00:00:18,940 'N woord van een van ons vriende op die kampus - 5 00:00:18,940 --> 00:00:22,620 As jy belangstel, moontlik, óf nou of in die toekoms 'n term 6 00:00:22,620 --> 00:00:25,670 selfs, een keer meer gemaklik, onderrig middel van die skool studente 'n bietjie 7 00:00:25,670 --> 00:00:27,680 iets oor die rekenaar wetenskap, doen hoof tot die URL. 8 00:00:27,680 --> 00:00:32,360 Hulle is in die besonder behoefte op die oomblik van onderwysers, veral as jy ' 9 00:00:32,360 --> 00:00:34,700 het 'n paar blootstelling aan rekenaarwetenskap. 10 00:00:34,700 --> 00:00:38,060 >> So onthou dat dit die laaste tyd, het ons ' 'n paar data tipes in C en 11 00:00:38,060 --> 00:00:40,590 jy mag begin het om jou hande vuil met hierdie dusver 12 00:00:40,590 --> 00:00:41,940 in probleem stel een. 13 00:00:41,940 --> 00:00:43,230 En ons het 'n kar. 14 00:00:43,230 --> 00:00:49,100 So in 'n bietjie tegniese terme, wat is 'n kar as jy dit vandag ken? 15 00:00:49,100 --> 00:00:51,050 >> So dit is 'n karakter, maar laat se meer presies te wees nou. 16 00:00:51,050 --> 00:00:53,735 Wat bedoel ons met karakter of individu kar? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 'N nie-numeriese karakter - 19 00:00:59,500 --> 00:01:00,670 so nie noodwendig nie. 20 00:01:00,670 --> 00:01:04,580 Dit blyk dat selfs getalle, selfs punktuasie en briewe is 21 00:01:04,580 --> 00:01:06,980 verteenwoordig met hierdie data tik bekend as 'n kar. 22 00:01:06,980 --> 00:01:09,440 So dit is nie noodwendig alfabetiese. 23 00:01:09,440 --> 00:01:11,100 Ja? 24 00:01:11,100 --> 00:01:12,275 >> So dit is 'n ASCII karakter. 25 00:01:12,275 --> 00:01:15,510 So as jy dink terug na week nul, wanneer ons het ons byte van vrywilligers 26 00:01:15,510 --> 00:01:19,150 kom en in besit wees van hul hande in die lug of nie al nie, hulle verteenwoordig stukkies. 27 00:01:19,150 --> 00:01:22,450 Maar gesamentlik as 'n groep van agt, Hulle verteenwoordig 'n greep. 28 00:01:22,450 --> 00:01:26,030 En ons het die idee van ASCII op daardie lesing, wat is bloot 'n 29 00:01:26,030 --> 00:01:28,170 kartering tussen getalle en letters. 30 00:01:28,170 --> 00:01:32,010 En ASCII gebruike, soos die mense geïmpliseer, agt stukkies 31 00:01:32,010 --> 00:01:33,660 'n karakter te verteenwoordig. 32 00:01:33,660 --> 00:01:36,890 >> So Gevolglik, as agt stukkies kan elke neem op een van die twee waardes - 33 00:01:36,890 --> 00:01:38,010 nul of een - 34 00:01:38,010 --> 00:01:40,280 Dit beteken daar is twee moontlikhede vir hierdie persoon - 35 00:01:40,280 --> 00:01:41,230 nul of een - 36 00:01:41,230 --> 00:01:44,070 twee vir hierdie persoon, twee vir hierdie persoon, twee vir hierdie een. 37 00:01:44,070 --> 00:01:47,450 So 'n totaal van twee keer twee keer twee keer twee keer twee - 38 00:01:47,450 --> 00:01:49,700 so twee die agtste in totaal. 39 00:01:49,700 --> 00:01:54,320 So is daar 'n totale aantal van karakters 256 moontlik dat jy kan 40 00:01:54,320 --> 00:01:55,750 stel met agt stukkies. 41 00:01:55,750 --> 00:01:59,210 >> Nou, dié van julle wat spreek Asiatiese tale kan weet dat daar is meer 42 00:01:59,210 --> 00:02:02,620 karakters in die wêreld as net As en ontbyt en Cs en Ds. 43 00:02:02,620 --> 00:02:06,130 En inderdaad, beteken ASCII nie genoeg vir 'n klomp van die tale van die wêreld. 44 00:02:06,130 --> 00:02:07,760 Maar meer op dat 'n ander tyd. 45 00:02:07,760 --> 00:02:11,240 Vir nou, weet dat in C as jy wil 'n brief, 'n stuk te verteenwoordig 46 00:02:11,240 --> 00:02:15,780 punktuasie, of net iets karakter in die natuur, gebruik ons ​​'n kar. 47 00:02:15,780 --> 00:02:18,240 En dit is een byte of agt stukkies. 48 00:02:18,240 --> 00:02:19,690 >> Hoe gaan 'n int? 49 00:02:19,690 --> 00:02:20,780 Wel, 'n int 'n heelgetal is. 50 00:02:20,780 --> 00:02:23,175 Hoeveel stukkies, as jy onthou, was 'n heelgetal tipies? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Enigeen onthou? 53 00:02:27,512 --> 00:02:29,600 So is dit tipies 32. 54 00:02:29,600 --> 00:02:32,120 Dit hang eintlik op die rekenaar wat jy gebruik. 55 00:02:32,120 --> 00:02:35,770 Maar in die toestel, en in 'n baie rekenaars, dit is 32 stukkies of vier 56 00:02:35,770 --> 00:02:37,140 grepe - agt keer vier. 57 00:02:37,140 --> 00:02:39,790 En ints net gebruik word vir die berging van getalle, hetsy negatief, 58 00:02:39,790 --> 00:02:41,610 positief of nul. 59 00:02:41,610 --> 00:02:45,250 >> En as jy het 32 ​​stukkies en jy net omgee vir positiewe getalle, kan 60 00:02:45,250 --> 00:02:48,960 iemand ball hoeveel moontlike heelgetalle 'n rekenaar kan stel vanaf 61 00:02:48,960 --> 00:02:51,820 nul tot? 62 00:02:51,820 --> 00:02:56,130 So dit sou wees om twee van die 32, wat is ongeveer vier miljard gestyg. 63 00:02:56,130 --> 00:02:59,720 So het hierdie magte van die twee gaan wees herhalende temas in Rekenaarwetenskap. 64 00:02:59,720 --> 00:03:03,930 Soos ons sal sien, hulle is baie gerieflik om te werk met selfs al is dit nie heeltemal 65 00:03:03,930 --> 00:03:05,790 maklik om die wiskunde te doen in 'n mens se kop. 66 00:03:05,790 --> 00:03:07,000 >> So sal ons sê ongeveer vier miljard gestyg. 67 00:03:07,000 --> 00:03:08,620 Nou, 'n lang lang - 68 00:03:08,620 --> 00:03:09,770 jy kan soort van raaiskoot. 69 00:03:09,770 --> 00:03:10,480 Dit is meer as 'n int. 70 00:03:10,480 --> 00:03:12,440 Hoeveel stukkies? 71 00:03:12,440 --> 00:03:14,250 So 64 stukkies of agt grepe. 72 00:03:14,250 --> 00:03:17,480 Dit beteken net dat jy selfs kan stel groter getalle, groter positiewe of 73 00:03:17,480 --> 00:03:19,160 groter negatiewe getalle. 74 00:03:19,160 --> 00:03:20,060 >> En hoe oor dryf? 75 00:03:20,060 --> 00:03:22,260 Dit is 'n drywende punt waarde van 32 stukkies. 76 00:03:22,260 --> 00:03:25,180 Dit is net 'n reële getal, iets met 'n desimale punt. 77 00:03:25,180 --> 00:03:30,100 Maar as jy in plaas daarvan moet meer plekke na die desimale punt of jy wil 78 00:03:30,100 --> 00:03:33,720 verteenwoordig 'n groter getal met 'n paar fraksie nadat dit, kan jy gebruik om 'n 79 00:03:33,720 --> 00:03:36,260 dubbel, wat 64 stukkies. 80 00:03:36,260 --> 00:03:38,240 >> Maar daar is 'n interessante afhaal hier. 81 00:03:38,240 --> 00:03:42,890 So as ints word beperk deur 32 stukkies en selfs lank longs word beperk deur die 64 82 00:03:42,890 --> 00:03:46,180 stukkies, dié soort van roep die vraag, Wat gebeur as jy eintlik wil om te tel 83 00:03:46,180 --> 00:03:48,790 hoër as 4 miljard vir 'n int? 84 00:03:48,790 --> 00:03:50,330 Wel, jy moet net gebruik om 'n lang lang. 85 00:03:50,330 --> 00:03:54,200 Maar wat as jy wil hoër telling as twee van die 64, gee of neem? 86 00:03:54,200 --> 00:03:55,810 >> Nou, dit is 'n groot aantal. 87 00:03:55,810 --> 00:03:59,250 Maar uiteindelik, jy kan eintlik omgee vir hierdie soort van waardes, 88 00:03:59,250 --> 00:04:03,070 veral as jy met behulp van 'n databasis en die begin van baie, baie te samel 89 00:04:03,070 --> 00:04:06,190 en baie van die data en die toeken van unieke nommers op elke stukkie van die data. 90 00:04:06,190 --> 00:04:07,430 So het ons soort van 'n probleem. 91 00:04:07,430 --> 00:04:10,700 En op soortgelyke wyse, met drywende punt waardes - dryf of dubbels - 92 00:04:10,700 --> 00:04:14,290 As jy net 'n beperkte aantal stukkies, hoeveel totale getalle kon jy 93 00:04:14,290 --> 00:04:16,980 moontlik voor te stel? 94 00:04:16,980 --> 00:04:19,540 >> Wel, dit is minder duidelik wanneer jy behels 'n desimale punt. 95 00:04:19,540 --> 00:04:20,899 Maar dit is sekerlik eindig. 96 00:04:20,899 --> 00:04:24,390 As jy het 'n beperkte aantal stukkies, 'n beperkte aantal mense, 'n beperkte 97 00:04:24,390 --> 00:04:27,350 aantal gloeilampe, seker jy kan verteenwoordig slegs 'n beperkte aantal 98 00:04:27,350 --> 00:04:28,510 swaai punt waardes. 99 00:04:28,510 --> 00:04:33,170 Maar hoe baie reële getalle is hulle in die wêreld? 100 00:04:33,170 --> 00:04:33,680 Daar is 'n oneindige. 101 00:04:33,680 --> 00:04:37,280 So dit is soort van 'n probleem, want ons het nie 'n oneindige hoeveelheid 102 00:04:37,280 --> 00:04:39,970 geheue of RAM binnekant van ons rekenaars. 103 00:04:39,970 --> 00:04:41,780 So 'n paar uitdagende dinge kan gebeur. 104 00:04:41,780 --> 00:04:43,900 >> So laat ons gaan voort en probeer hierdie om hier te druk. 105 00:04:43,900 --> 00:04:46,240 Laat my gaan voort en oop te maak gedit. 106 00:04:46,240 --> 00:04:50,360 Ek gaan om voort te gaan en 'n lêer stoor genoem "floats0.c" net om te wees 107 00:04:50,360 --> 00:04:54,630 ooreenstemming met 'n voorbeeld wat aanlyn beskikbaar, as jy wil. 108 00:04:54,630 --> 00:04:58,080 En ek gaan om voort te gaan en definieer dit as volg: - 109 00:04:58,080 --> 00:05:01,540 Ek gaan om voort te gaan en te sê, int belangrikste leemte, soos ons dikwels doen. 110 00:05:01,540 --> 00:05:07,190 >> En dan in hierdie program, ek gaan verklaar myself 'n float, so 'n 32-bit 111 00:05:07,190 --> 00:05:09,700 veranderlike genoem f, arbitrêr. 112 00:05:09,700 --> 00:05:13,910 En dan gaan ek te stoor in dit Ek weet nie, 'n tiende, so 0,1. 113 00:05:13,910 --> 00:05:16,590 So ek gaan om te sê dat as een gedeel deur 10, wat is perfek 114 00:05:16,590 --> 00:05:17,790 regmatige in C. 115 00:05:17,790 --> 00:05:20,460 >> En dan op die tweede reël, het ek eenvoudig wil om uit te druk wat waarde. 116 00:05:20,460 --> 00:05:22,950 So onthou wat ons kan gebruik die bekende printf. 117 00:05:22,950 --> 00:05:25,420 Ons wil nie% te gebruik ek vir 'n int. 118 00:05:25,420 --> 00:05:28,360 Ons wil% f te gebruik vir 'n float. 119 00:05:28,360 --> 00:05:33,080 En dan gaan ek agteroorskuisstreep n om te doen, Sluit kwotasie, komma, f, kommapunt. 120 00:05:33,080 --> 00:05:34,400 >> So hier is my program. 121 00:05:34,400 --> 00:05:35,820 Daar is reeds 'n fout. 122 00:05:35,820 --> 00:05:38,640 Het iemand vir wie dit gedruk reeds wil ten minste wys 123 00:05:38,640 --> 00:05:40,220 een fout wat ek gemaak het? 124 00:05:40,220 --> 00:05:42,470 Ja? 125 00:05:42,470 --> 00:05:42,800 Ja. 126 00:05:42,800 --> 00:05:47,860 Ek het vergeet om "# sluit" op die top, hulle simptoom van wat as ek probeer om te 127 00:05:47,860 --> 00:05:50,490 stel dit gaan wees dat die samesteller gaan op my skreeu, 128 00:05:50,490 --> 00:05:52,770 sê undefined simbool of iets tot daardie effek. 129 00:05:52,770 --> 00:05:55,360 Dit is nie iets verstaan hou printf. 130 00:05:55,360 --> 00:05:59,380 >> So ek gaan om dit te doen "# include ", Stoor die lêer. 131 00:05:59,380 --> 00:06:00,400 En nou is dit in 'n beter vorm. 132 00:06:00,400 --> 00:06:02,690 Maar Ek gaan ook om te wys uit een nuwe detail vandag. 133 00:06:02,690 --> 00:06:08,620 In bykomend tot die spesifiseer plek houers soos% f% i% s, kan jy 134 00:06:08,620 --> 00:06:12,320 soms beïnvloed die gedrag van daardie plekhouer. 135 00:06:12,320 --> 00:06:15,540 Byvoorbeeld, in die geval van 'n drywende punt waarde, indien ek wil net 136 00:06:15,540 --> 00:06:22,200 een desimale plek te vertoon nadat die tydperk, kan ek eintlik doen 0.1f. 137 00:06:22,200 --> 00:06:26,830 So in ander woorde, ek skei die f en die persentasie teken met 0,1, net 138 00:06:26,830 --> 00:06:30,200 vertel printf, kan jy 'n hele klomp van die nommers na die desimale 139 00:06:30,200 --> 00:06:30,930 wys vir my. 140 00:06:30,930 --> 00:06:32,870 Maar ek wil net een van hulle te sien. 141 00:06:32,870 --> 00:06:36,280 >> So ek gaan om voort te gaan nou en red hierdie program, gaan in my terminale 142 00:06:36,280 --> 00:06:41,870 venster, en ek gaan om voort te gaan en tipe maak float 0, betree. 143 00:06:41,870 --> 00:06:44,930 Ek sien dat ietwat kriptiese lyn wat sal begin om meer sin te maak as ons 144 00:06:44,930 --> 00:06:46,900 terg dit uitmekaar hierdie week en volgende. 145 00:06:46,900 --> 00:06:50,480 Nou gaan ek om voort te gaan en hardloop float nul. 146 00:06:50,480 --> 00:06:52,020 En, damn. 147 00:06:52,020 --> 00:06:54,880 >> So daar is nog 'n fout hier vir een of ander rede. 148 00:06:54,880 --> 00:07:02,490 Ek is redelik seker dat 'n tiende, of een gedeel deur 10, is nie 0.0. 149 00:07:02,490 --> 00:07:04,590 Miskien is ek net nie op soek na by genoeg syfers. 150 00:07:04,590 --> 00:07:08,580 So hoekom ek nie sê twee 0,2 twee te sien desimale plekke plaas van net een. 151 00:07:08,580 --> 00:07:11,810 Laat my toe terug te gaan na my terminale venster hier en druk 'n paar keer te 152 00:07:11,810 --> 00:07:12,840 sien my geskiedenis. 153 00:07:12,840 --> 00:07:15,910 Moenie maak dryf zero weer en dan weer op. 154 00:07:15,910 --> 00:07:17,730 En nou gaan. 155 00:07:17,730 --> 00:07:20,000 >> En nou, ek is redelik seker dit is verkeerd. 156 00:07:20,000 --> 00:07:23,030 En ek kon doen, drie en vier, en ek is waarskynlik gaan om te hou terwyl nulle. 157 00:07:23,030 --> 00:07:24,880 So waar is die fout? 158 00:07:24,880 --> 00:07:27,910 Een gedeel deur 10 behoort te wees 0.1. 159 00:07:27,910 --> 00:07:30,310 Iemand wil 'n steek te neem wat die kern van die probleem is? 160 00:07:30,310 --> 00:07:32,400 Ja? 161 00:07:32,400 --> 00:07:33,420 Hulle is albei heelgetalle. 162 00:07:33,420 --> 00:07:33,920 So, wat? 163 00:07:33,920 --> 00:07:37,820 So met een gedeel deur 10, wat wat ek doen in rekenkundige. 164 00:07:37,820 --> 00:07:41,185 En ek kry 0,1. 165 00:07:41,185 --> 00:07:41,660 >> Ja. 166 00:07:41,660 --> 00:07:43,240 En so is dit inderdaad dat die kwessie. 167 00:07:43,240 --> 00:07:46,700 Wanneer jy 'n heelgetal in 'n rekenaar en jy deel dit deur 'n ander getal, 168 00:07:46,700 --> 00:07:50,430 die rekenaar by verstek gaan aanvaar dat jy 'n heelgetal. 169 00:07:50,430 --> 00:07:54,620 Die probleem is egter, natuurlik, is dat 0,1 is nie 'n heelgetal. 170 00:07:54,620 --> 00:07:55,680 Dit is 'n reële getal is. 171 00:07:55,680 --> 00:07:59,610 En wat die rekenaar nie deur die standaard is dit net gooi weg 172 00:07:59,610 --> 00:08:01,070 alles na die desimale punt. 173 00:08:01,070 --> 00:08:03,380 Dit maak nie rond of af per se. 174 00:08:03,380 --> 00:08:06,480 Dit gooi net alles weg na die desimale punt. 175 00:08:06,480 --> 00:08:07,430 En nou wat sin maak. 176 00:08:07,430 --> 00:08:09,740 Want nou is ons duidelik gelaat met 'n nul. 177 00:08:09,740 --> 00:08:10,250 >> Maar wag 'n minuut. 178 00:08:10,250 --> 00:08:11,840 Ek is nie sien nie 'n int nul. 179 00:08:11,840 --> 00:08:14,910 Ek het eintlik sien 0.00. 180 00:08:14,910 --> 00:08:16,340 So hoe versoen ek dit nou? 181 00:08:16,340 --> 00:08:22,850 As 'n mens deur 10 gedeel word is nul, maar ek is sien 0.00, is waar dit kry 182 00:08:22,850 --> 00:08:24,250 omskep terug na 'n reële getal wees? 183 00:08:24,250 --> 00:08:25,500 Ja. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Presies. 186 00:08:30,630 --> 00:08:35,600 >> So hier in lyn vyf, toe ek eintlik winkel wat 0,1, wat dan 187 00:08:35,600 --> 00:08:39,549 afgekap na nul, binnekant van 'n vlot, dit is effektief gelykstaande aan 188 00:08:39,549 --> 00:08:42,100 stoor dit nie as 'n int, maar inderdaad, as 'n float. 189 00:08:42,100 --> 00:08:46,540 Verder het ek dan met behulp van printf te uitdruklik druk dat die getal tot twee 190 00:08:46,540 --> 00:08:49,740 desimale plekke, selfs al is daar kan nie eintlik enige. 191 00:08:49,740 --> 00:08:51,020 >> So hierdie soort van suig, reg? 192 00:08:51,020 --> 00:08:53,640 Blykbaar kan jy nie wiskunde, ten minste op hierdie vlak van 193 00:08:53,640 --> 00:08:55,600 presisie, in 'n rekenaar. 194 00:08:55,600 --> 00:08:56,930 Maar seker daar is 'n oplossing. 195 00:08:56,930 --> 00:09:00,410 Wat is die eenvoudigste oplossing wat ons kon dalk doen, selfs net intuïtief hier te 196 00:09:00,410 --> 00:09:01,130 los hierdie? 197 00:09:01,130 --> 00:09:02,380 Ja? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Draai die heelgetalle in - 200 00:09:06,574 --> 00:09:06,976 ja. 201 00:09:06,976 --> 00:09:10,420 Selfs as ek is nie heeltemal seker wat is regtig hier aangaan, indien dit 202 00:09:10,420 --> 00:09:13,440 fundamenteel te doen het met hierdie twee om ints, wel, hoekom het ek nie 203 00:09:13,440 --> 00:09:18,230 maak dat 10,0, die maak van hierdie 1.0, weer stoor die lêer. 204 00:09:18,230 --> 00:09:20,990 Laat my toe terug te gaan na die bodem en heropstel. 205 00:09:20,990 --> 00:09:23,030 Laat my nou weer uit te voer. 206 00:09:23,030 --> 00:09:23,420 En daar - 207 00:09:23,420 --> 00:09:27,690 nou, ek het my 'n tiende verteenwoordig as 0,10. 208 00:09:27,690 --> 00:09:28,420 >> Alle regte. 209 00:09:28,420 --> 00:09:29,220 So dit is nie sleg nie. 210 00:09:29,220 --> 00:09:31,730 En laat my wys een ander manier Ons kon die probleem nie. 211 00:09:31,730 --> 00:09:35,580 Laat my terug eintlik rol in tyd wanneer ons het dit as een 212 00:09:35,580 --> 00:09:36,680 tiende 'n oomblik gelede. 213 00:09:36,680 --> 00:09:40,800 En laat my voort te gaan en weer stoor die lêer as 'n ander lêer naam, net om te 214 00:09:40,800 --> 00:09:41,750 het 'n bietjie kontrolepunt. 215 00:09:41,750 --> 00:09:43,450 So dit was 'n weergawe. 216 00:09:43,450 --> 00:09:45,520 En nou, laat my gaan voort en nog een weergawe. 217 00:09:45,520 --> 00:09:48,540 Ons sal noem hierdie weergawe twee nul kruip. 218 00:09:48,540 --> 00:09:51,280 >> En ek gaan om te plaas nie hierdie - jy weet wat? 219 00:09:51,280 --> 00:09:54,400 Voeg dot nul werk in hierdie geval. 220 00:09:54,400 --> 00:09:56,060 Maar veronderstel die een was 'n veranderlike. 221 00:09:56,060 --> 00:09:57,680 Veronderstel is om 10 was 'n veranderlike. 222 00:09:57,680 --> 00:10:00,680 Met ander woorde, veronderstel dat ek nie kon net hard-kode 0,0 aan die einde 223 00:10:00,680 --> 00:10:02,340 van hierdie rekenkundige uitdrukking. 224 00:10:02,340 --> 00:10:05,820 Wel, ek kan werklik iets in hakies genoem gooi. 225 00:10:05,820 --> 00:10:11,920 Ek kan gooi dat heelgetal 10 tot 'n vlot, en ek kan dit heelgetal een gooi 'n 226 00:10:11,920 --> 00:10:12,800 dryf, as well. 227 00:10:12,800 --> 00:10:17,190 Dan is die wiskunde wat gaan gedoen word effektief 1,0 gedeel deur 10,0, 228 00:10:17,190 --> 00:10:19,250 die gevolg van wat gaan in f as tevore. 229 00:10:19,250 --> 00:10:26,130 So as ek heropstel dit as maak dryf 2, en nou dryf 2, ek kry dieselfde 230 00:10:26,130 --> 00:10:27,020 beantwoord, as well. 231 00:10:27,020 --> 00:10:29,640 >> So, dit is 'n redelik slinks voorbeeld, Om hierdie probleem op te los 232 00:10:29,640 --> 00:10:31,400 deur die instelling van giet. 233 00:10:31,400 --> 00:10:34,410 Maar in die algemeen, is casting gaan wees 'n kragtige ding, veral vir 234 00:10:34,410 --> 00:10:38,180 probleem sit twee in 'n week se tyd, toe jy wil 'n data tipe om te skakel na 235 00:10:38,180 --> 00:10:41,800 'n ander wat aan die einde van die dag verteenwoordig word op dieselfde manier. 236 00:10:41,800 --> 00:10:44,970 Aan die einde van die dag, elke enkele ding wat ons oor gepraat het tot dusver is 237 00:10:44,970 --> 00:10:46,710 net ints onder die kap. 238 00:10:46,710 --> 00:10:48,950 Of as dit is te laag-vlak vir jy, hulle is net nommers 239 00:10:48,950 --> 00:10:49,750 onder die kap. 240 00:10:49,750 --> 00:10:52,850 Selfs karakters, weer, onthou vanaf week nul is, is getalle 241 00:10:52,850 --> 00:10:53,990 onder die kap. 242 00:10:53,990 --> 00:10:57,240 >> Dit is om te sê, kan ons skakel tussen verskillende soorte getalle as 243 00:10:57,240 --> 00:10:58,060 hulle is net stukkies. 244 00:10:58,060 --> 00:11:01,020 Ons kan omskep tussen getalle en briewe as hulle net 245 00:11:01,020 --> 00:11:02,580 stukkies, en omgekeerd. 246 00:11:02,580 --> 00:11:07,170 En giet in hierdie manier is 'n meganisme in ontwikkeling wat kan jy met geweld 247 00:11:07,170 --> 00:11:10,970 verander een data tipe na 'n ander. 248 00:11:10,970 --> 00:11:14,570 Ongelukkig is dit nie so eenvoudig as ek dalk gehad het. 249 00:11:14,570 --> 00:11:19,220 >> Ek gaan om terug te gaan na dryf 1, wat was die eenvoudiger, meer 250 00:11:19,220 --> 00:11:22,830 eenvoudig een met 0,0 bygevoeg op elk. 251 00:11:22,830 --> 00:11:25,260 En net so 'n vinnige opknappingskursusse, Laat my gaan voort en heropstel 252 00:11:25,260 --> 00:11:27,670 dit maak dryf 2 - 253 00:11:27,670 --> 00:11:30,300 Jammer, hierdie is maak dryf 1. 254 00:11:30,300 --> 00:11:32,050 En nou, laat ons loop dryf 1. 255 00:11:32,050 --> 00:11:34,810 En in die onderkant, let dat ek inderdaad net 0,1. 256 00:11:34,810 --> 00:11:36,165 So, probleem opgelos. 257 00:11:36,165 --> 00:11:37,280 >> Maar nog nie. 258 00:11:37,280 --> 00:11:40,000 Ek gaan nou na 'n bietjie nuuskierig, en ek gaan om terug te gaan na my 259 00:11:40,000 --> 00:11:41,620 printf verklaring en sê, jy weet wat? 260 00:11:41,620 --> 00:11:44,090 Ek wil graag dat dit te bevestig is regtig 'n tiende. 261 00:11:44,090 --> 00:11:47,890 En ek gaan om te wil om dit te sien aan, sê, vyf desimale plekke. 262 00:11:47,890 --> 00:11:48,570 Dit is nie 'n probleem nie. 263 00:11:48,570 --> 00:11:52,020 Ek verander die twee aan 'n vyf, Ek heropstel met maak. 264 00:11:52,020 --> 00:11:53,770 Ek tik dit as dryf 1. 265 00:11:53,770 --> 00:11:54,990 Op soek na mooi goed. 266 00:11:54,990 --> 00:11:58,570 My gesonde verstand tjeks kan daar eindig nie, maar Ek kry 'n bietjie meer avontuurlustig. 267 00:11:58,570 --> 00:12:00,330 Ek gaan 0,5 te verander na 0,10. 268 00:12:00,330 --> 00:12:03,440 Ek wil 10 syfers om te sien na die desimale plek. 269 00:12:03,440 --> 00:12:09,060 >> En ek gaan om voort te gaan en heropstel hierdie en tik dryf 1. 270 00:12:09,060 --> 00:12:13,060 Ek het soort van spyt dat hy getoets hierdie verder, want my wiskunde is nie so 271 00:12:13,060 --> 00:12:14,320 korrek nie, dit lyk. 272 00:12:14,320 --> 00:12:15,630 Maar wag 'n minuut, miskien dit is net 'n gelukskoot. 273 00:12:15,630 --> 00:12:17,810 Dalk is dit die rekenaar wat 'n bietjie vreemd. 274 00:12:17,810 --> 00:12:21,810 Laat my gaan voort en doen 20 decimaaltekens en gerus te stel myself dat ek weet 275 00:12:21,810 --> 00:12:22,540 hoe wiskunde te doen. 276 00:12:22,540 --> 00:12:23,460 Ek weet hoe om te program. 277 00:12:23,460 --> 00:12:26,960 Maak dryf 1, heropstel, en verdoem nie. 278 00:12:26,960 --> 00:12:31,110 Dit is regtig, regtig om ver van die merk. 279 00:12:31,110 --> 00:12:32,490 >> So, wat gaan hier aan? 280 00:12:32,490 --> 00:12:36,050 Intuïtief, gegrond op ons aannames vroeër oor die grootte van data tipes, 281 00:12:36,050 --> 00:12:38,040 wat moet hier gebeur onder die enjinkap? 282 00:12:38,040 --> 00:12:39,290 Ja? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Presies. 285 00:12:43,590 --> 00:12:46,480 As jy wil dit baie presisie, en dit is 'n heck van 'n baie van presisie - 286 00:12:46,480 --> 00:12:48,770 20 syfers na die desimale punt. 287 00:12:48,770 --> 00:12:51,990 Jy kan dalk nie verteenwoordig 'n arbitrêre getal, tensy jy het 'n 288 00:12:51,990 --> 00:12:52,930 arbitrêre aantal stukkies. 289 00:12:52,930 --> 00:12:54,190 Maar ons doen nie. 290 00:12:54,190 --> 00:12:57,200 Vir 'n vlot, ons het net 32 ​​stukkies. 291 00:12:57,200 --> 00:13:02,260 >> So as 32 stukkies kan net verschuiving word in 'n manier - net soos ons mense op, stadium 292 00:13:02,260 --> 00:13:05,780 hande op of af - in 'n beperkte aantal maniere, daar is net 'n beperkte aantal 293 00:13:05,780 --> 00:13:08,640 van reële getalle wat jy kan stel met daardie stukkies. 294 00:13:08,640 --> 00:13:10,500 En so het die rekenaar uiteindelik gaan hê om te 295 00:13:10,500 --> 00:13:11,730 begin sny hoeke. 296 00:13:11,730 --> 00:13:15,500 Die rekenaar kan wegsteek dié besonderhede van ons vir 'n bietjie van die tyd. 297 00:13:15,500 --> 00:13:18,880 Maar as ons begin steek met die nommers en soek verder en verder in die 298 00:13:18,880 --> 00:13:23,220 sleep getalle in die volle getal, dan kan ons begin om te sien dat dit 299 00:13:23,220 --> 00:13:26,480 eintlik benader die idee van 'n tiende. 300 00:13:26,480 --> 00:13:29,860 >> En so dit blyk, tragies, is daar 'n oneindige aantal getalle 301 00:13:29,860 --> 00:13:35,060 Ons kan nie presies verteenwoordig in 'n rekenaar, ten minste met 'n beperkte 302 00:13:35,060 --> 00:13:38,030 aantal stukkies, 'n beperkte bedrag van die geheue. 303 00:13:38,030 --> 00:13:41,210 Nou ongelukkig is dit soms het werklike gevolge. 304 00:13:41,210 --> 00:13:45,980 As mense nie heeltemal waardeer dit of soort van as vanselfsprekend aanvaar die feit 305 00:13:45,980 --> 00:13:48,310 dat hul rekenaar sal net doen wat hulle vertel om dit te doen en dit nie doen nie 306 00:13:48,310 --> 00:13:51,430 verstaan ​​die onderliggende verteenwoordiging details - 307 00:13:51,430 --> 00:13:55,290 wat, eerlik, in sommige tale is weggesteek van die gebruiker, in teenstelling met C - 308 00:13:55,290 --> 00:13:56,500 'n paar slegte dinge kan gebeur. 309 00:13:56,500 --> 00:13:58,650 >> En wat ek gedink ons ​​wil doen is 'n stap terug te neem. 310 00:13:58,650 --> 00:14:00,420 En dit is omtrent 'n agt minute video. 311 00:14:00,420 --> 00:14:04,200 Dit uitgesaai 'n paar jaar gelede, en dit gee insigte in eintlik wat kan gaan 312 00:14:04,200 --> 00:14:09,290 verkeerd wanneer jy onder-waardeer hierdie vorme van inligting in die baie al-te 313 00:14:09,290 --> 00:14:10,080 werklike wêreld. 314 00:14:10,080 --> 00:14:12,965 As ons kon verdof die ligte vir 'n paar minute. 315 00:14:12,965 --> 00:14:14,360 >> Spreker 1: Ons het nou terug te keer na ingenieurswese 316 00:14:14,360 --> 00:14:17,160 rampe op Moderne Marvels. 317 00:14:17,160 --> 00:14:18,680 >> Rekenaars - 318 00:14:18,680 --> 00:14:21,340 kom ons almal het die te aanvaar dikwels frustrerende probleme 319 00:14:21,340 --> 00:14:23,170 wat saam met hulle. 320 00:14:23,170 --> 00:14:27,570 Foute, virusse en sagteware glitches is 'n klein prys om te betaal vir die 321 00:14:27,570 --> 00:14:28,960 gerief. 322 00:14:28,960 --> 00:14:32,040 Maar in 'n hoë-tegnologie en 'n hoë-spoed militêre en ruimte program 323 00:14:32,040 --> 00:14:38,650 programme, die kleinste probleem kan word vergroot in die ongeluk. 324 00:14:38,650 --> 00:14:44,480 >> Op 4 Junie 1996, wetenskaplikes bereid is om te bekendstelling van 'n onbemande Ariane 5 vuurpyl. 325 00:14:44,480 --> 00:14:48,700 Dit was die uitvoering van wetenskaplike satelliete ontwerp om presies hoe vestig 326 00:14:48,700 --> 00:14:53,250 die aarde se magneetveld wisselwerking met son winde. 327 00:14:53,250 --> 00:14:57,540 Die vuurpyl is gebou vir die Europese Ruimte-agentskap en gelig uit sy 328 00:14:57,540 --> 00:14:59,906 fasiliteit op die kus Franse Guiana. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: Teen ongeveer 37 sekondes in die vlug, het hulle die eerste keer opgemerk 330 00:15:03,660 --> 00:15:04,910 iets is verkeerd gaan. 331 00:15:04,910 --> 00:15:08,130 Die spuitpunte is draaibare in 'n manier waarop hulle moet regtig nie. 332 00:15:08,130 --> 00:15:12,380 Ongeveer 40 sekondes in die vlug, duidelik die voertuig was in die moeilikheid. 333 00:15:12,380 --> 00:15:14,400 En dis toe dat hulle 'n besluit om dit te vernietig. 334 00:15:14,400 --> 00:15:18,520 Die reeks veiligheid beampte, met geweldige guts, druk die knoppie, 335 00:15:18,520 --> 00:15:23,900 blaas die vuurpyl voordat dit 'n gevaar vir die openbare veiligheid. 336 00:15:23,900 --> 00:15:27,810 >> Spreker 1: Dit was die eerste vaart van die Ariane 5, en die vernietiging 337 00:15:27,810 --> 00:15:32,020 plaasgevind het as gevolg van 'n fout ingesluit in die vuurpyl se sagteware. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: Die probleem op die Ariane was dat daar 'n aantal 339 00:15:33,980 --> 00:15:36,390 dat die vereiste 64 stukkies uit te druk. 340 00:15:36,390 --> 00:15:39,420 En hulle wou omskep 'n 16-bit nommer. 341 00:15:39,420 --> 00:15:43,130 Hulle het aanvaar dat die getal nooit was gaan baie groot wees, dat die meeste van 342 00:15:43,130 --> 00:15:46,810 die syfers in die 64-bit aantal was nulle. 343 00:15:46,810 --> 00:15:48,270 Hulle was verkeerd. 344 00:15:48,270 --> 00:15:51,380 >> Spreker 1: Die onvermoë van een-sagteware program die soort te aanvaar 345 00:15:51,380 --> 00:15:55,350 is gegenereer deur 'n ander was aan die wortel van die mislukking. 346 00:15:55,350 --> 00:15:59,970 Sagteware-ontwikkeling het 'n baie duur deel van nuwe tegnologie. 347 00:15:59,970 --> 00:16:03,980 Die Ariane 4 vuurpyl het baie gewees suksesvol is, so baie van die sagteware 348 00:16:03,980 --> 00:16:07,480 geskep want dit was ook gebruik word in die Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: Die basiese probleem was dat die Ariane 5 was vinniger, 350 00:16:11,980 --> 00:16:13,720 versnel vinniger. 351 00:16:13,720 --> 00:16:17,250 En die sagteware het nie verantwoordelik vir dat. 352 00:16:17,250 --> 00:16:20,770 >> Spreker 1: Die vernietiging van die vuurpyl was 'n groot finansiële ramp, 353 00:16:20,770 --> 00:16:24,200 alles te danke aan 'n minuut sagteware fout. 354 00:16:24,200 --> 00:16:27,820 Maar dit was nie die eerste keer data omskakeling probleme geteister het moderne 355 00:16:27,820 --> 00:16:30,620 vuurpyl tegnologie. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: In 1991, met die begin van die eerste Golf-oorlog, die Patriot 357 00:16:34,480 --> 00:16:38,610 missiel het 'n soortgelyke van 'n aantal omskakeling probleem. 358 00:16:38,610 --> 00:16:44,910 As 'n resultaat, 28 Amerikaanse soldate was dood en sowat 100 ander gewond 359 00:16:44,910 --> 00:16:48,600 wanneer die Patriot, wat veronderstel was om te beskerm teen die inkomende Scuds, 360 00:16:48,600 --> 00:16:51,630 versuim het om 'n missiel te vuur. 361 00:16:51,630 --> 00:16:55,110 >> Spreker 1: Wanneer Irak Koeweit en Amerika van stapel gestuur Desert Storm in 362 00:16:55,110 --> 00:17:00,570 vroeë 1991, Patriot missiele batterye ontplooi Saoedi-Arabië te beskerm 363 00:17:00,570 --> 00:17:04,760 en Israel uit Irak Scud missiel aanvalle. 364 00:17:04,760 --> 00:17:09,720 Die Patriot is 'n Amerikaanse medium-reeks oppervlak-tot-lug-stelsel vervaardig deur 365 00:17:09,720 --> 00:17:11,569 die Raytheon maatskappy. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE POSTOL: Die grootte van die Patriot Interceptor self is ongeveer 367 00:17:16,410 --> 00:17:17,710 20-meter lank. 368 00:17:17,710 --> 00:17:20,800 En dit weeg ongeveer 2000 pond. 369 00:17:20,800 --> 00:17:22,940 En dit dra 'n plofkop van ongeveer - 370 00:17:22,940 --> 00:17:24,905 Ek dink dit is ongeveer £ 150. 371 00:17:24,905 --> 00:17:31,030 En die Warhead self is 'n hoë plofbare wat 372 00:17:31,030 --> 00:17:33,270 fragmente rondom dit. 373 00:17:33,270 --> 00:17:37,490 Die omhulsel van die Warhead is ontwerp om op te tree soos Buck. 374 00:17:37,490 --> 00:17:40,720 >> Spreker 1: Die missiele gedra vier per houer en vervoer 375 00:17:40,720 --> 00:17:43,050 deur 'n semi sleepwa. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: Die Patriot anti-missiel stelsel gaan ten 377 00:17:47,490 --> 00:17:50,710 minste 20 jaar nou. 378 00:17:50,710 --> 00:17:54,350 Dit was oorspronklik ontwerp as 'n lug verdediging missiel te 379 00:17:54,350 --> 00:17:56,190 skiet vyand vliegtuie. 380 00:17:56,190 --> 00:18:02,490 In die eerste Golf-oorlog, toe die oorlog langs gekom het, het die weermag wou om dit te gebruik 381 00:18:02,490 --> 00:18:05,535 af te skiet Scuds, nie vliegtuie. 382 00:18:05,535 --> 00:18:09,310 Die Irakse lugmag was nie so veel van 'n probleem. 383 00:18:09,310 --> 00:18:12,450 Maar die leër is bekommerd oor Scuds. 384 00:18:12,450 --> 00:18:15,950 En so het hulle probeer om op te gradeer die Patriot. 385 00:18:15,950 --> 00:18:18,750 >> Spreker 1: Onderskep 'n vyand raket wat teen mach vyf was 386 00:18:18,750 --> 00:18:20,890 gaan nie genoeg wees om 'n uitdaging. 387 00:18:20,890 --> 00:18:25,590 Maar toe die Patriot is inderhaas na diens, die weermag was nie bewus van 'n 388 00:18:25,590 --> 00:18:31,710 Irak verandering wat hul Scuds byna onmoontlik om te tref. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE POSTOL: Wat gebeur het, is die Scuds wat 390 00:18:35,240 --> 00:18:36,570 kom in was onstabiel. 391 00:18:36,570 --> 00:18:37,532 Hulle is waggel. 392 00:18:37,532 --> 00:18:43,220 Die rede hiervoor was die Irak, in Om 600 kilometer te kry uit 'n 393 00:18:43,220 --> 00:18:47,530 300-kilometer-afstand missiel, het gewig van die voorste Warhead. 394 00:18:47,530 --> 00:18:49,290 Hulle het die Warhead ligter. 395 00:18:49,290 --> 00:18:53,110 So het die Patriot probeer om te kom op die Scud. 396 00:18:53,110 --> 00:18:56,470 En die meeste van die tyd, die oorweldigende meerderheid van die tyd, sou dit net 397 00:18:56,470 --> 00:18:58,730 vlieg deur die Scud. 398 00:18:58,730 --> 00:19:01,760 >> Spreker 1: Sodra die Patriot-stelsel operateurs besef die Patriot gemis 399 00:19:01,760 --> 00:19:06,690 sy teiken, het hulle ontplof die Patriotte Warhead te vermy moontlike 400 00:19:06,690 --> 00:19:10,300 ongevalle as dit toegelaat tot op die grond val. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE POSTOL: Dit was wat die meeste mense het so 'n groot vuurballe in die lug 402 00:19:14,540 --> 00:19:20,350 en misverstaan ​​as afsnitte van Scud hoofde. 403 00:19:20,350 --> 00:19:23,320 >> Spreker 1: Hoewel dit in die nag lug Patriotte verskyn om suksesvol te wees 404 00:19:23,320 --> 00:19:27,530 vernietig Scuds, by Dhahran daar kon geen fout wees om sy 405 00:19:27,530 --> 00:19:29,140 prestasie. 406 00:19:29,140 --> 00:19:34,180 Daar, die Patriot se radar stelsel verloor spoor van 'n inkomende Scud en nooit 407 00:19:34,180 --> 00:19:36,380 van stapel gestuur as gevolg van 'n sagteware fout. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Dit was die Israeli's wat die eerste keer ontdek dat hoe langer die stelsel 410 00:19:42,700 --> 00:19:48,020 was, hoe groter is die tyd verskil geword het as gevolg van 'n horlosie 411 00:19:48,020 --> 00:19:50,470 ingesluit in die stelsel se rekenaar. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Sowat twee weke voor die tragedie in Dhahran, die Israeli's 413 00:19:54,640 --> 00:19:58,440 gerapporteer word aan die Departement van Verdediging dat die stelsel verloor tyd. 414 00:19:58,440 --> 00:20:01,280 Na ongeveer agt ure van die bestuur, hulle het opgemerk dat die stelsel 415 00:20:01,280 --> 00:20:03,530 besig om merkbaar minder akkuraat. 416 00:20:03,530 --> 00:20:07,710 Die departement van verdediging het gereageer deur vertel al die Patriot batterye 417 00:20:07,710 --> 00:20:10,500 om nie laat die stelsels vir 'n lang tyd. 418 00:20:10,500 --> 00:20:12,430 Hulle het nooit gesê wat 'n lang tyd was. 419 00:20:12,430 --> 00:20:13,330 Agt uur? 420 00:20:13,330 --> 00:20:13,810 10 uur? 421 00:20:13,810 --> 00:20:14,990 1000 uur? 422 00:20:14,990 --> 00:20:17,150 Niemand het geweet. 423 00:20:17,150 --> 00:20:20,220 >> Spreker 1: The Patriot battery gestasioneer by die kamp by Dhahran 424 00:20:20,220 --> 00:20:24,660 en sy gebrekkige interne klok was op meer as 100 ure op die aand van 425 00:20:24,660 --> 00:20:27,470 25 Februarie. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: Dit nagespoor tyd om 'n akkuraatheid van sowat 'n tiende van 'n sekonde. 427 00:20:31,770 --> 00:20:34,480 Nou, 'n tiende van 'n sekonde is 'n interessante aantal want dit kan nie wees 428 00:20:34,480 --> 00:20:39,940 uitgedruk in binêre presies, wat beteken dit kan nie presies in word uitgespreek 429 00:20:39,940 --> 00:20:42,500 enige moderne digitale rekenaar. 430 00:20:42,500 --> 00:20:46,920 Dit is moeilik om te glo, maar gebruik as 'n voorbeeld. 431 00:20:46,920 --> 00:20:49,000 Kom ons neem die nommer een derde plek. 432 00:20:49,000 --> 00:20:53,150 Een derde uitgedruk kan word nie in desimale presies. 433 00:20:53,150 --> 00:20:57,500 Een derde is 0,333 gaan vir oneindig. 434 00:20:57,500 --> 00:21:02,270 Daar is geen manier om dit te doen met absolute akkuraatheid in desimaal. 435 00:21:02,270 --> 00:21:05,370 Dit is presies dieselfde soort probleem wat gebeur het in die Patriot. 436 00:21:05,370 --> 00:21:09,880 Hoe langer die stelsel het, die ergste die tyd fout geword. 437 00:21:09,880 --> 00:21:13,840 >> Spreker 1: Na 100 ure van die operasie, die fout in die tyd was net 438 00:21:13,840 --> 00:21:16,140 ongeveer 'n derde van 'n sekonde. 439 00:21:16,140 --> 00:21:20,800 Maar in terme van die fokus op 'n raket wat teen mach vyf, dit het gelei tot 440 00:21:20,800 --> 00:21:24,410 'n dop fout van meer as 600 meter. 441 00:21:24,410 --> 00:21:27,670 Dit sou 'n fatale fout wees vir die soldate by Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE POSTOL: Wat gebeur het, is 'n Scud bekendstelling is waargeneem deur vroeë 443 00:21:33,450 --> 00:21:34,280 waarskuwing satelliete. 444 00:21:34,280 --> 00:21:38,550 En hulle het geweet dat die Scud kom in hul algemene rigting. 445 00:21:38,550 --> 00:21:41,000 Hulle het nie geweet waar dit vandaan kom. 446 00:21:41,000 --> 00:21:43,900 >> Spreker 1: Dit was nou tot die radar komponent van die Patriot-stelsel 447 00:21:43,900 --> 00:21:48,910 verdedig Dhahran op te spoor en te hou spoor van die inkomende vyand missiele. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: Die radar was baie slim. 449 00:21:50,580 --> 00:21:53,770 Dit sou eintlik die spoor van die posisie van die Scud en dan voorspel waar dit 450 00:21:53,770 --> 00:21:57,160 sal waarskynlik die volgende keer die radar het 'n pols uit. 451 00:21:57,160 --> 00:21:58,870 Dit was bekend as die reeks hek. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE POSTOL: Dan sodra die Patriot besluit om nie van genoeg tyd geslaag het om te gaan 453 00:22:04,020 --> 00:22:09,420 terug en maak seker die volgende plek vir hierdie bespeur voorwerp, gaan dit terug. 454 00:22:09,420 --> 00:22:14,450 So wanneer dit gaan terug na die verkeerde plek, sien dan geen voorwerp. 455 00:22:14,450 --> 00:22:18,200 En hy besluit dat daar geen voorwerp, dit was 'n valse opsporing en 456 00:22:18,200 --> 00:22:19,680 daal die baan. 457 00:22:19,680 --> 00:22:22,970 >> Spreker 1: Die inkomende Scud verdwyn van die radar skerm, en 458 00:22:22,970 --> 00:22:26,050 sekondes later is dit klap in die kamp. 459 00:22:26,050 --> 00:22:31,950 Die Scud vermoor 28 en was die laaste een afgevuur tydens die eerste Golfoorlog. 460 00:22:31,950 --> 00:22:37,700 Dit is tragies dat die pasgemaakte sagteware aangekom by Dhahran die volgende dag. 461 00:22:37,700 --> 00:22:41,800 Die sagteware fout is vasgestel, sluiting van 'n hoofstuk in die onstuimige 462 00:22:41,800 --> 00:22:43,690 geskiedenis van die Patriot raket. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot is eintlik 'n afkorting vir Gefaseerde Array dop 465 00:22:50,710 --> 00:22:51,960 Afsnit van teiken. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> David J MALAN: Alle reg, so 'n nugter Byvoorbeeld, om seker te wees. 468 00:23:00,840 --> 00:23:03,430 En gelukkig hierdie laer vlak foute is nie iets wat ons sal 469 00:23:03,430 --> 00:23:06,220 gewoonlik het om te waardeer, seker nie met 'n paar van ons 470 00:23:06,220 --> 00:23:07,360 vroegste van programme. 471 00:23:07,360 --> 00:23:10,450 Inteendeel, die meeste van die foute sal jy ontmoeting sal wees logiese in die natuur, 472 00:23:10,450 --> 00:23:12,900 sintaktiese in die natuur waardeur die kode is net nie reg werk nie. 473 00:23:12,900 --> 00:23:14,140 En jy weet dit redelik vinnig. 474 00:23:14,140 --> 00:23:16,850 >> Maar veral wanneer ons by die einde van die semester, gaan dit 475 00:23:16,850 --> 00:23:20,620 raak meer en meer van 'n moontlikheid om te werklik moeilik om te dink oor die ontwerp 476 00:23:20,620 --> 00:23:22,960 van jou programme en die onderliggende verteenwoordiging 477 00:23:22,960 --> 00:23:24,520 daar ook, van die data. 478 00:23:24,520 --> 00:23:28,010 Byvoorbeeld, sal ons voer MySQL, Dit is 'n gewilde databasis enjin 479 00:23:28,010 --> 00:23:30,850 wat jy kan gebruik met webtuistes stoor data op die agterkant. 480 00:23:30,850 --> 00:23:34,630 En jy het om te begin om te besluit op die einde van die semester nie net wat 481 00:23:34,630 --> 00:23:38,790 tipes data langs hierdie lyne te gebruik maar presies hoeveel stukkies te gebruik, 482 00:23:38,790 --> 00:23:42,740 of jy wil datums te stoor as datums en tye soos tye, en ook 483 00:23:42,740 --> 00:23:46,890 dinge soos hoe groot wil jy die unieke ID's te wees vir, sê, die gebruikers 484 00:23:46,890 --> 00:23:47,680 in jou databasis. 485 00:23:47,680 --> 00:23:51,210 >> In werklikheid, as sommige van julle het moes Facebook rekeninge vir 'n geruime tyd, 486 00:23:51,210 --> 00:23:53,680 en jy weet hoe om toegang te kry jou gebruikersnaam - 487 00:23:53,680 --> 00:23:57,930 wat toon soms in jou profiel se URL, tensy jy 'n gekies het 488 00:23:57,930 --> 00:24:02,070 bynaam vir die URL, of as jy het Facebook gebruik se grafiek API, die 489 00:24:02,070 --> 00:24:05,510 publiek sigbaar API deur wat jy kan vra Facebook vir rou data - 490 00:24:05,510 --> 00:24:07,580 jy kan sien wat jou numeriese ID is. 491 00:24:07,580 --> 00:24:10,880 En 'n paar jaar gelede, Facebook wese gehad het om te verander van die gebruik van 492 00:24:10,880 --> 00:24:15,980 die ekwivalent van ints om die gebruik van lang lank, want met verloop van tyd as gebruikers kom 493 00:24:15,980 --> 00:24:19,780 en gaan en die skep van baie van die rekeninge en vals rekeninge, selfs hulle baie maklik 494 00:24:19,780 --> 00:24:24,630 in staat was om iets te put soos 'n 4 miljard moontlike waarde soos 'n int. 495 00:24:24,630 --> 00:24:28,340 >> So meer oor dié soort kwessies op die pad, as well. 496 00:24:28,340 --> 00:24:30,750 Alle reg, so dit was giet. 497 00:24:30,750 --> 00:24:31,670 Dit was onakkuraatheid. 498 00:24:31,670 --> 00:24:32,730 'N Paar vinnige aankondiging. 499 00:24:32,730 --> 00:24:35,710 So afdelings formeel begin eerskomende Sondag, Maandag, Dinsdag. 500 00:24:35,710 --> 00:24:39,080 Jy sal per e-pos later vandeesweek hoor as jou artikel opdrag. 501 00:24:39,080 --> 00:24:42,570 En jy sal ook hier op daardie tydstip hoe jou artikel te verander as jou 502 00:24:42,570 --> 00:24:45,660 skedule het nou verander of jou comfort vlak het nou verander. 503 00:24:45,660 --> 00:24:49,380 Intussen P-set een en hacker een is as gevolg van hierdie Donderdag met die opsie om te 504 00:24:49,380 --> 00:24:52,450 uit te brei dat die sperdatum per die spesifikasies tot Vrydag 505 00:24:52,450 --> 00:24:53,830 in 'n tipiese manier. 506 00:24:53,830 --> 00:24:57,500 >> Besef dat ingesluit met die probleem stel spesifikasies is instruksies op 507 00:24:57,500 --> 00:25:02,770 hoe die CS50 toestel te gebruik, maak, asook 'n paar CS50 spesifieke gereedskap 508 00:25:02,770 --> 00:25:06,540 agtige styl 50, wat kan jy terugvoer dinamies op die 509 00:25:06,540 --> 00:25:10,230 kwaliteit van jou kode styl en ook kyk 50, wat kan jy met 510 00:25:10,230 --> 00:25:13,160 dinamiese terugvoer aan jou kode se korrektheid. 511 00:25:13,160 --> 00:25:16,850 Vergewe dat ons nog steeds stryk 'n aantal probleme met tjek 50. 512 00:25:16,850 --> 00:25:21,490 'N paar van jou klasmaats wat begin het om 04:00 op Vrydag nag wanneer 513 00:25:21,490 --> 00:25:25,130 die spec opgegaan opgemerk het sedertdien 'n paar foute wat ons werk 514 00:25:25,130 --> 00:25:29,010 deur, en vra om verskoning vir enige iemand wat ervaar onnodige frustrasies. 515 00:25:29,010 --> 00:25:30,340 Die fout is myne. 516 00:25:30,340 --> 00:25:34,080 Maar ons sal volg op die CS50 bespreek wanneer dit opgelos is. 517 00:25:34,080 --> 00:25:35,700 >> So 'n woord oor die tellings hulself. 518 00:25:35,700 --> 00:25:38,990 So dit sal 'n week of twee voor jy begin terugvoer oor probleem stelle te kry 519 00:25:38,990 --> 00:25:40,640 omdat jy nog nie ' 'n onderrig mede. 520 00:25:40,640 --> 00:25:44,510 En selfs dan, sal ons begin om te evalueer die C probleem stel voor ons 521 00:25:44,510 --> 00:25:46,970 terug te gaan en te evalueer nuuts af so dat jy meer relevante 522 00:25:46,970 --> 00:25:48,150 terugvoer vinniger. 523 00:25:48,150 --> 00:25:51,870 Maar in die algemeen per die leerplan, CS50 probleem stelle geëvalueer langs die 524 00:25:51,870 --> 00:25:53,580 volgende vier asse - 525 00:25:53,580 --> 00:25:55,760 omvang, korrektheid, ontwerp en styl. 526 00:25:55,760 --> 00:25:59,210 >> Omvang gaan 'n aantal tipies tussen nul en vyf wat 527 00:25:59,210 --> 00:26:01,830 vang hoeveel van die stuk wat jy afgebyt. 528 00:26:01,830 --> 00:26:03,750 Tipies, jy wil dit te wees vyf. 529 00:26:03,750 --> 00:26:05,300 Jy ten minste probeer om alles. 530 00:26:05,300 --> 00:26:09,330 En sien dit is 'n vermenigvuldigende faktor sodat doen net 'n deel van die 531 00:26:09,330 --> 00:26:12,520 gestelde probleem is nie die beste strategie. 532 00:26:12,520 --> 00:26:15,610 >> Intussen het meer voor die hand liggend is die belangrikheid van die korrektheid - 533 00:26:15,610 --> 00:26:18,620 net jou program korrek met respekteer die spesifikasie? 534 00:26:18,620 --> 00:26:21,510 Dit is doelbewus meer geweeg swaarder as die ander twee asse deur 'n 535 00:26:21,510 --> 00:26:24,450 faktor van drie, want ons erken wat tipies jy gaan 'n te spandeer 536 00:26:24,450 --> 00:26:28,600 baie meer tyd jaag 'n paar foute, om jou kode te werk nie, dan is jy 537 00:26:28,600 --> 00:26:31,540 is insp dit en die keuse toepaslike veranderlike name en die 538 00:26:31,540 --> 00:26:33,800 hou, wat aan die ander kant van die spektrum van die styl. 539 00:26:33,800 --> 00:26:36,160 >> Dit is nie te sê styl is nie belangrik, en ons sal dit preek oor 540 00:26:36,160 --> 00:26:37,920 tyd om beide in lesings en in afdelings. 541 00:26:37,920 --> 00:26:40,520 Styl verwys na die estetika van die kode. 542 00:26:40,520 --> 00:26:43,980 Het jy gekies goed genoem veranderlikes wat kort is, maar 'n bietjie 543 00:26:43,980 --> 00:26:44,680 beskrywende? 544 00:26:44,680 --> 00:26:47,840 Is jou kode ingekeep as jy gesien het in lesing en in 'n wyse wat in ooreenstemming 545 00:26:47,840 --> 00:26:49,070 met styl 50? 546 00:26:49,070 --> 00:26:51,220 >> Laastens is ontwerp reg daar in die middel. 547 00:26:51,220 --> 00:26:54,090 Ontwerp is die moeiliker een om 'n sit vinger op, want dit is baie meer 548 00:26:54,090 --> 00:26:55,000 subjektiewe. 549 00:26:55,000 --> 00:26:58,610 Maar dit is dalk die belangrikste van die drie asse in terme van opvoedkundige 550 00:26:58,610 --> 00:27:02,050 waarde oor tyd en dat dit sal wees die onderrig man se geleentheid om 551 00:27:02,050 --> 00:27:04,110 voorsien u met kwalitatiewe terugvoer. 552 00:27:04,110 --> 00:27:08,100 Inderdaad, in CS50 selfs al het ons te doen het hierdie formules en tellings, aan die einde 553 00:27:08,100 --> 00:27:11,350 van die dag dit is baie doelbewus baie klein emmers - punt waardes 554 00:27:11,350 --> 00:27:13,460 tussen nul en drie en 'n nul en vyf. 555 00:27:13,460 --> 00:27:17,800 Ons probeer nie baie grof lyne te trek tussen probleem-stelle of tussen 556 00:27:17,800 --> 00:27:21,490 studente nie, maar eerder soveel as fokus ons kan op kwalitatiewe, skuldbewys 557 00:27:21,490 --> 00:27:25,490 terugvoer, hetsy getikte of verbale uit jou spesifieke onderrig mede, 558 00:27:25,490 --> 00:27:27,050 jy kry om baie goed ken. 559 00:27:27,050 --> 00:27:32,340 >> Maar in die algemeen, dit is die gewigte dat die verskillende asse sal hê. 560 00:27:32,340 --> 00:27:35,480 Intussen het ook, dit is die moeite werd om in gedagte dat jy nie moet aanvaar dat 'n 561 00:27:35,480 --> 00:27:38,870 drie uit vyf is 'n 60% en dus rofweg misluk. 562 00:27:38,870 --> 00:27:41,410 Drie is doelbewus bedoel om te wees soort middel van die pad goed. 563 00:27:41,410 --> 00:27:43,480 As jy kry drieë teen die die begin van die semester, wat 564 00:27:43,480 --> 00:27:46,340 inderdaad bedoel om 'n goeie plek om te begin. 565 00:27:46,340 --> 00:27:50,510 As jy kry twee-twee, feeste, is daar beslis 'n paar werk 'n bietjie te betaal 566 00:27:50,510 --> 00:27:53,250 meer aandag aan te neem voordeel artikels en kantoorure. 567 00:27:53,250 --> 00:27:54,590 >> As jy kry viere en twintigs, groot. 568 00:27:54,590 --> 00:27:57,430 Maar regtig, ons hoop bane te sien onder studente - baie 569 00:27:57,430 --> 00:28:00,575 geïndividualiseer per student, maar begin die semester hier in soort 570 00:28:00,575 --> 00:28:04,100 die twee aan die drie-reeks, maar eindig hier in die 04:56-reeks. 571 00:28:04,100 --> 00:28:05,440 Dit is wat ons regtig op soek is na. 572 00:28:05,440 --> 00:28:09,590 En ons in gedagte hou dat die delta jy uitstal tussen week nul en week 573 00:28:09,590 --> 00:28:12,170 12 grade toe ek is besig. 574 00:28:12,170 --> 00:28:16,380 Dit maak nie saak vir ons absoluut hoe jy billike aan die begin as jou 575 00:28:16,380 --> 00:28:19,330 trajek is inderdaad opwaartse en sterk. 576 00:28:19,330 --> 00:28:24,000 >> Akademiese eerlikheid - so laat my op my meer ernstige stem vir net 'n oomblik. 577 00:28:24,000 --> 00:28:28,510 So hierdie kursus het die onderskeiding die stuur van meer studente as enige ander 578 00:28:28,510 --> 00:28:30,950 in die geskiedenis van die advertensie bord, ek glo nie. 579 00:28:30,950 --> 00:28:34,220 Ons het soort van telling verloor op hierdie punt van hoe dikwels dit gebeur. 580 00:28:34,220 --> 00:28:37,090 En dit is nie omdat die studente in 50 is nie meer oneerlik as hul 581 00:28:37,090 --> 00:28:38,690 klasmaats elders. 582 00:28:38,690 --> 00:28:42,800 Maar besef ook dat ons baie goeie die opsporing van hierdie soort van ding. 583 00:28:42,800 --> 00:28:45,920 >> En wat is die voordeel dat 'n Rekenaarwetenskap-klas het in wat ons 584 00:28:45,920 --> 00:28:49,110 en kan ons vergelyk alle studente probleem sit paarsgewyse teen elke 585 00:28:49,110 --> 00:28:51,470 ander, nie net hierdie jaar maar al die vorige jare. 586 00:28:51,470 --> 00:28:55,080 Ons het die vermoë om, soos studente in die klas te Google en te vind kode 587 00:28:55,080 --> 00:28:57,440 op webwerwe soos GitHub en gespreksforums. 588 00:28:57,440 --> 00:29:00,840 Daar is absoluut oplossings te CS50 se p-stelle rond dryf daar. 589 00:29:00,840 --> 00:29:02,710 Maar as jy nie kan kry nie, kan ons dit vind. 590 00:29:02,710 --> 00:29:07,130 En dit alles is baie outomatiese en maklik en hartseer vir ons om uit te vind. 591 00:29:07,130 --> 00:29:10,990 >> Maar ek wil beklemtoon ook dat die Natuurlik se akademiese eerlikheid beleid is 592 00:29:10,990 --> 00:29:13,960 baie bedoel om te wees baie die teenoorgestelde van die gees. 593 00:29:13,960 --> 00:29:17,506 Inderdaad, hierdie jaar het ons herfraseer dinge in die leerplan te wees nie, dot 594 00:29:17,506 --> 00:29:19,790 dot dot, met meer besonderhede in die leerplan. 595 00:29:19,790 --> 00:29:22,860 Maar die oorkoepelende tema in die loop werklik is om redelik te wees. 596 00:29:22,860 --> 00:29:26,160 Ons erken dat daar 'n beduidende bedrag van opvoedkundige 597 00:29:26,160 --> 00:29:30,550 waarde in vennootskappe, tot 'n mate, met klasmaats, waardeur jy 598 00:29:30,550 --> 00:29:33,700 twee of drie of jy nie meer is staan ​​op 'n wit bord 599 00:29:33,700 --> 00:29:35,670 white, so te praat, jou idees - 600 00:29:35,670 --> 00:29:39,480 uitskryf pseudokode in foto's, diagram wat moet Mario wees as 601 00:29:39,480 --> 00:29:41,350 jy was om te skryf dit eerste in pseudokode. 602 00:29:41,350 --> 00:29:43,240 Wat moet die gulsige algoritme - 603 00:29:43,240 --> 00:29:46,100 hoe moet dit gedra per probleem maak 'n mens? 604 00:29:46,100 --> 00:29:50,440 >> En so het besef dat gedrag dat ons moedig is baie 605 00:29:50,440 --> 00:29:51,470 veel langs die lyne. 606 00:29:51,470 --> 00:29:53,890 En in die leerplan, sien jy 'n hele klomp van die koeëls onder 'n 607 00:29:53,890 --> 00:29:57,740 redelike kategorie en 'n nie redelike kategorie wat help om ons te help 608 00:29:57,740 --> 00:30:00,740 jy draai jou gedagtes rondom waar ons trek die lyn. 609 00:30:00,740 --> 00:30:04,340 En in die algemeen, 'n ordentlike reël is dat as jy sukkel om op te los 610 00:30:04,340 --> 00:30:07,990 'n fout en jou vriend of klasmaat is langs jou sit, is dit 611 00:30:07,990 --> 00:30:11,530 redelike vir jou om hom te wys of haar jou kode en sê, hey, jy kan help 612 00:30:11,530 --> 00:30:13,700 my uit te vind wat verkeerd gaan hier? 613 00:30:13,700 --> 00:30:17,110 >> Ons doen gewoonlik nie omhels die teenoorgestelde kant. 614 00:30:17,110 --> 00:30:20,730 Dit is nie 'n korrekte antwoord vir jou vriend of klasmaat hier om te sê, o, 615 00:30:20,730 --> 00:30:22,510 kyk net na my en figuur dit uit dat. 616 00:30:22,510 --> 00:30:24,400 Dit is 'n soort van onredelik. 617 00:30:24,400 --> 00:30:27,750 Maar met iemand anders, 'n ander brein, nog 'n paar van die oë kyk na 618 00:30:27,750 --> 00:30:31,620 jou skerm of kyk na jou kode en sê, is jy seker jy wil hê 619 00:30:31,620 --> 00:30:32,760 'n lus om hier te hê? 620 00:30:32,760 --> 00:30:34,800 Of is jy seker jy wil dat kommapunt hier? 621 00:30:34,800 --> 00:30:37,090 Of o, die fout boodskap beteken dit. 622 00:30:37,090 --> 00:30:39,580 Dit is 'n baie redelike en aangemoedig om gedrag. 623 00:30:39,580 --> 00:30:44,010 >> Die gevalle wat ek het verwys na vroeër neer op wanneer studente 624 00:30:44,010 --> 00:30:47,350 laat in die nag maak swak oordeel besluite en e-pos die kode te 625 00:30:47,350 --> 00:30:50,130 iemand anders of sommer net te sê: hier, dis in Dropbox of 626 00:30:50,130 --> 00:30:51,610 Googlen laat in die nag. 627 00:30:51,610 --> 00:30:54,880 En so sou ek moedig en te smeek jou, as jy het die onvermydelike 628 00:30:54,880 --> 00:30:58,450 oomblikke van stres, jy stamp tot teen die sperdatum, het jy geen laat 629 00:30:58,450 --> 00:31:01,490 dag want dit is reeds Vrydag op daardie punt, e-pos die kursus se koppe of 630 00:31:01,490 --> 00:31:02,330 myself direk. 631 00:31:02,330 --> 00:31:04,790 Sê, luister, ek is by my breekpunt hier. 632 00:31:04,790 --> 00:31:06,660 Let's het 'n gesprek en dit uitwerk. 633 00:31:06,660 --> 00:31:10,400 Toevlug tot die web of 'n ander nie redelike gedrag is nooit die 634 00:31:10,400 --> 00:31:13,070 oplossing, en te veel van jou klasmaats is nie meer hier op 635 00:31:13,070 --> 00:31:15,150 kampus as gevolg van daardie swak oordeel. 636 00:31:15,150 --> 00:31:17,840 Maar dit is baie maklik om die lyn te romp. 637 00:31:17,840 --> 00:31:22,950 >> En hier is 'n bietjie prentjie te beur julle uit Reddit sodat nou 638 00:31:22,950 --> 00:31:25,720 alles sal OK wees. 639 00:31:25,720 --> 00:31:30,210 >> So 'n vinnige terugblik, dan, van waar ons opgehou het. 640 00:31:30,210 --> 00:31:33,690 So verlede week, onthou dat ons voer voorwaardes, nie in Scratch 641 00:31:33,690 --> 00:31:34,880 maar in C hierdie tyd. 642 00:31:34,880 --> 00:31:38,300 En daar was 'n paar nuwe sintaksis, maar regtig geen nuwe idees per se. 643 00:31:38,300 --> 00:31:42,630 Ons het Boole uitdrukkings wat ons kon of saam met twee vertikale 644 00:31:42,630 --> 00:31:46,490 bars of en saam met twee amper sand, sê dat beide die linker- 645 00:31:46,490 --> 00:31:49,990 en die reg moet waar wees vir hierdie uit te voer. 646 00:31:49,990 --> 00:31:53,150 Toe moes ons skakelaars, wat ons gekyk op kort, maar ek stel regtig 647 00:31:53,150 --> 00:31:56,830 net verskillende sintaksis vir die bereiking van die dieselfde soort van die doel as jy weet in 648 00:31:56,830 --> 00:31:59,270 bevorder wat jou gevalle gaan wees. 649 00:31:59,270 --> 00:32:00,160 >> Ons kyk na loops. 650 00:32:00,160 --> 00:32:03,340 'N lus vir miskien die mees algemene, of ten minste die een wat mense 651 00:32:03,340 --> 00:32:05,330 tipies bereik vir instinktief. 652 00:32:05,330 --> 00:32:08,240 Selfs al is dit lyk 'n bietjie kripties, sal jy sien baie, baie voorbeelde van hierdie 653 00:32:08,240 --> 00:32:11,590 kort voor lank, as jy reeds laat verlede week. 654 00:32:11,590 --> 00:32:14,280 Terwyl sirkelroetes kan insgelyks bereik dieselfde ding. 655 00:32:14,280 --> 00:32:17,550 Maar as jy wil enige incrementation te doen of opdatering van 656 00:32:17,550 --> 00:32:20,230 veranderlike se waardes, wat jy hoef te doen dit meer met die hand as die 657 00:32:20,230 --> 00:32:22,440 lus vir laat voor. 658 00:32:22,440 --> 00:32:25,310 En dan is daar die do-while lus, wat ons toelaat om iets te doen aan 659 00:32:25,310 --> 00:32:28,460 minste een keer, terwyl iets anders is die waarheid. 660 00:32:28,460 --> 00:32:31,550 En dit is veral goed vir programme of speletjies waar jy wil 661 00:32:31,550 --> 00:32:33,810 die gebruiker om iets aan te spoor ten minste een keer. 662 00:32:33,810 --> 00:32:37,110 En dan, indien hy of sy nie saam te werk, jy dalk wil om dit te doen 663 00:32:37,110 --> 00:32:38,420 weer en weer. 664 00:32:38,420 --> 00:32:41,270 >> Met veranderlikes, intussen, het ons lyne van die kode soos hierdie, wat kan 665 00:32:41,270 --> 00:32:41,950 twee lyne. 666 00:32:41,950 --> 00:32:44,830 Jy kan verklaar 'n int genoem toonbank, kommapunt. 667 00:32:44,830 --> 00:32:47,660 Of jy kan net verklaar en definieer dit, om so te praat. 668 00:32:47,660 --> 00:32:49,950 Gee dit 'n waarde op dieselfde tyd. 669 00:32:49,950 --> 00:32:51,890 >> En dan laastens, het ons gepraat oor funksies. 670 00:32:51,890 --> 00:32:54,270 En dit was 'n mooi voorbeeld in die sin dat dit illustreer 671 00:32:54,270 --> 00:32:55,840 twee tipes funksies. 672 00:32:55,840 --> 00:32:59,030 Een daarvan is GetString (), wat weer kry 'n string van die gebruiker. 673 00:32:59,030 --> 00:33:02,040 Maar GetString () is 'n soort van interessante, so ver as wat ons dit gebruik het, 674 00:33:02,040 --> 00:33:05,620 want ons het dit altyd met iets op die linkerkant van 'n 675 00:33:05,620 --> 00:33:06,600 gelyke teken. 676 00:33:06,600 --> 00:33:09,830 Dit is dat GetString (om te sê) return. 677 00:33:09,830 --> 00:33:11,970 Is dit terug, natuurlik, 'n string. 678 00:33:11,970 --> 00:33:15,130 En dan op die linkerkant, is ons eenvoudig spaar dat string binnekant van 'n 679 00:33:15,130 --> 00:33:16,580 veranderlike genoem naam. 680 00:33:16,580 --> 00:33:21,100 >> Dit is anders, in 'n sin van printf omdat printf, ten minste in ons 681 00:33:21,100 --> 00:33:23,540 gebruik hier, kom nie terug nie. 682 00:33:23,540 --> 00:33:24,960 As 'n eenkant, is dit nie weer iets teruggee. 683 00:33:24,960 --> 00:33:26,380 Ons het net nie omgee wat dit is. 684 00:33:26,380 --> 00:33:29,090 Maar dit het wel wat is bekend as 'n newe-effek. 685 00:33:29,090 --> 00:33:31,840 En wat is die newe-effek in elke geval het ons tot dusver gesien het nie? 686 00:33:31,840 --> 00:33:34,720 Wat beteken printf doen? 687 00:33:34,720 --> 00:33:37,780 Hy druk om iets aan die skerm, vertoon teks of getalle of iets 688 00:33:37,780 --> 00:33:38,380 op die skerm. 689 00:33:38,380 --> 00:33:41,170 En dit is net beskou as 'n newe-effek want dit is nie regtig oorhandig 690 00:33:41,170 --> 00:33:41,900 dit terug na my. 691 00:33:41,900 --> 00:33:44,770 Dit is nie 'n antwoord binne 'n swart boks wat ek kan dan 692 00:33:44,770 --> 00:33:46,130 bereik in en gryp. 693 00:33:46,130 --> 00:33:49,160 Dit is net om dit te doen op sy eie, baie soos Colton is ingeprop in hierdie 694 00:33:49,160 --> 00:33:52,560 black box verlede week, en hy het een of ander manier Nou, is op grond van die direksie 695 00:33:52,560 --> 00:33:54,500 sonder dat ek eintlik betrokke is. 696 00:33:54,500 --> 00:33:55,560 Dit sou 'n newe-effek wees. 697 00:33:55,560 --> 00:33:59,100 Maar as ek eintlik moes bereik terug in hier en sê, o, hier is die string 698 00:33:59,100 --> 00:34:02,040 van die gebruiker, wat sou 'n terugkeer waarde. 699 00:34:02,040 --> 00:34:05,650 >> En tot dusver het ons slegs gebruik funksies wat ander mense geskryf het. 700 00:34:05,650 --> 00:34:09,219 Maar ons kan eintlik doen om hierdie allerhande dinge onsself. 701 00:34:09,219 --> 00:34:12,730 So ek gaan om te gaan in die CS50 toestel weer. 702 00:34:12,730 --> 00:34:16,020 Laat my naby die blad dat ons het 'n oomblik gelede geopen. 703 00:34:16,020 --> 00:34:18,530 En laat my gaan voort en 'n nuwe lêer. 704 00:34:18,530 --> 00:34:22,400 En ek gaan om voort te gaan en noem dit een positive.c. 705 00:34:22,400 --> 00:34:24,770 So ek wil iets te doen het met positiewe getalle hier. 706 00:34:24,770 --> 00:34:27,219 So ek gaan om voort te gaan en te doen int - 707 00:34:27,219 --> 00:34:28,000 jammer - 708 00:34:28,000 --> 00:34:31,840 # Sluit. 709 00:34:31,840 --> 00:34:34,280 Laat ons nie dieselfde fout as tevore. 710 00:34:34,280 --> 00:34:40,020 Int main (void), oop krullerige stut, gesluit krullerige stut. 711 00:34:40,020 --> 00:34:41,639 >> En nou wil ek die volgende te doen. 712 00:34:41,639 --> 00:34:44,600 Ek wil 'n program te skryf wat dring daarop aan dat die gebruiker gee 713 00:34:44,600 --> 00:34:46,770 vir my 'n positiewe heelgetal. 714 00:34:46,770 --> 00:34:50,969 So daar is geen GetPositiveInt funksie in die CS50 biblioteek. 715 00:34:50,969 --> 00:34:52,610 Daar is net getint (). 716 00:34:52,610 --> 00:34:55,790 Maar dis OK, want ek het die konstrukte waarmee ek kan lê 'n 717 00:34:55,790 --> 00:34:59,360 bietjie meer beperking op die waarde. 718 00:34:59,360 --> 00:35:00,990 Ek kon doen iets soos hierdie. 719 00:35:00,990 --> 00:35:02,780 >> So int n - 720 00:35:02,780 --> 00:35:04,920 en as jy tik saam, net besef Ek gaan om terug te gaan en 721 00:35:04,920 --> 00:35:06,430 verander 'n paar dinge in 'n oomblik - 722 00:35:06,430 --> 00:35:09,960 so int n gelyk getint (). 723 00:35:09,960 --> 00:35:11,780 En wat gaan sit 'n int binnekant van n. 724 00:35:11,780 --> 00:35:13,830 En laat my 'n meer beskrywende. 725 00:35:13,830 --> 00:35:23,270 Laat my sê iets soos ek eis dat jy gee my 'n positiewe heelgetal. 726 00:35:23,270 --> 00:35:23,550 >> Alle regte. 727 00:35:23,550 --> 00:35:25,250 So net 'n bietjie van instruksies. 728 00:35:25,250 --> 00:35:26,270 Maar nou, wat kan ek doen? 729 00:35:26,270 --> 00:35:29,840 Wel, ek weet reeds van my eenvoudige voorwaardes of takke, net soos ek 730 00:35:29,840 --> 00:35:36,100 het in nuuts af, kon ek iets sê graag as n minder as of gelyk aan 731 00:35:36,100 --> 00:35:44,460 nul is, dan wil ek iets te doen hou nie, wat nie positief is nie. 732 00:35:44,460 --> 00:35:45,560 En dan het ek kon doen nie - 733 00:35:45,560 --> 00:35:47,310 OK, maar ek wil regtig dat int te kry. 734 00:35:47,310 --> 00:35:52,020 So ek kon gaan hier en ek kon soort afskrif van hierdie en streepje hierdie. 735 00:35:52,020 --> 00:35:52,570 En dan, OK. 736 00:35:52,570 --> 00:35:56,990 So as n minder as of gelyk aan nul doen. 737 00:35:56,990 --> 00:35:58,900 >> Nou, wat as die gebruiker nie saam te werk? 738 00:35:58,900 --> 00:36:01,560 Wel, dan gaan ek leen dit hier. 739 00:36:01,560 --> 00:36:03,130 En dan gaan ek in hier en hier en hier. 740 00:36:03,130 --> 00:36:06,420 So dit is duidelik nie Die oplossing, reg? 741 00:36:06,420 --> 00:36:07,810 Want daar is geen einde in sig nie. 742 00:36:07,810 --> 00:36:13,100 As ek wil om te eis dat die gebruiker gee vir my 'n positiewe heelgetal is, kan ek 743 00:36:13,100 --> 00:36:14,150 kry eintlik die int. 744 00:36:14,150 --> 00:36:15,620 Ek kan dan kyk vir daardie int. 745 00:36:15,620 --> 00:36:18,570 Maar dan wil ek dit weer na te gaan en check dit weer en kyk na dit weer. 746 00:36:18,570 --> 00:36:21,680 So natuurlik, wat is die beter bou word hier gebruik? 747 00:36:21,680 --> 00:36:22,840 Alle reg, so 'n soort van lus. 748 00:36:22,840 --> 00:36:25,430 >> So ek gaan om ontslae te raak van byna al hierdie dinge. 749 00:36:25,430 --> 00:36:27,320 En ek wil om dit te kry int ten minste een keer. 750 00:36:27,320 --> 00:36:28,890 So ek gaan om te sê nie - 751 00:36:28,890 --> 00:36:32,110 en ek sal terug te kom na die terwyl dit in 'n oomblik - 752 00:36:32,110 --> 00:36:33,050 Nou, wat? 753 00:36:33,050 --> 00:36:35,860 Ek gaan int n kry getint () te doen. 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 So dit is redelik goed. 756 00:36:37,250 --> 00:36:39,750 En nou hoe dikwels Ek wil om dit te doen? 757 00:36:39,750 --> 00:36:45,770 >> Laat ek die printf binnekant van die loop sodat ek kan weer en weer vra, 758 00:36:45,770 --> 00:36:46,740 indien nodig wees. 759 00:36:46,740 --> 00:36:49,720 En wat wil ek hierdie terwyl toestand te doen? 760 00:36:49,720 --> 00:36:53,870 Ek wil om te hou om dit te doen terwyl wat die geval is? 761 00:36:53,870 --> 00:36:54,125 Ja. 762 00:36:54,125 --> 00:36:55,390 N minder as of gelyk aan nul. 763 00:36:55,390 --> 00:36:58,180 So al, ons het aansienlik skoongemaak hierdie kode up. 764 00:36:58,180 --> 00:37:00,700 Ons het geleen 'n baie eenvoudige bou - die do-while lus. 765 00:37:00,700 --> 00:37:04,690 Ek het gesteel net die belangrike lyne van die kode wat ek begin het en kopiëring 766 00:37:04,690 --> 00:37:05,960 plak, wat nie wys nie. 767 00:37:05,960 --> 00:37:09,790 En so nou gaan ek eintlik plak dit in hier en doen dit net een keer. 768 00:37:09,790 --> 00:37:12,990 >> En nou wat ek wil doen die einde van hierdie program? 769 00:37:12,990 --> 00:37:16,810 Ek sal net sê iets eenvoudig hou, dankie vir die - en 770 00:37:16,810 --> 00:37:18,980 Ek sal% i vir int - 771 00:37:18,980 --> 00:37:23,270 agteroorskuisstreep n, komma, en dan plug in n, kommapunt. 772 00:37:23,270 --> 00:37:23,910 >> Alle regte. 773 00:37:23,910 --> 00:37:27,290 So kom ons kyk wat gebeur nou Wanneer ek hardloop hierdie program. 774 00:37:27,290 --> 00:37:30,600 Ek gaan om voort te gaan en maak nie positief. 775 00:37:30,600 --> 00:37:30,880 Damn. 776 00:37:30,880 --> 00:37:31,600 'N Paar foute. 777 00:37:31,600 --> 00:37:32,960 So laat my terug blaai tot by die eerste. 778 00:37:32,960 --> 00:37:34,020 Werk nie deur hulle agteruit. 779 00:37:34,020 --> 00:37:37,000 Werk deur hulle van bo af sodat hulle nie waterval en slegs 780 00:37:37,000 --> 00:37:38,630 een ding verkeerd wees. 781 00:37:38,630 --> 00:37:42,532 Implisiete verklaring van funksie getint (). 782 00:37:42,532 --> 00:37:43,020 Ja. 783 00:37:43,020 --> 00:37:44,420 So dit was nie genoeg nie. 784 00:37:44,420 --> 00:37:46,760 Ek het soort van dieselfde fout gemaak, maar 'n bietjie anders hierdie keer. 785 00:37:46,760 --> 00:37:51,940 Ek nodig het om te sluit nie net stdio.h maar ook cs50.h, wat insluit die 786 00:37:51,940 --> 00:37:56,770 sogenaamde verklarings van kry int, wat leer om die toestel, of leer 787 00:37:56,770 --> 00:37:58,760 C wat getint () is. 788 00:37:58,760 --> 00:37:59,550 >> So laat my weer stoor. 789 00:37:59,550 --> 00:38:02,040 Ek gaan die ander foute te ignoreer want ek gaan om te hoop dat hulle 790 00:38:02,040 --> 00:38:05,210 een of ander manier verband hou met die fout Ek het reeds vasgestel. 791 00:38:05,210 --> 00:38:08,710 So laat my gaan voort en heropstel met make-positief is, Tik. 792 00:38:08,710 --> 00:38:09,020 Damn. 793 00:38:09,020 --> 00:38:09,985 Drie foute, nog steeds. 794 00:38:09,985 --> 00:38:12,650 Laat my blaai tot by die eerste. 795 00:38:12,650 --> 00:38:14,320 Ongebruikte veranderlike n. 796 00:38:14,320 --> 00:38:15,850 Ons het nie gesien voor. 797 00:38:15,850 --> 00:38:17,200 En dit is ook 'n bietjie kripties. 798 00:38:17,200 --> 00:38:18,850 Dit is die opbrengs van die samesteller. 799 00:38:18,850 --> 00:38:23,610 En wat dit beklemtoon lyn daar - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 sê, dit sê op die lyn van nege positive.c, op die 13de karakter, 801 00:38:28,960 --> 00:38:31,510 13de kolom, jy het hierdie fout. 802 00:38:31,510 --> 00:38:34,230 >> En in die besonder, is dit vertel my ongebruikte veranderlike n. 803 00:38:34,230 --> 00:38:35,790 So laat ons sien - 804 00:38:35,790 --> 00:38:37,150 lyn nege. 805 00:38:37,150 --> 00:38:40,430 Ek gebruik n in die sin dat Ek gee dit 'n waarde. 806 00:38:40,430 --> 00:38:44,200 Maar wat die opsteller nie hou nie, is dat ek skynbaar nie om dit te gebruik. 807 00:38:44,200 --> 00:38:45,560 Maar wag 'n minuut, EK gebruik. 808 00:38:45,560 --> 00:38:48,170 In lyn 11, ek gebruik dit hier. 809 00:38:48,170 --> 00:38:52,430 Maar as ek blaai af verder by positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 so op lyn 11, 12 karakter, die samesteller is vir my, die gebruik van 811 00:38:56,230 --> 00:38:58,670 onverklaarde identifiseerder n. 812 00:38:58,670 --> 00:39:02,760 >> So onverklaarde manier Ek het nie vermeld dit as 'n 813 00:39:02,760 --> 00:39:04,970 veranderlike met 'n data tipe. 814 00:39:04,970 --> 00:39:05,500 Maar wag 'n minuut. 815 00:39:05,500 --> 00:39:09,150 Ek het presies dit in lyn nege. 816 00:39:09,150 --> 00:39:11,100 So iemand is regtig verward hier. 817 00:39:11,100 --> 00:39:14,900 Dit is óf my of die samesteller omdat in lyn nege, weer, ek verklaar 'n 818 00:39:14,900 --> 00:39:18,650 int n, en ek toeken dit die terugkeer waarde van getint (). 819 00:39:18,650 --> 00:39:22,930 Toe ek die gebruik van daardie veranderlike n in lyn 11 en seker te maak dat die waarde daarvan is minder 820 00:39:22,930 --> 00:39:24,050 as of gelyk aan nul. 821 00:39:24,050 --> 00:39:27,430 Maar dit is blykbaar sleg en gebroke hoekom? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Sê dit weer doen? 824 00:39:32,490 --> 00:39:35,690 >> Ag, ek het 'n te verklaar voor die aanvang van die lus. 825 00:39:35,690 --> 00:39:36,370 Maar hoekom? 826 00:39:36,370 --> 00:39:39,830 Ek bedoel, ons het net voorgestel dat 'n bietjie gelede dit is goed veranderlikes te verklaar 827 00:39:39,830 --> 00:39:43,600 almal op een lyn en dan wys hulle 'n bietjie waarde. 828 00:39:43,600 --> 00:39:46,790 'N globale veranderlike - laat terugkom om die idee in net 'n oomblik. 829 00:39:46,790 --> 00:39:48,690 Hoekom wil jy my te sit dit buite die lus? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Dit is. 832 00:40:03,830 --> 00:40:06,780 Presies. 833 00:40:06,780 --> 00:40:09,610 >> So, al is dit ietwat counter, laat my vat. 834 00:40:09,610 --> 00:40:13,510 Wanneer jy verklaar n binne- van die doen blok is daar - 835 00:40:13,510 --> 00:40:16,320 spesifiek binne diegene krulhakies - 836 00:40:16,320 --> 00:40:19,210 dat veranderlike N het wat is bekend as 'n omvang - 837 00:40:19,210 --> 00:40:23,210 verband hou met ons puntestelsel in die natuurlik - maar het 'n omvang wat 838 00:40:23,210 --> 00:40:25,190 beperk tot die krulhakies. 839 00:40:25,190 --> 00:40:28,460 Met ander woorde, tipies as jy verklaar 'n veranderlike in 'n stel 840 00:40:28,460 --> 00:40:33,370 krulhakies, wat veranderlike bestaan ​​net binnekant van die krulhakies. 841 00:40:33,370 --> 00:40:37,320 So deur die logika alleen nie, selfs al Ek het verklaar n lyn in nege, is dit 842 00:40:37,320 --> 00:40:41,910 wese verdwyn uit omvang, verdwyn uit die geheue, so te sê, 843 00:40:41,910 --> 00:40:43,370 Teen die tyd dat ek getref lyn 11. 844 00:40:43,370 --> 00:40:47,370 Omdat lyn 11, ongelukkig, is buite die krulhakies. 845 00:40:47,370 --> 00:40:51,540 >> So ek kan ongelukkig nie hierdie probleem oplos deur terug te gaan na wat ek dit gedoen het voor. 846 00:40:51,540 --> 00:40:53,370 Jy kan op die eerste dit doen. 847 00:40:53,370 --> 00:40:56,370 Maar wat is jy nou nie doen siklies? 848 00:40:56,370 --> 00:40:58,260 Jy is natuurlik nie om die int siklies. 849 00:40:58,260 --> 00:41:01,320 So kan ons die getint () verlaat, en ons moet die getint () verlof binne-in die 850 00:41:01,320 --> 00:41:04,420 loop, want dit is wat ons wil teister die gebruiker vir weer en weer. 851 00:41:04,420 --> 00:41:08,660 Maar dit is voldoende om te gaan tot lyn, sê, ses. 852 00:41:08,660 --> 00:41:10,150 Int n, kommapunt. 853 00:41:10,150 --> 00:41:12,990 Gee dit nie 'n waarde nie, want jy hoef nie te net nog nie. 854 00:41:12,990 --> 00:41:16,220 >> Maar nou is hier, kennis - dit sou 'n baie maklik om fout wees. 855 00:41:16,220 --> 00:41:19,440 Ek wil nie my vorige te skaduwee verklaring van n. 856 00:41:19,440 --> 00:41:22,830 Ek wil die n om te gebruik wat werklik bestaan. 857 00:41:22,830 --> 00:41:25,780 En so nou in lyn 10, Ek ken n 'n waarde. 858 00:41:25,780 --> 00:41:28,580 Maar in lyn ses, verklaar ek n. 859 00:41:28,580 --> 00:41:32,940 En so kan ek of ek kan nie gebruik dit in lyn 12 nou? 860 00:41:32,940 --> 00:41:37,120 Ek kan, want tussen wat krullerige draadjies is n verklaar nou? 861 00:41:37,120 --> 00:41:38,770 Die een hier on line vyf. 862 00:41:38,770 --> 00:41:40,330 Aan die een hier op die lyn 14. 863 00:41:40,330 --> 00:41:49,770 So as ek nou zoom uit behalwe hierdie lêer, gaan terug in en uit te voer om positief is, is dit 864 00:41:49,770 --> 00:41:50,820 saamgestel hierdie tyd. 865 00:41:50,820 --> 00:41:51,940 So dit is reeds vordering. 866 00:41:51,940 --> 00:41:53,640 Streep. / Positief., Tik. 867 00:41:53,640 --> 00:41:56,060 >> Ek eis dat jy my 'n positiewe heelgetal. 868 00:41:56,060 --> 00:41:57,750 Negatiewe 1. 869 00:41:57,750 --> 00:41:59,020 Negatiewe 2. 870 00:41:59,020 --> 00:42:00,680 Negatiewe 3. 871 00:42:00,680 --> 00:42:01,760 Zero. 872 00:42:01,760 --> 00:42:03,000 Een. 873 00:42:03,000 --> 00:42:05,130 En dankie vir die een is wat nou gedruk. 874 00:42:05,130 --> 00:42:07,400 >> Kom ek probeer iets anders, uit nuuskierigheid. 875 00:42:07,400 --> 00:42:09,600 Ek is vertel om insette 'n heelgetal. 876 00:42:09,600 --> 00:42:12,870 Maar wat as ek plaas tik in lam? 877 00:42:12,870 --> 00:42:14,460 So sien jy nou 'n ander vinnige - 878 00:42:14,460 --> 00:42:15,350 probeer weer. 879 00:42:15,350 --> 00:42:17,670 Maar nêrens in my kode ek skryf weer probeer. 880 00:42:17,670 --> 00:42:22,320 So waar, vermoedelik, is dit weer probeer aanspoor kom, sou jy sê? 881 00:42:22,320 --> 00:42:23,540 Ja, uit getint () self. 882 00:42:23,540 --> 00:42:26,650 So een van die dinge CS50 se personeel doen vir jou, ten minste in hierdie eerste paar 883 00:42:26,650 --> 00:42:30,400 weke, is ons geskryf het 'n bedrag foutkontroles om te verseker dat, indien 884 00:42:30,400 --> 00:42:34,260 jy noem getint (), sal jy ten minste terug te kry 'n int van die gebruiker. 885 00:42:34,260 --> 00:42:35,460 Jy sal nie 'n string. 886 00:42:35,460 --> 00:42:36,440 Jy sal nie 'n kar. 887 00:42:36,440 --> 00:42:39,660 Jy sal nie iets heeltemal anders. 888 00:42:39,660 --> 00:42:40,510 Jy kry 'n int. 889 00:42:40,510 --> 00:42:41,890 >> Nou, kan dit nie positief wees. 890 00:42:41,890 --> 00:42:42,770 Dit mag dalk nie negatief wees nie. 891 00:42:42,770 --> 00:42:44,550 Ons maak geen waarborge rondom dit. 892 00:42:44,550 --> 00:42:48,960 Maar ons sal teister die gebruiker om weer te probeer, weer probeer, weer probeer totdat hy of sy eintlik 893 00:42:48,960 --> 00:42:49,810 werk. 894 00:42:49,810 --> 00:42:53,085 Net so, as ek doen 1.23, dit is nie 'n int. 895 00:42:53,085 --> 00:42:58,400 Maar as ek tik in, sê, 50, wat gee my 'n waarde wat ek wou hê. 896 00:42:58,400 --> 00:42:59,050 >> Alle regte. 897 00:42:59,050 --> 00:43:01,380 So nie sleg nie. 898 00:43:01,380 --> 00:43:04,780 Enige vrae oor wat ons nou net gedoen het? 899 00:43:04,780 --> 00:43:07,930 Die sleutel afhaal om, om duidelik te wees, nie so baie van die roete wat ons gesien het 900 00:43:07,930 --> 00:43:10,880 voordat selfs al het ons nie regtig gebruik nie, maar die kwessie van die omvang, waar 901 00:43:10,880 --> 00:43:17,045 veranderlikes slegs ingestel kan word kan gebruik word binne 'n paar gespesifiseerde omvang. 902 00:43:17,045 --> 00:43:19,830 >> Alle reg, laat my toe om die voorstel jy vroeër gemaak het, wat van 'n 903 00:43:19,830 --> 00:43:20,860 globale veranderlike. 904 00:43:20,860 --> 00:43:24,880 As 'n eenkant, dit blyk dat 'n ander oplossing vir hierdie probleem, maar 905 00:43:24,880 --> 00:43:28,880 tipies 'n verkeerde oplossing of 'n swak ontwerp oplossing, is om te 906 00:43:28,880 --> 00:43:31,670 verklaar jou veranderlike as wat's bekend as 'n globale veranderlike. 907 00:43:31,670 --> 00:43:34,610 Nou ek is soort van die oortreding van my definisie van die omvang, want daar is 908 00:43:34,610 --> 00:43:37,680 geen krulhakies op die heel boonste en die heel onderkant van 'n lêer. 909 00:43:37,680 --> 00:43:40,190 Maar die implikasie van dié is dat dit nou in lyn vier, 910 00:43:40,190 --> 00:43:41,710 n is 'n globale veranderlike. 911 00:43:41,710 --> 00:43:44,460 En soos die naam impliseer, is dit net toeganklik is oral. 912 00:43:44,460 --> 00:43:45,790 >> Kras het eintlik hierdie. 913 00:43:45,790 --> 00:43:48,650 As jy 'n veranderlike, kan jy onthou jy het om van te kies as dit is vir 914 00:43:48,650 --> 00:43:50,780 hierdie sprite of vir alle sprites. 915 00:43:50,780 --> 00:43:54,270 Wel, almal sprites is net die duideliker manier om te sê globale. 916 00:43:54,270 --> 00:43:55,520 Ja? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ag, regtig 'n goeie vraag. 919 00:44:10,990 --> 00:44:14,310 >> So onthou dat in die heel eerste weergawe van my kode as ek verkeerd 920 00:44:14,310 --> 00:44:17,700 verklaar en gedefinieer n lyn in nege - 921 00:44:17,700 --> 00:44:19,980 Ek verklaar dat dit as 'n veranderlike en ek het dit 'n waarde met 922 00:44:19,980 --> 00:44:21,160 die opdrag operateur - 923 00:44:21,160 --> 00:44:22,520 Dit het my twee foute. 924 00:44:22,520 --> 00:44:26,560 Een, die feit dat n is nie gebruik nie, en twee, wat in lyn 11 925 00:44:26,560 --> 00:44:27,770 dit was net nie verklaar nie. 926 00:44:27,770 --> 00:44:31,120 Dus is die eerste een wat ek gedoen het nie adres in die tyd. 927 00:44:31,120 --> 00:44:35,130 Dit is nie streng 'n fout om te verklaar 'n veranderlike, maar dit nie gebruik nie. 928 00:44:35,130 --> 00:44:38,540 Maar een van die dinge wat ons in gedoen het die CS50 toestel, doelbewus, 929 00:44:38,540 --> 00:44:43,340 pedagogies, is ons het geknak die verwagtinge van die vertaler te maak 930 00:44:43,340 --> 00:44:46,970 seker dat jy dinge doen nie net korrek, maar eintlik korrek. 931 00:44:46,970 --> 00:44:51,520 >> Want as jy waarby 'n veranderlike soos N en nooit gebruik nie, of om dit te gebruik 932 00:44:51,520 --> 00:44:53,700 korrek, wat dan is dit daar? 933 00:44:53,700 --> 00:44:55,650 Dit dien egter geen doel. 934 00:44:55,650 --> 00:44:58,980 En dit is baie maklik om met verloop van tyd, as jy instel nie jou eie rekenaar in 935 00:44:58,980 --> 00:45:01,960 hierdie manier, om net 'n kode wat min oorblyfsels hier, oorblyfsels daar. 936 00:45:01,960 --> 00:45:04,390 En dan maande later jy terug kyk en jy soos die, is die rede waarom hierdie lyn van 937 00:45:04,390 --> 00:45:05,060 kode is daar? 938 00:45:05,060 --> 00:45:07,940 En as daar nie 'n goeie rede is dit nie tot voordeel van u of u kollegas 939 00:45:07,940 --> 00:45:10,650 af in die pad te hê om te struikel oor dit dan. 940 00:45:10,650 --> 00:45:12,540 >> As 'n eenkant, waar is wat kom uit? 941 00:45:12,540 --> 00:45:16,410 Wel, onthou dat elke keer as ons saam te stel program, sal al hierdie dinge is 942 00:45:16,410 --> 00:45:17,380 gedruk word. 943 00:45:17,380 --> 00:45:18,350 So sal ons terug te kom na hierdie. 944 00:45:18,350 --> 00:45:22,230 Maar weereens, maak, is 'n program wat automatiseert die proses van die opstel deur 945 00:45:22,230 --> 00:45:24,830 die bestuur van die werklike samesteller genoem klang. 946 00:45:24,830 --> 00:45:27,650 Hierdie ding, ons sal uiteindelik sien, het te doen met die opsporing met 'n spesiale 947 00:45:27,650 --> 00:45:29,060 program het die debugger. 948 00:45:29,060 --> 00:45:32,150 Dit het te doen met die optimalisering van die kode - meer oor wat in die toekoms. 949 00:45:32,150 --> 00:45:33,620 St = C99 - 950 00:45:33,620 --> 00:45:37,870 Dit beteken net gebruik om die 1999-weergawe van C. C was om selfs langer as 951 00:45:37,870 --> 00:45:40,830 dit nie, maar hulle het 'n paar mooi veranderinge 10 plus jaar gelede. 952 00:45:40,830 --> 00:45:42,690 >> En hier is die betrokke kinders. 953 00:45:42,690 --> 00:45:45,880 Ons sê maak enigiets wat voorheen sou gewees het 'n waarskuwing 954 00:45:45,880 --> 00:45:48,560 'n fout te verhoed dat die student van die opstel. 955 00:45:48,560 --> 00:45:51,400 En die muur beteken dit doen vir 'n hele klomp van die dinge wat nie 956 00:45:51,400 --> 00:45:53,060 net wat verband hou met veranderlikes. 957 00:45:53,060 --> 00:45:54,700 En dan laat my blaai na die einde van die lyn. 958 00:45:54,700 --> 00:45:56,430 En dit ook, sal ons uiteindelik kom terug na. 959 00:45:56,430 --> 00:45:59,040 Dit is natuurlik die naam van die lêer wat ek opstel. 960 00:45:59,040 --> 00:46:02,160 Dit herinner aan die naam van die lêer Ek uitdruk as die naam 961 00:46:02,160 --> 00:46:04,070 van my uitvoerbare program. 962 00:46:04,070 --> 00:46:08,970 Hierdie-lcs50 beteken net gebruik om die CS50 biblioteek, en enige nulle en kinders wat 963 00:46:08,970 --> 00:46:12,390 die personeel geskryf en saamgestel vroeër hierdie jaar, integreer 964 00:46:12,390 --> 00:46:13,490 hulle in my program. 965 00:46:13,490 --> 00:46:16,130 >> En niemand weet wat-lm is? 966 00:46:16,130 --> 00:46:18,150 Dit is die wiskunde biblioteek, wat net daar selfs al is jy 967 00:46:18,150 --> 00:46:19,320 doen nie enige wiskunde. 968 00:46:19,320 --> 00:46:22,620 Dit is outomaties net verskaf aan ons maak. 969 00:46:22,620 --> 00:46:26,540 >> Wel, laat my doen een ander voorbeeld hier by die opening van 'n nuwe lêer. 970 00:46:26,540 --> 00:46:30,560 En laat my behalwe hierdie een as string.c. 971 00:46:30,560 --> 00:46:37,980 Dit blyk dat as ons praat oor data tipes vandag, daar is selfs meer 972 00:46:37,980 --> 00:46:40,630 gaan op onder die enjinkap as wat ons tot dusver gesien het. 973 00:46:40,630 --> 00:46:42,290 So laat ek gou 'n vinnige program. 974 00:46:42,290 --> 00:46:44,510 Sluit stdio.h. 975 00:46:44,510 --> 00:46:45,730 En ek sal jou red. 976 00:46:45,730 --> 00:46:48,110 En jy weet, laat my nie die dieselfde fout weer en weer. 977 00:46:48,110 --> 00:46:50,540 Sluit cs50.h. 978 00:46:50,540 --> 00:46:54,870 En laat my voort te gaan nou en doen int main (void). 979 00:46:54,870 --> 00:46:58,790 >> En nou, ek wil net 'n program om te doen wat dit doen - verklaar 'n string 980 00:46:58,790 --> 00:47:03,610 genoem s en kry 'n string van die gebruiker. 981 00:47:03,610 --> 00:47:05,820 En laat my 'n bietjie instruksies hier - 982 00:47:05,820 --> 00:47:09,960 gee asseblief vir my 'n string - so die gebruiker weet wat om te doen. 983 00:47:09,960 --> 00:47:13,190 En dan hier onder om, Ek wil graag die volgende te doen - 984 00:47:13,190 --> 00:47:16,060 vir int i kry nul. 985 00:47:16,060 --> 00:47:18,580 Weer, rekenaar wetenskaplikes tipies begin tel by nul, maar ons kon 986 00:47:18,580 --> 00:47:20,340 maak dat 'n mens as ons regtig wou hê. 987 00:47:20,340 --> 00:47:27,240 Nou gaan ek om te doen Ek is minder as die string lengte van s. 988 00:47:27,240 --> 00:47:28,430 So strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 weer, dit is kort, want dit is makliker om te tik, selfs al is dit 'n 991 00:47:31,650 --> 00:47:32,590 bietjie kripties. 992 00:47:32,590 --> 00:47:35,290 >> Dit is 'n funksie het ons nie gebruik voor, maar letterlik beteken dat - 993 00:47:35,290 --> 00:47:37,810 terug te keer na my 'n getal wat verteenwoordig die lengte van die string 994 00:47:37,810 --> 00:47:38,690 dat die gebruiker getik. 995 00:47:38,690 --> 00:47:41,740 As hulle getik in hallo, sou dit terug vyf, want daar is vyf 996 00:47:41,740 --> 00:47:42,890 letters in hallo. 997 00:47:42,890 --> 00:47:45,390 Dan, op elke iterasie van hierdie lus, i plus plus. 998 00:47:45,390 --> 00:47:49,170 So weer, 'n standaard selfs al bou jy is nie heeltemal te gemaklik of 999 00:47:49,170 --> 00:47:50,420 vertroud met dit nie. 1000 00:47:50,420 --> 00:47:53,220 >> Maar nou op elke iterasie van hierdie lus, sien wat ek gaan doen. 1001 00:47:53,220 --> 00:47:56,690 Ek wil om voort te gaan en te druk uit 'n enkele karakter - 1002 00:47:56,690 --> 00:47:59,940 sodat% c agteroorskuisstreep n op 'n nuwe reël. 1003 00:47:59,940 --> 00:48:00,990 En dan, jy weet wat ek wil doen? 1004 00:48:00,990 --> 00:48:05,090 Wat ook al die woord is dat die gebruiker in, soos hallo, ek wil druk 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, een karakter per lyn. 1006 00:48:09,530 --> 00:48:13,080 Met ander woorde, ek wil graag by die individuele karakters in 'n string, 1007 00:48:13,080 --> 00:48:16,770 waarvolgens tot nou toe 'n string het net 'n volgorde van die karakters. 1008 00:48:16,770 --> 00:48:21,690 >> En dit blyk uit wat ek kan doen is, bracket, Ek, naby bracket, sluit 1009 00:48:21,690 --> 00:48:23,580 hakies, kommapunt. 1010 00:48:23,580 --> 00:48:25,640 En ek het een ding om te doen. 1011 00:48:25,640 --> 00:48:30,570 Dit is in 'n lêer genaamd string.h dat strlen verklaar word. 1012 00:48:30,570 --> 00:48:33,190 So as ek wil hê dat die funksie te gebruik, Ek moet die vertaler te vertel, 1013 00:48:33,190 --> 00:48:34,450 verwag om dit te gebruik. 1014 00:48:34,450 --> 00:48:37,040 Nou laat ek gaan voort en maak die program genoem string. 1015 00:48:37,040 --> 00:48:39,150 Dot, streep, string. 1016 00:48:39,150 --> 00:48:40,130 >> Gee asseblief vir my 'n string. 1017 00:48:40,130 --> 00:48:40,900 Ek sal voort te gaan en tik dit. 1018 00:48:40,900 --> 00:48:43,040 Hallo, in hoofletters, Tik. 1019 00:48:43,040 --> 00:48:47,390 En nou sien ek dit het gedruk een karakter na die ander. 1020 00:48:47,390 --> 00:48:51,450 So het die nuwe besonderhede hier is dat 'n string, aan die einde van die dag, kan wees 1021 00:48:51,450 --> 00:48:54,810 toeganklik is deur middel van sy individuele karakters deur die bekendstelling van die vierkant 1022 00:48:54,810 --> 00:48:55,840 hakienotasie. 1023 00:48:55,840 --> 00:48:59,090 En dit is omdat 'n string onder die enjinkap is inderdaad 'n reeks 1024 00:48:59,090 --> 00:48:59,810 karakters. 1025 00:48:59,810 --> 00:49:02,010 Maar wat is netjies oor hulle is in jou rekenaar se geheue - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, wat dit ookal is - dit is letterlik terug na Terug na - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 op individuele, aangrensend grepe in die geheue. 1029 00:49:09,920 --> 00:49:13,210 >> So as jy wil te kry op die agtste soos byte, wat in hierdie lus sou wees 1030 00:49:13,210 --> 00:49:16,900 bracket nul, bracket een, twee hakies, bracket drie, bracket vier - 1031 00:49:16,900 --> 00:49:18,890 dit is zero kruip tot vyf - 1032 00:49:18,890 --> 00:49:23,330 wat druk H-E-L-L-O op sy eie lyn. 1033 00:49:23,330 --> 00:49:26,320 >> Nou, as 'n teaser, laat ek jou wys die allerhande dinge wat jy uiteindelik 1034 00:49:26,320 --> 00:49:31,950 in staat om te verstaan, ten minste met 'n paar noue soek. 1035 00:49:31,950 --> 00:49:35,610 Vir een, wat ons in vandag se voorbeelde, as jy wil, is eintlik 1036 00:49:35,610 --> 00:49:38,300 een van die heel eerste jailbreaks vir die iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking beteken die krake van die telefoon sodat jy kan eintlik gebruik dit op 'n 1038 00:49:40,800 --> 00:49:43,380 verskillende draer of te installeer jou eie sagteware. 1039 00:49:43,380 --> 00:49:45,660 En jy sal sien dit heeltemal lyk kriptiese, waarskynlik. 1040 00:49:45,660 --> 00:49:46,520 Maar kyk na hierdie. 1041 00:49:46,520 --> 00:49:50,420 Die iPhone is glo gekraak met 'n lus vir 'n voorwaarde as 'n ander 1042 00:49:50,420 --> 00:49:52,580 toestand, 'n klomp van die funksies Ons het nie gesien het nie. 1043 00:49:52,580 --> 00:49:54,230 >> En weer, sal jy nie by eerste oogopslag waarskynlik 1044 00:49:54,230 --> 00:49:55,620 verstaan ​​hoe dit werk. 1045 00:49:55,620 --> 00:49:58,940 Maar alles wat ons soort van neem vanselfsprekend in ons moderne lewens 1046 00:49:58,940 --> 00:50:02,040 eintlik is geneig om selfs verminder tot 'n van hierdie grondbeginsels ons het al 1047 00:50:02,040 --> 00:50:02,820 op soek na. 1048 00:50:02,820 --> 00:50:06,680 Laat my gaan voort en maak 'n ander program, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 So ook dit is iets wat jy behoort nie regtig weet. 1050 00:50:08,970 --> 00:50:12,440 Selfs nie een van die personeel of ek kon waarskynlik figuur dit uit deur te kyk na 1051 00:50:12,440 --> 00:50:15,450 dit, want dit is iemand se kode wat ingedien is na wat 1052 00:50:15,450 --> 00:50:19,630 histories bekend as 'n verborge C wedstryd, waar jy 'n program skryf 1053 00:50:19,630 --> 00:50:24,670 wat stel en loop, maar is so damn kriptiese geen mens kan verstaan ​​wat 1054 00:50:24,670 --> 00:50:27,530 dit gaan om dit te doen totdat hulle eintlik dit uitgevoer word. 1055 00:50:27,530 --> 00:50:29,940 >> So inderdaad, as jy kyk na hierdie kode, sien ek 'n skakelaar. 1056 00:50:29,940 --> 00:50:30,870 Ek sien hoof. 1057 00:50:30,870 --> 00:50:33,800 Ek sien hierdie vierkantige hakies impliseer 'n soort van 'n skikking. 1058 00:50:33,800 --> 00:50:35,970 Is daar iemand wat wil om te raai wat hierdie program eintlik 1059 00:50:35,970 --> 00:50:37,220 doen as ek hardloop Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Ja. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Goed gedoen. 1064 00:50:44,690 --> 00:50:48,090 So net die personeel en ek kan nie uitvind uit te vind wat hierdie dinge doen nie. 1065 00:50:48,090 --> 00:50:51,670 >> En nou laastens, laat my gaan voort en maak 'n ander program. 1066 00:50:51,670 --> 00:50:53,440 Hierdie een - 1067 00:50:53,440 --> 00:50:55,550 weer, sal ons die bron-kode aanlyn beskikbaar - hierdie een is net 1068 00:50:55,550 --> 00:50:57,480 soort van mooi om na te kyk. 1069 00:50:57,480 --> 00:50:59,750 Al wat hulle gedoen het, is getref om die space bar nogal 'n bietjie. 1070 00:50:59,750 --> 00:51:01,320 Maar dit is 'n ware-kode. 1071 00:51:01,320 --> 00:51:04,790 So as jy dink dit is mooi, as ons eintlik loop dit aan die vinnige, 1072 00:51:04,790 --> 00:51:08,970 uiteindelik sal jy sien hoe ons kan doen dinge soos hierdie. 1073 00:51:08,970 --> 00:51:14,008 >> So ons sal laat jy op daardie noot en sien dat jy op Woensdag. 1074 00:51:14,008 --> 00:51:18,440 >> [Speel van musiek] 1075 00:51:18,440 --> 00:51:23,380 >> Spreker 2: By die volgende CS50, die TFS stadium 'n opstand. 1076 00:51:23,380 --> 00:51:24,112 >> SPREKER 3: Daar is hy. 1077 00:51:24,112 --> 00:51:25,362 Kry hom! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Speel van musiek]