1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Vika 2, Áframhaldandi] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Harvard University] 3 00:00:04,220 --> 00:00:06,880 [Þetta er CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Allt í lagi. Þetta er CS50, og það er í lok 2. viku. 5 00:00:10,990 --> 00:00:14,410 Ef þú býst við að vera svöng í kringum þennan tíma á morgun, 6 00:00:14,410 --> 00:00:18,620 vita að við erum að fara að boða sem lítill hópur á morgun, fimmtudaginn, 13:15. 7 00:00:18,620 --> 00:00:21,360 Það er þetta URL hér ef þú vilt að RSVP. 8 00:00:21,360 --> 00:00:26,740 Space er takmarkaður, svo vinsamlegast fyrirgefið ef eyðublaðið er fyllt upp með þeim tíma sem þú fyllir þetta út. 9 00:00:26,740 --> 00:00:29,300 Önnur slóð, þó að það gæti verið áhugavert er þetta. 10 00:00:29,300 --> 00:00:32,369 Í réttlátur óður í tíma mánaðar, sem auðvitað er að fara að vera í boði 11 00:00:32,369 --> 00:00:36,890 allt í víðara samhengi gegnum EDX, um hvaða fólk á Netinu verður hægt að fylgjast með, 12 00:00:36,890 --> 00:00:39,380 taka þátt í námskeiðinu alveg virkur, í raun. 13 00:00:39,380 --> 00:00:42,270 Þeir ætla að nota CS50 Tæki og CS50 Ræddu 14 00:00:42,270 --> 00:00:45,490 og flestir af hinum ýmsu hugbúnað sem við þegar höfum verið að nota þessa önn. 15 00:00:45,490 --> 00:00:48,710 Og eitt af þeim verkefnum sem við viljum að taka á sem tilraun á þessu ári 16 00:00:48,710 --> 00:00:51,930 er að sjá hversu mikið efni við getum þýtt 17 00:00:51,930 --> 00:00:53,960 í öðrum töluð og skrifað tungumál. 18 00:00:53,960 --> 00:00:57,500 Svo ef þú gætir hafa áhuga á að taka þátt í þessu verkefni 19 00:00:57,500 --> 00:01:02,270 þar sem við munum veita ensku afrit og texti fyrir fyrirlestra á námskeiði um 20 00:01:02,270 --> 00:01:05,450 og stuttbuxur og málstofur og hlutar og þess háttar, 21 00:01:05,450 --> 00:01:08,200 Ef þú talar reiprennandi eða skrifa reiprennandi nokkur önnur tungumál, 22 00:01:08,200 --> 00:01:12,290 langar mikið til að taka þátt þig í þessu verkefni þar sem þú tekur á einn eða fleiri af the vídeó, 23 00:01:12,290 --> 00:01:15,200 þýða þau yfir á tungumál sem þú þekkir nokkuð vel. 24 00:01:15,200 --> 00:01:18,700 >> Til að gefa þér hugmynd um tengi, það er þetta vefur-undirstaða notandi tengi 25 00:01:18,700 --> 00:01:22,090 að við munum vera með sem vilja búa í raun UI svona. 26 00:01:22,090 --> 00:01:24,290 Þetta var mér að kenna sumir Halloween fyrir, 27 00:01:24,290 --> 00:01:27,390 og hægra megin í svörtu hliðina á þessum tíma frímerki, 28 00:01:27,390 --> 00:01:31,210 þú munt sjá ýmislegt sem kom út úr munni mínum um daginn, 29 00:01:31,210 --> 00:01:34,850 og svo fyrir neðan það sem þú munt vera fær um að þýða í einhverjum öðrum tungumálum 30 00:01:34,850 --> 00:01:38,690 nákvæmlega það sem kortlagning er á milli, í þessu tilfelli, ensku og segja spænsku. 31 00:01:38,690 --> 00:01:40,440 Svo það er í raun mjög notandi-vingjarnlegur tól. 32 00:01:40,440 --> 00:01:43,370 Þú getur til baka og spóla áfram mjög auðvelt með flýtileiðum hljómborð. 33 00:01:43,370 --> 00:01:47,490 Svo ef þú vilt taka þátt í þessari tilraun og hafa orð þín séð og lesið 34 00:01:47,490 --> 00:01:51,850 um hugsanlega þúsundir af fólkinu þarna úti, þá skaltu ekki hika við að taka þátt. 35 00:01:51,850 --> 00:01:54,350 Eitt orð um kettlingur frá mánudag. 36 00:01:54,350 --> 00:02:00,350 Svo að við höfum sent óhóflega skelfilegur skilaboð, gera grein fyrir því, eins og skrifstofa klst benda 37 00:02:00,350 --> 00:02:03,300 og eins kafla benda, hönnun þess er mjög mikið 38 00:02:03,300 --> 00:02:07,360 hafa nemendur í samstarfi og að tala til að vinna í gegnum setur vandamál 39 00:02:07,360 --> 00:02:11,260 og vandamál saman og í raun línan bara kemur niður á, 40 00:02:11,260 --> 00:02:16,010 aftur, að vinna þú sendir að lokum ætti að vera þitt eigið. 41 00:02:16,010 --> 00:02:18,860 Og svo alveg heiðarlega, á skrifstofutíma það er alveg eðlilegt, 42 00:02:18,860 --> 00:02:22,240 Það er alveg að búast jafnvel, að spjalla við einhvern vin við hliðina á þér. 43 00:02:22,240 --> 00:02:24,370 >> Ef hann eða hún er í erfiðleikum með nokkrum efni og þú ert eins og, 44 00:02:24,370 --> 00:02:27,940 "Oh, jæja, láta mig gefa þú a svipinn af einhverju línu af kóða sem ég skrifaði," það er allt í lagi, 45 00:02:27,940 --> 00:02:31,250 sem gerist, og það er mjög mikið stuðla, held ég, með aðferð við að læra. 46 00:02:31,250 --> 00:02:36,750 Ef línan verður farið yfir er þegar höfuð er tegund af halla hérna í allt of margar sekúndur 47 00:02:36,750 --> 00:02:41,160 eða mínútur til að virkilega að hafa bara verið Unblocking tækifæri fyrir vini þínum, 48 00:02:41,160 --> 00:02:44,160 og örugglega þegar hlutirnir fá skipst með tölvupósti og Dropbox og þess háttar, 49 00:02:44,160 --> 00:02:45,640 það líka er lína. 50 00:02:45,640 --> 00:02:48,620 Svo fyrir alla muni líða vel og finnst hvattir til að spjalla við vini 51 00:02:48,620 --> 00:02:52,810 og bekkjarfélagar um psets og fleira og bara gera sér grein fyrir að það sem þú sendir að lokum 52 00:02:52,810 --> 00:02:57,340 ætti í raun að vera að vara við sköpun og ekki einhver annar. 53 00:02:57,340 --> 00:03:00,490 Og svo einn af tilteknum lénum vandamál fyrir pset2, 54 00:03:00,490 --> 00:03:04,740 sem mun koma út seint annað kvöld, er að kafa í heim dulmál, 55 00:03:04,740 --> 00:03:08,970 sem er list að dulkóða eða spæna upplýsingar, 56 00:03:08,970 --> 00:03:12,600 og þetta tengist að lokum til the veröld af öryggi. 57 00:03:12,600 --> 00:03:16,560 Nú, öryggi fyrir flest okkar koma í formi nokkuð mundane leiðum. 58 00:03:16,560 --> 00:03:19,050 Allar okkar hafa notendanöfn og lykilorð, 59 00:03:19,050 --> 00:03:23,450 og allir með mjög slæma notendanöfn og lykilorð, mest líklega. 60 00:03:23,450 --> 00:03:28,240 >> Ef lykilorðið þitt er það sama á mörgum vefsíðum, það er líklega ekki besta hugmynd, 61 00:03:28,240 --> 00:03:30,070 sem við munum ræða í átt í lok hverrar annar. 62 00:03:30,070 --> 00:03:34,720 Ef lykilorðið þitt er skrifað á Sticky huga - enginn brandari - á þinn skjár, 63 00:03:34,720 --> 00:03:38,350 sem er of ekki endilega besta hönnun en alveg algengt fyrirbæri. 64 00:03:38,350 --> 00:03:42,470 Og ef þú ert ekki að nota dulmál til að dulkóða lykilorð, 65 00:03:42,470 --> 00:03:44,210 þau eru sérstaklega viðkvæm. 66 00:03:44,210 --> 00:03:47,270 Svo ef þú heldur að þú ætlar að vera frábær snjall með því að hafa falinn Word skjal 67 00:03:47,270 --> 00:03:49,910 einhvers staðar á harða diskinum sem er öll lykilorð 68 00:03:49,910 --> 00:03:53,670 en það er í möppu sem enginn er að fara að líta á, að of er ekki mjög öruggt kerfi. 69 00:03:53,670 --> 00:03:56,990 Og svo hvað pset2 munu kynna er þetta list dulmál 70 00:03:56,990 --> 00:04:02,010 og spæna upplýsingar svo að hlutirnir eins og lykilorð eru allir öruggari. 71 00:04:02,010 --> 00:04:05,790 Samhengi hér er að með óörugg gögn 72 00:04:05,790 --> 00:04:07,930 kemur tækifæri til að dulkóða það og Scramble það. 73 00:04:07,930 --> 00:04:11,470 Og svo þetta, til dæmis, er dæmi um dulkóðuðu skilaboð. 74 00:04:11,470 --> 00:04:14,700 Þetta segir í raun eitthvað í ensku, en það er greinilega ekki að fullu augljós. 75 00:04:14,700 --> 00:04:18,279 Og við munum koma í hring í dag til að stríða í sundur hvað þetta leynileg skilaboð hér. 76 00:04:18,279 --> 00:04:23,490 En í hinum raunverulega heimi tölvur, gera það ekki einu sinni líta út eins og þeir gætu verið á ensku setningar. 77 00:04:23,490 --> 00:04:28,430 Til dæmis, þetta er það sem þú getur fundið á stöðluðu Linux eða Mac eða UNIX tölva 78 00:04:28,430 --> 00:04:32,070 í skrá sem var einu sinni kallað lykilorð skrá. 79 00:04:32,070 --> 00:04:34,200 >> Nú það hefur verið flutt til annarra staða. 80 00:04:34,200 --> 00:04:39,210 En ef þú horfir á réttum stað á kerfinu, verður þú ekki aðeins notandanafn 81 00:04:39,210 --> 00:04:43,400 eða að öðru fólki á kerfinu, en þú munt sjá dulkóðuð útgáfa af aðgangsorði sínu. 82 00:04:43,400 --> 00:04:47,980 Reyndar er orðið Crypt þar bendir til þess að eftirfarandi efni er dulkóðuð, 83 00:04:47,980 --> 00:04:52,680 og þetta röð af því er virðist af handahófi bókstafi og stafi og númer og svo framvegis 84 00:04:52,680 --> 00:04:56,480 er hægt að decrypted aðeins almennt vita nokkur leyndarmál - 85 00:04:56,480 --> 00:04:58,840 leyndarmál orð, leyndarmál númer - 86 00:04:58,840 --> 00:05:03,160 og svo örugglega, að list dulmál endanum snýst allt um að treysta á einhvers konar 87 00:05:03,160 --> 00:05:05,650 og vita eitthvað sem einhver annar gerir það ekki. 88 00:05:05,650 --> 00:05:10,090 Þannig að við munum kanna þetta í aðeins meiri smáatriðum í dag og í pset að koma. 89 00:05:10,090 --> 00:05:12,200 Og nú orð á staðið / ekki staðið. 90 00:05:12,200 --> 00:05:15,360 Sérstaklega eins og sumir af þú hefur kafa í pset1, tækið, 91 00:05:15,360 --> 00:05:19,080 og mjög nýr heimur fyrir þig, grein fyrir því að óánægju og rugl 92 00:05:19,080 --> 00:05:21,700 og bara tæknilegir erfiðleikar eru alveg að vænta, 93 00:05:21,700 --> 00:05:24,180 sérstaklega með fyrsta pset, þar sem það er bara svo mikið nýtt, 94 00:05:24,180 --> 00:05:27,730 bara að fá kunnuglegur með LS og CD og allar þessar Bogagöng skipanir 95 00:05:27,730 --> 00:05:33,050 og nýtt umhverfi, og það er aðskilið frá raunverulegum efni og forritun sig. 96 00:05:33,050 --> 00:05:36,940 Svo grein líka að það eru vissulega skrifstofutímarnir sem til sem styðja uppbyggingu. 97 00:05:36,940 --> 00:05:38,880 >> Deildir byrja þetta kemur sunnudagur. 98 00:05:38,880 --> 00:05:42,960 En mest um vert, ef þú ert að tilfinning bara að það er ekki heimur fyrir þig, 99 00:05:42,960 --> 00:05:44,710 grein fyrir því að það er í raun er bara að taka tíma. 100 00:05:44,710 --> 00:05:48,600 Og ef ekki væri fyrir þetta tækifæri árum fyrir mig að taka bekknum framhjá / mistakast, 101 00:05:48,600 --> 00:05:50,990 heiðarlega, aldrei hefði ég jafnvel fæti í skólastofunni. 102 00:05:50,990 --> 00:05:53,690 Og þú getur breytt þessu fram, segjum fimmta Mánudagur námskeiðsins, 103 00:05:53,690 --> 00:05:58,280 þannig að ef þú ert á brún nú átta sig á því frekar en höfuð í nokkur önnur hafsvæði með öllu, 104 00:05:58,280 --> 00:06:01,260 gera vissulega íhuga bara að breyta til að fara framhjá / mistakast. 105 00:06:01,260 --> 00:06:04,570 Aftur, það er í raun ekki þessi menning hér á Harvard um að taka hlutina framhjá / mistakast 106 00:06:04,570 --> 00:06:08,670 þar sem allir vilja í raun að ná eða overachieve, 107 00:06:08,670 --> 00:06:11,130 en satt, þetta er a dásamlegur leið til að reyna eitthvað út 108 00:06:11,130 --> 00:06:16,720 sem gæti ekki þekkja þig, og þú munt á endanum að gera, í flestum tilvikum, alveg fínn, 109 00:06:16,720 --> 00:06:18,210 kannski mikið til að koma á óvart þinn. 110 00:06:18,210 --> 00:06:20,980 Og í fleiri steypu hugtök, það sem ég held framhjá / mistakast yfirleitt gerir, 111 00:06:20,980 --> 00:06:22,940 sérstaklega þar sem þú gætir hafa upplifað með pset0, 112 00:06:22,940 --> 00:06:26,560 Ef þú setur í 10 klst, 15 klst, 25 klst í sumar pset 113 00:06:26,560 --> 00:06:29,920 og þú ert bara að lemja höfðinu við vegg og það er að fá frábær seint á kvöldin 114 00:06:29,920 --> 00:06:33,950 en þú hefur tekið pset 90% af leiðinni og þú bara getur ekki fundið út eitt, 115 00:06:33,950 --> 00:06:36,520 fara / ekki raunverulega tekur brún burt af bekknum eins og þetta, 116 00:06:36,520 --> 00:06:39,100 þar sem þú getur raða af hamingjusamlega segja "Allt í lagi, ég veit að það er ekki fullkomið, 117 00:06:39,100 --> 00:06:42,350 en ég vann rassinn minn burt á þessu, ég er nokkuð ánægð með þar sem það endaði, " 118 00:06:42,350 --> 00:06:44,850 og það mun uppfylla væntingar um staðið / ekki staðið. 119 00:06:44,850 --> 00:06:47,540 Svo halda það í huga. Allt í lagi. 120 00:06:47,540 --> 00:06:50,520 >> Svo þeir sem hafa barist við að nota Harvard University Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 veit að það er CS50 SSID, Wi-Fi tengingu, fljótandi í kring 122 00:06:54,780 --> 00:06:56,490 sem þú gætir hafa betri heppni fyrir. 123 00:06:56,490 --> 00:07:00,130 Það er lítið kaldhæðnislegt að lykilorð fyrir þetta, ef þú vildi eins og til að reyna að tengjast þessu 124 00:07:00,130 --> 00:07:08,350 fyrir betri hraða - og láttu okkur vita ef það er ekki til betri - er 12345, alla leið upp í 8 125 00:07:08,350 --> 00:07:10,910 því 8 er öruggari en 5. 126 00:07:10,910 --> 00:07:16,910 Svo ef þú þarft að Wi-Fi lykilorð tengjast CS50 þráðlaust hér, 12345678, 127 00:07:16,910 --> 00:07:20,380 og eftir á CS50 Ræðið ef þú ert enn með hléum málefni tengingu, 128 00:07:20,380 --> 00:07:25,420 og við munum láta völd hægt að vita fyrir þetta rými. Allt í lagi. 129 00:07:25,420 --> 00:07:32,230 Svo fljótur beitu, sérstaklega fyrir þá sem eru aðdáandi drengir eða stúlkur af öllu Apple. 130 00:07:32,230 --> 00:07:37,460 Það sem ég gróf upp úr fyrir nokkrum árum var þessi skrá hér iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 bara svona gera meira steypu og flóknari 132 00:07:39,930 --> 00:07:42,560 sumir af the fleiri undirstöðu C forrit sem við höfum verið að skrifa. 133 00:07:42,560 --> 00:07:46,910 Þannig að ég opnaði þessa skrá, iUnlock.c. Það er í boði á fyrirlestra síðunni í dag. 134 00:07:46,910 --> 00:07:49,810 Á vinstri hönd hlið þú sérð langan lista af aðgerðum. 135 00:07:49,810 --> 00:07:53,230 Svo maður sem skrifaði þetta skrifaði upp mikið af störfum, meira en bara helstu. 136 00:07:53,230 --> 00:07:57,340 Hann notaði heild búnt af bókasöfnum hér, og ef við byrjum að fletta í gegnum, 137 00:07:57,340 --> 00:08:04,890 hvað þetta raunverulega er er mjög fyrstur, ég trúi, sprunga í upprunalegu iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Þegar þú vildir Flótti upprunalega iPhone, sem þýðir untether það frá AT & T 139 00:08:09,830 --> 00:08:13,710 og í raun setja sérstakan hugbúnað á það og gera það sem Apple vildi ekki fólk að gera, 140 00:08:13,710 --> 00:08:18,480 einhver tók tíma til að reikna út nákvæmlega hvernig þeir gætu nýta hugbúnað galla, 141 00:08:18,480 --> 00:08:22,690 mistök, galla, í Apple hugbúnaði, og þannig fæddist iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 að ef þú saman það upp á tölvunni þinni og setja í embætti það á iPhone 143 00:08:26,760 --> 00:08:29,430 sem var tengt við tölvuna í gegnum, segja, USB snúru, 144 00:08:29,430 --> 00:08:32,450 þetta myndi gefa þér stjórnsýslu eða rót forréttindi á iPhone 145 00:08:32,450 --> 00:08:34,620 og láta þig gera nokkurn veginn hvað sem þú vilt. 146 00:08:34,620 --> 00:08:36,400 Og það hefur verið þessi heillandi köttur og mús leikur 147 00:08:36,400 --> 00:08:39,340 milli Apple og the hvíla af the veröld sérstaklega eins og þeir, eins og mörg fyrirtæki, 148 00:08:39,340 --> 00:08:43,350 reyna að læsa efni þeirra niður þannig að þú getur aðeins gert við það það sem þeir ætla. 149 00:08:43,350 --> 00:08:47,360 En þökk sé fólki eins og þetta og skilning á lágmark-láréttur flötur upplýsingar - 150 00:08:47,360 --> 00:08:50,830 og í þessu tilfelli C forritun - og mikið af kunnuglega býr 151 00:08:50,830 --> 00:08:55,280 að við höfum byrjað að spila með, þú ert fær um að raunverulega nýta vélbúnað 152 00:08:55,280 --> 00:08:59,250 á þann hátt sem þú sérð vel á sig kominn og ekki endilega sumir lögaðila. 153 00:08:59,250 --> 00:09:01,600 Svo til dæmis, ég hef ekki hugmynd um hvað allt þetta er að gera, 154 00:09:01,600 --> 00:09:03,580 en GetVersion hljómar nokkuð augljóst, 155 00:09:03,580 --> 00:09:05,710 og það lítur út eins og þetta sé aðgerð sem þessi aðili skrifaði. 156 00:09:05,710 --> 00:09:09,250 Það tekur einhvers konar heiltala sem rök, ekki aftur neitt, 157 00:09:09,250 --> 00:09:13,710 en virðist lykkja með for lykkju hér og ef skilyrði, ef brot ástand, 158 00:09:13,710 --> 00:09:16,770 og einhvern veginn tengist útgáfu númer ef við skruna niður, 159 00:09:16,770 --> 00:09:19,650 jafnvel þó að mikið af þessum leitarorðum eru að fara að vera nýr. 160 00:09:19,650 --> 00:09:22,590 Og það er allt fullt af aðgerðum á hér höfum við aldrei séð og gæti aldrei sjá 161 00:09:22,590 --> 00:09:24,350 á meðan á önn. 162 00:09:24,350 --> 00:09:29,160 >> Í lok dagsins, segir það sömu reglur og rökfræði sem við höfum verið að spila með svona langt. 163 00:09:29,160 --> 00:09:34,340 Svo er þetta allt of gamall til að sprunga iPhone 3s þínar eða 4S eða fljótlega 5s þessa dagana, 164 00:09:34,340 --> 00:09:38,830 en vita að það er allt mjög mikið úr þessum heimi sem við höfum kafa í. 165 00:09:38,830 --> 00:09:42,280 Við skulum taka a líta á a lítill fleiri einfalt dæmi: 166 00:09:42,280 --> 00:09:46,260 þetta, bara til að fá hlýja upp með sumir setningafræði og einnig nokkur önnur gögn tegund 167 00:09:46,260 --> 00:09:48,910 sem við höfum talað um, en hef í raun ekki séð í C. 168 00:09:48,910 --> 00:09:53,670 Þetta er skrá sem heitir positive1.c og á athugasemdum efst, 169 00:09:53,670 --> 00:09:56,070 þetta krefst bara að notandi að veita jákvæð tala. 170 00:09:56,070 --> 00:09:59,910 Svo er það dæmi um do-while lykkju, sem er gott fyrir notandann gagnvirka forrit 171 00:09:59,910 --> 00:10:02,070 þar sem þú þarft að segja notendur til að gera eitthvað, 172 00:10:02,070 --> 00:10:05,530 og ef þeir vinna ekki að æpa á hana eða hafna inntak þeirra. 173 00:10:05,530 --> 00:10:10,480 Tilfelli í benda: Ég er að fara að gera línur 19 með 24 174 00:10:10,480 --> 00:10:14,620 svo lengi sem notandinn hefur ekki gefið mér jákvæða tölu. 175 00:10:14,620 --> 00:10:21,340 Þetta smáatriði hér á línu 18, af hverju gerði ég lýsa n yfir allri þessari lykkja reisa 176 00:10:21,340 --> 00:10:26,870 eins og til hægri við hliðina á línu 22 þar sem ég í raun sama til að fá n? Já. 177 00:10:26,870 --> 00:10:29,330 [Nemandi] Gildissvið. >> Já, þannig að þetta mál um gildissvið. 178 00:10:29,330 --> 00:10:31,770 Og í skilmálum leikmaður er, hvað þýðir svigrúm vísa til? 179 00:10:34,880 --> 00:10:41,560 Já. >> [Inaudible nemandi svar] >> Getur þú talað svolítið hávær? 180 00:10:41,560 --> 00:10:45,440 [Nemandi] Þar sem þú getur fengið aðgang að breytu. >> Perfect. 181 00:10:45,440 --> 00:10:47,610 Hvar er hægt að fá aðgang að tiltekna breytu. 182 00:10:47,610 --> 00:10:50,990 Og almennt er þumalputtaregla svona langt hefur verið að umfang sumra breytu 183 00:10:50,990 --> 00:10:56,140 er skilgreind með nýjustu hrokkið axlabönd sem þú hefur séð. 184 00:10:56,140 --> 00:11:03,070 >> Og svo í þessu tilfelli, ef ég gerði mistök að lýsa N á línu 22, þessi lína myndi virka. 185 00:11:03,070 --> 00:11:10,840 Ég myndi fá int, og ég myndi setja það inn í þá breytu n í línu 22, 186 00:11:10,840 --> 00:11:17,060 en hvaða línu af kóða myndi nú hafa ekki hugmynd um hvað ég er að tala um? >> [Nemandi] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, og það kemur í ljós 24 og vegna þess að í þessu tilviki það fellur utan hrokkið axlabönd. 188 00:11:23,840 --> 00:11:28,550 Svo bara smá óþægindi en mjög auðvelt að leysa með því einfaldlega að lýsa því yfir að breyta 189 00:11:28,550 --> 00:11:30,700 utan aðgerðina sjálfa. 190 00:11:30,700 --> 00:11:32,760 Við munum sjá seinna í dag er hægt að fara einu skrefi lengra 191 00:11:32,760 --> 00:11:34,940 og þú gætir jafnvel fá smá latur. 192 00:11:34,940 --> 00:11:39,660 Og þetta er ekki til að mæla með almennt, en þú gætir jafnvel fá latur 193 00:11:39,660 --> 00:11:44,150 og setja breytu heimsvísu, svo að segja, ekki inni í fall, ekki inni í lykkju 194 00:11:44,150 --> 00:11:49,800 en í skránni sjálfri, utan allar aðgerðir sem þú hefur skrifað, eins og ég gerði hér á línu 15. 195 00:11:49,800 --> 00:11:55,220 Þetta er yfirleitt hleypa brúnum yfir, en gera sér grein fyrir að þetta er lausn stundum til annarra vandamála, 196 00:11:55,220 --> 00:11:56,910 eins og við munum að lokum sjá. 197 00:11:56,910 --> 00:11:59,500 Þannig að nú munum við skilja það svona, en við skulum sjá hvort við getum umrita þetta 198 00:11:59,500 --> 00:12:02,360 bara að byrja að tjá okkur smá öðruvísi. 199 00:12:02,360 --> 00:12:05,550 Þetta forrit, bara til að vera skýr, er positive1. 200 00:12:05,550 --> 00:12:11,980 Leyfðu mér að fara á undan hér og Telnet minn gera positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Safnar lagi. Ég ætla að keyra positive1, Enter. 202 00:12:15,080 --> 00:12:19,250 Ég krefst að þú gefur mér jákvæð heiltala. Ég segi -1. Það virkaði ekki. 203 00:12:19,250 --> 00:12:22,340 0, 99. Það virðist virka. 204 00:12:22,340 --> 00:12:25,310 Kannski ekki mest krefjandi próf, en á minnstur það er gott geðheilbrigði stöðva 205 00:12:25,310 --> 00:12:27,100 að við erum á réttri leið. 206 00:12:27,100 --> 00:12:29,570 >> Svo nú langar mig að fara á undan og opna útgáfu 2 af þessu, 207 00:12:29,570 --> 00:12:32,800 og hvað er öðruvísi nú þegar? 208 00:12:32,800 --> 00:12:39,030 Það útfærir það sama, en það er stökk út eins og greinilega mismunandi að þessu sinni? 209 00:12:40,790 --> 00:12:47,090 Þetta bool í grænu. Það er lögð áhersla á grænt, þetta leitarorð þekktur sem bool, sem er gagna tegund. 210 00:12:47,090 --> 00:12:50,510 Það kemur ekki innbyggður í öllum útgáfum af C. 211 00:12:50,510 --> 00:12:52,650 Þú þarft að fela tiltekna bókasafn. 212 00:12:52,650 --> 00:12:56,460 Í okkar tilviki, ma ég CS50 bókasafn svo að við höfum aðgang að bool. 213 00:12:56,460 --> 00:12:59,860 En í línu 18, virðast við að hafa Boolean gildi hér kallast þakklát. 214 00:12:59,860 --> 00:13:02,190 Ég gæti hafa kallað þetta neitt, en ég kallaði það þakklát 215 00:13:02,190 --> 00:13:04,750 bara svona segja sumir merkingartækni merkingu. 216 00:13:04,750 --> 00:13:07,700 Svo fyrst á línu 18, ég er greinilega ekki þakklát 217 00:13:07,700 --> 00:13:12,230 því Boolean gildi þakklátur er frumstilla til falskur í línu 18. 218 00:13:12,230 --> 00:13:16,500 Og svo virðist sem ég hef gert hér í línum 21 til 23 219 00:13:16,500 --> 00:13:19,200 er ég bara svona endurskrifa rökfræði mína. 220 00:13:19,200 --> 00:13:26,100 Svo ekki virka öðruvísi, en í línu 22 núna er ég að athuga hvort int notandinn hefur veitt 221 00:13:26,100 --> 00:13:31,360 er meiri en 0, þá breyti ég bara gildi þakklát satt. 222 00:13:31,360 --> 00:13:35,590 Og hvers vegna þarf ég að gera það? Vegna þess að í línu 25, virðist ég ætla að athuga með ástand. 223 00:13:35,590 --> 00:13:39,760 Gera þessa lykkju en þakklátur er falskur. 224 00:13:39,760 --> 00:13:42,960 Svo ég lagði þetta í stað útgáfu 1 225 00:13:42,960 --> 00:13:47,050 vegna þess að það er að minnsta kosti svolítið meira innsæi kannski, það er aðeins meira grundvölluð á ensku. 226 00:13:47,050 --> 00:13:51,980 Svo gera eftirfarandi þegar þú ert ekki þakklát eða meðan þakklátur er falskur. 227 00:13:51,980 --> 00:13:56,220 Og í þetta sinn líka að ég virðist ekki gætt að muna það sem notandinn slegið inn 228 00:13:56,220 --> 00:14:00,050 vegna fyrirvara það er engin breyta n, svo í raun, lítið hvítt lygi þarna. 229 00:14:00,050 --> 00:14:03,290 >> Virkni, the program er a hluti ólíkur þegar við að fá til the botn af því 230 00:14:03,290 --> 00:14:04,960 vegna þess að ég er ekki að muna hvað n er. 231 00:14:04,960 --> 00:14:09,120 En ég vildi að sýna hér líka að jafnvel þó að við höfum séð GetInt 232 00:14:09,120 --> 00:14:13,780 og GetString notuð á hægri hönd hlið af jafngildir merki svona langt 233 00:14:13,780 --> 00:14:17,310 svo að við minnumst gildi, tæknilega, það er ekki nauðsynlegt. 234 00:14:17,310 --> 00:14:20,290 Ef af einhverri ástæðu þú bara ekki sama að vista gildi, 235 00:14:20,290 --> 00:14:25,540 þú vilt bara til að athuga gildi, eftir því að við getum einfaldlega að skrifa þetta sem GetInt, 236 00:14:25,540 --> 00:14:27,320 opna paren, loka paren. 237 00:14:27,320 --> 00:14:30,570 Þessi aðgerð er að fara að skila gildi, eins og við höfum verið að segja. 238 00:14:30,570 --> 00:14:32,220 Það er að fara að gefa þér aftur að int. 239 00:14:32,220 --> 00:14:34,460 Og svo ef þú heldur andlega að það gerist, 240 00:14:34,460 --> 00:14:38,190 þegar ég tegund í 99, GetInt skilar númer 99, 241 00:14:38,190 --> 00:14:41,840 og svo eðli, það er eins og númerið mitt væri í raun það. 242 00:14:41,840 --> 00:14:45,950 Svo ef 99 er örugglega meiri en 0, þá verður þakklát satt, 243 00:14:45,950 --> 00:14:50,810 þá áttar lína 25 ooh, erum við gert vegna þess að ég er nú þakklát, 244 00:14:50,810 --> 00:14:53,970 og í samræmi 26, segjum við einfaldlega: "Takk fyrir jákvæða heiltölu!" 245 00:14:53,970 --> 00:14:55,960 hvað það gerðist að vera. 246 00:14:55,960 --> 00:14:59,140 Nú skulum gera lítilsháttar syntactic sykur hér, svo að segja. 247 00:14:59,140 --> 00:15:04,670 Við skulum sjá hvort við getum hreinsa upp þessa línu 25 með þessu þriðja og síðasta afbrigði í positive3. 248 00:15:04,670 --> 00:15:13,600 >> Tilkynning eini munurinn nú er það lína af kóða? >> [Nemandi] 25. >> [Malan] Já, 25. 249 00:15:13,600 --> 00:15:17,680 Og við höfum ekki séð þetta bragð bara enn, en við fengum að sjá upphrópunarmerki á mánudag, 250 00:15:17,680 --> 00:15:21,070 sem táknar hvað? >> [Nemandi] ekki. >> Ekki eða neitun. 251 00:15:21,070 --> 00:15:23,510 Svo taka Boolean gildi og flettir gildi. 252 00:15:23,510 --> 00:15:25,810 True verður rangar, rangar verður satt. 253 00:15:25,810 --> 00:15:30,420 Svo þetta, myndi ég leggja til, er jafnvel svolítið meira innsæi leið að skrifa kóðann 254 00:15:30,420 --> 00:15:33,430 því ég frumstilla enn þakklát falskur, ég enn eftir, 255 00:15:33,430 --> 00:15:36,010 Ég sett þakklát við þegar þar að kemur, 256 00:15:36,010 --> 00:15:40,880 en nú getur þú í raun bara þýða þennan kóða munnlega vinstri til hægri, 257 00:15:40,880 --> 00:15:45,630 meðan (þakklátur!), vegna þess að Bang eða upphrópunarmerki táknar hugmyndina um ekki, 258 00:15:45,630 --> 00:15:47,580 svo á meðan ekki þakklát. 259 00:15:47,580 --> 00:15:49,900 Svo aftur, við höfum ekki tekið neinar nýjar hugmyndir í sjálfu sér. 260 00:15:49,900 --> 00:15:53,730 Við ræddum um Booleans aftur þegar við spiluðum við grunni, 261 00:15:53,730 --> 00:15:56,720 en átta sig nú getum við bara byrjað að skrifa kóðann á margan mismunandi hátt. 262 00:15:56,720 --> 00:16:01,060 Svo sérstaklega í pset1 ef þú ert svona í erfiðleikum með að reikna út hvernig á að skrifa eitthvað forrit, 263 00:16:01,060 --> 00:16:04,340 Líkurnar eru að þú ert í heppni vegna þess að það getur verið hvaða tala af lausnir 264 00:16:04,340 --> 00:16:06,110 sem þú getur gerst á. 265 00:16:06,110 --> 00:16:10,500 Til dæmis, þetta er bara 3 fyrir jafnvel einföldustu áætlunum. Allt í lagi. 266 00:16:10,500 --> 00:16:14,200 Og nú muna á mánudaginn fórum við á þessari skýringu við gildi aftur. 267 00:16:14,200 --> 00:16:18,450 Svo í fyrsta skipti sem við skrifaði forrit sem er ekki bara aðal; 268 00:16:18,450 --> 00:16:22,550 það hefur einnig eigin hlutverki sínu sem ég skrifaði hér. 269 00:16:22,550 --> 00:16:26,810 Svo í línu 31 í 34 Ég hef innleitt teningur virka. 270 00:16:26,810 --> 00:16:30,240 Það er ekki flókið. Það er bara * a * a í þessu tilfelli. 271 00:16:30,240 --> 00:16:34,750 En hvað er mikilvægt um það er að ég ætla að taka inntak í formi 272 00:16:34,750 --> 00:16:39,180 og ég er aftur framleiðsla í formi a * a * a. 273 00:16:39,180 --> 00:16:43,560 Svo nú er ég að hafa getu, mikið eins og ég nota til að með prinf einan 274 00:16:43,560 --> 00:16:47,240 að kalla þessa aðgerð með því að kalla teningur virka. 275 00:16:47,240 --> 00:16:51,970 >> Og teningur virka tekur smá inntak og teningur skilar sumir framleiðsla. 276 00:16:51,970 --> 00:16:56,960 Með því móti printf gerði bara eitthvað. 277 00:16:56,960 --> 00:17:00,840 Það skilaði ekki neitt sem við þótti vænt um, jafnvel þó eins og innskot er það aftur gildi; 278 00:17:00,840 --> 00:17:03,110 bara almennt hunsa hana. 279 00:17:03,110 --> 00:17:06,510 Printf bara gerði eitthvað. Það var aukaverkun af prentun á skjáinn. 280 00:17:06,510 --> 00:17:11,770 Með því móti hér, höfum við teningur virka, sem í raun skilar einhverju. 281 00:17:11,770 --> 00:17:15,520 Svo fyrir þá sem þekkja þetta, er það nokkuð augljóst hugmynd. 282 00:17:15,520 --> 00:17:19,640 En fyrir þá sem minna þekkja þessa hugmynd liggur á aðföngum og komast aftur framleiðsla, 283 00:17:19,640 --> 00:17:21,950 skulum reyna bara eitthvað ofur einfalt. 284 00:17:21,950 --> 00:17:25,490 Er einhver þægilegt að koma upp á sviðinu í stuttu máli? 285 00:17:25,490 --> 00:17:28,040 Þú verður að vera ánægð með myndavél á þig eins og heilbrigður. Já? Allt í lagi. 286 00:17:28,040 --> 00:17:31,240 Hvað er nafn þitt? >> [Nemandi] Ken. >> Ken. Allt í lagi. Ken, koma upp. 287 00:17:31,240 --> 00:17:35,050 Ken er að fara að vera fall af tegund hér. 288 00:17:35,050 --> 00:17:38,720 Við skulum fara á undan og gera það. Skulum fá smá fínt. 289 00:17:38,720 --> 00:17:42,260 Gaman að hitta þig. Velkomin á miðju sviðinu. Allt í lagi. 290 00:17:42,260 --> 00:17:46,640 Við skulum ná þessu hnapp hér. Allt í lagi. 291 00:17:46,640 --> 00:17:49,820 Svo hér þú ert með nútíma chalkboard, 292 00:17:49,820 --> 00:17:53,470 og það sem ég er er helsta hlutverk, til dæmis, 293 00:17:53,470 --> 00:17:56,460 og ég hef ekki iPad í minni hendi. 294 00:17:56,460 --> 00:17:59,710 >> Ég er ekki alveg að muna hvernig á að - Jæja, ég get ekki sagt það. 295 00:17:59,710 --> 00:18:02,480 Ég er ekki í raun að hafa góða rithönd, 296 00:18:02,480 --> 00:18:05,520 og svo því að ég vil að þú að prenta eitthvað á skjánum fyrir mig. 297 00:18:05,520 --> 00:18:12,040 Ég er að vera the aðalæð program, og ég ætla að þú segir þetta 298 00:18:12,040 --> 00:18:16,720 með því að skrifa það í grunni kjúklingur minn og þá liggur þér inntak. 299 00:18:16,720 --> 00:18:20,400 Svo kjánalegt þó að þessi æfing er hugmyndin um störf og kallar á aðgerð 300 00:18:20,400 --> 00:18:22,400 og aftur fall raun snýst allt um það. 301 00:18:22,400 --> 00:18:26,260 Ég er aðal, ég hef bara skrifað printf, vitna-unquote eitthvað á skjánum, 302 00:18:26,260 --> 00:18:29,110 Ég er að keyra þetta forrit, og eins fljótt og printf fær heitir, 303 00:18:29,110 --> 00:18:32,880 það tekur einn rök eða einn stika stundum milli gæsalöppum. 304 00:18:32,880 --> 00:18:35,880 Hér er þessi rök. Ég farið með hana til Ken. 305 00:18:35,880 --> 00:18:39,020 Hann er svartur kassi skrifað nokkur mörg ár síðan 306 00:18:39,020 --> 00:18:41,510 sem virðist vita aðeins hvernig á að prenta það á skjánum. 307 00:18:41,510 --> 00:18:43,150 Svo framkvæma. 308 00:18:49,280 --> 00:18:51,280 Það er ekki slæmt. Mjög gott. 309 00:18:51,280 --> 00:18:55,510 Svo nú Ken er gert framkvæmd. Er hann að skila mér neitt til baka? 310 00:18:55,510 --> 00:18:57,470 Ekki það að við höfum séð hingað til. 311 00:18:57,470 --> 00:19:00,460 Aftur, printf er reyndar aftur a tala, en við erum að fara að hunsa það nú 312 00:19:00,460 --> 00:19:03,470 vegna þess að við höfum aldrei notað það. Svo að það er fyrir Ken. 313 00:19:03,470 --> 00:19:08,580 Og svo nú helstu tekur yfir stjórn á kerfinu aftur 314 00:19:08,580 --> 00:19:11,060 því þessi lína af kóða, printf, er gert framkvæmd. 315 00:19:11,060 --> 00:19:14,050 Og við förum um leið okkar, framkvæmd hvað aðrar línur eru. 316 00:19:14,050 --> 00:19:17,320 Svo nú skulum við reyna aðeins öðruvísi dæmi. 317 00:19:17,320 --> 00:19:24,940 Að þessu sinni skulum hér er fyrst að hreinsa skjáinn og í þetta sinn við munum gera cubing virka, 318 00:19:24,940 --> 00:19:27,080 en í þetta skiptið, búast ég framleiðsla gildi. 319 00:19:27,080 --> 00:19:29,180 >> Svo við skulum fara á undan og gera það. 320 00:19:29,180 --> 00:19:35,790 Nú hef ég línu af kóða sem segir x fær teningur af x. 321 00:19:41,370 --> 00:19:46,370 The lína af kóða, muna, lítur svona út: x = teningur (x); 322 00:19:46,370 --> 00:19:50,930 Svo hvernig er það að fara að vinna? Við skulum fara á undan og gefa þér hvíta skjáinn. 323 00:19:50,930 --> 00:19:54,070 Ég er að fara að skrifa niður núna gildi x, 324 00:19:54,070 --> 00:20:01,400 sem á þessari stundu í tíma verður að vera, segjum, 2 að halda það einfalt. 325 00:20:01,400 --> 00:20:06,150 Ég hef skrifað niður á blað og verðmæti 2, sem er gildi x mín. 326 00:20:06,150 --> 00:20:10,920 Ég hendi því í Ken. >> Og ég skrifa bara svarið? >> Já, við skulum bara skrifa svarið. 327 00:20:12,760 --> 00:20:18,940 Allt í lagi. Og nú hefur hann að skila mér eitthvað. Perfect. Nice segue. 328 00:20:18,940 --> 00:20:23,120 Svo nú er hann réttir mér aftur gildi 8 í þessu tilfelli, og hvað á ég að gera við það? 329 00:20:23,120 --> 00:20:28,250 Reyndar - við skulum sjá, að fá þennan rétt. Hvað er ég að fara að gera við það? 330 00:20:28,250 --> 00:20:33,440 Nú ætla ég að taka þetta gildi og reyndar geyma það í sömu bita í minni. 331 00:20:33,440 --> 00:20:35,170 En eftir að ég er svona að berjast hér. 332 00:20:35,170 --> 00:20:38,210 Ég er svolítið ruglaður því þegar ég skrifa reyndar gildi x, 333 00:20:38,210 --> 00:20:43,150 því það sem ég hef bara gert er líkamlega hönd Ken a stykki af pappír sem hafði gildi 2, 334 00:20:43,150 --> 00:20:46,590 sem var x, og reyndar, það er einmitt það sem gerðist. 335 00:20:46,590 --> 00:20:50,210 Svo kemur í ljós að þegar þú hringja í aðgerð og þú fara í rifrildi 336 00:20:50,210 --> 00:20:53,290 eins og halló, heimur eða þú fara í rifrildi eins og 2, 337 00:20:53,290 --> 00:20:57,110 almennt, þú ert liggur í afrit af þeim rök. 338 00:20:57,110 --> 00:21:00,730 Og svo eins og ég skrifaði niður númer 2 hér og seldi það til Ken, 339 00:21:00,730 --> 00:21:04,720 sem verður að þýða að ég er enn með afrit af verðmæti 2 einhversstaðar 340 00:21:04,720 --> 00:21:08,890 því reyndar, nú að ég hef fengið til baka verðmæti 8, þarf ég að fara aftur í vinnsluminni 341 00:21:08,890 --> 00:21:12,130 og í raun og veru að skrifa niður 8 þar sem ég hafði einu sinni númer 2. 342 00:21:12,130 --> 00:21:16,950 Svo sjónrænt, muna þessa hugmynd um brottför í, bókstaflega, afrit af gildi. 343 00:21:16,950 --> 00:21:20,780 >> Ken er hlutur hans, hendur mér til baka eitthvað - í þessu tilfelli gildi eins 8 - 344 00:21:20,780 --> 00:21:24,980 og þá verð ég að gera eitthvað með þessi gildi ef ég vil halda því í kring. 345 00:21:24,980 --> 00:21:29,650 Svo allt þetta mun koma aftur til að vera allt of kunnuglegt fyrir löngu. 346 00:21:29,650 --> 00:21:34,920 Þakka þér svo mikið fyrir þessa kynningu hér, Ken. [Lófaklapp] 347 00:21:34,920 --> 00:21:36,920 Mjög vel gert. 348 00:21:36,920 --> 00:21:42,690 Við skulum sjá hvernig sem á endanum tengist sumir af the virka starf sem við höfum verið að gera hér. 349 00:21:42,690 --> 00:21:47,910 Leyfðu mér að fara á undan og færa okkur aftur til cubing dæmi hér. 350 00:21:47,910 --> 00:21:53,300 Takið eftir því að ef við viljum í raun að byrja að taka þetta lengra, 351 00:21:53,300 --> 00:21:57,570 við erum að fara til verða að vera vakandi fyrir þeirri staðreynd að fjöldi x sem er verið samþykkt hér 352 00:21:57,570 --> 00:22:01,530 er frábrugðið því sem er í raun verið að fara framhjá á að virka. 353 00:22:01,530 --> 00:22:05,880 Svo aftur, þetta líða afrit er að fara að verða alveg germane í bara smá stund. 354 00:22:05,880 --> 00:22:09,580 Við skulum taka a líta á eitthvað sem er ekki alveg að vinna rétt enn. 355 00:22:09,580 --> 00:22:13,250 Ég ætla að fara á undan og opna þriðja þrjótur dæmi, sem er gölluð í eðli sínu, 356 00:22:13,250 --> 00:22:18,550 og það er kallað buggy3 og það áhald skipta virka. 357 00:22:18,550 --> 00:22:25,110 Hér höfum við meginhlutverki sem x og y geðþótta frumstilla í 1 og 2. 358 00:22:25,110 --> 00:22:27,700 Við gætum notað GetInt, en við þurfum bara einfalt æfa, 359 00:22:27,700 --> 00:22:30,170 svo það er erfitt dulmáli eins og 1 og 2. 360 00:22:30,170 --> 00:22:35,340 Í línum 21 og 22, prenta við virðist út x og y, 1 í hverja línu. 361 00:22:35,340 --> 00:22:39,720 Þá á línu 23, segjast ég er skipta þessi gildi, punktur, punktur, punktur. 362 00:22:39,720 --> 00:22:44,170 Ég kalla virðist fall á línu 24 kallast skipti sem tekur 2 rök. 363 00:22:44,170 --> 00:22:48,300 Það er algjörlega legit um aðgerðir til að taka 2 rök. Við höfum séð printf gera það nú þegar. 364 00:22:48,300 --> 00:22:51,830 >> Svo tekur skipti virðist x og y, og eins og nafnið gefur til kynna, 365 00:22:51,830 --> 00:22:54,670 Ég vona að það er að fara að skipta þessum 2 gildi. 366 00:22:54,670 --> 00:23:00,090 Svo ég kröfu á línu 25 "skipti!" og ég prentaðu X og Y 367 00:23:00,090 --> 00:23:03,070 undir þeirri forsendu að þeir hafa örugglega verið skipti. 368 00:23:03,070 --> 00:23:06,080 En ef ég hlaupa í raun þetta forrit - láta mig opna Terminal glugga, 369 00:23:06,080 --> 00:23:09,860 láta mig gera buggy3 - eins og nafnið gefur til kynna, þetta er ekki að fara að enda vel 370 00:23:09,860 --> 00:23:15,770 því þegar ég lenti inn, eftir því að x er 1, y er 2, 371 00:23:15,770 --> 00:23:19,420 og enn í lok áætlunarinnar, eru þeir enn, í raun það sama. 372 00:23:19,420 --> 00:23:22,960 Svo miðað við mótmælum bara nú með Ken, hvað er raunverulega að gerast? 373 00:23:22,960 --> 00:23:28,710 Við skulum kafa inn í þetta skipti virka. Það er frábær stutt. Það er bara nokkrar línur af kóða langur. 374 00:23:28,710 --> 00:23:34,520 En það er grundvallaratriði vandamál byggt á einföldu sögu sagði hérna með Ken? 375 00:23:34,520 --> 00:23:36,670 Hvers vegna er skipti brotinn? 376 00:23:36,670 --> 00:23:39,660 [Nemandi] Þú ert að geyma í afriti, ekki breytilega. 377 00:23:39,660 --> 00:23:43,980 Einmitt. Við erum að geyma til að afrita, ekki breytu sig. 378 00:23:43,980 --> 00:23:47,170 Með öðrum orðum, skipti tekur greinilega 2 rök, int, 379 00:23:47,170 --> 00:23:49,370 og það er geðþótta kallað A og B, 380 00:23:49,370 --> 00:23:54,420 og hérna ég hef samþykkt í x og y, sem eru hver um sig 1 og 2, 381 00:23:54,420 --> 00:23:58,770 en ég er ekki bókstaflega farið í X, ég er ekki bókstaflega farið í y, 382 00:23:58,770 --> 00:24:01,450 Ég er liggur afrit af x og afrit af y. 383 00:24:01,450 --> 00:24:04,510 Það er nánast eins og þú afritað og límt inn í skipti 384 00:24:04,510 --> 00:24:07,810 þau gildi sem þú vilt hafa það til raunverulega vinna. 385 00:24:07,810 --> 00:24:14,480 Svo ef það er málið, þegar ég forritið byrja framkvæmd línu 35 þá 36, 386 00:24:14,480 --> 00:24:18,650 þegar ég fæ að línu 37, á þessum tímapunkti í sögunni, hvað er virði a? 387 00:24:21,040 --> 00:24:25,050 Á þessum tímapunkti í sögunni, lína 37, hvað er gildi fyrir á þessum tímapunkti? >> [Nemandi] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] Það ætti bara að vera 1, rétt, því x voru sett sem fyrsta rifrildi, 389 00:24:29,280 --> 00:24:33,080 og þetta virka bara geðþótta kallar fyrstu röksemd sínum. 390 00:24:33,080 --> 00:24:38,200 Á sama hátt er Y annað rifrildi, og það er bara geðþótta kalla Önnur rökin b. 391 00:24:38,200 --> 00:24:40,990 >> Þetta dichotomy er í raun nokkuð einfaldlega útskýrt. Hugsaðu um það. 392 00:24:40,990 --> 00:24:43,320 Ekkert af okkur hafa hitt mann sem skrifaði printf, 393 00:24:43,320 --> 00:24:50,770 svo sannarlega, hann eða hún hefur ekki hugmynd um hvað breytur okkar 30 árum síðar eru að fara til að vera gestur. 394 00:24:50,770 --> 00:24:56,650 Svo hefur það að vera skil á milli þess sem þú kallar breytur í aðgerðir sem þú ert að skrifa 395 00:24:56,650 --> 00:25:02,080 og hvað þú kalla breytur í aðgerðir sem þú ert að hringja eða nota. 396 00:25:02,080 --> 00:25:05,340 Svo í öðrum orðum, hef ég skrifað breytur mína sem x og y, 397 00:25:05,340 --> 00:25:08,890 en ef einhver annar hefði skrifað skipti virka, hann vissulega myndi ekki vita 398 00:25:08,890 --> 00:25:10,690 hvaða breytur mín eru að fara að kallast, 399 00:25:10,690 --> 00:25:13,830 svo grein fyrir því að þetta er hvers vegna þú hefur þetta duality nafna. 400 00:25:13,830 --> 00:25:16,750 Tæknilega gæti ég gert þetta fyrir tilviljun, 401 00:25:16,750 --> 00:25:20,080 en þeir myndu samt vera samþykkt sem afrit. 402 00:25:20,080 --> 00:25:23,650 Það myndi bara vera hrein tilviljun fagurfræðilega ef þessi manneskja sem skrifaði skipti 403 00:25:23,650 --> 00:25:26,150 höfðu notað sömu nöfn. 404 00:25:26,150 --> 00:25:32,370 Svo á þessum tímapunkti í sögunni, línu 37, sem er 1, b er 2, og nú er ég að halda áfram að skipta á þeim. 405 00:25:32,370 --> 00:25:34,900 Fyrst af öllu, láta mig gera í raun það mun einfaldlega. 406 00:25:34,900 --> 00:25:36,690 Ég veit ekki hvað þessir 3 línur af kóða var að gera. 407 00:25:36,690 --> 00:25:41,210 Leyfðu mér að gera bara þetta: b = a, a = b; gert. 408 00:25:41,210 --> 00:25:44,690 Hvers vegna er þetta brotinn, þá er rökrétt? 409 00:25:46,490 --> 00:25:48,900 Það er góður af leiðandi hlutur, ekki satt? 410 00:25:48,900 --> 00:25:52,560 Svo verður B And B verður, 411 00:25:52,560 --> 00:25:57,730 en vandinn er að um leið og lína 37 keyrir, það er gildi a og b? 412 00:25:57,730 --> 00:26:03,410 Sama, 1, af því að þú hefur stútað, svo að segja, þú hefur breytt B að jafna a. 413 00:26:03,410 --> 00:26:08,890 Svo þegar lína 37 er framkvæmd, það er frábært, ert þú nú 2 afrit af númer 1 414 00:26:08,890 --> 00:26:13,350 inni á þessum eiginleika, svo þá þegar þú segir í línu 38 a = b, 415 00:26:13,350 --> 00:26:17,640 þú ert góður af ruglaður vegna þess að þú ert bara að framselja 1 til 1. 416 00:26:17,640 --> 00:26:20,580 Þú hefur konar misst gildið sem þú aðgát óður í. 417 00:26:20,580 --> 00:26:23,220 Svo í upprunalegu útgáfuna af þessu, eftir því sem ég gerði. 418 00:26:23,220 --> 00:26:26,850 Ég hafði í stað þriðja línu af kóða sem líktist þessu. 419 00:26:26,850 --> 00:26:28,580 Ég lýsi tímabundið breytu. 420 00:26:28,580 --> 00:26:32,170 >> Tmp er mjög algengt nafn fyrir tímabundna breytu, og það er int 421 00:26:32,170 --> 00:26:34,580 vegna þess að það þarf að passa það sem ég vil gera afrit af. 422 00:26:34,580 --> 00:26:39,770 Ég geyma afrit af inni tmp, svo þegar lína 37 hefur framkvæmt, 423 00:26:39,770 --> 00:26:45,860 verðmæti sem er - fljótur geðheilbrigði athuga - 1, verðmæti b er 2, 424 00:26:45,860 --> 00:26:48,970 og verðmæti tmp er einnig 1. 425 00:26:48,970 --> 00:26:52,060 Svo nú er ég framkvæma línu 38. 426 00:26:52,060 --> 00:27:00,540 Þegar lína 38 keyrir, sem tekur gildi b. Og B var 2, þannig að nú er 2. 427 00:27:00,540 --> 00:27:05,210 Svo á þessum tímapunkti í sögunni, sem er 2, b er 2 og tmp er 1, 428 00:27:05,210 --> 00:27:11,060 svo nú rökrétt, getum við gildi bara Plop tmp er í b og við erum að gera. 429 00:27:11,060 --> 00:27:12,800 Þannig að við höfum leyst þessi vandamál. 430 00:27:12,800 --> 00:27:17,720 Því miður, þegar ég keyra þetta forrit í þessu formi, er það ekki í raun skipta allir gildi. 431 00:27:17,720 --> 00:27:20,100 En til að vera ljóst, hvers vegna? 432 00:27:23,660 --> 00:27:26,450 Ég fastur rökrétt vandamál frá bara í smá stund síðan, 433 00:27:26,450 --> 00:27:31,020 en aftur, ef ég keyra þetta forrit, vera x og y óbreytt 434 00:27:31,020 --> 00:27:33,310 í lok framkvæmd áætlunarinnar. 435 00:27:33,310 --> 00:27:37,220 [Inaudible nemandi athugasemd] >> Við höfum ekki skilað neitt, svo það er satt. 436 00:27:37,220 --> 00:27:39,670 En það kemur í ljós að það er a hluti af a vandamál hér því svona langt, 437 00:27:39,670 --> 00:27:44,170 það eina sem við höfum getað til að koma aftur er eitt, og þetta er takmörkun á C. 438 00:27:44,170 --> 00:27:49,070 Þú getur aðeins aftur raun eitt gildi, þar sem ef ég er svona fastur hér 439 00:27:49,070 --> 00:27:53,310 vegna þess að ég gæti aftur á nýju gildi x eða ég gæti aftur á nýju gildi y, 440 00:27:53,310 --> 00:27:55,190 en ég vil bæði aftur. 441 00:27:55,190 --> 00:27:58,650 Svo aftur er einföld lausn er ekki hér. 442 00:27:58,650 --> 00:28:01,710 En vandamálið er í grundvallaratriðum hvers vegna? Hvað höfum við skipti í raun og veru? 443 00:28:01,710 --> 00:28:04,190 [Nemandi] a og b. >> A og b. 444 00:28:04,190 --> 00:28:08,230 En a og b eru afrit af x og y, sem þýðir að við gerðum bara allt þetta starf, 445 00:28:08,230 --> 00:28:11,650 við eyddum bara 3 mínútur að tala um skipti virka og allar 3 af þessum breytum, 446 00:28:11,650 --> 00:28:15,420 og það er frábært, alveg rétt í einangrun, 447 00:28:15,420 --> 00:28:20,740 en og umfang B er aðeins í þessum línum hér. 448 00:28:20,740 --> 00:28:24,790 >> Svo bara eins og a for lykkju, ef þú lýsa heiltölu i inni til hliðar, 449 00:28:24,790 --> 00:28:28,760 sama hátt, ef þú ert að lýsa a og b inni í valkost sem þú hefur skrifað, 450 00:28:28,760 --> 00:28:33,320 þeir eru aðeins í gildi innan þeirrar virkni, sem þýðir að um leið og skipti er gert framkvæmd 451 00:28:33,320 --> 00:28:38,470 og við förum frá línu 24 á línu 25, hafa x og y ekki breyst. 452 00:28:38,470 --> 00:28:42,790 Þú sóa bara allt fullt af tíma að skipta um afrit af breytum. 453 00:28:42,790 --> 00:28:47,010 Svo kemur í ljós að lausnin á þessu er í raun ekki augljós. 454 00:28:47,010 --> 00:28:50,670 Það er ekki alveg nóg að skila gildi vegna þess að við getum aðeins skila 1 gildi, 455 00:28:50,670 --> 00:28:53,470 og ég virkilega vil að skipta bæði X og Y á sama tíma, 456 00:28:53,470 --> 00:28:55,210 þannig að við erum að fara að koma aftur á þetta. 457 00:28:55,210 --> 00:29:01,020 En nú, átta sig á því að málið í grundvallaratriðum úr því að A og B eru eintök 458 00:29:01,020 --> 00:29:03,630 og þeir eru í eigin umfang þeirra. 459 00:29:03,630 --> 00:29:05,050 Við skulum reyna að leysa þetta á einhvern hátt. 460 00:29:05,050 --> 00:29:11,250 Leyfðu mér að fletta í raun aftur hingað og opna upp, við skulum segja, fjórða afbrigði af þessu, buggy4. 461 00:29:11,250 --> 00:29:13,370 Hvað um þetta? 462 00:29:13,370 --> 00:29:17,810 Þetta er svipað, en einfaldari vandamál að líta á áður en við taka a stunga á að leysa það. 463 00:29:17,810 --> 00:29:24,190 Þetta forrit er kallað vöxtur, og það Frumstillir virðist að x heiltala að 1 línu 18. 464 00:29:24,190 --> 00:29:28,150 Ég kröfu þá x er 1, segjast ég þá "Incrementing ..." 465 00:29:28,150 --> 00:29:33,730 Ég kalla þá vöxtur, en þá í línum 22 og 23, ég krafa það hefur verið incremented, 466 00:29:33,730 --> 00:29:40,220 Ég krafa x er nú hvað sem það er - 2, væntanlega - en þetta forrit er þrjótur. 467 00:29:40,220 --> 00:29:42,610 Hvað er vandamálið? 468 00:29:43,440 --> 00:29:50,160 Já. >> [Inaudible nemandi svar] >> Einmitt. 469 00:29:50,160 --> 00:29:52,490 Svo x hefur verið lýst, augljóslega, í línu 18. 470 00:29:52,490 --> 00:29:54,700 Það er inni hrokkið axlabönd aðal. 471 00:29:54,700 --> 00:29:58,440 Svo er einfalt svar hér að á meðan x er hér, 472 00:29:58,440 --> 00:30:03,930 það er ekki til í línu 32, þannig að þetta forrit í raun ekki einu sinni saman. 473 00:30:03,930 --> 00:30:07,940 The þýðanda þegar ég reyni að setja saman þessa kóða er að fara að æpa á mig 474 00:30:07,940 --> 00:30:14,100 um einhverja óskilgreinda auðkenni eða eitthvað þar að lútandi. Í staðreynd, við skulum reyna. 475 00:30:14,100 --> 00:30:18,470 Þetta er að gera buggy4. Það er það. 476 00:30:18,470 --> 00:30:22,110 Notkun 'X' undeclared auðkenni í línu 32. 477 00:30:22,110 --> 00:30:25,580 Og í raun, við skulum vera skýr hér í dag þannig að þetta er gagnlegt 478 00:30:25,580 --> 00:30:27,580 á skrifstofutíma og heima. 479 00:30:27,580 --> 00:30:29,300 >> Takið eftir að það er lítið cryptically skrifað. 480 00:30:29,300 --> 00:30:37,270 En sú staðreynd að Clang hefur öskraði á okkur og sagði buggy4.c: 32:5 er raunverulega gagnlegur. 481 00:30:37,270 --> 00:30:42,050 Það þýðir að villa sé á línu 32 á stöðu eðli 5. 482 00:30:42,050 --> 00:30:46,700 Svo 1, 2, 3, 4, 5. Það er, í raun, þar sem vandamálið er. 483 00:30:46,700 --> 00:30:49,790 Og einnig, líka, að hafa í huga á skrifstofutíma og heima, ég er heppinn hér. 484 00:30:49,790 --> 00:30:52,990 Ég er með eina mistök. Það er að fara að vera tiltölulega auðvelt að festa. 485 00:30:52,990 --> 00:30:55,990 En ef þú færð allan skjáinn fullur af yfirþyrmandi villa skilaboð, 486 00:30:55,990 --> 00:31:00,330 aftur grein fyrir því að bottommost maður gæti bara verið einkenni um hæstur einn. 487 00:31:00,330 --> 00:31:03,450 Svo alltaf elta niður galla þínum frá toppi og niður 488 00:31:03,450 --> 00:31:05,820 vegna þess að það gæti bara verið Daisy keðja áhrif 489 00:31:05,820 --> 00:31:09,240 sem bendir til að þú hefur leið til fleiri vandamál en þú gerir í raun og veru. 490 00:31:09,240 --> 00:31:15,150 Svo hvernig getum við lagað þetta ef markmið mitt er að hækka x? >> [Nemandi] Gerðu x heimsvísu. 491 00:31:15,150 --> 00:31:17,060 Jæja, svo við getum gert x GLOBAL. 492 00:31:17,060 --> 00:31:20,480 Við skulum taka flýtileið sem ég varaði fyrr, en Heck, við þurfum bara fljótur festa, 493 00:31:20,480 --> 00:31:25,730 þannig að við skulum bara segja int x upp hér. Það gerir x GLOBAL. 494 00:31:25,730 --> 00:31:31,800 Svo nú helstu hefur aðgang að henni og vöxtur hefur aðgang að henni, 495 00:31:31,800 --> 00:31:34,110 og svo láta mig fara á undan og taka saman þetta núna. 496 00:31:34,110 --> 00:31:37,630 Gera buggy4, Enter. Virðist saman núna. 497 00:31:37,630 --> 00:31:41,230 Við skulum hlaupa buggy4. Og það virðist raunverulega vinnu. 498 00:31:41,230 --> 00:31:45,150 Þetta er einn af þessum hlutum sem er að gera eins og ég segi, ekki eins og ég, 499 00:31:45,150 --> 00:31:47,010 eins og ég hef bara gert hér, vegna þess að almennt, 500 00:31:47,010 --> 00:31:50,440 áætlanir okkar eru að fara að fá mikið meira áhugavert og mun lengur en þetta, 501 00:31:50,440 --> 00:31:56,390 og ef lausnin á vandamálum lífsins er bara að setja allar breytur efst á skrána, 502 00:31:56,390 --> 00:31:59,690 mjög fljótt gera forrit fá horrifically erfitt að stjórna. 503 00:31:59,690 --> 00:32:02,190 Það verður erfiðara að hugsa upp nýja breytilegum nöfn, 504 00:32:02,190 --> 00:32:05,240 það verður erfiðara að skilja hvað breyta er að gera það, 505 00:32:05,240 --> 00:32:08,460 og svo almennt, þetta er ekki góð lausn. 506 00:32:08,460 --> 00:32:10,030 Svo skulum gera þetta betur. 507 00:32:10,030 --> 00:32:12,160 Við viljum ekki að nota alþjóðlegt breytu hér. 508 00:32:12,160 --> 00:32:16,240 >> Ég vil að hækka X, svo ég gæti augljóslega - 509 00:32:16,240 --> 00:32:18,670 í lok dags, það er eins konar kjánalegt sögu vegna þess að við gerum bara þetta - 510 00:32:18,670 --> 00:32:24,450 en ef ég vissi ekki um það með þeim eða ég var ekki leyft að breyta því í Main sig, 511 00:32:24,450 --> 00:32:30,730 Hvernig annars gæti ég innleiða Ken hérna að þessu sinni ekki teningur heldur að hækka? 512 00:32:31,380 --> 00:32:33,190 Hvernig breyti ég þetta í hér? Já. 513 00:32:33,190 --> 00:32:38,480 [Nemandi] Pass í x og síðan aftur [inaudible] >> Jæja, gott. 514 00:32:38,480 --> 00:32:41,900 Svo hvers vegna gera ég ekki fara í x og þá frekar en að skila henni, 515 00:32:41,900 --> 00:32:44,870 af hverju get ég ekki bara aftur x + 1. 516 00:32:44,870 --> 00:32:47,710 A par fleiri hlutir að breytast hér. Ég er á réttri leið. 517 00:32:47,710 --> 00:32:49,770 Hvað annað þarf ég að fínstilla? Einhver annar. Já. 518 00:32:49,770 --> 00:32:51,740 [Inaudible nemandi svar] 519 00:32:51,740 --> 00:32:54,730 Ég þarf að breyta aftur tegund vöxtur vegna þess að það er ekki ógilt. 520 00:32:54,730 --> 00:32:57,780 Tóm þýðir ekkert að koma aftur, en greinilega er það, 521 00:32:57,780 --> 00:32:59,830 þannig að þetta þarf að breyta til - >> [nemandi] int. 522 00:32:59,830 --> 00:33:02,740 int til að vera í samræmi við það sem ég er í raun að fara aftur. 523 00:33:02,740 --> 00:33:05,180 Nú er eitthvað annað enn þrjótur hér. Já. 524 00:33:05,180 --> 00:33:08,400 [Inaudible nemandi svar] >> [Malan] Þannig að ég þarf að hækka x? 525 00:33:08,400 --> 00:33:12,080 [Inaudible nemandi svar] >> [Malan] Ah, þannig að ég þarf að fara x. 526 00:33:12,080 --> 00:33:16,660 Þannig að ég þarf að gera þetta hérna. >> [Inaudible nemandi athugasemd] 527 00:33:16,660 --> 00:33:20,050 [Malan] Svo frumgerð, ég verð að breyta þessu upp hér. 528 00:33:20,050 --> 00:33:22,930 Þannig að þetta þarf að verða int, þetta þarf að gerast - 529 00:33:22,930 --> 00:33:25,620 Hmm, ég hef í raun villu hérna. Við skulum laga þetta einn fyrst. 530 00:33:25,620 --> 00:33:29,590 Hvað ætti þetta að vera í raun og veru? Það er got að vera int eitthvað. 531 00:33:29,590 --> 00:33:32,700 Það gæti verið x, en hreinskilnislega, ef þú byrjar að hringja allar breytur x þína, 532 00:33:32,700 --> 00:33:35,390 það er að fara að fá minna og minna ljóst hver er hver. 533 00:33:35,390 --> 00:33:39,560 >> Svo við skulum bara geðþótta velja mismunandi nafngiftir venju fyrir virka hjálpar mínum, 534 00:33:39,560 --> 00:33:41,940 aðgerðir sem ég er að skrifa. Við munum kalla það, eða við getum kalla það - 535 00:33:41,940 --> 00:33:45,010 Við skulum kalla það númer til að vera enn skýrari. 536 00:33:45,010 --> 00:33:47,560 Svo ég verð að fara aftur hvað númerið er plús 1, 537 00:33:47,560 --> 00:33:50,740 og nú þarf ég að breyta 1 annar hlutur upp hér og einn annar hlutur upp hér. 538 00:33:50,740 --> 00:33:54,350 Hvað þarf ég að breyta á línu 21 fyrst? >> [Inaudible nemandi svar] 539 00:33:54,350 --> 00:33:57,610 [Malan] ég að framselja það til x. Ég get ekki bara hringt vöxtur (x). 540 00:33:57,610 --> 00:34:01,960 Ég þarf að muna að svar með því að breyta gildi X á vinstri-hönd hlið. 541 00:34:01,960 --> 00:34:04,680 Og jafnvel þó að x er nú á vinstri og hægri, það er alveg fínt 542 00:34:04,680 --> 00:34:08,860 vegna þess að hægra megin verður keyrð fyrst þá fær plopped í vinstra hlutur - 543 00:34:08,860 --> 00:34:10,600 x í þessu tilfelli. 544 00:34:10,600 --> 00:34:12,159 Og svo loks, þetta er auðvelt festa núna. 545 00:34:12,159 --> 00:34:17,230 Þetta ætti bara að passa hvað er niðri, int númer. 546 00:34:17,230 --> 00:34:20,570 Svo allt fullt af breytingum fyrir mjög heimskur virka 547 00:34:20,570 --> 00:34:24,420 en fulltrúi af hlutum sem við munum í auknum mæli að gera. 548 00:34:24,420 --> 00:34:27,090 Svo gera buggy4. Ég hef ruglaður upp einhvers staðar. 549 00:34:27,090 --> 00:34:30,139 Ó, Guð minn. Fimm mistök í 6-lína forrit. 550 00:34:30,139 --> 00:34:35,690 Svo er það rangt á línu 18, eðli 5? 551 00:34:35,690 --> 00:34:39,610 Þannig að ég verð að lýsa þessu, int. 552 00:34:39,610 --> 00:34:41,920 Við skulum sjá. There ert a heild búnt af annar villur. 553 00:34:41,920 --> 00:34:47,010 Ó, Guð minn - 19, 18, 21 - en aftur, við skulum bara hreinsa skjáinn, Control L hér, 554 00:34:47,010 --> 00:34:49,380 og endursýning Clang. 555 00:34:49,380 --> 00:34:51,340 Svo er 5 vandamál í raun bara að 1. 556 00:34:51,340 --> 00:34:57,520 Svo nú skulum við hlaupa buggy4, Enter. Whew hefur x verið incremented rétt. 557 00:34:57,520 --> 00:35:02,720 Allt í lagi. Einhverjar spurningar um hvernig á að hækka tölur? Já. 558 00:35:02,720 --> 00:35:09,870 [Inaudible nemandi spurning] >> Góð spurning. 559 00:35:09,870 --> 00:35:14,220 Hvernig er það að ég get bara breyta x í tölu og the program vilja vita strax? 560 00:35:14,220 --> 00:35:16,200 >> Aftur, hugsa af það eins og þetta abstrakt. 561 00:35:16,200 --> 00:35:21,600 Svo ef ég er aðal og Ken er vöxtur, hreinskilnislega, ég sama hvað Ken kallar iPad hans. 562 00:35:21,600 --> 00:35:26,570 Mér er alveg sama hvað hann kallar eitthvað sem hefur að gera með framkvæmd hans þessa virkni. 563 00:35:26,570 --> 00:35:33,340 Þetta er framkvæmd smáatriði sem ég, helstu, þarf ekki að hugsa um. 564 00:35:33,340 --> 00:35:38,250 Og svo bara að breyta því stöðugt inni á virka - fjöldi hér og tala hér - 565 00:35:38,250 --> 00:35:40,960 er allt það tekur svo lengi sem ég laun. 566 00:35:40,960 --> 00:35:44,180 Það er tegund af eins og ef þú hugsa um marga af okkur, þessir af þú með leyfi ökumanns 567 00:35:44,180 --> 00:35:46,770 sem hafa ekið eða ef þú hefur jafnvel ekið í bíl, 568 00:35:46,770 --> 00:35:50,950 flest okkar hafa ekki hugmynd um hvernig bíll virkar undir hetta. 569 00:35:50,950 --> 00:35:54,970 Og bókstaflega, ef þú opna hetta, mest af okkur - ég sjálfur innifalinn - 570 00:35:54,970 --> 00:35:56,940 er ekki að fara að raunverulega vita hvað við erum að horfa á, 571 00:35:56,940 --> 00:35:59,220 konar eins og þú getur fundið með efni eins og þetta núna. 572 00:35:59,220 --> 00:36:01,480 En við ekki í raun að sama hvernig bíllinn virkar, 573 00:36:01,480 --> 00:36:05,970 við þurfum ekki að hugsa hvað allt á stöngum og stimplum og snúrur inni í bílnum 574 00:36:05,970 --> 00:36:08,160 eru í raun að gera. 575 00:36:08,160 --> 00:36:12,770 Svo eitthvað eins og það sem þú kallar að stimpla ekki máli hér í þessu tilfelli. Sama hugmynd. 576 00:36:12,770 --> 00:36:25,300 Já. >> [Inaudible nemandi spurning] 577 00:36:25,300 --> 00:36:29,180 Ef það eru fleiri not af breytu Xa augnabliki síðan, 578 00:36:29,180 --> 00:36:32,150 þú, sem forritari, þyrfti að breyta þeim alls staðar. 579 00:36:32,150 --> 00:36:36,600 Eða þú gætir bókstaflega gert File Valmynd, og Finna, Skipta - eitthvað svona - 580 00:36:36,600 --> 00:36:39,170 en þú ert að fara að þurfa að gera þessar breytingar sjálfur. 581 00:36:39,170 --> 00:36:47,450 Þú verður að vera í samræmi. >> [Nemandi] Ef það eru margar breytur [inaudible] 582 00:36:47,450 --> 00:36:53,100 A sérstakri röð eins og hér, ef þetta væri int annað númer? >> [Nemandi] Rétt. 583 00:36:53,100 --> 00:36:56,590 [Malan] Já. Röð máli þegar þú ert að hringja í aðgerð. 584 00:36:56,590 --> 00:37:00,050 >> Svo ef ég væri að hringja vöxtur hér með eitthvað kommu eitthvað, 585 00:37:00,050 --> 00:37:01,680 það er bein kortlagning. 586 00:37:01,680 --> 00:37:05,690 Fyrsta breyta, hvað sem það er kallað, er afrit af fyrsta rifrildi hérna. 587 00:37:05,690 --> 00:37:07,760 Því miður. Þetta ætti ekki að vera sviga. 588 00:37:07,760 --> 00:37:11,490 Annað línur rök upp með seinni. Svo til þess, já, mál. Allt í lagi. 589 00:37:11,490 --> 00:37:17,020 Því miður. Ég tók langa leið til að fá það. Aðrar spurningar? Allt í lagi. 590 00:37:17,020 --> 00:37:20,610 Svo við skulum sjá hvort við getum ekki mála mynd af hvað er í raun að gerast hér 591 00:37:20,610 --> 00:37:23,090 undir hetta, svo að segja. 592 00:37:23,090 --> 00:37:26,640 Þetta er rétthyrningur sem gæti gefið minni tölvunnar. 593 00:37:26,640 --> 00:37:30,970 Jafnvel ef þú hefur ekki hugmynd um hvernig minni virkar eða hvernig RAM virkar, 594 00:37:30,970 --> 00:37:33,940 að minnsta kosti ráð fyrir að þú hefur bunches af henni þessa dagana. 595 00:37:33,940 --> 00:37:36,280 Þú hefur fengið megabæti af því, hefur þú fengið gígabæta af því, 596 00:37:36,280 --> 00:37:40,870 og við vitum frá viku 0 sem bæti er bara hvað? >> [Nemandi] 8 bitar. 597 00:37:40,870 --> 00:37:42,950 8 bitar, ekki satt? Svo 8 núllum og 1. 598 00:37:42,950 --> 00:37:45,880 Svo ef tölvan þín hefur tónleikum af RAM, 2 Projects af vinnsluminni þessa dagana, 599 00:37:45,880 --> 00:37:55,030 þú ert með milljarð eða 2 milljarða bæti af minni eða um 8 milljarða eða 16 milljarða bita 600 00:37:55,030 --> 00:37:56,890 inni á tölvunni þinni. 601 00:37:56,890 --> 00:38:00,590 Ólíkt litlu Wooly Willy dæmi, það er ekki segulmagnaðir agnir yfirleitt lengur. 602 00:38:00,590 --> 00:38:04,450 Æ - í fartölvur minnsta kosti - það er Solid State drif, SSDs, 603 00:38:04,450 --> 00:38:08,580 sem bara enga hreyfanlega hluti. Það er allt rafrænt. Það er allt rafmagn byggir. 604 00:38:08,580 --> 00:38:14,060 Svo hugsa um þessa rétthyrnings sem bara fulltrúi 1 eða 2 gígabæta af minni sem þú hefur. 605 00:38:14,060 --> 00:38:16,020 >> Svo það er klumpur af minni. 606 00:38:16,020 --> 00:38:19,830 The veröld af tölvunarfræði hefur konar skipt burt 607 00:38:19,830 --> 00:38:22,950 klumpur af minni til að gera mismunandi hluti. 608 00:38:22,950 --> 00:38:27,190 Til dæmis, ef þetta er RAM tölvunnar, sem leiðbeinandi við rétthyrningsins þar, 609 00:38:27,190 --> 00:38:31,130 það kemur í ljós að með því að venju, efst á RAM, svo að segja, 610 00:38:31,130 --> 00:38:33,660 er yfirleitt það sem er kallað texta hluti. 611 00:38:33,660 --> 00:38:36,740 Þeir eru 0s og 1s sem þú hefur safnað saman. 612 00:38:36,740 --> 00:38:39,020 Svo þegar við höfum litið undir hetta á hvaða a.out er, 613 00:38:39,020 --> 00:38:41,980 Allar þessar 0s og 1s, þegar þú keyrir forrit, 614 00:38:41,980 --> 00:38:46,290 þá 0s og 1s eru sóttar af harða disknum þínum í eitthvað sem kallast RAM, 615 00:38:46,290 --> 00:38:49,320 og í RAM þeir setja efst. 616 00:38:49,320 --> 00:38:52,770 Á sama tíma hefur þú annað: frumstilla gögn, aftengja gögn. 617 00:38:52,770 --> 00:38:57,510 Þessir 2 swaths af minni átt að alþjóðlegum breytur, sem þú ert ekki nota oft 618 00:38:57,510 --> 00:39:00,760 en stundum ef þú gerir það, enda þeir upp þarna eins og heilbrigður. 619 00:39:00,760 --> 00:39:04,260 Þá er það einhver önnur efni: umhverfisbreytur, sem við munum ekki eyða miklum tíma í, 620 00:39:04,260 --> 00:39:06,860 en þá 2 mikilvæg atriði sem mun koma aftur um önn, 621 00:39:06,860 --> 00:39:08,550 stafla og hrúga. 622 00:39:08,550 --> 00:39:12,210 Svo mest af minni tölvunnar er frátekið þegar keyra forrit 623 00:39:12,210 --> 00:39:15,370 fyrir eitthvað sem heitir á mánudaginn og eitthvað sem kallast hrúga. 624 00:39:15,370 --> 00:39:18,840 Við erum ekki að fara að tala um hrúga í dag, en við munum tala um mánudaginn. 625 00:39:18,840 --> 00:39:24,600 The stakkur er ætlað að töfra upp visual höllinni veitingastöðum máltíð stæði í Mather House 626 00:39:24,600 --> 00:39:28,110 eða hvar sem þú verður að vera þar sem sal veitingastöðum starfsfólk hreinsa þá á hverjum degi, 627 00:39:28,110 --> 00:39:30,180 Þeir stafla þeim upp úr gólfinu á upp, 628 00:39:30,180 --> 00:39:34,550 og sömuleiðis, í minni, er þessi hugmynd um að setja eitthvað á mánudaginn, 629 00:39:34,550 --> 00:39:36,860 setja eitthvað á mánudaginn, setja eitthvað á mánudaginn. 630 00:39:36,860 --> 00:39:38,240 Og hvað er átt við með þessu? 631 00:39:38,240 --> 00:39:41,860 >> Skulum zoom í á bara neðri hluta myndarinnar, RAM tölvunnar, 632 00:39:41,860 --> 00:39:44,330 að leggja eftirfarandi. 633 00:39:44,330 --> 00:39:48,170 Það kemur í ljós að þegar þú keyrir forrit eins a.out eða Hello - 634 00:39:48,170 --> 00:39:50,100 hvað forritið er að þú hefur skrifað - 635 00:39:50,100 --> 00:39:54,020 aftur, 0s og 1s sem eru sóttar af harða diskinum, sem er langtíma geymsla, 636 00:39:54,020 --> 00:39:57,230 dvöl þar jafnvel þegar þú draga the tappi, hlaðinn inn í vinnsluminni. 637 00:39:57,230 --> 00:40:00,610 RAM er hraðari en harða diska - það er minni en harða diska - 638 00:40:00,610 --> 00:40:03,300 en það er þar sem forrit búa á meðan þú ert að keyra þá. 639 00:40:03,300 --> 00:40:08,230 Svo þú tvöfaldur smellur forrit á Mac eða PC, það er hlaðinn úr disknum í RAM. 640 00:40:08,230 --> 00:40:11,520 Um leið og það er hlaðið inn RAM, the 0s og 1s fara á leiðinni ofan, 641 00:40:11,520 --> 00:40:16,610 svokallaða texta hluti, en svo um leið og forritið þitt raunverulega byrjar að keyra, 642 00:40:16,610 --> 00:40:21,360 The aðalæð virka er kallað, og helstu, eins og við höfum séð, hefur oft staðbundnar breytur, 643 00:40:21,360 --> 00:40:24,870 og það hefur ints og strengir og chars og þess háttar. 644 00:40:24,870 --> 00:40:29,180 Svo ef forritið þitt sem þú hefur skrifað eða forrit sem þú hefur tvöfalda smellt 645 00:40:29,180 --> 00:40:32,970 notað nokkrar breytur innan helstu, 646 00:40:32,970 --> 00:40:37,240 þeir enda upp neðst á stafla þinn af minni, svo að segja. 647 00:40:37,240 --> 00:40:39,410 Meira concretely, hvað þýðir þetta í raun? 648 00:40:39,410 --> 00:40:48,450 Þetta þýðir bara að ef við værum að fara að tala um bæti af RAM í tölvunni, 649 00:40:48,450 --> 00:40:55,750 eftir því að þetta gæti verið bæti númer 0, þetta gæti verið bæti númer 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 alla leið upp í 2 ma.kr. yrði alla leið þarna efst. 651 00:41:01,480 --> 00:41:05,880 Svo í öðrum orðum, þegar við tölum um RAM eða minni í skilmálar af bæti, 652 00:41:05,880 --> 00:41:11,500 það þýðir bara að einhver hefur ákveðið hvað ég á að telja hvert þeim klumpur af minni. 653 00:41:11,500 --> 00:41:16,650 Svo þegar þú þarft 32 bita fyrir heiltala eða þú þarft 8 bita fyrir bleikju, 654 00:41:16,650 --> 00:41:18,840 hvar enda þeir upp í minni? 655 00:41:18,840 --> 00:41:22,350 >> Eðli, enda þeir bara upp neðst á þessari hlutur kallast stafla. 656 00:41:22,350 --> 00:41:25,870 En það sem er áhugavert nú þegar helsta kallar fall - 657 00:41:25,870 --> 00:41:28,750 ráð fall kallast foo, bara handahófskennt nafn - 658 00:41:28,750 --> 00:41:32,330 hvað gerist er aðal er neðst í þessum stafla af minni; 659 00:41:32,330 --> 00:41:35,680 foo nú er sett ofan á helsta í minni. 660 00:41:35,680 --> 00:41:40,990 Svo allir heimamaður breytur sem foo hefur endað konar hugtök yfir þá í haf. 661 00:41:40,990 --> 00:41:47,070 Ef foo kallar annan valkost sem heitir Bar, þessir breytur endanum hér. 662 00:41:47,070 --> 00:41:50,120 Ef símtöl eitthvað annað, hér, hér, hér. 663 00:41:50,120 --> 00:41:53,830 Svo er það sem er áhugavert um að keyra forrit sem eins og þú kalla aðgerðir 664 00:41:53,830 --> 00:41:57,750 og eins og þeir aðgerðir kalla aðgerðir og þau verk sem kalla aðgerðir, 665 00:41:57,750 --> 00:42:01,470 þú byggja upp þessa stafla aðgerðir í minni. 666 00:42:01,470 --> 00:42:06,890 Og aðeins einu sinni skilar þú byrjar að fá að minni aftur. 667 00:42:06,890 --> 00:42:10,860 Þá kom einn af the auðveldlega leiðir til að keyra út af minni í tölvuforriti 668 00:42:10,860 --> 00:42:14,360 er að skrifa aðgerðir sem aldrei koma aftur. 669 00:42:14,360 --> 00:42:18,900 Svo til dæmis, við skulum sýna eins mikið með viljandi buggy program. 670 00:42:18,900 --> 00:42:22,230 Leyfðu mér að fara á undan og gera # include , 671 00:42:22,230 --> 00:42:25,000 int helstu (tóm), 672 00:42:25,000 --> 00:42:32,940 og ég ætla að gera á meðan (2> 1), sem líklega mun aldrei breytast á okkur, 673 00:42:32,940 --> 00:42:37,560 og láta mig fara á undan núna og gera printf. 674 00:42:37,560 --> 00:42:40,700 Raunverulega, það er að fara að vera minna sjónrænt áhugavert. Við skulum gera þetta. 675 00:42:40,700 --> 00:42:50,240 Fyrir int i = 0; i> 0 - við skulum gera þetta mistök - i + +. 676 00:42:50,240 --> 00:42:52,720 Og við skulum ekki hér printf. Við skulum æfa það sem ég var að predika. 677 00:42:52,720 --> 00:43:00,190 Við skulum hafa a aðferð hér, ógilt kór, og við munum segja int i, 678 00:43:00,190 --> 00:43:06,830 og þá ætla ég að segja printf - nei, við skulum gera þetta meira áhugavert. 679 00:43:06,830 --> 00:43:15,790 Við skulum reyndar ekki prenta eitthvað. Við skulum bara gera þetta: kór (i). 680 00:43:15,790 --> 00:43:20,390 Allt í lagi. Svo er þetta gallaðir því hvers vegna? 681 00:43:20,390 --> 00:43:23,380 Ég er að gera þetta upp eins og ég fer vegna þess að forritið er í raun ekki að gera neitt sem vekur áhuga. 682 00:43:23,380 --> 00:43:25,320 >> En það er ekki markmiðið. 683 00:43:25,320 --> 00:43:29,630 Markmiðið er að skrifa forrit sem helsta virka ekki hvað, virðist? 684 00:43:30,720 --> 00:43:32,860 Kalla sig. Og í raun, þurfum við ekki lykkju. 685 00:43:32,860 --> 00:43:37,200 Við skulum einfalda jafnvel þetta bara þannig að ekki missa sjónar á raunverulega grundvallar galla. 686 00:43:37,200 --> 00:43:39,640 Helstu símtöl kór að syngja nokkur kór, 687 00:43:39,640 --> 00:43:41,440 svo ég gerði eitthvað heimskulegt og ég hafði Viðlag kalla kór 688 00:43:41,440 --> 00:43:43,760 vegna þess að ég ráð að einhver annar var að fara að framkvæma það ef til vill, 689 00:43:43,760 --> 00:43:47,210 og nú er þetta ekki að fara að taka saman ennþá. Ég þarf að gera hvað? 690 00:43:47,210 --> 00:43:49,970 Ég þarf frumgerð, man. 691 00:43:49,970 --> 00:43:56,110 Þannig að ég þarf að hafa þig hér ógilt kór (int i); 692 00:43:56,110 --> 00:43:59,210 Svo nú ef ég fer niður - reyndar, við skulum nota stærri glugga. 693 00:43:59,210 --> 00:44:01,980 Við skulum fara á undan og gera kór. 694 00:44:01,980 --> 00:44:06,490 Við skulum fara á undan og gera kór. 695 00:44:06,490 --> 00:44:08,370 Notkun undeclared auðkenni i. 696 00:44:08,370 --> 00:44:12,500 Ó, það var heimskulegt. Við þurfum ekki á rök. Við skulum bara gera þetta. 697 00:44:12,500 --> 00:44:16,370 Ég vildi að við hafði byrjað á þennan hátt. Það hefði verið miklu auðveldara forrit til að skrifa. 698 00:44:16,370 --> 00:44:25,590 There. Nú skulum fara yfir til stöðvarinnar gluggann minn, endursýning Clang, og hér við fara. 699 00:44:25,590 --> 00:44:28,460 Það var mjög hratt. 700 00:44:28,460 --> 00:44:31,150 Hvað í raun gerðist, þó? 701 00:44:31,150 --> 00:44:33,730 Jæja, núna er ég mun bæta prenta línu svo við getum séð. 702 00:44:33,730 --> 00:44:43,490 Leyfðu mér að segja printf ("Ég er hér") - engin breytur. Við munum láta það svona. 703 00:44:43,490 --> 00:44:47,480 Leyfðu mér að endursýning gera. Leyfðu mér að endursýning kór. 704 00:44:47,480 --> 00:44:57,380 Og ... svona. Halda áfram. 705 00:44:57,380 --> 00:44:59,930 Sem hliðar, hvers vegna hefur það hrundi ekki enn? 706 00:44:59,930 --> 00:45:02,080 Skiptingu kenna gerðist frábær hratt áður. 707 00:45:02,080 --> 00:45:06,570 [Inaudible nemandi svar] >> Einmitt. Svo tekur það tíma til að prenta út, ekki satt? 708 00:45:06,570 --> 00:45:08,610 Það tekur bara meiri vinnu á hluta tölva '. 709 00:45:08,610 --> 00:45:10,620 Og það er það: Sundurliðun kenna. 710 00:45:10,620 --> 00:45:12,340 >> Svo taka bara hversu hratt forrit keyra. 711 00:45:12,340 --> 00:45:14,130 Ef þú ert ekki að prenta neitt, frábær fljótur. 712 00:45:14,130 --> 00:45:18,770 En við fengum samt þessa skiptingu galli því hvað var að gerast? 713 00:45:18,770 --> 00:45:21,210 Ef þú hugsa um hvernig minni tölvunnar er sett fram, 714 00:45:21,210 --> 00:45:28,740 þetta verður að vera aðal, en hér skulum bara kalla þetta viðlaginu, og við skulum kalla þennan kór. 715 00:45:28,740 --> 00:45:34,550 Og nú ef ég fagurfræði rétt minn, þetta er bara að fara að segja Viðlag Viðlag Viðlag 716 00:45:34,550 --> 00:45:40,550 Viðlag Viðlag Viðlag Viðlag Ad nauseum, og að lokum, hvað er að fara að gerast? 717 00:45:40,550 --> 00:45:45,630 Ef stór mynd, bókstaflega er þetta, það gerist bara hugtök? 718 00:45:46,520 --> 00:45:48,630 Stafla overruns hrúga. 719 00:45:48,630 --> 00:45:51,940 Eða verra, Farið þér bara allt, þar á meðal texta hluti, 720 00:45:51,940 --> 00:45:54,590 sem er 0s og 1s sem tákna program. 721 00:45:54,590 --> 00:45:57,080 Í stuttu máli, þetta er bara frábær, frábær slæmt. 722 00:45:57,080 --> 00:45:58,830 Program hefur stefnt úr böndunum. 723 00:45:58,830 --> 00:46:01,220 Þú ert að nota vegur meira minni en þú ætlaðir 724 00:46:01,220 --> 00:46:03,960 allt vegna heimskulegt mistök í þessu tilviki, 725 00:46:03,960 --> 00:46:08,040 eða í þessu tilfelli mjög vísvitandi gert virka kalla sig. 726 00:46:08,040 --> 00:46:09,500 Nú, þetta er ekki allt slæmt. 727 00:46:09,500 --> 00:46:13,800 Aðgerðir kalla sig hefur í raun mikið vald þegar þú notar það rétt. 728 00:46:13,800 --> 00:46:15,800 Ég hef ekki notað það á réttan hátt hér. 729 00:46:15,800 --> 00:46:19,780 Svo er þetta ekki allt slæmt, en sú staðreynd að ég hef aldrei í raun hætta að kalla mig 730 00:46:19,780 --> 00:46:23,520 er grundvallaratriði veikleiki hér í þessari áætlun. 731 00:46:23,520 --> 00:46:26,400 Hvar erum við að fara með þetta allt? Hvað er raunverulega að gerast? 732 00:46:26,400 --> 00:46:30,340 Þegar ég kalla vöxtur virka eins og við vorum að gera í þessum dæmum, 733 00:46:30,340 --> 00:46:33,420 Ég hafa gildi eins og 1 sem ég framhjá inn 734 00:46:33,420 --> 00:46:37,570 Ég fara í afrit af númer 1, þannig að eftirfarandi gerist. 735 00:46:37,570 --> 00:46:44,240 Við skulum fara í aukningu dæmis, þessi strákur rétt hérna. 736 00:46:44,240 --> 00:46:46,870 Hér er það sem er raunverulega að gerast. 737 00:46:46,870 --> 00:46:53,400 Þegar ég kalla vöxtur og ég fara í x, pictorially, hvað er að gerast hér er þetta. 738 00:46:53,400 --> 00:46:59,520 >> Ef ég hef verðmæti 1 geymdar hér og ég kalla reyndar vöxtur, 739 00:46:59,520 --> 00:47:04,330 sem nú heitir Viðlag - iPad er að kasta mér út hér. 740 00:47:04,330 --> 00:47:09,760 Við skulum kalla þetta vöxtur, og við vitum ekki hvað þetta næsta aðgerð er að fara til vera. 741 00:47:09,760 --> 00:47:14,840 Svo hvað er raunverulega að gerast er hér einhvers staðar á helstu Ég er klumpur af minni 742 00:47:14,840 --> 00:47:17,000 sem geyma númer 1. 743 00:47:17,000 --> 00:47:19,380 Þegar ég kalla vöxtur, ég nota annað klumpur af minni, 744 00:47:19,380 --> 00:47:21,230 en nú hef ég eintak af 1. 745 00:47:21,230 --> 00:47:26,660 Þegar ég hækka þessi gildi, þetta verður 2, 746 00:47:26,660 --> 00:47:30,560 en þá hvað gerist eins fljótt og skilar vöxtur? 747 00:47:30,560 --> 00:47:33,630 Þetta minni bara fær afhent aftur til stýrikerfi, 748 00:47:33,630 --> 00:47:37,450 sem þýðir allt sem þú hefur gert er ekkert gagnlegt. 749 00:47:37,450 --> 00:47:43,120 The 1 sem var upphaflega að finna í Main er enn í raun þar. 750 00:47:43,120 --> 00:47:44,890 Hvar erum við að fara með þetta? 751 00:47:44,890 --> 00:47:49,770 Það kemur í ljós að í minni þú hefur þetta bak-til-bak röð bytes 752 00:47:49,770 --> 00:47:53,050 sem þú getur sett efni á, og það kemur í ljós að við höfum nú þegar séð eitthvað 753 00:47:53,050 --> 00:47:55,390 sem felur í sér að setja það aftur til baka til baka til baka. 754 00:47:55,390 --> 00:47:59,860 Hvað er band byggt á viku 1 og nú viku 2? 755 00:48:00,020 --> 00:48:01,980 Þetta er bara safn af stöfum. 756 00:48:01,980 --> 00:48:04,310 Svo kemur í ljós eins og þú getur sett númer í minni, 757 00:48:04,310 --> 00:48:06,990 álíka er hægt að setja stafi í minni. 758 00:48:06,990 --> 00:48:10,530 Og þegar við erum að byrja að setja stafi í minni aftur til baka til baka til baka, 759 00:48:10,530 --> 00:48:13,620 það kemur í ljós að notkun á einföldustu hlutum eins og að lykkja eða while lykkju, 760 00:48:13,620 --> 00:48:17,170 við getum iterate frá vinstri til hægri á stöfum í streng 761 00:48:17,170 --> 00:48:20,600 og byrja að nudda þá í mismunandi stafi að öllu leyti - 762 00:48:20,600 --> 00:48:23,370 a gæti orðið b, B gæti orðið c - 763 00:48:23,370 --> 00:48:27,780 svo að lokum, getum við tekið ensku setningu sem raunverulega vit 764 00:48:27,780 --> 00:48:30,310 og breyta öllum þeim bréfum eitt í einu 765 00:48:30,310 --> 00:48:34,400 með því að ganga í gegnum minni tölvunnar okkar vinstri til hægri til að raunverulega dulkóða. 766 00:48:34,400 --> 00:48:35,810 Svo skulum taka fimm mínútna hlé okkar hér, 767 00:48:35,810 --> 00:48:40,730 og þegar við komum til baka, munum við byrja þetta ferli spæna upplýsingar. 768 00:48:42,020 --> 00:48:43,520 >> Allt í lagi. 769 00:48:43,520 --> 00:48:48,070 Áður en við kafa í sumar Crypto og þetta kallast fylki, 770 00:48:48,070 --> 00:48:51,470 láta mig hlé fyrir einhverjar spurningar því mér finnst eins og ég virkilega svona muddled 771 00:48:51,470 --> 00:48:54,080 sumir af þeim viðfangsefnum. Svo skulum við festa nú ef við getum. 772 00:48:54,080 --> 00:48:58,700 Við töluðum bara um gildi aftur, talaði við um rök, 773 00:48:58,700 --> 00:49:03,250 og við ræddum um þessa hugmynd, sem við munum koma til baka á næstu vikum til að koma, 774 00:49:03,250 --> 00:49:08,720 að skoða minni og a heild búnt af þessum staflað stæði, svo að segja, 775 00:49:08,720 --> 00:49:12,660 frá botni á allt, þannig að hver bakki sem fær setja á mánudaginn 776 00:49:12,660 --> 00:49:16,530 táknar fall sem er nú að vera kölluð. 777 00:49:17,900 --> 00:49:20,260 Einhverjar spurningar? 778 00:49:20,260 --> 00:49:22,640 Leyfðu mér að spyrja hér. 779 00:49:22,640 --> 00:49:27,890 Leyfðu mér að einfalda þetta aftur hvað það var áður en sumir af fyrri Q & A. 780 00:49:27,890 --> 00:49:35,570 Sú staðreynd að vöxtur er opinn sviga, int númer, lokaður sviga - 781 00:49:35,570 --> 00:49:39,110 hvað þýðir INT fjöldi tákna? 782 00:49:39,110 --> 00:49:42,790 [Nemandi] An rök. >> Rök. Allt í lagi. En hvað er rifrildi? 783 00:49:42,790 --> 00:49:46,370 [Inaudible nemandi svar] >> Hvað er það? >> [Nemandi] Eitthvað sem þú fara inn 784 00:49:46,370 --> 00:49:49,940 Jæja, svo eitthvað sem þú fara inn og almennt, það er bara að inntak. 785 00:49:49,940 --> 00:49:52,450 Ef þú varst að skrifa hlutverk og tilgang sem virka í lífinu 786 00:49:52,450 --> 00:49:55,770 er að gera eitthvað svolítið öðruvísi í hvert skipti sem þú notar það, 787 00:49:55,770 --> 00:50:00,110 þá er eina leiðin fyrir það að gerast í raun virðist vera að gefa það með inntak 788 00:50:00,110 --> 00:50:03,510 þannig að það er hægt að gera eitthvað öðruvísi með þessi inntak hvert skipti. 789 00:50:03,510 --> 00:50:06,650 >> Svo þú þarft að tilgreina tvennt þegar aðgerð tekur inntak. 790 00:50:06,650 --> 00:50:09,590 Þú þarft að tilgreina nafnið sem þú vilt gefa það inntak 791 00:50:09,590 --> 00:50:12,700 eingöngu fyrir eigin hentar þannig að þú getur átt við það 792 00:50:12,700 --> 00:50:16,540 í aðgerð sem þú sjálfur ert að skrifa, eins og ég gerði hér í línu 32. 793 00:50:16,540 --> 00:50:20,800 En þú þarft líka að tilgreina tegund þess vegna C er forritunarmál 794 00:50:20,800 --> 00:50:25,940 það þarf bara að ef þú vilt breyta, þú þarft að segja tölvunni hvað gögn tegund það er, 795 00:50:25,940 --> 00:50:30,200 í stórum hluta þannig að það veit hversu margir bitar til að úthluta til að breyta 796 00:50:30,200 --> 00:50:33,020 vegna þess að það gæti verið 6 - því miður, það mun ekki vera 6. 797 00:50:33,020 --> 00:50:37,080 Það getur verið 16, það getur verið 8, það geta verið 32, jafnvel 64, 798 00:50:37,080 --> 00:50:39,130 en tölvan þarf að vita. 799 00:50:39,130 --> 00:50:43,180 Nú int á the vinstri-hönd hlið sýnir hvað, hins? 800 00:50:46,350 --> 00:50:48,850 [Inaudible nemandi svar] >> Hvað er það? >> [Nemandi] Tegund virka. 801 00:50:48,850 --> 00:50:53,610 The tegund af virka og, nánar tiltekið, hvaða framleiðsla þess. Hægri. 802 00:50:53,610 --> 00:50:57,380 Svo stendur en málið í sviga inntak þess, ef einhverjar eru, 803 00:50:57,380 --> 00:50:59,660 hlutur til vinstri táknar afköst hennar. 804 00:50:59,660 --> 00:51:03,530 Og í þessu tilfelli, vöxtur skilar greinilega int 805 00:51:03,530 --> 00:51:07,690 og svo er int aftur gerð þessa aðgerð. 806 00:51:07,690 --> 00:51:09,340 Hvað þýðir það að skila? 807 00:51:09,340 --> 00:51:15,090 Bókstaflega, þú nota leitarorð aftur og ef það sem þú ert að skila 808 00:51:15,090 --> 00:51:18,600 til hægri leitarorð er heiltala, 809 00:51:18,600 --> 00:51:21,660 þá er örugglega í samræmi við það sem við höfum lofað. 810 00:51:21,660 --> 00:51:26,410 Þú getur ekki gert eitthvað eins og this - Halló heimur - því það er strengur. 811 00:51:26,410 --> 00:51:28,860 >> Vitanlega er það ekki heiltala. 812 00:51:28,860 --> 00:51:33,140 Svo í stuttu máli, byrði er í raun á okkur, forritari, til að vera nákvæm 813 00:51:33,140 --> 00:51:37,770 um hvað við erum að fara aftur og þá í raun að ganga um aftur það. 814 00:51:37,770 --> 00:51:43,440 Samhengi hér er nú að minni tölvunnar er gígabæti, 2 gígabæta - 815 00:51:43,440 --> 00:51:45,920 hvað - kannski það sem meira er, kannski er það minna, 816 00:51:45,920 --> 00:51:49,050 en tölvan lítur það eins og að hafa mismunandi kafla. 817 00:51:49,050 --> 00:51:51,200 Eitthvað fer niður, eitthvað annað fer upp þar, 818 00:51:51,200 --> 00:51:54,290 mismunandi efni fer í miðjunni, og í dag við byrjum bara að segja söguna, 819 00:51:54,290 --> 00:51:56,340 en við munum koma aftur til þetta með tímanum. 820 00:51:56,340 --> 00:51:59,980 Fyrir nú, eina stykki af minni við umönnun í raun um er textinn hluti 821 00:51:59,980 --> 00:52:03,360 því að rétt táknar 0s og 1s að Clang hefur outputted. 822 00:52:03,360 --> 00:52:06,050 Svo þegar þú keyra skipun á lyklaborðinu eins a.out 823 00:52:06,050 --> 00:52:09,110 eða þú tvísmellir á táknið á Mac OS eða Windows, 824 00:52:09,110 --> 00:52:11,880 program er hlaðinn af harða diskinum í RAM 825 00:52:11,880 --> 00:52:16,330 og það er plopped efst RAM tölvunnar, svo að segja. 826 00:52:16,330 --> 00:52:20,450 Á sama tíma, eins og forritið byrjar að keyra og helstu fær kallað 827 00:52:20,450 --> 00:52:23,640 í forritið sem þú skrifar eða forrit Microsoft eða Apple skrifaði 828 00:52:23,640 --> 00:52:27,860 einhver heimamaður breytur hennar endar þarna neðst á minni tölvunnar. 829 00:52:27,860 --> 00:52:33,230 En ef helstu símtöl annar aðgerð sem sjálft hefur breytur eða rök, enda þeir upp yfir það. 830 00:52:33,230 --> 00:52:36,680 Og ef þessi aðgerð kallar eitthvað, enda þeir upp yfir það, fyrir ofan það, fyrir ofan hann. 831 00:52:36,680 --> 00:52:41,460 >> Og aðeins einu sinni aðgerð er lokið framkvæmd er stafla af stæði, svo að segja, 832 00:52:41,460 --> 00:52:43,240 byrja að fá lægri og lægri. 833 00:52:43,240 --> 00:52:48,250 Og þetta er það þá, í ​​hnotskurn, útskýrir hvers vegna þegar þú hringir teningur 834 00:52:48,250 --> 00:52:51,550 eða hringt vöxtur, þú ert liggur í afrit af gildi. 835 00:52:51,550 --> 00:52:55,520 Og hvað það þýðir pictorially er að þú ert bókstaflega að skrifa númer 1 836 00:52:55,520 --> 00:53:00,460 í öðru hluta af minni, að breyta því 1 til 2 að því er varðar aukningu 837 00:53:00,460 --> 00:53:04,820 eða á 8 er að ræða teningur og síðan henda því minni í burtu 838 00:53:04,820 --> 00:53:09,140 um leið og vöxtur eða virka teningur skilar. Spurning. 839 00:53:09,140 --> 00:53:12,900 [Nemandi] Hvar eru alþjóðlegt breytur geymdar? 840 00:53:12,900 --> 00:53:18,100 Global breytur eru geymdar í það sem nú heitir frumstilla gögn eða forsniðinn gögn, 841 00:53:18,100 --> 00:53:21,920 Munurinn er ef þú hafa a alheims breytu og þú gefur það strax gildi 842 00:53:21,920 --> 00:53:24,640 með jafn skilti, endar það upp efst þar, 843 00:53:24,640 --> 00:53:29,200 og ef þú segir bara int x, með ekkert gildi, endar það upp örlítið lægri í RAM 844 00:53:29,200 --> 00:53:31,710 einfaldlega með því að venju. 845 00:53:31,710 --> 00:53:34,940 Aðrar spurningar? Allt í lagi. 846 00:53:34,940 --> 00:53:37,340 Svo þessari mynd mun koma til baka eins og við fá öflugri 847 00:53:37,340 --> 00:53:39,170 við það sem við getum gert við tölvuna, 848 00:53:39,170 --> 00:53:42,720 En nú, við skulum hafa stutta inngang dulmál, 849 00:53:42,720 --> 00:53:46,080 ákveðin tegund af dulkóðun sem ekki leysa öll vandamál heimsins 850 00:53:46,080 --> 00:53:47,720 en er að leysa sumir af þeim. 851 00:53:47,720 --> 00:53:51,700 Í þessu tilfelli hér, höfum við eitthvað sem kallast leyndarmál-lykill dulmál. 852 00:53:51,700 --> 00:53:56,410 Secret-lykill dulmál, eins og nafnið bendir til, sækir öryggi sitt frá leyndarmál. 853 00:53:56,410 --> 00:54:00,690 >> Fyrir dæmi, ef þú varst aftur í grunnskóla og þú varst liggur smá leyndarmál ást bréf 854 00:54:00,690 --> 00:54:04,850 við strák eða stelpu sem þú varst alger á, ef þú vildir fara að huga um áhorfendur, 855 00:54:04,850 --> 00:54:08,380 þú sennilega myndi ekki skrifa svona athugasemd á ensku eða hvað sem móðurmál þitt er. 856 00:54:08,380 --> 00:54:13,340 Frekar, gætir þú dulkóða það eða þú gætir bara sent þeim textaskilaboð þessa dagana. 857 00:54:13,340 --> 00:54:15,460 En þú gætir í raun fara þá athugasemd um kennslustofunni. 858 00:54:15,460 --> 00:54:18,700 Og til að gera þetta á öruggan hátt þannig að vinir þínir og kennarinn 859 00:54:18,700 --> 00:54:22,650 veit ekki hvað þú ert að skrifa, getur þú komið upp með nokkuð einfalt reiknirit, 860 00:54:22,650 --> 00:54:25,920 ungur þó að þú gætir verið, bara Scramble orð. 861 00:54:25,920 --> 00:54:28,130 Svo í stað þess að skrifa að þú gætir skrifað b, 862 00:54:28,130 --> 00:54:30,220 stað b þú gætir skrifað c, 863 00:54:30,220 --> 00:54:32,140 stað C þú gætir skrifað d, og svo framvegis. 864 00:54:32,140 --> 00:54:34,360 Eða þú gætir komið upp með a fleiri háþróaður þýðingu 865 00:54:34,360 --> 00:54:36,720 bréfa til mismunandi stafi. 866 00:54:36,720 --> 00:54:39,740 En aflinn er strákur eða stelpa sem þú ert að senda þetta í huga 867 00:54:39,740 --> 00:54:45,020 þarf að vita eitthvað, sem er það, augljóslega? >> [Nemandi] Það sem þú ert að senda. 868 00:54:45,020 --> 00:54:49,720 Hvaða leyndarmál er, eins og það er að kortlagning á milli og er b og er c og d's. 869 00:54:49,720 --> 00:54:54,650 Er það að bæta bara 1 á hvert bréf til að fara frá A til B, B til C? 870 00:54:54,650 --> 00:54:56,670 Er það flóknara en það? 871 00:54:56,670 --> 00:55:01,540 >> Svo þú og mylja þína að hafa þetta leyndarmál upplýsingar, 872 00:55:01,540 --> 00:55:03,190 en það er góður af a grípa-22 hér. 873 00:55:03,190 --> 00:55:06,830 Ef þetta er í fyrsta skipti sem þú ert að senda þetta ást bréf í bekknum, 874 00:55:06,830 --> 00:55:10,720 Hvernig er það strákur eða stelpa að fara að vita hvað leyndarmál jafnvel er? 875 00:55:10,720 --> 00:55:13,930 Svo leyndarmál-lykill dulritunarstjórneiningunni ekki leysa öll vandamál heimsins, 876 00:55:13,930 --> 00:55:16,320 og það er í raun samband hér að við munum koma aftur til að enda hverrar annar. 877 00:55:16,320 --> 00:55:25,110 Sama flestir af okkur veit ekki einhver sem virkar, til dæmis á Amazon.com, 878 00:55:25,110 --> 00:55:28,190 og enn margir af okkur hafa líklega keypt efni á Amazon.com, 879 00:55:28,190 --> 00:55:31,990 og við höfum verið kennt að gera ráð fyrir að þessir e-verslun viðskipti eru örugg. 880 00:55:31,990 --> 00:55:36,470 The URL segir sennilega https, það er kannski kjánalegt lítill padlock helgimynd einhvers staðar, 881 00:55:36,470 --> 00:55:39,930 það er einhvers konar dulmál tryggja kreditkortið þitt 882 00:55:39,930 --> 00:55:42,160 milli þín og Amazon.com. 883 00:55:42,160 --> 00:55:45,430 Og enn ef Dulmálsvísindi felur vita nokkur leyndarmál 884 00:55:45,430 --> 00:55:48,620 og enn ég veit ekki hver á Amazon og ég hef svo sannarlega ekki komið hvers konar leyndarmál 885 00:55:48,620 --> 00:55:52,710 við einhvern á Amazon, hvernig er tölvan mín eða vafrinn minn að gera þetta? 886 00:55:52,710 --> 00:55:55,720 Það kemur í ljós að það er annars konar dulmál alveg að leysa þessi vandamál. 887 00:55:55,720 --> 00:55:57,670 En í dag, munum við leggja áherslu á einfalda einn 888 00:55:57,670 --> 00:56:00,290 þar sem þú getur gengið fyrirfram að vita nokkur leyndarmál 889 00:56:00,290 --> 00:56:03,760 eins +1 eða sumir kortlagning milli og er B. 890 00:56:03,760 --> 00:56:05,840 Og ferlið dulmál felur yfirleitt þetta. 891 00:56:05,840 --> 00:56:08,620 Þú hafa sumir texta, sýnt er hér til vinstri, 892 00:56:08,620 --> 00:56:12,930 að keyra það í gegnum einhvers konar reiknirit eða aðferð til að dulkóða það - 893 00:56:12,930 --> 00:56:15,100 Kannski er það bara verður b, B verður C - 894 00:56:15,100 --> 00:56:17,490 og þá endar með ciphertext. 895 00:56:17,490 --> 00:56:20,380 Á sama tíma, þegar fær mylja þína þetta leyndarmál huga, 896 00:56:20,380 --> 00:56:24,200 hann eða hún hefur að hallmæla það þá því yfirleitt snúið að reiknirit 897 00:56:24,200 --> 00:56:27,190 svo sem til að fá til baka texta. 898 00:56:27,190 --> 00:56:28,960 Það eru líkamleg incarnations þetta. 899 00:56:28,960 --> 00:56:31,680 >> Til dæmis, þetta er smá leyndarmál tengd hringur, 900 00:56:31,680 --> 00:56:35,110 og þetta er hringur í þeim skilningi að það er tveir hringir hér. 901 00:56:35,110 --> 00:56:38,490 Á utan jaðri þetta, það er bréf A í gegnum Z, 902 00:56:38,490 --> 00:56:40,340 þó þeir eru af handahófi, 903 00:56:40,340 --> 00:56:42,880 og að innan, það er í raun nokkrar tölur 904 00:56:42,880 --> 00:56:46,620 svo að með þessum hring er hægt konar snúa úti en ekki inni 905 00:56:46,620 --> 00:56:49,140 í því skyni að stilla upp tölur með bókstöfum. 906 00:56:49,140 --> 00:56:53,020 Frá bíómynd sem heitir A Christmas Story, munt þú sjá að lítill Ralphie 907 00:56:53,020 --> 00:56:58,000 var svo fús til að reikna út hvað leyndarmál skilaboð Little munaðarlaus Annie var að hann 908 00:56:58,000 --> 00:57:02,570 sem hafði verið send, að ég held, í formi tölugildi skilaboð á korn kassa 909 00:57:02,570 --> 00:57:07,220 og þú þurftir að safna öllum litlu spil sem kom í korn kassi, 910 00:57:07,220 --> 00:57:09,770 þú þarft að senda þeim, var að fá til baka leyndarmál leyniletri hringinn 911 00:57:09,770 --> 00:57:13,910 þannig að þú getur loksins fundið út hvað kortlagning er milli bókstafa og tölustafa 912 00:57:13,910 --> 00:57:15,550 eða bréf og bréf. 913 00:57:15,550 --> 00:57:19,520 Hvernig í tölvu getum við farið um framkvæmd eða hönd hlutina eins og þetta? 914 00:57:19,520 --> 00:57:22,560 Við þurfum a vegur til að tjá okkur smá sveigjanlegan 915 00:57:22,560 --> 00:57:25,080 en breytum okkar svona langt hafa leyft. 916 00:57:25,080 --> 00:57:29,000 Við höfum haft ints, við höfum haft chars, höfum við fengið fljóta og tvöfaldar og nokkrum öðrum, 917 00:57:29,000 --> 00:57:34,200 en þeir sem eru einstök stykki af minni sem í raun ekki að leyfa okkur að tjá hlutina 918 00:57:34,200 --> 00:57:36,440 eins og orð og setningar og setningar. 919 00:57:36,440 --> 00:57:38,630 Reyndar höfum við kallað slíkt strengi, 920 00:57:38,630 --> 00:57:42,660 en við lofum því að þetta er í raun bara einföldun á CS50 bókasafni 921 00:57:42,660 --> 00:57:45,540 að við erum að stefna á að afhýða aftur. 922 00:57:45,540 --> 00:57:47,500 Og svo skulum byrja að gera það hér. 923 00:57:47,500 --> 00:57:49,840 Leyfðu mér að fara á undan og opna skrá - 924 00:57:49,840 --> 00:57:54,100 allar þessar skrár eru í boði, eins og venjulega, á netinu - kallast array.c 925 00:57:54,100 --> 00:57:58,960 til að leysa vandamál óskyld strengi en það málar mynd hér 926 00:57:58,960 --> 00:58:01,520 um hvernig við gætum notað eitthvað sem kallast fylki. 927 00:58:01,520 --> 00:58:04,050 >> An array er gögn tegund. 928 00:58:04,050 --> 00:58:10,730 Það er tegund af breytu af tegund sem hefur marga smærri gagnatög inni í því 929 00:58:10,730 --> 00:58:12,680 aftur til baka til baka til baka. 930 00:58:12,680 --> 00:58:16,980 Svo til dæmis, ef við vildum að skrifa lítið forrit sem gefur þér quiz meðaltali þinn 931 00:58:16,980 --> 00:58:19,780 í námskeiði eins og 50 sem hefur 2 Skyndipróf, 932 00:58:19,780 --> 00:58:23,450 þú getur mjög auðveldlega skrifa þetta forrit byggir jafnvel á sum efni í síðustu viku 933 00:58:23,450 --> 00:58:28,830 með því að nota GetInt og a par af breytum: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 Og það er nokkuð augljóst. 935 00:58:30,550 --> 00:58:33,500 Það er kannski 10, 20 línur af kóða max til að framkvæma áætlun 936 00:58:33,500 --> 00:58:38,940 sem spyr notanda um 2 quiz skora og þá reiknar meðaltal þeirra 937 00:58:38,940 --> 00:58:42,020 með því að bæta þeim saman, deila með 2, og þá prenta árangurinn. 938 00:58:42,020 --> 00:58:46,400 Við gætum líklega gert það nokkuð auðvelt núna eftir nokkurn fjölda mínútna. 939 00:58:46,400 --> 00:58:49,450 En vandamálið er að gera ráð fyrir að 50 höfðu 3 Skyndipróf eða 4. 940 00:58:49,450 --> 00:58:52,830 Segjum að þú vildir að nota sama forrit fyrir flokk sem hafði vikulega Skyndipróf. 941 00:58:52,830 --> 00:58:55,100 Hugsaðu um flokk sem hefur vikulega Skyndipróf. 942 00:58:55,100 --> 00:58:58,840 Ef það er 16 eða svo vikur á önn, nú þú ert 16 breytur: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, int quiz4. 944 00:59:03,030 --> 00:59:06,870 Um leið og þú byrjar að sjá þetta offramboð, þetta afrita og líma af kóða, 945 00:59:06,870 --> 00:59:09,810 það ætti að fara að gera sem þú vilt að það væri betri leið. 946 00:59:09,810 --> 00:59:13,610 Og sem betur fer, því fylki er. Svo skulum gera þetta. 947 00:59:13,610 --> 00:59:16,700 Í fyrsta lagi láta mig kynna mjög einfaldur hlutur sem við höfum ekki notað hingað til, 948 00:59:16,700 --> 00:59:18,820 en þú munt sjá hann stundum í kóða. 949 00:59:18,820 --> 00:59:21,270 >> Þetta er það sem er almennt kallað stöðug. 950 00:59:21,270 --> 00:59:24,410 Svo er það stöðug í þeim skilningi að þetta gildi ekki breytingar. 951 00:59:24,410 --> 00:59:26,450 Mannlegi venju þegar skapa stöðug 952 00:59:26,450 --> 00:59:30,420 er að nota alla hástafi bara svo að það stendur í raun út í kóðanum þínum, 953 00:59:30,420 --> 00:59:34,270 og sérstakt leitarorð sem þú notar í C ​​# skilgreina. 954 00:59:34,270 --> 00:59:39,970 Þannig að við segjum # skilgreina, þá pláss, þá er orðið sem þú vilt nota fyrir nafni Constant er 955 00:59:39,970 --> 00:59:41,730 og þá verðmæti þeirra stöðug. 956 00:59:41,730 --> 00:59:44,710 Tilkynning er annar framselja eitthvað til breytu. 957 00:59:44,710 --> 00:59:46,430 Það er ekkert samasem merkið, það er engin semíkommu. 958 00:59:46,430 --> 00:59:49,140 Þetta er það sem er almennt þekktur sem Preprocessor tilskipun 959 00:59:49,140 --> 00:59:50,840 en meira um það seinna. 960 00:59:50,840 --> 00:59:56,350 Fyrir nú, það skapar unchanging verðmæti heitir test 961 00:59:56,350 --> 00:59:58,290 raunverulegt Hvers tölustafir er 2. 962 00:59:58,290 --> 01:00:02,180 Svo hvar sem þú sérð Skyndipróf, Skyndipróf, Skyndipróf um þessa skrá, 963 01:00:02,180 --> 01:00:04,230 það er bara númer 2. 964 01:00:04,230 --> 01:00:06,550 Ef ég horfi á helstu skulum sjá hvernig þetta virkar. 965 01:00:06,550 --> 01:00:09,770 Fyrst lítur það svolítið dulinn, en það er allt efni frá viku 1.. 966 01:00:09,770 --> 01:00:12,210 Biddu notandann fyrir bekk. Hvernig gerum við þetta? 967 01:00:12,210 --> 01:00:17,350 Í línu 22 - þetta er í raun safaríkur hluti - ég lýsa yfir fljóta 968 01:00:17,350 --> 01:00:23,240 en ekki bara einn fljóta. Ég er að lýsa, heldur fjölda fljótandi punkta gildi. 969 01:00:23,240 --> 01:00:27,700 Þessi breyta er að fara að vera kölluð einkunna, sem gefið í skyn hér, 970 01:00:27,700 --> 01:00:31,420 en eina stykki af nýjum setningafræði eru þá þessir hornklofum. 971 01:00:31,420 --> 01:00:37,280 Sú staðreynd að ég hef sagt float bekk og þá opinn krappi og þá tala - 972 01:00:37,280 --> 01:00:40,980 eftir ef þetta er stöðug þetta er bara eins og við gerðum þetta - 973 01:00:40,980 --> 01:00:46,840 þetta þýðir, "Hey tölva, gefa mér 2 fljóta og við skulum sameiginlega kalla þá einkunna." 974 01:00:46,840 --> 01:00:51,780 >> Þetta er í mótsögn við miklu meira leiðinlegur aðferð eins og þessa: fljóta grade1; 975 01:00:51,780 --> 01:00:54,580 fljóta grade2, og svo framvegis. 976 01:00:54,580 --> 01:00:58,310 Svo gerir fylki okkur að framkvæma þessa hugmynd en mun minna messily, 977 01:00:58,310 --> 01:01:04,560 á þann hátt sem við getum skrifað 1 lína af kóða í staðinn, segjum, 16 fyrir 16 vikna önn. 978 01:01:04,560 --> 01:01:09,060 Ég vildi ekki harður-númer 2 vegna þess að ef þú hugsar um þetta núna rökrétt, 979 01:01:09,060 --> 01:01:12,560 Segjum næsta ári CS50 breytingar 3 Skyndipróf staðinn 980 01:01:12,560 --> 01:01:15,010 og ég var númer 2 hér, var ég númer 2 hér, 981 01:01:15,010 --> 01:01:17,210 Ég átti númer 2 hér á númer 2 hér. 982 01:01:17,210 --> 01:01:19,890 Það verður mjög leiðinlegur og mjög auðvelt að skrúfa upp 983 01:01:19,890 --> 01:01:26,550 og tilviljun breyta 1 gildi 3 og missa einhver önnur verðmæti 2. 984 01:01:26,550 --> 01:01:30,660 Þannig að ég ætla að í stað ágrip þetta í burtu og nota þetta stöðugt að 985 01:01:30,660 --> 01:01:32,520 eins og nafn þess gefur til kynna, aldrei breytist. 986 01:01:32,520 --> 01:01:35,870 Og nú Skyndipróf sama hvort við höfum mismunandi á þessu ári eða næsta, 987 01:01:35,870 --> 01:01:39,380 Ég er bara að breyta því á einum stað hérna efst. 988 01:01:39,380 --> 01:01:41,230 Svo það er allt fasti er. 989 01:01:41,230 --> 01:01:47,100 Á meðan, the nýr huglæg lögun er þessi af fylki. 990 01:01:47,100 --> 01:01:55,030 Svo hornklofum gefa mér marga fljóta og lætur mig kalla saman þá einkunna hér. 991 01:01:55,030 --> 01:01:56,720 Svo nú skulum við sjá hvað ég ætla að gera. 992 01:01:56,720 --> 01:01:59,220 Hér í línu 24 er upphaf a for lykkju. 993 01:01:59,220 --> 01:02:03,380 >> Þetta er í raun ekkert fínt. Það er bara með skyndipróf í stað harður-dulmáli númer. 994 01:02:03,380 --> 01:02:06,740 En það er ekkert vitsmunalega það frábrugðin síðustu viku. 995 01:02:06,740 --> 01:02:11,650 Þetta er bara printf, svo printf ("Quiz #% d af% d:") 996 01:02:11,650 --> 01:02:16,670 vegna þess að ég vil bara að prenta út gefa mér quiz númer 1 af 2 og svo 2 af 2. 997 01:02:16,670 --> 01:02:18,480 Þannig að þetta er eingöngu fagurfræðilegu hlutur. 998 01:02:18,480 --> 01:02:21,000 En áhugaverður hluti er nú í línu 27. 999 01:02:21,000 --> 01:02:27,840 Til þess að fylla í einn af tveimur staðgengla með fljótandi punkta gildi, 1000 01:02:27,840 --> 01:02:29,640 þú notar aftur hornklofum. 1001 01:02:29,640 --> 01:02:35,170 Í þessu tilfelli er ég að nota i því þetta fyrir lykkju hefur byrjað með i sporði hvaða gildi, virðist? 1002 01:02:35,170 --> 01:02:36,670 [Nemandi] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Svo á fyrsta endurtekning þessa lykkju, það er eins og ég skrifaði þetta í kóða, 1004 01:02:40,990 --> 01:02:46,310 en á seinni endurtekning þessa lykkju, það er eins og ég skrifaði þetta í númerið mitt. 1005 01:02:46,310 --> 01:02:49,970 En sú staðreynd að ég er að nota breytu er fullkominn, því eins og nafnið gefur til kynna, 1006 01:02:49,970 --> 01:02:52,600 það er mismunandi gildi á hverjum endurtekning, 1007 01:02:52,600 --> 01:02:55,900 þannig að ég ætla að fylla þennan fjölda einn blettur í einu. 1008 01:02:55,900 --> 01:02:57,380 Hvað er þetta array líta út? 1009 01:02:57,380 --> 01:03:01,570 Ástæðan Ég teiknaði frábær einfalt rétthyrningur á skjánum hér var áður af þessum sökum. 1010 01:03:01,570 --> 01:03:05,590 An array er bara klumpur af minni eftir öðru klumpur af minni 1011 01:03:05,590 --> 01:03:08,570 eftir öðru klumpur af minni og svo framvegis. 1012 01:03:08,570 --> 01:03:13,120 Svo ef array minn er stærð 2 í þessu tilfelli hér, allt sem ég væri að gera 1013 01:03:13,120 --> 01:03:20,200 með því að slá á stig quiz minn eins og hér - ég fékk 100 á þessu og þá fékk ég 99 á þessu - 1014 01:03:20,200 --> 01:03:24,970 þá minni gæti ekki einu sinni hægt að nota vegna þess að ég hef bara beðið í tölvunni 1015 01:03:24,970 --> 01:03:26,840 fyrir fjölbreytta stærð 2. 1016 01:03:26,840 --> 01:03:28,600 Þeir ferningar eru enn þarna, ekki satt? 1017 01:03:28,600 --> 01:03:32,670 Þú hefur enn 2 gígabæta vinnsluminni, jafnvel ef þú ert bara að biðja um 2 fljóta. 1018 01:03:32,670 --> 01:03:36,840 Svo er hugmyndin á bak við fylki sem tölvan bara tekur klumpur af minni 1019 01:03:36,840 --> 01:03:41,340 og þá apportions smærri stykki aftur til baka til baka til baka. 1020 01:03:41,340 --> 01:03:43,310 Og svo er það allt fylki er. 1021 01:03:43,310 --> 01:03:47,350 >> Það er samliggjandi klumpur af inni minni sem hægt er að setja hlutina. 1022 01:03:47,350 --> 01:03:50,700 Þetta gerist þá gera bara sumir leiðinlegur tölur. 1023 01:03:50,700 --> 01:03:54,640 Ef ég skruna niður hér, þetta er þar sem ég iterate þá yfir fylki. 1024 01:03:54,640 --> 01:03:58,020 Ég kem upp með samantekt á öllum gildum í array 1025 01:03:58,020 --> 01:04:02,470 og þá vil ég nota umferð virka hér til raunverulega gera summan deilt með Skyndipróf. 1026 01:04:02,470 --> 01:04:06,320 En láta mig veifa hönd mína á það sem tegund af nógu tölur fyrir nú. 1027 01:04:06,320 --> 01:04:08,370 En allt sem er að gera fyrir mig að lokum er computing að meðaltali. 1028 01:04:08,370 --> 01:04:13,580 Svo fyrsta quiz plús annað quiz deilt með 2 og þá prenta það út sem heiltala. 1029 01:04:13,580 --> 01:04:17,280 En við skulum umskipti nú annað dæmi sem heitir string1, 1030 01:04:17,280 --> 01:04:20,700 sem málar svipaða mynd en með strengi. 1031 01:04:20,700 --> 01:04:23,940 Leyfðu mér að fara á undan og einfalda þetta fyrir réttlátur a augnablik. 1032 01:04:23,940 --> 01:04:27,090 Fyrirgefðu inndrátt fyrir nú. 1033 01:04:27,090 --> 01:04:30,870 Tilkynning í línu 19 í þessu dæmi, fæ ég band frá notandanum. 1034 01:04:30,870 --> 01:04:34,640 En eftir það sem ég er næst að gera í línum 22 og áfram. 1035 01:04:34,640 --> 01:04:41,250 Ég er reyndar iterating frá I upp í - og þetta er nýtt bragð - strlen, band lengd. 1036 01:04:41,250 --> 01:04:44,880 Þetta er fall sem kemur með C að ef það líður það band, 1037 01:04:44,880 --> 01:04:47,730 það segir þér hversu margir stafir eru í því band. Það er allt. 1038 01:04:47,730 --> 01:04:51,550 Og sú staðreynd að það er strlen stað lengd strengur er bara vegna þess að það er meira gagnorðar. 1039 01:04:51,550 --> 01:04:55,100 Þrjátíu árum síðan, líkar að skrifa hlutina eins succinctly og mögulegt er, 1040 01:04:55,100 --> 01:04:57,630 þannig að við höfum haldið að venju hér. 1041 01:04:57,630 --> 01:05:00,660 i + + þýðir bara hækka ég í hverri ítrun. 1042 01:05:00,660 --> 01:05:02,990 Og nú eftir þetta, sem er mjög áhugavert. 1043 01:05:02,990 --> 01:05:09,180 Í línu 24, segi ég, "Computer, gefa mér staf, 8 bita, og kalla það c." 1044 01:05:09,180 --> 01:05:12,630 En hvað er þetta á hægri hönd hlið að segja? 1045 01:05:13,490 --> 01:05:16,530 Á ensku, hvað þýðir að tákna? 1046 01:05:16,530 --> 01:05:18,730 [Nemandi] Fyrsti stafurinn í fylki. 1047 01:05:18,730 --> 01:05:20,790 Einmitt. Gefðu mér fyrsta stafinn í fylkinu. 1048 01:05:20,790 --> 01:05:24,090 Eða, almennt, gefa mér ith staf í fylki. 1049 01:05:24,090 --> 01:05:26,100 Og átta sig á að það er mikilvægt nú að eins tölvunarfræðinga, 1050 01:05:26,100 --> 01:05:27,890 við erum í raun að telja frá 0. 1051 01:05:27,890 --> 01:05:29,720 >> Þú ert ekki með ákvörðun nú að byrja að gera þetta. 1052 01:05:29,720 --> 01:05:34,160 Nú verður þú að haga sér í samræmi við væntingar í tölvunni og telja frá 0 1053 01:05:34,160 --> 01:05:38,180 því [0] er að fara til vera the fyrstur staf í streng, 1054 01:05:38,180 --> 01:05:42,150 [1] er að fara að vera annað, [2] er að fara að vera í þriðja, og svo framvegis. 1055 01:05:42,150 --> 01:05:49,720 Svo þetta forrit ef ég þýða það, þetta er aftur string1, svo að string1, 1056 01:05:49,720 --> 01:05:54,670 og nú hef ég keyrt string1 í Telnet mínu. 1057 01:05:54,670 --> 01:05:58,330 Það er að bíða fyrir hjálpina, svo ég ætla að slá í Davíð, Enter, 1058 01:05:58,330 --> 01:06:02,540 og nú prentar það Davíð allt á mismunandi línum því taka eftir hvað ég er að gera. 1059 01:06:02,540 --> 01:06:05,820 Ég er að prenta einn staf í einu. 1060 01:06:05,820 --> 01:06:10,100 Við munum ekki fara inn í smáatriði í dag um þetta, en ég eyddi smá stund síðan þessari skoðun hérna. 1061 01:06:10,100 --> 01:06:15,480 Það kemur í ljós að ef notandinn er að hegða sér illa, andstæðinga, eða bara rugla, 1062 01:06:15,480 --> 01:06:20,210 þú getur í raun ekki að gefa a band af einhverju lengd. 1063 01:06:20,210 --> 01:06:22,860 Ef þú högg the rangur lykill á lyklaborðinu, gætir þú gefur ekki band á öllum, 1064 01:06:22,860 --> 01:06:26,950 eða ef þú ert illgjarn, gætirðu reynt að líma á virði Gigabyte um ritgerð 1065 01:06:26,950 --> 01:06:29,290 að fylla þetta band, og ef tölvan keyrir út af minni, 1066 01:06:29,290 --> 01:06:32,710 það kemur í ljós að við erum að fara að fá aftur þetta sérstaka gildi kallast NULL. 1067 01:06:32,710 --> 01:06:35,580 Svo í bili, bara vita að það er þetta sérstaka gildi sem heitir NULL 1068 01:06:35,580 --> 01:06:39,580 sem mun gera okkur kleift að athuga þegar við erum út af minni, meðal annars. 1069 01:06:39,580 --> 01:06:45,630 En ef ég opna nú string2, taka einn munur hér. 1070 01:06:45,630 --> 01:06:48,210 Takið einn munur hér með string2. 1071 01:06:48,210 --> 01:06:51,340 Með string2, þetta for lykkju er svolítið öðruvísi. 1072 01:06:51,340 --> 01:06:55,010 >> Leyfðu mér að eyða NULLs svo að við getum talað um þá seinna. 1073 01:06:55,010 --> 01:06:57,800 Hvað er öðruvísi um for lykkju í þetta sinn? 1074 01:06:59,620 --> 01:07:01,670 Ég get farið aftur á fyrra dæmi. 1075 01:07:01,670 --> 01:07:08,580 Svo það er útgáfa 2, þetta er útgáfa 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 The strlen símtal er hvar? 1078 01:07:16,660 --> 01:07:18,860 Það er í fyrsta hluta til hliðar. 1079 01:07:18,860 --> 01:07:21,830 Allar hugsanir sem að hvers vegna ég er að gera þetta? Já. 1080 01:07:21,830 --> 01:07:24,560 [Nemandi] Svo þú kalla ekki virka hvert einasta skipti. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Svo við kalla ekki virka í hvert einasta skipti. Einmitt. 1082 01:07:26,440 --> 01:07:28,300 Muna úr fyrir lykkjur sem þeir eru frábær einföld 1083 01:07:28,300 --> 01:07:31,770 Þegar þú skilja tegund af því að þetta er frumstilling, ástand, og uppfærslu. 1084 01:07:31,770 --> 01:07:34,750 Vandamálið er að ástand gerist á hverjum endurtekning á lykkju. 1085 01:07:34,750 --> 01:07:40,010 Og svo í þessu dæmi hér, það sem er slæmt um þá staðreynd að þetta er ástand mitt? 1086 01:07:40,010 --> 01:07:41,830 [Nemandi] Þú ert að kalla strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Þú ert að hringja strlen aftur og aftur og aftur. 1088 01:07:44,340 --> 01:07:47,410 En þegar ég hef slegið í Davíð, lengd strengsins er 5, 1089 01:07:47,410 --> 01:07:49,650 og það er ekki að fara að breytast á hverjum endurtekning á lykkju 1090 01:07:49,650 --> 01:07:51,670 vegna þess að strengurinn er enn D-a-V-i-d. 1091 01:07:51,670 --> 01:07:55,320 Þannig að þetta er vísbending á hvað er að fara að verða sífellt mikilvægari hugmynd 1092 01:07:55,320 --> 01:08:00,410 þekkt sem hönnun ákvörðun sem bara gera ekki tölva gera óþarfa vinnu. 1093 01:08:00,410 --> 01:08:03,920 >> Rétt eins og laumast sýnishorn af pset2, pset2 í venjulegri útgáfu 1094 01:08:03,920 --> 01:08:07,030 er að fara að skora á þig að í raun innleiða fjölda dulmál, 1095 01:08:07,030 --> 01:08:10,410 sumir tala af reiknirit dulkóðun, svo að þú getur bæði dulkóða 1096 01:08:10,410 --> 01:08:13,840 og hallmæla leyndarmál skilaboð líkt annars Ralphie þar lesa úr leyniletri. 1097 01:08:13,840 --> 01:08:16,810 Í spjallþráð útgáfu pset2, þá ætlum við að fara aðeins lengra. 1098 01:08:16,810 --> 01:08:19,649 Við erum að fara að skila þér skrá úr raunverulegum tölvukerfi 1099 01:08:19,649 --> 01:08:23,479 sem inniheldur a heild búnt af notendanöfnum og raunverulegum brengla lykilorð, 1100 01:08:23,479 --> 01:08:26,939 og áskorun á spjallþráð útgáfa er að fara að vera að sprunga þá lykilorð 1101 01:08:26,939 --> 01:08:33,200 og reikna út hvaða dulmál eða hvað leyndarmál var notað til að í raun að búa þau lykilorð. 1102 01:08:33,200 --> 01:08:36,109 Og við erum að fara að gera þetta með því að nota nýja lögun hér C 1103 01:08:36,109 --> 01:08:40,630 sem ég ætla að gefa þér bara demo af kallast stjórn-lína rök. 1104 01:08:40,630 --> 01:08:44,229 Það kemur í ljós, eins og sumir af þú mega hafa séð í hluta eða í kennslubókum, 1105 01:08:44,229 --> 01:08:48,260 Helstu ekki alltaf að vera niður í sviga. 1106 01:08:48,260 --> 01:08:52,430 Það kemur í ljós að helstu má einnig skrifað svona, með tveimur þáttum, 1107 01:08:52,430 --> 01:08:56,870 argc og argv, þar argc er fjöldi orða 1108 01:08:56,870 --> 01:09:00,020 að þú skrifar eftir nafni áætlunarinnar á lína þinni 1109 01:09:00,020 --> 01:09:03,420 og argv er í raun orð. 1110 01:09:03,420 --> 01:09:07,540 Og eins og hornklofum þar benda, argv er greinilega fylki. 1111 01:09:07,540 --> 01:09:12,210 Það er að fara til vera a band eftir band eftir streng í minni. 1112 01:09:12,210 --> 01:09:16,010 >> Svo það sem við erum að fara að vera fær um að gera að byrja með pset 2 er eitthvað eins og this. 1113 01:09:16,010 --> 01:09:21,350 Ef ég geri argv1, sem er dæmi sem við munum koma til baka á mánudag, og keyra hana, 1114 01:09:21,350 --> 01:09:23,370 eftir því að það virðist ekki gera neitt enn. 1115 01:09:23,370 --> 01:09:25,490 Það prentar bara út nafnið sitt. 1116 01:09:25,490 --> 01:09:31,479 En ef ég segi bless flokki, eftir að þetta forrit virðist iterates 1117 01:09:31,479 --> 01:09:35,479 yfir hvert orð sem var slegið á the hvetja. 1118 01:09:35,479 --> 01:09:41,630 Og með hvaða hætti við munum fá aðgang að orð sem notandinn hefur slegið á að hvetja 1119 01:09:41,630 --> 01:09:49,160 er með því að breyta aðal byrja helgina frá int main (tóm) að int main (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 og þannig mun fæðast stjórn-lína rök. 1121 01:09:52,050 --> 01:09:57,100 Og þegar þú fá raunverulega háþróuð í þessu, verður þú að vera fær um að skrifa mjög trippað forrit 1122 01:09:57,100 --> 01:09:59,610 eins og þetta hér, sem fer umfram 1123 01:09:59,610 --> 01:10:03,940 Hluti af aðgerðum sem við höfum gert svona langt en allt mjög öflugur. 1124 01:10:03,940 --> 01:10:08,950 >> Þannig að við munum láta þetta með þetta á skjánum, og við munum sjá þig á mánudaginn. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]