[MUSIC KUCHEZA] DAVID J. Malan: All wa kulia. Hii ni CS50, na hii ni mwisho wa Wiki 2. Kwa hiyo leo, tunakwenda kuendelea kuangalia yetu jinsi sisi kuwakilisha mambo chini ya hood-- kusonga mbali kutoka namba kama integers na yaliyo maadili uhakika na kuelekeza nguvu juu ya masharti na mipango hatimaye kuvutia zaidi. Lakini tutaweza pia kuangalia michache ya domain maalum problems-- ya kwanza ambayo itakuwa kuwa kuwashirikisha cryptography, sanaa ya scrambling habari, katika ambayo unaweza kuona hapo juu hapa ni picha ya Radio Yatima Annie ya siri avkodare pete kutoka yesteryear. Hii ni kweli aina primitive sana na aina ya cryptopgraphy mtoto ya kirafiki ambapo pete hii ina disks-- mbili ndani ya moja na moja nje. Na kwa kupokezana mmoja wa wale, unaweza kimsingi kujipanga barua kama A kupitia Z na barua nyingine kama B kupitia A. Kwa maneno mengine, unaweza literally mzunguko alfabeti, hivyo kuja juu na ramani kutoka barua kwa barua ili, kama wewe alitaka kutuma ujumbe wa siri kwa mtu kama Annie, unaweza kuandika chini ujumbe wako na kisha mzunguko barua, ambapo, kama wewe maana kusema "A," wewe badala kusema "B," wewe maana ya kusema "B," wewe badala kusema "C" - au kitu wajanja kidogo zaidi kuliko that-- na kisha, hatimaye, hivyo muda mrefu kama Annie ina avkodare hii pete, yeye unaweza Decode ujumbe. Sasa, unaweza kukumbuka, kwa kweli, kwamba hii ilitumika katika filamu maarufu sana kwamba ina ad nauseum wakati wa Msimu wa Krismasi. Hebu tuangalie hapa. RALPHIE PARKER: "Kuwa ni unaojulikana kwa wote kwa muhtasari kwamba Ralph Parker ni hili maalumu mwanachama wa Little Yatima Annie Secret Circle na ni haki ya kila heshima na faida zinazotokea lazimishwa. " RALPHIE PARKER (akisimulia): Saini Little Yatima Annie. Countersigned, Pierre Andre! Katika wino. Heshima na faida, tayari katika umri wa miaka tisa. [MUSIC KUCHEZA] [RADIO chatter] RALPHIE PARKER: hebu njoo. Hebu kupata tarehe na hayo. Mimi hawana haja ya jazz kwamba wote kuhusu smugglers na maharamia. RADIO ANNOUNCER: Sikiliza kesho usiku kwa adventure kuhitimisha ya Black Pirate meli. Sasa, ni wakati kwa Annie ya Ujumbe siri kwa ajili yenu wanachama ya Circle Secret. Kumbuka watoto, wanachama tu Annie ya siri ya Circle unaweza Decode Annie ya siri ujumbe. Kumbuka, Annie ni kutegemea wewe. Kuweka pini yako kwa B-2. Hapa ni message-- 12, 11, 2-- RALPHIE PARKER (akisimulia): I ni katika wangu siri mkutano wa kwanza. RADIO ANNOUNCER: --25, 14, 11, 18, 16-- RALPHIE PARKER (akisimulia): Oh, Pierre mara kwa sauti kubwa usiku wa leo. Mimi nilikuwa naona kuwa usiku wa leo ujumbe ulikuwa kweli ni muhimu. RADIO ANNOUNCER: --3, 25. Hiyo ni ujumbe kutoka Annie mwenyewe. Kumbuka, usimwambie mtu yeyote. [Panting] RALPHIE PARKER (akisimulia): Sekunde tisini baadaye, mimi nina katika chumba tu katika nyumba ambapo kijana wa tisa wanaweza kukaa katika faragha na Decode. Ah. "B." [Chuckles] RALPHIE PARKER (akisimulia): Nilikwenda ijayo. "E." neno la kwanza ni "kuwa." Ndiyo! Ni alikuwa anakuja rahisi sasa. "U." [Chuckles] RANDY PARKER: Aw, kuja juu, Ralphie. I gotta go! RALPHIE PARKER: Mimi itabidi kuwa na haki chini, Ma. Gee whiz. "T." "O." "Kuwa na uhakika kwa. "" Kuwa na uhakika wa "nini? Nini ilikuwa Little Yatima Annie anajaribu kusema nini? "Kuwa na uhakika wa" nini? MOTHER: Ralphie, Randy ina got kwenda. Je, tafadhali kuja nje? RALPHIE PARKER: zote haki, Mama! Mimi itabidi kuwa haki ya nje! RALPHIE PARKER (akisimulia): Mimi nilikuwa kupata karibu sasa. mvutano ilikuwa ya kutisha. Ilikuwa ni nini? hatima ya sayari inaweza hutegemea katika mizani. MOTHER: Ralphie, Randy got kwenda! RALPHIE PARKER: Mimi itabidi kuwa na haki nje, kwa kelele kubwa! RALPHIE PARKER (Akisimulia): Karibu hapo! Vidole yangu akaruka! Mawazo yangu yalikuwa ni chuma mtego. Kila pore vibrated. Ilikuwa ni karibu wazi! Ndiyo! Ndiyo! Ndiyo! Ndiyo! RALPHIE PARKER: "Kuwa na uhakika kunywa Ovaltine yako. " Ovaltine? kibiashara crummy? [MUSIC KUCHEZA] RALPHIE PARKER: Mwana wa bitch. [Laughing] DAVID J. Malan: Hivyo kwamba basi ni glimpse katika kile cryptography inaweza kuwa kwa Haya a kunywa kutoka yesteryear. Hivyo tangazo haraka. Kama wewe ni bure hii Ijumaa saa 1:15 na ingekuwa kama kujiunga na sisi kwa CS50 chakula cha mchana, kichwa na URL hii hapa. Kwanza kuja, kwanza kutumika kama kawaida. Lakini baada ya muda, tutaweza kuhakikisha kwamba zaidi mtu yeyote ambaye Ningependa kushiriki inaweza ratiba ya-busara. Hivyo masharti. Tuna Zamyla-- ambaye umefanya sasa alikutana uwezekano mkubwa Tatizo Set katika 1-- ambao jina ni yameandikwa hivyo. Na tuseme wewe typed jina lake ndani ya programu ya kompyuta ambayo ni kutumia kitu kama GetString. Ili retrieve keystrokes hayo, jinsi je, sisi kwenda juu ya anayewakilisha kamba, neno, aya, au barua nyingi kama hizi hapa? Sisi aliyesema mara ya mwisho kuhusu integers na matatizo kwamba kutokea kwa integer kufurika na yaliyo maadili uhakika na matatizo ambayo kutokea ndani ya usahihi. Pamoja na masharti, sisi angalau kuwa na kubadilika kidogo zaidi kwa sababu strings-- tu katika world-- halisi inaweza kuwa urefu pretty holela. Pretty short, pretty muda mrefu. Lakini hata hivyo, tunakwenda kupata kwamba kompyuta wakati mwingine kukimbia nje ya kumbukumbu na hata kuhifadhi kubwa kamba ya kutosha. Lakini kwa sasa, hebu kuanza taswira kamba kama kitu katika masanduku hayo hapa. Hivyo sita kama masanduku, ambayo kila mmoja inawakilisha tabia au "char." Hivyo kukumbuka kwamba "char" - c-h-r-- ni moja ya kujengwa katika aina data katika C. Na nini ni nzuri ni kwamba unaweza kutumia kwamba aina ya kama block jengo, puzzle kipande, kama wewe, ili kuunda aina kubwa ya data kwamba tutaweza kuendelea kuwaita "kamba." Sasa, nini muhimu kuhusu kufikiri juu ya mambo kama masharti kwa njia hii? Naam, ni zamu nje kwamba tunaweza kweli kujiinua muundo huu kwa kweli kupata wahusika binafsi katika njia pretty moja kwa moja. Mimi nina kwenda mbele na kujenga faili inayoitwa "stringzero.c," lakini unaweza kuiita chochote Ningependa. Na kwenye tovuti bila shaka ni tayari mfano huu mapema, hivyo huna haja ya aina kila kitu nje. Na mimi nina kwenda mbele na kwanza kufanya int kuu utupu. Na ndani ya siku chache, tutaweza kuanza kwa tease mbali nini utupu ni hapa, kwa nini ni int karibu na kuu, na kadhalika. Lakini kwa sasa, hebu kuendelea nakala kuweka kwamba. Mimi nina kwenda kutangaza string kuitwa s. Na mimi nina kwenda na kurudi kutoka GetString chochote aina user katika. Hii ni kwenda kuwa rahisi mpango, hakuna maelekezo, Mimi nina kwenda tu kwa upofu kutarajia kwamba user anajua nini cha kufanya ili kuitunza rahisi. Na sasa mimi nina kwenda kuwa kwa kitanzi. Na ndani ya yangu kwa kitanzi mimi nina kwenda na int i anapata sifuri. Na i ni, tena, tu mkataba huo, index variable kwa kuhesabu, lakini mimi naweza wito huu chochote mimi nataka. Mimi nina kwenda kufanya i ni chini than-- vizuri Jina Zamyla ni barua sita kwa muda mrefu. Hivyo nina kwenda kwa bidii kificho kwamba kuna kwa sasa. Na kisha i ++. Na sasa ndani ya hizi curly braces mimi nina kwenda kufanya printf, na nataka magazeti moja tabia ya wakati huo. Hivyo nina kwenda kutumia% c kwa labda mara ya kwanza. Na kisha nataka magazeti kila tabia ya juu ya line yake mwenyewe. Hivyo nina kwenda kuweka backslash kidogo n huko. Close quote. Na sasa mimi wanataka kufanya kitu hapa. Nataka magazeti nje barua maalum katika kamba, s, kama mimi nina iterating kutoka sifuri juu ya hadi sita. Kwa maneno mengine, nataka magazeti tabia ya i'th ya s. Sasa jinsi gani naweza kufanya hili? Naam kiasi kama masanduku katika uwakilishi hii hapa, aina ya, conjure up wazo la ndondi barua katika, unaweza vile vile kufanya hivyo syntactically katika C kwa kifupi kubainisha, Nataka magazeti nje s ya i'th tabia. Kutumia mabano mraba juu ya keyboard ya kompyuta yako kwamba juu ya Marekani keyboard ni kwa ujumla juu ya kurudi muhimu yako. Hivyo hii ni si haki kabisa hata hivyo, kama unaweza kuwa niliona. Lakini mimi nina kwenda aina ya upofu kusonga mbele hapa. Na mimi nina kwenda kufanya kufanya string 0. Lakini kabla ya kufanya hivyo, hebu angalia kama sisi hawezi wanatarajia baadhi ya makosa ya kawaida. Je, hii ni kwenda kukusanya? Hapana, mimi kukosa rundo zima la mambo. Maktaba nikasikia. Hivyo ambayo header files wanaweza Nataka kuongeza hapa? Yeah. Watazamaji: Unahitaji standard I / O [inaudible] DAVID J. Malan: Excellent. Kwa hiyo mimi haja standard I / O. Kwa nini kusudi kufanya mimi nataka standard I / O? Kwa printf. Hivyo ni pamoja na stdio.h. Na wewe pia kupendekeza kwamba mimi ni pamoja na Maktaba kwa sababu gani CS50? Kuwa na masharti. Hivyo tutaweza kuona nini Maktaba CS50 ni kufanya kujenga wazo hili la kamba. Lakini kwa sasa, unaweza kufikiria tu yake kama halisi ya aina data. Hivyo kwamba inaonekana kuwa kidogo kusafishwa up. Na sasa mimi nina kwenda mbele na kwa kweli kufanya kufanya string 0. Imekusanywa. Hivyo hiyo ni nzuri. Hivyo basi mimi ./string0 zoom katika ili tuweze kuona kwa karibu zaidi nini kinatokea. Kuingia. Z-A-M-Y-L-A kuingia. Na tumekuwa kuchapishwa kufanyika kwa jina Zamyla ya. Hivyo hiyo ni nzuri sana. Hivyo sasa hebu kwenda mbele na kuendesha programu hii tena, na aina nje jina Daven ya full. Surprise, mshangao. Kuingia. Hmm. Sisi si kuchapishwa Daven ya jina kamili kwanza kwa usahihi. Sasa hii inapaswa kuwa wazi katika retrospect kwa sababu ya nini, aina ya, kijinga uamuzi wa kubuni? Yeah, mimi ngumu coded sita ndani ya yangu kwa kitanzi. Sasa mimi kwamba tu kwa sababu Nilijua jina Zamyla ya alikuwa anaenda kuwa barua sita. Lakini bila ya shaka hii ni si ufumbuzi kwa ujumla. Hivyo ni zamu nje tunaweza dynamically kufikiri urefu wa kamba kwa kupiga kazi kuitwa strlen. Tena, kwa makusudi ufupi aitwaye tu kufanya ni rahisi zaidi kwa aina. Lakini hiyo ni sawa na kupata urefu wa kamba. Mimi nina kwenda nyuma katika terminal yangu dirisha na re-kukimbia compiler. Lakini ni yelling saa yangu. Inamuunga kutangaza kazi maktaba strlen kwa ajili ya aina unsigned int const-- Mimi nina waliopotea. Kabisa. Hivyo, hasa kama yako macho kuanza glaze juu na ujumbe wa makosa kama hii, lengo uaminifu juu ya maneno machache ya kwanza. Tunajua tatizo ni katika mstari wa 8, kama unahitajika hapa. Na ni katika string-0.c. Inamuunga kutangaza kazi maktaba strlen. Hivyo kwamba kwa ujumla kwenda kuwa mfano wa ujumbe wa makosa. Inamuunga kutangaza kitu. Hivyo katika muda mfupi, nini na mimi walionekana wamefanya kwa heshima na line ya 8, hapa. Nini kinaweza kuwa suluhisho kuwa hata kama wewe sijawahi kutumika strlen mwenyewe? Watazamaji: Sehemu ya maktaba tofauti? DAVID J. Malan: Sehemu ya maktaba tofauti. Hivyo ni alitangaza, hivyo kusema. Imetajwa katika baadhi ya faili nyingine zaidi ya stdio.h na CS50.h. Sasa ambapo ni ni defined? Kwa kuwa waaminifu, wewe ama kuwa na tu kujua hii mbali juu ya kichwa yako, au wewe Google huu na kupata nje. Au unajua hii, nilipofungua up katika CS50 appliance terminal mpango, ambayo ni tu kubwa, screen toleo kamili ya nini katika chini ya dirisha gedit ya. Na zinageuka kwamba kuna vile vile succinct amri, iitwayo mtu kwa ajili ya mwongozo, ambapo kama wewe aina katika jina ya kazi na hit Enter, utasikia kupata nyuma haki arcane nyaraka. Ni Nakala tu ni kwamba kwa ujumla inaonekana kitu kidogo kama hii. Ni kidogo mno katika mtazamo wa kwanza. Lakini kusema ukweli mimi nina kwenda achilia macho yangu glaze juu na tu kuelekeza nguvu katika sehemu Mimi huduma ya juu kwa sasa. Ambayo ni hii. Ambayo inaonekana kimuundo kama kitu mimi nina familiar with. Hakika ukurasa mwanamume, vivyo hivyo kusema, atakuambia katika kile header faili kazi kama strlen inaelezwa. Hivyo mimi nina kwenda nyuma sasa kwa gedit. Na mimi nina kwenda mbele na kuongeza katika hapa #include na kuokoa faili. Mimi nina kwenda wazi screen na Kudhibiti L Kama tumekuwa wanashangaa. Na mimi nina kwenda re-kukimbia kufanya string.0, inaandaa wakati huu. ./string.0 Zamyla. Hiyo walionekana kazi Hebu kwenda mbele na rerun ni pamoja na Davenport. Kuingia. Na kwamba, pia, walionekana kazi. Hivyo tunaweza kufanya kidogo bora kuliko hayo, Hata hivyo, tunaweza kuanza kwa mambo tidy up kidogo tu. Na mimi nina kwenda kwa kweli kuanzisha jambo moja nyingine sasa. Mimi nina kwenda mbele na kuokoa hii katika faili tofauti. Na mimi nina kwenda kuwaita hii string1.c faili tu kuwa thabiti na code wewe utakuwa na uwezo wa kupata online. Na hebu kuzingatia katika juu ya hasa code huo. Ni zinageuka kuwa nimekuwa wamekuwa aina ya kuchukua kwa nafasi ukweli kwamba mbali yangu, na kwa upande wake, CS50 appliance ina mengi ya kumbukumbu, mengi ya RAM, mengi ya ka wa nafasi katika ambayo naweza kuhifadhi masharti. Lakini ukweli kama mimi typed kwa muda mrefu kutosha, na kutosha keystrokes, Mimi nilikuwa katika nadharia ya aina katika wahusika zaidi kuliko kompyuta yangu kimwili ana kumbukumbu kwa. Na hili ni tatizo. Mengi kama int unaweza tu kuhesabu juu, katika nadharia, unaweza tu cram wahusika wengi ndani ya RAM ya kompyuta yako au Random Access Memory. Kwa hiyo mimi alikuwa bora wanatarajia tatizo hili, hata ingawa inaweza kuwa adimu kona kesi, hivyo kusema. Haina kutokea kwamba mara nyingi, inaweza kutokea. Na kama ni hutokea na mimi si wanatarajia na mpango kwa ajili yake, mpango wangu naweza kufanya ambaye anajua nini. Freeze, hutegemea, reboot, chochote. Kitu kutarajia inaweza kutokea. Basi nini mimi nina kwenda kufanya sasa, tangu sasa kweli, ni kabla ya mimi milele upofu kutumia variable kama s kwamba imekuwa assigned ya thamani ya kurudi kwa baadhi ya kazi nyingine kama GetString, Mimi nina kwenda kuhakikisha kwamba thamani yake ni halali. Hivyo najua tu kutoka baada ya kusoma CS50 ya nyaraka kwa ajili ya GetString, ambayo hatimaye tutaweza kumweka wewe katika, kwamba GetString anarudi ishara maalum kuitwa NULL, N-U-L-L katika kila kofia, kama kitu fulani kitaenda vibaya. Hivyo kwa kawaida, ni anarudi kamba. Lakini vinginevyo kama kuirudisha N-U-L-L-- tutaweza hatimaye kuona nini kwamba kweli means-- kwamba tu njia kitu mbaya kilichotokea. Sasa hii inamaanisha, kiasi kama katika Scratch, Siwezi kuangalia hali hapa katika C, kama s haina NULL sawa. Hivyo kama wewe wameweza si hii kuona mbele, hii ina maana tu haina sawa. Hivyo ni kinyume cha sawa sawa, ambayo, kukumbuka, ni tofauti na single sawa, ambayo ni kazi. Hivyo kama s haina sawa NULL, basi tu kufanya Nataka nitafanya mistari haya ya code. Hivyo kwa maneno mengine, kabla ya mimi kupiga mbizi katika upofu na kuanza iterating juu ya s, na kutibu ni kana kwamba ni mlolongo wa wahusika, mimi nina kwenda kuangalia kwanza, kusubiri dakika, ni s dhahiri si sawa na thamani hii maalum, NULL? Kwa sababu kama ni, mambo mabaya yanaweza kutokea. Na kwa sasa, kudhani mambo kuwa mbaya kinachotokea maana shambulio mpango wako, na unaweza si lazima kupona. Hivyo kusema ukweli, inaonekana uglier. ni aina ya utata sasa kwa mtazamo saa. Lakini hii itakuwa zaidi familiar kabla ya muda mrefu. Lakini mimi nina kwenda kupendekeza sasa wengine kuboresha moja. Hiyo ni kuboresha na usahihi. Mpango wangu ni sasa sahihi zaidi, kwa sababu katika kesi nadra kuwa kumbukumbu haitoshi lipo, mimi kushughulikia hilo, na mimi itabidi kufanya chochote. Mimi angalau si ajali. Lakini hebu kufanya toleo la mwisho hapa. Na faili inayoitwa string2.c. Mimi nina kwenda kuweka kwamba huo code kwa muda tu, na mimi nina kwenda kwa kuonyesha hii line, 11, hapa, kwa muda tu. Sasa ukweli ni kwamba compilers smart kama Clang inaweza kurekebisha hili kwa ajili yetu nyuma ya pazia bila wetu milele kujua. Lakini hebu fikiria kuhusu hili kimsingi kama kubuni tatizo. Mstari wa kanuni ni, bila shaka, akisema, initialize variable i baadhi kwa 0. Hiyo ni pretty moja kwa moja. Na nini tena ni hii kauli, hapa, i ++, kufanya? Tumeona hivyo kabla, lakini sisi hawakuwa kweli kuzungumza juu yake. Watazamaji: incrementing i. DAVID J. Malan: incrementing i. Kadhalika kila iteration kupitia kitanzi hii, kila mzunguko, wewe ni incrementing i kwa moja. Hivyo anapata kubwa zaidi, na kubwa zaidi, na kubwa mpaka kitanzi vipoe. Jinsi gani kusitisha? Naam kuna katikati huu hali ambayo tumekuwa kutumika kabla. Ve kuonekana na katika walkthroughs katika P kuweka. Lakini ni nini maneno yako? Kufanya kitanzi yafuatayo ili muda mrefu kama i ni chini ya nini? Watazamaji: urefu wa kamba. DAVID J. Malan: urefu wa kamba. Hivyo ni tafsiri pretty cleanly kwa Kiingereza katika maana hiyo. Sasa tatizo ni kwamba kila wakati mimi iterate kwa njia ya kitanzi hii katika nadharia, Mimi nina kuuliza swali hili. Ni i chini ya urefu wa kamba s? Ni i chini ya urefu wa kamba s? Sasa i kubadilisha juu ya kila iteration? Ni. Kwa sababu ya ++. Hivyo kila iteration i ni kupata kubwa. Lakini ni s kupata kubwa, au ndogo, au kubadilisha wakati wote? Hapana Hivyo katika suala la kubuni, moja ya shoka pamoja ambayo sisi kujaribu kutathmini code darasani, hii anahisi aina ya kijinga. Kama wewe ni literally, juu ya kila iteration ya kitanzi hii kuuliza huo damn swali tena, na tena, na tena, na literally ni kamwe kwenda na mabadiliko. Angalau kama mimi si kugusa s na kujaribu kubadilisha yaliyomo ya s. Hivyo siwezi kufanya kidogo bora zaidi kuliko haya. Na kile Mimi naenda kufanya ni si kutangaza moja tu variable i, lakini variable pili mimi itabidi kiholela, lakini conventionally, simu yake n. Mpe n sawa na kamba urefu wa s. Na kisha zaidi ya hapa, mimi nina kwenda kufanya wajanja optimization kidogo, hivyo kusema, kwamba mwishoni mwa siku hakuna zaidi sahihi au si chini sahihi kuliko kabla. Lakini ni kubuni bora. Katika ukweli kwamba mimi nina kutumia muda kidogo, mzunguko wachache CPU, hivyo kusema, kujibu huo swali, lakini mara moja tu. Maswali yoyote juu ya kwamba kwa ujumla kanuni ya kuboresha, kusema, ufanisi wa programu hiyo? Yeah? Watazamaji: Kwa nini kutumia [inaudible]? DAVID J. Malan: Swali Good. Hivyo kwa nini sisi kuweka ++ tarehe ya mwisho ya i badala ya mwanzo wa i? Katika kesi hiyo, ina hakuna madhara kazi. Na kwa ujumla, mimi huwa na kutumia postfix operator ili ni wazi kidogo zaidi kama kwa wakati operesheni kinachotokea. Kwa wale usio wa kawaida, kuna mwingine kauli ambapo unaweza kufanya ++ i. Hizi ni functionally sawa katika kesi hii kwa sababu kuna kitu kingine kuzunguka kwamba incrementation. Lakini unaweza kuja na kesi na mstari wa kanuni katika ambayo kwamba inafanya tofauti. Hivyo kwa ujumla, hatufanyi hata kuzungumza kuhusu suala hili moja. Kwa sababu kusema ukweli, inafanya yako code sexier, na aina ya slicker, na wachache wahusika. Lakini ukweli ni vigumu sana, Nadhani, hata kwa ajili yangu na wrap akili yangu kuzunguka wakati mwingine, utaratibu wa shughuli. Hivyo kama kando, kama wewe kweli si kama hii, ingawa hii ni aina ya sexy kuangalia, unaweza pia kufanya i + = 1, ambayo ni toleo uglier ya wazo moja kwa postfix incrementation. Nasema hili na wewe lazima kufanya furaha yake, lakini wewe kuja kuona kanuni kama kitu kizuri kabla ya muda mrefu. [Kicheko] DAVID J. Malan: Haki? Yeah. Swali katikati. Watazamaji: Je, unahitaji kusema int n? DAVID J. Malan: Je, si haja ya kusema int n. Hivyo kwa sababu sisi tayari alisema int, huna haja ya kusema hivyo tena. catch ni kwamba n ina kuwa data aina moja kama i. Hivyo hiyo ni urahisi hapa. Yeah. Watazamaji: Je, unaweza kwenda juu ya magazeti tabia ya s bracket i tena? DAVID J. Malan: Ndiyo. Hivyo% c, kukumbuka kutoka mwisho wakati, ni tu placeholder. Ina maana kuweka char hapa. backslash n, bila shaka, tu njia kuweka line kuvunja hapa. Hivyo kwamba tu majani, sasa, kipande cha syntax mpya. Na hii ni literally kusema, kunyakua string kuitwa s na kwenda kupata wake i'th tabia, hivyo kusema. Na mimi kuendelea kusema i'th tabia ya kwa sababu juu ya kila iteration ya kitanzi hii ni kana kwamba sisi ni kuchapisha nje, kwanza s bracket 0, kama programu anaweza kusema. Kisha s bracket 1, kisha s bracket 2, kisha 3, kisha 4. Lakini bila shaka ni variable, hivyo mimi tu kueleza ni pamoja na i. Muhimu, ingawa, ni kutambua, hasa kama wameweza si wamekuwa acclimating ya dunia hii ya programu, ambapo sisi wote wanaonekana kuhesabu kutoka sifuri, gotta kuanza kuhesabu kutoka sifuri sasa. Kwa sababu masharti, tabia ya kwanza, z katika Zamyla ni kwa bora au mbaya kwenda kuishi katika eneo ya simu sifuri. Haki zote, hivyo basi mimi kuleta sisi nyuma hapa kwa Zamyla na kuona nini kweli kwenda juu ya chini ya Hood. Hivyo kuna wazo hili la aina akitoa. Unaweza kuwa na kweli alicheza na hii tayari, labda kwa hacker toleo la P kuweka moja. Lakini aina akitoa tu inahusu uwezo katika C na baadhi ya lugha nyingine kubadili data ya aina moja hadi nyingine. Sasa jinsi gani sisi kuona hii pretty straightforwardly? Hivyo hii, kukumbuka, ni mwanzo alfabeti ya Kiingereza. Na mazingira, kukumbuka, kutoka kama wiki iliyopita ni ASCII. American Standard Code Habari Interchange. Ambayo ni njia tu kweli kwa muda mrefu ramani ya kusema kutoka barua kwa idadi, na kutoka idadi ya barua. Hivyo kwa njia ya M hapa, dot dot dot, yanaendana na, kukumbuka, simu decimal 65 juu ya up. Na sisi hakuwa na majadiliano kuhusu hili kwa uwazi, lakini kwa hakika kuna sawa namba kwa barua lowercase. Na hakika, kuna. dunia aliamua baadhi ya miaka iliyopita kuwa kidogo, Herufi za chini, ni kwenda kuwa 97. Na kidogo b ni kwenda kuwa 98, na kadhalika. Na kwa wengine muhimu yoyote juu ya keyboard yako, kuna kwenda kuwa mfano unaofanana na wa bits. Au equivalently, idadi decimal. Hivyo swali katika mkono, basi, ni jinsi gani tunaweza kweli kuona hii chini ya Hood? Hivyo mimi nina kwenda juu ya gedit tena. Na badala ya aina hii moja kutoka mwanzo, Mimi nina kwenda mbele na tu kufungua kitu kutoka code leo kuitwa ASCII sifuri. Na ASCII zero inaonekana kama hii. Basi hebu wrap akili zetu kuzunguka hili. Hivyo kwanza, nimekuwa maoni code, ambayo ni nzuri. Kwa sababu ni literally kuniambia nini cha kutarajia, kuonyesha ramani kwa herufi kubwa. Sasa mimi si kabisa kujua nini mimi maana na kwamba, hivyo hebu infer. Katika lugha ya Kiingereza, labda kiasi fulani techie Kiingereza, nini line 18 itaonekana kuwa kufanya kwa ajili yetu? Tu line 18. Nini ni inducing? Nini ni kwenda kick off hapa? Watazamaji: kitanzi. DAVID J. Malan: kitanzi. Na jinsi mara nyingi ni kwamba kwenda iterate? Watazamaji: [INTERPOSING VOICES] mara sita. DAVID J. Malan: Si mara sita. Watazamaji: Mara 26. DAVID J. Malan: Mara 26. Yeah, sorry. 26 mara kwa mara. Kwa nini? Naam, ni kidogo weird, lakini Nimeanza kuhesabu kutoka 65. Ambayo ni weird, lakini si vibaya. Ni si mbaya kwa kusema. Na mimi nina kufanya hivyo tu kwa sababu, kwa mfano huu, Mimi nina aina ya unatarajia kuwa mji mkuu wa A mara 65. Sasa hii si kifahari zaidi njia ya kufanya hili, kwa aina ya maadili ya ngumu maadili esoteric kwamba hakuna mtu ni milele inatarajiwa kukumbuka. Lakini kwa sasa, taarifa kwamba mimi nina kufanya hivyo juu kupitia 65 plus 26. Kwa sababu inaonekana mimi hawana hata wanataka kufanya hesabu katika kichwa changu. Hivyo mimi itabidi basi compiler kufanya hivyo. Lakini basi juu ya kila kitanzi, kila iteration ya kitanzi, mimi nina incrementing i. Hivyo sasa hii inaonekana kidogo cryptic. Lakini tunapaswa kuwa na jengo msingi vitalu na ambayo kwa kuelewa hili. % C ni tu placeholder kwa char. % I ni placeholder kwa int. Na zinageuka kwamba kwa kutumia hii syntax mpya, mabano huu, hivyo kusema, hivyo aina data ndani ya mabano, Siwezi nguvu compiler kutibu i si ni integer, lakini kama char. Hivyo kuonyesha mimi tabia ya sawa ya idadi hiyo. Sasa hapa chini, kanuni hii ni pretty much kufanana. Mimi nilitaka kufanya super wazi ukweli kwamba mimi nina kuanzia saa 97, ambayo ni Herufi za chini. On up kupitia barua 26 zaidi. Na mimi nina doing-- tena, akitoa i, hivyo kusema. Au aina akitoa i, hivyo kusema. Kutoka int kwa Char. Hivyo matokeo ya mwisho ni kwenda kuwa, kusema ukweli, habari sisi tayari kujua. Mimi nina kwenda kufanya ascii-0 dot-- si dot c. Ilani, pengine alifanya kwamba kosa kama mimi tu alifanya ajali. Kufanya ascii-0. Sasa mimi nina kwenda kufanya ./ascii-0. Mimi itabidi zoom katika, na kwa bahati mbaya ni kwenda na kitabu mbali screen. Lakini sisi tazama chati nzima ambapo ramani ya 97, ramani b 98, na kama sisi kitabu juu zaidi , Bila shaka, ramani ya 65. Hivyo hii ni tu kusema kwamba nini tumekuwa kuhubiri, kuna yanayolinagana hii, ni kwa kweli kesi katika hali halisi. Hivyo muundo wa haraka wa hii. Hebu kufungua ascii-1.c. Na taarifa hii wajanja, aina wa, ufafanuzi wa hii. Hii ni ascii-1.c, na taarifa jambo hili mambo. Na hii kweli anapata kwa moyo ya nini kompyuta ni kufanya. Hata ingawa sisi binadamu ingekuwa si kuhesabu katika suala la letters-- Mimi si kuanza kufikiri, haki zote kisha b, na kutumia hayo kwa kuhesabu vitu kimwili. Unaweza shaka kusema kwamba mimi nataka initialize variable kuitwa baadhi c-- lakini mimi naweza kuwa na kuitwa anything-- hii hivyo c ni initialized katika mji mkuu wa A. Kwa sababu mwisho wa siku, kompyuta haina huduma nini wewe kuhifadhi, ni anayejali tu jinsi gani unataka kuwasilisha taarifa hiyo. Je, unataka kompyuta kwa kutafsiri kwamba mfano wa bits? Hivyo hii si kitu mimi ingekuwa ujumla kupendekeza kufanya. Ni kweli tu mfano kwa kufikisha kwamba unaweza kabisa initialize integer kwa char. Kwa sababu chini ya kofia ya char, bila shaka, ni tu idadi 0-255. Hivyo unaweza hakika kuweka ndani ya int. Na nini hii pia inaonyesha ni kwamba sisi unaweza kubadilisha kutoka moja aina ya mwingine, hapa, hatimaye uchapishaji kitu kimoja. Na kwa kweli, hii nami kurekebisha online-- alikuwa na maana ya kusema hayo, tena, hapa. Hebu safi hii up online, na tutaweza kuona katika walkthrough online kama inahitajika, kile kilichokusudiwa huko. OK. Mfano ili mwisho sasa kuwashirikisha a na b na kisha tutaweza kuchukua mambo up notch. Hivyo, pamoja na na b na c katika mtaji na yanayolinagana yake, hebu kuangalia mfano huu, hapa. Mwingine code mfano. Tutaweza kufungua moja ambayo tayari alifanya, hivyo sisi hawana aina yake wote nje kutoka mwanzo. Na taarifa kwa kutarajia sisi ni kutumia header nyingi files, kati ya ambayo ni rafiki yetu mpya, string.h. Sasa hii inaonekana, kwa mara ya kwanza mtazamo, kidogo cryptic. Lakini hebu angalia kama hatuwezi kufikiri njia ya nini kinaendelea hapa. Kwanza mimi kupata kamba kutoka kwa mtumiaji, na mimi kuweka kamba kwamba katika variable kuitwa s. Nakala kuweka kutoka kabla. Katika line 22, mimi nina inaonekana kufanya nini hasa Mimi wakati iliyopita, mimi nina iterating juu ya wahusika katika s. Na mbinu mpya hapa ni kutumia kamba urefu, optimization madogo ya kuhifadhi kamba urefu katika n, badala ya wito strlen tena, na tena, na tena. Na tu kuangalia kwamba i ni chini ya n. Sasa hapa, mambo kupata kidogo ya kuvutia. Lakini ni tu ya maombi mpya wazo hili moja. Nini katika lugha ya Kiingereza gani s bracket i kuwakilisha? Watazamaji: kuhesabu kila tabia ya [inaudible]. DAVID J. Malan: kuhesabu kila tabia. Na hata zaidi kwa ufupi, s bracket i kuwakilisha nini? Je, wewe kusema. Si kuweka wewe juu ya doa hapa. Watazamaji: Well-- DAVID J. Malan: Hivyo kama neno is-- kama kamba ni Zamyla, ambayo starts-- Watazamaji: --you kukabiliana na wahusika separately-- DAVID J. Malan: Good. Hasa. mraba bracket nukuu utapata kupata kila tabia mmoja mmoja, hivyo s bracket 0 ni kwenda kuwa tabia ya kwanza katika kamba. s bracket 1 ni kwenda kuwa pili, na kadhalika. Hivyo swali mimi nina kuuliza, hapa, katika hali hii ni nini? Ni tabia ya i'th ya s zaidi kuliko au sawa na Herufi za chini? Na hii ina maana gani, hapa, na ampersands mara mbili? Watazamaji (PAMOJA): Na. DAVID J. Malan: Na. Ni tu sawa na hii. Na ni si keyword katika C, una matumizi, annoyingly, Ampersand Ampersand. Na hii, kinyume chake, ni kuuliza ni s ya i'th tabia ya chini ya au sawa Herufi za chini kwa z? Na tena, hapa ambapo kuelewa msingi utekelezaji wa kompyuta hufanya akili. Taarifa kwamba, hata mimi na dot dot dot zaidi ya hapo, inaonekana kama njia ya z katika lowercase ni maadili yote contiguous up kutoka 97 juu ya up. Na moja kwa ajili uppercase kuanzia saa 65. Hivyo takeaway, basi, ni kwamba katika Kiingereza, jinsi gani unaweza kuelezea nini line 24 anafanya? Yeah? Watazamaji: Tarehe 24 ni kuangalia kuona kama kila tabia ni ndogo. DAVID J. Malan: Ni kuangalia kama tabia ya kila mmoja ni barua lowercase. Hivyo hata zaidi kwa ufupi, ni i'th tabia ya s lowercase? Hayo ni yote sisi ni akielezea hapa mantiki, kidogo isiyoeleweka kirahisi, lakini hatimaye pretty straightforwardly. Ni s ya i'th tabia ya lowercase? Kama ni hivyo, na hapa ni ambapo mambo kupata mawazo kidogo bending kwa muda tu, kama ni hivyo, kwenda mbele na magazeti nje tabia. Hivyo hii ni tu placeholder, lakini nini tabia? Kwa nini mimi kufanya s bracket i minus msemo huu hapa? Naam taarifa muundo hapa. idadi halisi si jambo sana. Lakini taarifa kwamba 97 ni jinsi mbali mbali kutoka 65? Watazamaji: 32. DAVID J. Malan: 32. Jinsi mbali mbali ni 98 kutoka 66? Watazamaji: 32. DAVID J. Malan: Little c kutoka kubwa C? 32. Hivyo kuna humle 32 kutoka barua moja hadi nyingine. Hivyo kusema ukweli mimi, inaweza kurahisisha hii kwamba. Lakini basi mimi nina aina ya vigumu coding ngazi hii uelewa mdogo kwamba hakuna msomaji ni milele kwenda kuelewa. Hivyo nina kwenda kujumlisha ni kama, mimi kujua barua lowercase ni kubwa. Mimi najua mji mkuu wa barua ni maadili ndogo, hazijaingizwa. Lakini hii ni sawa na ufanisi akisema Ondoa 32 kutoka s bracket i. Hivyo katika mazingira ya haya barua, kama barua hutokea kwa kuwa, lowercase a, na mimi Ondoa 32, nini athari gani kwamba kuwa, mathematically, juu ya Herufi za chini? Watazamaji: Capitalizes-- DAVID J. Malan: herufi yake. Na hakika, hii ni kwa nini wetu mpango inaitwa capitalize sifuri. Mpango huu ama herufi kubwa katika herufi, baada ya kuangalia kama ni kweli ya mbili lowercase. Vinginevyo, katika line 30, je, mimi kufanya kama si ya mbili lowercase kwamba mimi nina kuangalia saa fulani iteration katika kitanzi. Tu magazeti nje. Hivyo si mabadiliko ya mambo si kwamba hata lowercase. Kuzuia mwenyewe a kidogo kupitia z kidogo. Sasa hii ni haki arcane. Lakini mwisho wa siku, hii ni jinsi sisi, mara moja juu ya muda, alikuwa na kutekeleza mambo. Kama mimi badala wazi capitalize moja, oh kumshukuru mungu. Kuna kazi kuitwa juu kwamba unaweza kufanya kila kitu sisi tu alifanya katika ngazi ya haki ya chini. Sasa kwa juu ni ya kuvutia kwa sababu ni alitangaza katika faili, na ungependa kujua tu hii kwa kuangalia nyaraka, au kuambiwa, kusema, katika darasa, ambapo ipo, katika faili inayoitwa ctype.h. Hivyo hii ni rafiki mwingine mpya yetu. Na kwa juu gani hasa nini jina lake anapendekeza. Unaweza kupita katika, kama hoja, kati ya mabano haya, baadhi tabia. Mimi nina kwenda kupita katika tabia ya i'th ya s kutumia dhana mpya nukuu yetu kuwashirikisha mabano mraba. Na kuchukua nadhani, ni nini kurudi thamani ya juu kwa inaonekana kwenda kuwa? barua mji mkuu. barua mji mkuu. Hivyo kama mimi kupita katika lowercase a, hopefully, kwa ufafanuzi wa kwa juu, ni kwenda na kurudi uppercase A. Vinginevyo, kama si ya mbili lowercase katika nafasi ya kwanza, mimi tu magazeti nje. Na hakika, taarifa rafiki ya pili hapa. Si tu kwa juu lipo, lakini ni ya chini, ambayo kweli majibu kwamba swali kwa ajili yangu. Sasa mtu aliandika mambo haya, 10s ya miaka iliyopita, unajua nini? Kutekelezwa kwa juu na ni kupunguza kwa kutumia kanuni kama hii. Lakini tena, sambamba na wazo hili la abstracting mbali, aina ya, ngazi ya chini utekelezaji maelezo. Na kusimama juu ya mabega ya watu ambaye alikuja mbele yetu, kwa kutumia kazi kama kwa juu na ni ya chini, ambayo ajabu ya kutosha ni nicely jina lake kwa kusema nini wao kufanya, ni dhana ya ajabu kupitisha. Sasa, ni zinageuka kuwa kama mimi kusoma mtu kwa ukurasa, kusema, kwa juu, Mimi kujifunza kitu kingine. Hivyo mtu toupper. Ni kidogo mno. Lakini sikia, hapa ni kwamba kutaja ya header faili kwamba mimi wanapaswa kutumia. Kama kando, kwa sababu hii ni kupotosha, kazi anatumia ints badala ya chars kwa sababu ya kuangalia makosa. Lakini tutaweza labda kuja nyuma na kwamba katika siku zijazo. Lakini taarifa, hapa, kwa waumini juu barua c kwa uppercase kama inawezekana. Hivyo hiyo ni pretty moja kwa moja. Na sasa hebu kuwa maalum kidogo zaidi. Hebu tuangalie sehemu ya mtu chini ya ukurasa thamani kurudi. thamani akarudi ni kwamba wa barua waongofu. Au c, kama kubadilika haikuwezekana, ambapo c ni ya awali ya pembejeo. Ambayo najua kutoka hapa, kutoka hoja ya kwa juu. Hivyo ni takeaway ya hii nini? thamani akarudi ni kwamba wa barua waongofu, au c, barua ya awali, kama uongofu hakuwa iwezekanavyo. Nini kuboresha naweza hiyo kufanya kwa kubuni kanuni wangu? Yeah? Watazamaji: Unaweza kuondoa mwingine. DAVID J. Malan: Mimi unaweza kuondoa kingine kauli, na si tu mwingine taarifa. Watazamaji: Unaweza kuondoa [inaudible]. DAVID J. Malan: Mimi unaweza kuondoa uma nzima katika barabara, akaonekana na kama mwingine kabisa. Hivyo kweli, basi mimi kufungua toleo la mwisho la hii, capitalize-2 na taarifa tu jinsi gani, kama wewe, sexy, kanuni na sasa ni kupata, katika kwamba nimepata kupunguzwa kutoka kwa baadhi ya saba au hivyo mistari ya nne tu, utendaji kwamba mimi nia kwa kifupi wito kwa juu, kupita katika s bracket i, na uchapishaji nje, na placeholder% c, kwamba tabia fulani. Sasa arguably, kuna mdudu, au angalau hatari ya mdudu, katika mpango huu. Hivyo tu kurudi kwa takeaway awali, kile lazima mimi pengine pia kufanya katika mpango huu kwa kufanya hivyo imara zaidi, hivyo kwamba hakuna njia hiyo unaweza ajali, hata katika kesi nadra? Watazamaji: Hakikisha siyo null. DAVID J. Malan: Hakikisha siyo null. Hivyo kweli, kufanya hii super sahihi, mimi lazima kufanya kitu kama, kama s ni si null, basi kwenda mbele na kutekeleza mistari haya ya kanuni, ambayo Naweza kisha Indent kama kwamba, na kisha kuweka katika brace yangu wa karibu. Hivyo nzuri tying pamoja wa mawazo mawili. Yeah? Watazamaji: Je, unaweza kutumia a kufanya wakati kitanzi, badala yake? DAVID J. Malan: Inawezekana Mimi kufanya wakati kitanzi do? Watazamaji: --you unataka kuhakikisha kwamba wewe kweli [inaudible]. DAVID J. Malan: Inawezekana matumizi do wakati? Short jibu, hakuna. Kwa sababu wewe ni kuhusu kuanzisha kesi nyingine kona. Kama string ni ya sifuri urefu. Kama kwa mfano, mimi tu hit Kuingia, bila hata kuandika Zamyla. Mimi nina kwenda mkono wewe nyuma halisi kamba, kama tutaweza hatimaye kuona, ambayo ina wahusika sifuri. Bado kamba, ni tu super short. Lakini kama wewe kutumia do wakati, wewe ni kwenda upofu kujaribu kufanya kitu kwa heshima kwa kamba kwamba, na hakuna kitu kinaendelea kuwa huko. Watazamaji: Naam, kama alivyofanya kufanya [inaudible] wakati s-- DAVID J. Malan: Oh mimi kuona, kuweka kupata kamba kutoka kwa mtumiaji. Jibu Hivyo short, wewe inaweza, na kushika kuwalazimisha yao kukupa kamba hiyo ni short kutosha walionao katika kumbukumbu. Kabisa. Mimi tu alichagua si kwa. Kama hawana nipe kamba mimi wanataka, mimi nina kuacha, mimi nina kutoa up. Lakini kabisa, kwa ajili hiyo, unaweza kabisa kufanya hivyo. Hivyo header files maktaba kwamba sisi ni sasa ukoo na ni hizi, hapa. Standard I / O, CS50.h, string.h, ctype.h, na kuna ni kweli, wengine. Baadhi ya umegundua maktaba math katika math.h. Lakini ngoja kuanzisha wewe, sasa, kwa rasilimali hii kwamba CS50 wafanyakazi, Davin, na Rob, na Gabe hasa kuweka pamoja. Kwamba hivi karibuni kiungo juu ya tovuti shaka ya. Ni wito CS50 kumbukumbu. Ambayo tu kukupa haraka ladha yake, kazi kama ifuatavyo. Hebu kwenda reference.cs50.net. Utaona upande wa kushoto upande orodha balaa ya kazi ya kwamba kuja na c. Lakini kama mimi huduma, kwa sasa, juu ya kitu kama strlen, Siwezi aina yake huko. Ni filters chini orodha kwa kile tu huduma ya juu. Mimi nina kwenda bonyeza yake. Na sasa juu ya kushoto, utaona nini sisi matumaini ni zaidi moja kwa moja, binadamu kirafiki maelezo ya jinsi ya kazi hii matendo. Anarudi urefu wa kamba. Hapa ni synopsis, hapa ni jinsi gani matumizi yake katika suala la header ya faili, na katika suala la nini kazi inaonekana kama katika suala la hoja yake. Na kisha hapa, anarudi urefu wa kamba. Lakini kwa wale wa wewe vizuri zaidi, unaweza kweli click zaidi comfy, na yaliyomo ya hii ukurasa, sasa, kutakuwa na mabadiliko kuwa na maadili default ya nini kupata kwa kutumia ukurasa mwanadamu. Kwa maneno mengine, CS50 kumbukumbu ni kurahisisha ya mtu kurasa na wafanyakazi, kwa ajili ya wanafunzi. Hasa, wale chini ya starehe na katika kati ya, ili hawana kujaribu wrap akili yako karibu, kusema ukweli, baadhi syntax haki cryptic na nyaraka wakati mwingine. Hivyo kuendelea kuwa katika akili katika siku zijazo. Hivyo hapa, tena, ni Zamyla. Hebu sasa kuuliza swali kwamba binadamu kidogo zaidi kupatikana. Shukrani kwa Chang, ambaye imekuwa uchapishaji tembo zaidi nonstop kwa siku chache zilizopita. Tuna nafasi ya kutoa angalau mmoja wao mbali. Kama tunaweza kupata kujitolea moja tu kuja juu hadi kuteka juu ya screen. Vipi kuhusu hapa? Kuja juu juu. Jina lako ni nani? ALEX: Alex. DAVID J. Malan: Alex. Wote haki. Alex, kuja juu up. Sisi ni juu ya kuona yako mwandiko juu ya screen hapa. Haki zote, nzuri ya kukutana na wewe. ALEX: Nice wewe kukutana na wewe. DAVID J. Malan: All wa kulia. Hivyo, zoezi super rahisi. Bar ni si juu kwa kupata tembo leo. Wewe ni kucheza nafasi ya GetString. Na mimi nina kwenda tu kukuambia kamba kwamba wewe wameweza kujipatia. Na kudhani kwamba, GetString, wamekuwa kuitwa. Na binadamu, kama mimi, ina typed katika Zamyla, Z-A-M-Y-L-A. Tu kwenda mbele na kuandika Zamyla juu ya screen kama wewe ingawa waliopata ni na kuhifadhiwa mahali fulani katika kumbukumbu. Kuondoka chumba kwa nini itakuwa kadhaa words-- mengine ambayo sawa, kuendelea. [Kicheko] Hivyo Zamyla, Excellent. Hivyo sasa tuseme kwamba wewe, GetString, wameitwa tena. Na kwa sababu hiyo, mimi kutoa, katika keyboard, na jina la mtu mwingine, Belinda. Wote haki. Na sasa wakati mwingine GetString ni kuitwa, mimi aina katika kitu kama Gabe, G-A-B-E. Wewe ni kweli kuchukua kwa moyo random kupata kumbukumbu. Ambayo ni kuchora kila kitu kabisa nasibu. OK. [Kicheko] ALEX: Sorry handwriting yangu ni mbaya. DAVID J. Malan: Hapana, hiyo ni sawa. Na vipi kuhusu Rob, R-O-B. OK. Good. Hivyo sikuwa wanatarajia ungependa aina ya kuweka mambo ya nje kwa njia hii. Lakini tunaweza kufanya kazi hii. Hivyo ni jinsi gani wewe kwenda juu ya kuwekewa nje chars hizi katika kumbukumbu? Kwa maneno mengine, kama sisi kufikiri ya hii screen rectangular nyeusi kama anayewakilisha kompyuta ya RAM, au kumbukumbu. Na kukumbuka kwamba RAM ni tu rundo zima la ka, na ka ni rundo zima la bits. Na bits ni kwa namna fulani kutekelezwa, kwa ujumla na baadhi ya fomu ya umeme katika vifaa. Hivyo hiyo ni aina ya layering tumekuwa aliyesema kuhusu na sasa wanaweza kuchukua kwa nafasi. Jinsi gani wewe kwenda juu ya kuamua wapi kuandika Rob dhidi ya Gabe dhidi ya Belinda dhidi ya Zamyla? ALEX: mimi tu alifanya hivyo katika kuamuru kwamba wewe aliniambia. DAVID J. Malan: Na kwamba ni kweli. Lakini nini serikali ambapo wewe kuweka Jina Belinda na jina Gabe ya? ALEX: Hakuna? DAVID J. Malan: [anacheka] Hivyo kwamba kazi, hiyo faini. Hivyo kompyuta ni kidogo mzuri zaidi kuliko hiyo. Na hivyo wakati sisi implement-- kukaa huko kwa tu moment-- wakati sisi kweli kutekeleza kitu kama GetString katika kompyuta, Zamyla inaweza kuwa kuweka nje pretty much kama alivyofanya juu ya screen, huko. Na nini ni muhimu kwa taarifa hapa, nini Alex hivyo, ni kuna aina ya utengenezaji kati ya kila moja ya maneno haya, sawa? You hakuwa na kuandika Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- kwa maneno mengine, kuna aina fulani wa utengo ambayo inaonekana kuwa, aina ya, random nafasi kati ya maneno haya mbalimbali. Lakini hiyo ni nzuri, kwa sababu sisi wanadamu sasa wanaweza taswira kwamba haya ni nne masharti tofauti. Siyo mlolongo moja tu ya kura ya wahusika. Hivyo kompyuta, basi, wakati huo huo, inaweza kuchukua string kama Zamyla, kuweka kila ya barua hizo ndani ya byte ya kumbukumbu. Lakini idadi hiyo ni kubwa sana, bila shaka, kuliko wahusika sita. Kuna rundo zima la RAM. Na hivyo tena, hii gridi ya masanduku ni kwenda kuwakilisha nini Alex tu alifanya hapa juu ya screen. Na sasa, Alex, tunaweza kutoa rangi ya bluu au tembo machungwa kutoka Chang. ALEX: Mimi itabidi kuchukua tembo bluu. DAVID J. Malan: tembo bluu. Hivyo duru kubwa ya applause, kama tunaweza, kwa Alex hapa. [Makofi] ALEX: Asante. DAVID J. Malan: Asante. Hivyo takeaway ni kwamba, ingawa muundo aina ya iliyopita baada ya muda, hapa juu ya bodi, kulikuwa na hii utengenezaji wa kati ya masharti mbalimbali kwamba Alex got kwa ajili yetu. Sasa kompyuta, kusema ukweli, inaweza kufanya kitu kimoja. Wangeweza aina ya plop masharti mahali popote katika RAM. Up hapa, zaidi ya hapa, hapa chini, chini hapa. Wangeweza kufanya hasa kwamba. Lakini, bila shaka, hiyo ni pengine si mipango bora. Haki? Kama mimi naendelea kuuliza Alex kwa kupata majina, pengine yeye d kuweka baadhi ya zaidi hapa chini, labda up hapa, zaidi ya hapa, zaidi ya hapa, hatimaye zaidi ya hapa. Lakini pamoja na kidogo zaidi mipango, kwa hakika, tunaweza kuweka mambo ya nje zaidi cleanly. Na hakika, kwamba ni nini kompyuta gani. Lakini catch ni kwamba kama string ijayo mimi kupata baada ya Zamyla ni kitu kama Belinda, kupendekeza ambapo tupate kuandika barua b kwa heshima na gridi ya taifa hili? Wapi ungekwenda? Na haki ya a, chini z, chini a? Gani silika yako ya kwanza kuwa? Watazamaji: Chini ya z. DAVID J. Malan: Hivyo chini z. Na kwamba ni pretty moja kwa moja, haki? Ni aina ya nadhifu, ni nini cha kufanya juu ya keyboard wakati sisi hit Enter, au barua pepe wakati wa kufanya Vitone orodha ya mambo. Lakini ukweli ni kwamba kompyuta kujaribu kuwa na ufanisi zaidi, na Cram hakika kama kiasi data katika RAM kama inawezekana, hivyo kwamba huna kupoteza ka yoyote. Hivyo kwamba huna kupoteza yoyote screen mali isiyohamishika. Na tatizo, ingawa, ni kwamba kama sisi literally kuweka barua b baada ya, jinsi sisi kwenda kujua ambapo jina Zamyla ya mwisho na jina Belinda inaanza? Hivyo binadamu tu mapendekezo, vizuri, hit Enter muhimu, kimsingi. Kuiweka chini chini. Au hata kama Alex hivyo, tu kuanza kuandika jina ya chini mmoja uliopita, na chini kwamba mmoja, na kisha chini ya kwamba moja. Hiyo ni cue Visual. Kompyuta na mwingine cue Visual, lakini ni kidogo zaidi succinct. Ni tabia hii funky. Backslash 0, ambayo ni labda kukumbusha ya backslash n, na kadhalika, sasa. maalum kutoroka Mwandamano. Backslash 0 ni njia ya anayewakilisha nane zero bits katika mfululizo. 0000 0000. njia wewe kueleza kwamba si hit idadi sifuri juu ya keyboard yako, kwa sababu katika ukweli kwamba ni char ASCII. Inaonekana kama idadi, lakini ni kweli idadi decimal kwamba inawakilisha mviringo glyph, typeface mduara. Wakati huo huo, backslash zero maana yake, literally kuweka nane zero ka hapa kwa ajili yangu. Hivyo hii ni kiasi fulani holela. Tunaweza tumekuwa kutumika yoyote mfano ya bits, lakini dunia aliamua baadhi ya miaka iliyopita, kwamba kuwakilisha mwisho wa kamba katika kumbukumbu, tu ya kuweka rundo zima la zeros. Kwa sababu tunaweza kugundua kwamba. Sasa hiyo ina maana kwamba hakuna barua ya alfabeti inaweza kuwakilishwa na zeros. Lakini hiyo ni OK, tumekuwa tayari kuona kwamba sisi ni kutumia 65 juu ya up katika 97 juu ya up. Sisi hakuwa na kupata mahali popote karibu na zeros wote. Hivyo Belinda katika kumbukumbu ya kompyuta ni kweli kwenda kwenda hapa. Nimekuwa inayotolewa katika njano tu kuteka usikivu wetu kwa hilo. Na taarifa, pia, hii ni kabisa holela. Nimekuwa inayotolewa ni kama gridi ya taifa. Kama, RAM ni baadhi tu kitu kimwili. Ni siyo lazima safu na nguzo, per se. Ni tu got rundo zima la bytes kutekelezwa katika vifaa kwa namna fulani. Lakini kama baada ya Belinda mimi typed katika jina Gabe ya, yeye kwenda kuishia hapa katika kumbukumbu, na kama mimi typed katika jina Daven ya, kwa mfano, yeye kwenda kuishia hapa. Na siwezi kuendelea kuandika majina hata zaidi. Kwa bahati mbaya, kama mimi kujaribu kuandika jina super muda mrefu, Mimi ili hatimaye kukimbia nje ya kumbukumbu. Katika kesi ambayo, GetString ni kwenda na kurudi null, kama sisi alisema. Bali nashiriki, angalau katika hili Visual hapa, sisi hakuwa na kupata kabisa kuwa mbali. Sasa nini ni nzuri ni kwamba hii ujumla wazo la kutibu mambo kama kuwa katika masanduku ni mwakilishi wa hulka ya C na mengi ya lugha, inayojulikana kama safu. safu ni aina nyingine ya data. Ni muundo data, kama wewe. Muundo kwa maana ya ni kweli, aina ya, kuangalia kama sanduku, angalau katika macho ya akili yako. safu ni contiguous mlolongo wa aina kufanana data, nyuma kwa nyuma kwa nyuma kwa nyuma. Hivyo kamba, katika nyingine maneno, ni safu ya chars. safu ya wahusika. Lakini zinageuka unaweza kuwa na arrays ya mashada ya mambo. Kwa kweli, tunaweza kuweka hata idadi katika safu. Hivyo namna ambayo sisi ni kwenda kuanza kutangaza data hii muundo unaojulikana kama safu pia ni kwenda kutumia mabano mraba. Lakini haya mabano mraba ni kwenda kuwa na maana tofauti katika muktadha huu. Na hebu angalia ni kama ifuatavyo. Tuseme kwamba mimi kufunguliwa up faili mpya hapa. Na mimi kuokoa hii kama ages.c. Na mimi itabidi kuokoa hii katika folder yangu hapa. Na sasa mimi nina kwenda mbele na kuanza kuandika kitu kama ni pamoja na CS50.h, ni pamoja na stdio.h, int kuu utupu. Na kisha ndani ya hapa, nataka kwa kwanza na int kuitwa umri. Na mimi nina kwenda kutumia kwamba ili kupata int kutoka kwa mtumiaji kwa umri wake. Lakini mpango huu ni maana ya kutumika na watu mbalimbali, kwa mazingira chochote. Mimi nimepata line ya watu. Wote kuwa na aina katika yao umri kwa baadhi labda, mimi sijui, ushindani, au tukio kwamba wameweza aliwasili kwa. Hivyo mtu mwingine, mimi haja mwingine kutofautiana. Kwa sababu kama mimi tu kufanya umri anapata GetInt, hiyo ni kwenda clobber, au overwrite umri wa mtu uliopita. Hivyo kwamba hakuna nzuri. Hivyo silika yangu ya kwanza inaweza kuwa, oh, haki ya wote, kama nataka kupata nyingi ya watu ages-- hebu kuwaita age1 hii, int age2 anapata int, int age3 anapata GetInt. Na sasa mimi nina kwenda kutumia baadhi pseudocode code hapa. Kufanya kitu kwa wale idadi. Sisi itabidi kuondoka kwa siku nyingine nini sisi ni kufanya huko, kwa sababu sisi tu huduma kwa wakati kuhusu age1, age2, age3. Kwa bahati mbaya, mara moja mimi kukusanya mpango huu na kuiweka mbele ya watumiaji halisi, nini kubuni kimsingi maskini uamuzi mimi wanaonekana kuwa alifanya? Yeah? Watazamaji: [inaudible] DAVID J. Malan: Yeah, Mimi si hata alijaribu kufikiri umri jinsi wengi Je, mimi kwa kweli huduma ya juu? Kama mimi na watu wachache kuliko tatu hapa, na umri kwa hiyo chini ya tatu, Mimi bado upofu wanatarajia tatu. Hasha watu wanne kuonyesha up. Mpango wangu tu si hata msaada wao. Na hivyo hii, kwa muda mrefu hadithi short, ni si tabia nzuri. Haki? Mimi nilikuwa kimsingi kuiga na pasting code tweaking na tu variable majina. Na, mungu wangu, kama alikuwa na, na si watatu milele, lakini 10, au 100, au hata 6500 wanafunzi wa vyuo vikuu, kwa mfano. Hii si kwenda kuwa hasa code kifahari, au endelevu. Wewe ni kwenda kuwa na kuandika upya mpango kila wakati namba yako ya mabadiliko watu. Hivyo nashiriki, katika halisi wetu ages.c faili kwa ajili ya leo, tuna ufumbuzi zaidi wajanja. Kwanza, mimi nina kwenda kukopa kujenga tumekuwa kutumika mara chache, kufanya hivyo kitanzi wakati, ili kupata idadi ya watu katika chumba. Mimi tu kwenda bemba user, tena na tena, mpaka yeye au yeye anitiaye thamani ya n kwamba ni integer chanya. Mimi naweza kuwa kutumika, mwisho wakati ya kupata chanya int. Lakini hatuna kwamba kwa kweli, hivyo nilikwenda mbele na re kutekelezwa wazo hili. Sasa hapa chini, hii ni hila mpya. Katika line 27, kama comments katika line 26 unaonyesha, kutangaza safu katika ambayo kuhifadhi umri ya kila mtu. Hivyo kama unataka kupata, si moja int, si ints mbili, lakini rundo zima la ints. Hasa n integers, walikuwa n nguvu kuwa tatu, inaweza kuwa 100, inaweza kuwa 1,000. syntax, kabisa tu, ni kwa kusema, nini data aina gani unataka? Je, unataka simu kwamba chunk ya kumbukumbu? Je, unataka simu gridi ya taifa kwamba inaonekana kama hii pictorially? Na katika mabano hapa, unaweza kusema jinsi kubwa unataka safu kuwa. Na hivyo awali, wakati mimi alisema syntax ni tofauti kidogo hapa, bado tuko kutumia mabano mraba, lakini wakati mimi nina kutangaza safu, simu ndani ya mabano mraba njia jinsi kubwa unataka safu kuwa. Kwa upande mwingine, wakati sisi walikuwa kutumia s bracket i wakati iliyopita, s, kamba, ni kweli safu ya chars, lakini wakati wewe ni si kutangaza variable, kama na hii keyword hapa, wewe ni tu kupata index maalum, maalum kipengele na kwamba safu. Mara baada ya tunajua kwamba, wengine hii ni moja kwa moja. Kama mimi nina mpya kwanza kwenda magazeti nje nini umri wa mtu simu i. Ambapo mimi tu kusema mtu namba moja, mtu namba mbili, mtu namba tatu. Na mimi nina kufanya tu hesabu, ili kama watu wa kawaida, sisi kuhesabu kutoka moja kwa ajili ya hii mpango, na si kutoka sifuri. Kisha mimi wito GetInt, lakini mimi kuhifadhi jibu katika umri bracket i. Ambayo ni umri i'th katika safu. Hivyo ambapo mara ya mwisho tulikuwa kutibu masanduku hayo kama chars kwa jina Zamyla ya, na wengine. Sasa, masanduku hayo ya kuwakilisha Bits 32, au ka nne katika ambayo tunaweza kuhifadhi int, int, int. Yote ambayo, tena, ni data aina moja. Sasa mimi kufanya kitu silly, kama wakati hupita, tu kuhalalisha kuandika mpango huu. Na kisha chini hapa, mimi tena iterate juu ya safu akisema mwaka kuanzia sasa, mtu mapenzi ya simu moja kuwa na umri wa miaka kitu. Na kufikiri kwamba math-- I mean, hii si sana ngumu arithmetic-- I just kuongeza moja na umri wao. Tu kuonyesha, tena, hii. Kama tu naweza index ndani ya kamba, s, hivyo unaweza I index katika safu ya milele, kama kwamba kuna. Hivyo ambapo ni hii kwenda kuwa na kuchukua yetu? Hivyo tutaona, hatimaye, mambo kadhaa katika siku zijazo. Moja, wakati huu wote, wakati kuandika mipango yako mwenyewe, kama Mario, tamaa, mikopo. Tumekuwa kuandika jina la mpango na kupiga kuingia. Na kisha kupata pembejeo mtumiaji. Pamoja na GetString, GetInt, getLongLong, au kama. Lakini zinageuka kuwa C inasaidia kitu kinachoitwa mstari amri hoja, ambayo ni kwenda hebu kweli kupata maneno kwamba aina, katika haraka blinking, baada ya jina mpango wako. Hivyo katika siku zijazo, wewe wanaweza aina ya kitu kama Kaisari, au ./caesar namba 13, baada ya hapo. Tutaweza kuona jinsi kwamba kazi. Kwa sababu kwa kweli, katika tatizo kuweka mbili, sisi ni kwenda kuanzisha wewe kwa kitu kidogo kukumbusha ya Ralphie ya changamoto ya awali ya masomo ya kutengeneza ramani. sanaa ya scrambling habari. Hii, kwa kweli, ni sana reminiscent ya nini Ralphie alivyofanya. Huu ni mfano wa encryption algorithm kuitwa ROT13, R-O-T 13. Ambayo kwa kifupi maana mzunguko barua katika alfabeti 13 maeneo. Na kama wewe kufanya hivyo, utaona sasa ni nini, labda, maneno ukoo. Lakini njia sisi ni kwenda kutumia hii, hatimaye, ni zaidi kwa ujumla. Katika P kuweka mbili, katika toleo la kawaida, utasikia kutekeleza michache ya ciphers, mtu mmoja aitwaye Kaisari, na mtu mmoja aitwaye Vigenere. Wote wawili ni mzunguko ciphers, katika kwamba kwa namna fulani wewe kugeuka barua moja katika barua tofauti. Na Kaisari ni super rahisi. Kuongeza moja, unaweza kuongeza 13, au baadhi ya idadi hadi 26. Vigenere gani kwamba juu ya kwa barua ya msingi. Hivyo Vigenere, kama utaona katika spec, ni salama zaidi. Lakini mwishoni mwa siku gani wewe utakuwa na kutekeleza na P kuweka mbili, ni kwamba muhimu kwamba matumizi ya wote wawili kwa encryption na decryption. Akizungumzia mchakato wa kumfanya Nakala wazi, baadhi ujumbe wa awali, ndani ya Cypher asilia, ambayo ni kitu encrypted. Na kisha decrypting tena. Katika hacker toleo, wakati huo huo, wewe utakuwa na kazi na kitu sawa katika roho, ambapo tutaweza kukupa file, kutoka kawaida Linux, au Mac, Unix au kompyuta iitwayo Etsy password, ambayo ina zima rundo la usernames na nywila. Na nywila wale wana kila wamekuwa encrypted, au heshi, hivyo kusema, vizuri zaidi kama utaona katika spec. Na hacker toleo changamoto yenu kwa kuwa na pembejeo kama hii, na ngozi password. Hiyo ni, kuhesabia nje nini password ya binadamu kweli alikuwa. Kwa sababu, kwa kweli, nywila ni kwa ujumla si kuhifadhiwa katika wazi, na kwa ujumla nywila lazima kuwa vigumu nadhani. Hiyo si mara nyingi kesi. Na nini Nilidhani tunatarajia kufanya ni kuhitimisha kwa dakika kadhaa mtazamo saa hasa maskini uchaguzi wa nywila kutoka katika filamu unaweza kukumbuka fondly. Na kama si, unapaswa kodi. [VIDEO avspelning] -Helmet, Wewe fiend, nini kinaendelea? Unafanya nini kwa binti yangu? -Permit Yangu na kuanzisha kipaji vijana plastiki upasuaji, Daktari Phillip Schlotkin. kubwa pua kazi mtu katika ulimwengu mzima na Beverly Hills. -Wako Highness. -Nose Kazi? Sielewi. Yeye tayari alikuwa na pua kazi. Ilikuwa yake tamu 16 sasa. -Hakuna, Ni si nini unafikiri. Ni sana, mbaya sana. Kama huna nipe mchanganyiko kwa ngao hewa, daktari Schlotkin nitakupa yako binti nyuma pua yake ya zamani. - [Gasps] Nooooooooooooo. Wapi kupata hiyo? -Zote Haki. Mimi nitakuambia, mimi nitakuambia. -Hakuna, Daddy, hakuna. Lazima si. -You're Haki mpenzi wangu. Mimi itabidi miss pua yako mpya. Lakini mimi si kuwaambia mchanganyiko bila kujali. -Very Vizuri. Daktari Schlotkin, kufanya mbaya yako. -My Radhi. -Hakuna! Ngoja, ngoja. Mimi nitakuambia. Mimi nitakuambia. -I Alijua ingekuwa kazi. Haki zote, unipe. -The Macho ni moja. -One. -One. -Two. -Two. -Two. Na tatu. Na tatu. Na tatu. -Four. -Four. -Four. -Five. -Five. -Five. -Basi Macho ni moja, mbili, tatu, nne, tano. Hiyo ni stupidest mchanganyiko Ninayosikia katika maisha yangu. Hiyo ni aina ya kitu an idiot ingekuwa juu ya mizigo yake. -Thank Wewe, ukuu wako. [Kijijini Clicks] -Nini Ulifanya nini? -I Akageuka mbali ukuta. -Hakuna, Wewe alifanya si, wewe akageuka mbali movie nzima. -I Must've taabu kifungo vibaya. -Naam, Kuiweka nyuma juu! Weka movie nyuma juu! -Yes, Bwana! Naam, bwana. -Let Ya kwenda, Arnold. Haya, Gretchen. Bila shaka unajua mimi itabidi kuwa na muswada wewe kwa hili. -Naam? Je, kazi? Wapi mfalme? -Ni Kazi, bwana, sisi kuwa na mchanganyiko. -Mkuu. Sasa tunaweza kuchukua kila pumzi ya mwisho ya hewa safi kutoka sayari Druidia. Nini mchanganyiko? -One, Mbili, tatu, nne, tano. -One, Mbili, tatu, nne, tano? -Yes. -Kwamba Ajabu. Mimi nimepata huo mchanganyiko juu ya mizigo yangu. Kuandaa Spaceball 1 kwa kuondoka haraka. -Yes, Mheshimiwa. -Na Mabadiliko mchanganyiko juu ya mizigo yangu. [DOOR KUFUNGA SOUND] [Jela ya milango kupiga kofia] -Ahh. [END video avspelning] DAVID J. Malan: Hiyo ni kwa CS50, tutaweza kuona wewe wiki ijayo. NARRATOR: Na sasa, Deep Mawazo, na Daven Farnham. DAVEN FARNHAM: CODING katika C ni vigumu sana kuliko Scratch. printf, Scratch ilikuwa ni uongo. [Kicheko soundbite]