[Powered by Google Translate] [Wiki 2, Inaendelea] [David J. Malan, Chuo Kikuu cha Harvard] [Hii ni CS50. - CS50.TV] Wote haki. Hii ni CS50, na hii ni mwisho wa wiki 2. Kama wewe wanatarajia kuwa na njaa kote wakati huu kesho, tunajua kwamba sisi ni kwenda kuitisha kama kesho kikundi kidogo, Alhamisi, 13:15. Kuna URL hii hapa kama wewe Ningependa RSVP. Nafasi ni mdogo, hivyo tafadhali kusamehe ikiwa fomu ya kujaa kwa muda kujaza hii nje. Mwingine URL, ingawa, ambayo inaweza kuwa ya riba ni hii. Katika tu kuhusu muda wa mwezi mmoja, bila shaka ni kwenda kuwa inapatikana wote kwa mapana zaidi kupitia edX, via ambayo folks kwenye mtandao itakuwa na uwezo wa kufuata pamoja, kushiriki katika kozi kabisa kikamilifu, kwa kweli. Wao utakuwa kutumia Appliance CS50 na CS50 Jadili na zaidi ya zana mbalimbali programu kwamba sisi tayari wamekuwa wakitumia huu muhula. Na moja ya mipango tunatarajia kuchukua kama majaribio mwaka huu ni kuona tu kiasi gani maudhui tunaweza kutafsiri katika lugha nyingine zinazozungumzwa na kuandikwa. Hivyo kama unaweza kuwa na maslahi katika kushiriki katika mradi huu ambapo sisi kutoa nakala ya Kiingereza na subtitles kwa mihadhara kozi ya na kaptula na semina na sehemu na kama, kama wewe kusema fluently au kuandika fluently baadhi lugha nyingine, tunataka upendo kushiriki kwa mradi huu ambapo wewe kuchukua moja au zaidi ya video, kutafsiri yao katika lugha ya wewe kujua vizuri kabisa. Ili kukupa hisia ya interface, kuna hii ya mtandao msingi user interface kwamba tutaweza kutumia ambayo kujenga kimsingi UI kama hii. Hii ilikuwa yangu kufundisha baadhi Halloween iliyopita, na upande wa kulia kuna katika nyeusi karibu na mihuri wakati hizi, utaona mambo mbalimbali waliotoka kinywa yangu kwamba siku, na kisha chini yake wewe utakuwa na uwezo wa kutafsiri katika lugha nyingine hasa nini ramani ni kati ya, katika kesi hii, Kiingereza na, kusema, Kihispania. Hivyo ni kweli sana user-kirafiki chombo. Unaweza Rewind na kufunga-mbele sana kwa urahisi na keyboard shortcuts. Hivyo kama ungependa kushiriki katika jaribio hili na kuwa na maneno yako kuonekana na kusoma na maelfu uwezekano wa folks huko nje, tafadhali jisikie huru kushiriki. Neno moja kuhusu kitten kutoka Jumatatu. Isije tumetuma ujumbe overly inatisha, kufanya kutambua kwamba, kama ofisi masaa zinaonyesha na kama sehemu kupendekeza, kubuni bila shaka ni mengi sana kuwa wanafunzi kushirikiana na kuzungumza na kazi kupitia seti tatizo na matatizo kwa pamoja, na kwa kweli mstari tu inakuja chini, tena, kazi wewe hatimaye kuwasilisha lazima yako mwenyewe. Na hivyo kabisa kwa uaminifu, katika masaa ya ofisi ni kabisa ya kawaida, ni kabisa kutarajiwa hata, kuwa kuzungumza na baadhi ya rafiki karibu na wewe. Kama yeye au yeye ni ikikabiliwa na mada baadhi na wewe ni kama, "Oh, vizuri, nikupe glimpse ya baadhi mstari wa kanuni kwamba mimi aliandika," hiyo ni nzuri, kinachotokea, na kwamba ni mazuri sana, nadhani, na mchakato wa kujifunza. Ambapo line anapata walivuka ni wakati kichwa ni aina ya tilted zaidi ya hapa kwa sekunde nyingi mno au dakika kwa kuwa kweli kuwa tu imekuwa nafasi kumfungulia kwa rafiki yako, na kwa hakika wakati mambo kupata kubadilishana kupitia barua pepe na Dropbox na kama, kuna pia ni mstari. Hivyo kwa njia zote kujisikia vizuri na kujisikia moyo wa kuzungumza na marafiki na wanafunzi kuhusu psets na zaidi na tu kutambua kwamba yale hatimaye kuwasilisha lazima kweli kuwa bidhaa ya uumbaji wako na si mtu mwingine. Na hivyo moja ya matatizo ya uwanja maalum kwa pset2, ambayo atakuja nje marehemu kesho usiku, ni kupiga mbizi katika ulimwengu wa cryptography, ambayo ni sanaa ya encrypting au scrambling habari, na hii inahusiana na hatimaye dunia ya usalama. Sasa, usalama kwa ajili ya wengi wetu huja katika namna ya taratibu uungwana mundane. Sisi sote tuna usernames na password, na sisi wote kuwa na majina ya watumiaji mbaya sana na nywila, uwezekano mkubwa. Kama nywila yako ni sawa kwenye tovuti nyingi, kwamba pengine si wazo bora, kama tutaweza kujadili kuelekea mwisho wa muhula. Kama nywila yako imeandikwa katika kumbuka nata - hakuna utani - juu ya kufuatilia yenu, kwamba pia ni si lazima kubuni bora kabisa lakini hali ya kawaida. Na kama wewe si kutumia cryptography encrypt nywila yako, wao ni hasa katika mazingira magumu. Hivyo kama unafikiri wewe kuwa super wajanja kwa kuwa na siri Neno hati mahali fulani kwenye gari yako ngumu ambayo ina yote ya nywila yako lakini ni katika folder kwamba hakuna mtu kwenda kuangalia katika, kwamba pia ni si utaratibu salama sana. Na hivyo kile pset2 itaanzisha ni sanaa hii ya cryptography na scrambling habari ili mambo kama nywila wote ni salama zaidi. muktadha hapa ni kwamba pamoja na data zenye shida inakuja fursa encrypt yake na kwa kinyang'anyiro yake. Na hivyo hii, kwa mfano, ni mfano wa ujumbe ambao umefungiwa. Hii kwa kweli anasema kitu katika Kiingereza, lakini ni wazi kabisa kabisa ni dhahiri. Na tutaweza kuja duara kamili leo tease mbali nini ujumbe huu ni siri hapa. Lakini katika ulimwengu halisi ya kompyuta, mambo si hata kuangalia kama wanaweza kuwa Kiingereza misemo. Kwa mfano, hii ni nini unaweza kupata kwenye Linux kiwango au Mac au UNIX kompyuta katika faili kwamba mara kwa mara juu ya muda kuitwa faili password. Siku hizi imekuwa ni wakiongozwa na maeneo mengine. Lakini kama wewe kuangalia katika mahali sahihi juu ya mfumo, utaona si tu jina lako au ile ya watu wengine juu ya mfumo, lakini utaona version encrypted ya password yao. Hakika, kuna neno crypt unaonyesha kwamba mambo yafuatayo ni encrypted, na mfululizo huu wa barua inaonekana random na wahusika na idadi na kadhalika inaweza decrypted tu kwa ujumla kujua baadhi ya siri - neno siri, idadi siri - na hivyo kweli kweli, sanaa ya cryptography majipu hatimaye chini kwa uaminifu wa aina fulani na kujua kitu ambacho mtu mwingine hana. Hivyo tutaweza kuchunguza hili kwa undani zaidi kidogo leo na katika pset kuja. Na sasa neno juu ya kupita haitaisha /. Hasa kama baadhi yenu dived katika pset1, Appliance, na dunia mpya sana kwa ajili yako mwenyewe, kutambua kwamba frustrations na machafuko na tu matatizo ya kiufundi ni kabisa kutarajiwa, hasa kwa pset kwanza, ambapo kuna kiasi tu mpya, kupata tu ukoo na ls na cd na amri hizi zote arcane na mazingira mapya, na kwamba ni tofauti na nyenzo halisi na programu yenyewe. Hivyo kutambua pia kwamba kuna shaka ni masaa ya ofisi ambazo zipo kama muundo msaada. Sehemu hii kuanza Jumapili ijayo. Lakini muhimu zaidi, kama wewe ni hisia tu kuwa hii si dunia kwa ajili yenu, kutambua kwamba ni kweli haina kuchukua muda tu. Na lau kuwa si kwa ajili ya nafasi hii miaka iliyopita kwa ajili yangu ya kuchukua pasi darasa / kushindwa, uaminifu, mimi kamwe ingekuwa hata kuweka mguu katika darasa. Na unaweza kubadilisha hili hadi, kusema, Jumatatu ya tano ya shaka, hivyo kama wewe ni makali ya sasa, kutambua kwamba badala ya kichwa katika baadhi ya maji nyingine kabisa, je, hakika kufikiria tu kubadilisha kupita / kushindwa. Tena, kuna si kweli utamaduni huu hapa katika Harvard ya kuchukua mambo kupita / kushindwa tangu kila mtu kweli anataka kufikia au overachieve, lakini kusema ukweli, hii ni njia ya ajabu ya kujaribu kitu nje kwamba wanaweza kuwa familiar na wewe, na kuishia kufanya, katika hali nyingi, kabisa faini, labda sana kwa mshangao wako. Na katika suala thabiti zaidi, nini nadhani kupita / kushindwa ujumla gani, hasa kama unaweza kuwa na uzoefu na pset0, kama wewe kuweka katika masaa 10, masaa 15, masaa 25 katika baadhi pset na wewe tu banging kichwa yako dhidi ya ukuta na ni kupata super marehemu wakati wa usiku lakini umechukua pset 90% ya njia na wewe tu hawezi kufikiri jambo moja, kupita / kushindwa kweli inachukua makali mbali ya darasa kama hii, ambapo unaweza aina ya furaha kusema, "Sawa, Najua ni si kamili, lakini mimi kazi punda wangu mbali juu ya hili, nina pretty furaha na ambapo ni kuishia, " na kwamba watakutana na matarajio kwa kupita / kushindwa. Hivyo kufanya kuendelea kuwa katika akili. Wote haki. Hivyo wale ambao Jihadi kwa kutumia Chuo Kikuu cha Harvard Wi-Fi, kujua kwamba kuna SSID CS50, uhusiano Wi-Fi, yaliyo karibu kwamba unaweza kuwa bora zaidi kwa bahati. Ni kejeli kidogo kwamba nywila kwa ajili ya hii, kama ungependa kujaribu kuunganisha na hii kwa kasi bora - na hebu kujua kama ni hakuna bora - ni 12,345, njia yote hadi 8 kwa sababu 8 ni salama zaidi kuliko 5. Hivyo kama unahitaji password Wi-Fi, kuungana na CS50 wirelessly hapa, 12345678, na baada ya juu CS50 Jadili kama bado una masuala kuunganishwa vipindi na tutaweza basi mamlaka zilizopo kujua kwa nafasi hii. Wote haki. Hivyo teaser haraka, hasa kwa wale ambao ni shabiki wavulana na wasichana au ya yote Apple mambo. Nini mimi kuchimbwa kutoka miaka michache nyuma ilikuwa faili hii hapa, iUnlock.c, tu kwa aina ya kufanya zaidi ya saruji na ngumu zaidi baadhi ya mipango ya msingi zaidi C sisi tumekuwa kuandika. Basi, mimi kufunguliwa faili hii, iUnlock.c. Ni inapatikana kwenye ukurasa Mihadhara kwa leo. Kwa upande wa mkono wa kushoto, unaweza kuona orodha ndefu ya kazi. Hivyo wenzao ambao aliandika hii aliandika juu sana ya utendaji, zaidi kuliko tu kuu. Alitumia rundo zima la maktaba hapa, na kama tunaanza scrolling kupitia, nini hii kwa kweli ni ni ya kwanza kabisa, naamini, ufa kwa iPhone ya awali. Wakati alitaka jailbreak iPhone ya awali, ambayo ina maana untether ni kutoka AT & T na kweli kufunga programu maalum juu yake na kufanya mambo ambayo Apple hakutaka watu kufanya, mtu alichukua muda wa kufikiri hasa jinsi gani wanaweza kutumia madhaifu programu, makosa, mende, katika programu ya Apple, na hivyo alizaliwa iUnlock.c-- kwamba kama wewe ni compiled kwenye kompyuta yako na imewekwa kwenye iPhone kwamba alikuwa kushikamana na kompyuta yako kupitia, kusema, USB cable, hii ingekuwa kukupa marupurupu ya utawala au mizizi ya iPhone yako na basi wewe kufanya pretty much chochote unataka. Na hivyo kuna kuwa hii paka kuvutia na mchezo wa panya kati ya Apple na wengine wa dunia hasa kama wao, kama makampuni mengi, kujaribu lock mambo yao chini hivyo kwamba unaweza tu kufanya na ni nini wanataka. Lakini, shukrani kwa watu kama hii na ufahamu wa maelezo ya ngazi ya chini - na katika kesi hii C programu - na mengi ya constructs familiar kwamba tumekuwa walianza kucheza na, wewe ni uwezo wa kweli kujiinua vifaa katika namna unaweza kuona inafaa na si lazima baadhi chombo ushirika. Hivyo kwa mfano, mimi sielewi nini yote haya ni kufanya, lakini GetVersion sauti pretty moja kwa moja, na inaonekana kama hii ni kazi ambayo mtu huyu aliandika. Inachukua baadhi ya aina ya integer kama hoja, haina kurudi kitu chochote, lakini inaonekana kitanzi na kwa kitanzi hapa na kama hali, kama mapumziko hali, na kwa namna fulani inahusiana na idadi version kama sisi kitabu chini, ingawa mengi ya maneno haya ni kwenda kuwa mpya. Na kuna mengi yote ya utendaji katika hapa sisi sijawahi kuona na wanaweza milele kuona juu ya kozi ya muhula. Wakati wa mwisho wa siku, ni sawa ifuatavyo sheria na mantiki kwamba sisi tumekuwa kucheza kwa hivi sasa. Hivyo hii ni mbali mzee sana ufa yako 3s iPhone au 4s au hivi karibuni 5s siku hizi, lakini najua kwamba yote hayo sana inayotokana na dunia hii ambayo tumekuwa dived katika. Hebu tuangalie mfano kidogo zaidi rahisi: moja hii, ili tu kupata moto juu na baadhi ya kisintaksia na pia baadhi ya wengine data aina kwamba tumekuwa kuongelea lakini si kweli kuonekana katika C. Hii ni faili inayoitwa positive1.c, na kwa maoni juu, hii tu madai kwamba mtumiaji kutoa idadi chanya. Hivyo ni mfano wa kitanzi do-wakati, ambayo ni nzuri kwa ajili ya mipango ya mtumiaji maingiliano ambapo unahitaji kuwaambia user kufanya kitu fulani, na kama hawana kushirikiana wewe yell saa yao au kukataa mchango wao. Uchunguzi katika kumweka: Mimi nitaenda kufanya mistari 19 kupitia 24 hivyo muda mrefu kama user kwamba hakunipa idadi chanya. Hii undani hapa kwenye mstari 18, kwa nini mimi kutangaza n juu looping hii nzima kujenga kinyume na haki ya karibu na mstari 22 ambapo mimi kwa kweli huduma ya kupata n? Yeah. [Mwanafunzi] Scope. >> Yeah, hivyo suala hili la wigo. Na katika suala layman, nini wigo rejea? Yeah. >> [Inaudible mwanafunzi majibu] >> Je, unaweza kusema kidogo nguvu zaidi? [Mwanafunzi] wapi unaweza kupata kwamba kutofautiana. >> Perfect. Ambapo unaweza kupata variable fulani. Na kwa ujumla, utawala wa thumb hivi sasa imekuwa kwamba wigo wa baadhi variable hufafanuliwa kwa braces hivi karibuni curly kwamba ve kuonekana. Na hivyo katika kesi hii, kama mimi alifanya makosa ya kutangaza n kwenye mstari 22, mstari kwamba ingekuwa kazi. Ningependa kupata int, na napenda kuiweka katika n kwamba kutofautiana katika mstari 22, lakini ambayo mstari wa kanuni ingekuwa sasa sielewi nini mimi kuzungumza kuhusu? >> [Mwanafunzi] 25. [Malan] 25, na zinageuka 24 kama vizuri kwa sababu katika kesi hii ni falls nje ya braces curly. Hivyo tu kidogo ya kero lakini kwa urahisi sana kutatuliwa kwa kifupi kutangaza variable nje ya kazi yenyewe. Tutaweza kuona baadaye leo unaweza kwenda hatua moja zaidi na unaweza hata kupata kidogo wavivu. Na hii si kwa kuwa ilipendekeza kwa ujumla, lakini unaweza hata kupata wavivu na kuweka variable kimataifa, ili kuzungumza, si ndani ya kazi, si ndani ya kitanzi, lakini katika faili yenyewe, nje ya yote ya kazi ve imeandikwa, kama mimi hapa kwenye mstari 15. Hii ni kwa ujumla kipaji juu, lakini kutambua hili ni suluhisho wakati mwingine matatizo mengine, kama tutaweza hatimaye kuona. Hivyo kwa sasa tutaweza kuondoka ni kama hii, lakini hebu tuone kama tunaweza rewrite hii tu ya kuanza kuonyesha wenyewe tofauti kidogo. Mpango huu, tu kuwa wazi, ni positive1. Hebu kwenda mbele hapa na katika terminal dirisha yangu kufanya positive1, Ingiza. Inaandaa sawa. Mimi nina kwenda kukimbia positive1, hit Enter. Mimi kudai kwamba wewe nipe sifuri. Nitasema -1. Kwamba hawakuwa na kazi. 0, 99. Hiyo inaonekana kazi. Labda si mtihani ukali zaidi, lakini angalau ni nzuri sanity hundi kuwa tuko katika njia sahihi. Hivyo sasa napenda kwenda mbele na kufungua toleo 2 ya hili, na nini ni tofauti tayari? Ni kutekeleza jambo hilo, lakini kile kuruka nje kama wakati wazi tofauti hii? Hii bool katika kijani. Ni ni yalionyesha katika kijani, hii Keyword inayojulikana kama bool, ambayo ni aina data. Haina kuja kujengwa katika yote ya matoleo ya C. Unahitaji ni pamoja na maktaba maalum. Katika kesi yetu, mimi ni pamoja maktaba CS50 ili sisi kupata bool. Lakini katika mstari 18, sisi tunaonekana kuwa na thamani Boolean hapa aitwaye kushukuru. Ningeweza kuitwa hii kitu chochote, lakini mimi kuitwa ni kushukuru tu aina ya kufikisha baadhi maana semantic. Hivyo awali kwenye mstari 18, mimi nina inaonekana si kushukuru kwa sababu thamani Boolean kushukuru ni initialized na uongo katika mstari 18. Na basi inaonekana kile nimepata kufanyika hapa katika mistari 21 kupitia 23 Nimekuwa ni aina tu ya rewritten mantiki yangu. Hivyo hakuna functionally tofauti, lakini katika mstari 22 sasa mimi kuangalia kama int mtumiaji imetoa ni mkubwa kuliko 0, basi mimi kubadili tu thamani ya kushukuru kwa kweli. Na kwa nini mimi kufanya hivyo? Kwa sababu katika mstari 25, inaonekana mimi nina kwenda kuangalia hali. Je, hii kitanzi wakati kushukuru ni uongo. Basi, mimi mapendekezo hii kama njia mbadala ya toleo 1 sababu ni angalau kidogo Intuitive zaidi labda, ni zaidi kidogo msingi katika Kiingereza. Hivyo kufanya yafuatayo wakati wewe si kushukuru, au wakati kushukuru ni uongo. Na wakati huu pia mimi inaonekana hawajali kukumbuka kile mtumiaji typed katika kwa sababu hakuna taarifa n variable, hivyo kweli, nyeupe kidogo uongo huko. Functionally, mpango huo ni tofauti kidogo mara moja sisi kupata chini yake kwa sababu mimi si kukumbuka kile n ni. Lakini nilitaka kuonyesha hapa pia kwamba hata kama tumeona GetInt na GetString kuwa kutumika upande wa kulia wa alama ya usawa hivi sasa ili sisi kukumbuka thamani, kitaalam, kwamba si madhubuti muhimu. Kama kwa sababu yoyote wewe tu hawajali kuokoa thamani, wewe tu unataka kuangalia thamani, taarifa kwamba tunaweza tu kuandika hii kama GetInt, wazi Paren, karibu Paren. Kwamba kazi ni kwenda na kurudi thamani, kama tumekuwa akisema. Ni kwenda kukupa nyuma int. Na hivyo kama wewe kiakili kufikiri ya kinachotokea hii, wakati ninapoandika katika 99, GetInt anarudi idadi 99, na hivyo conceptually, ni kama ingawa code yangu walikuwa kweli hii. Hivyo kama kweli ni 99 zaidi kuliko 0, basi inakuwa kweli kushukuru, kisha mstari 25 anatambua ooh, sisi ni kosa kwa sababu mimi nina kushukuru sasa, na katika mstari 26, sisi tu kusema, "Asante kwa integer chanya!" chochote kilichotokea kuwa. Sasa hebu kufanya kidogo kisintaksia sukari hapa, hivyo kusema. Hebu tuone kama tunaweza kusafisha line hii ya 25 na lahaja hii tatu na ya mwisho katika positive3. Taarifa tofauti tu sasa ni nini mstari wa kanuni? >> [Mwanafunzi] 25. >> [Malan] Yeah, 25. Na tumekuwa si kweli kuonekana hila hii bado tu, lakini hatukuwa kuona uhakika Moderators Jumatatu, ambayo inaashiria nini? >> [Mwanafunzi] Si. Si >> au kukanusha. Hivyo kuchukua thamani Boolean na flip thamani yake. Kweli inakuwa uongo, uongo inakuwa kweli. Hivyo hii, napenda kupendekeza, ni hata kidogo Intuitive zaidi njia ya kuandika code kwa sababu mimi bado initialize kushukuru kwa uongo, mimi bado kufanya yafuatayo, Mimi kuweka kushukuru kwa kweli wakati unakuja, lakini sasa kweli unaweza tu kutafsiri kanuni hii kwa maneno kushoto na kulia, wakati (kushukuru!); kwa sababu bang au Moderators kumweka inaashiria dhana ya si, hivyo wakati si kushukuru. Hivyo tena, hatuna ilianzisha dhana yoyote mpya per se. Kuongelea Booleans nyuma wakati sisi alicheza na Scratch, lakini kutambua sasa tunaweza kuanza tu kuandika code yetu katika njia nyingi tofauti. Hivyo hasa katika pset1 kama wewe ni aina ya wanajitahidi kufikiri njia ya kuandika baadhi ya mpango, tabia mbaya ni wewe ni katika bahati kwa sababu kuna kuwa na idadi yoyote ya ufumbuzi kwamba unaweza kutokea juu. Kwa mfano, hii ni 3 tu maana hata rahisi ya mipango. Wote haki. Na sasa wanakumbuka juu ya Jumatatu sisi kushoto juu ya kumbuka hii na maadili kurudi. Hivyo kwa mara ya kwanza sisi aliandika mpango kwamba si tu kuwa na kuu; pia ina desturi yake mwenyewe kazi kwamba mimi aliandika hapa. Hivyo katika mstari 31 kupitia 34 Nimekuwa kutekelezwa kazi mchemraba. Ni si ngumu. Ni tu * a * a katika kesi hii. Lakini jambo muhimu juu yake ni kwamba mimi nina kuchukua pembejeo katika fomu ya na mimi nina kurudi pato katika fomu ya * a * a. Hivyo sasa nina uwezo, kiasi kama mimi kutumika kwa prinf peke yake, kuwaita kazi hii kwa wito kazi mchemraba. Na kazi mchemraba inachukua baadhi ya pembejeo, na kazi ya mchemraba anarudi baadhi pato. Kwa kulinganisha, printf tu alifanya kitu. Ni hakurudi chochote kwamba sisi kumjali kuhusu, ingawa kama kando haina kurudi thamani; wewe kwa ujumla tu kupuuza. Printf tu alifanya kitu. Ni alikuwa na athari upande wa uchapishaji kwa screen. Kwa kulinganisha hapa, tuna kazi mchemraba, ambayo kwa kweli anarudi kitu. Hivyo kwa wale jamaa na hii, ni wazo haki moja kwa moja. Lakini kwa wale chini ya ukoo na hili wazo la kupita katika pembejeo na kupata nyuma matokeo, hebu jaribu tu kitu super rahisi. Kuna mtu yeyote starehe kuja juu ya hatua kwa ufupi? Wewe kuwa starehe na kamera juu yenu pia. Yeah? Sawa. Nini jina lako? >> [Mwanafunzi] Ken. >> Ken. Wote haki. Ken, kuja juu juu. Ken ni kwenda kuwa kazi ya aina hapa. Hebu kwenda mbele na kufanya hili. Hebu kupata dhana kidogo. Nice kukutana na wewe. Karibu hatua katikati. Wote haki. Hebu hit button hii hapa. Wote haki. Hivyo hapa una ubao wa kisasa, na kile Mimi ni kazi kuu, kwa mfano, na mimi si kuwa na iPad katika mkono wangu. Mimi si kweli kumbuka jinsi - Naam, mimi siwezi kusema kwamba. Mimi si kweli kuwa mwandiko mzuri, na hivyo mimi nataka wewe magazeti kitu kwenye screen kwa ajili yangu. Mimi kuwa mpango kuu, na mimi naenda kuwa wewe kusema hili kwa kuandika katika kuku scratch yangu na kisha kupita wewe pembejeo. Hivyo silly ingawa zoezi hili ni, dhana ya kazi na wito kazi na kurudi kazi kweli majipu chini hii. Mimi ni kuu, mimi tu imeandikwa printf, quote-unquote kitu kwenye screen, Mimi mbio mpango huu, na kwa haraka kama printf anapata walioitwa, inachukua moja au hoja moja parameter wakati mwingine kati ya quotes mbili. Hapa ni hoja kuwa. Mimi nina kupita kwa Ken. Yeye ni sanduku jeusi imeandikwa baadhi idadi ya miaka iliyopita kwamba inaonekana tu anajua jinsi ya magazeti mambo kwenye screen. Hivyo nitafanya. Hiyo si mbaya. Nzuri sana. Hivyo sasa Ken inafanywa utekelezaji. Je, yeye haja ya kumsaliti mimi kitu nyuma? Si kwamba tumekuwa kuonekana hivi sasa. Tena, printf haina kweli kurudi idadi, lakini tunakwenda kupuuza kwamba kwa sasa kwa sababu tumekuwa kamwe kutumika. Basi hiyo ni kwa ajili ya Ken. Na hivyo sasa kuu inachukua zaidi ya udhibiti wa mpango tena kwa sababu ya kuwa mstari wa kanuni, printf, ni kosa utekelezaji. Na sisi kwenda juu ya njia zetu, utekelezaji chochote mistari nyingine ni pale. Hivyo sasa hebu jaribu mfano tofauti kidogo. Wakati huu hapa hebu kwanza wazi screen, na wakati huu tutaweza kufanya kazi cubing, lakini wakati huu, mimi kutarajia thamani ya pato. Basi hebu kwenda mbele na kufanya hili. Sasa nina mstari wa kanuni kwamba anasema x anapata mchemraba wa x. mstari wa kanuni, wanakumbuka, inaonekana kama hii: x = mchemraba (x); Hivyo ni jinsi gani hii kwenda kufanya kazi? Hebu kwenda mbele na kukupa screen nyeupe tena. Mimi naenda kuandika sasa thamani ya x, ambayo katika wakati huu katika muda hutokea kwa kuwa, hebu sema, 2 kwa kuitunza rahisi. Nimeandika kwenye kipande cha karatasi thamani ya 2, ambayo ni thamani yangu x. Mimi mkono kwa Ken. >> Na mimi tu kuandika jibu? >> Yeah, hebu tu kuandika jibu. Sawa. Na sasa yeye ana kurudi mimi kitu. Perfect. Nice segue. Hivyo sasa hukabidhi mimi nyuma thamani ya 8 katika kesi hii, na nini mimi kufanya na hayo? Kweli - hebu angalia, kupata haki hii. Je, Mimi naenda kufanya na hayo? Sasa mimi naenda kuchukua thamani hii na kwa kweli kuhifadhi katika bits wale sawa katika kumbukumbu. Lakini taarifa mimi nina aina ya wanajitahidi hapa. Mimi nina kuchanganyikiwa kidogo kwa sababu ambapo mimi kweli kuandika thamani ya x, sababu kile nimekuwa tu kufanyika ni kimwili mkono Ken kipande cha karatasi ya kuwa alikuwa thamani 2, ambayo ilikuwa x, na kwa kweli, hilo ni just nini kilichotokea. Hivyo ni zinageuka kuwa wakati wewe piga kazi na wewe kupita katika hoja kama hello, dunia au kupita katika hoja kama 2, ujumla, wewe ni kupita katika nakala ya hoja hiyo. Na hivyo tu kama mimi aliandika chini ya idadi 2 hapa na kukabidhiwa kwa Ken, kwamba lazima maana kwamba mimi bado kuwa na nakala ya thamani 2 mahali fulani kwa sababu kwa kweli, sasa kwamba nimepata wamezipata nyuma thamani 8, mimi haja ya kwenda nyuma katika RAM na kweli kuandika 8 ambapo mimi mara moja alikuwa na idadi 2. Hivyo kuibua, kumbuka wazo hili la kupita katika, literally, nakala ya thamani. Ken haina kitu wake, hukabidhi mimi nyuma kitu - katika kesi hii thamani kama 8 - na kisha mimi kufanya kitu na thamani ya kwamba kama nataka kuweka ni kuzunguka. Basi wote wa hii kuja nyuma kwa kuwa wote pia familiar kabla ya muda mrefu. Asante sana kwa demo hii hapa, Ken. [Applause] Vizuri sana kufanyika. Hebu angalia jinsi ya kuwa hatimaye inahusiana na baadhi ya kazi wito kwamba sisi tumekuwa kufanya hapa. Hebu kwenda mbele na kutuleta kwa mfano cubing hapa. Ona kwamba kama tunataka kweli kuanza kuchukua hii zaidi, sisi itawabidi kukumbuka ukweli kwamba x idadi hiyo ni kuwa alipita katika hapa ni tofauti na yale ya kweli kuwa alipita katika kufanya kazi. Hivyo tena, hii wapitao nakala inaenda kuwa kabisa germane katika muda tu. Hebu tuangalie kitu ambacho haina kabisa kazi ya haki bado. Mimi nina kwenda mbele na kufungua tatu Buggy mfano, ambayo ni kiujanja kwa asili, na ni kuitwa buggy3 na ni kutekeleza kazi swapping. Hapa tuna kazi kuu ambayo ina x na y kiholela initialized kwa 1 na 2, kwa mtiririko huo. Tunaweza kutumia GetInt, lakini sisi tu haja ya zoezi rahisi, hivyo ni vigumu-coded kama 1 na 2. Katika mistari ya 21 na 22, sisi inaonekana magazeti nje x na y, 1 kwa kila mstari. Kisha kwenye mstari 23, mimi kudai Mimi swapping maadili haya, dot, dot, dot. Mimi inaonekana piga kazi katika mstari 24 walioitwa byta kwamba inachukua hoja 2. Ni kabisa legit kwa ajili ya kazi ya kuchukua hoja 2. Tumeona printf kufanya hivyo tayari. Hivyo byta inaonekana inachukua x na y, na kama jina lake anapendekeza, Napenda matumaini kwamba ni kwenda wabadilishane maadili haya 2. Hivyo basi mimi kudai kwenye mstari 25 "swapped!" na mimi kikachapishwa x na y chini ya dhana kwamba wameweza kweli imekuwa swapped. Lakini kama mimi kwa kweli kuendesha programu hii - basi mimi kufungua dirisha terminal, basi mimi kufanya buggy3 - kama jina linavyosema, hii si kwenda mwisho vizuri sababu wakati mimi hit Enter, taarifa kwamba ni x 1, y ni 2, na bado mwisho wa mpango, bado, kwa kweli, sawa. Hivyo kwa kuzingatia maandamano tu sasa na Ken, nini hasa kinachoendelea? Hebu tuzame ndani ya kazi hii byta. Ni super mfupi. Ni tu mistari michache ya maadili ya muda mrefu. Lakini nini tatizo la msingi kuzingatia hadithi rahisi aliiambia hapa juu na Ken? Kwa nini byta kuvunjwa? [Mwanafunzi] Wewe hifadhi kwa nakala, hazibadiliki. Hasa. Sisi ni hifadhi kwa nakala, hazibadiliki yenyewe. Kwa maneno mengine, byta inaonekana inachukua hoja 2, int, na ni kiholela kuitwa b na, na hapa nimepata kupita katika x na y, ambayo ni mtiririko 1 na 2, lakini nina si halisi kupita katika x, mimi si halisi kupita katika y, Mimi nina kupita nakala ya x na nakala ya y. Ni karibu kama wewe ingawa kunakiliwa na pasted katika byta maadili ambayo unataka kwa kweli kuendesha. Hivyo kama hiyo kesi, wakati mimi kuanza mpango wa utekelezaji mstari 35 kisha 36, wakati mimi kupata mstari 37, katika hatua hii ya hadithi, ni nini thamani ya? Katika hatua hii ya hadithi, line 37, ni nini thamani ya wakati huu? >> [Mwanafunzi] 1. [Malan] Ni lazima tu kuwa 1, haki, kwa sababu x ilipitishwa katika kama hoja ya kwanza, na kazi hii tu kiholela ni wito hoja yake ya kwanza. Vile vile ni y hoja ya pili, na ni tu kiholela wito pili hoja b. Dichotomy Hii ni kweli kwa haki tu alielezea. Fikiria kuhusu hilo. Hakuna kati yetu na alikutana mtu ambaye aliandika printf, hivyo hakika, yeye au yeye hana wazo nini vigezo wetu miaka 30 baadaye wanaenda kuitwa. Hivyo inabidi kuwe na tofauti kati ya nini wito vigezo katika kazi wewe kuandika na nini wito vigezo katika kazi wewe ni wito au kutumia. Hivyo kwa maneno mengine, nimeandika vigezo wangu kama x na y, lakini kama mtu mwingine ameandika kazi byta, yeye au yeye bila shaka hawezi kujua nini vigezo yangu ni kwenda kuitwa, hivyo kutambua kwamba hii ni kwa nini una hii pande mbili za majina. Kitaalam, mimi naweza kufanya hivyo kwa bahati mbaya, lakini bado wataendelea kuwa kupita katika kama nakala. Itakuwa bahati mbaya tu kuwa safi aesthetically ikiwa mtu huyo ambaye aliandika byta walitumia majina sawa. Hivyo katika hatua hii ya hadithi, line 37, ni 1, b ni 2, na sasa mimi kuendelea wabadilishane yao. Awali ya yote, napenda kwa kweli kufanya hili zaidi tu. Sijui nini wale mistari 3 ya maadili walikuwa wakifanya. Hebu tu kufanya hivyo: b = a; a = b; kufanyika. Kwa nini hii ni kuvunjwa, mantiki? Ni aina ya kitu Intuitive, haki? Hivyo b inakuwa na b inakuwa, lakini tatizo ni kwamba haraka kama mstari 37 executes, nini thamani ya b na? huo, 1, kwa sababu wewe clobbered, hivyo kusema, ve iliyopita b sawa. Hivyo mara mstari 37 ina kunyongwa, kwamba ni kubwa, sasa una 2 nakala ya namba 1 ndani ya kazi hii, hivyo basi wakati wewe kusema katika mstari 38 a = b, wewe ni aina ya Star sababu wewe tu assigning 1-1. Umefanikiwa aina ya kupoteza thamani wewe kumjali kuhusu. Hivyo katika toleo asili ya hili, taarifa nilivyopatenda. Mimi badala yake alikuwa mstari wa tatu wa kificho kwamba inaonekana kama hii. Mimi kutangaza variable muda. TMP ni jina la kawaida kabisa kwa variable muda, na ni int kwa sababu ina mechi nini nataka kufanya nakala ya. Mimi kuhifadhi nakala ya ndani ya TMP, hivyo mara moja line 37 ina kunyongwa, thamani ya ni - haraka sanity hundi - 1, thamani ya b ni 2, na thamani ya TMP pia ni 1. Hivyo sasa mimi nitafanya line 38. Mara mstari 38 executes, inachukua juu ya thamani ya b. Na b ilikuwa 2, hivyo ni sasa 2. Hivyo katika hatua hii ya hadithi, ni 2, b ni 2, na TMP ni 1, hivyo sasa kimantiki, tunaweza thamani tu plop TMP wa ndani ya b na sisi ni kosa. Hivyo tumekuwa kutatuliwa kuwa tatizo. Bahati mbaya, wakati mimi kukimbia programu hii katika fomu hii, haina kweli wabadilishane maadili yoyote. Lakini kwa kuwa wazi, kwa nini? Mimi fasta tatizo mantiki kutoka muda tu iliyopita, lakini tena, kama mimi kukimbia katika mpango huu, x na y haitabadilishwa na mwisho wa utekelezaji wa programu hiyo. [Inaudible mwanafunzi maoni] >> Sisi si kurudi kitu chochote, hivyo hiyo ni kweli. Lakini zinageuka kuna kidogo ya tatizo hapa kwa sababu hivi sasa, Kitu tu tumekuwa na uwezo wa kurudi ni jambo moja, na hii ni kizuizi cha C. Unaweza tu kurudi kwa kweli moja ya thamani, katika kesi ambayo mimi nina aina ya kukwama hapa kwa sababu mimi naweza kurudi thamani mpya ya x au mimi naweza kurudi thamani mpya ya y, lakini nataka wote nyuma. Hivyo kurudi si ufumbuzi rahisi hapa. Lakini tatizo la msingi ni kwa nini? Nini sisi kweli swapped? [Mwanafunzi] a na b. >> A na b. Lakini na b ni nakala za x na y, ambayo ina maana sisi tu alifanya yote wa kazi hii, sisi tu alitumia dakika 3 kuzungumza juu ya kazi byta na wote 3 ya vigezo hivi, na kwamba ni kubwa, kikamilifu sahihi katika upweke, lakini na upeo b tu ni katika mistari haya hapa. Hivyo tu kama kwa kitanzi, kama wewe kutangaza integer i ndani kwa kitanzi, vile vile, kama wewe ni kutangaza na b ndani ya kazi ambayo umefanya imeandikwa, wao uko halali tu ndani ya kazi kwamba, ambayo ina maana kama haraka kama byta inafanywa utekelezaji na sisi kwenda kutoka mstari 24 kwa mstari 25, x na y haijabadilishwa wakati wote. Wewe tu kupita mengi yote ya wakati swapping nakala ya variables. Hivyo ni zinageuka kuwa ufumbuzi wa hili ni kweli zisizo dhahiri. Ni kabisa kutosha kurudi maadili kwa sababu tunaweza tu kurudi 1 thamani, na kwa kweli mimi nataka wabadilishane wote x na y wakati huo huo, hivyo sisi ni kwenda na kurudi huu. Lakini kwa sasa, kutambua kwamba suala kimsingi umetokana na ukweli kwamba ni nakala na b na wao ni katika upeo wao wenyewe. Hebu jaribu kutatua hili katika baadhi ya njia. Hebu kweli kitabu nyuma hapa na kufungua, hebu sema, lahaja ya nne ya hili, buggy4. Nini kuhusu hili? Hili ni tatizo sawa lakini rahisi kuangalia kabla ya sisi kuchukua kumchoma katika kulitatua. Mpango huu huitwa increment, na inaonekana initializes integer x kwa 1 katika mstari 18. Mimi kisha kudai x ni 1, mimi kisha kudai "Incrementing ..." Mimi kisha piga increment, lakini basi katika mistari 22 na 23, mimi kudai ni kuwa incremented, Mimi kudai x ni sasa chochote ni - 2, labda - lakini mpango huu ni Buggy. Nini tatizo? Yeah. >> [Inaudible mwanafunzi majibu] >> Hasa. Hivyo x ametangazwa, ni wazi, kwenye mstari 18. Hiyo ni ndani ya braces kuu ya curly. Hivyo jibu rahisi hapa ni kwamba wakati x lipo hapa, haipo katika mstari 32, hivyo mpango huu kwa kweli si hata kukusanya. compiler wakati mimi kujaribu kuandaa kanuni hii ni kwenda yell saa yangu kuhusu baadhi kitambulisho Undeclared au kitu na athari hiyo. Kwa kweli, hebu jaribu. Hii ni kufanya buggy4. Kuna ni. Matumizi ya 'x' Undeclared kitambulisho katika mstari 32. Na kweli, hebu kuwa wazi zaidi hapa leo ili kwamba hii ni muhimu katika masaa ya ofisi na nyumbani. Ona kwamba ni kidogo isiyoeleweka kirahisi imeandikwa. Lakini ukweli kwamba Clang ina yelled saa yetu, akisema buggy4.c: 32:5, ni kweli muhimu. Ina maana kwamba kosa ni juu ya mstari 32 katika tabia nafasi 5. Hivyo 1, 2, 3, 4, 5. Hiyo, kwa kweli, ambapo tatizo ni. Na pia, pia, kumbuka katika masaa ya ofisi na nyumbani, mimi nina bahati hapa. Nina moja kosa. Ni kwenda kuwa rahisi kurekebisha. Lakini kama wewe kupata screen nzima kamili ya ujumbe balaa kosa, tena kutambua kwamba moja bottommost ili tu kuwa dalili ya moja topmost. Hivyo baada ya daima chini mende wako kutoka juu kwenda chini kwa sababu kuna inaweza tu kuwa mnyororo daisy athari kwamba ni kupendekeza una matatizo njia zaidi ya wewe kweli kufanya. Hivyo ni jinsi gani tunaweza kurekebisha hii ikiwa lengo langu ni increment x? >> [Mwanafunzi] Matokeo x kimataifa. Sawa, hivyo tunaweza kufanya x kimataifa. Hebu kuchukua njia ya mkato kwamba mimi alionya kuhusu mapema, lakini heck, sisi tu haja ya kurekebisha haraka, hivyo hebu sema tu x int hapa juu. Kwamba inafanya x kimataifa. Hivyo sasa kuu ina huduma hiyo na increment ina upatikanaji wake, na hivyo basi mimi kwenda mbele na kukusanya hii sasa. Matokeo buggy4, Ingiza. Inaonekana kukusanya sasa. Hebu kukimbia buggy4. Na inaonekana kwa kweli kazi. Hii ni moja ya mambo haya hiyo ni kufanya kama mimi kusema, si kama mimi, kama nimekuwa tu kufanyika hapa, kwa sababu kwa ujumla, mipango yetu ni kwenda kupata zaidi ya kuvutia na muda mrefu zaidi kuliko huu, na kama ufumbuzi yako ya matatizo ya maisha ni tu kuweka vigezo vyote katika juu ya faili yako, haraka sana kufanya mipango kupata horrifically vigumu kusimamia. Ni anapata vigumu kufikiria juu majina mapya variable, anapata vigumu kuelewa nini variable ni kufanya nini, na hivyo katika ujumla, hii si ufumbuzi mzuri. Basi hebu kufanya hili vizuri. Hatutaki kutumia variable kimataifa hapa. Mimi nataka increment x, hivyo mimi nilikuwa wazi - mwisho wa siku, hii ni aina ya hadithi silly sababu sisi tu kufanya hivyo - lakini kama sikujua kuhusu operator kwamba au mimi sikuruhusiwa mabadiliko hayo katika kuu yenyewe, jinsi mwingine inaweza mimi kutekeleza Ken juu hapa wakati huu si kwa mchemraba lakini kwa nyongeza ya? Ninawezaje kubadilisha jambo hili hapa? Yeah. [Mwanafunzi] Pass katika x na kisha kurudi [inaudible] >> Okay, nzuri. Sasa kwa nini basi si mimi kupita katika x na kisha badala ya kurudi, nini si mimi tu wala kurudi x + 1. wanandoa zaidi mambo kuwa na mabadiliko ya hapa. Mimi nina juu ya kufuatilia haki. Ni kitu gani zaidi nahitaji tweak? Mtu mwingine. Yeah. [Inaudible mwanafunzi majibu] Mimi haja ya kubadili aina ya kurudi increment sababu ni si tupu. Tupu chochote njia ni kuwa walirudi, lakini ni wazi sasa ni, hivyo hii mahitaji na mabadiliko ya - >> [mwanafunzi] int. int kuwa thabiti na chochote mimi nina kweli kurudi. Sasa kitu kingine ni bado Buggy hapa. Yeah. [Inaudible mwanafunzi majibu] >> [Malan] Basi nahitaji increment x? [Inaudible mwanafunzi majibu] >> [Malan] Ah, hivyo mimi haja ya kupita x. Kwa hiyo mimi haja ya kufanya hivyo hapa. >> [Inaudible mwanafunzi maoni] [Malan] Basi mfano, mimi kuwa na mabadiliko ya hii hapa. Hivyo hii ina kuwa int, hii ina kuwa - hmm, mimi kwa kweli kuwa na mdudu chini hapa. Hebu kurekebisha hii moja kwanza. Nini hii kweli kuwa? Ni got kuwa ni kitu int. Ni inaweza kuwa x, lakini kusema ukweli, kama wewe kuanza wito yote ya x yako vigezo, ni kwenda kupata chini na chini ya wazi ambayo ni ambayo. Basi hebu tu kiholela kuchagua tofauti kumtaja mkataba kwa ajili ya kazi yangu msaidizi, kazi mimi nina maandishi. Tutaweza simu yake, au tunaweza kuiita - Hebu kuiita idadi kuwa hata zaidi ya wazi. Hivyo basi nina kurudi chochote idadi ni pamoja na 1, na sasa mimi kuwa na mabadiliko mengine 1 kitu hapa juu na nyingine moja kitu hapa. Nifanye kuwa na mabadiliko kwenye mstari 21 ya kwanza? >> [Inaudible mwanafunzi majibu] [Malan] nina hawawajui kwa x. Siwezi kuwaita tu increment (x). Mimi haja ya kukumbuka jibu kwa kubadilisha thamani ya x upande wa mkono wa kushoto. Na hata kama x ni sasa juu ya kushoto na kulia, hiyo ni kabisa faini kwa sababu upande wa kulia anapata kwanza kunyongwa kisha anapata plopped katika jambo mkono wa kushoto - x katika kesi hii. Na kisha mwisho, hii ni fix rahisi sasa. Hii lazima tu mechi nini chini chini, idadi int. Hivyo rundo zima la mabadiliko kwa ajili ya kazi kweli wajinga lakini mwakilishi wa mambo kwamba tutaweza inazidi wanataka kufanya. Hivyo kufanya buggy4. Nimekuwa Star up mahali fulani. Oh, Mungu wangu. Tano makosa katika mpango 6-line. Basi nini vibaya juu ya mstari 18, tabia ya 5? Hivyo nina kutangaza hii int. Hebu angalia. Kuna rundo zima la makosa mengine. Oh, Mungu wangu - 19, 18, 21 - lakini tena, hebu tu wazi screen, Udhibiti L hapa, na rerun Clang. Hivyo 5 matatizo ni kweli tu kwamba 1. Hivyo sasa hebu kukimbia buggy4, Ingiza. Whew, x imekuwa incremented usahihi. Wote haki. Maswali yoyote juu ya jinsi ya increment namba? Yeah. [Inaudible mwanafunzi swali] >> Bora swali. Jinsi ni kwamba naweza kubadili tu x kwa idadi na mpango kujua mara moja? Tena, unafikiri kama abstraction hii. Hivyo kama mimi ni kuu na Ken ni increment, kusema ukweli, mimi sijali nini Ken wito iPad wake. Mimi sijali kile anachokiita chochote kwamba ina nini na utekelezaji wake wa utendaji huu. Hii ni undani utekelezaji kuwa mimi, kuu, hawana huduma ya juu. Na hivyo tu kubadilisha mara kwa mara ndani ya kazi - idadi hapa na idadi hapa - ni yote inachukua muda mrefu kama mimi recompile. Ni aina ya kama kama unafikiri juu ya wengi wetu, wale wa wewe na leseni ya dereva ambao inaendeshwa au kama wameweza hata inaendeshwa katika gari, wengi wetu hawana wazo jinsi ya gari inafanya kazi chini ya Hood. Na literally, kama wewe kufungua Hood, wengi wetu - mimi mwenyewe pamoja - hawataenda kweli kujua nini sisi tunataka, aina ya kama unaweza kuhisi pamoja na mambo kama haki hii sasa. Lakini sisi si kweli kuwa na huduma jinsi gari inafanya kazi, hatuwezi kuwa na huduma zote za kile viboko na pistons na nyaya ndani ya gari ni kweli kufanya. Hivyo kitu kama nini wito piston Haijalishi hapa katika kesi hii. Same wazo. Yeah. >> [Inaudible mwanafunzi swali] Kama kuna matumizi zaidi ya dakika variable XA iliyopita, wewe, programu, unachoweza kubadilisha kila mahali. Au unaweza literally kufanya Picha, Menyu, na kisha Find, Replace - kitu kama hicho - lakini wewe ni kwenda na kufanya wale mabadiliko mwenyewe. Wewe kuwa thabiti. >> [Mwanafunzi] Kama kuna vigezo mbalimbali [inaudible] utaratibu maalum kama hapa, kama hii ilikuwa int mwingine namba? >> [Mwanafunzi] Sahihi. [Malan] Yeah. Ili mambo wakati wewe ni wito kazi. Hivyo kama mimi walikuwa wito increment hapa na kitu kitu comma, kuna ramani ya moja kwa moja. variable kwanza, chochote ni kuitwa, ni kufanywa nakala ya hoja ya kwanza zaidi ya hapa. Sorry. Hii haipaswi kuwa mabano. pili hoja yanaendana na la pili. Hivyo ili, ndiyo, mambo. Wote haki. Sorry. Nilitumia muda mrefu njia ya kufika huko. Maswali mengine? Wote haki. Basi hebu angalia kama hatuwezi kuchora picha ya nini kweli kinachoendelea hapa chini ya Hood, hivyo kusema. Hii ni mstatili kwamba wanaweza kuwakilisha kumbukumbu ya kompyuta yako. Hata kama una wazo jinsi kumbukumbu kazi au jinsi RAM matendo, angalau kudhani kwamba una mashada ya hiyo siku hizi. Nimepata megabaiti yake, nimepata gigabytes yake, na tunajua kutoka wiki 0 Byte kwamba ni kile tu? >> [Mwanafunzi] 8 bits. 8 bits, haki? Hivyo 8 zeroes na 1. Hivyo kama kompyuta yako ina GIG ya RAM, 2 gigs ya RAM siku hizi, una bilioni au bilioni 2 ka ya kumbukumbu au bits takribani bilioni 8 au 16 bilioni ndani ya kompyuta yako. Tofauti na mfano kidogo sufu Willy, siyo magnetic chembe kawaida tena. Kuongezeka - katika Laptops angalau - ni hali mango anatoa, SSDs, kwamba tu kuwa na sehemu hakuna kusonga mbele. Ni wote elektroniki. Ni wote umeme-msingi. Hivyo kufikiri ya Mstatili hii kama tu anayewakilisha gigabytes 1 au 2 ya kumbukumbu kwamba wewe. Hivyo ni chunk ya kumbukumbu. ulimwengu wa sayansi ya kompyuta ina aina ya partitioned mbali bonge la kumbukumbu ya kufanya mambo tofauti. Kwa mfano, kama hii ni RAM kompyuta yako, kama ilivyopendekezwa na Mstatili huko, zinageuka kuwa na mkataba, juu ya RAM yako, ili kuzungumza, ujumla ni nini wito sehemu asilia. Wale ni sekunde 0 na 1s kwa kuwa compiled. Hivyo wakati tumekuwa inaonekana chini ya kofia katika kile a.out ni, yote haya sekunde 0 na 1s, wakati kukimbia mpango, sekunde 0 wale na 1s ni kubeba kutoka gari yako ngumu katika kitu kinachoitwa RAM, na katika RAM wao ni kuweka saa ya juu. Wakati huo huo, una mambo mengine: initialize data, uninitialize data. Wale 2 swaths ya kumbukumbu rejea vigezo kimataifa, ambayo huna mara nyingi matumizi ya lakini wakati mwingine kama wewe, wao kuishia huko pia. Kisha kuna baadhi ya mambo mengine: mazingira vigezo, ambayo sisi si kutumia muda mwingi juu ya, lakini kisha 2 mambo muhimu kwamba atakuja tena katika muhula, stack na lundo. Kwa hiyo wengi kumbukumbu ya kompyuta yako ni akiba wakati wa mbio mpango kwa kitu kinachoitwa stack na kitu kinachoitwa lundo. Sisi siyo kwenda kuzungumza kuhusu lundo leo, lakini tutaongea kuhusu stack. stack ni maana ya conjure up Visual ya dining trays mlo ukumbi katika Mather House au popote kutokea kwa kuwa ambapo ukumbi dining wafanyakazi safi yao ya kila siku, wao stack yao juu kutoka ghorofa ya juu juu, na vile vile, katika kumbukumbu, kuna hili wazo la kuweka kitu juu ya stack, kuweka kitu juu ya stack, kuweka kitu juu ya stack. Na nini sisi maana kwa mfano huu? Hebu zoom katika juu ya nusu tu ya chini ya picha hii, RAM kompyuta yako, kupendekeza yafuatayo. Ni zinageuka kuwa wakati kukimbia mpango kama a.out au hujambo - chochote mpango ni kwamba ve yameandikwa - tena, wale sekunde 0 na 1s ni kubeba kutoka gari yako ngumu, ambayo ni ya muda mrefu ya uhifadhi, anakaa huko hata wakati wewe vuta kuziba, kubeba katika RAM. RAM ni kasi kuliko anatoa ngumu - ni ndogo kuliko anatoa ngumu - lakini ni mipango ya kuishi ambapo wakati wewe mbio yao. Hivyo bonyeza mara mbili juu ya mpango Mac au PC, ni kubeba kutoka ndani ya gari ngumu RAM. Haraka kama ni kubeba katika RAM, go sekunde 0 na 1s kwa juu ya njia, kinachojulikana Nakala sehemu, lakini basi haraka kama mpango wako kweli kuanza kukimbia, Kazi kuu inaitwa, na kuu, kama tumeona, mara nyingi ina vigezo mitaa, na ina ints masharti na na chars na kama. Hivyo kama mpango wako kwamba umeandika au mpango kwamba una mbili clicked kutumika baadhi ya vigezo ndani ya kuu, wao kuishia chini ya stack yako ya kumbukumbu, hivyo kusema. Zaidi concretely, nini hii kwa kweli ina maana gani? Hii ina maana kwamba kama sisi walikuwa wanakwenda idadi bytes ya RAM katika kompyuta yako, taarifa kwamba hii inaweza kuwa Byte idadi 0, hii inaweza kuwa Byte namba 1, 2, 3, 4, 5, 6, njia yote hadi bilioni 2 itakuwa njia yote hadi pale saa ya juu. Hivyo kwa maneno mengine, wakati sisi majadiliano kuhusu RAM au kumbukumbu katika suala la ka, ni njia tu kwamba mtu imeamua nini kuzihesabu kila chunks wale wa kumbukumbu. Hivyo wakati unahitaji 32 bits kwa int au unahitaji 8 bits kwa Char, wapi wanaishia katika kumbukumbu? Conceptually, wao tu kuishia chini ya jambo hili aitwaye stack. Lakini nini kuvutia sasa ni wakati kuu wito kazi - kudhani kazi kuitwa foo, tu jina holela - kile kinachotokea ni kuu ni chini ya hii stack ya kumbukumbu; foo sasa ni kuweka juu ya kuu katika kumbukumbu. Hivyo yoyote vigezo vya ndani kuwa foo ina kuishia aina ya conceptually juu ya wale katika kuu. Kama foo wito kazi nyingine iitwayo bar, wale vigezo kuishia hapa. Kama bar wito kitu kingine, hapa, hapa, hapa. Basi nini kuvutia kuhusu mbio mpango ni kwamba kama wewe piga kazi na kama wale utendaji kazi na kuwaita kama wale majukumu piga kazi, wewe kujenga hii stack ya utendaji katika kumbukumbu. Na mara moja tu anarudi kazi gani unaweza kuanza kupata kwamba kumbukumbu nyuma. Hivyo moja ya njia rahisi ya kukimbia nje ya kumbukumbu katika programu ya kompyuta ni kuandika kazi ambayo kamwe kurudi. Hivyo kwa mfano, hebu kuonyesha kama kiasi na mpango kukusudia Buggy. Hebu kwenda mbele na kufanya # pamoja , int kuu (utupu), na mimi naenda kufanya wakati (2> 1), ambayo pengine haitabadilika juu yetu, na napenda kwenda mbele sasa na kufanya printf. Kwa kweli, kwamba kinaendelea kuwa chini ya kuibua kuvutia. Hebu kufanya hili. Kwa int i = 0; i> 0 - wacha kufanya kosa hili - i + +. Na hebu printf hapa. Hebu mazoezi nini nilikuwa akihubiri. Hebu kuwa na mbinu hapa, utupu chorus, na tutaweza kusema int i, na kisha mimi nina kwenda kusema printf - hapana, wacha kufanya hii ya kuvutia zaidi. Hebu kweli si magazeti chochote wakati wote. Hebu tu kufanya hivyo: chorus (i). Wote haki. Hivyo hii ni kwa sababu Buggy kwa nini? Mimi nina kufanya hili kama mimi kwenda kwa sababu haina mpango kwa kweli kufanya kitu chochote cha riba. Lakini hilo sio lengo. Lengo ni kuandika mpango ambao kuu kazi anafanya nini, inaonekana? Wito yenyewe. Na kweli, hatuna haja ya kitanzi. Hebu hata kurahisisha hii tu ili kama si kupoteza mbele ya mdudu kweli ya msingi. Wito Kuu chorus kuimba baadhi chorus, basi mimi alifanya kitu kijinga na mimi alikuwa na chorus wito chorus kwa sababu mimi kudhani mtu mwingine alikuwa anaenda kutekeleza hilo labda, na sasa hii si kwenda kukusanya bado. Mimi haja ya kufanya nini? Nahitaji mfano, kumbuka. Kwa hiyo mimi haja ya kuwa juu hapa utupu chorus (int i); Hivyo sasa kama mimi kwenda chini hapa - kwa kweli, hebu kutumia dirisha kubwa. Hebu kwenda mbele na kufanya chorus. Hebu kwenda mbele na kufanya chorus. Matumizi ya kitambulisho Undeclared i. Oh, kwamba ilikuwa ya kijinga. Hatuna haja ya hoja. Hebu tu kufanya hili. Natamani tungeanza njia hii. Ingekuwa mpango rahisi sana kuandika. Kuna. Sasa hebu kwenda juu kwa terminal dirisha yangu, rerun Clang, na hapa sisi kwenda. Hiyo ilikuwa kweli kasi. Ni nini hasa ilitokea tu, ingawa? Naam, sasa mimi itabidi kuongeza line magazeti ili tuweze kuona. Ngoja niseme printf ("mimi niko katika hapa") - hakuna vigezo. Tutaweza kuondoka ni kama hiyo. Hebu rerun kufanya. Hebu rerun chorus. Na ... kuja juu. Kuendelea. Kama kando, kwa nini kuwa si kugonga bado? kosa segmentation kilichotokea super kufunga kabla. [Inaudible mwanafunzi majibu] >> Hasa. Hivyo inachukua muda na magazeti, haki? Ni tu inachukua zaidi ya kazi juu ya sehemu ya kompyuta. Na huko ni: Mkato kosa. Hivyo taarifa tu jinsi mipango haraka kukimbia. Kama wewe si kuchapa chochote, super haraka. Lakini sisi bado got hii kosa segmentation kwa sababu kile kinachotokea? Kama unafikiri kuhusu jinsi ya kumbukumbu ya kompyuta yako ni kuweka nje, hii hutokea kwa kuwa kuu, lakini hapa hebu piga tu hii chorus, na hebu piga hii chorus. Na sasa kama mimi kufanya aesthetics wangu wa kulia, hii ni kwenda tu kusema chorus, chorus, chorus, chorus, chorus, chorus, chorus, ad nauseum, na hatimaye, nini kitatokea? Kama picha kubwa, literally, ni hili, ni nini hutokea tu conceptually? kuongezeka stack lundo. Au, mbaya, wewe tu overrun kila kitu, ikiwa ni pamoja na sehemu ya maandishi, ambayo ni sekunde 0 na 1s kwamba kuwakilisha programu yako. Kwa kifupi, hii ni super, super mbaya. Mpango wako kuzidi kuwa mbaya nje ya kudhibiti. Unatumia zaidi njia kumbukumbu kuliko wewe lengo wote kwa sababu ya makosa ya kijinga katika kesi hii, au katika kesi hii kazi sana kwa makusudi kufanyika linalojiita. Sasa, hii si wote mbaya. Kazi wito wenyewe kweli ina nguvu kubwa wakati matumizi kwa usahihi. Mimi si kutumika kwa usahihi hapa. Hivyo hii si wote mbaya, lakini ukweli kwamba mimi kweli kamwe kuacha wito mwenyewe ni udhaifu msingi hapa ya mpango huu. Hivyo ambapo ni sisi kwenda kwa yote haya? Nini kinatokea kweli? Wakati mimi piga kazi increment kama sisi walikuwa wakifanya katika mifano hizo, Nina thamani kama 1 kwamba mimi kupita in Mimi kupita katika nakala ya namba 1, hivyo zifuatazo kinachotokea. Hebu kwenda katika mfano increment, hii guy haki zaidi ya hapa. Hapa ni nini ni kweli yanatokea. Wakati mimi kuwaita increment na mimi kupita katika x, pictorially, nini kinaendelea hapa ni hii. Kama mimi na thamani ya 1 kuhifadhiwa hapa na mimi kwa kweli kuwaita increment, ambayo sasa inaitwa chorus - iPad ni kutupa mimi mbali hapa. Hebu piga hii increment, na sisi hawajui nini kazi hii ya pili ni kwenda kuwa. Basi nini hasa kinachotokea ni hapa mahali fulani katika kuu nina chunk ya kumbukumbu kwamba ni hifadhi ya namba 1. Wakati mimi kuwaita increment, mimi nina kutumia mwingine chunk ya kumbukumbu, lakini sasa nina nakala ya 1. Wakati mimi increment kwamba thamani, hii inakuwa 2, lakini basi kile kinachotokea kwa haraka kama anarudi increment? Kumbukumbu hii tu anapata mitupu nyuma mfumo wa uendeshaji, ambayo ina maana wote umefanya kosa ni kitu muhimu. 1 kuwa awali ilikuwa zilizomo katika kuu ni kweli bado kuna. Hivyo ambapo ni sisi kwenda na hili? Ni zinageuka kuwa katika kumbukumbu una mlolongo huu nyuma kwa nyuma ya ka kuwa unaweza kuweka mambo katika, na ni zinageuka kuwa tumekuwa tayari kuona kitu ambayo inahusisha kuweka mambo nyuma kwa nyuma kwa nyuma kwa nyuma. Je, ni kamba msingi wiki 1 na sasa wiki 2? Ni tu mkusanyiko wa wahusika. Hivyo zinageuka tu kama unaweza kuweka namba katika kumbukumbu, vile vile unaweza kuweka wahusika katika kumbukumbu. Na mara moja tunaanza wahusika kuweka katika kumbukumbu nyuma kwa nyuma kwa nyuma kwa nyuma, zinageuka kuwa kutumia rahisi ya mambo kama kwa kitanzi au kitanzi wakati, tunaweza iterate kutoka kushoto kwenda kulia juu ya wahusika katika string na kuanza massaging yao ndani ya wahusika tofauti kabisa - inaweza kuwa b, b inaweza kuwa c - ili hatimaye, tunaweza kuchukua sentensi Kiingereza kwamba kweli hufanya akili na kubadilisha kila barua hizo moja kwa wakati mmoja kutembea kupitia kumbukumbu ya kompyuta wetu wa kushoto na haki ya kweli encrypt. Basi hebu kuchukua yetu dakika tano mapumziko hapa, na wakati sisi kuja nyuma, tutaweza kuanza mchakato huu wa scrambling habari. Wote haki. Kabla ya sisi kupiga mbizi katika baadhi crypto na mambo haya kuitwa arrays, basi mimi pause kwa maswali yoyote kwa sababu mimi najisikia kama kweli aina ya msonge baadhi ya mada hizo. Basi hebu kurekebisha sasa kama tunaweza. Sisi tu kuongelea maadili kurudi, sisi aliyesema kuhusu hoja, na kuongelea wazo hili, ambayo tutaweza kurudi katika wiki ijayo, ya kuangalia kumbukumbu kama rundo zima la trays haya sifa, ili kuzungumza, kutoka chini juu juu, vile kwamba kila tray kwamba anapata kuweka kwenye stack inawakilisha kazi hiyo kwa sasa kuitwa. Maswali yoyote? Napenda kuuliza swali hapa. Hebu kurahisisha hii nyuma ilikuwa ni nini kabla ya baadhi ya Q & A. yetu mapema ukweli kwamba increment ina mabano wazi, int idadi, imefungwa mabano - nini idadi int kuwakilisha? [Mwanafunzi] hoja. >> Hoja. Sawa. Lakini nini hoja? [Inaudible mwanafunzi majibu] >> gani hiyo? >> [Mwanafunzi] Kitu ambacho wewe kupita in Okay, kwa hivyo kitu ambacho wewe kupita in Na zaidi kwa ujumla, ni tu pembejeo. Kama ungekuwa kuandika kazi na madhumuni kwamba kazi katika maisha ni kufanya kitu tofauti kidogo kila wakati matumizi yake, basi njia pekee kwa kuwa kutokea kwa kweli inaweza kuonekana kuwa kutoa ni pamoja na pembejeo hivyo kwamba wanaweza kufanya kitu tofauti na pembejeo kwamba kila wakati. Hivyo haja ya kutaja mambo mawili wakati kazi inachukua pembejeo. Unahitaji kubainisha jina kwamba unataka kutoa mchango kwamba rena kwa urahisi wako mwenyewe ili uweze rejea ni katika kazi na kwamba wewe binafsi ni kuandika, kama mimi hapa katika mstari 32. Lakini pia unahitaji kwa kutaja aina yake kwa sababu C ni lugha ya programu kwamba tu inahitaji kwamba kama unataka variable, mniambie kompyuta nini data aina hiyo ni, katika sehemu kubwa hivyo kwamba anajua jinsi wengi bits kutenga kwa variable kwamba kwa sababu inaweza kuwa 6 - sorry, itakuwa si 6. Inaweza kuwa 16, inaweza kuwa 8, inaweza kuwa 32, hata 64, lakini kompyuta mahitaji ya kujua. Sasa, int upande wa mkono wa kushoto inawakilisha nini, kwa kulinganisha? [Inaudible mwanafunzi majibu] >> gani hiyo? >> [Mwanafunzi] Aina ya kazi. aina ya kazi na, zaidi hasa, aina ya matokeo yake. Haki. Hivyo wakati kitu katika mabano inawakilisha mchango wake, kama wapo, kitu kwa upande wa kushoto inawakilisha matokeo yake. Na katika kesi hii, inaonekana increment anarudi int, na hivyo int ni aina ya kurudi kwa kazi hii. Nini maana ya kurudi? Literally, wewe kutumia kurudi Keyword na kisha kama nini wewe ni kurudi na haki ya Keyword ni integer, basi hakika hivyo ni sambamba na kile sisi ahadi. Unaweza si kufanya kitu kama hii - hello, ulimwengu - kwa sababu ni kamba. Ni dhahiri kuwa, si integer. Hivyo katika muda mfupi, ni mzigo kweli juu yetu, programu, kwa kuwa maalum kama kwa nini tuko kurudi na kisha kweli kwenda kuhusu kurudi yake. muktadha hapa sasa ni kwamba kumbukumbu ya kompyuta yako ni gigabyte, gigabytes 2 - chochote - labda ni zaidi, labda ni kidogo, lakini kompyuta maoni yake kama kuwa na sehemu mbalimbali. Kitu huenda chini pale, kitu kingine huenda juu huko, mambo mbalimbali huenda katika katikati, na leo sisi tu kuanza kusimulia hadithi, lakini tutaweza kuja nyuma wakati huu zaidi. Kwa sasa, kipande tu ya kumbukumbu sisi kweli huduma kuhusu ni sehemu asilia kwa sababu tu kwamba inawakilisha sekunde 0 na 1s kwamba Clang ina outputted. Hivyo wakati wewe kukimbia amri katika keyboard kama a.out au wewe bonyeza mara mbili icon kwenye Mac OS au Windows, programu yako ni kubeba kutoka gari yako ngumu katika RAM na ni plopped wakati juu ya RAM ya kompyuta yako, hivyo kusema. Wakati huo huo, kama mpango wako na kuanza mbio kuu anapata kuitwa katika mpango aliandika au Microsoft mpango au Apple aliandika, yoyote ya vigezo yake mitaa kuishia chini huko chini ya kumbukumbu ya kompyuta yako. Lakini kama kazi wito kuu mwingine kwamba yenyewe ina vigezo au hoja, wanaishia hapo juu. Na kama kazi kwamba wito kitu, wanaishia hapo juu, juu ya hayo, juu yake. Na mara moja tu kazi inafanywa utekelezaji haina stack ya sania, ili kuzungumza, kuanza kupata chini na chini. Na hii ni nini basi, kwa kifupi, anaelezea kwa nini wakati wewe piga mchemraba au wewe piga increment, wewe ni kupita katika nakala ya thamani. Na nini maana ya pictorially ni kwamba wewe ni literally kuandika namba 1 katika sehemu nyingine ya kumbukumbu, kubadilisha kwamba 1-2 katika kesi ya increment au 8 katika kesi ya mchemraba na kisha kutupa kwamba kumbukumbu mbali haraka kama increment au anarudi mchemraba kazi. Swali. [Mwanafunzi] wapi vigezo kimataifa kuhifadhiwa? Vigezo Global ni kuhifadhiwa katika nini sasa inaitwa data initialized au data uninitialized, tofauti kuwa kama una variable kimataifa na wewe hawawajui ni mara moja thamani na alama ya usawa, inaishia kwa juu pale, na kama wewe tu kusema x int; na thamani hakuna, ni mwisho juu chini kidogo katika RAM tu kwa mkataba. Maswali mengine? Wote haki. Hivyo picha hii kuja nyuma kama sisi kupata nguvu zaidi kwa nini tunaweza kufanya kwa kompyuta, lakini kwa sasa, hebu kuwa intro mafupi kwa cryptography, aina maalum ya cryptography kwamba haina kutatua matatizo yote ya dunia lakini haina kutatua baadhi yao. Katika kesi hii hapa, tuna kitu kinachoitwa siri-ufunguo cryptography. Siri-key cryptography, kama jina linavyosema, hupata usalama wake kutoka siri. Kwa mfano, kama wewe walikuwa nyuma katika shule ya daraja na wewe walikuwa kupita kidogo siri upendo barua kwa mvulana au msichana wewe walikuwa kusagwa juu, kama alitaka kupita kwamba kumbuka kupitia watazamaji, wewe pengine bila kuandika kumbuka vile katika Kiingereza au lugha yoyote yako ya asili ni. Badala yake, unaweza encrypt au unaweza tu kutuma ujumbe wa maandishi yao siku hizi. Lakini wewe ili kweli kupita yao note katika darasa. Na kwa kufanya hivyo salama katika namna kwamba rafiki yako na mwalimu sijui nini wewe kuandika, unaweza kuja na algorithm haki rahisi, vijana ingawa unaweza kuwa, ili tu kinyang'anyiro maneno. Hivyo badala ya kuandika unaweza kuandika b, badala ya b unaweza kuandika c, badala ya c unaweza kuandika d, na kadhalika. Au unaweza kuja na tafsiri ya kisasa zaidi wa barua ya barua tofauti. Lakini catch ni mvulana au msichana ambaye wewe ni kutuma kumbuka hii mahitaji kujua kitu, ambayo ni nini, ni wazi? >> [Mwanafunzi] Nini wewe kutuma. Nini siri yako, kama kile ni kwamba kati ya ramani na b na c na d's. Je, ni kuongeza tu 1 kwa kila moja ya barua kwenda kwa kutoka b, b c? Je, ni ngumu zaidi kuliko hiyo? Hivyo wewe na kuponda yako haja ya kuwa na habari hii siri, lakini kuna aina ya samaki wanaovuliwa-22 hapa. Kama hii ni mara ya kwanza wewe ni kutuma barua hii upendo kwa njia ya darasa, jinsi ni kwamba kijana au msichana kwenda kujua nini siri hata ni? Hivyo siri-ufunguo crypto haina kutatua matatizo yote ya dunia, na kuna uhusiano kweli hapa kwamba tutaweza kurudi kuelekea mwisho wa muhula. Vile vile kufanya wengi wetu si kujua kwamba mtu anafanya kazi, kwa mfano, saa Amazon.com, na bado wengi wetu pengine kununuliwa stuff saa Amazon.com, na tumekuwa kufundishwa kwa kudhani kwamba haya mashirikiano ya e-commerce ni salama. URL pengine anasema https, kuna labda kidogo silly kufuli icon mahali fulani, kuna baadhi ya aina ya cryptography kupata kadi yako ya habari kati ya wewe na Amazon.com. Na bado kama cryptography inahusisha kujua baadhi ya siri na bado sijui mtu yeyote katika Amazon na nimekuwa hakika si mpangilio wa aina yoyote ya siri na mtu katika Amazon, jinsi ni kompyuta yangu au browser yangu kufanya hili? Ni zinageuka kuna aina nyingine ya cryptography kabisa kwamba kutatua tatizo. Lakini kwa leo, tutaweza kuzingatia moja rahisi ambapo unaweza kupanga mapema ili kujua baadhi ya siri kama 1 au baadhi ya ramani kati na b ya. Na mchakato wa cryptography ujumla unahusisha hii. Una baadhi Nakala wazi, taswira ya hapa kushoto, wewe kukimbia kupitia baadhi ya aina ya algorithm au utaratibu kwa ajili ya encrypting ni - labda kwamba tu inakuwa b, b inakuwa c - na kisha wewe kuishia na nakala ya siri. Wakati huo huo, mara kuponda yako inapata kumbuka hii siri, yeye au yeye ana kisha kuisimbua kwa ujumla kupunguza kwamba algorithm ili kupata nyuma Nakala wazi. Kuna incarnations ya kimwili ya hili. Kwa mfano, hii ni kidogo siri avkodare pete, na hii ni pete katika maana ya kwamba kuna wawili dials hapa. On pembezoni nje ya jambo hili, kuna barua kupitia Z, ingawa wao ni ili random, na juu ya ndani, kuna baadhi ya kweli idadi vile kwamba pamoja na pete hii unaweza aina ya kugeuka nje lakini si ndani ya ili yaendane idadi na barua. Kutoka movie inayoitwa Story Krismasi, utaona kwamba Ralphie kidogo alikuwa na shauku kubwa kufikiri nini Little Yatima Annie ujumbe wa siri ilikuwa kwake ambayo yamekuwa aliwasiliana, nadhani, katika mfumo wa ujumbe numeric juu ya sanduku nafaka na wewe alikuwa na kujilimbikiza kadi zote kidogo kwamba alikuja katika sanduku ya nafaka, alikuwa na barua yao katika, alikuwa na kupata nyuma siri avkodare pete hivyo kwamba unaweza hatimaye kufikiri nini ramani ni kati ya herufi na namba au barua na barua. Jinsi katika kompyuta tunaweza kwenda kuhusu kutekeleza au anayewakilisha mambo kama haya? Tunahitaji njia ya kuonyesha wenyewe zaidi kidogo smidigt kuliko vigezo yetu hivi sasa na kuruhusiwa. Tulikuwa ints, tumekuwa alikuwa chars, tumekuwa alikuwa ikifungwa DOUBLES na na wengine wachache, lakini wale ni vipande binafsi ya kumbukumbu kwamba si kweli kuruhusu sisi kueleza mambo kama maneno na sentensi na misemo. Hakika, tumekuwa aitwaye mambo kama hayo masharti, lakini sisi ahadi kwamba hii ni kweli tu kurahisisha katika maktaba CS50 kwamba sisi ni wanaotaka peel nyuma. Na hivyo hebu kuanza kufanya hivyo hapa. Hebu kwenda mbele na kufungua faili - wote wa files hizi zinapatikana, kama kawaida, online - inayoitwa array.c kutatua tatizo lisilohusiana na masharti lakini kwamba inajenga picha hapa wa jinsi sisi inaweza kutumia kitu kinachoitwa safu. safu ni aina data. Ni aina ya kutofautiana wa aina yake kuwa ina aina nyingi data ndogo ndani yake nyuma kwa nyuma kwa nyuma kwa nyuma. Hivyo kwa mfano, kama sisi alitaka kuandika mpango kidogo kwamba anatoa Jaribio yako wastani kwa ajili ya kozi kama 50 ambayo ina 2 Quizzes, unaweza kwa urahisi sana kuandika mpango huu msingi hata kwenye baadhi ya nyenzo ya wiki iliyopita kwa kutumia GetInt na wanandoa wa vigezo: int quiz1, int quiz2. Na ni pretty moja kwa moja. Ni labda 10, 20 mstari wa kanuni max ya kutekeleza mpango wa kwamba anauliza mtumiaji kwa alama Jaribio 2 na kisha computes wastani yao na kuongeza yao pamoja, kugawa na 2, na kisha kuchapisha matokeo. Sisi inaweza pengine kufanya hivyo pretty urahisi sasa baada ya baadhi ya idadi ya dakika. Lakini tatizo ni kwamba tuseme kwamba alikuwa na 50 3 Quizzes au 4. Tuseme kwamba ulitaka kutumia mpango huo kwa ajili ya darasa kwamba alikuwa na kila wiki Quizzes. Fikiria juu ya darasa kwamba ina kila wiki Quizzes. Kama kuna 16 au hivyo wiki katika muhula, sasa una vigezo 16: int quiz1, int quiz2, int quiz3, int quiz4. Haraka kama wewe kuanza kuona hii redundancy, hii kuiga na pasting ya kificho, ni lazima kuanza kufanya unataka kulikuwa njia bora zaidi. Na nashiriki, kwa sababu ya arrays kuna. Basi hebu kufanya hili. Kwanza, napenda kuanzisha kitu rahisi sana kwamba tumekuwa si kutumika hivi sasa, lakini utaona ni mara kwa mara katika code. Hii ni nini ujumla huitwa mara kwa mara. Hivyo ni mara kwa mara katika maana ya kwamba thamani hii kamwe mabadiliko. mkataba wa binadamu wakati wa kujenga mara kwa mara ni kutumia barua zote mtaji ili tu kwamba ni kweli anasimama nje katika code yako, na Keyword maalum kwamba matumizi katika C ni # define. Hivyo tunasema # define, basi nafasi, basi neno kwamba unataka kutumia kwa ajili ya jina mara kwa mara ya na kisha thamani ya mara kwa mara. Taarifa hii ni tofauti na assigning kitu kutofautiana. Hakuna sawa saini, kuna semicolon hakuna. Hii ni nini ujumla inayojulikana kama agizo preprocessor, lakini zaidi juu ya kwamba wakati mwingine. Kwa sasa, hii inajenga thamani isiyobadilika kuitwa Quizzes ambaye halisi thamani numeric ni 2. Hivyo unaweza kuona mahali popote Quizzes, Quizzes, Quizzes katika faili hili, kwamba tu idadi 2. Kama mimi kuangalia kuu sasa, hebu angalia jinsi hii matendo. Kwanza inaonekana kidogo cryptic, lakini ni mambo yote kutoka wiki 1. Uliza mtumiaji kwa ajili ya darasa. Tutafanyaje hili? Katika mstari 22 - hii ni kweli sehemu Juicy - mimi kutangaza kuelea lakini si tu kuelea moja. Mimi kutangaza, badala yake, safu ya maadili yaliyo-uhakika. Hiyo variable ni kwenda kuitwa darasa, kama alisema hapa, lakini kipande tu ya syntax mpya basi ni haya mabano mraba. ukweli kwamba nilivyosema darasa kuelea na kisha bracket wazi na kisha idadi - taarifa kama hii ni mara kwa mara hii tu kama sisi gani huu - hii ina maana, "Hey kompyuta, nipe ikifungwa 2 na hebu pamoja kuwaita darasa." Hii ni tofauti na mchakato mengi zaidi tedious kama hii: kuelea grade1; kuelea grade2; na kadhalika. Hivyo safu inaruhusu sisi kutekeleza wazo hili lakini kiasi kidogo messily, katika namna ambayo tunaweza kuandika 1 mstari wa kanuni badala ya, kusema, 16 kwa muhula 16-wiki. Mimi sitaki ngumu-code 2 kwa sababu kama wewe kufikiri juu ya hili sasa mantiki, tuseme mwaka ujao CS50 mabadiliko ya 3 Quizzes badala na mimi alikuwa na idadi 2 hapa, mimi alikuwa na idadi 2 hapa, Mimi nilikuwa na idadi 2 hapa, idadi 2 hapa. Inakuwa tedious sana na rahisi sana screw up na kwa ajali kubadilisha 1 thamani kwa 3 na miss baadhi thamani nyingine ya 2. Hivyo nina kwenda kwa badala abstract hii mbali na kutumia hii mara kwa mara kwamba, kama jina lake anapendekeza, kamwe mabadiliko. Na sasa bila kujali kama tuna tofauti Quizzes mwaka huu au ujao, Mimi tu mabadiliko hayo katika sehemu moja hadi hapa juu. Basi hiyo ni ya mara kwa mara zote ni. Wakati huo huo, kipengele mpya conceptual ni ile ya safu. Hivyo mabano mraba nipe ikifungwa hii wengi na lets mimi pamoja kuwaita darasa hapa. Hivyo sasa hebu angalia nini mimi kwenda kufanya. Hapa katika mstari 24 ni mwanzo wa kwa kitanzi. Hii ni kitu kweli dhana. Ni tu kwa kutumia Quizzes badala ya idadi ngumu-coded. Lakini kuna kitu kielimu tofauti huko kutoka wiki iliyopita. Hii ni printf, hivyo printf ("Quiz #% d ya% d:") kwa sababu mimi nataka tu magazeti nje nipe Quiz namba 1 ya 2 na kisha 2 ya 2. Hivyo hii ni kitu rena estetiska. Lakini sehemu ya kuvutia sasa ni katika mstari wa 27. Ili kujaza katika moja ya placeholders mbili na thamani yaliyo-uhakika, wewe tena kutumia mabano mraba. Katika kesi hiyo, mimi nina kutumia i kwa sababu hii kwa kitanzi imeanza na i sawa na thamani gani, inaonekana? [Mwanafunzi] 0. >> [Malan] 0. Kadhalika iteration kwanza ya kitanzi hii, ni kama ingawa niliandika hii katika kanuni, lakini juu ya iteration pili ya kitanzi hii, ni kama ingawa niliandika hii katika code yangu. Lakini ukweli kwamba mimi nina kutumia kutofautiana ni kamili kwa sababu, kama jina linavyosema, ni tofauti na thamani yake juu ya kila iteration, hivyo mimi nina kujaza hii safu moja doa kwa wakati. Je safu hii kuangalia kama? sababu nilitoa super rahisi Mstatili juu ya screen hapa kabla ilikuwa kwa sababu hiyo. safu ni tu chunk ya kumbukumbu na kufuatiwa na mwingine chunk ya kumbukumbu kufuatiwa na mwingine chunk ya kumbukumbu na kadhalika. Hivyo kama safu yangu ni ya kawaida 2 katika kesi hii hapa, wote mimi itakuwa kufanya na kuandika katika alama yangu Jaribio kama hapa - I got 100 juu ya hili na kisha mimi got 99 juu ya hili - kisha kumbukumbu hii inaweza hata kutumika kwa sababu nimekuwa tu aliuliza kompyuta kwa safu ya ukubwa 2. Wale mraba bado kuna, haki? Bado una 2 gigabytes ya RAM hata kama wewe ni tu kuuliza kwa ikifungwa 2. Hivyo wazo nyuma ya arrays ni kwamba kompyuta tu huchukua chunk ya kumbukumbu na kisha apportions vipande vidogo nyuma kwa nyuma kwa nyuma kwa nyuma. Na hivyo ndiyo safu yote ni. Ni chunk contiguous ya ndani ya kumbukumbu ya ambayo unaweza kuweka mambo. Hii hufanyika kisha kufanya baadhi tu arithmetic boring. Kama mimi kitabu chini hapa, hii ni pale ambapo mimi basi iterate juu ya safu. Mimi kuja na summation ya yote ya maadili katika safu, na kisha mimi kutumia kazi pande zote hapa kwa kweli kufanya Jumla kugawanywa na Quizzes. Lakini ngoja kupitisha mkono wangu kwamba kama aina ya hesabu za kutosha kwa sasa. Lakini yote anafanya kwa ajili yangu hatimaye ni kompyuta wastani. Hivyo kwanza Jaribio plus Jaribio pili kugawanywa na 2 na kisha kuchapisha nje kama int. Lakini hebu sasa ya mpito kwa mfano tofauti inayoitwa string1, ambayo inajenga picha sawa lakini masharti ya kutumia. Hebu kwenda mbele na kurahisisha hii kwa muda tu. Tughufirie indentation kwa sasa. Tangazo katika mstari 19 ya mfano huu, mimi kupata kamba kutoka kwa mtumiaji. Lakini taarifa nini mimi ijayo kufanya katika mistari 22 na kuendelea. Mimi kwa kweli iterating kutoka i hadi - na hii ni hila mpya - strlen, kamba urefu. Hii ni kazi ambayo inakuja na C kwamba kama wewe kupita kamba, ni anaelezea jinsi wengi wahusika ni katika kamba hiyo. Hayo ni yote. Na ukweli kwamba ni strlen badala ya urefu wa kamba ni kwa sababu tu ni zaidi succinct. Miaka thelathini iliyopita, watu walipenda kuandika mambo kama succinctly kama inawezekana, hivyo tumekuwa agizo hilo mkataba hapa. i + + tu ina maana increment i katika kila iteration. Na sasa taarifa hii, ambayo ni kweli kuvutia. Katika mstari 24, nasema, "Kompyuta, nipe tabia, bits 8, na simu yake c." Lakini ni nini hii upande wa kulia akisema? Kwa Kiingereza, ni nini kwamba kuwakilisha? [Mwanafunzi] tabia ya kwanza katika safu. Hasa. Nipe tabia ya kwanza katika safu. Au, kwa ujumla zaidi, nipe tabia idh katika safu. Na kutambua ni muhimu sasa kwamba kama kompyuta wanasayansi, sisi ni kweli kuhesabu toka 0. Huna busara sasa kuanza kufanya hili. Sasa una kuishi kwa mujibu wa matarajio ya kompyuta na kuhesabu kutoka 0 kwa sababu [0] ni kwenda kuwa tabia ya kwanza katika kamba, [1] ni kwenda kuwa ya pili, [2] ni kwenda kuwa ya tatu, na kadhalika. Hivyo mpango huu, ikiwa mimi kukusanya kuwa, hii ni tena string1, hivyo kufanya string1, na sasa nimekuwa kukimbia string1 katika terminal dirisha yangu. Ni kusubiri kwa ajili ya pembejeo, hivyo mimi nina kwenda aina katika Daudi, Ingieni, na sasa Prints Daudi wote juu ya mistari tofauti kwa sababu taarifa nini mimi kufanya. Mimi nina uchapishaji moja tabia kwa wakati. Sisi si kuingia kwa undani juu ya leo hii, lakini mimi ilifutwa wakati iliyopita hundi hii hapa. Ni zinageuka kuwa kama mtumiaji ni misbehaving, adversarial, au kuchanganyikiwa tu, unaweza kweli kushindwa kutoa kamba ya urefu fulani. Kama hit muhimu vibaya kwenye keyboard, unaweza kutoa hakuna kamba wakati wote, au kama wewe ni malicious, unaweza kujaribu kuweka katika thamani ya gigabyte ya insha kujaza hii kamba, na kama kompyuta anaendesha nje ya kumbukumbu, zinageuka kuwa sisi ni kwenda kupata nyuma thamani hii maalum iitwayo null. Hivyo kwa sasa, tu kujua kwamba kuna thamani hii maalum iitwayo null ambayo itaruhusu sisi kuangalia wakati tuko nje ya kumbukumbu, miongoni mwa mambo mengine. Lakini kama mimi kufungua sasa string2, taarifa moja tofauti hapa. Notice moja tofauti hapa na string2. Kwa string2, hii kwa kitanzi ni tofauti kidogo. Hebu kufuta NULLs ili tuweze kuzungumza kuhusu wale wakati mwingine. Nini tofauti kuhusu kwa kitanzi wakati huu? Siwezi kurudi mfano uliopita. Basi hiyo ni toleo 2, hili ni toleo 1. 1, 2. 1, 2. wito strlen ni wapi? Ni katika sehemu ya kwanza ya kwa kitanzi. Mawazo yoyote kama kwa nini mimi kufanya hili? Yeah. [Mwanafunzi] Hivyo huna piga kazi kila wakati. [Malan] Basi sisi wala kuwaita kazi kila wakati. Hasa. Kumbuka kutoka kwa matanzi kwamba wao ni super rahisi mara moja aina ya kuelewa kwamba hii ni initialization, hali, na update. Tatizo ni kwamba hali hufanyika kwenye kila iteration ya kitanzi. Na hivyo katika mfano huu hapa, ni nini mbaya kuhusu ukweli kwamba huu ni hali yangu? [Mwanafunzi] Wewe wito strlen. [Malan] Wewe wito strlen tena na tena na tena. Lakini mara nimekuwa typed katika Daudi, urefu wa kamba kwamba ni 5, na si kwenda na mabadiliko juu ya kila iteration ya kitanzi kwa sababu kamba bado ni D-a-v-i-d. Hivyo hii ni ladha katika nini kinaendelea kuwa wazo la muhimu inayojulikana kama uamuzi kubuni ambapo si tu kufanya kompyuta kufanya kazi ya lazima. Tu kama sneak preview ya pset2, pset2 katika toleo la kawaida ni kwenda changamoto kweli kutekeleza baadhi ya idadi ya ciphers, baadhi ya idadi ya algorithms kuficha, ili unaweza wote encrypt na ujumbe siri decrypt kiasi kama Ralphie moja huko Decoded. Katika toleo la hacker ya pset2, tunakwenda kwenda kidogo zaidi. Sisi ni kwenda mkono wewe faili kutoka mfumo halisi wa kompyuta kwamba ina rundo zima la usernames na halisi nywila encrypted, na changamoto kwa ajili ya toleo hacker ni kwenda kuwa kwa kuvunja nywila wale na kufikiri nini cryptography au nini siri ilitumika kweli kuzalisha nywila hizo. Na sisi ni kwenda kufanya hivyo kwa kutumia kipengele mpya hapa ya C kwamba mimi nitakupa tu demo ya inajulikana kama hoja amri-line. Ni zinageuka, kama baadhi ya unaweza tumeona katika sehemu au katika vitabu, kuu haina daima kuwa utupu katika mabano. Ni zinageuka kuwa kuu pia inaweza kuandikwa kama hii, kwa hoja mbili, argc na argv, ambapo argc ni idadi ya maneno kwamba unapoandika jina baada ya mpango juu ya mstari amri yako na argv ni maneno halisi. Na kama mabano mraba kuna kupendekeza, argv ni inaonekana safu. Ni kwenda kuwa string baada ya kamba baada ya kamba katika kumbukumbu. Basi nini tunakwenda kuwa na uwezo wa kufanya kwa kuanzia na pset 2 ni kitu kama hiki. Kama mimi kufanya argv1, ambayo ni mfano tutaweza kurudi Jumatatu, na kukimbia, taarifa kwamba haionekani kufanya chochote bado. Ni tu Prints nje ya jina lake mwenyewe. Lakini kama mimi kusema kwaheri darasa, taarifa kwamba mpango huu inaonekana iterates juu ya kila moja ya maneno kwamba walikuwa typed katika haraka. Na njia ambayo sisi kupata maneno ya kwamba mtumiaji typed katika kuchochea ni kwa kubadilisha kuu kuanzia mwishoni mwa wiki hii kutoka int kuu (utupu) kwa int kuu (argc, argv) na hivyo kuzaliwa hoja amri-line. Na mara moja kupata kweli kisasa katika hili, wewe utakuwa na uwezo wa kuandika mipango kweli trippy kama hii moja hapa, ambayo inakwenda juu na zaidi ya baadhi ya utendaji tumefanya hivi sasa lakini yote kabisa nguvu. Hivyo tutaweza kuondoka na hii kwenye screen, na sisi kuona juu ya Jumatatu. [CS50.TV]