[Powered by Google Translate] [Sehemu ya 4] [Less Starehe] [Nate Hardison] [Chuo Kikuu cha Harvard] [Hii ni CS50.] [CS50.TV] Haki zote, kuwakaribisha nyuma kwa sehemu. Katika sehemu ya wiki hii sisi ni kwenda kufanya mambo kadhaa. Sisi ni kwenda kwanza Set recap Tatizo 2, ambayo ni tatizo Kaisari na Vigenère kuweka. Na kisha sisi ni kwenda kupiga mbizi katika Quiz mapitio 0 na kutumia muda kidogo recapping kile ambacho tumekuwa aliyesema kuhusu katika kila moja ya mihadhara hivyo mbali, na pia tutaweza kufanya matatizo machache kutoka Quizzes wa mwaka uliopita. Kwa njia hiyo guys kuwa njia nzuri ya kujiandaa kwa ajili hiyo. Kuanza, nimekuwa booted juu ya wanandoa wa ufumbuzi mzuri kwa ajili ya kuweka uliopita tatizo, Tatizo Kuweka 2, katika nafasi hii. Kama wewe guys wote hit link hii, na kama wewe bonyeza jina langu na bonyeza marekebisho yangu ya kwanza utaona caesar.c, ambayo ni hasa kile Mimi nina kuangalia. Hebu majadiliano kuhusu kweli hii haraka. Hii ni ufumbuzi sampuli. Hii ni lazima si suluhisho kamili. Kuna njia nyingi tofauti ya kuandika hii, lakini kuna mambo machache ambayo mimi alitaka kuonyesha kwamba nikaona kama nilikuwa grading, kawaida makosa ambayo nadhani ufumbuzi hii haina kazi nzuri sana ya kuchukua. kwanza ni kuwa na aina fulani ya maoni header kwa juu. Juu ya mistari 1 hadi 7, unaweza kuona maelezo, nini hasa mpango huu ni kufanya. nzuri kiwango mazoezi wakati wewe kuandika code C bila kujali kama mpango wako ni zilizomo ndani ya faili moja au kama ni mgawanyiko juu ya files nyingi ni kuwa na aina fulani ya orienting maoni kwa juu. Hii pia ni kwa ajili ya watu kwenda nje na kuandika code katika ulimwengu wa kweli. Hii ni pale ambapo itabidi kuweka hati miliki ya habari. Chini ni pamoja na #. On line 16 kuna hii # define, ambayo tutaweza kurudi katika kidogo tu. Na kisha mara moja kazi kuanza, kuanza mara moja kuu, kwa sababu mpango huu imekuwa zote zilizomo katika kazi moja kitu ya kwanza kabisa kwamba kinachotokea-na hii ni nahau au msemo wenye sana na mfano wa mpango C kwamba inachukua katika mstari amri hoja-ni kwamba mara hundi kwa kuhesabu hoja, argc. Haki hapa tunaona kwamba mpango huu ni kutarajia hoja 2 hasa. Kumbuka kwamba kuna hoja ya kwanza kwamba moja maalum kwamba daima jina la mpango hiyo kuwa kukimbia, jina la faili la kutekelezwa. Na hivyo kile hii haina ni linazuia mtumiaji kutoka mbio mpango kwa hoja zaidi au wachache. sababu tunataka kuangalia kwa haki hii kwa sababu ni mbali hatuwezi kupata hii safu argv haki hapa reliably mpaka tumekuwa checked kuona jinsi kubwa ni. Moja ya makosa ya kawaida niliyemwona alikuwa watu itakuwa mara kwenda katika na kunyakua argv [1]. Wao d kunyakua hoja muhimu nje ya safu na kufanya kwa i kuangalia juu yake, na kisha wao d kufanya mtihani kwa argc kama vile mtihani ujao, kama au hoja ya kwanza ilikuwa kweli integer wakati huo huo, na kwamba haifanyi kazi kwa sababu katika kesi kwamba hakuna hoja zinazotolewa wewe utakuwa grabbing hoja kuwa si huko au kujaribu kunyakua moja kwamba si huko. nyingine jambo kubwa kwamba wewe lazima taarifa ni kwamba wewe siku zote wanataka magazeti nje baadhi ya aina ya ujumbe kusaidia kosa kwa mtumiaji kuelekeza yao. Mimi nina uhakika wameweza mipango yote ya kukimbia ambapo ghafla ni shambulio, na wewe kupata hii ridiculous kidogo dialog kwamba pops up na anasema kitu horribly cryptic na labda inakupa code kosa au kitu kama hicho kwamba haina mantiki. Hii ni pale ambapo kweli unataka kutoa kitu manufaa na walengwa kwa mtumiaji ili wakati wao kukimbia wao kwenda "Oh," uso mitende. "Mimi kujua hasa nini cha kufanya mimi. Kujua jinsi ya kurekebisha hii." Kama huna magazeti ujumbe, kisha kuishia kweli kuondoka mtumiaji kwenda kuchunguza chanzo yako code kufikiri nini potoka. Pia kuna baadhi ya nyakati utakayoitumia codes makosa mbalimbali. Hapa sisi tu kutumika moja kwa kusema kulikuwa na kosa, kulikuwa na hitilafu, kulikuwa na hitilafu. Bigger mipango, mara nyingi mipango ambayo huitwa na programu nyingine, atarudi na aina fulani ya namba maalum makosa katika matukio tofauti kwa programmatically kuwasiliana nini vinginevyo tu kutumia nzuri Kiingereza ujumbe kwa. Cool. Kama sisi kazi chini, unaweza kuona sisi kujiondoa muhimu. Sisi mtihani kuona kama ufunguo inafaa. Sisi kupata ujumbe kutoka kwa mtumiaji. sababu kufanya hivyo katika hii kufanya wakati kitanzi-na hili ni jambo ambalo sisi itafikia katika kidogo kidogo-lakini zinageuka kuwa kama aina kudhibiti D wakati kupata GetString kwamba haraka juu ya terminal kile kwamba kweli hana ni inapeleka tabia maalum kwa mpango. Ni wito ELF au mwisho wa tabia ya faili. Na katika kesi hiyo, ujumbe wetu string itakuwa null, hivyo hii ilikuwa si kitu sisi checked kwa tatizo katika kuweka yenyewe. Lakini kama sisi kwenda juu, sasa kwamba tumekuwa walianza kuzungumzia kuyatumia na nguvu juu ya kumbukumbu mgao wa chungu, kuangalia kwa null wakati wowote una kazi ambayo inaweza kurudi null kama thamani ni kitu ambacho utasikia wanataka kupata katika tabia ya kufanya. Hii ni hapa hasa kwa ajili ya vielelezo. Lakini wakati wa kufanya kuona GetString katika siku zijazo, hivyo kutokana na tatizo Set 4 juu, utasikia wanataka kuweka hii katika akili. Tena, hii si suala kwa Matatizo Kuweka 3 aidha tangu tulikuwa na si mifuniko ni bado. Hatimaye, sisi kupata sehemu hii ambapo sisi kupata kitanzi kuu fiche, na kuna michache ya mambo kinachoendelea hapa. Kwanza, sisi iterate zaidi string nzima ujumbe yenyewe. Hapa tumekuwa naendelea wito strlen katika hali, ambapo idadi ya wewe alisema si njia kuu ya kwenda. Ni zinageuka katika kesi hii ni pia si kubwa, sehemu kwa sababu sisi ni kubadilisha yaliyomo ya ujumbe yenyewe ndani kwa kitanzi, hivyo kama tuna ujumbe kwamba 10 wahusika muda mrefu, mara ya kwanza sisi kuanza kwamba kwa kitanzi strlen atarudi nini? 10. Lakini kama sisi kisha kurekebisha ujumbe, kusema sisi kurekebisha tabia yake ya 5, na sisi kutupa katika tabia \ 0 katika nafasi 5, juu ya iteration baadae strlen (ujumbe) hatarejea zifanya mara ya kwanza sisi iterated, lakini itakuwa badala kurudi 5 kwa sababu sisi akatupa katika kwamba Terminator null, na urefu wa kamba ya hufafanuliwa na nafasi ya kuwa \ 0. Katika kesi hiyo, hii ni njia kuu ya kwenda kwa sababu sisi ni kubadilisha katika mahali. Lakini utaona kwamba hii ni kweli kushangaza rahisi encrypt kama unaweza kupata math sahihi. Vitu tu vinavyohitajika ni kuangalia kama au barua kwamba wewe kuangalia ni uppercase au lowercase. sababu sisi tu na kuangalia kwa kuwa na hatuna kuangalia kwa ni alpha kesi ni kwa sababu kama tabia ni uppercase au kama ni lowercase basi ni dhahiri tabia za kialfabeti, kwa sababu hatuna tarakimu kubwa na ndogo. Kitu nyingine sisi kufanya-na hii ni gumu kidogo- ni tumekuwa iliyopita kiwango Kaisari cipher formula kwamba sisi alitoa katika vipimo kuweka tatizo. Nini tofauti hapa ni kwamba sisi subtracted katika mji mkuu uppercase kesi, na kisha sisi aliongeza mtaji nyuma katika mwishoni. Mimi najua wachache una hii kufanyika katika code yako. Je yoyote ya kufanya hivyo katika maoni yako? Ulifanya hii. Je, unaweza kueleza nini hii haina, Sahb? Kwa kutoa nje, kwa sababu wewe ulifanya Mod haki baada ya hayo, una kuchukua nje, na hivyo njia ya kupata [kukohoa] msimamo. Na kisha kwa kuongeza kuwa nyuma baadaye kubadilishwa zaidi ya moja kwamba alitaka. Yeah, kwa uhakika. Nini Sahb alisema ilikuwa kwamba wakati tunataka kuongeza ujumbe wetu na ufunguo wetu pamoja na kisha Mod kwamba, Mod kwamba kwa NUM_LETTERS, kama hatuwezi kuongeza ujumbe wetu katika mbalimbali sahihi 0-25 kwanza, basi tunaweza kuishia kupata idadi kweli weird kwa sababu maadili ya kwamba sisi ni kuangalia wakati sisi kuangalia ujumbe [i], wakati sisi kuangalia tabia idh ya ujumbe wetu wazi-maandishi, ni thamani mahali fulani katika hii mbalimbali 65-122 msingi maadili ASCII kwa uppercase kupitia z lowercase. Na hivyo wakati sisi Mod hivyo kwa 26 au kwa NUM_LETTERS, tangu kwamba alikuwa yetu # define juu kulia hapa juu, ambayo inaenda kutupa thamani hiyo ni katika mbalimbali 0-25, na tunahitaji njia kisha kuongeza kuwa nyuma hadi na kupata katika mbalimbali sahihi ASCII. Njia rahisi ya kufanya hivyo ni kuongeza tu kila kitu chini katika mbalimbali 0-25 kwa kuanzia, na kisha kuhama kila kitu nyuma hadi mwishoni. Kosa lingine la kawaida kwamba nikaona watu kukimbia katika ni kwamba kama wewe si kweli kufanya hivyo kuongeza haki mbali na wewe kuongeza ujumbe muhimu na pamoja na wewe kuongeza yao, kusema, ndani ya variable Char, tatizo na kwamba ni tangu ujumbe [i] ni idadi kubwa kiasi ya kuanza kwa- kumbuka ni angalau 65 ikiwa ni uppercase tabia- kama una ufunguo kubwa, wanasema, kitu kama 100, na kuongeza wale 2 pamoja katika Char saini utaenda kupata kufurika. Wewe ni kwenda kupata thamani hiyo ni kubwa kuliko 127, ambayo ni ya thamani kubwa kwamba variable Char wanaweza kushikilia. Tena, kwamba ni kwa nini wewe d wanataka kufanya aina ya kitu kwa kuanzia. Baadhi ya watu got karibu kesi kwamba kwa kufanya kama mwingine na kupima kuona kama ingekuwa kufurika kabla ya kufanya hivyo, lakini njia hii anapata karibu kwamba. Na kisha katika ufumbuzi hii sisi kuchapishwa string nzima mwishoni sana. Watu wengine kuchapishwa tabia kwa wakati. Wote ni kutisha. Katika hatua hii, je, wewe guys una maswali yoyote, maoni yoyote kuhusu hili? Mambo kama, mambo si kama? Mimi nilikuwa na swali. Labda mimi missed hiyo wakati maelezo yako, lakini jinsi gani mpango huu ruka nafasi kwa ajili ya kuunganisha muhimu kwa urefu wa maandishi? Hii ni Kaisari cipher. >> Oh, sorry, yeah. Yeah, tutaweza kuona kwamba. Katika cipher Kaisari tulipata kuzunguka kwamba kwa sababu sisi tu flipped wahusika. Sisi tu kuzungushwa yao kama walikuwa uppercase au lowercase. You guys hisia nzuri kuhusu hili? Jisikie huru nakala hii nyumbani, kuchukua hiyo, kulinganisha kwa nini wewe guys aliandika. Dhahiri kujisikia huru na kutuma maswali kuhusu hilo pia. Na tena, kutambua kwamba lengo hapa na tatizo lako unaweka si kupata wewe guys kuandika code kamilifu kwa seti yako tatizo. Ni uzoefu wa kujifunza. Yeah. Rudi do wakati kitanzi, kama ni sawa null, hivyo null tu ina maana chochote, wao tu enter? Null ni maalum pointer thamani, na sisi kutumia null wakati tunataka kusema tuna variable pointer kwamba ni akizungumzia chochote. Na hivyo kwa kawaida maana yake ni kwamba hii variable, hii variable ujumbe ni tupu, na hapa, kwa sababu sisi ni kutumia CS50 maalum string aina, kile ni CS50 string aina? Umeona nini ni wakati Daudi vunjwa nyuma Hood katika hotuba? Ni funky-ni pointer, haki? Okay, yeah. >> Ni * Char. Na hivyo kweli sisi inaweza kuchukua nafasi hii hapa hapa na ujumbe Char *, na hivyo kazi GetString, ikiwa haina mafanikio kupata kamba kutoka kwa mtumiaji, haiwezi Hazrat kamba, na kesi moja ambayo haiwezi Hazrat string ni kama mtumiaji aina ya mwisho wa faili tabia, D kudhibiti, ambayo si kitu kwa kawaida wewe kufanya, lakini kama kwamba hutokea basi kazi hii atarudi thamani null kama njia ya kusema "Hey, sikuweza kupata kamba." Nini kingetokea kama hatuwezi kuweka ujumbe = null, ambayo ni kitu ambacho sisi si kufanya bado? Mbona ingekuwa kwamba kuwa tatizo hapa? Kwa sababu najua kwamba sisi aliyesema kidogo katika hotuba kuhusu uvujaji kumbukumbu. Yeah, hebu kufanya hivyo, na hebu angalia nini kinatokea. Swali Basil ilikuwa kile kinachotokea kama sisi si kweli kuwa ujumbe huu = null mtihani? Hebu kitabu juu kwa juu. You guys unaweza maoni hii nje. Kweli, mimi itabidi kuokoa ni katika marekebisho. Hii itakuwa Revision 3. Nini wewe itabidi kufanya kuendesha mpango huu ni itabidi bonyeza hii icon gia juu hapa, na itabidi kuongeza hoja hiyo. Itabidi kutoa hoja muhimu tangu tunataka kupitisha hoja katika mstari amri. Hapa nina kwenda kuwapa namba 3. Mimi kama 3. Sasa zooming nyuma nje, mbio mpango. Ni mbio, kuandaa, kujenga. Hapa sisi kwenda. Ni kusubiri ilisababisha. Kama mimi aina katika kitu kama hujambo-wapi kwamba kwenda? Oh, mpango wangu alichukua muda mrefu sana na kukimbia. Mimi nilikuwa jawing kwa muda mrefu mno. Hapa unaendelea. Sasa ninapoandika katika hello. Tunaona kwamba encrypts ipasavyo. Sasa kile kinachotokea kama sisi kufanya GetString haraka kurudi null? Kumbuka, mimi alisema kwamba sisi alifanya hivyo na uendelezaji wa kudhibiti D kwa wakati mmoja. Mimi itabidi kitabu juu hapa. Tutaweza kukimbia tena. Ujenzi. Kuna unaendelea. Sasa wakati mimi hit kudhibiti D I got line hii kwamba anasema opt/sandbox50/bin/run.sh, Mkato kosa. Je, guys kuonekana kwamba kabla? [Mwanafunzi] Kwa nini kuna hakuna >> Samahani? [Mwanafunzi] Kwa nini kuna hakuna dampo msingi katika kesi hii? dampo msingi ni-swali ni kwa nini kuna hakuna dampo msingi hapa? Swali ni kwamba kuna inaweza kuwa, lakini dampo msingi ni faili kwamba anapata kuhifadhiwa kwenye gari ngumu. Katika kesi hii tumekuwa walemavu madampo ya msingi kwenye server kukimbia ili sisi hawana watu seg faulting na kujenga tani ya madampo ya msingi. Lakini unaweza kupata mmoja. Core dumps ni aina ya kitu kwamba mara nyingi unaweza Disable, na wakati mwingine unaweza kufanya. kosa segmentation, kwa kujibu swali lako, Basil, ni kusema kwamba sisi walijaribu kupata pointer kwamba alikuwa si kuweka kwa uhakika na kitu chochote. Kumbuka Binky katika video wakati Binky anajaribu kwenda kupata pointer kwamba si akizungumzia chochote? Katika kesi hiyo mimi nadhani kitaalam pointer ni akizungumzia kitu. Ni akizungumzia null, ambayo ni ya kitaalam 0, lakini kwamba ni defined kuwa katika sehemu ambayo si ya kupatikana na mpango wako, ili kupata kosa segmentation kwa sababu wewe si kupata kumbukumbu hiyo katika sehemu halali kama sehemu ya chungu au sehemu ya stack au sehemu data. Cool. Maswali yoyote zaidi kuhusu Kaisari? Hebu hoja juu. Hebu tuangalie Revision 2 kweli haraka. Hiyo Vigenère. Hapa katika Vigenère tutaweza kutembea kwa njia moja hii pretty haraka kwa sababu, tena, Vigenère na Kaisari ni sawa kabisa. Header maoni ni kabla, # Define ni kabla ili kuepuka kutumia namba hizi uchawi. Jambo zuri ni kusema sisi alitaka hoja ya alfabeti tofauti au kitu kama hicho. Badala ya kuwa na kwenda manually mabadiliko 26 wote katika code tungebadili hii hadi 27 au kuacha ni chini kama tungetumia alphabets tofauti, lugha mbalimbali. Tena, sisi tumepewa hii hundi ya kuhesabu hoja, na kwa kweli unaweza karibu kuchukua hii kama template. Pretty sana kila mpango kuandika wanapaswa kuwa- kama inachukua mstari amri hoja-baadhi mlolongo wa mistari kwamba anasoma kama hii katika mwanzo sana. Hiyo ni moja ya vipimo kwanza sanity unataka kufanya. Hapa nini hatukuwa ilikuwa sisi alifanya kwamba uhakika Keyword ilikuwa halali, na kwamba alikuwa hundi ya pili ambayo sisi alivyofanya. Ona tena kwamba sisi waliojitenga hii kutoka argc na 2. Kumbuka kwamba katika kesi hii jambo moja kwamba sisi na kufanya ni badala ya kutumia kwa i tulitaka validate string nzima, na ili kufanya hivyo kwa kweli kuwa na tabia ya kwenda kwa tabia juu ya kamba. Hakuna njia nzuri kuwaita kitu juu yake sababu hata, kwa mfano, i atarudi 0 kama hawezi kuchanganua integer, hivyo kwamba hana hata kazi. Tena, nice ujumbe kuwaambia user hasa ni nini kilichotokea. Ndipo hapa, tena, sisi pia kushughulikia kesi ambapo user aina katika tabia kudhibiti D random. Na kisha Charlotte alikuwa swali mapema kuhusu jinsi sisi kusimamia ruka nafasi katika kamba yetu hapa. Hii ilikuwa ni aina ya sawa na kile sisi alivyofanya kwa mpango Myspace kwamba sisi tulikuwa katika sehemu, na njia hii kazi ni kwamba sisi kupatikana idadi ya herufi kwamba sisi d kuonekana. Kama sisi kutembea juu ya kamba ujumbe, kama sisi kutembea juu ya tabia na tabia, sisi kupatikana index kama sehemu ya yetu kwa kitanzi, na kisha sisi pia kupatikana idadi ya herufi, hivyo wahusika zisizo maalum, mashirika yasiyo ya tarakimu, mashirika yasiyo ya nyeupe nafasi kwamba sisi d kuonekana katika variable tofauti. Na kisha ufumbuzi hii hugeuza ufunguo kupata halisi muhimu integer, na ni gani kwamba juu ya kuruka, haki kabla basi huenda encrypt halisi ujumbe tabia. Kuna baadhi ya ufumbuzi ambao walikuwa kikamilifu kubwa mno kwamba ingekuwa kurekebisha muhimu juu wakati wa kupima kwa uhalali ufunguo wa. Mbali na kuhakikisha kwamba tabia na Keyword ilikuwa tabia kialfabeti pia akageuka kuwa katika integer katika mbalimbali 0-25 kwa basi ruka kuwa na kufanya kwamba baadaye katika hii kwa kitanzi. Tena, unaweza kuona hapa hii ni kweli exact code kwamba sisi kutumika katika Kaisari katika hatua hii. Unafanya exact kitu, hivyo hila halisi ni kuhesabia jinsi ya kugeuka Keyword katika integer. Jambo moja kwamba sisi tulikuwa hapa, ambayo ni kidogo mnene ni sisi amerudia maneno, Nadhani unaweza simu yake, 3 tofauti mara juu ya mistari 58, 59, na 61. Je, mtu kueleza nini hasa maneno hii haina? Ni kupata tabia, kama wewe alisema. Yeah, ni [inaudible] tabia katika Keyword, na hivyo ni idadi ya herufi kuonekana kwa sababu wewe ni kusonga tu pamoja Keyword mara moja wewe ve kuona barua, ili kwenda kwa ufanisi ruka nafasi na mambo kama hayo. Yeah, kwa uhakika. Na kisha mara moja wewe ve kuonekana tupu Keyword wewe tu Mod hivyo hoja nyuma kote. Hasa. Hiyo ni maelezo kamilifu. Nini Kevin alisema ni kwamba tunataka index katika Keyword. Tunataka kupata tabia num_letters_seen, kama wewe, lakini kama num_letters_seen unazidi urefu wa Keyword, njia ya sisi kupata nyuma katika mbalimbali sahihi ni sisi kutumia operator Mod kwa ufanisi wrap karibu. Kwa mfano, kama katika muda mfupi, Keyword yetu ni Bacon, na ni 5 barua kwa muda mrefu. Lakini tumeona barua 6 katika maandishi yetu wazi katika hatua hii na encrypted 6. Sisi kuishia kupata num_letters_seen, ambayo ni 6, Mod urefu wa Keyword, 5, na hivyo tutaweza kupata 1, na hivyo kile tutaweza kufanya ni tutaweza kupata kwanza tabia ndani ya Keyword yetu katika hatua hiyo. Haki zote, maswali yoyote juu ya Vigenère kabla hatujaendelea? You guys hisia nzuri kuhusu hili? Cool, kubwa. Mimi nataka kuhakikisha kuwa wewe guys ni kupata nafasi ya kuona code kwamba sisi kufikiri inaonekana nzuri na kuwa na nafasi ya kujifunza kutoka humo. Hii ni kwenda kuwa mwisho tutaweza kutumia nafasi kwa wakati kuwa, na sisi ni kwenda mpito sasa, na mimi nina kwenda kwa cs50.net/lectures ili tuweze kufanya kidogo ya mapitio chemsha bongo. njia bora nadhani kuanza kufanya quiz mapitio ni kuja ukurasa huu Mihadhara, cs50.net/lectures, na chini ya kila wiki ya vichwa, hivyo kama mimi kuangalia hapa katika mkutano wa Wiki 0, Mimi naona kwamba tuna orodha ya mada ambazo sisi kufunikwa katika Wiki 0. Kama yoyote ya mada hizi wanaonekana unfamiliar na wewe wewe utakuwa dhahiri wanataka kwenda nyuma na scour maelezo hotuba na uwezekano hata skim kupitia mihadhara, kuangalia yao tena kama unataka kupata kujisikia kwa nini kinaendelea kwa kila mada hizo. Nasema kuongeza hii ya mwaka mmoja wa rasilimali baridi sisi tumepewa ni hizi Shorts kwamba tumekuwa umba, na kama ukiangalia Wiki 0, hatuna yote ya mada mifuniko, lakini sisi tumepewa chache kabisa wao, baadhi ya wale wa trickier, hivyo kuangalia Shorts haya tena ni njia nzuri ya kupata wewe juu kwa kasi. Hasa, mimi naenda kuweka kuziba kwa 3 juu ya chini, tangu mimi hizo. Lakini kama wewe ni ikikabiliwa na binary, bits, hex, kwamba aina ya mambo, binary ni sehemu kubwa ya kuanza. ASCII ni mtu mwingine kwamba ni vizuri kuona pia. Unaweza hata kuangalia yangu katika kasi 1.5x ikiwa mimi nina kwenda polepole mno kwa ajili yenu. Tangu mapitio yake, jisikie huru kufanya hivyo. Tu kuanza kweli haraka, sisi ni kwenda kupitia michache ya matatizo haya Jaribio tu kwa haraka churn kupitia haya. Kwa mfano, hebu tuangalie tatizo 16 kwamba mimi nimepata kulia hadi hapa kwenye bodi. Sisi tumepewa hii hesabu zifuatazo katika binary, na tunataka kuonyesha kazi yoyote. Sawa, mimi naenda kutoa hii risasi. You guys inapaswa kufuata pamoja na karatasi, na tutaweza kufanya hii kweli haraka. Tunataka kufanya hesabu zifuatazo katika binary. Mimi nimepata 00,110,010. Na mimi nina kwenda kuongeza ni 00,110,010. Kwa math akili maalum kufuatia pamoja nyumbani, hii ni ufanisi kuzidisha kwa 2. Hebu kuanza. Sisi ni kwenda kufuata huo Aidha algorithm kwamba sisi kufanya wakati sisi kuongeza idadi decimal pamoja. Kweli tofauti tu hapa ni kwamba sisi kitanzi nyuma kote mara moja tuna 1 + 1 badala ya mara moja sisi kupata 10. Kama sisi kuanza kutoka kulia, kweli haraka, nini tarakimu ya kwanza? [Mwanafunzi] 0. >> [Nate H.] 0. Mkuu, tarakimu ya pili? [Mwanafunzi] 1. [Nate H.] Je, ni 1? 1 + 1 ni? [Mwanafunzi] 10. [Nate H.] Hasa, ili kile ni tarakimu kwamba mimi kuandika kulia chini ndio 2 aliongeza pamoja? [Mwanafunzi] 1, 0, 0 au na kisha kubeba 1. [Nate H.] 0 na kubeba 1, hasa. Next moja juu, Basil, uko juu. Nini tatu >> [Basil] 1?. [Nate H.] 1, kamilifu. Kevin? [Kevin] 0. >> [Nate H.] 0, Charlotte? [Charlotte] 0. >> [Nate H.] Yeah, na nini mimi? [Mwanafunzi] 1. [Nate H.] Na nini mimi? Na kisha mimi kubeba 1. Perfect, Sahb? >> [Sahb] Sasa una 1. [Nate H.] Na kufanya mimi kufanya kitu chochote hapa? [Sahb] Kisha kwa moja ijayo una 1 kwa sababu wewe ulichukua zaidi ya 1. [Nate H.] Mkuu, hivyo hapa tunaweza kumaliza it up. Cool. [Mwanafunzi] Je 0 + 0 0 =? 0 + 0 = 0. 1 + 1, kama wewe alisema, ni 10, au 1, 0, badala. 10 ni misnomer sababu mimi 10 ina maana idadi 10, na ni quirk ya jinsi sisi ni anayewakilisha wakati sisi ni kuandika yake. Sisi kuwakilisha idadi 2 kwa 1, 0, na namba 10 ni tofauti kidogo. Nini aina ya nice kuhusu binary ni kwamba kuna kweli ni kwamba wengi kesi unahitaji kujifunza. Kuna 0 + 0 = 0, 0 + 1 = 1, 1 + 1 ni 0, na kisha kubeba 1, na kisha unaweza kuona hapa katika safu ya tatu kutoka kulia tulikuwa na hii 1, 1, na 1. Na 1 + 1 + 1 ni 1, na wewe kubeba mwingine 1. Wakati unafanya Aidha binary, pretty rahisi. Ningependa kufanya zaidi ya wanandoa wa haya sanity kuangalia wenyewe kabla ya kwenda huko kwa sababu hii ni pengine kitu kwamba tutaweza kuona kwenye chemsha bongo. Sasa hebu kufanya hili moja ijayo pia. Hebu kufanya tatizo 17. Sisi ni kwenda kubadilisha zifuatazo binary idadi decimal. Mimi nimepata 10100111001. Kumbuka katika video binary kwamba sikuwa Mimi nilitembea michache mifano, na mimi ilionyesha jinsi kila kitu kazi wakati wewe kufanya hivyo katika decimal. Wakati wewe ni kufanya kazi katika uwakilishi decimal Nadhani tuko katika hatua hii katika maisha yetu hivyo ufasaha katika kuwa ni pretty rahisi na Gloss juu ya mechanics ya jinsi kweli kazi. Lakini kwa kufanya recap haraka, kama mimi kuwa na idadi 137 kweli hii ina maana-na tena, hii ni katika decimal uwakilishi- idadi 137 katika decimal inamaanisha kwamba nina 1 x 100 + 3 x 10 + 7 x 1. Hii yote ni kukaa kwenye screen. Na kisha kama ukiangalia namba hizi haki hapa, 100, 10 na 1, unaweza kuona kwamba wao ni kweli nguvu zote za 10. Nina 10 ², 10 ¹, na 10 kwa sifuri. Tuna aina sawa ya kitu katika binary, isipokuwa kwamba msingi wetu, kama sisi kuiita, ni 2 badala ya 10. Hizi 10s kwamba mimi aliandika chini hapa chini, hii ² 10, 10 ¹, 10 hadi sifuri, 10 ni msingi wetu, na exponent, 0, 1, au 2, kimetajwa na nafasi ya tarakimu katika idadi hiyo sisi kuandika. 1, kama sisi kuangalia saa hiyo, hii ni katika nafasi 1 2. 3 ni katika nafasi ya 1, na ni katika nafasi ya 7 0. Hiyo ni jinsi sisi kupata mashujaa chini mbalimbali kwa ajili ya besi wetu. Kufuatia hii yote we'll-kweli, unajua nini? Tutaweza kufanya-wapi wangu tengua kifungo kwenda? Kuna unaendelea. I love this tengua kitu. Kufuatia hali hii nadhani kwa ajili yangu angalau Njia rahisi kuanza kuwabadili idadi binary au idadi hexadesimoli ambapo msingi ni 16 na si 10 au 2 ni kwa kwenda mbele na kuandika besi na mashujaa kwa wote wa namba katika namba yangu binary kwa juu. Kama sisi kuanza kutoka kushoto kwenda kulia tena, ambayo ni aina ya counterintuitive, Mimi umebadirisha nyuma mweusi hapa, tuna 2 kwa nafasi 0, na kisha tuna 2 ¹, 2 ², na kisha 2-3, 2-4, 2-5, 6, 7, 8, 9, na 10. Hizi namba I ve yameandikwa nje ni mashujaa wote. Mimi niliandika tu besi hapa katika 3 kwanza tu kwa nafasi. Katika hatua hii mimi nina kwenda mbele na mimi nina kweli kwenda kufuta mambo ambayo sisi tulikuwa katika decimal, ikiwa hiyo ni sawa. Ve got kwamba wote. Wale wa wewe kuangalia online mimi nina uhakika utakuwa na uwezo wa rewind yangu kama Ningependa. Byte nyuma kalamu. Sasa, nini tunaweza kufanya-kama wewe guys si kabisa juu kwa kasi juu ya nguvu yako ya 2, hiyo kabisa cool. Hutokea. Mimi kuelewa. Mimi mara moja alikuwa mahojiano ya kazi ambapo Niliambiwa mimi wanapaswa kujua nguvu zote za 2 juu kupitia 2 hadi 30. Haikuwa kazi mimi got. Anyway, you guys unaweza kwenda mbele na kufanya hesabu hapa, lakini kwa binary ni kweli haina mantiki, na wala haina mantiki kwa decimal au hexadesimoli aidha, kufanya math nje ambapo una zeros. Unaweza kuona nina 0 hapa, hapa 0, 0 hapa, hapa 0, 0 hapa, 0 hapa. Kwa nini wapate kuwa si mantiki ya kufanya math halisi mahesabu ya uwezo mwafaka wa 2 kwa nafasi hiyo? Hasa, kama Charlotte alisema, itakuwa ni 0. Ili kama vile kujiokoa wakati ikiwa kuhesabu mamlaka ya 2 ni si suti yako imara. Katika kesi hii sisi tu haja kwa mahesabu yake kwa 2-0 ambayo ni-? [Mwanafunzi] 1. [Nate H.] 1, 2-3 ambayo ni-? [Mwanafunzi] 8. >> [Nate H.] 8. 2-4? [Mwanafunzi] 2. Samahani, 1. [Nate H.] 2-4 ni 16, kwa usahihi. 2-5, Kevin >> 32?. [Nate H.] 32, 2-8? [Mwanafunzi] 32 x 8, 256. [Nate H.] Perfect. Na 2-10? [Mwanafunzi] 1024. [Nate H.] Yeah, 1024. Mara sisi tumepewa namba hizi tunaweza kuhitimisha yao yote juu. Na hii ni pale ambapo kwa kweli ni muhimu kufanya mambo kadhaa. Moja ni kwenda polepole na kuangalia kazi zenu. Unaweza kuwaambia kwamba kuna 1 mwishoni ya idadi hii, hivyo mimi lazima dhahiri kupata idadi isiyo ya kawaida kama matokeo yangu, kwa sababu wale wengine wote ni kwenda kuwa hata idadi kutokana na kwamba ni idadi binary. Kitu nyingine ya kufanya ni kama kupata na hatua hii ya mtihani na wewe ve yameandikwa nje hii mbali na wewe ni muda umeisha kuangalia idadi ya pointi kwamba tatizo hili ni ya thamani. Tatizo hili, kama unaweza kuona-kama mimi flip nyuma mbali yangu kweli haraka- tatizo hili ni thamani ya pointi 2, hivyo hii ni si aina ya Aidha unapaswa kwenda kwa kama wewe ni kweli taabu kwa muda. Lakini tutaweza kubadili nyuma kwa iPad, na tutaweza kwenda kwa njia hiyo kweli haraka. Mimi kama kufanya idadi ndogo ya kwanza kwa sababu mimi sioni kwamba rahisi. Mimi kama 32 na 8 kwa sababu wao kwenda pamoja pretty urahisi, na sisi kupata 50. 16 na 1 anapata 17. Kuna sisi kupata 57, na basi tunaweza kufanya mapumziko ya hii, ili tuweze kufanya 57, 156. Kuja juu. Man, vizuri, hebu angalia. Tulikuwa na 57, 256, na 1024. Katika hatua hii, nisingependa tu kwenda kupitia. Sina kidokezo. Mimi wazi haja ya kusoma juu ya hili. 7, 6, na 4, unaweza kupata 17. 1, 5, 5, 2, 13. Kisha sisi kupata 3, na kisha sisi kupata 1. 1337. Pasaka yai, mtu yeyote? Anybody kutambua idadi hii? Chris inatambua idadi. Ina maana gani, Chris? [Chris] Leet. Leet, hivyo kama wewe kuangalia hii, inaonekana kama leet. Hacker stuff. Jihadharini na kwamba aina ya mambo ya midterm au chemsha bongo, badala. Kama unaweza kuona kwamba aina ya mambo na wewe wanashangaa "huh," kwamba ili kweli maana kitu. Mimi sijui. Daudi anapenda kuweka in Ni njia nzuri ya sanity kuangalia ni. Kama sawa, siwezi kuona nini kinaendelea. Hiyo Wiki 0/Week 1 stuff. Kama sisi kubadili nyuma kwa mbali wetu sasa, zoom nje, na michache ya mambo mengine. Kuna ASCII, ambayo tumekuwa kufanya mengi ya pamoja na seti tatizo. Dhana hii ya mtaji A. Je, ni kweli kwamba? Kujua ni integer decimal. 65 ni nini ni mapped katika meza ASCII, na kwamba kwa hiyo jinsi ya kompyuta anaiandika, na kwamba ni jinsi gani tumekuwa kupata mbali kwa kweli kuandika mji mkuu wa tabia na tabia Herufi za chini katika baadhi ya hawa ufumbuzi na seti tatizo kwamba tumekuwa kufanya. michache ya mambo mengine. Sisi tumepewa kauli, misemo bulin hali,, tanzi, vigezo na threads. Wale wote wanaonekana kufanya akili kwa sehemu kubwa? Baadhi ya hii ni istilahi funky kidogo mara kwa mara. Mimi kama kufikiri ya kauli kama kwa kitu zaidi sehemu ambayo inaishia semicolon. Kauli kama vile x = 7, ambayo unaweka variable, ikatengeneza kuitwa x = 7. Takribani x ni pia aina ya kuwa wanaweza kuhifadhi namba 7, hivyo ni int au uwezekano kuelea au mfupi au Char, kitu kama hicho. kujieleza bulin ni kutumia hizi mbili ni sawa na na bang sawa au si sawa, chini ya mkuu zaidi kuliko, chini ya au sawa na, aina ya mambo ambayo yote. Masharti basi ni kama mwingine kauli. Napenda tukumbuke kwamba huwezi kuwa na mwingine bila sambamba ikiwa. Aidha, huwezi kuwa na mwingine ikiwa bila sambamba ikiwa. Tanzi, kukumbuka aina 3 ya matanzi tumekuwa hammering katika wewe kwa michache ya mwisho ya sehemu na seti tatizo. Kutumia gani wakati wakati wewe ni kupata mtumiaji pembejeo, kutumia wakati matanzi mpaka hali fulani ni kweli, na kisha kwa kutumia wale kwa matanzi kama unahitaji kujua ambayo iteration ya kitanzi wewe ni sasa juu ya ni jinsi mimi kufikiri juu yake. Au kama wewe ni kufanya kwa ajili ya tabia ya kila katika string nataka kufanya jambo fulani, kwa kila kipengele katika safu nataka kufanya kitu kwa kipengele hicho. Threads na matukio. Haya sisi si kufunikwa hivyo waziwazi katika C, lakini kumbuka hii kutoka Scratch. Hii ni dhana ya kuwa na scripts tofauti. Hii pia ni wazo hili la utangazaji tukio hilo. Baadhi ya watu hawakutumia utangazaji katika miradi yao ya awali, ambayo ni kinyume kabisa ya baridi, lakini haya ni 2 njia tofauti za utunzaji suala hili kubwa iitwayo concurrency, ambayo ni jinsi gani unaweza kupata programu kutekeleza au inaonekana nitafanya wakati huo huo? Majukumu mbalimbali mbio wakati kazi nyingine pia mbio. Hii ni jinsi mfumo wa uendeshaji wako inaonekana kazi. Hii ni kwa nini hata kama, kwa mfano, Nimekuwa got browser yangu mbio, naweza pia kurejea kwenye Spotify na kucheza wimbo. Hiyo ni zaidi ya kitu dhana kuelewa. Napenda kuangalia threads mfupi kama Ningependa kujifunza zaidi juu ya hilo. Hebu angalia, naamini kuna yangaliweza tatizo juu ya hili katika moja ya hizi. Tena, nadhani threads na matukio ni si kitu ambacho tutakuwa tumemaliza katika C tu kwa sababu ni vigumu zaidi kuliko kiasi kikubwa katika Scratch. Unapaswa na wasiwasi kuhusu hilo pale, lakini dhahiri kuelewa dhana, kuelewa nini kinaendelea. Kabla hatujaendelea, maswali yoyote juu ya Wiki 0 nyenzo? Kila mtu hisia nzuri? Kuelewa vigezo na kile kutofautiana ni? Kuendelea. Wiki 1. michache ya mambo hapa kwamba walikuwa si hasa kufunikwa katika mapitio ya jaribio lazima na pia ni zaidi ya dhana mambo ya kufikiri juu. kwanza ni hii fikra ya nini chanzo code, watunzi na code kitu ni. Anybody? Basil. Ni kitu code-I mean chanzo code ni nini kuweka ndani ya Clang, na kitu code ni nini Clang unaweka nje ili kompyuta yako inaweza kusoma mpango. Hasa. Chanzo code ni code C kwamba kweli kuyaandika. Object code ni nini kupata nje ya Clang. Ni sekunde 0 na 1s katika muundo ambao binary. Kinachotokea ni wakati wewe kuwa na rundo la files kitu, wanasema wewe ni kuandaa mradi au mpango kwamba anatumia files nyingi chanzo code, ambayo kwa mkataba wanapewa c. faili ugani. Hiyo ndiyo sababu tuna caesar.c, vigenère.c. Kama wewe ni kuandika mipango Java kuwapa ugani java.. Chatu programu ugani PY. Mara nyingi. Mara baada ya kuwa nyingi. Files c, wewe kukusanya yao. Clang mtemi yote hii Junk binary. Basi, kwa sababu wewe tu unataka 1 mpango una kiungo linker yote ya kitu hizi files pamoja ndani ya 1 faili la kutekelezwa. Hii pia ni kile kinachotokea wakati kutumia maktaba CS50, kwa mfano. Maktaba CS50 ni wote kwamba h header faili. kwamba kusoma, kwamba # includecs50.h. Na basi ni pia maalum binary maktaba faili hiyo imekuwa compiled kwamba ni sekunde 0 na 1s, na kwamba-l bendera, hivyo kama sisi kurudi nyuma kwa Spaces yetu na sisi kuangalia kweli haraka saa nini kinaendelea hapa wakati sisi kuangalia Clang amri yetu, kile tulichopata ni hii ni chanzo chetu code faili haki hapa. Hizi ni rundo la bendera compiler. Na kisha mwishoni sana, hawa-l bendera kiungo katika halisi binary files kwa maktaba hizi 2, maktaba na kisha CS50 maktaba math. Kuelewa kila aina ya madhumuni files ' katika mchakato wa kutungwa ni kitu utasikia wanataka kuwa na uwezo wa kutoa angalau wa ngazi ya juu jumla ya. Chanzo code huja in code Object hutoka nje. Object code files zilizounganishwa pamoja, na wewe kupata nzuri, executable file. Cool. Hii pia ni wapi unaweza kupata makosa katika pointi nyingi katika mchakato wa kutungwa. Hii ni wapi, kwa mfano, kama wewe kuchukua nje hii bendera kuunganisha, Bendera CS50, na wewe ni katika omit Spaces au wakati wewe ni mbio code yako, hii ni wapi utasikia kupata kosa katika awamu ya kuunganisha, na linker watasema, "Hey, wewe kuitwa GetString kazi kwamba katika maktaba CS50. " "Wewe aliniambia ilikuwa katika maktaba CS50, na siwezi kupata code kwa hilo." Hiyo ambapo una kiungo katika, na kwamba ni tofauti kutoka makosa compiler sababu compiler ni kuangalia syntax na kwamba aina ya mambo ya ajabu. Ni vizuri kujua nini kinaendelea wakati. Mambo mengine kujua juu. Naweza kusema wewe dhahiri wanataka kuangalia mfupi juu typecasting kufanyika kwa Yordani kuelewa nini ints ni chini ya Hood, nini chars ni chini ya Hood. Tunapozungumzia kuhusu ASCII na sisi kweli kuangalia meza ASCII, kile ambacho kufanya anatupa chini ya kuangalia Hood jinsi ya kompyuta kweli inawakilisha mji mkuu na 7 tarakimu na comma na swali alama. kompyuta pia ana njia maalum kuwakilisha namba 7 kama integer. Ina njia maalum kuwakilisha namba 7 kama idadi floating uhakika, na wale ni tofauti sana. Typecasting ni jinsi kumweleza kompyuta "Hey, mimi nataka kubadili kutoka uwakilishi moja kwa uwakilishi mwingine. " Mbona sisi kuangalia kwamba. Napenda pia kuchukua kuangalia mfupi juu ya maktaba na fupi juu ya compilers. Wale majadiliano kuhusu mchakato wa utungaji, kile ni maktaba, na kwenda juu ya baadhi ya maswali haya kwamba unaweza kupata aliuliza. Maswali juu ya Wiki nyenzo 1? Je, kuna mada katika hapa kwamba wanaonekana daunting Ningependa cover? Mimi nina kujaribu pigo kupitia wengi wa mada hizi mapema ili tuweze kupata kuyatumia na kufanya kidogo ya recursion. Mawazo? Chochote ili kufidia? Wakati kwa baadhi chocolate labda? You guys ni kazi kwa njia hiyo. Mimi naenda kuweka sipping juu ya kahawa yangu. Wiki 2. Nzuri wito, nzuri wito. Katika Wiki 2 tuliongea kidogo zaidi juu ya kazi. Katika seti ya kwanza wachache tatizo sisi hawakuwa kweli kuandika kazi yoyote wakati wote nyingine kuliko ambayo kazi? [Mwanafunzi] Kuu. >> Kuu, hasa. Na hivyo tumeona kwamba mavazi tofauti kuu wears. Kuna moja ambayo inachukua hoja hakuna, na sisi tu kusema utupu katika kati ya mabano, na kisha kuna mtu mwingine ambapo sisi kufanya wanataka kuchukua hoja mstari amri, na kama tuliona, hiyo ambapo una argc int na kamba argv safu au sasa kwamba tumekuwa wazi kweli string kuwa * Char kwamba ni sisi ni kwenda kuanza kuandika ni kama Char * argv na kisha mabano. Katika Tatizo Set 3, you guys alipoona rundo ya utendaji, na wewe kutekelezwa rundo la kazi, kuteka, kuangalia juu, kinyang'anyiro. prototypes walikuwa yote yaliyoandikwa pale kwa ajili yenu. Nini nilitaka kuzungumzia hapa na kazi kweli haraka ni kwamba kuna sehemu 3 kwao wakati wowote wewe kuandika kazi. Una bayana aina ya kurudi kwa kazi. Una kubainisha jina kwa ajili ya kazi, na kisha una bayana orodha hoja au orodha parameter. Kwa mfano, kama ningekuwa kuandika kazi kwa jumla juu ya rundo la integers na kisha kurudi kwangu Jumla nini itakuwa marejeo yangu aina kama alitaka sum integers na kisha kurudi Jumla? Kisha jina la kazi. Kama mimi kwenda mbele na kuandika katika kijani, sehemu hii ni aina ya kurudi. Hii sehemu ni jina. Na kisha katika kati ya mabano ni ambapo mimi kutoa hoja, mara nyingi hufupishwa kama args, wakati mwingine inaitwa zilizounganishwa kwa vigezo. Na kama una moja, wewe tu kutaja moja. Kama una nyingi wewe kujitenga kila moja kwa koma. Na kwa hoja ya kila wewe kuwapa mambo ambayo ni 2-Kevin? [Kevin] Wewe kutoa aina na kisha jina. Na kisha jina, na jina ni jina kwamba utaenda kutumia kwa kutaja hoja kuwa ndani ya kazi jumla, ndani ya kazi kwamba wewe sasa kuandika. Huna kwa-kwa mfano, ikiwa mimi nina kwenda sum up, kusema, safu ya integers-we'll kufanya safu int, na mimi nitakupa mwenyewe braces baadhi curly kuna- basi wakati mimi kupita safu ya kazi Jumla Mimi kupita katika nafasi ya kwanza ya orodha hoja. Lakini safu kwamba mimi kupita katika hana kuwa arr jina. Arr ni kwenda kuwa jinsi mimi rejea hoja kuwa ndani ya mwili wa kazi. Kitu nyingine kwamba tunahitaji kuchukua katika akaunti, na hii ni tofauti kidogo kutoka kazi, lakini nadhani ni hatua muhimu, ni kwamba katika C wakati mimi nina maandishi kazi kama hii jinsi gani mimi kujua jinsi wengi mambo ni katika safu hii? Hii ni kiasi fulani ya swali hila. Kuongelea hii kidogo kidogo katika sehemu ya mwisho wa wiki. Nitajuaje idadi ya vipengele ndani ya safu katika C? Je, kuna njia? Ni zinageuka kuwa hakuna njia ya kujua. Una kupita katika tofauti. Kuna hila ambayo unaweza kufanya kama wewe ni katika kazi moja katika safu ambayo imekuwa alitangaza, na wewe ni kufanya kazi pamoja na safu stack. Lakini hiyo kazi tu kama wewe ni katika kazi moja. Mara baada ya kupita safu ya kazi nyingine au kama umefanya alitangaza safu na wewe kuweka kwamba safu juu ya chungu, umetumia malloc  na kwamba aina ya mambo, basi wote Bets ni mbali. Kisha wewe kweli kuwa kupita kote hoja maalum au mwingine parameter ninawaambieni jinsi kubwa ni safu. Katika kesi hiyo, ningependa wanataka kutumia comma-I'm sorry, ni kwenda mbali screen hapa- na ningependa kupita katika hoja nyingine  na simu yake int len ​​kwa urefu. Jambo moja kwamba wanaweza kuja juu ya jaribio inakuomba kuandika au kutekeleza kazi fulani kuitwa kitu. Kama hatuwezi kukupa mfano, ili jambo hili zima hapa, fujo hii yote inaitwa tamko kazi au mfano kazi, hii ni moja ya mambo ya kwanza utasikia wanataka msumari chini kama si kupewa na wewe haki ya mbali juu ya chemsha bongo. hila nyingine mimi wameweza kujifunza ni kwamba wanasema sisi kufanya kukupa mfano kwa ajili ya kazi, na sisi kusema, "Hey, nimepata kuandika." Ndani ya braces curly kwamba una juu ya jaribio ikiwa utaona kwamba kuna aina kurudi na taarifa kwamba aina ya kurudi ni kitu kingine zaidi ya batili, ambayo ina maana kwamba kazi haina kurudi kitu chochote, basi jambo moja dhahiri wanataka kufanya ni kuandika baadhi ya aina ya kauli kurudi mwishoni sana ya kazi. Kurudi, na katika kesi hii, tutaweza kuweka tupu kwa sababu tunataka kujaza tupu. Lakini hii anapata wewe kufikiri katika njia ya haki kuhusu jinsi mimi kwenda kwa mbinu na tatizo hili? Na ni kuwakumbusha utaenda kuwa na kurudi thamani kwa mpigaji wa kazi. Yeah. >> [Mwanafunzi] Je style kuomba wakati sisi ni kuandika code juu ya chemsha bongo? Vile kama indentation na kwamba aina ya stuff? >> [Mwanafunzi] Yeah. Hapana, si kama mengi. Nadhani mengi ya-hii ni kitu tutaweza kufafanua juu ya chemsha bongo juu ya siku ya, lakini kwa kawaida ni pamoja na hofu juu ya # na kwamba aina ya mambo, ni aina ya nje. [Mwanafunzi] Je, unahitaji kutoa maoni yako code handwritten? Je, unahitaji kutoa maoni yako code handwritten? Akizungumza daima ni nzuri kama una wasiwasi kuhusu mikopo ubaguzi au unataka kuwasiliana dhamira yako kwa grader. Lakini mimi, tena, utathibitisha juu ya chemsha bongo yenyewe na juu ya siku quiz, lakini mimi siamini kwamba utahitajika kuandika maoni, hakuna. Kawaida si, lakini ni dhahiri aina ya kitu ambapo unaweza kuelezea nia yako, kama "Hey, hii ni pale ambapo mimi nina kwenda kwa hayo." Na wakati mwingine ambayo inaweza kusaidia kwa mikopo ubaguzi. Cool. Basil. [Basil] Nini tofauti kati ya kutangaza, kusema, int lang katika hoja au vigezo dhidi ya kutangaza variable ndani ya kazi? Wow, kahawa akashuka windpipe. [Basil] Kama ambavyo mambo sisi tunataka kuweka katika hoja. Yeah, hiyo ni swali kubwa. Jinsi gani unaweza kuchagua nini mambo unataka kuweka katika hoja dhidi ya mambo unapaswa kufanya ndani ya kazi? Katika kesi hii sisi ni pamoja na wawili hawa kama hoja kwa sababu wao ni kitu ambacho yeyote ataenda kutumia kazi Jumla inahitaji bayana mambo hayo. kazi Jumla, kama kuongelea, hana njia ya kujua jinsi kubwa ni safu anapata kutoka mpigaji wake au mwenye kutumia kazi jibu. Ina hakuna njia ya kujua jinsi kubwa safu kwamba ni. sababu sisi kupita katika urefu haki hii hapa kama hoja ni kwa sababu hiyo ni kitu ambacho sisi ni kimsingi kuwaambia mpigaji wa kazi, yeyote ataenda kutumia kazi jumla, "Hey, si tu una kutupa safu ya ints, wewe pia kutuambia jinsi kubwa safu kwamba ve ametupa ni. " [Basil] Wale wote wawili kuwa amri line hoja? Hapana, hawa ni halisi hoja kwamba ungependa kupita kwa kazi. Hebu kufanya ukurasa mpya hapa. [Basil] Kama jina ingekuwa kupita- [Nate H.] Kama mimi na int kuu (utupu), na mimi naenda kuweka katika kurudi 0 yangu hapa chini kwa chini, na kusema nataka kuita kazi jibu. Mimi nataka kusema int x = Jumla (); Kutumia kazi Jumla nina kupita katika safu wote kwamba mimi nataka jumla juu na urefu wa safu, hivyo hii ni mahali ambapo kuchukua nilikuwa safu ya ints, kusema nilikuwa int numbaz [] = 1, 2, 3, aina ya matumizi ya kwamba hacked up syntax haki pale, kisha kile atafanya ni katika jumla napenda nataka kupita katika wote numbaz na namba 3 kuwaambia kazi Jumla "Okay, hapa safu Mimi nataka wewe sum." "Hapa ni kawaida yake." Je, hiyo mantiki? Je, hiyo kujibu swali lako? Kwa njia nyingi ni gani sambamba nini tuko kufanya na kuu wakati tuna hoja mstari amri. mpango kama Kaisari cipher, kwa mfano, kwamba zinahitajika amri line hoja bila kuwa na uwezo wa kufanya chochote. Itakuwa si kujua jinsi ya encrypt kama hakuwa na kuwaambia ni nini muhimu ya kutumia au kama wewe hakumwambia ni nini string alitaka encrypt. Uvuvio kwa ajili ya pembejeo, hii ni mahali ambapo sisi tumepewa 2 taratibu mbalimbali kwa ajili ya kuchukua pembejeo katika kutoka kwa mtumiaji, kwa ajili ya kuchukua habari katika kutoka kwa mtumiaji. Kwa Matatizo Kuweka 1 tuliona hii GetInt, GetString, GetFloat njia ya uvuvio kwa ajili ya pembejeo, na kwamba wito kwa kutumia kiwango pembejeo mkondo. Ni tofauti kidogo. Ni kitu ambacho unaweza kufanya kwa wakati mmoja kama kinyume na wakati wewe waomba mpango, wakati wa kuanza mpango mbio. hoja mstari amri zote ni maalum wakati wa kuanza mbio mpango. Sisi tumekuwa kuchanganya mbili ya wale. Wakati sisi kutumia hoja ya kazi, ni kiasi kama hoja mstari amri kwa kuu. Ni wakati wewe waomba kazi unahitaji liambie nini hasa inahitaji ili kufanya kazi yake. Jambo jingine nzuri kuangalia-na mimi itabidi basi ukiangalia hiyo katika muda wako wa vipuri, na ilikuwa imefunikwa katika jaribio-ilikuwa wazo hili la wigo na mitaa vigezo dhidi ya vigezo kimataifa. Je, makini na hilo. Sasa kwamba sisi ni kupata juu ya mambo haya mengine, katika Wiki 3 tulipoanza kuzungumza kuhusu kutafuta na kuchagua. Kutafuta na kuchagua, angalau katika CS50, ni mengi sana kuanzishwa kwa baadhi ya sehemu zaidi ya nadharia ya sayansi ya kompyuta. tatizo la kutafuta, tatizo la kuchagua ni kubwa, kisheria matatizo. Jinsi gani unaweza kupata idadi fulani katika safu ya mabilioni ya integers? Jinsi gani unaweza kupata jina fulani ndani ya kitabu cha simu ambayo imehifadhiwa kwenye Laptop yako? Na hivyo kuanzisha wazo hili la mara asymptotic kukimbia kwa kweli kupima muda gani, jinsi ngumu tatizo haya ni, muda gani kuchukua kutatua. Katika, naamini, quiz 2011 humo, kuna tatizo kwamba nadhani mastahili kufunika kwa haraka sana, ambayo ni hii moja, tatizo 12. O hakuna, ni Omega. Hapa tunazungumzia muda wa kasi iwezekanavyo kukimbia kwa algorithm fulani na kisha slowest iwezekanavyo wakati kukimbia. Hii Omega na O ni kweli tu njia za mkato. Wao ni notational shortcuts kwa kusema jinsi ya kufunga katika kesi bora mapenzi algorithm wetu kukimbia, na jinsi polepole katika kesi mbaya zaidi kutokea itakuwa algorithm wetu kukimbia? Hebu kufanya michache ya haya, na haya pia yalipendekezwa katika muda mfupi juu ya nukuu asymptotic, ambayo mimi sana kupendekeza. Jackson alifanya kazi nzuri kwa kweli. Pamoja na tafuta binary, tunazungumzia kuhusu tafuta binary kama kuwa algorithm, na sisi kwa kawaida kuzungumza juu yake katika suala la O. yake kubwa Nini ni O kubwa? Nini ni madogo zaidi iwezekanavyo kukimbia wakati wa tafuta binary? [Mwanafunzi] N ²? Close, mimi nadhani sawa na kwamba. Ni mengi zaidi kuliko hiyo. [Mwanafunzi] binary? >> Yeah, binary tafuta. [Mwanafunzi] Ni logi n. Ingia n, hivyo nini kuingia n maana? Ni halves hivyo kila iteration. Hasa, hivyo katika kesi slowest inawezekana, kusema kama una safu sorted ya integers milioni na idadi wewe ni kuangalia kwa aidha ni kipengele sana kwanza katika safu au kipengele sana mwisho katika safu. Kumbuka, binary tafuta algorithm kazi kwa kuangalia kipengele katikati, kuona kama kwamba ni mechi kwamba wewe ni kuangalia kwa. Kama ni, basi kubwa, wewe kupatikana. Katika kesi bora, jinsi ya kufunga haina binary tafuta kukimbia? [Wanafunzi] 1. 1, ni mara kwa mara wakati, kubwa O ya 1. Yeah. [Mwanafunzi] nina swali. Wakati kusema logi ya n, maana kwa heshima na msingi 2, sawa? Ndiyo, hivyo hilo ni jambo nyingine. Sisi tunasema n logi, na mimi nadhani wakati mimi nilikuwa katika shule ya sekondari Mimi daima kudhani kuwa logi ilikuwa msingi 10. Yeah, hivyo ndiyo, ingia msingi 2 kawaida ni nini sisi kutumia. Tena, kurejea tafuta binary, kama wewe ni kwa ajili ya kutafuta ama kipengele mwishoni sana au kipengele katika mwanzo sana, kwa sababu ya kuanza katikati na kisha wewe Discard namna yoyote nusu haifikii vigezo kwamba wewe ni kuangalia kwa, na wewe uende kwa nusu ya pili na nusu ujao na nusu ijayo. Kama mimi nina kwa ajili ya kutafuta kipengele kubwa katika safu milioni integer Mimi naenda kupunguza nusu yake katika logi zaidi ya mara milioni 1 kabla mimi hatimaye kupima na kuona kwamba kipengele nina kuangalia kwa ni katika kubwa au katika ripoti juu ya safu, na kwamba itachukua logi ya n, logi ya mara milioni 1. Bubble aina. Je guys kukumbuka aina Bubble algorithm? Kevin, unaweza kunipa recap ya haraka ya kile kilichotokea katika algorithm aina Bubble? [Kevin] Kimsingi huenda kwa njia ya kila kitu katika orodha. Inaangalia mbili kwanza. Kama moja ya kwanza ni kubwa kuliko ya pili ni swaps yao. Kisha inalinganishwa pili na wa tatu, kitu kimoja swaps, tatu na nne, kila njia ya chini. Bigger idadi kufuata hadi mwisho. Na baada ya matanzi hata hivyo wengi wewe ni kosa. Hasa, hivyo nini Kevin alisema ni kwamba tutaweza kuangalia idadi kubwa Bubble hadi mwisho wa safu. Kwa mfano, je, wewe akili kutembea kwetu kupitia mfano huu kama hii ni safu yetu? [Kevin] Wewe itabidi kuchukua 2 na 3. 3 ni kubwa kuliko 2, hivyo byta yao. [Nate H.] sawa, hivyo sisi byta hizi, na hivyo kupata 2, 3, 6, 4, na 9. [Kevin] Kisha kulinganisha 3 na 6. 3 ni ndogo kuliko 6, hivyo waache, na 6 na 4, wewe d byta yao kwa sababu 4 ni ndogo kuliko 6. [Nate H.] sawa, hivyo mimi kupata 2, 3, 4, 6, 9. [Kevin] Na 9 ni kubwa kuliko 6, hivyo kuondoka. Na wewe d kwenda nyuma kupitia tena. [Nate H.] Am I kufanyika katika hatua hii >> [Kevin] No? Na kwa nini mimi si kufanyika katika hatua hii? Kwa sababu inaonekana ni kama safu yangu ni Iliyopangwa. Mimi nina kuangalia saa yake. [Kevin] Nenda kwa njia hiyo tena na kuhakikisha kwamba hakuna zaidi swaps kabla unaweza kikamilifu kuacha. Hasa, hivyo unahitaji kuendelea kupitia na kuhakikisha kwamba hakuna swaps kwamba unaweza kufanya katika hatua hii. Ni kweli tu bahati, kama wewe alisema, kwamba sisi kuishia tu baada ya kufanya 1 kupita na sisi ni Iliyopangwa. Lakini kwa kufanya hii katika kesi ya jumla tutaweza kweli kufanya hii tena na tena. Na kwa kweli, hii ilikuwa mfano wa kesi bora iwezekanavyo, kama tulivyoona katika tatizo. Tuliona kwamba kesi bora ilikuwa n. Tulipitia wakati safu 1. Je, ni kesi mbaya zaidi kutokea kwa algorithm hii? [Kevin] N ². Na nini kuangalia kwamba kama? Nini kuangalia safu kama hiyo bila kuchukua n ² muda? [Kevin] [inaudible] Iliyopangwa. Hasa, hivyo kama mimi alikuwa na safu 9, 7, 6, 5, 2, kwanza 9 ingekuwa Bubble njia yote juu. Baada iteration 1 tunatarajia kuwa na 7, 6, 5, 2, 9. Kisha 7 ingekuwa tutuka, 6, 5, 2, 7, 9, na kadhalika na kadhalika. Tunatarajia kwenda kupitia safu nzima n nyakati, na unaweza kweli kupata kidogo sahihi zaidi kuliko huu sababu mara tumekuwa wakiongozwa 9 njia yote juu katika nafasi yake ya mwisho iwezekanavyo Tunajua kwamba sisi kamwe kuwa na kulinganisha dhidi ya kipengele kwamba tena. Mara sisi kuanza bubbling 7 hadi Tunajua kwamba sisi inaweza kuacha mara moja 7 ni sawa mbele ya 9 tangu tumekuwa tayari ikilinganishwa 9 kwa hiyo. Kama wewe kufanya hili katika njia smart siyo kweli, mimi nadhani, kwamba muda kiasi. Wewe hutaenda kulinganisha inawezekana wote [inaudible] michanganyiko kila wakati kwenda kwa njia ya kila iteration. Lakini bado, tunapozungumzia amefungwa hii juu sisi kusema kwamba wewe ni kuangalia n ² kulinganisha wote njia ya kupitia. Hebu kwenda nyuma, na tangu tuko mapya ya kupata kidogo mfupi juu ya wakati Naweza kusema unapaswa dhahiri kupitia mapumziko ya meza hii, kujaza yote nje. Fikiria mifano. Fikiria mifano halisi. Hiyo ni kweli Handy na kusaidia kufanya. Atayateka. Hii ni aina ya meza hiyo kama kupitia katika sayansi ya kompyuta unapaswa kweli kuanza kujua haya moyo kwa. Hizi ni aina ya maswali ya kupata katika mahojiano. Hizi ni aina ya mambo ambayo ni vizuri kujua, na fikiria juu ya kesi hizo makali, kweli kuhesabia nje ya jinsi ya kufikiri juu ya tukijua kwamba kwa Bubble aina safu mbaya zaidi kutokea kuchambua na kwamba ni moja ambayo ili reverse. Kuyatumia. Hebu kuzungumza kidogo kuhusu kuyatumia. Katika dakika chache zilizopita sisi hapa Mimi najua hili ni jambo pamoja na faili I / O kwamba ni badala mpya. Tunapozungumzia kuhusu sababu kuyatumia tunataka kuzungumza juu ya kuyatumia ni kwa sababu, moja, wakati sisi ni kazi katika C sisi ni kweli katika ngazi ya haki ya chini ikilinganishwa na ya kisasa zaidi ya programu lugha. Sisi ni kweli na uwezo wa kuendesha vigezo katika kumbukumbu, takwimu nje ambapo ni kweli iko ndani ya RAM yetu. Mara ve gone juu ya kuchukua madarasa mfumo wa uendeshaji utaona kwamba hiyo ni, tena, aina ya matumizi. Hiyo si kweli kesi. Sisi tumepewa kumbukumbu virtual hiyo mafichoni wale maelezo kutoka kwetu. Lakini kwa sasa unaweza kudhani kwamba wakati una mpango, kwa mfano, wakati wa kuanza mbio yako Kaisari cipher mpango- Mimi itabidi kubadili nyuma kwa iPad wangu kweli haraka- kwamba katika mpango wa mwanzo yako, kama una, kusema, 4 gigabytes ya RAM kwenye Laptop yako, kupata kuweka kando hii chunk, na tutaweza wito huu RAM. Na ni kuanza katika mahali tunakwenda kuwaita 0, na inaishia katika eneo ambalo Tutamwita gigabytes 4. Mimi kwa kweli hawezi kuandika. Mtu, kwamba ni hacked. Wakati mpango wako executes mfumo wa uendeshaji carves up RAM, na ni bayana makundi mbalimbali kwa ajili ya sehemu mbalimbali za programu yako ya kuishi ndani Chini hapa eneo hili ni aina ya nchi za mtu yeyote. Wakati wewe kwenda mbele kidogo hapa nimepata kweli mahali ambapo code kwa maisha yako mpango. Hiyo halisi code binary, faili kwamba executable kweli anapata kubeba katika kumbukumbu wakati kukimbia mpango, na anaishi katika sehemu code. Na kama programu yako executes processor inaangalia sehemu hii code kufikiri nini ni mafundisho ya pili? Je, ni line ya pili ya code nahitaji nitafanya? Kuna pia sehemu data, na hii ni mahali ambapo constants string wale kupata kuhifadhiwa kwamba tumekuwa kutumia. Na kisha mbali zaidi juu kuna hii sehemu iitwayo lundo. Sisi kupata kumbukumbu katika huko kwa kutumia malloc, na kisha kuelekea sana juu ya mpango wako kuna stack, na hiyo ambapo sisi tumekuwa kucheza kwa zaidi ya mwanzo. Hii si kwa wadogo au kitu chochote. mengi ya hii ni sana mashine tegemezi, mfumo wa uendeshaji tegemezi, lakini hii ni kiasi gani mambo kupata chunked up. Wakati wewe kukimbia na mpango na wewe kutangaza variable kuitwa x- Mimi naenda kuteka mwingine sanduku chini chini, na hii itakuwa ni RAM pia. Na mimi nina kwenda kuangalia. Tutaweza kuchora mistari jagged kuonyesha hii ni tu sehemu ndogo ya RAM na si wote ni kama sisi kuteka saa ya juu. Kama mimi kutangaza variable integer kuitwa x, basi nini mimi kweli kupata ni ramani kwamba ni kuhifadhiwa katika meza ishara ya mpango wangu kuwa unajumuisha x jina kwa eneo hili la kumbukumbu kwamba nimepata inayotolewa haki hapa kati ya baa wima. Kama mimi na mstari wa kanuni katika mpango wangu kwamba anasema x = 7 processor anajua "Oh, okay, najua kwamba x maisha katika eneo hili katika kumbukumbu." "Mimi nina kwenda mbele na kuandika 7 huko." Jinsi gani kujua nini eneo hili ni katika kumbukumbu? Naam, kwamba ni yote kufanyika kwa wakati kukusanya. compiler inachukua huduma ya kugawa ambapo kila moja ya vigezo ni kwenda na kujenga ramani maalum au badala ya kuunganisha dots kati ya alama na ambapo ni kwenda, variable ya jina na ambapo ni kwenda kuishi katika kumbukumbu. Lakini zinageuka kuwa tunaweza kweli kupata hiyo katika mipango yetu pia. Hii anapata muhimu wakati tunaanza kuzungumza kuhusu baadhi ya miundo data, ambayo ni dhana kwamba sisi ni kwenda kuanzisha baadaye. Lakini kwa sasa, nini unaweza kujua ni kwamba mimi unaweza kujenga pointer eneo hili, x. Kwa mfano, mimi unaweza kujenga variable pointer. Tunapozalisha variable pointer sisi kutumia nukuu nyota. Katika kesi hiyo, hii anasema mimi nina kwenda kujenga pointer int. Ni aina tu kama mtu mwingine yeyote. Sisi kuwapa variable kama y, na kisha sisi kuweka sawa na anuani, kwa anwani. Katika kesi hiyo, tunaweza kuweka y kwa uhakika na x kwa kuchukua anuani ya x, ambayo sisi kufanya na ampersand hii, na kisha sisi kuweka y kwa uhakika na hilo. Nini hii haina ni kimsingi kama tunaangalia RAM wetu hii inajenga variable tofauti. Ni kwenda kumwita y, na wakati huu mstari wa kanuni executes ni kweli kwenda kujenga pointer kidogo ambayo sisi kawaida kuteka kama mshale, na unaweka y kwa uhakika na x. Ndiyo. [Mwanafunzi] Kama x ni tayari pointer, ingekuwa wewe tu kufanya int * y = x badala ya kuwa ampersand? Ndiyo. Kama x ni tayari pointer, basi unaweza kuweka kuyatumia 2 sawa kwa kila mmoja, katika kesi ambayo y bila uhakika na x, lakini ingekuwa kumweka kwa chochote x ni akizungumzia. Kwa bahati mbaya, sisi ni nje ya muda. Nini napenda kusema katika hatua hii, tunaweza kuongea kuhusu offline hii, lakini napenda kusema ya kuanza kazi kwenye tatizo hili, # 14. Unaweza kuona kuna tayari kidogo kujazwa ndani kwa ajili yenu hapa. Unaweza kuona kwamba wakati sisi kutangaza kuyatumia 2, int * x na y *, na kumbuka kuwa akizungumzia * ijayo kwa kutofautiana ni jambo ambalo lilifanyika mwaka jana. Ni zinageuka kuwa hii ni sawa na kile sisi ni kufanya mwaka huu. Haijalishi ambapo unaandika * wakati wewe ni kutangaza pointer. Lakini sisi wameandika * ijayo kwa aina sababu ambayo inafanya wazi kwamba wewe ni kutangaza variable pointer. Unaweza kuona kwamba kutangaza kuyatumia 2 inatupa masanduku 2. Hapa wakati sisi kuweka x sawa na malloc nini hii ni kusema ni kuweka kando kumbukumbu katika lundo. Sanduku Hii kidogo hapa hapa, hii mduara, iko kwenye chungu. X ni akizungumzia yake. Kumbuka kwamba y bado si akizungumzia chochote. Ili kupata kumbukumbu-kuhifadhi namba 42 ndani ya x tunataka kutumia nini nukuu? [Mwanafunzi] * x = 42. Hasa, * x = 42. Hiyo ina maana kufuata mshale na kutupa 42 katika huko. Hapa ambapo sisi kuweka y na x tuna y akizungumzia x. Tena, hii ni kama yale Kevin alisema ambapo sisi kuweka y sawa na x. Y si akizungumzia x. Badala yake, ni akizungumzia nini x ni akizungumzia pia. Na kisha hatimaye katika sanduku hii ya mwisho kuna 2 iwezekanavyo mambo ambayo tunaweza kufanya. Moja ni tunaweza kusema * x = 13. Jambo jingine ni tunaweza kusema-Alex, unajua nini tunaweza kufanya hapa? Unaweza kusema * x = 13 au- [Mwanafunzi] Unaweza kusema chochote int. [Nate H.] Kama hili walikuwa inajulikana kama variable int tunaweza kufanya hivyo. Tunaweza pia kusema * y = 13 kwa sababu wao ni wawili akizungumzia nafasi sawa, hivyo tunaweza kutumia ama variable ya kufika huko. Yeah. >> [Mwanafunzi] gani ni kuangalia kama ikiwa sisi tu kusema x int ni 13? Kwamba itakuwa kutangaza variable mpya iitwayo x, ambayo si kazi. Tunatarajia kuwa na mgongano kwa sababu sisi alitangaza x kuwa pointer hapa juu. [Mwanafunzi] Kama sisi tu alikuwa na kwamba taarifa na yenyewe itakuwa ya namna gani kuangalia kama katika suala la mduara? Kama tungekuwa na x = 13 basi tunatarajia kuwa na sanduku, na badala ya kuwa na mshale kuja nje ya sanduku tunatarajia kuteka ni kama 13 tu. [Mwanafunzi] Katika sanduku. Sawa. Asante kwa kuangalia, na bahati nzuri juu ya Quiz 0. [CS50.TV]