1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] David J. Malan: Alle reg. 2 00:00:08,160 --> 00:00:11,170 Dit is CS50, en dit is die einde van die week twee. 3 00:00:11,170 --> 00:00:14,650 As jy honger is verwag om te wees rondom hierdie tyd môre, weet dat ons gaan 4 00:00:14,650 --> 00:00:18,920 te belê as 'n klein groepie môre, Donderdag, 01:15. 5 00:00:18,920 --> 00:00:21,460 Daar is hierdie URL hier as jy wil om te RSVP. 6 00:00:21,460 --> 00:00:25,270 Ruimte beperk is, so asseblief vergewe indien die vorm ingevul het teen die tyd wat jy 7 00:00:25,270 --> 00:00:26,680 vul dit uit. 8 00:00:26,680 --> 00:00:29,400 Nog 'n URL al wat van belang kan wees, is dit. 9 00:00:29,400 --> 00:00:32,409 >> So in net oor 'n maand se tyd, word die kursus gaan beskikbaar gestel word 10 00:00:32,409 --> 00:00:36,090 al die meer in die algemeen via EDX, via wat mense op die internet sal wees 11 00:00:36,090 --> 00:00:39,580 in staat wees om te volg saam, betrokke te raak in die kursus baie aktief, in werklikheid. 12 00:00:39,580 --> 00:00:43,070 Hulle sal gebruik word om die CS50 Appliance en CS50 Bespreek en die meeste van die 13 00:00:43,070 --> 00:00:45,840 verskillende sagteware gereedskap wat ons reeds hierdie semester is deur. 14 00:00:45,840 --> 00:00:49,030 En een van die inisiatiewe wat ons wil doen hierdie jaar as 'n eksperiment 15 00:00:49,030 --> 00:00:53,120 is om te sien net hoe baie inhoud wat ons kan vertaal in ander gepraat en 16 00:00:53,120 --> 00:00:54,110 geskrewe taal. 17 00:00:54,110 --> 00:00:58,000 So as jy kan 'n belangstelling in die deelname aan hierdie projek, waardeur 18 00:00:58,000 --> 00:01:02,090 sal ons Engelse transkripsies en ondertitels vir die kursus se 19 00:01:02,090 --> 00:01:05,190 lesings en kortbroek en seminare en artikels en dies meer - 20 00:01:05,190 --> 00:01:08,700 as jy praat vlot of vlot 'n ander taal te skryf, sou ons 21 00:01:08,700 --> 00:01:12,240 lief vir jou om betrokke te raak by hierdie projek, waardeur jy op een of meer van die 22 00:01:12,240 --> 00:01:15,340 video's, die vertaling van hulle in 'n taal wat jy baie goed ken. 23 00:01:15,340 --> 00:01:19,050 Om te gee jou 'n gevoel van die koppelvlak, daar is hierdie web-gebaseerde user 24 00:01:19,050 --> 00:01:22,330 dat ons sal gebruik word om wat in wese 'n UI soos hierdie. 25 00:01:22,330 --> 00:01:24,520 Dit is my onderrig sommige Halloween gelede. 26 00:01:24,520 --> 00:01:27,710 En op die regterkant is daar in swart langs hierdie tyd stempels, 27 00:01:27,710 --> 00:01:31,300 sien jy die verskillende dinge wat uit my mond gekom het daardie dag. 28 00:01:31,300 --> 00:01:34,660 En dan onder dit, sal jy in staat wees om in 'n ander taal te vertaal. 29 00:01:34,660 --> 00:01:37,840 Presies wat die kartering tussen, in hierdie geval, Engels 30 00:01:37,840 --> 00:01:38,660 en, sê, Spaans. 31 00:01:38,660 --> 00:01:40,480 So dit is eintlik 'n baie gebruikers-vriendelike instrument. 32 00:01:40,480 --> 00:01:43,690 Jy kan rewind en vinnig vorentoe baie maklik met sleutelbord kortpaaie. 33 00:01:43,690 --> 00:01:46,710 So as jy wil om deel te neem in hierdie eksperiment en jou woorde 34 00:01:46,710 --> 00:01:50,730 gesien en gelees deur potensieel duisende mense daar buite, doen asseblief voel 35 00:01:50,730 --> 00:01:51,960 vry om deel te neem. 36 00:01:51,960 --> 00:01:56,940 >> Nou een woord oor die katjie van Maandag, sodat ons 'n té gestuur 37 00:01:56,940 --> 00:01:58,120 scary boodskap. 38 00:01:58,120 --> 00:02:02,130 Besef dat as kantoorure raai en as artikels raai, die 39 00:02:02,130 --> 00:02:05,110 ontwerp van die kursus is baie het studente saam en 40 00:02:05,110 --> 00:02:09,250 praat saam te werk deur middel van die probleem stelle en probleme. 41 00:02:09,250 --> 00:02:13,630 En regtig die lyn kom net neer op, weer, die werk wat jy uiteindelik 42 00:02:13,630 --> 00:02:16,420 moet voorlê moet jou eie wees. 43 00:02:16,420 --> 00:02:19,080 En dus is dit, om eerlik te wees - in kantoorure, dit is heeltemal normaal - 44 00:02:19,080 --> 00:02:21,560 Dit is heeltemal te verwag word, selfs - om te gesels met 'n paar 45 00:02:21,560 --> 00:02:22,370 vriende langs jou. 46 00:02:22,370 --> 00:02:25,240 Indien hy of sy sukkel met 'n paar onderwerp, en jy is net soos ", soos" O, goed laat 47 00:02:25,240 --> 00:02:27,750 Ek gee jou 'n kykie van 'n paar lyn van die kode wat ek geskryf het. 48 00:02:27,750 --> 00:02:28,290 Dit is goed. 49 00:02:28,290 --> 00:02:28,700 Dit gebeur. 50 00:02:28,700 --> 00:02:31,580 En dit is baie bevorderlik is, dink ek, met die proses van leer. 51 00:02:31,580 --> 00:02:35,270 Waar die lyn kry, weer, gekruis is wanneer die kop is 'n soort gekantel oor 52 00:02:35,270 --> 00:02:38,800 hier vir te veel sekondes of minute vir dit werklik net om 53 00:02:38,800 --> 00:02:41,250 'n IP addresses are not geleentheid vir jou vriend. 54 00:02:41,250 --> 00:02:43,870 En seker wanneer dinge kry uitgeruil via e-pos en Dropbox en 55 00:02:43,870 --> 00:02:45,350 die wil, daar is ook die lyn. 56 00:02:45,350 --> 00:02:48,940 Dus, deur al beteken, gemaklik voel en voel aangemoedig om te klets met vriende 57 00:02:48,940 --> 00:02:51,270 en klasmaats oor psets en nog baie meer. 58 00:02:51,270 --> 00:02:54,680 En net besef dat dit wat jy uiteindelik dien moet regtig die 59 00:02:54,680 --> 00:02:57,780 produk van jou skepping en nie iemand anders nie. 60 00:02:57,780 --> 00:03:01,010 >> Dus, in dieselfde trant van die snoesige wesens, dan kan jy 61 00:03:01,010 --> 00:03:02,820 weet van hierdie man hier. 62 00:03:02,820 --> 00:03:06,180 So, dit is 'n horrifically Wink film van jare gelede. 63 00:03:06,180 --> 00:03:08,680 Iemand hier gesien Space Balls? 64 00:03:08,680 --> 00:03:09,120 Alles reg. 65 00:03:09,120 --> 00:03:10,220 So 'n goeie aantal hier. 66 00:03:10,220 --> 00:03:13,840 So, dit is ons wonderlike akademiese manier van die invoering van vandag uiteindelik 67 00:03:13,840 --> 00:03:15,130 die idee van kriptografie. 68 00:03:15,130 --> 00:03:19,010 En so een van die domein spesifieke probleme vir pset 2, wat sal kom 69 00:03:19,010 --> 00:03:22,770 uit te laat môreaand, is om te duik in die wêreld van kriptografie, wat 70 00:03:22,770 --> 00:03:26,380 is die kuns van die versleutelen of skommeling van inligting. 71 00:03:26,380 --> 00:03:30,160 En dit uiteindelik tot die wêreld van sekuriteit. 72 00:03:30,160 --> 00:03:34,440 >> Nou sekuriteit vir die meeste van ons kom in die vorm van 'n redelik aards meganismes. 73 00:03:34,440 --> 00:03:36,920 Almal van ons het gebruikersname en wagwoorde. 74 00:03:36,920 --> 00:03:41,350 En almal van ons het 'n baie slegte gebruikersname en wagwoorde, waarskynlik. 75 00:03:41,350 --> 00:03:45,250 As jou wagwoord is dieselfde op verskeie websites, is dit waarskynlik nie 76 00:03:45,250 --> 00:03:47,920 die beste idee, soos ons sal bespreek tot die einde van semester se. 77 00:03:47,920 --> 00:03:51,680 As jou wagwoord is geskryf op 'n taai noot - nie 'n grap nie - op jou 78 00:03:51,680 --> 00:03:55,130 monitor, ook dit is nie noodwendig die beste ontwerp, maar nogal 'n algemene 79 00:03:55,130 --> 00:03:56,140 verskynsel. 80 00:03:56,140 --> 00:04:00,420 En as jy nie kriptografie gebruik om jou wagwoorde te enkripteer, hulle is 81 00:04:00,420 --> 00:04:01,610 veral kwesbaar. 82 00:04:01,610 --> 00:04:04,670 So as jy dink jy super slim deur 'n verborge Woord 83 00:04:04,670 --> 00:04:07,740 dokumenteer iewers op jou hardeskyf wat al jou wagwoorde, maar 84 00:04:07,740 --> 00:04:10,550 dit is in 'n gids wat niemand gaan om te kyk, dit is ook nie 'n baie 85 00:04:10,550 --> 00:04:11,540 veilige meganisme. 86 00:04:11,540 --> 00:04:15,100 En wat pset 2 sal voer is dit kuns van kriptografie en 87 00:04:15,100 --> 00:04:18,300 skommeling inligting sodat dinge soos wagwoorde is 88 00:04:18,300 --> 00:04:19,500 al die meer veilig is. 89 00:04:19,500 --> 00:04:24,500 So as hierdie baie werklike wêreld probleem met 'n baie nie-reële wêreld te motiveer 90 00:04:24,500 --> 00:04:28,740 scenario, laat ek jou na een van ons gunsteling clips van hierdie 91 00:04:28,740 --> 00:04:29,895 movie, Space Balls. 92 00:04:29,895 --> 00:04:30,565 >> [Video-vertoning] 93 00:04:30,565 --> 00:04:32,995 -Helmet Fiend, wat gaan aan? 94 00:04:32,995 --> 00:04:34,730 Wat doen jy aan my dogter? 95 00:04:34,730 --> 00:04:38,960 Laat my die briljante jong plastiese chirurg, Dr Philip te stel 96 00:04:38,960 --> 00:04:43,290 Schlotkin, die grootste neus-job man in die hele 97 00:04:43,290 --> 00:04:45,526 heelal en Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Jou hoogheid. 99 00:04:46,450 --> 00:04:47,380 -Neus-job? 100 00:04:47,380 --> 00:04:48,035 Ek verstaan ​​nie. 101 00:04:48,035 --> 00:04:49,480 Sy het reeds 'n neus-job. 102 00:04:49,480 --> 00:04:51,490 Dit was 'n lieflike 16 teenwoordig. 103 00:04:51,490 --> 00:04:53,090 -Nee, dit is nie wat jy dink nie. 104 00:04:53,090 --> 00:04:55,150 Dit is baie, baie erger. 105 00:04:55,150 --> 00:04:59,860 As jy gee nie vir my die kombinasie na die lug skild, Dr. Schlotkin sal 106 00:04:59,860 --> 00:05:04,135 Gee jou dogter haar ou neus terug. 107 00:05:04,135 --> 00:05:05,385 -Nee! 108 00:05:08,202 --> 00:05:10,186 Waar het jy dit? 109 00:05:10,186 --> 00:05:11,178 -Alle regte. 110 00:05:11,178 --> 00:05:11,674 Ek sal jou vertel. 111 00:05:11,674 --> 00:05:12,666 Ek sal jou vertel. 112 00:05:12,666 --> 00:05:14,154 -Nee, Pappa, no. 113 00:05:14,154 --> 00:05:15,150 Jy moet nie. 114 00:05:15,150 --> 00:05:16,460 Jy het gelyk, my liewe. 115 00:05:16,460 --> 00:05:18,450 Ek sal jou mis jou nuwe neus. 116 00:05:18,450 --> 00:05:21,550 Maar ek sal nie vir hulle vertel die kombinasie maak nie saak wat. 117 00:05:21,550 --> 00:05:23,100 -Baie goed. 118 00:05:23,100 --> 00:05:25,510 Dr. Schlotkin, doen jou ergste. 119 00:05:25,510 --> 00:05:26,760 My plesier. 120 00:05:30,560 --> 00:05:31,180 -Nee! 121 00:05:31,180 --> 00:05:33,450 Wag, wag. 122 00:05:33,450 --> 00:05:34,770 Ek sal jou vertel. 123 00:05:34,770 --> 00:05:36,400 Ek sal jou vertel. 124 00:05:36,400 --> 00:05:38,630 Ek het geweet dit sou werk. 125 00:05:38,630 --> 00:05:42,040 Alle reg, gee dit aan my. 126 00:05:42,040 --> 00:05:46,890 Die kombinasie is een. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 Twee-en-. 130 00:05:48,950 --> 00:05:49,370 Twee-en-. 131 00:05:49,370 --> 00:05:50,450 Twee-en-. 132 00:05:50,450 --> 00:05:50,715 Drie-en- 133 00:05:50,715 --> 00:05:51,380 Drie. 134 00:05:51,380 --> 00:05:52,390 Drie. 135 00:05:52,390 --> 00:05:53,200 Vier-en-. 136 00:05:53,200 --> 00:05:53,720 Vier-en-. 137 00:05:53,720 --> 00:05:55,830 Vier-en-. 138 00:05:55,830 --> 00:05:56,580 Vyf-en- 139 00:05:56,580 --> 00:05:57,120 Vyf. 140 00:05:57,120 --> 00:05:58,560 Vyf. 141 00:05:58,560 --> 00:06:03,770 So die kombinasie is een, twee, drie, vier, vyf. 142 00:06:03,770 --> 00:06:06,745 Dit is die domste kombinasie wat ek nog ooit in my lewe gehoor het. 143 00:06:06,745 --> 00:06:09,290 Dit is die soort ding wat 'n idioot sou hê op sy bagasie. 144 00:06:09,290 --> 00:06:11,540 Dankie, jou hoogheid. 145 00:06:11,540 --> 00:06:12,940 Wat het jy gedoen? 146 00:06:12,940 --> 00:06:14,230 Ek afgeskakel die muur. 147 00:06:14,230 --> 00:06:14,630 Nee, jy het nie. 148 00:06:14,630 --> 00:06:15,430 Jy die hele film afgeskakel. 149 00:06:15,430 --> 00:06:16,722 Moet ek die verkeerde knoppie gedruk het. 150 00:06:16,722 --> 00:06:18,078 Wel, sit dit terug op. 151 00:06:18,078 --> 00:06:18,805 Sit die film weer op. 152 00:06:18,805 --> 00:06:19,080 -Ja, meneer. 153 00:06:19,080 --> 00:06:19,270 Ja, meneer. 154 00:06:19,270 --> 00:06:19,830 -Laat ons gaan, Erna. 155 00:06:19,830 --> 00:06:20,270 Kom, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Natuurlik moet jy weet dat ek nog sal hê om jou te faktureer vir hierdie. 157 00:06:27,400 --> 00:06:28,325 Wel, het dit gewerk? 158 00:06:28,325 --> 00:06:29,550 Waar is die hek? 159 00:06:29,550 --> 00:06:29,910 Dit het gewerk, meneer. 160 00:06:29,910 --> 00:06:30,770 Ons het die kombinasie. 161 00:06:30,770 --> 00:06:31,390 -Groot. 162 00:06:31,390 --> 00:06:35,630 Nou kan ons elke laaste asem van die vars lug van die planeet Druidia. 163 00:06:35,630 --> 00:06:36,550 Wat is die kombinasie? 164 00:06:36,550 --> 00:06:38,805 -Een, twee, drie, vier, vyf. 165 00:06:38,805 --> 00:06:40,610 -Een, twee, drie, vier, vyf? 166 00:06:40,610 --> 00:06:41,070 Ja. 167 00:06:41,070 --> 00:06:41,760 -Dit is ongelooflik. 168 00:06:41,760 --> 00:06:45,200 Ek het dieselfde kombinasie op my bagasie. 169 00:06:45,200 --> 00:06:47,800 Berei Spaceball 1 vir onmiddellike afwyking. 170 00:06:47,800 --> 00:06:48,536 -Ja, meneer. 171 00:06:48,536 --> 00:06:52,350 En verander die kombinasie op my bagasie. 172 00:06:52,350 --> 00:06:53,250 -Ow! 173 00:06:53,250 --> 00:06:55,020 [Einde VIDEO speel] 174 00:06:55,020 --> 00:06:57,470 >> David J. Malan: 'n wonderlike film moet julle almal nou sien. 175 00:07:00,600 --> 00:07:06,540 So die konteks hier is dat met onveilige data kom om 'n geleentheid te bied om 176 00:07:06,540 --> 00:07:07,790 enkripteer en te scramble dit. 177 00:07:07,790 --> 00:07:11,060 En so gaan dit, byvoorbeeld, is 'n voorbeeld van 'n geënkripteerde boodskap. 178 00:07:11,060 --> 00:07:12,980 Dit sê eintlik iets in Engels. 179 00:07:12,980 --> 00:07:14,750 Maar dit is duidelik nie heeltemal duidelik nie. 180 00:07:14,750 --> 00:07:17,360 En ons sal volle sirkel kom vandag om te pla uitmekaar wat hierdie geheim 181 00:07:17,360 --> 00:07:18,380 boodskap hier is. 182 00:07:18,380 --> 00:07:22,370 Maar in die werklike wêreld van rekenaars, dinge doen nie, selfs lyk hulle kan 183 00:07:22,370 --> 00:07:23,440 Engelse frases. 184 00:07:23,440 --> 00:07:27,500 Byvoorbeeld, dit is wat jy kan vind op 'n standaard Linux of Mac of 185 00:07:27,500 --> 00:07:32,080 Unix rekenaar in 'n lêer wat was eens op 'n tyd het die wagwoord lêer. 186 00:07:32,080 --> 00:07:34,170 Vandag, is dit na ander plekke verskuif. 187 00:07:34,170 --> 00:07:38,660 Maar as jy kyk, sien jy op die regte plek op 'n stelsel nie net jou 188 00:07:38,660 --> 00:07:41,430 gebruikersnaam of dié van ander mense op die stelsel nie, maar jy sal sien 'n 189 00:07:41,430 --> 00:07:43,410 geïnkripteer weergawe van hul wagwoord. 190 00:07:43,410 --> 00:07:47,800 Trouens, die woord grafkelder daar dui daarop dat die volgende dinge is geïnkripteer. 191 00:07:47,800 --> 00:07:52,030 En hierdie reeks van oënskynlik arbitrêre letters en karakters en getalle en 192 00:07:52,030 --> 00:07:56,370 ensovoorts Ontcijferde kan word slegs deur die algemeen weet 'n paar geheime - 193 00:07:56,370 --> 00:07:58,600 'n geheime woord, 'n geheime getal. 194 00:07:58,600 --> 00:08:02,760 En inderdaad, die kuns van kriptografie uiteindelik neer van 'n paar te vertrou 195 00:08:02,760 --> 00:08:05,700 sorteer en wetende dat iets wat iemand anders nie. 196 00:08:05,700 --> 00:08:10,010 Ons sal verken vandag in 'n bietjie meer detail en in die pset te kom. 197 00:08:10,010 --> 00:08:11,860 >> En nou, 'n woord oor slaag / druip. 198 00:08:11,860 --> 00:08:15,250 So veral as sommige van julle geduik in pset 1, die toestel, en 199 00:08:15,250 --> 00:08:18,390 'n nuwe wêreld vir jouself, besef dat frustrasies en 200 00:08:18,390 --> 00:08:21,340 verwarring en net tegniese probleme is te verwag word. 201 00:08:21,340 --> 00:08:24,410 Veral met die eerste pset, waar daar net so baie nuwe, maar net 202 00:08:24,410 --> 00:08:28,830 vertroud is met ls en CD en al hierdie arcane opdragte in 'n nuwe omgewing. 203 00:08:28,830 --> 00:08:32,679 En dit is apart van die werklike materiaal en programmering self. 204 00:08:32,679 --> 00:08:35,960 So besef ook dat daar is beslis kantoorure wat bestaan ​​as 205 00:08:35,960 --> 00:08:36,770 die steunstruktuur. 206 00:08:36,770 --> 00:08:38,620 Artikels begin eerskomende Sondag. 207 00:08:38,620 --> 00:08:41,990 Maar die belangrikste, as jy voel net dat dit is nie die 208 00:08:41,990 --> 00:08:44,420 wêreld vir jou, besef dat dit regtig nie net tyd neem. 209 00:08:44,420 --> 00:08:47,520 En as dit nie vir hierdie geleentheid jare gelede vir my van die neem van 'n klas 210 00:08:47,520 --> 00:08:50,840 slaag / druip, eerlik, ek het nooit sou selfs gestel het voet in die klaskamer. 211 00:08:50,840 --> 00:08:53,520 En jy kan dit verander tot, sê, die vyfde, die Maandag van die kursus. 212 00:08:53,520 --> 00:08:57,110 So as jy op die rand nou, besef dat eerder as om kop in 'n ander 213 00:08:57,110 --> 00:09:01,000 waters heeltemal, oorweeg seker nie net die verandering om te slaag / druip. 214 00:09:01,000 --> 00:09:03,750 Weereens, daar is nie regtig hierdie kultuur hier by Harvard van die neem van dinge 215 00:09:03,750 --> 00:09:08,080 slaag / druip aangesien almal regtig wil bereik of overachieve. 216 00:09:08,080 --> 00:09:11,470 Maar eerlik, dit is 'n wonderlike manier om te probeer om iets uit wat dalk nie 217 00:09:11,470 --> 00:09:13,110 vertroud te wees aan jou. 218 00:09:13,110 --> 00:09:17,090 En jy sal uiteindelik doen in die meeste gevalle baie fyn, miskien 219 00:09:17,090 --> 00:09:18,040 veel om jou verrassing. 220 00:09:18,040 --> 00:09:20,850 En in meer konkrete terme, wat ek dink slaag / druip in die algemeen nie, 221 00:09:20,850 --> 00:09:23,350 veral as jy dalk ervaar het met pset 0, indien jy 222 00:09:23,350 --> 00:09:27,200 in 10 uur, 15 uur, 25 uur in 'n paar pset - en jy net gebons 223 00:09:27,200 --> 00:09:28,180 jou kop teen die muur, 224 00:09:28,180 --> 00:09:29,850 en dit is om super laat in die nag, 225 00:09:29,850 --> 00:09:31,880 maar jy geneem het die pset soos 90% van die manier, 226 00:09:31,880 --> 00:09:33,780 jy weet dat jy nie kan uitvind een ding - 227 00:09:33,780 --> 00:09:36,830 slaag / druip regtig die rand van 'n klas soos hierdie, waar jy kan sorteer 228 00:09:36,830 --> 00:09:39,150 van gelukkig sê oukei, ek weet dit is nie volmaak. 229 00:09:39,150 --> 00:09:40,470 Maar Ek het my gat af op hierdie punt. 230 00:09:40,470 --> 00:09:42,410 Ek is redelik tevrede is met waar dit geëindig het. 231 00:09:42,410 --> 00:09:44,780 En dit sal voldoen aan die verwagtinge vir slaag / druip. 232 00:09:44,780 --> 00:09:46,850 So hou dit in gedagte. 233 00:09:46,850 --> 00:09:47,140 >> Alles reg. 234 00:09:47,140 --> 00:09:50,980 So diegene van julle wat gesukkel het om gebruik te maak van die Harvard-Universiteit Wi-Fi weet 235 00:09:50,980 --> 00:09:54,780 dat daar 'n CS50 SSID, 'n Wi-Fi-verbinding rond dryf dat jy 236 00:09:54,780 --> 00:09:56,520 dalk 'n beter kans hê. 237 00:09:56,520 --> 00:09:59,430 Dit is nogal ironies dat die wagwoord vir hierdie - as jy wil om te probeer 238 00:09:59,430 --> 00:10:03,080 verbinding met dit vir 'n beter spoed en laat ons weet as dit is geen beter - 239 00:10:03,080 --> 00:10:09,240 is een, twee, drie, vier, vyf, al die pad tot agt omdat agt is 240 00:10:09,240 --> 00:10:10,270 meer veilig as vyf. 241 00:10:10,270 --> 00:10:15,520 So as jy die Wi-Fi wagwoord, verbind tot CS50 draadloos hier. 242 00:10:15,520 --> 00:10:16,950 Een, twee, drie, vier, vyf, ses, sewe, agt. 243 00:10:16,950 --> 00:10:20,440 En post op CS50 Bespreek as jy nog intermitterende konnektiwiteit kwessies, 244 00:10:20,440 --> 00:10:24,880 en ons sal toelaat dat die magte wat wees weet vir hierdie ruimte. 245 00:10:24,880 --> 00:10:25,180 >> Alles reg. 246 00:10:25,180 --> 00:10:30,350 So 'n vinnige teaser, veral vir dié van julle wat is fan seuns of meisies 247 00:10:30,350 --> 00:10:31,900 van alles Apple. 248 00:10:31,900 --> 00:10:37,566 Wat ek opgegrawe van 'n paar jaar terug was hierdie lêer hier, ilock.c, net om te 249 00:10:37,566 --> 00:10:40,930 soort van meer konkrete en meer komplekse maak 'n paar van die meer basiese C 250 00:10:40,930 --> 00:10:42,350 programme het ons skryf. 251 00:10:42,350 --> 00:10:44,360 So ek het hierdie lêer, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Dit is beskikbaar op die lesings bladsy vir vandag. 253 00:10:46,830 --> 00:10:49,470 Op die linkerkant, sien jy 'n lang lys van funksies. 254 00:10:49,470 --> 00:10:51,860 So die man wat dit geskryf het 'n baie van die funksies, 255 00:10:51,860 --> 00:10:53,290 meer as net belangrikste. 256 00:10:53,290 --> 00:10:55,490 Hy het 'n hele klomp van die biblioteke gebruik hier. 257 00:10:55,490 --> 00:11:00,450 En as ons begin blaai deur, wat dit eintlik is, is die 258 00:11:00,450 --> 00:11:04,670 eerste, glo ek, vir die oorspronklike iPhone kraak. 259 00:11:04,670 --> 00:11:08,000 As jy wou die oorspronklike iPhone te jailbreak, wat beteken untether 260 00:11:08,000 --> 00:11:11,800 dit van AT & T en eintlik spesiale sagteware te installeer op dit en doen dinge 261 00:11:11,800 --> 00:11:13,510 dat Apple nie wil hê mense moet doen - 262 00:11:13,510 --> 00:11:17,020 Wel, iemand die tyd geneem het om uit te vind presies hoe hulle kan uitbuit 263 00:11:17,020 --> 00:11:20,880 sagteware foute, foute, foute, in Apple se sagteware. 264 00:11:20,880 --> 00:11:22,650 En so gebore ilock.c. 265 00:11:22,650 --> 00:11:26,670 Dat as jy saamgestel dit op 'n rekenaar en geïnstalleer het dit op 'n iPhone wat 266 00:11:26,670 --> 00:11:29,810 via, sê, 'n USB-kabel aan jou rekenaar gekoppel is, sal dit gee jou 267 00:11:29,810 --> 00:11:33,360 administratiewe of root voorregte op jou iPhone en laat jy dit doen pretty much 268 00:11:33,360 --> 00:11:34,170 wat jy wil. 269 00:11:34,170 --> 00:11:36,740 >> En so daar is hierdie fassinerende kat-en-muis-speletjie tussen Apple en 270 00:11:36,740 --> 00:11:39,920 die res van die wêreld in die besonder as hulle, soos baie maatskappye probeer om te sluit 271 00:11:39,920 --> 00:11:43,220 hul dinge neer sodat jy kan net doen met dit wat hulle van plan is. 272 00:11:43,220 --> 00:11:46,620 Maar te danke aan mense soos hierdie en hul begrip van die lae-vlak 273 00:11:46,620 --> 00:11:50,580 besonderhede en, in hierdie geval, C programmering en 'n baie van die bekende konstrukte 274 00:11:50,580 --> 00:11:54,630 dat ons het begin speel met, jy in staat is om werklik gebaseer is op die 275 00:11:54,630 --> 00:11:59,050 hardeware in 'n manier wat jy goeddink en nie noodwendig 'n korporatiewe entiteit. 276 00:11:59,050 --> 00:12:01,360 So byvoorbeeld, ek het geen idee wat dit alles doen. 277 00:12:01,360 --> 00:12:03,220 Maar GetVersion klink redelik eenvoudig. 278 00:12:03,220 --> 00:12:05,480 En dit lyk soos dit is 'n funksie wat hierdie persoon het geskryf. 279 00:12:05,480 --> 00:12:09,240 Neem 'n soort van die heelgetal as 'n argument, nie terugkeer nie enigiets nie, maar 280 00:12:09,240 --> 00:12:13,080 blyk te loop met 'n lus hier en 'n as voorwaarde, as voorwaarde, 281 00:12:13,080 --> 00:12:15,620 breek, en op een of ander manier verband hou met die weergawe nommers. 282 00:12:15,620 --> 00:12:16,700 As ons scroll down - 283 00:12:16,700 --> 00:12:19,570 selfs al is 'n baie van hierdie sleutelwoorde gaan nuut wees, en daar is 'n 284 00:12:19,570 --> 00:12:22,590 die hele lot van funksies hier het ons nog nooit gesien het en dalk nie ooit sal sien oor 285 00:12:22,590 --> 00:12:23,830 die loop van die semester - 286 00:12:23,830 --> 00:12:27,150 aan die einde van die dag is, volg dit dieselfde reëls en logika wat ons het 287 00:12:27,150 --> 00:12:28,760 speel met tot dusver. 288 00:12:28,760 --> 00:12:34,220 So dit is veels te oud om jou iPhone 3s of 4s of gou 5s om te kraak, hierdie dae, 289 00:12:34,220 --> 00:12:37,320 maar weet dat dit alles baie afgelei van hierdie wêreld wat ons het 290 00:12:37,320 --> 00:12:38,430 duik in. 291 00:12:38,430 --> 00:12:41,900 >> So laat ons neem 'n blik op 'n bietjie meer eenvoudige voorbeeld. 292 00:12:41,900 --> 00:12:46,100 Hierdie een, net om te warm raak met 'n paar sintaksis en ook 'n paar ander data 293 00:12:46,100 --> 00:12:49,240 tipe wat ons het gepraat oor, maar het nie regtig gesien in C. So dit is 'n 294 00:12:49,240 --> 00:12:51,680 lêer genaamd positive1.c. 295 00:12:51,680 --> 00:12:55,120 En volgens die kommentaar aan die bokant, dit vereis net dat 'n gebruiker 'n 296 00:12:55,120 --> 00:12:55,960 positiewe getal. 297 00:12:55,960 --> 00:12:59,530 So dit is 'n voorbeeld van 'n do-while lus, wat mooi is vir die gebruiker-interaktiewe 298 00:12:59,530 --> 00:13:01,980 programme waar jy nodig het om te vertel van die gebruiker om iets te doen. 299 00:13:01,980 --> 00:13:05,190 En as hulle nie saam, jy gil op hulle of hul insette te verwerp. 300 00:13:05,190 --> 00:13:11,610 Case in point, ek gaan om te doen lyne 19 deur 24 so lank as die gebruiker 301 00:13:11,610 --> 00:13:14,310 nie vir my 'n positiewe getal. 302 00:13:14,310 --> 00:13:20,400 Nou is hierdie detail hier on line 18, hoekom het Ek verklaar n bo hierdie geheel 303 00:13:20,400 --> 00:13:24,490 herhaling konstruk in teenstelling met reg langs lyn 22 waar ek 304 00:13:24,490 --> 00:13:26,880 eintlik omgee n te kry? 305 00:13:26,880 --> 00:13:27,330 Ja? 306 00:13:27,330 --> 00:13:27,780 [Onhoorbaar] 307 00:13:27,780 --> 00:13:29,040 >> David J. Malan: Ja, so hierdie kwessie van die omvang. 308 00:13:29,040 --> 00:13:30,850 En in die leek se termyn, wat beteken omvang verwys na? 309 00:13:34,690 --> 00:13:36,610 Ja? 310 00:13:36,610 --> 00:13:37,860 [Onhoorbaar] 311 00:13:40,040 --> 00:13:41,105 David J. Malan: Kan jy 'n bietjie harder praat? 312 00:13:41,105 --> 00:13:43,450 Spreker 1: Waar kan jy toegang tot 'n spesifieke veranderlike. 313 00:13:43,450 --> 00:13:45,170 David J. Malan: Perfect. 314 00:13:45,170 --> 00:13:47,360 Waar jy kan toegang tot 'n spesifieke veranderlike. 315 00:13:47,360 --> 00:13:50,400 En oor die algemeen, die oppergesag van die duim tot dusver is dat die omvang van sommige 316 00:13:50,400 --> 00:13:55,860 veranderlike word gedefinieer deur die mees onlangse krullerige draadjies wat jy gesien het. 317 00:13:55,860 --> 00:14:02,010 En so in hierdie geval, as ek die fout gemaak verklaar n on line 22, 318 00:14:02,010 --> 00:14:03,010 daardie lyn sal werk. 319 00:14:03,010 --> 00:14:10,990 Ek sou 'n int te kry, en ek sou sit dit in daardie veranderlike n in reël 22. 320 00:14:10,990 --> 00:14:16,900 Maar watter lyn van die kode sal nou nie 'n idee wat ek praat? 321 00:14:16,900 --> 00:14:22,650 So 25, en dit draai uit 24, goed so, want in hierdie geval, is dit buite 322 00:14:22,650 --> 00:14:23,610 van die kode tussen krulhakies. 323 00:14:23,610 --> 00:14:27,280 So net 'n bietjie van 'n oorlas nie, maar baie maklik opgelos deur eenvoudig te verklaar 324 00:14:27,280 --> 00:14:30,140 die veranderlike buitekant van die funksie self. 325 00:14:30,140 --> 00:14:32,600 >> Nou het ons later vandag sal sien, kan jy 'n stap verder gaan. 326 00:14:32,600 --> 00:14:34,860 En jy kan selfs 'n bietjie lui - 327 00:14:34,860 --> 00:14:37,320 en dit is nie te aanbeveel word, in die algemeen - 328 00:14:37,320 --> 00:14:42,260 maar jy kan selfs lui en 'n veranderlike wêreldwyd, om so te praat, nie 329 00:14:42,260 --> 00:14:46,670 binnekant van 'n funksie nie binnekant van 'n lus, maar in die lêer self, buite 330 00:14:46,670 --> 00:14:49,600 van al die funksies wat jy geskryf het, soos ek gedoen het hier on line 15. 331 00:14:49,600 --> 00:14:51,160 Maar dit is oor die algemeen frowned upon. 332 00:14:51,160 --> 00:14:55,680 Maar besef dit is 'n oplossing soms tot ander probleme, soos ons sal 333 00:14:55,680 --> 00:14:56,620 uiteindelik sien. 334 00:14:56,620 --> 00:14:58,130 So vir nou, sal ons laat dit soos hierdie. 335 00:14:58,130 --> 00:15:01,030 Maar laat ons kyk of ons kan herskryf net om te begin met die uitdrukking van onsself 'n 336 00:15:01,030 --> 00:15:01,990 n bietjie anders. 337 00:15:01,990 --> 00:15:05,330 >> So hierdie program, net om duidelik te wees, is positive1. 338 00:15:05,330 --> 00:15:11,810 Laat my voort te gaan hier en in my terminale venster positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Stel, okay. 340 00:15:12,740 --> 00:15:14,910 Ek gaan positive1 uit te voer, druk Enter. 341 00:15:14,910 --> 00:15:16,820 Ek eis dat jy gee my 'n positiewe heelgetal. 342 00:15:16,820 --> 00:15:18,260 Ek sal -1 sê. 343 00:15:18,260 --> 00:15:18,910 Wat nie werk nie. 344 00:15:18,910 --> 00:15:22,150 0, 99, wat blyk te werk. 345 00:15:22,150 --> 00:15:23,570 Miskien nie die mees streng toets. 346 00:15:23,570 --> 00:15:26,480 Maar ten minste is dit 'n mooi gesonde verstand check dat ons op die regte spoor. 347 00:15:26,480 --> 00:15:29,240 So laat my nou voort te gaan en maak weergawe twee van hierdie. 348 00:15:29,240 --> 00:15:32,500 En wat verskillend is reeds? 349 00:15:32,500 --> 00:15:35,140 Dit implemente dieselfde ding. 350 00:15:35,140 --> 00:15:40,660 Maar wat spring uit as duidelik dié keer anders? 351 00:15:40,660 --> 00:15:42,560 Ja, so dit Bool in die groen. 352 00:15:42,560 --> 00:15:45,980 Gedit uitgelig in groen hierdie navraag bekend as Bool, 353 00:15:45,980 --> 00:15:47,000 wat is 'n data tipe. 354 00:15:47,000 --> 00:15:51,080 Dit kom nie gebou in al die weergawes van C. Jy moet 'n te sluit 355 00:15:51,080 --> 00:15:52,010 spesifieke biblioteek. 356 00:15:52,010 --> 00:15:54,770 In ons geval, ek sluit die CS50 biblioteek, sodat ons 357 00:15:54,770 --> 00:15:56,460 het toegang tot Bool. 358 00:15:56,460 --> 00:15:59,810 Maar in reël 18, maar dit lyk asof ons 'n Boolese waarde hier genoem dankbaar te hê. 359 00:15:59,810 --> 00:16:01,040 Sodat ek kon genoem het hierdie iets. 360 00:16:01,040 --> 00:16:04,500 Maar ek het dit dankbaar net soort sommige semantiese betekenis oordra. 361 00:16:04,500 --> 00:16:07,930 So aanvanklik on line 18, ek glo nie dankbaar omdat die 362 00:16:07,930 --> 00:16:12,150 Boolese waarde dankbaar is geïnisialiseer vals in lyn 18. 363 00:16:12,150 --> 00:16:16,890 En dan lyk dit wat ek hier gedoen in lyne 21 deur 23 is ek net 364 00:16:16,890 --> 00:16:18,610 soort van herskryf my logika. 365 00:16:18,610 --> 00:16:21,020 So nie funksioneel verskillende. 366 00:16:21,020 --> 00:16:26,940 Maar in lyn 22 nou, ek kyk of die int die gebruiker verskaf is groter as 367 00:16:26,940 --> 00:16:31,120 0, dan het ek eenvoudig die waarde van dankbaar vir ware verander. 368 00:16:31,120 --> 00:16:32,290 En hoekom doen ek dit? 369 00:16:32,290 --> 00:16:35,600 Omdat in reël 25, blykbaar, ek gaan om 'n toestand te monitor. 370 00:16:35,600 --> 00:16:39,380 Doen dit loop terwyl dankbaar is vals. 371 00:16:39,380 --> 00:16:43,610 >> So ek stel dit as 'n alternatief na weergawe een, want dit is ten minste 'n 372 00:16:43,610 --> 00:16:45,130 bietjie meer intuïtief, miskien. 373 00:16:45,130 --> 00:16:46,900 Dit is 'n bietjie meer gegrond is in Engels. 374 00:16:46,900 --> 00:16:51,710 So doen die volgende, terwyl jy nie dankbaar of terwyl dankbaar is vals. 375 00:16:51,710 --> 00:16:55,890 En hierdie keer ook, ek glo gee nie hoef te onthou wat die gebruiker ingetik 376 00:16:55,890 --> 00:16:57,730 omdat kennisgewing is daar geen veranderlike n. 377 00:16:57,730 --> 00:16:58,650 So eintlik, I - 378 00:16:58,650 --> 00:17:00,080 'n klein wit leuentjie. 379 00:17:00,080 --> 00:17:02,770 Funksioneel, die program is 'n bietjie anders is wanneer ons kry aan die onderkant van 380 00:17:02,770 --> 00:17:04,819 dit omdat ek nie onthou wat n. 381 00:17:04,819 --> 00:17:09,579 Maar ek wou hier demonstreer ook dat selfs al het ons gesien getint en 382 00:17:09,579 --> 00:17:13,920 GetString wat gebruik word op die regterkant van 'n gelyke teken tot dusver sodat 383 00:17:13,920 --> 00:17:17,160 ons onthou die waarde, tegnies, dit is nie streng noodsaaklik is. 384 00:17:17,160 --> 00:17:20,950 Indien, vir watter rede ookal jy net gee nie om nie die waarde te red, jy wil net 385 00:17:20,950 --> 00:17:25,710 om seker te maak van die waarde, opmerk dat ons net kan dit skryf as getint oop 386 00:17:25,710 --> 00:17:27,000 hakie, naby hakie. 387 00:17:27,000 --> 00:17:30,460 Daardie funksie gaan 'n waarde om terug te keer, soos ons gesê. 388 00:17:30,460 --> 00:17:32,010 Dit gaan jou terug te gee 'n int. 389 00:17:32,010 --> 00:17:36,450 En so, as jy geestelik dink dit gebeur, wanneer ek tik in 99, getint 390 00:17:36,450 --> 00:17:38,160 gee die nommer 99. 391 00:17:38,160 --> 00:17:41,330 En so konseptueel, dit is asof my kode eintlik. 392 00:17:41,330 --> 00:17:45,880 So as 99 is inderdaad groter as 0, dan is dankbaar waar. 393 00:17:45,880 --> 00:17:50,420 Dan besef lyn 25 ooh, ons gedoen, want ek is nou dankbaar. 394 00:17:50,420 --> 00:17:54,590 En in lyn 26, het ons net sê, Dankie vir die positiewe heelgetal is, wat dit ookal 395 00:17:54,590 --> 00:17:55,710 gebeur om te wees. 396 00:17:55,710 --> 00:17:58,900 >> Laat ons nou doen effense "sintaktiese suiker hier, om so te praat. 397 00:17:58,900 --> 00:18:02,990 Kom ons kyk of ons kan skoon te maak van hierdie lyn 25 met hierdie derde en laaste variansie 398 00:18:02,990 --> 00:18:04,640 in positive3. 399 00:18:04,640 --> 00:18:08,250 So let die enigste verskil is nou watter reël van die kode? 400 00:18:11,930 --> 00:18:13,260 Ja, so 25. 401 00:18:13,260 --> 00:18:15,520 En ons het nie regtig hierdie truuk gesien net nog nie. 402 00:18:15,520 --> 00:18:19,510 Maar ons het die uitroepteken op Maandag, wat dui op wat? 403 00:18:19,510 --> 00:18:20,970 So nie, of ontkenning. 404 00:18:20,970 --> 00:18:23,460 So 'n Boolese waarde en die waarde daarvan te flip. 405 00:18:23,460 --> 00:18:24,390 True vals. 406 00:18:24,390 --> 00:18:25,500 False waar. 407 00:18:25,500 --> 00:18:28,910 So, ek sou voorstel, is selfs 'n bietjie meer intuïtief van 'n manier van 408 00:18:28,910 --> 00:18:32,200 die skryf van die kode, want ek nog steeds dankbaar inisialiseer op vals. 409 00:18:32,200 --> 00:18:33,530 Ek het nog nie die volgende. 410 00:18:33,530 --> 00:18:35,700 Ek dankbaar vir waar, wanneer die tyd kom. 411 00:18:35,700 --> 00:18:40,690 Maar nou kan jy net regtig vertaling van hierdie kode mondelings links na regs, 412 00:18:40,690 --> 00:18:42,550 terwyl nie dankbaar nie. 413 00:18:42,550 --> 00:18:46,170 Omdat bang, of uitroepteken, dui op die idee van nie, sodat, terwyl 414 00:18:46,170 --> 00:18:47,010 nie dankbaar. 415 00:18:47,010 --> 00:18:49,740 >> Dit weer doen, het ons nie 'n nuwe konsepte per se. 416 00:18:49,740 --> 00:18:53,230 Ons het gepraat oor Booleans terug toe ons gespeel met Scratch. 417 00:18:53,230 --> 00:18:55,690 Maar besef nou ons kan net begin skryf ons kode in 418 00:18:55,690 --> 00:18:56,550 baie verskillende maniere. 419 00:18:56,550 --> 00:19:00,010 So, as jy veral in pset1 soort sukkel om uit te vind die pad na 420 00:19:00,010 --> 00:19:03,400 skryf 'n program, is jy in die geluk kans, want daar gaan om te wees nie 421 00:19:03,400 --> 00:19:05,780 aantal oplossings wat jy kan gebeur op. 422 00:19:05,780 --> 00:19:09,850 Byvoorbeeld, dit is net drie vir selfs die eenvoudigste van programme. 423 00:19:09,850 --> 00:19:10,180 Alles reg. 424 00:19:10,180 --> 00:19:13,860 En nou onthou op Maandag, ons het op hierdie noot met terugkeer waardes. 425 00:19:13,860 --> 00:19:18,280 Dus, vir die heel eerste keer, ons het 'n program wat nie net hoof, 426 00:19:18,280 --> 00:19:22,240 dit het ook sy eie persoonlike funksie wat ek hier geskryf het. 427 00:19:22,240 --> 00:19:26,640 So in lyn 31 deur 34, het ek 'n kubus funksie geïmplementeer. 428 00:19:26,640 --> 00:19:27,800 Dit is nie kompleks. 429 00:19:27,800 --> 00:19:29,830 Dit is net 'n keer 'n keer 'n, in hierdie geval. 430 00:19:29,830 --> 00:19:34,920 Maar wat is belangrik om daaroor is dat ek insette is in die vorm van 'n 431 00:19:34,920 --> 00:19:38,910 Ek terugkeer uitset in die vorm van 'n keer 'n keer 'n. 432 00:19:38,910 --> 00:19:43,940 >> So nou is ek het die vermoë om, net soos Ek gebruik word om met printf alleen, om te bel 433 00:19:43,940 --> 00:19:47,120 hierdie funksie deur die roeping van die kubus funksie. 434 00:19:47,120 --> 00:19:49,470 En die kubus funksie neem 'n paar insette. 435 00:19:49,470 --> 00:19:52,030 En die kubus funksie gee 'n paar uitset. 436 00:19:52,030 --> 00:19:56,660 En so in teenstelling, printf net iets gedoen het. 437 00:19:56,660 --> 00:19:59,490 Dit het nie terugkeer nie iets wat ons oor versorg - selfs al is, as 'n 438 00:19:59,490 --> 00:20:00,820 eenkant, is dit nie 'n waarde terug. 439 00:20:00,820 --> 00:20:02,650 Jy moet net die algemeen ignoreer dit. 440 00:20:02,650 --> 00:20:04,000 Printf net iets gedoen het. 441 00:20:04,000 --> 00:20:06,220 Dit het 'n newe-effek van die druk op die skerm. 442 00:20:06,220 --> 00:20:09,480 In teenstelling hier, ons het die kubus funksie, wat 443 00:20:09,480 --> 00:20:11,400 eintlik terug iets. 444 00:20:11,400 --> 00:20:12,960 >> So, dit is oor die algemeen - 445 00:20:12,960 --> 00:20:15,260 vir diegene wat vertroud is met hierdie, dit is 'n redelik eenvoudige idee. 446 00:20:15,260 --> 00:20:18,460 Maar vir diegene wat minder vertroud is met hierdie idee van wat in insette en 447 00:20:18,460 --> 00:20:21,700 terug uitsette, laat ons probeer om net iets super eenvoudig. 448 00:20:21,700 --> 00:20:25,180 Is iemand gemaklik kom kortliks op die verhoog? 449 00:20:25,180 --> 00:20:27,460 Jy moet gemaklik wees met 'n kamera op jou, asook. 450 00:20:27,460 --> 00:20:27,640 Ja. 451 00:20:27,640 --> 00:20:28,610 Okay, wat is jou naam? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 David J. Malan: Ken. 454 00:20:29,420 --> 00:20:29,810 Alle reg, Ken. 455 00:20:29,810 --> 00:20:31,060 Kom op. 456 00:20:31,060 --> 00:20:34,660 So Ken gaan na 'n funksie van spesies hier te wees. 457 00:20:34,660 --> 00:20:35,760 En laat ons gaan voort en doen dit. 458 00:20:35,760 --> 00:20:38,790 Kom ons kry 'n bietjie fancy. 459 00:20:38,790 --> 00:20:39,770 Nice om jou te ontmoet. 460 00:20:39,770 --> 00:20:41,010 Welkom by sentrum stadium. 461 00:20:41,010 --> 00:20:41,980 Alles reg. 462 00:20:41,980 --> 00:20:45,590 Laat hierdie knoppie getref hier. 463 00:20:45,590 --> 00:20:46,420 Alles reg. 464 00:20:46,420 --> 00:20:49,490 So hier het jy 'n moderne skryfbord. 465 00:20:49,490 --> 00:20:53,050 En wat ek is, is die belangrikste funksie, byvoorbeeld. 466 00:20:53,050 --> 00:20:55,990 En ek het nie 'n iPad in my hand. 467 00:20:55,990 --> 00:20:59,000 Ek het nie regtig onthou hoe om te - wel, eintlik, kan nie sê dat. 468 00:20:59,000 --> 00:21:02,200 Ek het nie regtig 'n goeie handskrif. 469 00:21:02,200 --> 00:21:05,260 En so ook, ek wil jou iets te druk op die skerm vir my. 470 00:21:05,260 --> 00:21:07,470 >> So ek die hoofprogram. 471 00:21:07,470 --> 00:21:15,060 En ek gaan om jou te hê, sê dit deur dit te skryf in my hoender kras en 472 00:21:15,060 --> 00:21:16,600 dan verby jou 'n inset. 473 00:21:16,600 --> 00:21:20,000 So as dom al hierdie oefening is, is die idee van die funksies en die uitroep van 'n 474 00:21:20,000 --> 00:21:22,260 funksie en die terugkeer van 'n funksie regtig kook afbring na hierdie. 475 00:21:22,260 --> 00:21:23,120 Ek am Main. 476 00:21:23,120 --> 00:21:26,270 Ek het nou net geskryf printf ("iets") op die skerm. 477 00:21:26,270 --> 00:21:27,470 Ek hardloop hierdie program. 478 00:21:27,470 --> 00:21:30,900 En so gou as printf kry genoem, wat dit neem om 'n argument - of een parameter, 479 00:21:30,900 --> 00:21:31,660 soms - 480 00:21:31,660 --> 00:21:32,780 tussen dubbele aanhalingstekens. 481 00:21:32,780 --> 00:21:33,960 Hier is die argument. 482 00:21:33,960 --> 00:21:35,740 Ek om dit aan Ken. 483 00:21:35,740 --> 00:21:39,390 Nou is hy 'n swart blokkie n aantal jare gelede geskryf wat blykbaar 484 00:21:39,390 --> 00:21:41,070 weet net hoe om dinge op die skerm te druk. 485 00:21:41,070 --> 00:21:42,320 >> So, uit te voer. 486 00:21:48,842 --> 00:21:49,900 Dit is nie sleg nie. 487 00:21:49,900 --> 00:21:50,890 So, baie goed. 488 00:21:50,890 --> 00:21:52,900 So nou Ken gedoen uitvoering. 489 00:21:52,900 --> 00:21:55,810 Moet hy aan die hand my niks terug? 490 00:21:55,810 --> 00:21:57,240 So nie het ons tot dusver gesien het. 491 00:21:57,240 --> 00:21:59,230 Weer terugkeer eintlik printf 'n aantal. 492 00:21:59,230 --> 00:22:01,640 Maar ons gaan om dit te ignoreer vir nou, want ons het nog nooit dit gebruik. 493 00:22:01,640 --> 00:22:03,400 So wat is dit vir Ken. 494 00:22:03,400 --> 00:22:06,650 En so nou hoof terug kom om uit te voer - 495 00:22:06,650 --> 00:22:09,630 hoof neem oor die beheer van die program weer omdat daardie lyn van die kode, 496 00:22:09,630 --> 00:22:11,010 printf, word gedoen die uitvoering. 497 00:22:11,010 --> 00:22:13,890 En ons gaan oor ons manier uitvoering van enige ander lyne is daar. 498 00:22:13,890 --> 00:22:14,130 >> Alles reg. 499 00:22:14,130 --> 00:22:17,080 So nou, laat ons probeer om 'n effens ander voorbeeld. 500 00:22:17,080 --> 00:22:22,430 En hierdie keer hier, laat ons eers duidelik die skerm hier. 501 00:22:22,430 --> 00:22:24,670 En hierdie keer, sal ons doen die cubing funksie. 502 00:22:24,670 --> 00:22:27,350 Maar hierdie keer, ek verwag 'n uitset waarde. 503 00:22:27,350 --> 00:22:28,630 So laat ons gaan voort en doen dit. 504 00:22:28,630 --> 00:22:35,680 So nou het ek 'n reël van die kode wat sê x = kubus (x). 505 00:22:35,680 --> 00:22:36,930 Dus eintlik let's - 506 00:22:41,450 --> 00:22:43,940 die lyn van kode, onthou, so lyk. 507 00:22:43,940 --> 00:22:45,960 x = kubus (x). 508 00:22:45,960 --> 00:22:48,100 So hoe is dit gaan werk? 509 00:22:48,100 --> 00:22:50,820 So laat ons gaan voort en gee jou weer 'n wit skerm. 510 00:22:50,820 --> 00:22:55,000 En ek gaan om te skryf nou die waarde van x, wat op hierdie oomblik in 511 00:22:55,000 --> 00:23:01,080 tyd gebeur te word, laat ons sê, 2, om dit eenvoudig te hou. 512 00:23:01,080 --> 00:23:04,890 So ek neergeskryf het op 'n stuk papier, die waarde van 2, 513 00:23:04,890 --> 00:23:06,100 wat is my waarde x. 514 00:23:06,100 --> 00:23:08,250 Ek oorhandig dit aan Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: En ek het net skryf die antwoord? 516 00:23:09,200 --> 00:23:12,660 David J. Malan: Ja, laat ons net skryf die antwoord. 517 00:23:12,660 --> 00:23:13,030 Okay. 518 00:23:13,030 --> 00:23:16,280 En nou het hy my iets om terug te keer. 519 00:23:16,280 --> 00:23:17,560 So - 520 00:23:17,560 --> 00:23:18,170 volmaak is. 521 00:23:18,170 --> 00:23:18,840 Nice segue. 522 00:23:18,840 --> 00:23:21,970 >> So nou is hy oorhandig my terug die waarde van 8, in hierdie geval. 523 00:23:21,970 --> 00:23:23,220 En wat moet ek doen met dit? 524 00:23:23,220 --> 00:23:26,130 Wel, eintlik, laat ons sien. 525 00:23:26,130 --> 00:23:26,640 Kry dit reg. 526 00:23:26,640 --> 00:23:27,880 Wat gaan ek te doen met dit? 527 00:23:27,880 --> 00:23:31,900 Nou gaan ek om hierdie waarde te neem en eintlik is dit in die stoor 528 00:23:31,900 --> 00:23:33,400 dieselfde stukkies in die geheue. 529 00:23:33,400 --> 00:23:35,030 Maar let op, ek is soort van sukkel hier. 530 00:23:35,030 --> 00:23:38,280 Ek is 'n bietjie verward, want waar ek skryf eintlik die waarde van x? 531 00:23:38,280 --> 00:23:41,840 Want wat ek het net gedoen is fisies hand Ken 'n stuk papier 532 00:23:41,840 --> 00:23:44,400 wat die waarde 2, wat x. 533 00:23:44,400 --> 00:23:46,300 En inderdaad, dit is presies wat gebeur. 534 00:23:46,300 --> 00:23:50,100 So dit blyk dat wanneer jy noem 'n funksie, en jy het in 'n argument 535 00:23:50,100 --> 00:23:54,130 "hello world" of jy slaag in 'n argument soos 2, oor die algemeen, is jy 536 00:23:54,130 --> 00:23:56,720 wat in 'n afskrif van daardie argument. 537 00:23:56,720 --> 00:24:01,020 En net soos ek geskryf het die getal 2 hier en oorhandig dit aan Ken, wat moet 538 00:24:01,020 --> 00:24:04,760 beteken dat ek nog steeds 'n afskrif van die waarde 2 iewers. 539 00:24:04,760 --> 00:24:08,140 Want inderdaad, nou dat ek die waarde 8 terug gekry het, ek nodig het om terug te gaan in 540 00:24:08,140 --> 00:24:12,010 RAM en eintlik neer te skryf 8 waar ek een keer die getal 2. 541 00:24:12,010 --> 00:24:15,720 >> So visueel hierdie idee van wat in letterlik onthou 542 00:24:15,720 --> 00:24:16,730 'n afskrif van die waarde. 543 00:24:16,730 --> 00:24:19,570 Ken doen sy ding, oorhandig my terug iets - in hierdie geval, 544 00:24:19,570 --> 00:24:20,820 'n waarde soos 8. 545 00:24:20,820 --> 00:24:22,660 En dan het ek het iets te doen met daardie waarde as ek 546 00:24:22,660 --> 00:24:24,880 wil om dit rond te hou. 547 00:24:24,880 --> 00:24:29,470 So al hierdie dinge al te bekend is kort voor lank sal wees. 548 00:24:29,470 --> 00:24:33,082 Thank you so much vir hierdie demo hier, Ken. 549 00:24:33,082 --> 00:24:34,820 Alles reg. 550 00:24:34,820 --> 00:24:36,720 Baie goed gedoen. 551 00:24:36,720 --> 00:24:40,610 So laat ons sien hoe dit uiteindelik betrekking het op sommige van die funksie 552 00:24:40,610 --> 00:24:42,270 roeping wat ons hier doen. 553 00:24:42,270 --> 00:24:47,610 So laat ek gaan voort en bring ons terug na die cubing voorbeeld hier. 554 00:24:47,610 --> 00:24:53,080 En let op dat as ons wil eintlik begin om dit verder te neem, gaan ons 555 00:24:53,080 --> 00:24:57,050 hoef te wees bewus van die feit dat die aantal x wat geslaag het in 556 00:24:57,050 --> 00:25:01,390 hier is verskillend van wat werklik in die funksie geslaag. 557 00:25:01,390 --> 00:25:03,940 Dit weer doen, word geslaag deur afskrif gaan word baie 558 00:25:03,940 --> 00:25:05,620 related in net 'n oomblik. 559 00:25:05,620 --> 00:25:09,320 >> So laat ons neem 'n blik op iets wat nie heeltemal reg is nie werk. 560 00:25:09,320 --> 00:25:11,790 Ek gaan om voort te gaan en 1/3 buggy voorbeeld oopmaak, wat 561 00:25:11,790 --> 00:25:13,560 word deur die natuur gebrekkig. 562 00:25:13,560 --> 00:25:18,070 En dit word genoem buggy3, en dit implementeer 'n uitruiling funksie. 563 00:25:18,070 --> 00:25:23,500 So hier het ons 'n hoof funksie wat x en y het arbitrêr geïnisialiseer 564 00:25:23,500 --> 00:25:24,720 1 en 2, onderskeidelik. 565 00:25:24,720 --> 00:25:27,590 Ons kan gebruik getint, maar ons het net 'n eenvoudige oefening nodig het. 566 00:25:27,590 --> 00:25:29,680 So dit is hard-gekodeerde as 1 en 2. 567 00:25:29,680 --> 00:25:35,330 In reëls 21 en 22, het ons blykbaar druk x en y, een per reël. 568 00:25:35,330 --> 00:25:39,620 Dan, on line 23, ek beweer ek hierdie waardes is uitruiling, dot, dot, dot. 569 00:25:39,620 --> 00:25:43,030 Ek het blykbaar noem 'n funksie in lyn 24 genoem swap 570 00:25:43,030 --> 00:25:44,000 Dit neem twee argumente. 571 00:25:44,000 --> 00:25:46,430 Dit is heeltemal wettig vir funksies twee argumente te neem. 572 00:25:46,430 --> 00:25:48,220 Ons het gesien printf dit reeds doen. 573 00:25:48,220 --> 00:25:50,370 So swap neem blykbaar x en y. 574 00:25:50,370 --> 00:25:53,010 En soos sy naam suggereer, hoop ek dat dit gaan 575 00:25:53,010 --> 00:25:54,320 ruil die twee waardes. 576 00:25:54,320 --> 00:25:57,560 So dan het ek beweer on line 25, omgeruil. 577 00:25:57,560 --> 00:26:01,570 En ek herdruk x en y in die veronderstelling dat 578 00:26:01,570 --> 00:26:02,830 hulle het wel omgeruil. 579 00:26:02,830 --> 00:26:04,370 Maar as ek eintlik hierdie program - 580 00:26:04,370 --> 00:26:06,060 laat my 'n terminale venster oop te maak. 581 00:26:06,060 --> 00:26:07,750 Laat my toe om buggy3. 582 00:26:07,750 --> 00:26:09,970 Soos die naam aandui, is dit nie gaan om goed te eindig. 583 00:26:09,970 --> 00:26:14,690 Want toe ek druk Enter opmerk dat x 1. 584 00:26:14,690 --> 00:26:15,720 y is 2. 585 00:26:15,720 --> 00:26:19,160 En tog aan die einde van die program, het hulle nog steeds, in werklikheid, dieselfde. 586 00:26:19,160 --> 00:26:22,760 >> So gebaseer op die demonstrasie nou net met Ken, wat eintlik aan die gang? 587 00:26:22,760 --> 00:26:24,660 Wel, laat ons duik in hierdie swap funksie. 588 00:26:24,660 --> 00:26:25,800 Dit is super kort. 589 00:26:25,800 --> 00:26:28,020 Dit is net 'n paar reëls van die kode lank. 590 00:26:28,020 --> 00:26:32,810 Maar wat is die fundamentele probleem wat gebaseer is op die eenvoudige storie vertel 591 00:26:32,810 --> 00:26:34,270 hier met Ken? 592 00:26:34,270 --> 00:26:36,115 Hoekom is swap gebreek? 593 00:26:36,115 --> 00:26:37,365 [Onhoorbaar] 594 00:26:39,840 --> 00:26:40,460 Presies. 595 00:26:40,460 --> 00:26:43,610 Sodat ons die stoor van 'n kopie, nie die veranderlike self. 596 00:26:43,610 --> 00:26:46,810 Met ander woorde, swap neem blykbaar twee argumente, 'n int. 597 00:26:46,810 --> 00:26:49,370 En dit is arbitrêr a en b genoem. 598 00:26:49,370 --> 00:26:54,430 En hier het ek in X en Y, wat onderskeidelik 1 en 2 geslaag. 599 00:26:54,430 --> 00:26:56,580 Maar ek is nie letterlik wat in x. 600 00:26:56,580 --> 00:26:58,410 Ek letterlik nie verby in y. 601 00:26:58,410 --> 00:27:01,230 Ek verby 'n afskrif van x en 'n afskrif van y. 602 00:27:01,230 --> 00:27:05,180 Dit is soos amper asof jy gekopieer en geplak in ruil die waardes wat 603 00:27:05,180 --> 00:27:07,440 wat jy dit wil hê om werklik te manipuleer. 604 00:27:07,440 --> 00:27:11,970 So as dit die geval is, toe ek die program, begin die uitvoering van 605 00:27:11,970 --> 00:27:14,140 lyn 35, dan is 36 - 606 00:27:14,140 --> 00:27:17,740 wanneer ek by lyn 37, op hierdie punt in die verhaal, wat is die waarde van 'n? 607 00:27:20,740 --> 00:27:24,850 Op hierdie punt in die verhaal, lyn 37, wat is die waarde van 'n op hierdie punt? 608 00:27:24,850 --> 00:27:25,980 So dit moet net 1. 609 00:27:25,980 --> 00:27:26,170 Reg? 610 00:27:26,170 --> 00:27:29,100 Omdat x aangeneem is as die eerste argument. 611 00:27:29,100 --> 00:27:33,150 En hierdie funksie is net arbitrêr roep sy eerste argument, 'n. 612 00:27:33,150 --> 00:27:35,130 Net so is y, die tweede argument. 613 00:27:35,130 --> 00:27:37,930 En dit is arbitrêr bel net die tweede argument b. 614 00:27:37,930 --> 00:27:40,510 >> Nou is hierdie digotomie is redelik eintlik eenvoudig verduidelik. 615 00:27:40,510 --> 00:27:40,880 Dink daaroor. 616 00:27:40,880 --> 00:27:42,980 Nie een van ons het met die persoon wat geskryf het printf. 617 00:27:42,980 --> 00:27:49,880 So seker, hy of sy het geen idee wat ons veranderlikes 30 jaar later gaan 618 00:27:49,880 --> 00:27:50,710 genoem te word nie. 619 00:27:50,710 --> 00:27:55,110 So is daar 'n onderskeid tussen wat jy noem veranderlikes in 620 00:27:55,110 --> 00:27:59,960 funksies wat jy skryf en wat jy noem veranderlikes in die funksies wat jy is 621 00:27:59,960 --> 00:28:01,770 roep of die gebruik van. 622 00:28:01,770 --> 00:28:05,120 So met ander woorde, het ek geskrywe my veranderlikes x en y. 623 00:28:05,120 --> 00:28:08,060 Maar as iemand anders die swap funksie geskryf het, het hy of sy 624 00:28:08,060 --> 00:28:10,480 sal nie weet wat my veranderlikes gaan genoem te word nie. 625 00:28:10,480 --> 00:28:13,850 So besef dat dit is waarom jy het hierdie dualiteit van name. 626 00:28:13,850 --> 00:28:16,800 Tegnies, kan ek dit doen deur toeval. 627 00:28:16,800 --> 00:28:19,750 Maar hulle sal nog nie geslaag word as kopieë. 628 00:28:19,750 --> 00:28:22,940 Dit sou net 'n toeval esteties indien daardie persoon wat geskryf het 629 00:28:22,940 --> 00:28:25,590 swap gebruik het dieselfde name. 630 00:28:25,590 --> 00:28:25,930 >> Alles reg. 631 00:28:25,930 --> 00:28:29,010 Dus, op hierdie punt in die verhaal, lyn 37, 'n is 1. 632 00:28:29,010 --> 00:28:30,410 b 2. 633 00:28:30,410 --> 00:28:32,040 En nou kan ek gaan om dit te ruil. 634 00:28:32,040 --> 00:28:34,730 Wel in die eerste plek, laat my eintlik doen dit baie meer eenvoudig. 635 00:28:34,730 --> 00:28:36,500 Ek weet nie wat hierdie drie reëls van die kode doen. 636 00:28:36,500 --> 00:28:37,370 Laat my net dit doen. 637 00:28:37,370 --> 00:28:38,850 b kry 'n. 638 00:28:38,850 --> 00:28:40,170 'n kry b. 639 00:28:40,170 --> 00:28:41,450 Gedoen het. 640 00:28:41,450 --> 00:28:43,540 Hoekom is hierdie gebroke, logies? 641 00:28:46,980 --> 00:28:48,590 Dit is soort van die intuïtiewe ding, reg? 642 00:28:48,590 --> 00:28:50,640 So word 'n b. 643 00:28:50,640 --> 00:28:52,450 En (b) 'n. 644 00:28:52,450 --> 00:28:55,410 Maar die probleem is dat so gou as line 37 voer, wat is die 645 00:28:55,410 --> 00:28:58,170 waarde van a en b? 646 00:28:58,170 --> 00:28:59,070 Dieselfde, 1. 647 00:28:59,070 --> 00:29:03,460 Want jy het oók deurloop, om so te praat, het jy verander b 'n gelyk. 648 00:29:03,460 --> 00:29:06,000 So een keer lyn 37 uitgevoer word, wat is 'n groot. 649 00:29:06,000 --> 00:29:09,940 Jy het nou twee kopieë van die aantal 1 binnekant van hierdie funksie. 650 00:29:09,940 --> 00:29:14,720 So dan wanneer jy sê in reël 38, 'n kry b, goed, jy is soort van geskroef. 651 00:29:14,720 --> 00:29:17,370 Omdat jy net toeken van 1 tot 1. 652 00:29:17,370 --> 00:29:20,400 Jy het soort van verlore die waarde wat jy omgegee. 653 00:29:20,400 --> 00:29:22,910 >> So in die oorspronklike weergawe van hierdie, let op wat ek gedoen het. 654 00:29:22,910 --> 00:29:26,620 Ek plaas het 1/3 lyn van kode wat lyk soos hierdie. 655 00:29:26,620 --> 00:29:29,910 Ek verklaar 'n tydelike veranderlike - tmp is 'n baie algemene naam 656 00:29:29,910 --> 00:29:31,240 vir 'n tydelike veranderlike. 657 00:29:31,240 --> 00:29:34,280 Dit is 'n int, want dit het te pas wat ek wil hê om 'n kopie te maak van. 658 00:29:34,280 --> 00:29:39,720 Ek slaan 'n afskrif van 'n binnekant van die tmp. So een keer lyn 37 uitgevoer word, 659 00:29:39,720 --> 00:29:41,390 die waarde van 'n - 660 00:29:41,390 --> 00:29:42,970 vinnige sanity check - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Die waarde van b 2. 663 00:29:45,780 --> 00:29:48,470 En die waarde van tmp is ook 1. 664 00:29:48,470 --> 00:29:51,470 So nou is ek voer lyn 38. 665 00:29:51,470 --> 00:29:57,180 So een keer lyn 38 voer, neem die waarde van b. 666 00:29:57,180 --> 00:29:58,510 En b was 2. 667 00:29:58,510 --> 00:30:00,500 So 'n is nou 2. 668 00:30:00,500 --> 00:30:03,110 So op hierdie punt in die verhaal, 'n 2, b 2, 669 00:30:03,110 --> 00:30:05,130 en tmp is 1. 670 00:30:05,130 --> 00:30:09,330 So nou logies, ons kan net plop tmp se waarde in b. 671 00:30:09,330 --> 00:30:10,690 En ons klaar is. 672 00:30:10,690 --> 00:30:12,170 >> Dus het ons dat die probleem opgelos. 673 00:30:12,170 --> 00:30:16,040 Ongelukkig is wanneer ek hardloop hierdie program in hierdie vorm, beteken dit nie eintlik ruil 674 00:30:16,040 --> 00:30:17,700 enige waardes. 675 00:30:17,700 --> 00:30:18,950 Maar duidelik te wees, hoekom? 676 00:30:23,420 --> 00:30:26,310 Ek vaste die logiese probleem van net 'n oomblik gelede. 677 00:30:26,310 --> 00:30:31,150 Maar weereens, as ek hierdie program, x en y bly onveranderd deur die einde van 678 00:30:31,150 --> 00:30:33,834 die program se uitvoering. 679 00:30:33,834 --> 00:30:34,760 [Onhoorbaar] 680 00:30:34,760 --> 00:30:36,030 David J. Malan: Dus het ons nie teruggestuur nie. 681 00:30:36,030 --> 00:30:36,960 So dis waar. 682 00:30:36,960 --> 00:30:39,880 Maar dit blyk daar is 'n bietjie van 'n probleem hier, want tot dusver, 683 00:30:39,880 --> 00:30:42,460 enigste ding wat ons het in staat was om terug te keer is een ding. 684 00:30:42,460 --> 00:30:46,540 En dit is 'n beperking van C. Jy kan eintlik net een waarde terugkeer, 685 00:30:46,540 --> 00:30:48,970 in welke geval, ek is soort van vas hier 686 00:30:48,970 --> 00:30:51,805 want ek kon die nuwe waarde van x terug of ek kon die standaard van die 687 00:30:51,805 --> 00:30:53,160 nuwe waarde van y. 688 00:30:53,160 --> 00:30:54,330 Maar ek wil beide terug. 689 00:30:54,330 --> 00:30:58,010 So die terugkeer van die eenvoudige oplossing is nie hier nie. 690 00:30:58,010 --> 00:30:59,770 Maar die probleem is fundamenteel hoekom? 691 00:30:59,770 --> 00:31:03,270 Wat ons eintlik verruil? 692 00:31:03,270 --> 00:31:04,010 a en b. 693 00:31:04,010 --> 00:31:07,670 Maar a en b is afskrifte van x en y, wat beteken dat ons net het al hierdie 694 00:31:07,670 --> 00:31:10,080 werk - ons het net spandeer soos drie minute praat oor die ruillêer 695 00:31:10,080 --> 00:31:11,680 funksie en al drie van hierdie veranderlikes. 696 00:31:11,680 --> 00:31:15,090 En dit is 'n groot, heeltemal korrek in isolasie nie. 697 00:31:15,090 --> 00:31:20,230 Maar 'n en B se omvang is slegs in hierdie lyne hier. 698 00:31:20,230 --> 00:31:24,130 Dus, net soos 'n lus as jy verklaar dat 'n heelgetal i binne die vir 699 00:31:24,130 --> 00:31:27,400 lus - Net so, as jy verklaar dat a en b binnekant van 'n funksie wat 700 00:31:27,400 --> 00:31:30,550 wat jy geskryf het, hulle is slegs geldig binnekant van daardie funksie. 701 00:31:30,550 --> 00:31:35,020 Wat beteken dat sodra swap gedoen uitvoering en ons gaan van lyn 24 tot 702 00:31:35,020 --> 00:31:38,380 lyn 25, x en y het glad nie verander nie. 703 00:31:38,380 --> 00:31:42,580 Jy moet net 'n hele klomp van die tyd uitruiling afskrifte van veranderlikes gemors. 704 00:31:42,580 --> 00:31:46,490 >> So dit blyk dat die oplossing vir hierdie werklik is nie-voor-die-handliggende. 705 00:31:46,490 --> 00:31:49,210 Dit is nie heeltemal genoeg waardes om terug te keer, want ons kan 706 00:31:49,210 --> 00:31:50,320 slegs een waarde terug. 707 00:31:50,320 --> 00:31:53,370 En ek het regtig nie wil beide x en y op dieselfde tyd te ruil. 708 00:31:53,370 --> 00:31:55,020 So ons gaan om terug te kom na hierdie. 709 00:31:55,020 --> 00:31:58,770 Maar vir nou, besef dat die kwessie fundamenteel spruit uit die feit 710 00:31:58,770 --> 00:32:00,660 dat a en b is kopieë. 711 00:32:00,660 --> 00:32:03,450 En hulle is in hul eie omvang. 712 00:32:03,450 --> 00:32:04,980 Wel, laat ons probeer om dit in die een of ander manier op te los. 713 00:32:04,980 --> 00:32:09,200 Laat my eintlik blaai terug hier en oop te stel, laat ons sê, 1/4 variant 714 00:32:09,200 --> 00:32:11,170 van hierdie, buggy4. 715 00:32:11,170 --> 00:32:13,230 En wat van hierdie? 716 00:32:13,230 --> 00:32:16,690 Dit is 'n soortgelyke, maar eenvoudiger probleem op te kyk voordat ons 'n steek op 717 00:32:16,690 --> 00:32:17,530 om dit op te los. 718 00:32:17,530 --> 00:32:19,440 Hierdie program word genoem inkrement. 719 00:32:19,440 --> 00:32:24,320 En dit initialisatie blykbaar 'n x heelgetal 1 in reël 18. 720 00:32:24,320 --> 00:32:25,950 Ek het toe beweer x 1. 721 00:32:25,950 --> 00:32:28,020 Ek dan eis verhoog van, dot, dot, dot. 722 00:32:28,020 --> 00:32:29,460 Dan bel ek inkrement. 723 00:32:29,460 --> 00:32:33,480 Maar dan in reëls 22 en 23, het ek beweer dit is geïnkrementeer. 724 00:32:33,480 --> 00:32:37,780 Ek beweer x is nou wat dit ookal is, 2 vermoedelik. 725 00:32:37,780 --> 00:32:39,770 >> Maar hierdie program is buggy. 726 00:32:39,770 --> 00:32:41,020 Wat is die probleem? 727 00:32:43,450 --> 00:32:44,418 Ja? 728 00:32:44,418 --> 00:32:45,668 [Onhoorbaar] 729 00:32:49,260 --> 00:32:49,850 David J. Malan: Presies. 730 00:32:49,850 --> 00:32:52,430 So x is natuurlik verklaar on line 18. 731 00:32:52,430 --> 00:32:54,410 Dit is binne die hoof se krullerige draadjies. 732 00:32:54,410 --> 00:32:58,470 So het die eenvoudige antwoord hier is dat, wel, x hier bestaan. 733 00:32:58,470 --> 00:33:01,510 Dit bestaan ​​nie in lyn 32. 734 00:33:01,510 --> 00:33:03,710 So sal hierdie program eintlik nie eens stel. 735 00:33:03,710 --> 00:33:07,910 Die samesteller, wanneer ek probeer om die opstel van hierdie kode, gaan om te skreeu op my 736 00:33:07,910 --> 00:33:13,190 oor 'n paar onverklaarde identifiseerder of iets te dien effekte. 737 00:33:13,190 --> 00:33:13,870 Om die waarheid te sê, laat ons probeer. 738 00:33:13,870 --> 00:33:15,235 Dit is om buggy4. 739 00:33:17,780 --> 00:33:18,190 Daar is dit. 740 00:33:18,190 --> 00:33:22,030 Gebruik van 'n onverklaarde identifiseerder x in reël 32. 741 00:33:22,030 --> 00:33:25,700 En eintlik, laat ons meer eksplisiet hier vandag, sodat dit is nuttig in die 742 00:33:25,700 --> 00:33:27,140 kantoorure en by die huis. 743 00:33:27,140 --> 00:33:29,000 Let daarop dat dit 'n bietjie kripties geskryf. 744 00:33:29,000 --> 00:33:31,560 Maar die feit dat die geratel het het op ons geskree en gesê: 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, is werklik nuttig. 746 00:33:36,970 --> 00:33:41,970 Dit beteken dat die fout is on line 32 by karakter posisie vyf. 747 00:33:41,970 --> 00:33:44,670 So een, twee, drie, vier, vyf. 748 00:33:44,670 --> 00:33:46,640 Dit is, in werklikheid, waar die probleem is. 749 00:33:46,640 --> 00:33:49,710 En ook in gedagte te hou by die kantoorure en by die huis, ek is gelukkig hier. 750 00:33:49,710 --> 00:33:50,740 Ek het 'n fout. 751 00:33:50,740 --> 00:33:52,660 Dit gaan wees relatief maklik om vas te stel. 752 00:33:52,660 --> 00:33:56,220 Maar as jy 'n hele skerm vol van oorweldigende fout boodskappe, weer, 753 00:33:56,220 --> 00:33:59,240 besef dat die onderste een kan wees net simptomaties van 754 00:33:59,240 --> 00:34:00,320 die boonste. 755 00:34:00,320 --> 00:34:03,560 Altyd so jaag jou foute neer van bo na onder. 756 00:34:03,560 --> 00:34:06,720 Omdat daar dalk net 'n daisy-ketting effek wat daarop dui jy 757 00:34:06,720 --> 00:34:09,030 het 'n manier om meer probleme as wat jy werklik doen. 758 00:34:09,030 --> 00:34:14,989 >> So, hoe kan ons dit regmaak as my doel is om X te inkrementeer? 759 00:34:14,989 --> 00:34:15,370 Wat is dit? 760 00:34:15,370 --> 00:34:15,620 Okay. 761 00:34:15,620 --> 00:34:16,679 Sodat ons kan x globale. 762 00:34:16,679 --> 00:34:18,860 Kom ons neem die kortpad dat ek gewaarsku oor vroeër. 763 00:34:18,860 --> 00:34:20,550 Maar Heck, ons moet net 'n quick fix. 764 00:34:20,550 --> 00:34:23,949 So laat ons net sê int x hier. 765 00:34:23,949 --> 00:34:25,600 Dit maak x wêreld. 766 00:34:25,600 --> 00:34:28,460 So nou hoof het toegang tot dit. 767 00:34:28,460 --> 00:34:31,780 En inkrement het toegang tot dit. 768 00:34:31,780 --> 00:34:33,860 En laat my daarom voort te gaan en stel dit nou. 769 00:34:33,860 --> 00:34:36,330 Maak buggy4 Enter. 770 00:34:36,330 --> 00:34:37,440 Lyk nou te stel. 771 00:34:37,440 --> 00:34:40,949 Kom ons loop buggy4, en dit lyk eintlik werk. 772 00:34:40,949 --> 00:34:42,780 Dit is nou een van hierdie dinge - 773 00:34:42,780 --> 00:34:45,870 doen soos ek sê, nie soos ek doen, as ek net hier gedoen word. 774 00:34:45,870 --> 00:34:49,239 Want in die algemeen, word ons programme gaan kry veel meer interessant en 775 00:34:49,239 --> 00:34:50,440 veel langer as dit. 776 00:34:50,440 --> 00:34:53,199 En as jou oplossing vir die lewe se probleme is net ah, het al die 777 00:34:53,199 --> 00:34:57,550 veranderlikes op die top van jou lêer, baie vinnig doen programme kry 778 00:34:57,550 --> 00:34:59,700 horrifically moeilik om te beheer. 779 00:34:59,700 --> 00:35:02,050 Dit word moeiliker om te dink nuwe veranderlike name. 780 00:35:02,050 --> 00:35:05,240 Dit raak moeiliker om te verstaan ​​wat veranderlike doen. 781 00:35:05,240 --> 00:35:08,250 >> En so in die algemeen, is dit nie 'n goeie oplossing. 782 00:35:08,250 --> 00:35:09,780 So laat ons dit beter doen. 783 00:35:09,780 --> 00:35:11,920 Ons wil nie 'n globale veranderlike hier te gebruik. 784 00:35:11,920 --> 00:35:14,050 Ek wil X te inkrementeer. 785 00:35:14,050 --> 00:35:16,050 Sodat ek kan natuurlik - 786 00:35:16,050 --> 00:35:18,450 aan die einde van die dag, dit is soort van 'n lawwe storie omdat ons net dit doen. 787 00:35:18,450 --> 00:35:22,050 Maar as ek nie weet dat operateur, of ek was nie toegelaat om te 788 00:35:22,050 --> 00:35:27,700 verander dit in die belangrikste self, kan hoe anders ek implementeer Ken hier, dit 789 00:35:27,700 --> 00:35:31,450 tyd nie kubus maar inkrementeer? 790 00:35:31,450 --> 00:35:32,700 Hoe verander ek hierdie ding hier? 791 00:35:32,700 --> 00:35:33,025 Ja. 792 00:35:33,025 --> 00:35:34,275 [Onhoorbaar] 793 00:35:37,430 --> 00:35:38,000 David J. Malan: Goed. 794 00:35:38,000 --> 00:35:40,490 So hoekom ek nie slaag nie in x? 795 00:35:40,490 --> 00:35:44,390 En dan eerder as om dit terug, hoekom doen ek net doen terugkeer x + 1? 796 00:35:44,390 --> 00:35:46,370 Nou, 'n paar dinge hier te verander nie. 797 00:35:46,370 --> 00:35:47,530 Ek is op die regte pad. 798 00:35:47,530 --> 00:35:48,910 Wat anders het ek nodig om Tweak? 799 00:35:48,910 --> 00:35:49,470 Iemand anders. 800 00:35:49,470 --> 00:35:49,882 Ja? 801 00:35:49,882 --> 00:35:51,530 [Onhoorbaar] 802 00:35:51,530 --> 00:35:53,520 David J. Malan: Ek moet die opbrengs tipe van inkrement te verander 803 00:35:53,520 --> 00:35:54,590 want dit is nie nietig. 804 00:35:54,590 --> 00:35:56,650 Void beteken niks teruggestuur word. 805 00:35:56,650 --> 00:35:57,600 Maar dit is duidelik, nou is dit. 806 00:35:57,600 --> 00:36:01,280 So hierdie behoeftes te verander na int om konsekwent te wees met alles wat 807 00:36:01,280 --> 00:36:02,580 Ek is eintlik terugkeer. 808 00:36:02,580 --> 00:36:04,580 >> Nou iets anders is nog steeds karretjie hier. 809 00:36:04,580 --> 00:36:04,982 Ja? 810 00:36:04,982 --> 00:36:06,590 [Onhoorbaar] 811 00:36:06,590 --> 00:36:07,630 David J. Malan: So ek moet X te inkrementeer? 812 00:36:07,630 --> 00:36:10,336 [Onhoorbaar] 813 00:36:10,336 --> 00:36:11,880 David J. Malan: Ag, so ek nodig het om x te slaag. 814 00:36:11,880 --> 00:36:13,300 So ek het dit nodig om hier te doen. 815 00:36:17,590 --> 00:36:19,690 So het die prototipe, ek het om dit te verander hier. 816 00:36:19,690 --> 00:36:21,290 So, dit het na 'n int. 817 00:36:21,290 --> 00:36:22,820 Dit het te word - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 Ek het eintlik 'n fout hier neer. 820 00:36:24,710 --> 00:36:25,780 Kom ons los hierdie een eerste. 821 00:36:25,780 --> 00:36:27,990 Wat dit eintlik moet wees? 822 00:36:27,990 --> 00:36:29,330 So dit het tot 'n int iets te wees. 823 00:36:29,330 --> 00:36:30,340 Dit kan wees x. 824 00:36:30,340 --> 00:36:33,120 Maar eerlik, as jy begin roep al van jou veranderlikes x, dit gaan te kry 825 00:36:33,120 --> 00:36:35,250 minder en minder duidelik wat is wat. 826 00:36:35,250 --> 00:36:38,210 So laat ons net na willekeur kies 'n ander Naming Convention vir my 827 00:36:38,210 --> 00:36:40,220 helper funksies, die funksies wat ek skryf. 828 00:36:40,220 --> 00:36:41,100 Ons noem dit 'n. 829 00:36:41,100 --> 00:36:44,500 Of ons kan dit noem - kom ons noem dit even_number te wees, selfs meer eksplisiet. 830 00:36:44,500 --> 00:36:47,610 So dan het ek om terug te keer, ongeag die aantal plus 1. 831 00:36:47,610 --> 00:36:49,720 En nou het ek 'n ander ding om te verander hier en een 832 00:36:49,720 --> 00:36:50,700 ander ding hier. 833 00:36:50,700 --> 00:36:54,150 Wat moet ek eerste on line 21 te verander? 834 00:36:54,150 --> 00:36:55,390 Ek het dit toe te ken aan x. 835 00:36:55,390 --> 00:36:57,480 So ek kan net nie noem inkrement x. 836 00:36:57,480 --> 00:37:01,000 Ek nodig het om te onthou van die antwoord deur die verandering van die waarde van x 837 00:37:01,000 --> 00:37:02,020 die linkerkant. 838 00:37:02,020 --> 00:37:04,930 En selfs al is x is nou op die links en regs, dit is heeltemal fyn, omdat 839 00:37:04,930 --> 00:37:08,370 die regterkant kry eerste uitgevoer, dan kry plons in die linkerkant 840 00:37:08,370 --> 00:37:10,240 hand ding, x in hierdie geval. 841 00:37:10,240 --> 00:37:11,900 En dan laastens, dit is 'n maklike fix nou. 842 00:37:11,900 --> 00:37:15,080 Dit moet net ooreenstem met wat hieronder neer. 843 00:37:15,080 --> 00:37:17,120 Int. 844 00:37:17,120 --> 00:37:17,320 >> Alles reg. 845 00:37:17,320 --> 00:37:20,290 So 'n hele klomp van veranderinge vir 'n baie dom funksie. 846 00:37:20,290 --> 00:37:24,250 Maar verteenwoordiger van die dinge wat ons toenemend sal wil doen. 847 00:37:24,250 --> 00:37:25,490 So maak buggy4. 848 00:37:25,490 --> 00:37:26,485 Ek het screwed up iewers. 849 00:37:26,485 --> 00:37:27,520 Oh my God. 850 00:37:27,520 --> 00:37:29,660 Vyf foute in, soos, 'n ses-line program. 851 00:37:29,660 --> 00:37:36,500 So, wat is verkeerd on line 18, karakter 5? 852 00:37:36,500 --> 00:37:36,970 Alles reg. 853 00:37:36,970 --> 00:37:39,330 So ek het hierdie int te verklaar. 854 00:37:39,330 --> 00:37:39,630 Alles reg. 855 00:37:39,630 --> 00:37:41,790 So laat ons sien, 'n hele klomp van die ander foute. 856 00:37:41,790 --> 00:37:42,230 Oh my god. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Maar weereens, laat ons net duidelik die skerm - 859 00:37:46,020 --> 00:37:48,660 Beheer L hier - en re-run kletteren. 860 00:37:48,660 --> 00:37:51,340 So vyf probleme is eintlik net dat 'n mens. 861 00:37:51,340 --> 00:37:53,500 So nou laat ons hardloop buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Sjoe. 863 00:37:54,150 --> 00:37:57,434 x korrek geïnkrementeer. 864 00:37:57,434 --> 00:37:58,420 >> Alles reg. 865 00:37:58,420 --> 00:38:01,700 Enige vrae oor hoe om getalle te inkrementeer? 866 00:38:01,700 --> 00:38:02,896 Ja? 867 00:38:02,896 --> 00:38:06,864 Spreker 2: Waarom is dit dat jy net kan verander x na die nommer in die veranderlike 868 00:38:06,864 --> 00:38:08,860 noem en dit sal weet wat jy bedoel? 869 00:38:08,860 --> 00:38:09,600 David J. Malan: Goeie vraag. 870 00:38:09,600 --> 00:38:13,130 Hoe is dit dat ek net kan verander x aantal en die program sal weet 871 00:38:13,130 --> 00:38:13,990 onmiddellik? 872 00:38:13,990 --> 00:38:16,120 Dit weer doen, dink aan dit as hierdie abstraksie. 873 00:38:16,120 --> 00:38:20,110 So as ek die hoof-en Ken is inkrementele, eerlik, ek gee nie om nie 874 00:38:20,110 --> 00:38:21,540 wat Ken roep sy iPad. 875 00:38:21,540 --> 00:38:25,350 Ek gee nie om wat hy noem enigiets wat te doen het met sy implementering 876 00:38:25,350 --> 00:38:26,550 van hierdie funksionaliteit. 877 00:38:26,550 --> 00:38:32,130 So, dit is 'n implementering detail dat ek, hoof, doen nie 878 00:38:32,130 --> 00:38:33,010 hul te bekommer oor. 879 00:38:33,010 --> 00:38:37,440 En so eenvoudig om dit te verander konsekwent binnekant van die funksie, nommer hier 880 00:38:37,440 --> 00:38:41,340 en nommer hier, is al wat dit neem so lank as wat ek heropstel. 881 00:38:41,340 --> 00:38:43,820 Dit is soort van soos as jy daaroor dink - baie van ons, die van julle met die bestuurder se 882 00:38:43,820 --> 00:38:46,590 lisensies wat gedryf het, of as jy het selfs in 'n motor gedryf - 883 00:38:46,590 --> 00:38:50,710 Die meeste van ons het geen idee hoe 'n motor werk onder die kap. 884 00:38:50,710 --> 00:38:54,710 En letterlik, as jy maak die kap, die meeste van ons - myself ingesluit - 885 00:38:54,710 --> 00:38:56,580 gaan nie regtig weet wat ons is op soek na. 886 00:38:56,580 --> 00:38:58,850 Soort van soos jy kan nou met dinge soos dit reg voel. 887 00:38:58,850 --> 00:39:01,380 Maar ons het nie regtig omgee hoe die motor werk. 888 00:39:01,380 --> 00:39:05,000 Ons hoef nie te sorg wat al die latte en suiers en kabels binnekant van 889 00:39:05,000 --> 00:39:07,700 die motor is eintlik doen. 890 00:39:07,700 --> 00:39:11,360 >> So iets soos wat jy noem die suier maak nie saak 891 00:39:11,360 --> 00:39:11,920 hier in hierdie geval. 892 00:39:11,920 --> 00:39:12,490 Dieselfde idee. 893 00:39:12,490 --> 00:39:12,670 Ja? 894 00:39:12,670 --> 00:39:13,920 [Onhoorbaar] 895 00:39:25,250 --> 00:39:29,530 David J. Malan: As daar meer gebruike van die veranderlike xa oomblik gelede, 896 00:39:29,530 --> 00:39:32,220 jou, die programmeerder, sou hê om hulle oral te verander. 897 00:39:32,220 --> 00:39:35,230 Of jy kan letterlik doen Lêer, Menu, en dan Soek / vervang, 898 00:39:35,230 --> 00:39:36,270 iets soos dit. 899 00:39:36,270 --> 00:39:40,110 Maar jy gaan te hê om die veranderinge self te maak. 900 00:39:40,110 --> 00:39:41,200 Jy het om konsekwent te wees. 901 00:39:41,200 --> 00:39:42,450 [Onhoorbaar] 902 00:39:47,200 --> 00:39:48,960 David J. Malan: 'n spesifieke volgorde soos hier? 903 00:39:48,960 --> 00:39:52,660 As dit was 'int 'n ander getal? 904 00:39:52,660 --> 00:39:52,940 Ja. 905 00:39:52,940 --> 00:39:56,430 So om sake wanneer jy bel die funksie. 906 00:39:56,430 --> 00:40:00,350 So as ek roep inkrement hier met iets komma iets, 907 00:40:00,350 --> 00:40:01,400 daar is 'n direkte kartering. 908 00:40:01,400 --> 00:40:04,490 Die eerste veranderlike, wat dit ookal genoem word, is 'n afskrif van die eerste 909 00:40:04,490 --> 00:40:05,480 argument hier. 910 00:40:05,480 --> 00:40:07,280 Jammer, moet dit nie 'n hakie. 911 00:40:07,280 --> 00:40:09,300 Die tweede argument in lyn met die tweede een. 912 00:40:09,300 --> 00:40:11,220 >> So orde, ja, sake. 913 00:40:11,220 --> 00:40:11,490 Alles reg. 914 00:40:11,490 --> 00:40:13,360 Jammer ek het 'n lang pad om daar te kom. 915 00:40:13,360 --> 00:40:14,610 Ander vrae? 916 00:40:16,460 --> 00:40:16,850 Alles reg. 917 00:40:16,850 --> 00:40:20,300 So laat ons kyk of ons kan nie 'n prentjie van wat eintlik gaan verf 918 00:40:20,300 --> 00:40:22,160 hier onder die kap, om so te praat nie. 919 00:40:22,160 --> 00:40:26,310 So, dit is 'n reghoek wat kan verteenwoordig jou rekenaar se geheue. 920 00:40:26,310 --> 00:40:31,240 Dus selfs as jy het geen idee hoe geheue werk of hoe 'RAM werke, ten minste 921 00:40:31,240 --> 00:40:33,590 aanvaar dat jy trosse van hierdie dae. 922 00:40:33,590 --> 00:40:34,740 Jy het megagrepe van dit. 923 00:40:34,740 --> 00:40:35,760 Jy het gigagrepe van dit. 924 00:40:35,760 --> 00:40:40,690 En ons weet van week nul dat 'n greep is net wat? 925 00:40:40,690 --> 00:40:41,280 8 bisse. 926 00:40:41,280 --> 00:40:42,730 Reg, so 8 nulle en ene. 927 00:40:42,730 --> 00:40:46,300 So as jou rekenaar het 'n gig van RAM, twee gigs RAM hierdie dae, jy het 'n 928 00:40:46,300 --> 00:40:54,450 miljard of 2 miljard grepe van die geheue, of ongeveer 8 miljard of 16 miljard 929 00:40:54,450 --> 00:40:56,560 stukkies, binnekant van jou rekenaar. 930 00:40:56,560 --> 00:40:59,710 Nou in teenstelling met die klein Wollerige Willy voorbeeld, dit is nie magnetiese deeltjies 931 00:40:59,710 --> 00:41:00,560 tipies nie. 932 00:41:00,560 --> 00:41:04,470 Toenemend in skootrekenaars ten minste, dit is solid state drives, SSDs, wat 933 00:41:04,470 --> 00:41:05,560 net geen bewegende dele. 934 00:41:05,560 --> 00:41:06,710 Dit is al die elektroniese. 935 00:41:06,710 --> 00:41:08,070 Dit is alle elektrisiteit gebaseer. 936 00:41:08,070 --> 00:41:12,360 Dink so, al is, as net die een of twee van hierdie reghoek 937 00:41:12,360 --> 00:41:13,930 GB geheue wat jy het. 938 00:41:13,930 --> 00:41:15,500 >> So dit is 'n stuk van die geheue. 939 00:41:15,500 --> 00:41:20,460 Nou is die wêreld van die rekenaar wetenskap het 'n soort van afgeskort stukke van 940 00:41:20,460 --> 00:41:22,570 geheue om verskillende dinge te doen. 941 00:41:22,570 --> 00:41:25,930 So byvoorbeeld, indien dit jou rekenaar se RAM - soos voorgestel deur die 942 00:41:25,930 --> 00:41:30,400 reghoek daar - blyk dat deur die konvensie, op die top van jou geheue, sodat 943 00:41:30,400 --> 00:41:33,170 om te praat, is oor die algemeen wat genoem word 'n teks segment. 944 00:41:33,170 --> 00:41:35,910 Dit is die nulle en ene wat jy opgestel het. 945 00:41:35,910 --> 00:41:39,040 So wanneer ons kyk onder die kap het teen watter a.out is, alle 946 00:41:39,040 --> 00:41:40,360 die nulle en ene - 947 00:41:40,360 --> 00:41:44,000 wanneer jy 'n program, daardie nulle en ene van jou harde gelaai 948 00:41:44,000 --> 00:41:46,290 Ry in iets genaamd RAM. 949 00:41:46,290 --> 00:41:48,950 En in die geheue, is hulle aan die bokant. 950 00:41:48,950 --> 00:41:50,330 Nou intussen, jy het ander dinge. 951 00:41:50,330 --> 00:41:53,060 Geïnisialiseer data, geïnitialiseerd data. 952 00:41:53,060 --> 00:41:56,440 Daardie twee spuitbane van die geheue verwys na globale veranderlikes, wat 953 00:41:56,440 --> 00:41:57,530 jy nie dikwels gebruik. 954 00:41:57,530 --> 00:42:00,630 Maar soms as jy dit doen, het hulle uiteindelik daar as well. 955 00:42:00,630 --> 00:42:01,620 Dan is daar is 'n paar ander dinge. 956 00:42:01,620 --> 00:42:04,130 Omgewing veranderlikes, wat ons sal nie veel tyd spandeer op. 957 00:42:04,130 --> 00:42:06,120 Maar dan twee belangrike dinge wat sal kom dwarsdeur hierdie 958 00:42:06,120 --> 00:42:08,130 semester, stapel en hoop. 959 00:42:08,130 --> 00:42:12,280 >> So die meeste van jou rekenaar se geheue gereserveer is wanneer die bestuur van 'n program vir 960 00:42:12,280 --> 00:42:14,880 iets genoem die stapel en iets genaamd die hoop. 961 00:42:14,880 --> 00:42:16,940 En ons is nie van plan om te praat oor die hoop van vandag, maar ons sal 962 00:42:16,940 --> 00:42:18,180 praat oor die stapel. 963 00:42:18,180 --> 00:42:22,910 En die stapel is bedoel om te besweer die visuele soos die eetsaal 964 00:42:22,910 --> 00:42:26,120 maaltyd bak in Mather House, of waar jy ook word, waar die 965 00:42:26,120 --> 00:42:27,810 eetsaal personeel skoon hulle elke dag. 966 00:42:27,810 --> 00:42:30,180 Hulle stapel hulle van die vloer op die up. 967 00:42:30,180 --> 00:42:33,800 En insgelyks in die geheue, daar is hierdie idee van om iets op 'n 968 00:42:33,800 --> 00:42:36,740 stapel, om iets op 'n stapel, om iets op 'n stapel. 969 00:42:36,740 --> 00:42:38,000 En wat bedoel ons met hierdie? 970 00:42:38,000 --> 00:42:41,430 Wel, laat ons zoom in op net die onderste helfte van hierdie foto, jou rekenaar 971 00:42:41,430 --> 00:42:43,990 RAM, om die volgende voor te stel. 972 00:42:43,990 --> 00:42:48,300 Dit blyk dat wanneer jy 'n program soos a.out of hello, wat ookal 973 00:42:48,300 --> 00:42:49,920 die program is wat jy geskryf het, 974 00:42:49,920 --> 00:42:53,030 weer, is daardie nulle en ene van jou hardeskyf gelaai - wat is 975 00:42:53,030 --> 00:42:56,190 langtermyn stoor, bly daar selfs wanneer jy trek die plug - 976 00:42:56,190 --> 00:42:57,220 in RAM gelaai. 977 00:42:57,220 --> 00:42:59,020 RAM is vinniger as hardeskywe. 978 00:42:59,020 --> 00:43:00,700 Dit is kleiner as hardeskywe. 979 00:43:00,700 --> 00:43:03,490 Maar dit is waar programme leef terwyl jy hardloop hulle. 980 00:43:03,490 --> 00:43:06,380 >> So jy dubbel kliek op 'n program op 'n Mac of 'n rekenaar - dit is gelaai uit 981 00:43:06,380 --> 00:43:07,750 hard drive in RAM. 982 00:43:07,750 --> 00:43:11,760 So gou as wat dit in RAM gelaai, die nulle en ene gaan by die top, die 983 00:43:11,760 --> 00:43:13,130 sogenaamde teks segment. 984 00:43:13,130 --> 00:43:17,040 Maar dan so gou as jou program eintlik begin hardloop, die belangrikste 985 00:43:17,040 --> 00:43:18,140 funksie geroep word. 986 00:43:18,140 --> 00:43:21,070 En die belangrikste, soos ons gesien het, het dikwels plaaslike veranderlikes. 987 00:43:21,070 --> 00:43:24,560 En dit het ints en stringe en karakters en dies meer. 988 00:43:24,560 --> 00:43:28,300 So as jou program wat jy geskryf het of die program wat jy het 989 00:43:28,300 --> 00:43:33,680 dubbel gekliek gebruik om 'n paar veranderlikes binnekant van die belangrikste, het hulle uiteindelik by die 990 00:43:33,680 --> 00:43:37,020 onderkant van jou stapel van die geheue, om so te praat. 991 00:43:37,020 --> 00:43:39,160 Nou meer konkreet, wat beteken dit eintlik beteken? 992 00:43:39,160 --> 00:43:44,080 Dit beteken net dat as ons op pad was om die dinge te tel - 993 00:43:44,080 --> 00:43:49,380 as ons gaan aantal grepe RAM op jou rekenaar, sien dat 994 00:43:49,380 --> 00:43:51,650 dit kan byte getal nul wees. 995 00:43:51,650 --> 00:43:56,130 Dit kan byte nommer een, twee, drie, vier, vyf, ses, almal 996 00:43:56,130 --> 00:43:57,290 die pad te hou - 997 00:43:57,290 --> 00:44:01,520 2 miljard al die pad tot daar aan die bokant. 998 00:44:01,520 --> 00:44:05,960 So met ander woorde, wanneer ons praat oor RAM of geheue in terme van grepe, is dit 999 00:44:05,960 --> 00:44:09,680 beteken net dat iemand het besluit wat elkeen van tel 1000 00:44:09,680 --> 00:44:11,110 daardie stukke van die geheue. 1001 00:44:11,110 --> 00:44:16,950 >> So wanneer jy nodig het om 32 stukkies vir 'n int, of wat jy nodig het 8 stukkies vir 'n kar, waar 1002 00:44:16,950 --> 00:44:18,320 eindig hulle in die geheue? 1003 00:44:18,320 --> 00:44:20,650 Wel, konseptueel, het hulle net beland op die onderkant van die 1004 00:44:20,650 --> 00:44:21,780 ding genaamd die stapel. 1005 00:44:21,780 --> 00:44:25,670 Maar wat is interessant nou is wanneer belangrikste noem 'n funksie. 1006 00:44:25,670 --> 00:44:28,830 Gestel 'n funksie genoem foo, net 'n arbitrêre naam. 1007 00:44:28,830 --> 00:44:32,480 Wat gebeur belangrikste is, is aan die onderkant van die stapel geheue. 1008 00:44:32,480 --> 00:44:35,630 Foo nou op die top van die belangrikste in die geheue. 1009 00:44:35,630 --> 00:44:40,020 So 'n plaaslike veranderlikes wat foo het uiteindelik soort van konseptueel bo 1010 00:44:40,020 --> 00:44:40,770 dié in die hoof. 1011 00:44:40,770 --> 00:44:46,920 As foo noem nog 'n funksie genoem bar, daardie veranderlikes hier beland. 1012 00:44:46,920 --> 00:44:49,790 As die bar iets anders, hier, hier, hier noem. 1013 00:44:49,790 --> 00:44:53,900 So, wat is interessant oor die uitvoer van 'n program is dat as jy 'n beroep funksies, 1014 00:44:53,900 --> 00:44:57,720 en as daardie funksies noem funksies, en as die funksies noem funksies, 1015 00:44:57,720 --> 00:45:00,980 jy die opbou van hierdie stapel van funksies in die geheue. 1016 00:45:00,980 --> 00:45:06,740 En slegs een keer 'n funksie opbrengste begin jy om daardie geheue terug. 1017 00:45:06,740 --> 00:45:11,190 So een van die maklikste maniere om uit te voer van die geheue in 'n rekenaar program is om 1018 00:45:11,190 --> 00:45:14,170 Skryf funksies wat nooit weer terugkom nie. 1019 00:45:14,170 --> 00:45:16,650 >> So byvoorbeeld, laat soveel demonstreer met 'n 1020 00:45:16,650 --> 00:45:18,460 opsetlik buggy program. 1021 00:45:18,460 --> 00:45:24,690 Laat my gaan voort en sluit # , int main (void). 1022 00:45:24,690 --> 00:45:31,270 En ek gaan om dit te doen, terwyl (2> 1), wat sal waarskynlik nooit 1023 00:45:31,270 --> 00:45:33,370 verander ons. 1024 00:45:33,370 --> 00:45:37,720 En laat my nou voort te gaan en doen printf. 1025 00:45:37,720 --> 00:45:39,950 Eintlik, wat gaan minder visueel interessante. 1026 00:45:39,950 --> 00:45:40,460 Kom ons doen dit. 1027 00:45:40,460 --> 00:45:44,840 Na int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Kom ons maak hierdie fout, i + +. 1029 00:45:49,740 --> 00:45:51,150 En laat ons nie printf hier. 1030 00:45:51,150 --> 00:45:52,550 Kom ons oefen wat ek preek. 1031 00:45:52,550 --> 00:45:54,090 Let's het 'n metode hier. 1032 00:45:54,090 --> 00:46:00,860 Void koor, en ons sal Int ek sê. 1033 00:46:00,860 --> 00:46:02,295 En dan gaan ek om te sê, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, kom ons maak dit meer interessant. 1035 00:46:06,790 --> 00:46:08,350 Laat ons nie eintlik print enigiets op alle. 1036 00:46:08,350 --> 00:46:10,530 Kom ons doen dit. 1037 00:46:10,530 --> 00:46:11,780 Chorus (i). 1038 00:46:16,630 --> 00:46:17,000 >> Alles reg. 1039 00:46:17,000 --> 00:46:20,040 So, dit is karretjie want hoekom? 1040 00:46:20,040 --> 00:46:22,850 Ek maak van hierdie as ek gaan nie, want die program eintlik niks doen nie 1041 00:46:22,850 --> 00:46:23,420 van belang. 1042 00:46:23,420 --> 00:46:24,670 Maar dit is nie die doel. 1043 00:46:24,670 --> 00:46:30,440 Die doel is om 'n program te skryf wie se hooffunksie doen, glo? 1044 00:46:30,440 --> 00:46:31,370 Bel hom. 1045 00:46:31,370 --> 00:46:32,600 En eintlik, het ons nie nodig om die lus. 1046 00:46:32,600 --> 00:46:36,070 Kom ons selfs vereenvoudig hierdie net om nie uit die oog te verloor van werklik die 1047 00:46:36,070 --> 00:46:37,310 fundamentele fout. 1048 00:46:37,310 --> 00:46:39,200 Main oproepe koor koor te sing. 1049 00:46:39,200 --> 00:46:41,760 Toe het ek het iets dom, en ek het koor oproep chorus want ek aanvaar 1050 00:46:41,760 --> 00:46:43,550 iemand anders gaan dit dalk te implementeer. 1051 00:46:43,550 --> 00:46:45,960 En nou is dit nie van plan om nog te stel. 1052 00:46:45,960 --> 00:46:48,340 Ek nodig het wat om te doen nie? 1053 00:46:48,340 --> 00:46:49,700 Ek moet die prototipe, onthou. 1054 00:46:49,700 --> 00:46:55,520 So het ek nodig om hier nietig koor (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> So nou, as ek neerdaal hier - 1056 00:46:57,470 --> 00:46:59,030 eintlik, laat ons gebruik maak van die groter venster. 1057 00:46:59,030 --> 00:47:01,670 Kom ons gaan voort en maak koor. 1058 00:47:01,670 --> 00:47:06,000 Kom ons gaan voort en maak koor. 1059 00:47:06,000 --> 00:47:08,302 Gebruik van ongeïdentifiseerde declarant i. 1060 00:47:08,302 --> 00:47:09,860 Ag, dit was dom. 1061 00:47:09,860 --> 00:47:11,020 Ons hoef nie die argument nie. 1062 00:47:11,020 --> 00:47:13,680 Kom ons doen dit. 1063 00:47:13,680 --> 00:47:14,550 Wens ons het begin om op hierdie manier. 1064 00:47:14,550 --> 00:47:16,160 Dit sou gewees het 'n baie makliker program in te skryf. 1065 00:47:16,160 --> 00:47:20,100 So is daar. 1066 00:47:20,100 --> 00:47:23,870 Laat ons nou oor te gaan na my terminale venster, re-run kletteren. 1067 00:47:23,870 --> 00:47:26,900 En hier gaan ons. 1068 00:47:26,900 --> 00:47:28,020 Dit was regtig vinnig. 1069 00:47:28,020 --> 00:47:30,690 Wat eintlik net gebeur, al is? 1070 00:47:30,690 --> 00:47:33,430 Wel, nou sal ek die gedrukte lyn te voeg, sodat ons kan sien. 1071 00:47:33,430 --> 00:47:41,330 So laat my printf sê, kom ons sê, ek is hier. 1072 00:47:41,330 --> 00:47:43,470 Okay, geen veranderlikes, sal ons laat dit soos dit. 1073 00:47:43,470 --> 00:47:44,860 Laat my weer uit te voer. 1074 00:47:44,860 --> 00:47:47,940 Laat my re-run koor. 1075 00:47:47,940 --> 00:47:51,235 En kom op. 1076 00:47:53,880 --> 00:47:55,130 Voort te gaan. 1077 00:47:57,630 --> 00:47:59,750 As 'n eenkant, waarom dit nie neergestort het nie? 1078 00:47:59,750 --> 00:48:02,050 Die segmentering skuld super vinnig gebeur het voor die aangesig van die. 1079 00:48:02,050 --> 00:48:04,250 [Onhoorbaar] 1080 00:48:04,250 --> 00:48:04,830 David J. Malan: Presies. 1081 00:48:04,830 --> 00:48:06,350 So is dit neem tyd om te druk. 1082 00:48:06,350 --> 00:48:08,370 Dit neem net meer werk op die rekenaar se deel. 1083 00:48:08,370 --> 00:48:09,550 En dit is daar. 1084 00:48:09,550 --> 00:48:10,620 Segmentering skuld. 1085 00:48:10,620 --> 00:48:12,140 >> So sien net hoe vinnig programme hardloop. 1086 00:48:12,140 --> 00:48:14,110 As jy nie die druk van enigiets, super vinnig. 1087 00:48:14,110 --> 00:48:18,100 Maar ons is nog steeds hierdie segmentering skuld, want wat gebeur het? 1088 00:48:18,100 --> 00:48:21,310 Wel, as jy dink oor hoe om jou rekenaar se geheue is uitgelê, 1089 00:48:21,310 --> 00:48:22,890 gebeur hoof te wees. 1090 00:48:22,890 --> 00:48:23,800 Maar hier - 1091 00:48:23,800 --> 00:48:28,670 laat ons net noem dit die koor, en laat ons noem hierdie koor. 1092 00:48:28,670 --> 00:48:33,420 As ek dan nou my estetika reg doen, is dit net gaan koor om te sê, 1093 00:48:33,420 --> 00:48:38,060 koor, koor, koor, koor, koor, koor, ad nauseum. 1094 00:48:38,060 --> 00:48:39,920 En uiteindelik, is wat gaan gebeur? 1095 00:48:39,920 --> 00:48:46,690 As die groot prentjie letterlik is dit, wat gebeur net konseptueel? 1096 00:48:46,690 --> 00:48:48,320 Die stapel overschrijdingen die hoop. 1097 00:48:48,320 --> 00:48:52,400 Of nog erger, jy net oorskry alles, insluitende die teks segment, wat 1098 00:48:52,400 --> 00:48:54,530 die nulpunte en dié wat jou program. 1099 00:48:54,530 --> 00:48:56,690 In kort, dit is net super, super sleg. 1100 00:48:56,690 --> 00:48:56,860 Reg? 1101 00:48:56,860 --> 00:48:58,620 Jou program het buite beheer. 1102 00:48:58,620 --> 00:49:02,840 Jy gebruik manier om meer geheue as julle almal bedoel is as gevolg van 'n dom 1103 00:49:02,840 --> 00:49:03,920 fout gemaak het, in hierdie geval. 1104 00:49:03,920 --> 00:49:08,160 Of in hierdie geval, 'n baie doelbewus gedoen funksie roeping self. 1105 00:49:08,160 --> 00:49:09,210 Nou is dit nie al die slegte. 1106 00:49:09,210 --> 00:49:12,540 Funksies wat hulself eintlik groot krag 1107 00:49:12,540 --> 00:49:13,700 wanneer jy dit korrek gebruik. 1108 00:49:13,700 --> 00:49:15,650 Ek het nie gebruik dit korrek hier. 1109 00:49:15,650 --> 00:49:16,940 >> Dit is dus nie net sleg nie. 1110 00:49:16,940 --> 00:49:20,620 Maar die feit dat ek eintlik nooit ophou roeping myself is 'n fundamentele 1111 00:49:20,620 --> 00:49:23,050 swakheid hier van hierdie program. 1112 00:49:23,050 --> 00:49:25,090 So waar gaan ons met al hierdie dinge? 1113 00:49:25,090 --> 00:49:26,230 Wel, wat is regtig gebeur? 1114 00:49:26,230 --> 00:49:30,010 As ek roep die inkrement funksie, soos ons besig was om in daardie voorbeelde, 1115 00:49:30,010 --> 00:49:33,290 Ek het 'n waarde soos 1 dat ek slaag. 1116 00:49:33,290 --> 00:49:35,820 Ek slaag in 'n kopie van die nommer een. 1117 00:49:35,820 --> 00:49:37,080 So gebeur die volgende. 1118 00:49:37,080 --> 00:49:40,390 So laat ons gaan in die inkrement voorbeeld. 1119 00:49:40,390 --> 00:49:44,230 En hierdie man reg oor hier. 1120 00:49:44,230 --> 00:49:46,800 So hier is wat werklik gebeur. 1121 00:49:46,800 --> 00:49:50,770 Toe ek gebel het inkrement, en ek slaag in x, picturaal wat 1122 00:49:50,770 --> 00:49:53,660 hier aan die gang is - 1123 00:49:53,660 --> 00:50:00,240 as ek die waarde van 1 gestoor word hier, en Ek het eintlik 'n beroep inkrement, wat 1124 00:50:00,240 --> 00:50:02,680 word nou genoem koor - 1125 00:50:02,680 --> 00:50:04,010 ja, wat gooi my af hier. 1126 00:50:04,010 --> 00:50:06,750 So laat ons noem dit inkrement. 1127 00:50:06,750 --> 00:50:09,420 En ons weet nie wat hierdie volgende funksie gaan wees. 1128 00:50:09,420 --> 00:50:14,270 So wat eintlik gebeur, is hier iewers in die hoof, Ek het 'n stuk van 1129 00:50:14,270 --> 00:50:16,670 geheue wat die stoor van die aantal 1. 1130 00:50:16,670 --> 00:50:19,730 As ek roep inkrement, ek met 'n ander stuk van die geheue, maar nou is ek 1131 00:50:19,730 --> 00:50:20,840 die kopie van 1. 1132 00:50:20,840 --> 00:50:25,480 Toe ek daardie waarde inkrementeer, dit word 2 - verskriklik geskryf oor die 1133 00:50:25,480 --> 00:50:26,420 skerm hier. 1134 00:50:26,420 --> 00:50:30,550 Maar dan, wat gebeur so gou as inkrement opbrengste? 1135 00:50:30,550 --> 00:50:34,610 Hierdie geheue net kry oorhandig terug na die bedryfstelsel, wat beteken al 1136 00:50:34,610 --> 00:50:37,470 wat jy gedoen het is niks nuttig. 1137 00:50:37,470 --> 00:50:43,460 Die een wat oorspronklik vervat in hoof is nog steeds eintlik is daar. 1138 00:50:43,460 --> 00:50:44,650 >> So waar gaan ons met hierdie? 1139 00:50:44,650 --> 00:50:49,400 Wel, dit blyk dat jy dit terug in die geheue volgorde van om terug te 1140 00:50:49,400 --> 00:50:50,940 bytes dat jy dinge kan sit. 1141 00:50:50,940 --> 00:50:53,760 En dit blyk dat ons reeds gesien het iets wat die volgende behels om 1142 00:50:53,760 --> 00:50:55,100 dinge rug aan rug Terug na. 1143 00:50:55,100 --> 00:51:00,170 Wat is 'n string, gebaseer op week een en nou week twee? 1144 00:51:00,170 --> 00:51:01,840 So dit is net 'n versameling van die karakters. 1145 00:51:01,840 --> 00:51:05,290 So dit blyk, net soos jy kan sit in die geheue, net soos wat jy kan 1146 00:51:05,290 --> 00:51:06,900 karakters in die geheue. 1147 00:51:06,900 --> 00:51:09,810 En sodra ons begin om karakters in die geheue terug Terug na 1148 00:51:09,810 --> 00:51:12,800 terug, dit blyk dat die gebruik van die eenvoudigste dinge soos 'n for-lus of 1149 00:51:12,800 --> 00:51:14,510 'n while lus, kan ons itereer - 1150 00:51:14,510 --> 00:51:17,130 van links na regs oor die karakters in 'n tou - 1151 00:51:17,130 --> 00:51:20,720 en begin massering hulle heeltemal in verskillende karakters. 1152 00:51:20,720 --> 00:51:25,550 A kan word B. B kan word C. Sodat uiteindelik, ons kan neem om 'n 1153 00:51:25,550 --> 00:51:28,830 Engelse sin wat werklik sin maak en bekeer elkeen van daardie 1154 00:51:28,830 --> 00:51:32,440 letters een op 'n tyd deur die loop deur ons rekenaar se geheue links na 1155 00:51:32,440 --> 00:51:34,300 reg om werklik te enkripteer. 1156 00:51:34,300 --> 00:51:36,590 >> So laat ons vyf minute breek hier, en wanneer ons terug kom, sal ons 1157 00:51:36,590 --> 00:51:39,060 Begin hierdie proses van skommeling inligting. 1158 00:51:41,640 --> 00:51:43,180 >> Alles reg. 1159 00:51:43,180 --> 00:51:48,440 So voordat ons duik in tot 'n crypto en hierdie dinge genoem skikkings, laat my 1160 00:51:48,440 --> 00:51:51,610 breek vir enige vrae, want ek voel soos ek regtig soort deurmekaar sommige van 1161 00:51:51,610 --> 00:51:52,230 daardie onderwerpe. 1162 00:51:52,230 --> 00:51:53,940 So laat los nou as ons kan. 1163 00:51:53,940 --> 00:51:56,480 Dus het ons net gepraat oor die terugkeer waardes. 1164 00:51:56,480 --> 00:51:58,630 Ons het gepraat oor die argumente. 1165 00:51:58,630 --> 00:52:02,330 En ons het gepraat oor hierdie idee, wat ons sal terug kom in die weke na 1166 00:52:02,330 --> 00:52:07,140 kom, kyk geheue as 'n hele klomp van hierdie gestapel 1167 00:52:07,140 --> 00:52:08,540 bak, om so te praat. 1168 00:52:08,540 --> 00:52:13,460 Van onder op up, van so 'n aard dat elke tray wat op die stapel geplaas kry, verteenwoordig 1169 00:52:13,460 --> 00:52:15,160 'n funksie wat tans genoem. 1170 00:52:17,970 --> 00:52:20,300 Enige vrae? 1171 00:52:20,300 --> 00:52:22,890 So, hoe oor - laat ek probeer om 'n vraag te vra. 1172 00:52:22,890 --> 00:52:25,520 Ek hou bederf nie, maar nou it's - you've die seun se gesig gesien. 1173 00:52:25,520 --> 00:52:27,020 So kom ons terug na daardie. 1174 00:52:27,020 --> 00:52:29,700 >> So laat my vra 'n vraag hier. 1175 00:52:29,700 --> 00:52:34,810 Laat my vereenvoudig dit terug na wat dit was voor sommige van ons vorige Q & A. 1176 00:52:34,810 --> 00:52:41,730 En die feit dat inkrement oop hakies, int nommer, gesluit 1177 00:52:41,730 --> 00:52:42,260 hakies. 1178 00:52:42,260 --> 00:52:46,370 Wat verteenwoordig int nommer? 1179 00:52:46,370 --> 00:52:47,250 [Onhoorbaar] 1180 00:52:47,250 --> 00:52:47,870 David J. Malan: 'n argument. 1181 00:52:47,870 --> 00:52:50,732 Okay, maar wat is 'n argument? 1182 00:52:50,732 --> 00:52:51,620 [Onhoorbaar] 1183 00:52:51,620 --> 00:52:52,500 David J. Malan: Jammer, wat is dit? 1184 00:52:52,500 --> 00:52:53,150 SPREKER 3: iets wat jy slaag. 1185 00:52:53,150 --> 00:52:53,570 David J. Malan: Goed. 1186 00:52:53,570 --> 00:52:54,780 So iets wat jy slaag. 1187 00:52:54,780 --> 00:52:56,560 En meer algemeen, dit is net die insette. 1188 00:52:56,560 --> 00:52:59,860 As jy die skryf van 'n funksie en dat die funksie se doel in die lewe is om te doen 1189 00:52:59,860 --> 00:53:03,290 iets wat 'n bietjie anders elke keer as jy dit gebruik, dan is die enigste manier om vir 1190 00:53:03,290 --> 00:53:07,710 wat werklik gebeur sou blyk te wees om dit te voorsien met insette sodat dit 1191 00:53:07,710 --> 00:53:10,180 iets anders kan doen met daardie insette elke keer. 1192 00:53:10,180 --> 00:53:13,590 >> So moet jy twee dinge nodig om te spesifiseer wanneer 'n funksie neem insette. 1193 00:53:13,590 --> 00:53:17,240 Jy moet die naam wat jy wil te gee aan daardie inset, suiwer vir spesifiseer 1194 00:53:17,240 --> 00:53:20,790 jou eie gerief, sodat jy kan verwys na dit in die funksie wat u 1195 00:53:20,790 --> 00:53:23,610 jouself skryf, soos ek gedoen het hier in lyn 32. 1196 00:53:23,610 --> 00:53:27,840 Maar jy moet ook die tipe spesifiseer, want C is 'n programmeertaal 1197 00:53:27,840 --> 00:53:28,840 wat vereis dat net 1198 00:53:28,840 --> 00:53:31,810 dat as jy 'n veranderlike, moet jy die rekenaar te vertel wat 1199 00:53:31,810 --> 00:53:32,790 data tipe dit is, 1200 00:53:32,790 --> 00:53:35,540 in 'n groot deel sodat dit weet hoeveel stukkies 1201 00:53:35,540 --> 00:53:37,230 ken vir daardie veranderlike. 1202 00:53:37,230 --> 00:53:38,600 Want dit kan ses - 1203 00:53:38,600 --> 00:53:39,990 jammer, sal dit nie ses. 1204 00:53:39,990 --> 00:53:41,050 Dit kan wees 16. 1205 00:53:41,050 --> 00:53:41,630 Dit kan wees 8. 1206 00:53:41,630 --> 00:53:44,410 Dit kan wees 32, selfs 64. 1207 00:53:44,410 --> 00:53:45,820 Maar die rekenaar nodig het om te weet. 1208 00:53:45,820 --> 00:53:49,110 Nou die int op die linkerkant verteenwoordig wat, in teenstelling? 1209 00:53:52,825 --> 00:53:53,780 [Onhoorbaar] 1210 00:53:53,780 --> 00:53:54,570 David J. Malan: Wat is dit? 1211 00:53:54,570 --> 00:53:55,390 [Onhoorbaar] 1212 00:53:55,390 --> 00:53:57,920 David J. Malan: Die tipe van die funksie en, meer spesifiek, die 1213 00:53:57,920 --> 00:53:59,755 tipe van sy produksie. 1214 00:53:59,755 --> 00:54:00,220 Reg. 1215 00:54:00,220 --> 00:54:04,220 Dus, terwyl die ding in hakies verteenwoordig sy insette, indien enige, die 1216 00:54:04,220 --> 00:54:06,640 ding aan die linkerkant verteenwoordig sy uitset. 1217 00:54:06,640 --> 00:54:10,560 En in hierdie geval, inkrement terug blykbaar 'n int. 1218 00:54:10,560 --> 00:54:14,590 En so int is die terugkeer tipe van hierdie funksie. 1219 00:54:14,590 --> 00:54:16,090 >> Wat beteken dit om terug te keer? 1220 00:54:16,090 --> 00:54:19,810 Letterlik, jy gebruik die trefwoord terugkeer. 1221 00:54:19,810 --> 00:54:24,640 En dan as wat jy terugkeer na die reg van die term is 'n 1222 00:54:24,640 --> 00:54:28,340 heelgetal is, dan is dit wel in ooreenstemming met wat ons gedoen het. 1223 00:54:28,340 --> 00:54:31,110 Jy kan nie iets doen soos hierdie - 1224 00:54:31,110 --> 00:54:32,280 hello, wêreld - 1225 00:54:32,280 --> 00:54:33,500 want dit is 'n string. 1226 00:54:33,500 --> 00:54:35,440 Natuurlik is dit nie 'n heelgetal. 1227 00:54:35,440 --> 00:54:40,450 Dus, in kort, die las is regtig op ons, die programmeerder, om spesifiek te wees as 1228 00:54:40,450 --> 00:54:44,730 wat ons terugkeer en dan eintlik gaan oor die terugkeer. 1229 00:54:44,730 --> 00:54:49,030 Te maak en dan 'n bietjie meer duidelik dat die konteks - 1230 00:54:49,030 --> 00:54:50,080 daar is hy weer. 1231 00:54:50,080 --> 00:54:51,060 Die konteks - 1232 00:54:51,060 --> 00:54:52,830 groot verrassing kom in net 'n oomblik. 1233 00:54:52,830 --> 00:54:57,720 Die konteks hier is nou dat jou rekenaar se geheue is, weer 'n 1234 00:54:57,720 --> 00:54:59,070 gigagreep, twee gigagrepe, wat ook al. 1235 00:54:59,070 --> 00:54:59,630 Miskien is dit nog baie meer. 1236 00:54:59,630 --> 00:55:00,540 Miskien is dit minder. 1237 00:55:00,540 --> 00:55:03,750 Maar die rekenaar beskou dit as met verskillende afdelings. 1238 00:55:03,750 --> 00:55:04,860 Iets gaan daar. 1239 00:55:04,860 --> 00:55:06,020 Iets anders gaan daar. 1240 00:55:06,020 --> 00:55:07,540 Verskillende dinge gaan in die middel. 1241 00:55:07,540 --> 00:55:09,300 En vandag, het ons net begin om hierdie storie te vertel. 1242 00:55:09,300 --> 00:55:11,130 >> Maar ons sal terug kom na hierdie verloop van tyd. 1243 00:55:11,130 --> 00:55:15,000 Vir nou, die enigste stuk van die geheue ons werklik omgee is die teks segment 1244 00:55:15,000 --> 00:55:17,160 want dit verteenwoordig net die nulle en ene 1245 00:55:17,160 --> 00:55:18,460 dat die geratel het outputted. 1246 00:55:18,460 --> 00:55:21,570 So wanneer jy 'n opdrag by die sleutelbord soos a.out, of jy dubbel 1247 00:55:21,570 --> 00:55:25,350 klik op 'n ikoon op Mac OS of Windows, jou program van jou harde gelaai 1248 00:55:25,350 --> 00:55:26,930 ry in RAM. 1249 00:55:26,930 --> 00:55:30,850 En dit plof op die top van jou rekenaar se RAM, om so te praat. 1250 00:55:30,850 --> 00:55:35,470 Nou Intussen, as jou program begin loop en die belangrikste kry genoem in die 1251 00:55:35,470 --> 00:55:39,240 program wat jy geskryf het of die program Microsoft of Apple het geskryf, enige van sy 1252 00:55:39,240 --> 00:55:42,930 lokale veranderlikes beland daar by die onderkant van jou rekenaar se geheue. 1253 00:55:42,930 --> 00:55:46,490 Maar as hoof roep 'n ander funksie wat self veranderlikes of 1254 00:55:46,490 --> 00:55:48,340 argumente, het hulle uiteindelik bo dit. 1255 00:55:48,340 --> 00:55:50,670 En as daardie funksie roep iets, het hulle uiteindelik bo dit, 1256 00:55:50,670 --> 00:55:51,840 bogenoemde is dit, bogenoemde is dit. 1257 00:55:51,840 --> 00:55:56,100 En slegs een keer 'n funksie is die uitvoering van doen die stapel van bak, so 1258 00:55:56,100 --> 00:55:58,320 om te praat, begin te kry laer en laer afsak. 1259 00:55:58,320 --> 00:56:03,370 En dit is wat dan in 'n neutedop, verduidelik hoekom, wanneer jy bel kubus - 1260 00:56:03,370 --> 00:56:04,660 of jy bel inkrement - 1261 00:56:04,660 --> 00:56:06,490 jy wat in 'n afskrif van die waarde. 1262 00:56:06,490 --> 00:56:09,840 En wat dit beteken picturaal is dat jy letterlik is die skryf van die 1263 00:56:09,840 --> 00:56:14,540 nommer 1 in 'n ander deel van die geheue, die verandering van dat 1 tot 2, in die geval van 1264 00:56:14,540 --> 00:56:15,360 inkrement - 1265 00:56:15,360 --> 00:56:17,450 of aan 'n 8, in die geval van die kubus - 1266 00:56:17,450 --> 00:56:21,450 en dan gooi dat die geheue weg so gou as die inkrement of die kubus 1267 00:56:21,450 --> 00:56:23,410 funksie opbrengste. 1268 00:56:23,410 --> 00:56:24,267 >> Vraag. 1269 00:56:24,267 --> 00:56:25,517 [Onhoorbaar] 1270 00:56:28,090 --> 00:56:29,970 David J. Malan: Waar globale veranderlikes in wat gestoor word 1271 00:56:29,970 --> 00:56:32,960 tans die geïnisialiseer data of geïnitialiseerd data genoem. 1272 00:56:32,960 --> 00:56:35,900 Die verskil is, as jy 'n globale veranderlike, en jy ken dit 1273 00:56:35,900 --> 00:56:39,530 onmiddellik 'n waarde met die gelykaan teken, dit eindig aan die bokant. 1274 00:56:39,530 --> 00:56:43,390 En as jy net int x kommapunt sê met geen waarde nie, dit eindig effens 1275 00:56:43,390 --> 00:56:46,670 laer in RAM eenvoudig deur konvensie. 1276 00:56:46,670 --> 00:56:49,308 Ander vrae. 1277 00:56:49,308 --> 00:56:49,750 Alles reg. 1278 00:56:49,750 --> 00:56:53,040 >> So hierdie foto sal terugkom as ons kry meer kragtige met wat ons kan doen 1279 00:56:53,040 --> 00:56:53,830 met die rekenaar. 1280 00:56:53,830 --> 00:56:58,790 Maar vir nou, laat ons 'n kort intro kriptografie, 'n spesifieke tipe van 1281 00:56:58,790 --> 00:57:01,910 kriptografie wat nie al van die wêreld se probleme op te los, maar dit los 1282 00:57:01,910 --> 00:57:02,480 sommige van hulle. 1283 00:57:02,480 --> 00:57:06,090 In hierdie geval hier, ons het iets genoem geheime sleutel kriptografie. 1284 00:57:06,090 --> 00:57:10,430 En geheime sleutel kriptografie, soos die naam aandui, ontleen sy sekuriteit 1285 00:57:10,430 --> 00:57:11,330 van 'n geheim. 1286 00:57:11,330 --> 00:57:14,720 So byvoorbeeld, as jy terug in graad skool en jy verby 'n 1287 00:57:14,720 --> 00:57:18,040 klein geheime liefde brief aan die seun of meisie wat jy breek - as jy 1288 00:57:18,040 --> 00:57:20,820 wou gehad het om te slaag deur die gehoor, jy sal waarskynlik nie skryf nie 1289 00:57:20,820 --> 00:57:24,120 so 'n nota in Engels of wat ookal jou moedertaal is nie, maar eerder, jy 1290 00:57:24,120 --> 00:57:25,800 dit kan enkripteer. 1291 00:57:25,800 --> 00:57:27,820 Of jy kan net hulle stuur 'n SMS-boodskap van hierdie dae. 1292 00:57:27,820 --> 00:57:30,310 Maar jy kan dit eintlik slaag hulle 'n nota in die hele klas. 1293 00:57:30,310 --> 00:57:33,820 En dit veilig te doen, in so 'n manier dat jou vriende en die onderwyser 1294 00:57:33,820 --> 00:57:36,820 weet nie wat jy skryf nie, kan jy kom met 'n redelik eenvoudige 1295 00:57:36,820 --> 00:57:37,800 algoritme - 1296 00:57:37,800 --> 00:57:39,290 jong maar jy kan wees - 1297 00:57:39,290 --> 00:57:40,780 net scramble die woorde. 1298 00:57:40,780 --> 00:57:44,390 So in plaas van die skryf van 'n, jy B. kan plaas van B te skryf, kan jy skryf 1299 00:57:44,390 --> 00:57:46,670 C. In plaas van C, sou jy skryf D, en so meer. 1300 00:57:46,670 --> 00:57:50,020 Of jy kan kom met 'n meer gesofistikeerde vertaling van letters 1301 00:57:50,020 --> 00:57:51,300 aan verskillende letters. 1302 00:57:51,300 --> 00:57:55,440 Maar die vangs is die meisie of seun aan wie jy die stuur van hierdie nota moet 1303 00:57:55,440 --> 00:57:56,850 weet iets. 1304 00:57:56,850 --> 00:57:59,620 En dit is wat, natuurlik? 1305 00:57:59,620 --> 00:58:01,400 Soos wat jou geheim is. 1306 00:58:01,400 --> 00:58:04,620 Soos, wat is die kartering tussen As en Bs en Cs en Ds? 1307 00:58:04,620 --> 00:58:08,780 Is dit net nog een, om so te praat, aan elk van die letters om te gaan 1308 00:58:08,780 --> 00:58:09,730 A na B, B na C? 1309 00:58:09,730 --> 00:58:11,350 Is dit meer kompleks as dit? 1310 00:58:11,350 --> 00:58:16,450 Sodat jy en jou geliefde moet hierdie geheime inligting te hê. 1311 00:58:16,450 --> 00:58:18,170 Maar daar is 'n soort van 'n catch-22 hier. 1312 00:58:18,170 --> 00:58:20,760 As dit is die heel eerste keer wat jy stuur hierdie liefde brief deur die 1313 00:58:20,760 --> 00:58:25,590 klas, hoe daardie seun of 'n meisie gaan om te weet wat die geheim is? 1314 00:58:25,590 --> 00:58:28,450 So geheime sleutel crypto nie al die wêreld se probleme op te los. 1315 00:58:28,450 --> 00:58:30,490 En daar is eintlik 'n verhouding wat ons sal terug te kom na die rigting van 1316 00:58:30,490 --> 00:58:31,370 semester se einde. 1317 00:58:31,370 --> 00:58:35,970 >> Net so, het niemand van ons ooit waarskynlik het 'n - 1318 00:58:35,970 --> 00:58:39,453 op soortgelyke wyse, die meeste van ons weet nie iemand wat werk, byvoorbeeld, op 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 En tog, baie van ons het waarskynlik gekoop stuff by Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 En ons het al geleer om te aanvaar dat hierdie e-commerce 1322 00:58:45,670 --> 00:58:47,060 transaksies veilig is. 1323 00:58:47,060 --> 00:58:47,210 Reg? 1324 00:58:47,210 --> 00:58:49,310 Die URL sê waarskynlik https. 1325 00:58:49,310 --> 00:58:51,590 Daar is dalk 'n dom bietjie hangslot ikoon iewers. 1326 00:58:51,590 --> 00:58:54,680 Daar is 'n soort van kriptografie die verkryging van jou kredietkaart inligting 1327 00:58:54,680 --> 00:58:56,980 tussen jou en Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 En tog, as kriptografie behels weet 'n paar geheime, en tog het ek dit nie doen nie 1329 00:59:00,410 --> 00:59:03,330 weet iemand by Amazon, en ek het beslis nie gereël om enige soort van 1330 00:59:03,330 --> 00:59:07,350 geheim met iemand by Amazon, is hoe my rekenaar of my blaaier om dit te doen? 1331 00:59:07,350 --> 00:59:10,100 Wel, blyk daar is ander vorme van kriptografie heeltemal los 1332 00:59:10,100 --> 00:59:10,740 dat die probleem. 1333 00:59:10,740 --> 00:59:13,610 Maar vir vandag, sal ons fokus op die eenvoudige een, waar jy kan reël 1334 00:59:13,610 --> 00:59:18,480 bevorder 'n paar geheime te leer ken, soos plus 1 of 'n kartering tussen As en Bs. 1335 00:59:18,480 --> 00:59:20,710 >> En die proses van kriptografie behels oor die algemeen. 1336 00:59:20,710 --> 00:59:23,550 Jy het 'n paar plain text, uitgebeeld hier aan die linkerkant. 1337 00:59:23,550 --> 00:59:26,260 U hardloop en dit deur middel van 'n soort van algoritme of prosedure 1338 00:59:26,260 --> 00:59:27,670 vir versleutelen. 1339 00:59:27,670 --> 00:59:31,390 Miskien is dit net 'n 'B, B word C. En dan eindig jy met 1340 00:59:31,390 --> 00:59:32,260 becijferen teks. 1341 00:59:32,260 --> 00:59:36,450 Intussen, wanneer jou geliefde ontvang die geheime kennis, hy of sy het dan 1342 00:59:36,450 --> 00:59:39,950 decrypt dit deur die algemeen omkeer dat die algoritme so te kry 1343 00:59:39,950 --> 00:59:41,640 terug die plain text. 1344 00:59:41,640 --> 00:59:43,860 Nou is daar fisiese inkarnasies van hierdie. 1345 00:59:43,860 --> 00:59:46,720 Byvoorbeeld, dit is 'n klein geheim dekodeerder ring. 1346 00:59:46,720 --> 00:59:50,060 En dit is 'n ring in die sin dat daar twee dials hier. 1347 00:59:50,060 --> 00:59:53,630 Op die buite rand van hierdie ding, daar is letters A tot Z, 1348 00:59:53,630 --> 00:59:55,110 hoewel hulle in enige volgorde. 1349 00:59:55,110 --> 00:59:58,410 En aan die binnekant, is daar eintlik 'n paar nommers, soos wat met hierdie 1350 00:59:58,410 --> 01:00:02,940 ring, soort van draai jy die buite, maar nie die binnekant om te line-up 1351 01:00:02,940 --> 01:00:04,110 getalle met letters. 1352 01:00:04,110 --> 01:00:08,290 En in die clip wat jy oor om te sien sommige van wat jy gesien het 24/7 1353 01:00:08,290 --> 01:00:11,120 rondom die Kersseisoen van 'n fliek genaamd A Christmas Story. 1354 01:00:11,120 --> 01:00:16,050 Jy sal sien dat daar min Ralphie was so gretig om uit te vind wat klein weeskind 1355 01:00:16,050 --> 01:00:19,810 Annie se geheime boodskap was aan Hom wat gekommunikeer het, dink ek, in die 1356 01:00:19,810 --> 01:00:22,810 vorm van 'n numeriese boodskappe op 'n seriële boks. 1357 01:00:22,810 --> 01:00:26,760 En jy het al die kinders-kaarte wat gekom het om te akkumuleer 1358 01:00:26,760 --> 01:00:27,480 in die graan boks. 1359 01:00:27,480 --> 01:00:28,320 Jy het om hulle te pos. 1360 01:00:28,320 --> 01:00:31,060 Jy het die geheime dekodeerder ring terug te kry, sodat jy uiteindelik kan uitvind 1361 01:00:31,060 --> 01:00:34,190 uit te vind wat die kartering tussen letters en nommers, 1362 01:00:34,190 --> 01:00:35,420 of briewe en briewe. 1363 01:00:35,420 --> 01:00:39,790 So EK gee julle hierdie kort clip van A Christmas Story pset 2 te motiveer en 1364 01:00:39,790 --> 01:00:42,340 ons bespreking, in 'n oomblik van skikkings. 1365 01:00:42,340 --> 01:00:43,773 So hier het ons Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [Video-vertoning] 1367 01:00:44,126 --> 01:00:47,470 Word-dit bekend wees aan almal en diverse dat Ralph Parker benoem 'n 1368 01:00:47,470 --> 01:00:50,690 lid van die Little Orphan Annie Secret Circle en is geregtig op alle 1369 01:00:50,690 --> 01:00:53,500 die honneurs-en voordele voorkom daartoe. 1370 01:00:53,500 --> 01:00:56,040 Onderteken, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Onderteken, Pierre-Andre! 1372 01:00:58,730 --> 01:01:00,150 In ink! 1373 01:01:00,150 --> 01:01:02,910 Honneurs-en voordele, wat reeds op die ouderdom van nege. 1374 01:01:09,970 --> 01:01:10,730 Kom, laat ons gaan met dit. 1375 01:01:10,730 --> 01:01:15,000 Ek hoef nie alles wat jazz oor smokkelaars en seerowers. 1376 01:01:15,000 --> 01:01:17,624 Luister môreaand vir die sluiting van avontuur van die swart 1377 01:01:17,624 --> 01:01:19,710 Seerower skip. 1378 01:01:19,710 --> 01:01:23,380 Nou is dit tyd vir Annie se geheime boodskap vir jou lede 1379 01:01:23,380 --> 01:01:25,670 van die Secret Circle. 1380 01:01:25,670 --> 01:01:30,260 Onthou, kinders, kan slegs lede van Annie se Secret Circle dekodeer 1381 01:01:30,260 --> 01:01:31,660 Annie se geheime boodskap. 1382 01:01:31,660 --> 01:01:36,230 Onthou, Annie, afhangende van jou. 1383 01:01:36,230 --> 01:01:38,720 Stel jou penne B2. 1384 01:01:38,720 --> 01:01:41,040 Hier is die boodskap. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 Ek is in my eerste geheime vergadering. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre was in 'n groot stem vanaand. 1389 01:01:51,700 --> 01:01:54,890 Ek kon vertel dat vanaand se boodskap was werklik belangrik is. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Dit is 'n boodskap van Annie haarself. 1392 01:01:58,590 --> 01:01:59,840 Onthou, nie verder vertel. 1393 01:02:04,570 --> 01:02:08,750 -90 Sekondes later, ek is in die enigste kamer in die huis waar 'n seuntjie van nege 1394 01:02:08,750 --> 01:02:12,980 kan sit in die privaatheid en dekodeer. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. Ek het na die volgende. 1396 01:02:17,130 --> 01:02:20,330 E. Die eerste woord is. 1397 01:02:20,330 --> 01:02:22,670 S. Dit is makliker kom nou. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -O, kom op, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Ek het om te gaan. 1401 01:02:28,430 --> 01:02:30,350 -I'll regs af, ma. 1402 01:02:30,350 --> 01:02:33,720 Gee gefluit. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Wees seker om te. 1404 01:02:38,270 --> 01:02:40,000 Maak seker dat jy na wat? 1405 01:02:40,000 --> 01:02:42,105 Wat was Little Orphan Annie probeer om te sê? 1406 01:02:42,105 --> 01:02:43,095 Maak seker dat jy na wat? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy het om te gaan. 1409 01:02:44,580 --> 01:02:45,570 Sal jy asseblief kom uit? 1410 01:02:45,570 --> 01:02:46,560 -Alle reg, ma. 1411 01:02:46,560 --> 01:02:48,540 Ek kom gou uit. 1412 01:02:48,540 --> 01:02:50,580 Ek was al hoe nader nou. 1413 01:02:50,580 --> 01:02:52,550 Die spanning was verskriklik. 1414 01:02:52,550 --> 01:02:53,355 Wat was dit? 1415 01:02:53,355 --> 01:02:56,315 Die lot van die planeet kan hang in die weegskaal. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy het om te gaan. 1418 01:02:59,165 --> 01:03:02,310 -I'll reg uit, vir huil hardop. 1419 01:03:02,310 --> 01:03:04,000 Gee, amper daar. 1420 01:03:04,000 --> 01:03:05,180 My vingers gevlieg. 1421 01:03:05,180 --> 01:03:07,150 My gedagte was 'n staal trap. 1422 01:03:07,150 --> 01:03:08,790 Elke porie vibreer. 1423 01:03:08,790 --> 01:03:10,040 Dit was amper duidelik. 1424 01:03:10,040 --> 01:03:13,400 Ja, ja, ja, ja. 1425 01:03:13,400 --> 01:03:18,960 Maak seker dat jou Ovaltine te drink. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 'N morsige kommersiële? 1428 01:03:28,200 --> 01:03:29,640 Die seun van 'n teef. 1429 01:03:29,640 --> 01:03:33,340 [Einde VIDEO speel] 1430 01:03:33,340 --> 01:03:36,040 >> David J. Malan: So daar het ons kriptografie. 1431 01:03:36,040 --> 01:03:39,670 So, hoe kan ons in 'n rekenaar gaan oor die uitvoering of 1432 01:03:39,670 --> 01:03:40,950 wat dinge soos hierdie? 1433 01:03:40,950 --> 01:03:44,430 Wel, ons moet 'n manier van uitdrukking van onsself 'n bietjie meer buigsaam as 1434 01:03:44,430 --> 01:03:46,420 ons veranderlikes tot dusver toegelaat het. 1435 01:03:46,420 --> 01:03:47,370 Ons het ints. 1436 01:03:47,370 --> 01:03:48,380 Ons het karakters. 1437 01:03:48,380 --> 01:03:50,790 Ons het vlotte en dubbels en 'n paar ander. 1438 01:03:50,790 --> 01:03:55,050 Maar dit is individuele stukke van die geheue wat nie werklik toelaat om ons te 1439 01:03:55,050 --> 01:03:58,010 uitspreek dinge soos woorde en sinne en frases. 1440 01:03:58,010 --> 01:04:00,200 Inderdaad, het ons sulke dinge stringe genoem. 1441 01:04:00,200 --> 01:04:03,650 Maar ons belowe dat dit eintlik net 'n vereenvoudiging in die CS50 1442 01:04:03,650 --> 01:04:07,020 biblioteek dat ons van voorneme is om skil terug. 1443 01:04:07,020 --> 01:04:08,970 >> En so laat ons begin wat om hier te doen. 1444 01:04:08,970 --> 01:04:11,130 Laat my gaan voort en 'n lêer oop te maak - 1445 01:04:11,130 --> 01:04:13,770 al hierdie lêers is beskikbaar as usual aanlyn - 1446 01:04:13,770 --> 01:04:19,120 genoem array.c om 'n probleem op te los wat nie verband hou met stringe maar dat verf 'n 1447 01:04:19,120 --> 01:04:23,040 prentjie hier van hoe ons kan gebruik om iets genoem 'n skikking. 1448 01:04:23,040 --> 01:04:25,530 'N skikking is 'n data tipe. 1449 01:04:25,530 --> 01:04:31,320 Dit is 'n tipe van 'n veranderlike van spesies, wat het verskeie kleiner datatipes 1450 01:04:31,320 --> 01:04:34,150 binnekant van dit rug aan rug Terug na. 1451 01:04:34,150 --> 01:04:37,700 So byvoorbeeld, as ons wil 'n klein program waarmee jy te skryf jou 1452 01:04:37,700 --> 01:04:42,110 gemiddeld vir 'n kursus soos 50 wat twee vasvrae, kan jy baie maklik quiz 1453 01:04:42,110 --> 01:04:45,170 skryf hierdie program - selfs op grond van sommige van verlede week se materiaal - 1454 01:04:45,170 --> 01:04:47,770 deur gebruik te maak van getint en 'n paar van die veranderlikes. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, en dit is redelik eenvoudig. 1456 01:04:51,920 --> 01:04:55,930 Dit is miskien 10, 20 lyne van kode, max, te implementeer 'n program wat vir die 1457 01:04:55,930 --> 01:05:01,170 gebruiker vir twee quiz tellings en dan bere hulle gemiddeld deur die toevoeging van hulle 1458 01:05:01,170 --> 01:05:03,850 saam, deel deur twee en dan druk van die resultate. 1459 01:05:03,850 --> 01:05:06,380 Ons kan waarskynlik doen redelik geredelik nou na 1460 01:05:06,380 --> 01:05:07,510 n sekere aantal minute. 1461 01:05:07,510 --> 01:05:11,005 >> Maar die probleem is dat veronderstel dat 50 het drie vasvrae of vier. 1462 01:05:11,005 --> 01:05:13,510 Veronderstel dat jy wou dieselfde program te gebruik vir 'n klas wat 1463 01:05:13,510 --> 01:05:14,850 weeklikse vasvrae. 1464 01:05:14,850 --> 01:05:16,610 Dink na oor 'n klas wat weekliks vasvrae. 1465 01:05:16,610 --> 01:05:20,610 As daar is soos 16 of so weke in 'n semester, nou jy het 16 veranderlikes - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Sodra jy begin sien hierdie oortolligheid, kopieer en plak 1468 01:05:27,560 --> 01:05:31,390 van die kode, moet dit begin te maak jy wens daar was 'n beter manier. 1469 01:05:31,390 --> 01:05:33,930 En gelukkig, omdat van skikkings, wat daar is. 1470 01:05:33,930 --> 01:05:34,980 So laat ons dit doen. 1471 01:05:34,980 --> 01:05:38,430 Eerste, laat my stel 'n baie eenvoudige ding wat ons nie gebruik het tot dusver, 1472 01:05:38,430 --> 01:05:40,140 maar jy sien dit soms in die kode. 1473 01:05:40,140 --> 01:05:42,360 Dit is wat algemeen bekend as 'n konstante. 1474 01:05:42,360 --> 01:05:45,790 So dit is 'n konstante in die sin dat hierdie waarde verander nooit. 1475 01:05:45,790 --> 01:05:49,210 Die menslike konvensie wanneer die skep van 'n konstante is alle kapitaal te gebruik 1476 01:05:49,210 --> 01:05:51,940 letters, net so dat dit regtig staan ​​uit in jou kode. 1477 01:05:51,940 --> 01:05:55,960 En die spesiale sleutelwoord wat jy gebruik in C # define. 1478 01:05:55,960 --> 01:06:00,250 So as jy sê # definieer, dan 'n spasie, dan die woord wat jy wil gebruik vir 1479 01:06:00,250 --> 01:06:03,260 die konstante se naam, en dan die waarde van die konstante. 1480 01:06:03,260 --> 01:06:06,180 So kennisgewing, dit is verskillend van die toeken van iets aan 'n veranderlike. 1481 01:06:06,180 --> 01:06:07,020 Daar is geen gelykaanteken. 1482 01:06:07,020 --> 01:06:08,240 Daar is geen kommapunt. 1483 01:06:08,240 --> 01:06:11,410 Dit is wat algemeen bekend is as 'n preprocessor richtlijn, maar meer oor 1484 01:06:11,410 --> 01:06:12,210 dat 'n ander tyd. 1485 01:06:12,210 --> 01:06:18,540 >> Vir nou, dit skep 'n onveranderlike waarde genoem vasvrae wie se werklike 1486 01:06:18,540 --> 01:06:19,940 numeriese waarde is 2. 1487 01:06:19,940 --> 01:06:24,020 So waar jy sien vasvrae, vasvrae, vasvrae regdeur hierdie lêer, wat is 1488 01:06:24,020 --> 01:06:25,410 net die getal 2. 1489 01:06:25,410 --> 01:06:28,100 Nou, as ek nou kyk na die belangrikste, laat ons sien hoe dit werk. 1490 01:06:28,100 --> 01:06:29,500 Op die eerste, dit lyk 'n bietjie kripties. 1491 01:06:29,500 --> 01:06:31,340 Maar dit is al die dinge van die week een. 1492 01:06:31,340 --> 01:06:32,710 Vra die gebruiker vir grade. 1493 01:06:32,710 --> 01:06:33,630 Hoe doen ons dit? 1494 01:06:33,630 --> 01:06:35,470 Wel, in lyn 22 - 1495 01:06:35,470 --> 01:06:37,210 dit is regtig die sappige deel - 1496 01:06:37,210 --> 01:06:40,960 Ek verklaar 'n vlot, maar nie net 'n enkele float. 1497 01:06:40,960 --> 01:06:44,620 Ek verklaar nie, maar eerder 'n verskeidenheid van floating point waardes. 1498 01:06:44,620 --> 01:06:49,100 Daardie veranderlike genoem gaan word grade, soos hier geïmpliseer. 1499 01:06:49,100 --> 01:06:53,080 Maar die enigste stuk van nuwe sintaks dan is hierdie vierkantige hakies, die feit 1500 01:06:53,080 --> 01:06:59,350 wat ek gesê float grade en dan oop bracket en dan 'n nommer. 1501 01:06:59,350 --> 01:07:02,460 Kennisgewing, indien dit is 'n konstante, dit is net soos ons het dit gedoen. 1502 01:07:02,460 --> 01:07:06,890 Dit beteken hey rekenaar, gee my twee dryf, en laat ons gesamentlik noem 1503 01:07:06,890 --> 01:07:08,220 hulle grade. 1504 01:07:08,220 --> 01:07:11,920 Dit is in teenstelling met 'n veel meer moeisame proses soos hierdie. 1505 01:07:11,920 --> 01:07:15,850 Dryf voorraad1, dryf grade2, en so meer. 1506 01:07:15,850 --> 01:07:20,010 So 'n skikking stel ons in staat om hierdie idee te implementeer nie, maar veel minder morsig, in 1507 01:07:20,010 --> 01:07:24,630 so 'n manier dat ons kan een lyn van kode in plaas van skryf, sê, 16 vir 'n 16 1508 01:07:24,630 --> 01:07:25,740 week semester. 1509 01:07:25,740 --> 01:07:29,950 So ek wou nie te hard-kode 2 want as jy dink oor dit nou 1510 01:07:29,950 --> 01:07:34,160 logies - veronderstel volgende jaar CS50 veranderinge aan 3 plaas vasvrae. 1511 01:07:34,160 --> 01:07:35,510 En ek het die getal 2. 1512 01:07:35,510 --> 01:07:36,600 Ek het hier die getal 2. 1513 01:07:36,600 --> 01:07:37,580 Ek het hier die getal 2. 1514 01:07:37,580 --> 01:07:38,560 Ek het hier die getal 2. 1515 01:07:38,560 --> 01:07:43,180 Dit baie geduld en baie maklik om te skroef en om per ongeluk verander 1516 01:07:43,180 --> 01:07:47,690 een waarde tot 3 en mis 'n ander waarde van 2. 1517 01:07:47,690 --> 01:07:52,460 So ek gaan hierdie weg te plaas abstrakte en gebruik van hierdie konstante dat, as sy 1518 01:07:52,460 --> 01:07:54,120 naam suggereer, verander nooit nie. 1519 01:07:54,120 --> 01:07:57,710 En nou, maak nie saak of ons het verskillende vasvrae hierdie jaar of volgende, ek 1520 01:07:57,710 --> 01:08:01,210 moet net om dit te verander in 'n plek, hier by die top. 1521 01:08:01,210 --> 01:08:02,720 >> So dit is al konstante is. 1522 01:08:02,720 --> 01:08:08,680 Intussen het die nuwe konseptuele kenmerk is dié van 'n skikking. 1523 01:08:08,680 --> 01:08:14,660 So die vierkantige hakies gee my hierdie baie vlotte en laat my gesamentlik 1524 01:08:14,660 --> 01:08:16,630 hulle noem grade hier. 1525 01:08:16,630 --> 01:08:17,990 So nou, laat ons sien wat ek gaan om dit te doen. 1526 01:08:17,990 --> 01:08:20,359 Hier in lyn 24 is die begin van 'n lus. 1527 01:08:20,359 --> 01:08:22,260 Dit is regtig niks fancy. 1528 01:08:22,260 --> 01:08:25,060 Dit is net die gebruik van vasvrae in plaas van 'n harde-gekodeerde nommer. 1529 01:08:25,060 --> 01:08:27,790 Maar daar is niks intellektueel verskillende daar van verlede week. 1530 01:08:27,790 --> 01:08:29,040 Dit is net printf. 1531 01:08:29,040 --> 01:08:35,490 So printf ("quiz aantal% d van% d"), want ek wil net uit te druk gee my quiz 1532 01:08:35,490 --> 01:08:38,050 nommer een van die twee en dan twee van twee. 1533 01:08:38,050 --> 01:08:39,850 So, dit is bloot 'n estetiese ding. 1534 01:08:39,850 --> 01:08:42,500 Maar die interessante deel is nou in lyn 27. 1535 01:08:42,500 --> 01:08:48,310 Ten einde te vul in een van die twee plekhouers met 'n swaai-punt 1536 01:08:48,310 --> 01:08:51,029 waarde, gebruik jy weer tussen vierkantige hakies. 1537 01:08:51,029 --> 01:08:55,620 In hierdie geval, ek gebruik i want for-lus het begin met i gelykstaande 1538 01:08:55,620 --> 01:08:57,560 watter waarde, glo? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> So op die eerste iterasie van hierdie lus, is dit asof ek 1541 01:09:01,350 --> 01:09:02,689 het hierdie kode. 1542 01:09:02,689 --> 01:09:05,580 Maar op die tweede iterasie van hierdie lus, is dit asof ek 1543 01:09:05,580 --> 01:09:07,750 het hierdie in my kode. 1544 01:09:07,750 --> 01:09:10,750 Maar die feit dat ek 'n veranderlike is die gebruik is volmaak, want, soos die naam 1545 01:09:10,750 --> 01:09:14,300 suggereer, is dit wisselende sy waarde op elke iterasie. 1546 01:09:14,300 --> 01:09:17,370 So ek vul hierdie skikking een plek op 'n slag. 1547 01:09:17,370 --> 01:09:18,910 Wat beteken hierdie skikking lyk? 1548 01:09:18,910 --> 01:09:21,430 Wel, die rede waarom ek hierdie super eenvoudige reghoek op die skerm getrek hier 1549 01:09:21,430 --> 01:09:23,350 tevore was vir hierdie rede. 1550 01:09:23,350 --> 01:09:27,279 'N skikking is net 'n stuk van die geheue, gevolg deur nog 'n stuk van die geheue, 1551 01:09:27,279 --> 01:09:30,109 gevolg deur 'n ander stuk van die geheue, en so meer. 1552 01:09:30,109 --> 01:09:35,260 So as my skikking van grootte 2, in hierdie geval hier, al wat ek sou doen word deur 1553 01:09:35,260 --> 01:09:37,590 tik in my quiz tellings, soos hier nie. 1554 01:09:37,590 --> 01:09:39,430 Ek het 100 op hierdie een. 1555 01:09:39,430 --> 01:09:42,020 En dan het ek 'n 99 op hierdie een. 1556 01:09:42,020 --> 01:09:46,040 Dan is hierdie geheue kan selfs nie gebruik word nie, want ek het net gevra die 1557 01:09:46,040 --> 01:09:48,689 rekenaar vir 'n verskeidenheid van grootte 2. 1558 01:09:48,689 --> 01:09:50,180 Hierdie vierkante is nog steeds daar. 1559 01:09:50,180 --> 01:09:50,340 Reg? 1560 01:09:50,340 --> 01:09:52,500 Jy het nog steeds twee GB RAM, selfs al is jy net 1561 01:09:52,500 --> 01:09:53,979 vra vir twee dryf. 1562 01:09:53,979 --> 01:09:58,710 Dus is die idee agter skikkings is dat die rekenaar net neem 'n stuk van die geheue 1563 01:09:58,710 --> 01:10:03,230 en verdeeld dan kleiner stukke rug aan rug Terug na. 1564 01:10:03,230 --> 01:10:04,740 En so het dit is al 'n skikking is. 1565 01:10:04,740 --> 01:10:09,080 Dit is 'n aangrensende stuk van die geheue, binnekant van wat jy kan dinge. 1566 01:10:09,080 --> 01:10:12,400 >> Nou dit gebeur dan doen net 'n paar vervelige rekenkunde. 1567 01:10:12,400 --> 01:10:16,170 As ek scroll down hier, dit is waar ek dan itereer oor die skikking. 1568 01:10:16,170 --> 01:10:19,410 Ek kom met die opsomming van al die waardes in die skikking. 1569 01:10:19,410 --> 01:10:22,390 En dan gebruik ek die ronde funksie hier om werklik te doen om die 1570 01:10:22,390 --> 01:10:23,940 som gedeel deur vasvrae. 1571 01:10:23,940 --> 01:10:27,450 Maar laat my beweeg my hand wat as 'n soort van genoeg rekenkundige vir nou. 1572 01:10:27,450 --> 01:10:30,010 Maar al wat vir my doen uiteindelik die berekening van 'n gemiddelde. 1573 01:10:30,010 --> 01:10:33,640 Sodat die eerste quiz plus tweede quiz, gedeel deur 2, en dan druk 1574 01:10:33,640 --> 01:10:34,700 dit uit as 'n int. 1575 01:10:34,700 --> 01:10:39,030 >> Maar laat ons nou die oorgang na 'n ander voorbeeld genoem string1, 1576 01:10:39,030 --> 01:10:42,370 wat verf 'n soortgelyke prentjie, maar met behulp van toue. 1577 01:10:42,370 --> 01:10:45,550 Laat my gaan voort en vereenvoudig hierdie vir net 'n oomblik. 1578 01:10:45,550 --> 01:10:48,340 En vergewe die inkeping vir nou. 1579 01:10:48,340 --> 01:10:52,280 Kennisgewing in lyn 19 van hierdie voorbeeld, ek kry 'n string van die gebruiker. 1580 01:10:52,280 --> 01:10:55,780 Maar let op wat ek volgende gaan doen in reëls 22 en verder. 1581 01:10:55,780 --> 01:11:00,260 Ek eintlik iterating van i tot - en dit is 'n nuwe truuk - 1582 01:11:00,260 --> 01:11:02,730 strlen, string lengte. 1583 01:11:02,730 --> 01:11:07,010 Dit is 'n funksie wat kom met C dat as jy slaag dit 'n string, dit vertel 1584 01:11:07,010 --> 01:11:08,950 hoeveel karakters in daardie string is. 1585 01:11:08,950 --> 01:11:09,440 Dis al. 1586 01:11:09,440 --> 01:11:12,520 Die feit dat dit is strlen in plaas van string lengte is net omdat dit 1587 01:11:12,520 --> 01:11:13,040 meer bondig. 1588 01:11:13,040 --> 01:11:17,100 30 jaar gelede, mense wat graag dinge om so bondig as moontlik te skryf. 1589 01:11:17,100 --> 01:11:19,080 Dus het ons dat die konvensie hier gehou. 1590 01:11:19,080 --> 01:11:21,730 i + + net beteken dat ek in elke iterasie inkrementeer. 1591 01:11:21,730 --> 01:11:24,310 En nou is dit agterkom, wat is baie interessant. 1592 01:11:24,310 --> 01:11:28,730 So in reël 24, Ek sê rekenaar, gee my 'n karakter, agt 1593 01:11:28,730 --> 01:11:30,770 stukkies, en noem dit c. 1594 01:11:30,770 --> 01:11:35,370 Maar wat is dit op die regterkant sê? 1595 01:11:35,370 --> 01:11:38,150 In Engels, wat beteken dat verteenwoordig? 1596 01:11:38,150 --> 01:11:40,070 [Onhoorbaar] 1597 01:11:40,070 --> 01:11:40,490 David J. Malan: Presies. 1598 01:11:40,490 --> 01:11:42,390 Gee my die eerste karakter in die skikking. 1599 01:11:42,390 --> 01:11:45,400 Of meer algemeen, gee my die i-de karakter in die skikking. 1600 01:11:45,400 --> 01:11:48,230 En besef dit is nou belangrik dat as die rekenaar wetenskaplikes, het ons eintlik is 1601 01:11:48,230 --> 01:11:49,330 tel van 0. 1602 01:11:49,330 --> 01:11:51,290 Jy hoef nie diskresie nou te begin om dit te doen. 1603 01:11:51,290 --> 01:11:54,580 Nou het jy om op te tree in ooreenstemming met die rekenaar se verwagtinge en 1604 01:11:54,580 --> 01:11:58,010 tel van nul, want [0] gaan om die eerste te wees 1605 01:11:58,010 --> 01:11:59,670 karakter in 'n string. 1606 01:11:59,670 --> 01:12:01,320 [1] gaan om die tweede te wees. 1607 01:12:01,320 --> 01:12:03,610 [2] gaan na die derde wees, en so meer. 1608 01:12:03,610 --> 01:12:08,840 So hierdie program, as ek dit stel - dit is, weer, string1. 1609 01:12:08,840 --> 01:12:11,040 >> So maak string1. 1610 01:12:11,040 --> 01:12:16,730 En nou loop ek string1 in my terminale venster. 1611 01:12:16,730 --> 01:12:19,180 Dit is wag vir insette, so ek gaan in te tik, sê Dawid. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 En nou is dit druk DAVID almal op verskillende lyne, want 1614 01:12:23,350 --> 01:12:24,430 let op wat ek doen. 1615 01:12:24,430 --> 01:12:27,510 Ek druk 'n karakter op 'n tyd. 1616 01:12:27,510 --> 01:12:29,100 Nou sal ons nie vandag in detail gaan op hierdie. 1617 01:12:29,100 --> 01:12:31,610 Maar ek verwyder 'n oomblik gelede hierdie tjek hier. 1618 01:12:31,610 --> 01:12:36,310 Dit blyk dat indien die gebruiker hang, opponerende, of net 1619 01:12:36,310 --> 01:12:41,780 verwar, kan jy eintlik nie 'n string van sommige lengte te gee. 1620 01:12:41,780 --> 01:12:43,640 As jy druk die verkeerde sleutel op die sleutelbord, kan jy gee 1621 01:12:43,640 --> 01:12:44,390 geen string at all. 1622 01:12:44,390 --> 01:12:47,790 Of as jy kwaadwillige, kan jy probeer om te plak in 'n GB waarde van 'n 1623 01:12:47,790 --> 01:12:49,380 opstel om die string te vul. 1624 01:12:49,380 --> 01:12:52,060 En as die rekenaar loop uit geheue, dit blyk dat ons gaan 1625 01:12:52,060 --> 01:12:54,310 terug te kry hierdie spesiale waarde genoem null. 1626 01:12:54,310 --> 01:12:57,550 So vir nou, weet net dat daar is hierdie spesiale waarde genoem null 1627 01:12:57,550 --> 01:13:01,000 sal ons in staat stel om te kyk wanneer ons uit geheue, onder andere. 1628 01:13:01,000 --> 01:13:07,330 >> Maar as Ek maak nou string2, let op 'n verskil hier. 1629 01:13:07,330 --> 01:13:09,760 Kennisgewing een verskil hier met string2. 1630 01:13:09,760 --> 01:13:13,260 Met string2 vir lus is 'n bietjie anders. 1631 01:13:13,260 --> 01:13:16,350 Laat my verwyder die nulls sodat ons kan praat oor die ander tyd. 1632 01:13:16,350 --> 01:13:18,460 Maar wat anders oor die loop hierdie tyd? 1633 01:13:21,580 --> 01:13:23,160 En ek kan terug gaan na die vorige voorbeeld. 1634 01:13:23,160 --> 01:13:24,800 So dit is weergawe 2. 1635 01:13:24,800 --> 01:13:27,020 Dit is 'n eerste weergawe. 1636 01:13:27,020 --> 01:13:31,935 Een, twee, een twee. 1637 01:13:35,030 --> 01:13:38,240 So het die strlen oproep is waar? 1638 01:13:38,240 --> 01:13:40,420 Dit is in die eerste deel van die for-lus. 1639 01:13:40,420 --> 01:13:43,060 Enige gedagtes waarom ek om dit te doen? 1640 01:13:43,060 --> 01:13:43,690 Ja. 1641 01:13:43,690 --> 01:13:46,010 [Onhoorbaar] 1642 01:13:46,010 --> 01:13:47,630 David J. Malan: sodat ons nie noem die funksie elke keer. 1643 01:13:47,630 --> 01:13:48,040 Presies. 1644 01:13:48,040 --> 01:13:50,350 Onthou vir loops dat hulle is super eenvoudige wanneer jy soort van 1645 01:13:50,350 --> 01:13:52,180 verstaan ​​dat dit die inisialisering, die 1646 01:13:52,180 --> 01:13:53,330 toestand is, en die update. 1647 01:13:53,330 --> 01:13:55,430 Die probleem is dat die toestand gebeur op elke 1648 01:13:55,430 --> 01:13:56,600 iterasie van die lus. 1649 01:13:56,600 --> 01:13:59,930 En so in hierdie voorbeeld hier, wat is sleg oor die feit 1650 01:13:59,930 --> 01:14:03,500 dat hierdie is my toestand? 1651 01:14:03,500 --> 01:14:05,920 Jy roep strlen weer en weer en weer. 1652 01:14:05,920 --> 01:14:08,990 Maar sodra ek het getik in Dawid, die lengte van die string is vyf. 1653 01:14:08,990 --> 01:14:11,560 En dit gaan nie op elke iterasie van die lus om te verander omdat die 1654 01:14:11,560 --> 01:14:15,560 string is nog steeds D-A-V-I-D. So, dit is 'n wenk wat gaan word 'n 1655 01:14:15,560 --> 01:14:19,650 toenemend 'n belangrike idee wat bekend staan ​​as 'n ontwerp besluit, waar - net nie 1656 01:14:19,650 --> 01:14:21,640 maak die rekenaar onnodige werk doen. 1657 01:14:21,640 --> 01:14:25,630 >> Nou, net soos 'n sneak preview van pset 2, pset 2 in die standaard uitgawe is 1658 01:14:25,630 --> 01:14:28,850 gaan jou uit te daag om eintlik 'n aantal van karakters, sommige implementeer 1659 01:14:28,850 --> 01:14:32,650 aantal enkripsie-algoritmes, sodat jy kan enkripteer en dekripteer 1660 01:14:32,650 --> 01:14:35,530 geheime boodskappe, baie soos die een Ralphie daar ontsyfer. 1661 01:14:35,530 --> 01:14:38,720 In die hacker uitgawe van pset 2, gaan ons 'n bietjie verder gaan. 1662 01:14:38,720 --> 01:14:42,010 Ons gaan u 'n lêer aan die hand van 'n werklike rekenaar stelsel wat 'n 1663 01:14:42,010 --> 01:14:45,690 hele klomp van gebruikersnaam en werklike geïnkripteer wagwoorde en die uitdaging 1664 01:14:45,690 --> 01:14:49,110 vir die hacker uitgawe gaan wees daardie wagwoorde en figuur te kraak 1665 01:14:49,110 --> 01:14:53,060 uit wat kriptografie of watter geheim is om werklik te gebruik 1666 01:14:53,060 --> 01:14:55,080 genereer die wagwoorde. 1667 01:14:55,080 --> 01:14:58,360 En ons gaan om dit te doen deur gebruik te maak van 'n nuwe funksie hier van C wat Ek sal gee, 1668 01:14:58,360 --> 01:15:02,200 jy net 'n demo van, wat bekend staan ​​as die command-line argumente. 1669 01:15:02,200 --> 01:15:05,930 >> So dit blyk, soos sommige van julle mag gesien het in die artikel of in handboeke, 1670 01:15:05,930 --> 01:15:09,850 hoof nie altyd leemte in hakies. 1671 01:15:09,850 --> 01:15:14,060 Dit blyk dat die hoof kan ook geskryf word soos hierdie, met twee argumente, 1672 01:15:14,060 --> 01:15:19,690 argc en bevat SPASIES, waar argc is die aantal woorde wat jy intik na 1673 01:15:19,690 --> 01:15:21,940 die program se naam op jou command line. 1674 01:15:21,940 --> 01:15:24,550 En bevat SPASIES is die werklike woorde. 1675 01:15:24,550 --> 01:15:29,470 En as die vierkantige hakies dui, bevat SPASIES is blykbaar 'n skikking. 1676 01:15:29,470 --> 01:15:33,720 Dit gaan om 'n string na 'n string na 'n string in die geheue. 1677 01:15:33,720 --> 01:15:36,170 So, wat ons gaan om in staat wees om dit te doen, begin met pset 2, 1678 01:15:36,170 --> 01:15:37,310 iets soos hierdie. 1679 01:15:37,310 --> 01:15:42,450 As Ek maak argv1, wat is 'n voorbeeld sal ons om terug te kom op Maandag, en hardloop 1680 01:15:42,450 --> 01:15:45,180 dit agterkom dat dit lyk nie iets om nog te doen. 1681 01:15:45,180 --> 01:15:47,050 Hy druk net sy eie naam. 1682 01:15:47,050 --> 01:15:53,220 Maar as ek sê totsiens klas, kennis dat hierdie program glo iterate 1683 01:15:53,220 --> 01:15:57,030 oor elk van die woorde wat op die instruksielyn getik is. 1684 01:15:57,030 --> 01:16:02,050 En die wyse waarop ons sal toegang tot die woorde wat die gebruiker kry 1685 01:16:02,050 --> 01:16:06,780 getik op die instruksielyn, is deur die verandering van die hoof, begin hierdie naweek, vanaf int 1686 01:16:06,780 --> 01:16:10,710 main (void) int main (argc, bevat SPASIES). 1687 01:16:10,710 --> 01:16:13,700 En sal dus gebore word command line argumente. 1688 01:16:13,700 --> 01:16:17,210 En as jy regtig gesofistikeerde op hierdie, sal jy in staat wees om te skryf 1689 01:16:17,210 --> 01:16:21,370 regtig trippy programme, soos hierdie een hier, wat gaan bo en buite 1690 01:16:21,370 --> 01:16:25,520 sommige van die funksie het ons tot dusver gedoen het, maar almal baie kragtige. 1691 01:16:25,520 --> 01:16:27,330 >> So ons sal laat dit op die skerm. 1692 01:16:27,330 --> 01:16:29,160 En ons sal sien wat jy op Maandag.