[Powered by Google Translate] DAVID J. Malan: zote haki, hii ni CS50, na hii ni kuanza ya wiki mbili. Asante. Hebu tuanze hapa kwa simu. Mimi nina kuhusu piga 617-BUG-CS50. CS50: Hii ni CS50. Kwa Boy Shuttle, vyombo vya habari 1. Kuanza juu, waandishi wa 9. DAVID J. Malan: Hivyo alisema kwa Shuttle Boy, vyombo vya habari 1. Hivyo sisi ni kwenda kwa vyombo vya habari 1. CS50: Nini asili yako? Kwa Quad, vyombo vya habari 1. Mather, vyombo vya habari 2. Boylston, vyombo vya habari 3. Lamont, vyombo vya habari 4. Wanachama Hall, vyombo vya habari 5. Kuanza juu, waandishi wa 0. DAVID J. Malan: Tutaweza waandishi 1 kwa quad. CS50: shuttle Ifwatayo majani dakika hii, saa 1:10, na kisha saa 1:20, 1:30, 1:40. Hii ni CS50. DAVID J. Malan: Hivyo hii ni sauti ya CS50. Na ni mfano wa aina ya miradi ya mwisho, kwa mfano, unaweza bite mbali kuelekea mwisho wa muhula. Kwa mfano, shuttleboy.cs50.net kwamba ipo - kweli mradi kwamba mimi kwanza aliandika baada ya kuchukua CS51 nyuma nilipokuwa shahada ya kwanza. Na msukumo hapa ilikuwa nyuma basi, wote walikuwa na alikuwa kuchapishwa shuttle bus ratiba, na kulikuwa hakuna dhana ya kuangalia mambo juu online. Na hivyo mimi aina ya njiwa katika wiki moja, akamwaga kupitia kuchapishwa ratiba, na ported kwa programu ya kompyuta. Wakati huo, programu ya kompyuta kilichotokea kwa kuandikwa katika C. Na kweli mbio hivyo kwa kuandika Boy Shuttle katika blinking kuchochea kama tumekuwa kufanya hivyo sasa. Lakini zaidi ya miaka, ni tolewa katika papo ujumbe BoT. Ni tolewa hivi karibuni zaidi katika tovuti hii, katika SMS-msingi chombo, kama vile katika chombo hiki sauti-msingi. Na hii ni ya ladha katika aina ya mambo ambayo unaweza kufanya wewe mwenyewe na mwisho wa muhula. Kwa mfano, kuna, toleo SMS ya Boy Shuttle hutokea kufanya kazi kama ifuatavyo. Kama, juu ya kiini simu yako, kutuma ujumbe wa maandishi kwa 41,411 na kisha kutuma maalum ishara sboy, kwa Boy Shuttle, ikifuatiwa na B na, ambapo ni asili na B ni marudio - kwa mfano, Boylston Space Quad - nini unapaswa kupata nyuma ndani ya sekunde chache ni Nakala ujumbe kutoka Boy Shuttle ninakuambia kwa uhakika wakati ijayo shuttles chache ni, kutoka uhakika kwamba anaenda kwamba uhakika B. Na huu ni mfano zaidi ya jumla ya nini inayojulikana kama kutumia API. Hivyo kwa mfano, hii hapa ni tu shuttleboy.cs50.net, halisi ya mtandao msingi mwili wa hii. Lakini data kwamba inasisitiza programu hii na nyingine kwamba CS50 maendeleo ina wote ni wazi kwa kila mtu hapa katika fomu wa APIs, maombi ya programu interfaces. Na kwamba ni njia tu ya dhana ya kusema kwamba watu kama sisi juu ya Internet na wengine alitumia muda kujenga programu kwamba unaweza kutumia ili kunyakua data kutoka kwetu na kisha kujenga maombi yako mwenyewe juu ya kwamba kuweka data. Hivyo kwa mfano, hii Boy Shuttle API ukurasa hapa, ambayo hutokea kwa kuwa katika mwongozo CS50, kimsingi nyaraka jinsi gani unaweza kwenda juu ya kuomba servrar CS50 kwa data. Kwa mfano, kama wewe ni ukoo na CSV files, comma kutengwa maadili, hizi ni tu aina ya haraka na chafu Excel-kama files. Hivyo unaweza kuuliza Shuttle Boy kwa wote wa data juu ya yote ya nyumba zao na kuratibu GPS, na utapata nyuma, kimsingi, spreadsheet kama kwamba basi unaweza kusoma katika mpango wa yako mwenyewe na kisha kutoa matokeo, kama Shuttle Boy yenyewe kinachotokea kwa kuwa kufanya. Kwa wale zaidi ya ukoo, wa kisasa zaidi data uwakilishi pamoja JSON, JavaScript Object nukuu. Kitu atakuja nyuma yenu kuelekea mwisho wa muhula. Lakini tena, hii ni moja tu ya kadhaa ya APIs CS50 ya mwenyewe. Na jambo la kusisimua ni sasa, siku hizi, Facebook na Twitter na Google na pretty much kila tovuti maarufu nje kuna ina aina fulani ya API, ambayo ina maana kama wewe kusoma nyaraka kwenye tovuti yao, ishara kwa ajili ya akaunti, basi unaweza kuanza kuandika programu juu ya chochote zana au data kwamba kampuni huko hutoa. Na hivyo mmoja wa wenzake yetu wenyewe mafundisho miaka michache nyuma aliandika toleo la Mac ya hili. Hivyo katika kiungo yenye jina la Mac hapa juu kushoto, unaweza kweli download Mac OS widget kwamba anaendesha Mac yako mwenyewe kufanya huo aina ya mambo. Hivyo ni wote kuhusu kujenga juu ya seti data kama hizi. Lakini zaidi juu ya kwamba upande wa mwisho wa muhula. Hivyo hebu kupiga mbizi katika haraka ya kweli, na mdudu, tu aina ya kupata mambo moto juu leo, na kufikiri nyuma katika baadhi ya mambo tuliyoyaangalia wiki iliyopita. Hasa, napenda kwenda mbele na kuvuta, kusema, mfano huu hapa. Buggy1.c, hii inapatikana kwenye tovuti ya shaka ikiwa wewe d kama shusha ni na poke kuzunguka mwenyewe. Lakini hebu zoom katika hapa katika mpango huu uungwana mfupi, na tu recap super-haraka wa baadhi ya vitalu ya msingi jengo kweli sisi ni kwenda kuanza tu kuchukua kwa nafasi. Hivyo mambo ya bluu, katika mistari ya 1 kwa 9, ni tu Softball maswali. Basi hizi ni baadhi tu ya maoni. Hawana maana kazi. Lakini wao ni maoni katika maana ya kwamba wao ni maelezo kwamba Mimi, binadamu, alifanya mwenyewe ili kwamba katika hotuba na baada ya hotuba, kweli mimi kukumbuka nini mpango huu gani bila ya kuwa na kusoma kupitia line hiyo kwa mstari na recreating historia katika akili yangu. Tena, ikiwa mimi mkono mpango huu kwa mtu mwingine kama wewe, ni wazi sana na wewe, kwa sababu ya maoni kama hii, nini mpango ni kweli kufanya, au angalau kile mpango walidhani kuwa kufanya. Kama au ni sahihi ni suala jingine kabisa. Sasa, katika C, pamoja na maoni mbalimbali ya mstari, kukumbuka kuwa kwenye mstari moja hapa ni ishara uchawi, / *. Ina maana hiyo inakuja mwanzo wa maoni. Na kitu kingine mambo mpaka kufikia Terminator mwisho, ambayo ni * /, kinyume. Hivyo ukweli kwamba nina-80 baadhi nyota isiyo ya kawaida hapa kutoka kushoto na kulia ni kweli tu undani aesthetic. Ina maana hakuna kazi. Sasa vipi kuhusu mstari 11? Je, hii kufanya katika suala layman? Nini hiyo? Watazamaji: Ni pamoja na kiwango. DAVID J. Malan: OK, nzuri. Hivyo ni pamoja na maktaba stdio.h. Hiyo ni nini maana ya kwamba? Naam, ndani ya faili kwamba, stdio.h, ni rundo zima la kazi maazimio - kwamba ni, kificho kwamba mtu mwingine aliandika. Na mfano kamili wa kazi hiyo alitangaza katika stdio.h ni - ambayo favorite kwa sasa? Hivyo printf, mmoja wa wale wa kawaida kutumia, hakika mapema, kutoka maktaba ambayo ni huko. Kama mimi kuwatenga kwamba mstari wa kanuni, Clang ni kwenda yell saa yangu kitu kuhusu kutumia alama Undeclared. Kitu Undeclared pengine ni Keyword, kwa sababu hatuna taarifa compiler nini printf inaonekana kama isipokuwa sisi ni pamoja na kuwa mstari. Na zaidi chini ya ardhi, kwa kweli, nini mstari kwamba ni kusema ni kufungua faili, stdio.h, popote ni juu ya server ngumu kuendesha gari, au appliance vigumu kuendesha gari, na nakala-kuweka ni haki pale katika faili wangu, bila wangu baada ya kufanya kwamba manually. Sasa, mara sisi kupata chini hapa kuu, kabla ya muda mrefu tutaweza kuanza teasing mbali kile int na kile utupu ni. Lakini kwa sasa, hebu angalia mistari mitatu ndani ya 15 kupitia kwa 17. Hii hapa mimi kudai kama Buggy. Line 7 katika maoni yangu anasema "Je magazeti 10 asterisks lakini haina ". nini hii si magazeti, kwa kweli, 10 vile nyota? Watazamaji: [inaudible]. DAVID J. Malan: Hasa. Hivyo taarifa kwamba sisi ni mapya kwa kuhesabu kutoka 0. Na hii ni kweli mkataba katika programu na sayansi ya kompyuta kwa ujumla zaidi, kuanzia kuhesabu kutoka 0 badala ya 1. Na hii kweli tu hupata kutokana na ukweli kwamba, kwa mfano, wakati tulikuwa watu nane juu ya hatua, wakati hakuna mtu kuinua mikono yao, walikuwa zeros ufanisi wote. Na hivyo ni aina tu ya mkataba kompyuta hivyo, hiyo, kwa kuanza kuhesabu kutoka 0. Kama kwamba ni idadi ya chini unaweza kuwakilisha katika binary. Hivyo hapa tumekuwa kuanza initializing i kwa 0. Tumekuwa kuweka i sawa na 0. Lakini basi mimi alifanya hii kosa hapa, akisema i ni chini ya au sawa na 10. Lakini kama unadhani kwamba kupitia, kama mimi kuanza saa 0 na kisha nitamwendea hadi 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, mimi nina kweli kwenda magazeti nje nyota 11 kwa screen, kwa sababu mimi tumeenda juu kwa na kuwa sawa na 10. Hivyo fix rahisi hapa basi ni nini? Watazamaji: [inaudible]. DAVID J. Malan: Just kubadilisha kwa chini ya. Kama kweli unataka, unaweza kufanya hivyo. Lakini kwa ujumla, kwamba ni kipaji juu. Na hivyo kuanza kuhesabu kutoka 0 ni tu kitu unapaswa kawaida kupata kutumika. Sasa, nini kuhusu hii ya kujenga nzima katika yenyewe? Hii mstari 15 demarks kwa kitanzi. Hivyo kwa si kazi. Ni tu taarifa. Ni kujenga looping, kama tulivyoona katika Scratch. Na ina sehemu tatu. Ona kwamba kuna sehemu ya kwanza ya kushoto wa semicolon. Kuna sehemu ya katikati katika kati ya semicolons mbili. Na kisha kuna sehemu kulia kwa haki ya semicolon pili. Sasa, kwanza wa haya ni nini? Watazamaji: [inaudible]. DAVID J. Malan: Nyuma huko? Yeah? Watazamaji: initialization. DAVID J. Malan: initialization. Basi nini maana ya hii? Sisi wametangaza variable kuitwa i. Ni ya int aina, kwa sababu nimekuwa maalum int i. Na mimi nina initializing i kwa thamani ya 0. Basi nini hii kwa kweli kusema? Ni kwa ufanisi akisema kwa kompyuta hey, nipe kutosha kumbukumbu, ya kutosha RAM, fit idadi, na kisha kuweka idadi 0 katika kwamba chunk ya RAM. Na kama kando, jinsi kubwa ni int kawaida, angalau ndani ya wa appliance? Watazamaji: 32 kidogo. DAVID J. Malan: 32 bits. Hivyo kwamba maana nipe bits 32, inayojulikana kama ka 4, na kuweka 0 thamani ndani yake, ambayo ni pretty rahisi kwa sababu tu maana ya kuweka bits wote 0. Hivyo sasa, sehemu ya pili hapa ni hali hiyo. Na hali, kama jina linavyosema, ni nini ni checked tena na tena na tena ya kama ni kweli au uongo. Hivyo hii ni kusema tu kufanya mistari ifuatayo ya maadili - yaani mstari 16, kwa sababu hiyo ni moja tu indented chini - hivyo muda mrefu kama i ni chini ya 10. Na baada ya kila iteration kupitia kitanzi hii, kufanya incrementation, ambayo katika kesi hii ni i + +. Sasa, haina kuwa i + +. Ni inaweza kuwa i -. Lakini kama mimi alifanya hili, nini tabia kwenda kuwa na mpango huu? Watazamaji: Ni kwenda kuwa kitanzi usio. DAVID J. Malan: Ni kwenda kuwa baadhi ya aina ya kitanzi usio, isipokuwa sisi kupata bahati baada ya 2 hasi bilioni au hivyo. Labda mambo litamalizika kote, tu na asili ya finite idadi ya bits kwamba tumetenga kwa int. Lakini ni hakika ya kwenda iterate mbali zaidi ya 10 na hakika zaidi ya mara 11 hapa. Na sasa, tu kama kando, kutambua kwamba i + + na i - ni kweli tu kisintaksia sukari. Ni tu shorthand nukuu kwa nini zaidi kidogo waziwazi imeandikwa kama ifuatavyo: i = i + 1. Hiyo ni sawa na i + +. Ni aina tu ya inaonekana prettier kusema i + +. Ni zaidi succinct, zaidi someka. Na hivyo watu wengi kuwa badala. Lakini hii ni kufanana functionally kwa nini sisi tu kuona. Hivyo katika muda mfupi, kurekebisha haraka hapa ni tu kusema iterate i kutoka 0 njia yote hadi chini ya 10. Na kisha tutaweza kweli kupata nyota 10. Basi hebu jaribu hii. Hebu kufungua terminal chini. Hebu kwenda katika saraka ya kwamba hii ni in Na mimi naenda kukusanya ni manually na Clang kwa sasa. Na mimi naenda kukusanya hii kama buggy1.c, Ingiza. Na sasa buggy1, ni kwa nini kuna hakuna vile faili au directory kuitwa buggy1? Watazamaji: [inaudible]. DAVID J. Malan: Yeah. Hivyo ni kweli kuitwa a.out. Hivyo kukumbuka kama wewe kukimbia tu Clang, ambapo Clang ni compiler, na huna taja jina unataka kutoa kwa mpango wako, ni kwenda default kwa a.out. Hivyo kweli, kama ninafanya ls - oops. Na mimi didn't - suala nyeusi-na-nyeupe baadhi ya wewe wanakabiliwa imekuwa fasta. Lakini basi mimi kufanya hili. Kuna tuna a.out upande wa mkono wa kushoto huko. Hivyo inabidi kukimbia a.out badala ya buggy1. Hivyo basi mimi kwenda mbele na kufanya hili. . / A.out, Ingiza. Na mimi inaonekana hawakuwa kufanya nini? Watazamaji: Hifadhi. DAVID J. Malan: Ila faili yangu. Hivyo kwamba ni kwa urahisi kutatuliwa kwa kupiga Document S, au kwenda kwa Picha, Ila, kama katika programu nyingi. Hebu kwenda chini hapa, wazi screen, kukimbia tena. Na bado kuna mdudu. Hivyo ni nini kinaendelea - Watazamaji: You hawakuwa kukusanya. DAVID J. Malan: Ah, nzuri. Sikuweza kukusanya yake. Kama idiot, mimi nina kuangalia code kuona nini kibaya. Hivyo Clang buggy1.c, sasa a.out. Na phew, kuokolewa. Hivyo inaonekana kidogo ugly sababu hakuna mstari mpya mahali popote katika mpango. Lakini tena, kwamba tu undani aesthetic. Na angalau kama sisi kuhesabu wale nje, tunapaswa sasa kuona nyota 10 vile. Naam, nini kuhusu mfano huu wa pili joto-up? Hivyo katika buggy2, mimi kudai kwamba toleo hili, pia, magazeti 10 nyota, moja kwa kila mstari. Hivyo wakati huu, nina tabia newline, tu kufanya mambo kidogo prettier. Lakini badala nini mimi kupata ni hii. Hivyo basi mimi kufanya Clang buggy2.c, Ingiza. Sasa ni mara ya pili wakamwita a.out. Kuingia. Mimi tu kuona moja mpya line, tu sana mwisho mpya line kwamba hatua ya haraka yangu line ijayo. Na bado wazi nimekuwa uchapishaji *, basi line mpya, *, Kisha mstari mpya. Lakini nini mdudu hapa? Yeah? Watazamaji: [inaudible]. DAVID J. Malan: Hasa. Hivyo tofauti na baadhi ya lugha, kama Chatu, ambapo anatengeneza kweli ina maana kazi, katika Lugha kama C - kama tutaweza kuona, PHP, JavaScript - indentation ni kweli tu kwa faida ya binadamu '. Hivyo ukweli kwamba nimepata indented mstari 16 na 17 inaonekana kubwa, lakini hauna maana kazi hapa. Kama mimi nataka wote mistari na nitafanya kama sehemu ya kwa kitanzi, basi mimi lazima uambatanishe yao katika braces curly kwa kufanya hivi. Unaweza tu kukata kona na omit braces curly ikiwa nini kesi? Watazamaji: Just mstari mmoja. DAVID J. Malan: Just mstari mmoja. Basi hiyo ni tu aina ya aina nzuri ya undani syntax ili wewe si kupoteza muda kuandika mistari mitatu, wawili ambao ni curly braces, tu kuandika line moja ya maadili. Lakini kama una mistari miwili au zaidi, sisi kweli haja ya kufanya hili. Hivyo sasa napenda kuokoa hii. Hebu kwenda mbele na kuendesha upya Clang. Basi mimi rerun a.out, na sasa mimi kupata yao moja kwa kila mstari. Sasa, a.out tena ni aina ya jina bubu kwa mpango. Nawezaje kumweleza Clang kwa kweli nipe jina la faili hiyo ni zaidi user-kirafiki, kama buggy2 yenyewe? kidogo zaidi kwa uwazi? Watazamaji: [inaudible]. DAVID J. Malan: OK, hivyo mimi kweli anaweza kuchukua sana user-kirafiki mkato na kuandika tu kufanya buggy2. Mimi si kutaja c. Katika kesi hii, na hit Enter. Na nini kufanya hivyo ni kwa ajili yangu inaandaa buggy2.c na kuuliza Clang ya kufanya hivyo. Hasa, ni wito Clang, ni anaendesha Clang kutumia njia zaidi amri-line hoja au swichi kuliko mimi kwa kweli wanahitaji. Katika wakati, tutaweza kuja nyuma kwa nini yote haya mbalimbali cryptic misemo hyphenated maana yake. Lakini kwa sasa, hiyo tu kuniokoa shida ya kuwa na kukumbuka na kuwa na aina nje watu mbalimbali hyphenated misemo. Na suala la mafanikio ya hatimaye ni kwamba sasa nina buggy2. Kama mimi nataka kufanya hili mwenyewe, ingawa, mimi wanaweza badala kufanya hili - Clang-o buggy2 na kisha buggy2.c. Na kwamba vile vile nipe faili inayoitwa buggy2. Hivyo katika muda mfupi, Clang ni compiler. Matokeo ni chombo tu user-kirafiki kwamba tutaweza kuwa na kutumia zaidi na zaidi, kwa sababu tu ya kuanza kurahisisha mambo kwa ajili yetu. Na sisi kurudi 0, Mwisho. Kwa sasa, kwa sababu tu, lakini tutaweza kuanza teasing kwamba sehemu leo na siku ya Jumatano. Maswali yoyote juu ya yoyote ya hii? Yeah? Watazamaji: [inaudible] ls katika quotes huko? DAVID J. Malan: OK. Wakati mimi typed ls katika quotes, kwamba alikuwa mimi kufanya baadhi ya uchawi nyuma ya pazia ya kurekebisha mdudu. I forgot, kama tumekuwa kuwaambia wengi wenu juu ya mjadala wa bodi, kufanya - tutaweza kufanya hili sasa - Sudo yum-y update appliance50. Whoops, kwamba hiyo ni haki yameandikwa. Hivyo appliance ni kama mfumo wa uendeshaji. Ni mbio hii ya mfumo wa uendeshaji kuitwa Fedora. Na sasa kwa sababu ya uhusiano wangu polepole internet, nimekuwa kweli hosed yake. Hivyo mbio Sudo yum update, kama sisi kukuambia kwa nini katika tatizo kuweka, kimsingi ni kama mbio updates moja kwa moja Mac OS au Windows. Na sababu kwa ajili ya kuendesha hii mwanzoni kabisa mwa tatizo kuweka ni kwa sababu wakati sisi aliumba appliance, mimi messed up, na mimi ajali alifanya yote ya programu yako kuangalia nyeusi kwenye screen nyeusi, ambayo ni kwa nini wewe si kuona wao na default. Lakini toleo la karibuni la appliance fixes hii. Na mimi itabidi kurekebisha wakati wa mapumziko mara moja nina Internet uppkoppling. Hivyo quotes tu ngozi makosa yangu, sana kwa ujasiri, inaonekana. Maswali mengine? Ndiyo? Watazamaji: Wapi kufanya kuja kutoka? [Inaudible] DAVID J. Malan: Good swali. Wapi kufanya kuja kutoka? Ni mpango wa Linux ambalo limekuwepo kwa miaka mingi, ya muda mrefu kabla CS50. Na inakuja na mfumo wa uendeshaji kama Fedora. Ni haina kuja kutoka maktaba CS50. Kwa kweli, mambo tu kwamba kuja kutoka maktaba CS50 hivi sasa, kwamba tumekuwa kuonekana, ni GetString, GetInt, wote wa wale Kupata kazi, na kamba neno, na baadhi kiwango, neno bool. Lakini tutaweza tease kwamba mbali wakati sisi kupiga mbizi katika CS50 appliance yenyewe. Hivyo ndiyo, swali moja zaidi hapa. Watazamaji: Wakati wewe alisema kufanya na kisha Buggy, jinsi gani kompyuta kujua [inaudible]? DAVID J. Malan: Good swali. Hivyo wakati wewe kukimbia tu kufanya buggy1 au kufanya buggy2, jinsi haina kufanya kujua? Hivyo kwa default, ikiwa unapoandika kufanya buggy1, kufanya inaonekana kwa faili inayoitwa buggy1.c. Na kisha executes amri Clang sahihi, hivyo kuu pato default faili inayoitwa a.out. Kwa kweli, kama sisi kuangalia nini kufanya, nini - hebu acha hii. Kama sisi kuangalia nini kufanya ilikuwa kweli kufanya, kufanya buggy2, ni tayari hadi sasa. Hivyo basi mimi kuondoa amri rm, mpango niliandika kabla. Typing Y-E-S kuthibitisha kwamba mimi nataka kuondoa hiyo. Kama mimi sasa kufanya kufanya, taarifa kwamba katika mstari huu kwa muda mrefu sana, kuna jambo hili jana hapa,-o buggy2. Kufanya yote ni kufanya ni kupita kwamba hoja, ili kuzungumza, kwa Clang, ili mimi hawana aina yake mwenyewe. Haki ya wote, hivyo michache ya haraka ya utawala matangazo. Hivyo kwa sehemu, ambayo ilianza rasmi hii kuja Jumapili, wewe daima utasikia wanataka kuleta, kama una moja, mbali. Kama huna mbali, wala kuwafikia kwangu kwa kuacha barua pepe yangu. Na tutaweza takwimu nje workflow. Nini ujumla utapata katika sehemu ni kwamba uko sehemu dhana, sehemu mikono juu. Tutaweza hasa matumizi ya sehemu ya maswali, sehemu ya tatizo la wiki kuweka, kutembea kwa baadhi ya dhana vifaa kutoka mihadhara. Na kwamba wote katika kuweka sasa tatizo. Na tutaweza pia kupiga mbizi katika baadhi ya shughuli mikono juu, wakati mwingine ambayo inatakiwa iwasilishwe, wakati mwingine ya ambayo si. Kwa mfano, wiki hii kwanza, wao ni maana tu kama joto-up mazoezi. Na utapata kwamba wale matatizo ni kweli tu. Wao ni maana ya kuwa haki ndogo, lakini si lazima trivial mipango ya kuandika, ambayo si lazima kusisimua katika na wenyewe lakini ni nzuri fursa ya mazoezi na syntax, na kazi mpya, katika faraja ya sehemu ambapo unaweza kuwa na wachache wa wanafunzi wako sasa kama vizuri kama TF yako. Na nini tutaweza kufanya juu ya muda ni kutumia zana iitwayo CS50 Spaces, ambapo badala ya kutumia Appliance CS50, wewe itabidi badala kwenda kwenye ukurasa wa mtandao katika browser, ambapo utasikia kuwa na uwezo kuandika code katika dirisha browser wakati sehemu. Na kisha kama wewe opt katika, mafundisho yako wenzake wanaweza kuonyesha chochote ni uko kuandika juu ya screen yako katika browser yako dirisha juu mbele ya darasa, iwe anonymously au hadharani, ili yeye au yeye anaweza kisha kutembea kwa njia na wanafunzi wako nini alifanya vizuri, nini hawakufanya vizuri. Na tena, wengine uhakika wote wa hii inaweza nicely anonymized. Lakini utakuwa fursa nzuri kwa zaidi interactivity kuliko kitu kama hotuba inaruhusu. Wakati huo huo, sisi itabidi mambo haya kuitwa super sehemu, ambayo ni hiari lakini ni wazi kwa kila mtu katika darasa, ili unaweza kufanya hivyo zaidi kwa pamoja kwa ajili tatizo kuweka moja. Hapa ni ratiba. Hii pia ni posted kwenye homepage katika cs50.net. Ona kwamba kutakuwa hacker maalum moja kesho mchana. Na sisi filamu moja leo na kesho na moja baada ya wale online ndani ya masaa 24. Hivyo kama huwezi kufanya lolote juu ya nyakati hizi, wasiwe na wasiwasi. Na tena, ratiba ni online sasa katika cs50.net. Katika suala la sectioning yenyewe, unapaswa kuwa na kujipatia email likimwelekeza wewe kwenda kwenye ukurasa wa kozi ya kupata nje ya sehemu yako. Kama maisha yamebadilika na unahitaji kubadilisha sehemu yako, si tatizo. Nenda nyuma URL huo, cs50.net/section, umoja, na wewe utakuwa kujaza fomu sawa ili uweze kisha utupe mapendekezo yako. Na sisi kufuatilia na mwisho wa wiki kama kwa nini tunaweza malazi. Wiki iliyopita, wanakumbuka kwamba sisi mapendekezo kutumia CS50 Diskutera, majadiliano kozi ya chombo, katika hotuba. Hivyo tulikuwa maswali 40 ambayo waliulizwa na akajibu wakati mihadhara. Hivyo ilionekana kazi vizuri, hivyo tutaweza kuendelea kujaribu kufanya hili. Kama, wakati wa hotuba, wewe si tu kujisikia vizuri kuinua mkono wako, si tatizo. Nenda cs50.net/discuss, baada ya hapo, na moja ya mafundisho yetu wenzako ama kujibu ni umeme au kuongeza zao mkono kwa niaba yako anonymously kuuliza, kutegemea juu ya asili ya swali. Na katika suala ya maoni, kwa ujumla psets itakuwa akarudi ndani ya wiki. Kwa sababu inachukua muda kidogo kwa ajili ya sehemu ya kufikia Msawazo, pset kwanza, 0 na 1, itakuwa kidogo kuchelewa kama mambo kukaa chini. Lakini mada kwa kuwa katika wiki ijayo. Haki ya wote, hivyo basi mimi kuweka yangu kubwa sauti kwa muda tu. Hivyo hii ni kweli hali ya hewa ya kuvutia kuwa kuwa na mjadala huu, nini na mambo yote mengine kinachoendelea juu ya chuo kufuatia kuhusiana. Lakini CS50 ina shaka alikuwa na historia yake ya hasa hili mada, katika kadri kila mwaka, kozi hii, kwa ajili ya wengi miaka, Ad-Bodi takribani 3% ya darasa. Mwaka huu wa hivi karibuni, 2011, CS50 Ad-boarded wanafunzi 35. Hii si, nadhani, kutokana na ukosefu wa uwazi. Kutambua kwamba katika mtaala shaka, kuna ukurasa wa maelezo kuelezea ambapo mistari ni. Kauli hiyo hiyo ni unaorudiwa juu ya kila mmoja tatizo seti kwenye ukurasa mmoja. Basi, mimi kutaja hii leo kweli tu kufanya folks kukumbuka ya hii. Na tumekuwa alijaribu vitu tofauti. Na nilifikiri nini tunataka kufanya leo ni tu kuchukua muda kweli kuangalia baadhi ya matukio ya siku za nyuma kwamba wamekuja. Badala ya kuweka haya kama chafu siri kidogo, kwa kweli kumweka nje nini wanafunzi wamefanya na jinsi sisi wanaona ni kweli nini na motisha makuu ni kwa ajili ya hata baada ya mazungumzo haya. Hivyo kwa kuwa alisema, line kimsingi ni hii - kwa muhtasari, wewe ni welcome, wewe ni moyo, kwa kuzungumza na wanafunzi. Hiyo ni lengo zima la kuwa na haya shirikishi masaa ya ofisi katika Annenberg na kuwahimiza watu kwa mradi wa mwisho wa kufanya kazi pamoja. Lakini line ni inayotolewa linapokuja wakati kwa kweli kuandika ufumbuzi yako ya mwisho. Akizungumza katika lugha ya Kiingereza, kabisa faini, akizungumza katika code Pseudo, kabisa faini. Emailing classmate pset yako, kuruhusu watu kuangalia juu ya screen kama mikono kuendelea kuandika, juu ya mstari kama vizuri. Je kuangalia kwa muhtasari kwa mistari fulani. Lakini tu kwa kuchora picha ya jinsi hii ni bahati mbaya ukweli, kutambua kwamba kuna tovuti huko nje kwamba kuwa na ufumbuzi kutoka darasa hili na wengi madarasa mengine. ukweli kwamba wewe au baadhi 3% ya wewe kujua kwamba hii ipo ina maana kwamba sisi kujua kwamba hii ipo. ukweli kwamba kuna tovuti kama hii ambapo wanaweza kulipa mtu kweli kufanya tatizo seti yako - hii ilikuwa kesi halisi waliopanda mwaka jana. Hii ni tovuti inayoitwa odesk.com. Na Tim ilikuwa jina la mtu hapa ambaye alikuwa posting juu ya hii tovuti na aliuliza mtu kufanya pset wake 7 katika hii kesi fulani. Naam, ni odesk.com sana Google-uwezo, na sisi pia ni nzuri sana katika googling. Hapa pia, kuna maeneo - na huyu 'badala mauaji, shahiri. [Kicheko] DAVID J. Malan: Kitu funny kuhusu tovuti hii ni kama kusoma ukurasa Kuhusu, wao majadiliano kuhusu ushirika wao utamaduni na jinsi huduma kwa wateja ni zao namba moja kipaumbele, ili kuhakikisha kuwa kazi yako kupata akageuka katika wakati muafaka. Lakini kwa uhakika wote, tena, ukweli kwamba maeneo haya zipo, kutambua sisi, pia, ni Mjuzi wa hizi aina ya maeneo. Na kukupa hisia ya kile hutengeneza hii ujumla inachukua, sisi ujumla hawana kashfa kubwa ambapo watu ni kushirikiana juu ya aina yoyote ya kiasi kikubwa, lakini badala ni haya wakati marehemu-usiku wa udhaifu, ambapo una hivyo mengi ya kufanya, ni 04:00, wewe ni nimechoka, na wewe kufikiri mwenyewe, vizuri, basi mimi tu kuangalia yangu roommate au code ya rafiki yangu au kama. Na madhihirisho ya hii kwa bahati mbaya kuhusisha Mwanafunzi kitu kama hiki na kuwasilisha Mwanafunzi kuwasilisha B kitu kama hii, ambayo kwa hakika, katika kompyuta sayansi darasa, ni rahisi kwa inashangaza wanasayansi wa kompyuta kuchunguza na programu. Hii ni dhana ya kawaida mwingine, ambapo wameweza aina ya ikifanya kazi pamoja ya mtu, labda kuzungumza katika Kiingereza, faini tu, pseudocode. Lakini basi inakuja wakati kwa kweli kuwasilisha, na psets tu kupata kubadilishana kupitia barua pepe au Dropbox au kama. Lakini katika jaribio la kufanya hivyo chini dhahiri kwamba hii ni kilichotokea, basi hii ni nini in. Hii pia, haina safari hadi vipande kuandikwa vizuri ya programu kama tuna kweli kuchunguza hizi aina ya mambo. Na kwa kweli kile sisi kufanya ni kukimbia programu ambayo inalinganishwa yote ya mwaka huu maoni dhidi ya wote wa zamani wa mwaka mawasilisho, dhidi ya kila kitu sisi kupatikana kwenye Internet, dhidi ya kila tovuti ya kazi huko nje. Ni wote sana automatiska. Na hivyo sisi kufanya kweli hii katika haki kubwa kwa% 97 ambao ni kweli kazi punda zao mbali kwa hii na nyingine madarasa na kuweka katika yote ya juhudi kwamba ili kazi hatimaye kuwasilisha ni wao wenyewe. Na siwezi kwenda kwa muda mrefu. Hizi ni baadhi tu wachache wa kesi ya mwaka jana. wanafunzi wachache in hizi files identically kwa pset 2, pset 3, 4 pset, pset 5, 6 pset, pset 9. Katika kesi hiyo, hii ilikuwa jaribio 0 na mwaka jana, ambapo wawili wanafunzi in identically sentensi hii miongoni mwa wengi wengine, "ombi la aina -" dot, dot, dot. Hivyo hata katika darasa ya 600 gani sisi kuchunguza hii juu ya in Quizzes. Hivyo katika muda mfupi, hii - kusema ukweli, I hate kuwa aina hii ya mazungumzo - lakini hii ni kweli juhudi za makusudi mwaka huu ili kujaribu gari chini ya idadi hiyo. Kwa sababu hata kama sisi kusema haya kila aina ya mambo mwaka, nadhani ukweli wa kuwa wakikaa juu yake kwa ajili ya wachache zaidi ya sekunde kuliko kawaida na kweli tu kusema kwamba kile inaweza kuonekana kama, eh, si mpango kubwa vile, angalau kufikiri nyuma wakati fulani, katika haki kwa mwenyewe na kwa wanafunzi wako hapa. Hivyo kama umewahi kuwa na maswali yoyote kama ambapo mstari ni, tafadhali tu kuwafikia mimi binafsi. Lakini jibu ni daima, kabisa alisisitiza katika dakika ya mwisho ya fedha katika siku ya marehemu. Au kama ni suala la kutokuwa na siku marehemu, uaminifu, email yangu binafsi. Tutaweza takwimu kitu nje. Tafadhali usiweke muda wako hapa katika Harvard katika hatari. Sasa, nilifikiri tunatakiwa uzito mood, hivyo mimi pamoja na hii kama slide ijayo. [Kicheko] DAVID J. Malan: Tovuti hii ilikuwa kubwa. Mimi kwa kweli got kidogo aliwasihi. Kuna moja hii. Na kisha moja hii ilikuwa ajabu. Sawa, hivyo kufikiria kwamba kitten marehemu wakati wa usiku wakati wa kufanya wale maamuzi. Haki ya wote, hivyo nyuma ya furaha zaidi na chini kubwa stuff, kama masharti. Haki zote, hivyo sisi aliyesema ufupi kuhusu hizi. Hii ni kitu ambacho pengine familiar kabisa kutoka ulimwengu wa Scratch. Na katika ulimwengu wa Scratch, tuna hitaji hili wakati mwingine kwa kwenda kufanya uma katika barabara. Ama kufanya hivi au hivi au jambo hili kingine hapa. Na wakati tunataka kufanya hivyo, tunaweza kutumia, katika C sasa, hii ikiwa mwingine kujenga. Na kisha hapa tuna misemo Boolean. Kwa mfano, Boolean maneno hapa, tunaweza AU pamoja, kwa maana kwamba tuna hali hii AU kwamba hali hiyo. Tunaweza NA pamoja, kwa maana kwamba tunataka kuangalia hali hii na kwamba hali hiyo. Na hapa tuna kauli kubadili sasa, ambayo si hivyo sawa syntactically kwa aina wale wa hali, lakini inaruhusu sisi kufanya sawa ikiwa, mwingine kama, mwingine kama, mwingine ikiwa, na kama kwa kifupi enumerating yao kesi kwa kesi na kesi kwa kesi. Hivyo tuliona wale wakati wa mwisho. Na kisha sisi kuanza kugusa juu ya mambo kama matanzi. Tuliona moja ya hizi muda tu iliyopita. Lakini kuna hizi nyingine constructs looping. Kwa mfano, hii moja hapa. Hivyo wakati (hali), jambo hili tena na tena. Hivyo kimsingi, nini inaonekana kuwa tofauti kati ya hii kwa kitanzi na hii kitanzi wakati hapa? Hii kwa kitanzi na hii kitanzi wakati. Yeah? Nini hiyo? Watazamaji: [inaudible]. DAVID J. Malan: Good. Hivyo wakati katika hali kwa kitanzi, kuna uwazi zaidi syntax. Kuna initialization hii, kuna update hii. Katika kitanzi wakati, kuna tu hali hii. Hivyo inaonekana kuwa ni kidogo ikilinganishwa chini dhidi ya kitanzi, ambayo ina maana kama tunataka kuwa na vigezo na tunataka kuwa na incrementation, sisi kweli kuwa jambo hili sisi wenyewe. Hivyo basi mimi kwenda mbele na kufungua gedit. Hebu kubadili juu ya appliance. Na hebu tu kufanya haraka kidogo mfano kwamba hutofautisha kati ya hawa kutoka nyingine. Na katika nyuma ya akili yangu hapa, mimi lazima kusema jambo moja. Mimi hasa zilizotajwa Tim jina. Tim kweli alikuwa mtu kwamba mwanafunzi alijaribu kutafuta kufanya kazi zao za nyumbani kwa ajili yao. Sisi hatukuwa na Tim katika sehemu fulani. Hivyo kutambua, nisije kufichuliwa mwanafunzi, ilikuwa si mwanafunzi. Ilikuwa mtu random kwenye mtandao kufanya mambo kwa mwaka wakala mwisho. Hivyo tunaona kwamba, pia. Hivyo katika kesi hii hapa, napenda kwenda mbele na kufungua faili mpya. Picha, Mpya. Hii inanipa tab hapa. Hebu kwenda mbele na ila ni kama loop.c. Hebu kwenda na bonyeza Hifadhi. Na kisha chini hapa, hebu kwenda mbele na kuanza kuandika # Pamoja . Hebu zoom in Sasa tutaweza kufanya kuu int (utupu). Sasa basi mimi kwenda mbele na kufanya kwa ajili ya (i = 0 int; i < oh, 10; i + +). Na sasa mimi nina kwenda mbele na kufanya magazeti nyota kwamba mimi ilivyokuwa. Na kisha mwisho wa mpango huu, sisi ni kwenda tu magazeti line mpya, hivyo tu kwamba haraka yangu haina kuangalia wote messy. kurudi 0. Wanaonekana syntactically sahihi? Hadi sasa. Basi hebu angalia. Hivyo basi mimi zoom, nendeni terminal dirisha yangu. Na napenda kwenda mbele na kukimbia kitanzi, kwa sababu mimi kuitwa hii Jambo loop.c. Hivyo kufanya kitanzi. Inaonekana kukusanya OK. Hebu kukimbia kitanzi, na sasa Ingiza. Na inaonekana kuwa kuchapishwa nyota 10. Basi hebu tu kubadilisha hii kwa kitanzi wakati na kuona nini aina ya masuala sisi safari juu. Hivyo badala ya hii, napenda kwenda katika hapa na kusema wakati i ni chini ya 10 - basi mimi kujikwamua kwa kitanzi. OK, hivyo sisi kuwa wanandoa wa matatizo tayari. Hivyo hali ni sawa, lakini mimi nina wazi kukosa initialization. Mimi kukosa incrementation. Hivyo kile lazima compiler uwezekano niambie wakati mimi kujaribu kukusanya mpango huu? Yeah? Watazamaji: [inaudible]. DAVID J. Malan: Good. Hivyo ni kwenda kusema kitu kama Undeclared - katika hili kesi, kutofautiana i. Na kwa kweli, matumizi ya kitambulisho Undeclared i. Na hivyo hii ni tofauti na lugha kama PHP na Chatu na Ruby, ambayo baadhi ya unaweza kuwa familiar, ambapo unaweza aina tu ya kuanza kutumia vigezo willy-nilly na si kuwa na wasiwasi juu ya kuzitangaza wazi daima. Katika C na katika lugha kama Java na C + +, una kuwa super wazi. Na kama unataka variable kuitwa i, una uniambie aina gani ya kutofautiana ni. Hivyo sisi itawabidi kurekebisha hii kama ifuatavyo. Mimi naenda kuwa kwenda hapa na aina int i, kwa hiyo, Mimi umetangaza variable kuitwa i. Sasa, nimekuwa skipped hatua moja. Nimekuwa wazi si initialized, lakini hebu angalia kama kwamba katika hufanya Clang angalau kuacha kulalamika. Hivyo basi mimi remake mpango huu. Haki zote, sasa ni tu kulalamika kwa sababu mbalimbali. "Variable 'i' ni uninitialized wakati kutumika hapa." Haki ya wote, hivyo kwamba ni pretty wazi. Initialized njia tu kuiandaa sawa na thamani. Na tumekuwa si kufanyika kwamba, hivyo basi mimi kujaribu sawa 0. Sasa hebu jaribu hii tena na tena kukimbia Clang. Imekusanywa wakati huu. Na mimi nina kuhusu kwa kukimbia. Lakini kubwa ya zamani kitanzi usio, kwa sababu mimi tumefanya initialization, nimekuwa kufanyika hali, lakini sijawahi kufanyika aina yoyote ya incrementation. Hivyo ni jinsi gani naweza kufanya incrementation? Naam, katika kitanzi wakati, anahisi kama mimi naenda kuwa kufanya hivyo ndani ya kitanzi, kwa sababu kiasi kama kwanza wiki ya mifano ya kufanya constructs looping, kama na soksi na kwa hesabu binafsi, tulikuwa na kufanya kitu mwishoni sana, kama kwenda nyuma ya mstari unaofuata. Nini kama mimi kwenda mbele na kufanya hili i + + hapa? Hebu hata kukusanya hii. Catch mimi tayari. Nini mbaya hapa? Watazamaji: [inaudible]. DAVID J. Malan: Hivyo ni dhahiri si int. Ni i. Na braces curly, kama kabla, indentation haitoshi. Hivyo sasa mimi hii kujenga. Hivyo wakati i ni chini ya 10, magazeti ya nyota, kisha increment i. Na njia wakati kitanzi matendo kwamba haraka kama wewe hit chini ya kitanzi, ambayo katika kesi hii inaonekana kama mstari wa 10, itakavyo kwenda nyuma ya mstari 6, ambapo kiwango sharti kuwa checked tena. Na kama i bado ni chini ya 10, tutaweza kufanya mistari 8 na kisha 9, basi tutaweza hit 10, na kwenda nyuma ya 6, tena na tena na tena na tena, hivyo muda mrefu kama i ni chini ya 10. Hivyo hebu kuendesha upya kufanya hapa. Okay, tumekuwa compiled sawa. Hebu re-kukimbia kitanzi. Na sasa ni kweli inaonekana kazi. Hivyo pluses na minuses hapa? Naam, hivyo kuna kweli si wote wa PLO - cute. Haki wote, kwamba ilikuwa - ah, kwamba ilikuwa ajali. Haki zote, hivyo hebu kurejea kwa kitanzi. Hivyo kwa matanzi ni nzuri kwa sababu wao ni super wazi. Na hata kama wao ni kidogo clunky kuandika, ni nguvu sana na inaruhusu kufanya nyingi mambo mara moja. Wakati matanzi hawaonekani kuwa na kiasi kubwa ya thamani tu lakini, kwa sababu anahisi kama sisi tu kufanya kazi zaidi. Tuna kuweka initialization hapa juu, update chini hapa, na tunahitaji kukumbuka kufanya yote. Hivyo tutaweza kuona katika wakati kuwa wakati matanzi kweli kuwakopesha wenyewe tu mazingira tofauti, tofauti data miundo kama orodha na meza hash, mambo tutaweza kupata katikati ya muhula. Lakini kwa sasa, kujua kwamba kuna aina hii ya tatu inajulikana kama do- wakati kitanzi. Na tumeona hii kwa ufupi. Na hii inaweza kuwa na manufaa kwa super pset 1. Wakati wowote unataka kufanya kitu fulani na kisha kuangalia kama user kushirikiana, na kama hakuwa, kufanya hivyo tena, kufanya- wakati kitanzi kunafaa kwa kuwa aina ya mantiki. Kwa sababu kama kuagiza kutoka juu hadi chini hapa unaonyesha, je, ina maana halisi kufanya hili. Na kufanya hivyo tena na tena, nini kinaweza kuwa ni nani? Labda maana wito GetInt au GetString na kisha kuangalia thamani ya GetInt au GetString na kisha yelling saa mtumiaji kama wao si kushirikiana kwa kuwauliza tena na tena na tena. Ambapo unataka kufanya kitu mara moja, kisha kuangalia baadhi ya hali. Basi hebu jaribu hii. Hebu kweli mabadiliko ya hii sasa kwa kitanzi do-wakati. Na mimi nina kwenda mbele na kufanya yafuatayo. Hivyo kufanya yafuatayo. Hebu kufanya int i = GetInt (); lakini hebu kwanza kuwaambia mtumiaji nini cha kufanya. Hivyo tofauti kidogo wakati huu. "Nipe int". Hivyo mimi itabidi kutumia printf kwa ajili hiyo. Na sasa mimi nina kwenda chini hapa, na mimi naenda kufanya hii wakati i ni, hebu sema, kubwa kuliko - hebu angalia, i ni, hebu sema, chini ya 0, au i ni zaidi ya 10. Kwa maneno mengine, nataka namba 1-9, tu kiholela. Basi, mimi nina kutumia pamoja Boolean kujieleza hapa kuhakikisha kwamba i ni chini ya 0 au zaidi ya 10, ambapo kesi Nitafanya hivi kitanzi hapa tena. Hivyo tena, kufanya hili - wakati i ni chini ya 0 au i ni mkubwa kuliko 10. Hivyo sasa hebu kwenda mbele na kufanya hivyo mara moja tumefanya kwamba. Hebu tu kufanya haraka sanity hundi. printf ("Asante, i ni% d", i). Hivyo mpango huu rahisi anauliza mtumiaji kwa int, hufanya uhakika ni ndani ya baadhi mbalimbali, 1-9 jumuishi, na kisha shukrani mtumiaji kwa kuwakumbusha nini wao tu typed katika, kama hundi kidogo sanity. Lakini hebu angalia kama hii kazi kama ilivyokusudiwa. Hebu kwenda kichwa chini hapa na kuendesha upya kufanya kitanzi. Hmm. "Matumizi ya kitambulisho Undeclared 'i'". Hiyo ni ya ajabu. Nilidhani sisi kutatuliwa kwamba. Same dalili lakini code tofauti. Yeah? Watazamaji: [inaudible] ndani ya wawili, tuna [Inaudible]. DAVID J. Malan: Hasa. Hivyo hii kweli unatuongoza mada inayojulikana kama wigo. Ni zinageuka kuwa C, tena, ni kweli inachukua wewe literally. Na kama wewe kufanya kitu kama hii ambapo wewe kutangaza int na kisha hawawajui ni baadhi ya thamani, lakini wewe kufanya hivyo ndani ya jozi ya braces curly, nini C gani ni inadhaniwa kuwa wewe nataka tu bits wale 32 inayojulikana kama i kuwepo ndani ya muktadha wa braces wale curly, ndani ya muktadha ya mistari 6 kupitia 9. Hivyo i ni alitangaza, na ni kwa ajili thamani katika mstari wa 8, lakini kwa haraka kama wewe kupata nje ya mstari 9 chini brace curly, i ni tena katika upeo, hivyo kusema. S-C-O-P-E. Ni tena katika muktadha sahihi. Hivyo sasa hakuna i, hivyo ni kama ingawa tulikuwa hata amekiri kuwa ni wakati wote. Basi nini fix kisha kwa ajili ya kitu kama hii, kama Sababu ni kwamba i ni alitangaza ndani ya braces curly, ambayo inaonekana mbaya? Hapa? Watazamaji: [inaudible]. DAVID J. Malan: Yeah. Hivyo tunaweza initialize ni nje. Hivyo basi mimi kwenda mbele na kufuta sehemu tamko ambapo Mimi kutaja aina, na napenda kufanya hivyo hapa. Hivyo katika mstari 5, sasa anasema "Nipe int." Simu yake i. Angalia katika mstari 9, sitaki kufanya hivyo, kwa sababu mimi tayari wana bits 32. Sitaki kuuliza kompyuta kwa ajili ya tofauti 32 bits. Nataka kutumia hizo hizo bits 32. Na sasa kwa sababu i ni alitangaza katika mstari 5, bado legit kutumia katika mstari 11 na line 12. Hivyo basi mimi kujaribu recompile hii na kuona ikiwa Clang ataacha kunguruma. kufanya kitanzi. Hivyo sasa ni "thabiti tamko la kazi 'GetInt' ni batili katika C99 ". Nini ni kwamba? Yeah? Watazamaji: [inaudible]. DAVID J. Malan: Yeah. Hivyo sasa kwamba mimi nina kweli kwa kutumia GetInt, hii si kitu kwamba tu kuja na C. Hii inakuja kutoka CS50. Hivyo tunahitaji hii hapa. Na napenda kurejea chini haraka hapa na kuendesha upya kufanya. Okay, hatimaye. Sasa tumekuwa kutatuliwa kwamba na makosa mengine. Hebu sasa kukimbia kitanzi na kuona nini kinatokea. "Nipe int." Nitapatia ni 11. Nitapatia ni -1. Mimi nitakupa hiyo foo. Mimi itabidi kuwapa 5. Na sasa ni kweli kazi. Lakini haraka iliyopita kwa sababu hapa. Kwa nini alifanya hivyo wanasema retry moja ya nyakati hizi lakini nipe int nyingine mara tatu? Kwa nini ni tabia tofauti? Watazamaji: Nikatoa ni kamba. DAVID J. Malan: Samahani? Watazamaji: Wewe akampa kamba. DAVID J. Malan: Yeah. Hivyo sisi akampa string katika jaribio hili la tatu, wakati mimi typed foo. Foo ni kamba. Ni wazi si int. Na njia ambayo CS50 imetekeleza GetInt ni kwamba sisi wala kuangalia kama kitu fulani ni chini ya 0 au zaidi ya 10 kwa ajili yenu, kwa sababu ni jinsi gani sisi kujua mapema ni aina gani ya int unataka? Lakini tunaweza minimally kuangalia kwenu, mtumiaji angalau aina integer? Na kama hakuwa, sisi yell katika user kwa kuandika "retry" juu ya screen. Hivyo basi, tuna mpango wa hiyo looping. Sawa. Sasa, ambayo kati ya hayo ni aina ya kujenga bora zaidi? Hivyo hii ni wapi mambo kuanza kupata messy kidogo, ukweli kwamba una kukumbuka kutangaza variable hapa kama unataka kutumia ndani ya baadhi ya curly braces na nje. Lakini hata kama hii inaonekana kidogo cryptic kwa mara ya kwanza mtazamo, tu tena, kumbuka mantiki rahisi. Ili kutumia kitu chochote katika C, kama ni kazi au ni kutofautiana, una kwa pamoja kama ni kazi katika maktaba baadhi, au unahitaji kuyatangaza. Lakini sasa unahitaji kuwa na ziada kukumbuka ya ukweli kwamba wewe ni kutangaza katika wigo wa kulia. Wewe si kuweka pia kukazwa ndani ya mabano. Hivyo basi mimi kwa kweli unaendelea nyuma. Kama sisi kurudi nyuma kwa yetu kwa mfano kutoka mapema, na mimi kwenda nyuma kwa int, int i = 0; i <10; i + +, na mimi kufanya nyota printf, kama hivi, na kisha Paren karibu, na sasa printf i ni sasa - kulingana na mantiki hiyo hiyo, itakuwaje wakati mimi kujaribu kukusanya mpango huu? Watazamaji: batili kitambulisho. DAVID J. Malan: Hivyo ni mwingine kitambulisho batili, Undeclared kitambulisho. Sasa, sababu ni tofauti kidogo. Kuna ni wazi hakuna braces curly hapa, lakini sawa wazo, hadithi hiyo ya upeo inatumika. Kama una alitangaza variable kama i ndani ya kwa kitanzi, hata kama si wazi imeandikwa curly braces, kufikiri wao kiakili kama bado kuwa pale, ambayo kesi i ni halali tu ndani ya kwa kitanzi. Si halali mara moja kupata line ya pili, ambayo katika kesi hii ni sasa 10. Hivyo tu masuala machache ya upeo na kama. Haki zote, maswali yoyote? Haki zote, hivyo hii ni aina ya mpango trivial kidogo, uchapishaji tu nyota ndogo ndogo. Lakini hebu angalia kama wewe kumbuka hii wimbo hapa. Hii ni wimbo incredibly annoying watoto wangeimba juu ya basi la shule na kama. Lakini nini ni nzuri juu yake ni kwamba hii ina cyclicity, ambapo ni "99 chupa ya bia juu ya ukuta, 99 chupa ya bia. Kuchukua moja chini, kupita ni kuzunguka, chupa 98 za bia juu ya ukuta ". Na kisha akarudisha wimbo 97, kisha 96, basi 95, kisha 94, njia yote chini 0 kama kweli got kwamba mbali juu ya basi. Hivyo hii ni programu nzuri ya aina ya kutekeleza, kwa sababu yangu Mungu, kama unaweza tu kutekeleza hili na wachache mstari wa kanuni, unaweza mate nje lyrics nzima na hii wimbo kabisa haraka. Lakini njiani, tunaweza kuanza kwa sasa tease mbali baadhi ya haya ya msingi constructs looping na sasa pia kuanzisha kazi ya kwamba sisi kuandika wenyewe, kurudi maadili kwamba sisi kupita kote. Lakini kwanza, kwa nini sio sisi kwenda mbele na kuchukua yetu dakika tano kuvunja hapa? Na wakati sisi kupata nyuma, sisi kuimba wimbo huu. Haki zote, hivyo sisi ni nyuma. Na wakati mimi kusema sisi sasa kuimba wimbo huu, I mean programmatically, si kwa maneno. Hivyo hapa tuna beer1.c, ambayo ni moja ya utekelezaji wa hii hasa wimbo. Na tu kuwa wazi, kwa wale unfamiliar na kile jambo hili inaonekana kama, napenda kwenda mbele na kufanya beer1, Ingiza. Sasa basi mimi kukimbia beer1, na kile tutaweza kuona - ni wangapi chupa ya bia kutakuwa? Mimi itabidi aina katika 99, kama wimbo anasema. Kuingia. Na sasa kama sisi kitabu kupitia - oops - kama sisi kitabu kupitia haya yote, tutaweza kuona kwamba hii kweli alifanya kuimba wimbo mzima. Subiri dakika. Bar yangu kitabu kidogo messed up. Hebu kutumia dirisha kubwa. Hivyo beer1, 99, kuna sisi kwenda. Hivyo hapa tuna wimbo mzima, kuimba kwa kasi zaidi na kompyuta kuliko wangeweza kwa sisi. Hivyo taarifa, ingawa, asili mzunguko hapa. Ni anasema 99, kisha 99, basi, "kuchukua moja chini, kupita kote, "basi 98. Na sasa ni kurudiwa tena na tena. Hivyo hii ni fursa nzuri kwa kweli baadhi ya aina ya looping kujenga. Ona kwamba mimi nina aina ya kukata kona hapa. Ona kwamba mimi kusema "chupa ya bia 98 juu ya ukuta, 97 chupa ya bia juu ya ukuta, "na kwamba ilikuwa tu hivyo kwamba wakati sisi kupata chupa moja ya bia, sina na wasiwasi kuhusu sarufi ya Kiingereza. Lakini tunaweza pia kurekebisha hili kwa kidogo ya kama hali, labda. Kama idadi hii ni umoja, kwenda mbele na kusema "chupa", vinginevyo kama ni wingi, kusema "chupa". Lakini kwa sasa, mimi nina kabisa kukata kona. Basi hebu angalia kile tulichopata hapa. Hivyo sisi tumepewa baadhi ya comments saa ya juu. Mimi pamoja na maktaba hizi mbili, kama tumekuwa kawaida imekuwa. Na sasa basi mimi kitabu chini kwanza halisi mstari wa kanuni. Line 17 mateke mbali kuu. Line 21 na 20 ina ngapi chupa ya bia kutakuwa? Na kisha mimi wito GetInt. Na sasa mimi kuwa na kidogo ya hundi sanity. Hivyo hii ni mkataba kwamba tutaweza sasa kuanza kupitisha kwa zaidi strikt kuangalia pembejeo mtumiaji. Wakati mwingine wewe tu hawataki kuwachochea tena na tena na tena. Kama mtumiaji screws up na haina kushirikiana, faini. Quit na si tu kukabiliana nao. Na hivyo ndiyo nini mimi kufanya hapa. Kama n ni chini ya 1, mimi tu kwenda yell katika user, "Samahani, kwamba hakutakuwa na maana." Na kisha mimi naenda kiholela kurudi 1. Hivyo tena, hii ni mkataba kupata kutumika. Kwa sasa, kuchukua ni juu ya imani. Lakini hadi sasa, tumekuwa daima kurudi 0, kwa sababu tumekuwa alisema kurudi 0 inaashiria nini? Watazamaji: Mafanikio. DAVID J. Malan: Mafanikio, kwamba ni yote. Hivyo sasa kwamba sisi ni hatimaye kuanza kufikiri juu ya yasiyo ya mafanikio - kwa maneno mengine, kesi kona, hali ya ufisadi - sasa mimi kuwa na usambazaji usio, au angalau bilioni nne inawezekana mambo ambayo yanaweza kwenda vibaya katika mipango yangu. Na naweza kuanza assigning yao namba ya mtu binafsi. Sasa, kwa ujumla yatosha tu kurudi kitu kingine zaidi ya 0. Hivyo sisi ni kwenda tu kurudi 1 kwa sasa. Lakini sababu ya kurudisha 1 ni kwamba haraka kama wewe kurudi 1, nadhani nini kinatokea kwa mapumziko ya mpango wa? Ni ataacha. Hiyo ni. Hivyo ukweli kwamba mimi nina kurudi 1 ni ufanisi Mkato wa umeme utekelezaji mpango huu ili kwamba kitu chini ya mstari wa 27 itaendelea kutekeleza. Haraka kama anarudi kuu, kwamba ni yake. Haki ya wote, hivyo kama mtumiaji gani kushirikiana na sisi kufikia mstari 30 kwa sababu wao typed katika idadi halali, hapa ni yangu utekelezaji wa wimbo huu. Basi, mimi kwanza magazeti nje tabia newline, tu kwa aesthetics. Mimi sasa kwa kitanzi. Na taarifa mimi nina kufanya mambo katika kidogo mwelekeo tofauti. Sina kufanya chini ya, sijui kufanya + +. Naweza kusema badala initialize variable i, kuweka sawa kwa n, idadi ya mtumiaji typed katika, basi kufanya yafuatayo, hivyo muda mrefu kama i ni mkubwa kuliko 0, kisha i - mara moja ya kumaliza moja iteration ya kitanzi hii. Hivyo tunaweza kuhesabu chini ya kutumia kwa kitanzi kama vizuri. Sasa, hii ni kiasi pretty wiki moja ya mambo sasa, pamoja na printf. Hivyo magazeti "% d chupa ya bia juu ya ukuta." Print "% d chupa ya bia. "" Chukua moja chini, kupita ni kuzunguka. "Print "% D chupa ya bia juu ya ukuta." Hivyo ni bado% d, lakini taarifa kwamba hoja printf ni kubadilisha. Baada ya comma, nina i, kwa sababu mimi nataka kusema 99. Baada ya comma hii, nina i, kwa sababu mimi nataka kusema 99. Baada ya comma hii, nina i - 1, kwa sababu nataka kusema 98 katika hii iteration kwanza, na kadhalika. Na sasa hapa chini, mimi tu na baadhi ya kijinga kidogo remark. Na kisha mstari 42, mimi kurudi 0 na mkataba, akionyesha kwamba kila kitu ni sawa. Basi nini kama mimi goofed? Nini kinaweza makosa ya kawaida hapa kuwa? Naam, nini kama mimi ajali alisema vizuri, sijui wanataka kuhesabu chini ya 0, nataka 0 chupa ya bia juu ya ukuta? Kwa hiyo nasema, i ni mkubwa kuliko au sawa na 0. Nini kinaendelea kuwa dalili kwamba mimi sasa kuona kama mimi recompile beer1 na kukimbia? Watazamaji: Hasi. DAVID J. Malan: Yeah, ni gonna kwenda hasi. Hili ni kosa mbali-na-moja, incredibly makosa ya kawaida ya kufanya. Hebu kweli kwenda nyuma ya dirisha terminal na kufanya hivyo hapa, ili tuweze kuona zaidi kwa wakati. Kuingia, chupa 99 ya bia. Karibu, lakini sisi akaenda milele hivyo kidogo mbali sana. Sisi kuimba wimbo mbali mno chini, kwamba vile sisi sasa hit hasi idadi. Hivyo haina kabisa kazi. Haki ya wote, hivyo tunaweza urahisi fix kwamba kwa kurejea njia mara moja mara. Lakini nini ni baadhi fursa kwa sasa kuboresha? Vizuri, basi mimi kufungua beer2.c na kitabu hapa chini na kuchukua kuangalia toleo hili. Nini jambo la kwanza kwamba anaruka nje saa wewe kama tofauti katika toleo hili hapa? Watazamaji: [inaudible]. DAVID J. Malan: Yeah, hivyo hakuna zaidi i, kwa sababu ilitokea mimi unajua nini, Mimi nauliza mtumiaji kwa ajili ya n, na basi mimi nina kuweka i sawa na n, na kisha mimi nina i kubadilisha, lakini nina kamwe kugusa n tena. Basi nini heck ilikuwa pa wewe kugawa mwingine 32 bits kuitwa i tu ili niweze kuwa na variable tofauti? Hivyo katika kesi hii, mimi aina ya kutambuliwa kwamba unnecessary kubuni kipengele. Na mimi sasa kwenda kusema wakati n, ni mkubwa kuliko 0, kwenda mbele na magazeti wimbo huo, kupita n kwa printf kama pili hoja, na n - 1 kama hoja ya pili chini hapa. Na kisha juu ya kila iteration ya kitanzi hii, kwenda mbele na tu pungufu n yenyewe. Sasa, functionally, mpango huu ni kwenda kuwa kufanana. Kama mimi aina katika 99, n kuanza saa 99. Mimi pungufu, pungufu, pungufu, pungufu. Mimi naenda kupata njia yote chini "Moja chupa ya bia ukuta, chupa moja ya bia. Kuchukua moja chini, kupita ni kuzunguka. 0 chupa ya bia juu ya ukuta. "Mwisho, kwa sababu sikuwa na kupata hali sahihi. Ni kubwa kuliko 0. Sikuweza kufanya hili kosa. Hivyo ambayo ni bora zaidi, toleo moja au toleo mbili? Hivyo nikasikia rundo la manung'uniko kwa mbili. Mbona mbili? Nini hiyo? Watazamaji: [inaudible]. DAVID J. Malan: Oh, sawa. Hivyo itakuwa si kwenda chini ya 0, lakini kumbuka katika toleo moja, awali ya toleo sahihi hawakuwa kwenda chini 0 aidha. Basi kumbuka kwamba hii ni toleo sahihi. Hivyo basi ni angalau kulinganisha matoleo mawili sahihi. Nini hoja katika neema ya toleo mbili kuwa, mmm, bora? Yeah? Watazamaji: Ni anatumia nafasi chini. DAVID J. Malan: Okay, hivyo anatumia nafasi chini, sawa? Wakati toleo moja kutumika bits 32 kwa n, na kisha mwingine 32 bits kwa i. Toleo mbili tu anatumia bits 32 kwa n, hivyo kwamba inaonekana kuwa plus. Nyengine mawazo? Je, mtu yeyote wanataka wanasema katika neema ya mtu mmoja? Yeah? Watazamaji: Una kutumia line ziada ya maadili kwa n -. DAVID J. Malan: Okay, uhakika. Basi hiyo ni haki. Hivyo hii tu, angalau kwangu - I mean, hii kwa kweli anahisi messier kidogo, ukweli kwamba Siwezi aina ya kurejelea wote wa mantiki yangu katika moja nzuri line, kwa kitanzi, kama kwa kitanzi unaweza. Hapa, mimi aina ya kuwa na tack juu ya hii n - mwishoni mwa kitanzi, kwa sababu ni mantiki muhimu. Lakini ni aina ya rubs yangu njia sahihi, kwa sababu tu inaonekana tofauti na mantiki ya juu hapa, ingawa, tena, ni muhimu. Nyengine mawazo? Yeah? Watazamaji: [inaudible]. DAVID J. Malan: Yeah. Basi nini kama wewe badala yake, mwisho wa wimbo, alitaka magazeti nje tena jina la wimbo? Kama "Shukrani kwa ajili ya kucheza chupa ya bia 99", au kitu silly kama hayo? Lakini uhakika ni, alitaka kupata thamani ya awali. ukweli kwamba ve mutated au iliyopita n juu ya kila iteration na kwa hiyo wameharibu thamani yake ya awali maana wewe tu hawezi kufanya kwamba mwishoni. Sasa, arguably, sisi wazi hawataki kufanya kwamba katika mpango huu. Hivyo ambaye anajali? Lakini hiyo ni hatua halali sana. Na kwa kuwa waaminifu, kuna kweli hakuna moja haki kujibu hapa. Wao ni sahihi zote kwa usawa. Mimi naweza kuwa wanaamini ama njia. Mimi kusema kwamba, kwa ujumla, ni kanuni nzuri kama wewe aliuliza mtumiaji kwa thamani baadhi na wewe kuhifadhiwa katika variable kama n, tu aina ya juu ya kanuni, pengine nzuri kuendelea kuwa karibu. Na yoyote data unataka mutate tena na tena, tu kutoa mwenyewe nakala ya variable kwamba, ili tu kuwa wewe kupata awali. Wewe ni matumizi ya 32 bits zaidi, lakini ukweli ni huu kompyuta ina, kama, gigabytes mbili ya RAM siku hizi, na sisi ni juu ya quibbling bits 32? Kweli si kama mpango kubwa. Na hata kwenye kifaa hiki hapa, na nusu GIG au gigabyte ya RAM, 32 bits dhidi bits 64, si kama mpango kubwa. Hakika leo, ni kwenda kuwa njia kuzidiwa na ukubwa wa programu yenyewe, ambayo ni kwenda kuwa mia kadhaa kilobytes, kama si megabaiti chache, siku hizi. Hivyo busara wasiwasi, hakuna haki ya mmoja jibu. Lakini angalau wale ni mawazo kwamba lazima kuanza kupitia mawazo yako? Kwa sababu katika pset 0, ingawa kwa kweli sisi tu inatarajiwa usahihi, au angalau Kuyakana mende mbalimbali kwamba unaweza kuwa wamekutana, kama sisi kusonga mbele, design ni kwenda kuwa jingine muhimu, wote wa kuandika code na pia kutathmini wetu code. Na hivyo angalau kutoa mawazo ya mambo kama hayo. Na kwa sababu tu kitu kazi haina maana ni vizuri, haina maana ni vizuri iliyoundwa. Na kwamba ni moja ya mambo wenzake mafundisho na tatizo seti itatusaidia tease sehemu ya muda. Naam, nini kuhusu, hebu sema, toleo hili hapa? Hebu kufanya kitu kidogo sexy hapa katika wakati huu. Kwanza napenda kujikwamua hii. Na sasa hebu kurekebisha hili suala grammatical. Hivyo katika toleo hili, nataka kurekebisha sarufi hivyo kwamba, badala ya kusema tu s parenthetical, kama "chupa" au "chupa" - Sitaki kukata kona - Mimi pia nataka dynamically magazeti nje neno "chupa" au "chupa", na hivyo kutumia placeholders haya% s leo. Hivyo mimi haja ya masharti kuangalia nini ni thamani ya i. Na kama ni 1, nataka kusema "chupa", na kama kitu ni kingine, mimi nataka kusema "chupa". Basi hebu jaribu kufanya kazi hii. Hivyo kama i == 1, basi mimi kwenda mbele na kutangaza - Nahitaji kamba, hivyo basi mimi kufanya S1 kamba, kwa sababu ni kwanza string najali hivi sasa. Mimi naenda kusema "chupa". Na kisha, hebu angalia, kamba S2 - na mimi itabidi kueleza wapi nitakacho katika wakati - "Chupa." Hivyo kukumbuka kwamba, katika wimbo huu, tunahitaji kuwa na uwezo na magazeti mambo, mbili tofauti maneno uwezekano. Hivyo kama sisi kuangalia nyuma hapa, taarifa kwamba wakati sisi kupata mfano huu hapa, "chupa mbili za bia juu ya ukuta, chupa mbili za bia, chukua mtu mmoja chini, kupita kote ", nataka line hii ya nne sasa kusema "chupa moja ya bia ukuta "Kwa hiyo mimi haja ya kuamua., je, mimi nataka kusema" chupa "au "Chupa"? Hivyo nina kwenda kwa kiholela kusema, haki ya wote, Mimi naenda sasa kutangaza variable S1 aitwaye, kamba moja, kwamba ni kwenda kupata plugged katika hapa na pia hapa, kwa sababu wale maneno ni daima kufanana, kwa sababu tu ya asili ya wimbo. Na mimi naenda kuwaita S2 chochote neno nataka hatimaye itaonekana chini hapa. Sasa, literally, 99 mara nje ya 100, ni kwenda kuwa sawa katika wawili wa kesi hizo, kwa sababu 3 ni wingi, 2 ni wingi, 4 ni wingi. Lakini katika kesi hii kona, ambapo sisi kupata 2 na kisha 1, au hata 1 na kisha 0, nahitaji mantiki hii. Hivyo nina kutumia muda katika code yangu kupata haki hiyo. Hivyo kama mimi kufanya hili, kama i == 1, kisha kuweka S1 sawa na "chupa" na S2 sawa na "chupa", kwa sababu hii itakuwa kwa 1 chupa, na hii itakuwa kwa chupa 0. Na hii hapa, nini hii kuwakilisha? Tu kuwa wazi. Hii ni maoni. Hivyo ukweli kwamba unaweza kuwa na maoni moja-line ina maana unaweza kutoa maoni yako code kama hii, lakini mwingine kawaida dhana, pia, ni kwamba kama una maneno super-fupi kwamba unataka kuweka mwenyewe na ni tu zaidi someka kuweka haki mwishoni mwa mstari wa kanuni, unaweza kabisa kufanya kitu kama hiki. Hivyo sasa nini kama mimi kufanya hili? Mwingine kama i si sawa na 1. Hivyo bang sawa - uhakika Moderators inajulikana kama "bang". Hivyo bang = 1. Hivyo kama i si sawa na 1, je, mimi badala wanataka kufanya? Naam, neno la kwanza nataka kuwa nini? Hivyo string 1 unapaswa kuwa "chupa" kwa chupa wingi, na kisha hii itakuwa wingi "chupa" pia, kwa sasa. Na tutaweza kuona kama kweli hii anapata yetu kwa ambapo tunataka kwenda. Hivyo sasa kama mimi kitabu chini hapa, taarifa kwamba mimi nina plugging katika si tu i, lakini S1. Mimi nina plugging katika i na S1. Na kisha chini hapa, mimi nina minus 1, ambayo ni sawa kama kabla, lakini S2. Kwa maneno mengine, nataka neno la Kiingereza na mabadiliko ya msingi juu ya mantiki hii. Sasa, kuna baadhi tayari matatizo katika kanuni hii. Nini ni kuvunjwa tayari nje ya lango hapa? Yeah? Watazamaji: [inaudible]. DAVID J. Malan: Hasa. Hivyo nimekuwa tayari vunja somo la wigo. Hivyo nimekuwa alitangaza S1 na S2, lakini nimekuwa amefanya hivyo ndani ya curly braces, ambayo ina maana yeah, code hii kazi juu mpaka mstari 42, lakini haraka kama mimi hit mstari 43, nadhani nini hakuna tena ipo? Naam, nadhani nini tena katika upeo - wala S1 au S2. Hivyo tuna kurekebisha hii. Hivyo basi mimi kufuta maazimio. Na mimi itabidi kuondoka majina kutofautiana na kufuta hii hapa na kufuta hii hapa. Na katika kile mistari lazima kweli mimi kutangaza mambo haya? Watazamaji: [inaudible]. DAVID J. Malan: Yeah, hivyo pengine haki ya juu hapa, 33-ish. Hivyo string S1 na kisha string S2. Na zinageuka, siwezi kufanya hivyo. Kama wewe ni kutangaza vigezo wawili wa aina hiyo, unaweza kweli tu kutumia comma na kufanya hivyo katika C. zote haki, hivyo sasa nina vigezo mbili - S1 na S2. Mimi nina kumshirikisha yao katika maadili haya hali ya hapa, au hapa. Na kisha mimi nina kutumia yao chini chini. Ni kwa kiasi gani hii sasa kwenda kufanya kazi? Naam, ni bado Buggy kidogo, lakini hebu ni angalau kuona jinsi mbali tumekuwa wamezipata. Hivyo basi mimi kwenda mbele na kufanya beer3. Je, hii ni beer3? Yep, hii ni beer3. Na sasa napenda kwenda mbele na kukimbia beer3. 399 99. Pengine tunaweza ruka wengi wao. Na hapa chini, kuangalia kwamba. "Moja chupa ya bia juu ya ukuta, chupa moja ya bia, kuchukua moja chini, kupita ni kuzunguka, chupa ya bia 0 juu ya ukuta. " Lakini mimi nina kuchora wako makini na nusu tu ya ufumbuzi. Aina ya Star up hapa. Hivyo inaonekana kuwa kesi kona kujitokeza wakati i sawa na yale mbili maadili? Watazamaji: 2, 1. DAVID J. Malan: 2 na 1. Siyo 1 na si 1. Ni kweli tu hizi mbili za mwisho stanza ya wimbo huu. Basi je, mimi badala wanataka kufanya? Hivyo mimi wanaonekana kuwa hawakupata kesi ambapo kama i ni == kwa 1, basi neno la kwanza ni "chupa", lakini neno pili ni "chupa". Lakini hapa, nataka kubadili hili kuwa == 2. Na kama hii ni kesi, je, nataka neno la kwanza kwa kuwa? Watazamaji: "chupa". DAVID J. Malan: "chupa", hivyo kwa chupa mbili. Na kisha neno hili hapa inapaswa kuwa - Watazamaji: "Bottle". DAVID J. Malan: "Bottle", umoja. Haki zote, hebu zoom nje, kwenda nyuma zaidi ya hapa, re-run kufanya, re-kukimbia beer3, aina 99 tena. Sawa, "Mkato kosa (msingi kutupwa)." Nimefanya nini kibaya? Watazamaji: Huna thamani [inaudible]. DAVID J. Malan: Ah, bora uhakika. Haki ya wote, hivyo nini makosa hapa? Hivyo kosa segmentation, na sisi ni kweli kwenda kuona hii kabisa mara chache katika siku zijazo, kwa makusudi. Lakini kwa sasa, ni nini hii kwa kweli ina maana gani? kosa segmentation karibu daima ina maana kwamba namna fulani walijaribu kupata kumbukumbu, RAM katika kompyuta yako, kwamba huna mwenyewe, kwa kuwa si kweli aliuliza mfumo wa uendeshaji kwa. Hivyo katika kesi hii, taarifa ya kile nimepata kufanyika, ambayo ni kiujanja kwa mantiki yangu. Mimi kupewa S1 na S2 thamani kama i sawa na 1. Nimekuwa pia kufanyika kwamba kama i sawa na 2. Lakini mimi si kufanyika katika idadi ya usio wa wengine uwezekano - hasa, 3 au 4 au nukta nukta nukta 99. Hivyo moja kwa fix hii inaweza tu kuwa wacha na hali ya mwingine. Na kuniachia katika hapa na kusema S1 sawa - nini iwe hapa? Watazamaji: [inaudible]. DAVID J. Malan: "chupa", kwa sababu katika kesi ya kawaida, ni tu kitu kimoja. Hivyo ni sawa quote, unquote, "chupa." Hivyo kwa wingi chupa, na kisha hapa juu kwa wingi chupa. Sawa, hivyo sasa napenda kwenda nyuma terminal dirisha yangu, recompile, re-kukimbia. 99. Whew. Na hebu kufanya haraka sanity hundi. Kitaalam, tunatarajia wanataka kusoma yote haya ili kuhakikisha ni sahihi, lakini hebu tuangalie angalau wakosaji maalumu. 3 chupa, chupa 2, chupa 2, 1 chupa, chupa 1, chupa 0. Sisi wanaonekana kuwa angalau fasta kwa sasa. Lakini samaki hapa ni kwamba mungu gani kubwa fujo hii ni tu kutatua kijinga moja-tabia grammatical undani. Hivyo kuna aina ya sababu mimi kukata kona hii awali, kwa sababu ni haki kabisa annoying kuwa na kuandika hii code sana. Lakini zinageuka kuwa kuna kidogo zaidi kifahari njia ya akielezea exact kitu. Na tunaweza kufanya hili kama ifuatavyo. Hebu kuondoka kwenye screen kwa wakati na kuanzisha kitu inayojulikana kama operator ternary. Hii ni aina ya mjengo moja tu hiyo ilimaanisha kufanya wetu anaishi sexier kidogo, kama alivyoahidi. Na mimi naenda kufanya hii kama ifuatavyo. Nipe string kuitwa S1, na napenda hawawajui ni kama ifuatavyo. (I == 1)? "Chupa", vinginevyo "chupa". Kamba S2 anapata (i == 2)? "Chupa", vinginevyo "chupa". Basi nini basi ni tofauti hapa? Hizi mistari miwili ya kificho, na Mimi wanasema, unaweza kuchukua nafasi hii fujo nzima. Hivyo naita fujo, kwa sababu tu ya aina ya rubs yangu makosa njia ambayo ni hivyo wengi mstari wa kanuni. Si vibaya. Ni si mbaya design. Kama, hii ni sahihi na kikamilifu kikamilifu faini. Lakini coding anapata tedious kama una kueleza mwenyewe hivyo damn hasa tena na tena na tena na rahisi scenario kama hii. Hivyo C ana shortcuts baadhi, kama hii. Hivyo hii kimsingi ni kusema kutangaza string kuitwa S1 na hawawajui ni aidha thamani hii au thamani hii kama i ni == - sorry, mimi lazima kusema hii wazi zaidi. Kutangaza S1 variable, hawawajui ni thamani hii kama hii ni kweli. Vinginevyo, hawawajui ni thamani hii. Hivyo kwa maneno mengine, hii ni aina ya njia moja-line ya akisema ikiwa kingine lakini kufanya zoezi njiani. Hivyo kama i ni 1, kisha kwenda mbele na wito huu "chupa". Na basi hii kingine, simu yake "chupa". Wakati huo huo, S2, pili neno kwamba tunahitaji define, kama i sawa na 2, tutaweza kuweka S2 na "chupa". Vinginevyo, kuweka kwa "chupa". Na nini hii ina maana sasa ni siwezi kwenda kwa njia hii na kufuta yote ya wale mstari wa kanuni. Na wakati mimi kusema, kiasi fulani ridiculously, kwamba hii ni sasa sexier, ni sexier katika aina ya hisia Stylistic. ukweli kwamba functionally, kanuni hii ni kweli kwenda kufanya exact kitu. Na hata ingawa inaweza kuangalia kidogo cryptic kwa mara ya kwanza mtazamo, kwa sababu tumekuwa si kuonekana hii ya kujenga mbele, mimi d wanasema kuwa ni hatimaye kwenda kuwa hivyo zaidi someka na rahisi sana kwa sisi binadamu kwa aina ya kuelewa, kwa sababu sasa unaweza kusoma tu code wote kwenye mstari mmoja. Ni sawa bado katika roho na kama, ambapo hii ni hali na basi hii ni nini ndani ikiwa na hii ni nini ndani ya mwingine. Lakini tunaweza kufanya hivyo tu zaidi elegantly. Na kama mimi sasa kurejea terminal yangu, baada ya kufutwa wote wa wale mistari na badala yao tu wale wawili, recompile, re-kukimbia chupa ya bia na 99, taarifa kwamba yangu sarufi ni, kwa kweli, bado sahihi. Hivyo tena, kitu kuanza. 2 chupa ya bia, 1 chupa ya bia. Looks haki. Yeah. Hivyo kuna tuna mengi zaidi succinct ufumbuzi. Hivyo hii, pia, kama wewe kupata zaidi starehe na C, si lazima kwa pset kwanza au hata wa pili, lakini kutambua kwamba hawa constructs wanaweza kuruhusu sisi kufanya mambo milele zaidi elegantly. Sasa hebu kufanya moja nyingine kitu hapa. Hebu kwenda mbele na kufungua return1.c. Sasa hebu kuanza kutatua tatizo jingine katika njia ambayo inaruhusu sisi kuandika kisasa zaidi code. Hivyo hapa ni rahisi kidogo mpango ambao lengo katika maisha ni increment maadili. Na kweli, hebu kuchukua hatua nyuma. Hebu kufanya hili manually. Basi mimi kufanya ni pamoja na int kuu (utupu). Na napenda kuwaita hii increment.c. Na nini nataka kufanya? Mimi nina kwenda mbele na kusema kitu kama - itakuwa sisi kupiga namba moja - int x. Hivyo x int anapata 2; x printf ni% d, mstari wa mwezi, x. Hivyo mimi nina kuandika haraka, lakini aina ya mambo ya ukoo sasa. Kisha mimi naenda kufanya x + +. Kisha mimi naenda magazeti kwamba hukumu hiyo tena. Na kisha mimi naenda kurudi 0 tu kuacha mpango. Haki zote, hivyo hii ni programu ambayo nyongeza idadi. Ni kwanza kwenda initialize kitu 2, na kisha ni kwenda increment hiyo na magazeti tena. Hivyo hebu kukimbia increment, incredibly rahisi mpango. Lakini tuseme sasa kwamba mimi nataka mchemraba thamani, hivyo kufanya kitu fulani holela. Na mimi kwa kweli wanataka kufanya x anapata mchemraba yake. Hivyo mimi naweza kutumia kile kinachoitwa kazi pow, lakini mimi si kweli kujua kwamba ni ambapo bado. Hivyo nina kwenda kufanya njia hii ya kizamani. x mara hii ni sawa na x mara x mara x. Hivyo nina cubing thamani, kuzidisha ni kwa yenyewe tena na tena na tena, ili tuweze kupata nguvu ya 3 katika kesi hii. Hivyo sasa idadi mimi lazima magazeti lazima, kama tutaweza kuona hapa - kufanya increment, hivyo ni kweli si kweli increment tena, lakini tutaweza kuondoka jina peke yake - 2 na kisha 8. Sasa, tuna mwanzo wa fursa kwa finslipades hapa, ambapo jambo hili cubing ya kuzidisha idadi na yenyewe kwa yenyewe kwa yenyewe anahisi kama hii inaweza tu kuwa muhimu kuwa kama kazi, kiasi kama mtu aliamua miaka iliyopita - unajua, aina ya manufaa kama mmoja wetu anakaa chini na anaandika printf ili wengine wa dunia unaweza kutumia, kwa nini sio sisi kukaa chini na kuandika kazi kuitwa mchemraba kwamba hana huu cubing kwa ajili yetu ili sisi hawana manually kutekeleza dhana ya maadili cubing hapa? Basi mfano rahisi, lakini hebu kwenda mbele na kutumia hii ni kama fursa ya kuandika kazi zetu wenyewe. Hivyo hivi sasa, tumekuwa tu kutumika kuu, na tumekuwa kutumika nyingine watu kazi, lakini hatuna imeandikwa yetu wenyewe. Hivyo hapa sisi kwenda. Mimi nina kwenda mbele na kuandika kazi kuitwa mchemraba. Na mimi naenda kuwa ni kuchukua pembejeo. Hivyo mchango wake ni kwenda kuwa integer. Na kile ni kwenda kufanya? Ni kwenda kutangaza pato int = pembejeo mara pembejeo mara pembejeo. Na kisha itakuja kurudi kwamba pato. Na kisha mimi kuwa maalum sasa. Kazi hii ni ya kwenda na kurudi int. Hivyo hapa basi ni jinsi wewe d kuandika yako majukumu wenyewe. Wewe kwanza kuamua nini jina la yako kazi kwenda kuwa. Na kwa ujumla, kitu maelezo ni nzuri, hivyo mimi itabidi kuiita mchemraba. Basi una bayana nini ni kwenda na kurudi, nini matokeo yake itakuwa. Na hatuna chaguzi kwamba wengi bado. Int, char, kuelea, bool, kamba. Kwa sasa, mimi naenda kwa fimbo na int, kwa sababu mimi nataka kurudi integer. Basi una bayana nini pembejeo yake, kama yapo, ni. Na kama mchemraba inachukua hoja, inachukua kitu kati ya mabano, una kutoa hoja kwamba jina ili unaweza kuiita kitu kama wewe ni kutekeleza au kuandika kazi hii, na una kuwapa aina, ambayo katika hii kesi ni kwenda kuwa int. Hivyo katika muda mfupi, mchemraba ni kazi ambayo inachukua integer kama pembejeo na anarudi integer kama pato. Hivyo ni nini kufanya na pembejeo kwamba? Naam, katika mstari wa 14, mimi kutangaza variable kuitwa pato, na mimi hawawajui ni thamani, mara pembejeo pembejeo mara pembejeo. Na kisha mimi kurudi pato. Hivyo ni jinsi gani mimi kutumia hii basi? Nini mimi kubadili wahusika hawa yalionyesha kwenye mstari 7 kwa kuwa, unafikiri? Watazamaji: [inaudible]. DAVID J. Malan: Yeah, hivyo mchemraba wa x. Hivyo x ni kutofautiana, maana yake ana baadhi ya thamani. Bahati nzuri, ni ya aina integer. Na kwa sababu x ni int, kwamba maana siwezi kupita katika mchemraba. Na hata kama mimi nina kuu thamani ya x kwa thamani ya x mchemraba, kama ilivyokuwa hivi sasa, wakati wowote kuwa ishara sawa na mstari wa kanuni, stuff juu ya haki anapata kunyongwa na kisha anapata kwa ajili ya thamani upande wa kushoto. Hivyo utaratibu wa shughuli ni kama tunataka matumaini. Hivyo gani kazi hii? Vizuri, basi mimi kwenda chini hapa. Hebu kufungua terminal yangu dirisha. Hebu kufanya kufanya increment, Ingiza. "Kinachojitokeza tamko la 'mchemraba' kazi ni batili katika C99 ". Kama kando, C99 inahusu C lugha kama ilivyokuwa inavyoelezwa katika 1999, ambayo ilikuwa update juu ya toleo kutoka 1989, ambayo ni update juu ya awali. Basi hiyo ni njia kwamba wote. Hivyo ni nini maana ya kwamba "thabiti tamko la 'mchemraba' kazi ni batili? "Ni haki hapa. Ni haki pale katika mstari 12. Watazamaji: [inaudible]. DAVID J. Malan: Nini hiyo? Watazamaji: Ni si kabla. DAVID J. Malan: Ni si kabla. Hivyo hii ni kitu. C ni aina ya kijinga, au C compilers ni aina ya kijinga. Wao kwa kweli kufanya kile tu wewe kuwaambia cha kufanya. Na wao, hasa, tu kusoma code yako juu hadi chini, kushoto na kulia. Hivyo kama mkusanyaji, Clang, ni kusoma code yako, mstari 1, ni takwimu nje jinsi ya kufanya hili. Oh, hapa inakuja kuu. Okay, basi mimi kwenda mbele na kutangaza x kutofautiana. Hebu magazeti kitu. Line 7, nini heck ni mchemraba? Ni si alitangaza katika stdio.h. Ni haina kuja na C. Mimi sijui nini cha kufanya. Na hivyo Clang tu Bails na quits na ujumbe kuwa kosa. Hivyo tunaweza kurekebisha hii katika michache ya njia. Tunaweza kufundisha Clang nini mchemraba ni kwa kuwa tu kusonga ambapo tamko ni. Hivyo mimi na kata na pasted ni atop kuu. Sasa kutambua kwamba kwa sababu tu ni kuu tena kwanza, ni bado kunyongwa kwa default. Kuu ni kuu. Ni kazi default jina. Haijalishi ambapo ni katika faili. Lakini angalau sasa Clang ameona mchemraba kabla mimi matumizi yake. Basi hebu angalia kama Clang ni furaha sasa. Matokeo increment, haikuwa kukusanya wakati huu. Hebu kukimbia increment. Na hakika, inaonekana kuwa kazi. Sasa, unaweza kuja na matukio ambapo hatimaye siyo upembuzi yakinifu na kuweka kila kazi juu ya kila kazi nyingine. Utasikia kukwama katika kitanzi hii usio na ukweli wowote, ambapo guy hii anataka kuwa hapa lakini hii guy mahitaji ya kuwa huko. Hivyo kwamba haifanyi kazi. Hivyo nashiriki, C lina ufumbuzi zaidi ya kifahari. Mimi naenda kuweka hii nyuma ambapo ilikuwa, kwa sababu tu mimi wanapendelea, kama suala la kanuni, kwamba kuu zote kuwa saa ya juu, kwa sababu ni nzuri tu na kuona nini mpango huu gani na default. Na kile Mimi naenda kufanya hapa ni kutangaza kile kinachoitwa mfano. Mimi naenda re-kutangaza mchemraba wangu kazi kwa literally kuiga na pasting. Kweli, kwamba si halisi. Hivyo literally kuiga na pasting line 15 juu juu ya mstari 6. Haijalishi nini mstari huu mwisho juu juu. Hutokea kwa kuwa kwenye mstari 4. Lakini haina kuwa kabla kuu. Lakini taarifa tofauti. Line ncha 4 kwa semicolon, ambayo ina maana hey, Clang, kuchukua neno langu kwa ajili yake kuwa kuna kazi kuitwa mchemraba kwamba inachukua int na anarudi int. Lakini mimi nina gonna kukuambia nini ni bado. Tu kujua kwamba mimi ahadi kukuambia hatimaye. Na hakika, sasa ni sawa kwamba hii ni chini chini. Hivyo hii kwa ujumla ni vizuri, kwa sababu kisha saa ya juu ya faili yako, unaweza tu kumkasirisha mbali, haraka-moto, mstari mmoja kila, nini majina ya kazi yako ni, nini wao pembejeo ni, nini matokeo ya kazi zao ni. Na kuwa wazi zaidi, pembejeo kwa ujumla maana yake hoja au parameter, sawa. Pato maana kurudi thamani, ni nini mkono nyuma yangu. Hivyo katika kesi hii hapa, mchemraba ametangazwa saa ya juu, lakini defined, inayojulikana kama kutekelezwa, chini. Hivyo sasa hebu rudi hapa na kuendesha upya hii. Hivyo sasa napenda kwenda mbele na kuendesha upya kufanya, re-run increment. Na sasa inaonekana kufanya kazi nzuri tu. Hivyo sasa tunaweza kwenda mbele na sababu nje kitu kama bia mfano katika toleo hii ya nne. Hivyo basi mimi kitabu chini hapa. Na taarifa kwamba mimi aina ya alichukua somo hili moyo tu sasa. ukweli kwamba mimi alikuwa akiimba Stanza sawa tena na tena na tena, sawa chorus line katika wimbo, waliona like nini si mimi sababu ya kwamba nje katika kazi? Na kwa kweli, hii inapaswa kuwa moja ya motisha. Licha ya ukweli kwamba mtu mwingine katika dunia kutaka kutumia kazi Cube - hiyo ni sababu nzuri ya sababu kitu nje na kuandika yako mwenyewe desturi kazi - kama kuna chunk ya maadili katika mpango wako kwamba tu hufanya dhana hisia, kwamba aina ya kutaka kuwapa jina - kama katika kesi hii chorus, - basi unaweza vile vile kuandika kwamba kama kazi tofauti. Huna kuandika kila kitu katika kuu ikiwa ni tu anahisi safi ili kujitenga nje na kuwapa jina. Hivyo katika kesi hii hapa, taarifa kwamba mimi kuwa na maoni atop kazi hii ya kwamba tu anaimba kuhusu maalum ya idadi ya chupa. Ona hapa kwamba mimi si haja ya simu hizi mambo ya pembejeo na mazao. Kwa kweli, wakati huo mimi tu kuitwa pembejeo yangu b kwa chupa. Na ilani hapa, utupu anapendekeza nini? Hiyo chorus - Watazamaji: Je, si kurudi. DAVID J. Malan: Je, si kurudi thamani. Na kwa kweli, kazi hawana kurudi maadili. Wanaweza tu kufanya kitu. Wanaweza kuwa na kile kinachojulikana madhara, ambayo katika hii kesi ni tu rundo zima la uchapishaji kwenye screen. Hivyo taarifa kwamba kanuni hii hapa, mimi literally tu aliiba kutoka mfano uliopita. Tofauti tu ni badala ya kutumia i kama yangu variable, mimi nina sasa kutumia b kama variable yangu. Hivyo nina b chini hapa, nina b chini hapa, nina b bala 1 chini hapa. Lakini code ni sawa. Lakini tu kuonyesha jinsi sasa tunaweza kutumia hii, basi mimi kwenda mbele na kweli mabadiliko ya hii kuwa kwa kitanzi. kwa (int i = n; i> n; i -). Hivyo nimekuwa kuibiwa kwamba kutoka mfano wetu uliopita. Hapo awali, ni katika mstari 37 kwamba napenda kuanza kuimba wimbo huu annoying. Lakini badala yake, mimi nina kwenda tu sasa kuwaita chorus ya i. Done. Hivyo sasa katika kila iteration ya kitanzi hii, mimi wito nyingine kazi, chorus, kwamba mimi kilichotokea kwa kuandika. Haikuandikwa na mtu mwingine miaka iliyopita. Lakini chorus, wakati huo huo, anatumia printf na magazeti nje hizi mistari minne. Lakini ukweli kwamba mimi nina wito chorus tena na tena katika kitanzi ina maana kwamba mimi nina kwenda kupata, mwishoni sana, exact wimbo kama nina hivi sasa. Hivyo katika muda mfupi, sasa kama mimi kuangalia nyuma katika code yangu, hata ingawa functionally hii ni sawa, taarifa kwamba ni mapya ya kupata hata zaidi someka. Mimi si hasa kujua jinsi GetInt ni kutekelezwa. Kusema ukweli, sijui jinsi chorus ni kutekelezwa. Lakini haijalishi kwangu. Mimi sijali, kwa sababu sasa mimi unaweza aina ya, kama binadamu, kusoma hii chini kutoka juu hadi. Na kwa sababu kazi ni jina lake kutokana na yale waliyo kufanya, code yangu inazidi someka. Na kama mipango yetu kupata magumu zaidi - na mwisho wa muhula, wewe utakuwa kuandika mamia ya mistari ya maadili katika lugha kama PHP na JavaScript na kama - utapata kwamba ni rahisi sana kuliko kuweka wimbo wa nini umefanya kosa. Na wakati wa kuanza kushirikiana na marafiki au washirika au wafanyakazi wenzao, wewe utakuwa na uwezo wa kuandika zaidi mkubwa mipango kwa kuanza mazoezi haya ya msingi jengo vitalu. Hivyo kwa kuwa alisema, kwa nini sio sisi kuiita siku? Na sisi kuona juu ya Jumatano. [Applause]