[Powered by Google Translate] [Kafli 4] [Minna Comfortable] [Nate Hardison] [Harvard University] [Þetta er CS50.] [CS50.TV] Allt í lagi, velkominn aftur til kafla. Í kafla í þessari viku ætlum við að gera nokkra hluti. Við erum að fara í fyrsta ágrip Problem Set 2, sem er Caesar og Vigenère vandamál setja. Og svo við erum að fara að kafa í Quiz 0 endurskoðun og eyða smá tíma recapping það sem við höfum talað um í hvert fyrirlestrum svo langt, og við munum einnig gera nokkur vandamál frá Skyndipróf fyrra ári. Þannig að þú krakkar hafa góð leið til að undirbúa það. Til að byrja, ég hef stígvélum upp nokkrar góðar lausnir fyrir fyrri vandamál setja, Problem Set 2, í þessu rými. Ef þið högg allir þennan tengil og ef þú smellir á nafnið mitt og smelltu á fyrstu endurskoðun mína þú munt sjá caesar.c, sem er nákvæmlega það sem ég er að horfa á. Við skulum tala um þetta mjög fljótt. Þetta er bara sýnishorn lausn. Þetta er ekki endilega hið fullkomna lausn. Það eru til margar mismunandi leiðir til að skrifa þetta, en það eru nokkur atriði sem ég vildi benda sem ég sá þegar ég var að flokka, algengar mistök sem ég held Þessi lausn er mjög gott starf við meðhöndlun. Í fyrsta lagi er að hafa einhvers konar athugasemd haus efst. Á línum 1 til 7 að sjá upplýsingar, Hvað nákvæmlega þetta forrit er að gera. Góð staðall æfa þegar þú ert að skrifa C kóða óháð ef forritið þitt er að finna á einum skrá eða hvort sem það er skipt yfir margar skrár er að hafa einhvers konar orienting athugasemd efst. Þetta er líka fyrir fólk sem fara út og skrifa kóða í hinum raunverulega heimi. Þetta er þar sem þeir ætla að setja upplýsingar um höfundarrétt. Hér fyrir neðan eru # felur. Á línu 16 Það er þetta # skilgreina, sem við munum koma aftur í bara smá. Og svo þegar byrjar að virka, þegar helstu hefst, vegna þess að þetta forrit hefur verið allt í einum virka The mjög fyrstur hlutur sem gerist og þetta er mjög beita og dæmigerð C program sem tekur á lína rök-er að tékka strax fyrir þau rök telja, argc. Hérna sjáum við að þetta forrit er von 2 rök nákvæmlega. Mundu að það sem fyrst rök það er sérstakt það er alltaf nafn forritsins sem er að hlaupa, nafn á executable skrá. Og svo það sem þetta gerir er að það kemur í veg fyrir að notandi frá að keyra forrit með fleiri eða færri rök. Ástæðan að við viljum athuga þetta strax er vegna Við getum í raun ekki aðgang að þessum argv array hérna áreiðanlegum fyrr en við höfum athugað að sjá hversu stór hún er. Einn af the sameiginlegur villur ég sá var fólk myndi strax fara í og grípa argv [1]. Þeir myndu grípa helstu rök úr array og gera a til i að kíkja á það, og þeir myndu gera próf fyrir argc og næsta próf, hvort fyrsta rifrildi var örugglega heiltala á sama tíma, og það virkar ekki vegna þess að um sé að ræða að það eru engin rök til staðar þú munt vera grabbing rifrildi sem er ekki þarna eða reyna að grípa einn sem er ekki þarna. Önnur stór hlutur sem þú ættir að taka eftir er að þú vilt alltaf að prenta út einhvers konar gagnlegum villuboð að notandanum að Austurlöndum þá. Ég er viss um að þú hafir öll keyra forrit þegar allt í einu hún frýs, og þú færð þetta fáránlega litla glugga sem birtist og segir eitthvað hræðilega Cryptic og kannski gefur þér villa merkjamál eða eitthvað svoleiðis sem gerir ekkert vit. Þetta er þar sem þú vilt virkilega til að veita eitthvað gagnlegt og miða til notanda þannig að þegar þeir hlaupa það þeir fara "Ó," andlit lófa. "Ég veit nákvæmlega hvað ég á að gera. Veit hvernig á að laga þetta." Ef þú prenta ekki skilaboð, þá á endanum í raun þannig að notandinn að fara skoða kóðann þinn að reikna út hvað fór úrskeiðis. Það eru einnig nokkur sinnum að þú munt nota mismunandi villa merkjamál. Hér við notuðum bara einn til að segja að það var villa, Það kom upp villa, það var villa. Stærri verkefni, oft forrit sem eru kallaðir með öðrum forritum, mun skila einhvers konar sérstökum villa merkjamál í mismunandi aðstæðum að kerfisbundið samband það sem þú vilt annars bara nota gott enska skilaboð til. Cool. Eins og við vinnum niður, þú getur séð að við draga lykilinn úr. Við prófun á því hvort lykillinn passar. Við fáum skilaboð frá notanda. Ástæðan að við gerum það í þetta að gera á meðan lykkja-og þetta er eitthvað sem við munum ná í a lítill hluti-en það kemur í ljós að ef þú skrifar stjórn D þegar þú færð að GetString hvetja á flugstöðinni hvað sem í raun gerir er að það sendir sérstaf til áætlunarinnar. Það er kallað ELF eða enda eðli skrá. Og í því tilviki, skilaboð band okkar verður núll, þannig að þetta var ekki eitthvað sem við köflóttur fyrir í vanda sett sér. En eins og við halda áfram, nú að við höfum byrjað að tala um punkta og dynamic minni úthlutun á hrúga, stöðva for null þegar þú ert með aðgerð sem gæti skila NULL sem gildi er eitthvað sem að þú þarft að komast í vana að gera. Þetta er hér fyrst og fremst um vöruna. En þegar þú sérð GetString í framtíðinni, svo frá Vandamál Set 4 á, munt þú vilt halda þetta í huga. Aftur, þetta er ekki málið fyrir Vandamál Set 3 annaðhvort þar sem við vorum ekki undir það enn. Loks fáum við að þessum hluta þar sem við komum að aðal dulkóðun lykkju, og það eru nokkrir hlutir sem fara hér. Fyrst iterate við yfir alla skilaboð band sig. Hér höfum við haldið strlen hringja í ástandi, sem fjöldi af þú hafa bent á er ekki góð leið til að fara. Það kemur í ljós í þessu tilviki það er heldur ekki mikill, hluta til vegna þess að við erum að breyta innihaldi skeytisins sig inni í lykkju, þannig að ef við höfum boð sem er 10 stafir að lengd, í fyrsta skipti við byrjum að fyrir lykkju strlen aftur hvað? 10. En ef við breyta þá skaltu segja við breyta 5. eðli sínu, og við kasta í \ 0 staf í 5. stöðu, á næstu endurtekning strlen (skilaboð) verður ekki aftur það sem það gerði í fyrsta skipti sem við iterated, en það mun í staðinn aftur 5 vegna þess að við kastaði í þeim null Terminator, og lengd strengur er skilgreind af stöðu þess \ 0. Í þessu tilfelli, þetta er frábær leið til að fara vegna þess að við erum að breyta því í stað. En þú tekur eftir að þetta er í raun ótrúlega einfalt að dulkóða Ef þú getur fengið stærðfræði rétt. Allt sem 'þurfa er að athuga hvort bréfið sem þú ert að leita á er hástafi eða lágstafir. Ástæðan að við þurfum aðeins að athuga það og við þurfum ekki að stöðva fyrir sem er alfa raunin er sú að ef eðli er hástafi eða ef það er lágstafir þá er það ákveðið á bókstaf, vegna þess að við höfum ekki hástafi og lágstöfum tölustafi. The annar hlutur sem við gerum og þetta er svolítið erfiður- er að við höfum breytt staðlaða Caesar dulmál formúluna sem við gáfum í sett vandamál forskrift. Hvað er öðruvísi hér er að við dregið í hástafi tilfelli Capital, og þá erum við Capital Til baka í lok. Ég veit nokkur ykkar hafa gert það í kóðanum þínum. Did einhver ykkar að gera þetta í uppgjöf þinni? Þú gerðir þetta. Getur þú útskýrt hvað þetta þýðir, Sahb? Með því að draga það út, vegna þess að þú did a mod rétt eftir það, þú ert að taka það út, þannig að eins og þú færð [hósta] stöðu. Og þá með því að bæta það aftur seinna að færst yfir einn sem þú vildir. Já, nákvæmlega. Hvað Sahb sagði var að þegar við viljum bæta við Boðskapur okkar og lykill okkar saman og svo unga fólkið sem, unga fólkið að með NUM_LETTERS, ef við hækka ekki skilaboðin okkar í viðeigandi 0-25 svið fyrst, þá við gætum endað að fá virkilega undarlegt númer því gildi sem við erum að horfa á þegar við skoðum skilaboðin [i], þegar við lítum á ith eðli boðskapar okkar látlaus-texta, er gildi einhvers staðar í þessu 65-122 svið byggt á ASCII gildi fyrir hástafi A gegnum lágstafir z. Og svo þegar við unga fólkið það með 26 eða NUM_LETTERS, þar sem var okkar # skilgreina efst til hægri upp hér, það er að fara að gefa okkur gildi sem er í 0-25 svið, og við þurfum a vegur til þá mælikvarða sem aftur upp og fá það í viðeigandi ASCII svið. Auðveldasta leiðin til að gera það er bara mælikvarði allt niður í 0-25 svið til að byrja með, og þá skipta allt aftur upp í lokin. Önnur algeng villa sem ég sá fólk hlaupa í að ef þú ert ekki í raun að gera þetta stigstærð strax og þú bætir skilaboð og sláðu saman og þú bætir við þeim, segja, í char breytu, vandamálið með það er síðan skilaboð [i] er tiltölulega stór tala til að byrja með- muna það er að minnsta kosti 65 ef það er hástaf- Ef þú hafa a stór takka td eitthvað eins og 100, og þú hefur bætt við 2 saman í undirritaður bleikju þú ert að fara að fá gnægð. Þú ert að fara að fá gildi sem er stærra en 127, sem er stærsta gildið sem bleikju breyta hægt að halda. Aftur, það er hvers vegna þú vilt vilt gera þessi tegund af hlutur til að byrja með. Sumir fengu um að ræða með því að gera hvort annað og prófa til að sjá hvort það myndi flæða yfir áður en þú gerir það, en svona gerist í kringum það. Og svo í þessari lausn við prenta út öllu band á enda. Annað fólk prenta út staf í einu. Báðir eru ógnvekjandi. Á þessum tímapunkti, þú krakkar hafa einhverjar spurningar, einhverjar athugasemdir um þetta? Það sem þú vilt, hlutir sem þér líkar ekki? Ég hafði spurningu. Kannski ég missti það á skýringar, en hvernig virkar þetta forrit sleppa rými til að tengja lykilinn við lengd textans? Þetta er bara Caesar dulmál. >> Ó, fyrirgefðu, já. Já, munum við sjá það. Í Caesar dulmál við fengum um að vegna við hreifi bara stafi. Við snúa aðeins þá ef þeir voru hástafi eða lágstafir. Þið krakkar líður nokkuð vel um þetta? Feel frjáls til að afrita þetta heima, taka það, bera saman það að það sem þið skrifuðu. Ákveðið ekki hika við að senda spurningar um það líka. Og aftur, grein fyrir því að markmiðið hér með vandamál setur er ekki til að fá ykkur til að skrifa fullkomna kóðann fyrir setur vandamál þitt. Það er að læra reynslu. Já. Aftur til gera á meðan lykkja, ef það jafngildi null, svo null þýðir bara ekkert, högg þeir bara inn? Null er sérstakur bendillinn gildi, og við notum null þegar við viljum segja höfum við músina breytu sem bendir til einskis. Og svo yfirleitt það þýðir að breyta, þessi skilaboð breytu er tóm, og hér, vegna þess að við erum að nota CS50 sérstakt band tegund, hvað er CS50 band tegund? Hefur þú séð hvað það er þegar Davíð dró aftur hetta í fyrirlestri? Það er angurvær-það bendi, ekki satt? Jæja, já. >> Það er char *. Og svo mjög að við gátum skipt þessu hérna með char * skilaboðum, og svo GetString virka, ef það hefur ekki tekist að fá band frá notanda, það er ekki hægt að flokka a band, og eitt tilfelli þar sem það er ekki hægt að flokka a band er ef notandinn slær lok eðli skrá, stjórna D, sem er ekki eitthvað sem þú gerir venjulega, en ef það gerist þá virka vilja koma aftur þetta núll gildi sem leið til að segja "Hey, ég vissi ekki að fá band." Hvað myndi gerast ef við ekki setja skilaboð = null, sem er eitthvað sem við höfum ekki verið að gera enn? Hvers vegna vildi að vera vandamál hér? Af því að ég veit að við ræddum svolítið í fyrirlestri um leka minni. Já, við skulum gera það, og við skulum sjá hvað gerist. Spurning Basil var hvað gerist ef við ekki í raun hafa þessi skilaboð = null próf? Við skulum fletta upp á toppinn. Þið krakkar geta tjá þetta út. Reyndar, ég spara það í endurskoðun. Þetta mun vera Revision 3. Það sem þú þarft að gera til að keyra þetta forrit er að þú þarft að smella á þennan gír táknið upp hér, og þú þarft að bæta við rök við því. Þú þarft að gefa það helstu rök þar sem við viljum fara í stjórn lína rifrildi. Hér ætla ég að gefa það í númer 3. Mér finnst 3. Nú zooming út aftur, keyra forrit. Það er í gangi, samantekt, byggja. Hér förum. Það er að bíða eftir að vera beðin. Ef ég slá inn eitthvað eins og Halló-þar var að fara? Ó, program minn tók of langan tíma að keyra. Ég var jawing of lengi. Hér fer það. Nú er ég að slá á Hello. Við sjáum að það brengla viðeigandi. Nú hvað gerist ef við gerum hvetja GetString aftur null? Mundu sagði ég að við gerðum það með því að ýta stjórn D á sama tíma. Ég fletta upp hér. Við munum keyra hana aftur. Building. Þar sem það fer. Nú þegar ég högg stjórna D Ég fékk þessa línu sem segir opt/sandbox50/bin/run.sh, skiptingu kenna. Hafið þið séð það áður? [Nemandi] Hvers vegna er enginn >> miður? [Nemandi] Hvers vegna er engin algerlega sorphaugur í þessu tilfelli? Kjarni sorphaugur er-spurningin er hvers vegna það er engin algerlega sorphaugur hér? Spurningin er að það gæti verið, en algerlega sorphaugur er skrá sem fær geymdar á harða diskinum. Í þessu tilfelli höfum við slökkt algerlega hugarangur á hlaupa miðlara þannig að við höfum fólk ekki seg Faulting og byggja upp tonn af hugarangur algerlega. En þú getur fengið einn. Core hugarangur eru tegund af hlutur sem þú getur oft gera, og stundum þú. Skiptingu kenna, að svara spurningu þinni, Basil, er að segja að við reyndum að fá aðgang að bendi það var ekki sett til að benda á neitt. Mundu Binky í myndbandinu þegar Binky reynir að fara opna músina sem er ekki sem bendir til nokkuð? Í þessu tilfelli sem ég held tæknilega bendillinn er að benda á eitthvað. Það bendir til NULL, sem er tæknilega 0, en það er skilgreint að vera í flokki sem er ekki aðgengileg eftir áætlun þinni, þannig að þú færð skiptingu kenna vegna þess að þú ert ekki að nota minni sem er í gildi hluti eins og hrúga hluti eða stafla hluti eða gögn hluti. Cool. Einhverjar fleiri spurningar um keisarans? Við skulum halda áfram. Við skulum líta á Revision 2 mjög fljótt. Það er Vigenère. Hér í Vigenère við munum ganga í gegnum þetta einn ansi fljótt vegna þess, aftur, Vigenère og Caesar eru alveg líkur. Header athugasemd er áður, # Define er fyrir að forðast að nota þessi galdur númer. The ágætur hlutur er að segja að við vildum fara annað stafróf eða eitthvað svoleiðis. Frekar en að þurfa að fara með höndunum breytt öllum 26 í kóðanum við gætum breytt þessu í 27 eða falla niður ef við værum að nota mismunandi stafróf, mismunandi tungumálum. Aftur höfum við fengið þessa ávísun á rifrildi telja, og í raun þú getur nánast tekið þetta sem sniðmát. Nánast hvert forrit sem þú skrifar ættu að hafa- ef það tekur stjórn lína rök-sum röð línum að lesa svona í upphafi. Það er einn af the fyrstur próf geðheilsu þú vilt gera. Hér það sem við fengum var að við viss um að leitarorðið var í gildi, og það var annað úr skugga um að við gerðum. Takið aftur að við skilið þetta frá argc og 2. Athugaðu að í þessu tilviki eitt sem við þurftum að gera var að stað þess að nota við ég að við vildum að sannreyna allt band, og í því skyni að gera það sem þú ert í raun að fara í karakter með karakter á band. Það er engin góð leið til að hringja eitthvað á það því jafnvel, til dæmis, að ég mun fara aftur 0 ef það er ekki hægt að flokka heiltölu, þannig að ekki einu sinni vinnu. Aftur, nice skilaboð segja að notandinn nákvæmlega hvað gerðist. Þá hérna, aftur, annast okkur einnig tilfelli þar sem sem notandinn slær í stjórn D handahófi staf. Og þá Charlotte var spurning áðan um hvernig við stjórna til að sleppa rými í band okkar hér. Þetta var eins konar svipað og við gerðum með Myspace program sem við gerðum í kafla, og hvernig þetta virkaði er að við elt fjölda bókstafa sem við höfðum séð. Eins og við gengum yfir skilaboð band, sem við gengum yfir staf eftir staf, við fylgt vísitölu sem hluta af okkar fyrir lykkju, og þá erum við elt einnig fjölda af bréfum, svo ekki sértákn, sem ekki eru tölustafir, ekki hvítt rúm að við myndum séð í sérstakri breytu. Og þá breytir þessi lausn á takkann til að fá raunverulegan lykill heiltölu, og það gerir það á flugu, rétt áður en það fer þá að dulkóða raunveruleg skilaboð staf. Það eru nokkrar lausnir sem voru fullkomlega frábært líka sem myndi breyta takkann upp þegar próf fyrir gildistíma lykillinn er. Í samlagning til að tryggja að eðli og leitarorð var bókstaf það kom einnig fram að í heiltala í 0-25 svið að þá sleppa að þurfa að gera það síðar í þessu til hliðar. Aftur, þú sérð hér þetta er í raun nákvæmlega sama kóða sem við notuðum í keisarans á þessum tímapunkti. Þú ert að gera nákvæmlega það sama, þannig að raunverulegur bragð er vangaveltur út hvernig á að kveikja á leitarorð í heiltölu. Eitt sem við gerðum hér að er svolítið þétt er að við endurtaka þessa setningu, held ég að þú gætir kalla það, 3 aðskilin sinnum á línu 58, 59, og 61. Getur einhver útskýrt hvað nákvæmlega er þetta orðasamband? Það er aðgangur að persónu, eins og þú segir. Já, það er [inaudible] staf í leitarorð, og svo það er fjöldi af bréfum séð vegna þess að þú ert bara að flytja með leitarorð þegar þú hefur séð bréfið, svo það er að fara að í raun að sleppa rými og efni eins og þessi. Já, nákvæmlega. Og svo þegar þú hefur séð leitarorð auðan þú unga fólkið bara svo þú færir aftur í kring. Einmitt. Það er fullkomin skýring. Hvað Kevin sagði er að við viljum að kemba í leitarorði. Við viljum fá num_letters_seen staf, ef þú vilt, en ef num_letters_seen yfir lengd á leitarorð, hvernig við komum til baka í viðeigandi svið er við notum unga fólkið rekstraraðila að í raun settir. Til dæmis, eins og í stuttu máli, leitarorðið okkar er beikon, og það er 5 bréf langur. En við höfum séð 6 stafina í texta okkar á þessum tímapunkti og dulkóðuð 6. Við munum á endanum aðgang að num_letters_seen, sem er 6, unga fólkið lengd leitarorð, 5, og svo munum við fá 1, og svo það sem við munum gera er að við munum aðgang að fyrsta staf inni í leitarorð okkar á þeim tímapunkti. Allt í lagi, einhverjar spurningar um Vigenère áður en við halda áfram? Þið krakkar líður nokkuð vel um þetta? Cool, frábært. Ég vil vera viss um að þú krakkar eru að fá tækifæri til að sjá kóða að við höldum lítur vel út og hafa tækifæri til að læra af því. Þetta er að fara að vera síðasta sem við munum vera með rými fyrir um sinn, og við erum að fara að umskipti núna, og ég ætla að fara að cs50.net/lectures svo við getum gert smá quiz skoðunar. Besta leiðin held ég að byrja að gera quiz endurskoðun er að koma til þessa fyrirlestra síðu, cs50.net/lectures, og undir hverri viku liðum, þannig að ef ég lít hérna í viku 0, Ég sé að við höfum lista yfir efni sem við fjallað í viku 0. Ef eitthvað af þessum viðfangsefnum virðist framandi fyrir þig þú munt örugglega vilja til að fara til baka og scour Fyrirlesturinn athugasemdir og hugsanlega jafnvel Lögð gegnum fyrirlestra, horfa á þær aftur ef þú vilt til að fá tilfinningu fyrir hvað er að gerast hjá hverjum þeim efni. Ég segi einnig á þessu ári einn af the kaldur auðlindir sem við höfum fengið er þessi stuttbuxur sem við höfum búið til, og ef þú lítur í viku 0, við höfum ekki öll efnisatriði, en við höfum fengið alveg nokkrar af þeim, sumir af the trickier sjálfur, svo að horfa á þessa stuttbuxur aftur er góð leið til að fá þig til að hraða. Sérstaklega ætla ég að setja í sambandi við 3 á botni, þar sem ég gerði þá. En ef þú ert í erfiðleikum með tvöfaldur, bitar, álög, að hvers konar efni, tvöfaldur er frábær staður til að byrja. ASCII er annað sem er gott að sjá líka. Þú getur jafnvel horfa á mig á 1,5 x hraða ef ég er að fara of hægur fyrir þig. Þar fara yfir það er, ekki hika við að gera það. Bara að byrja mjög fljótt, við erum að fara að fara í gegnum a par af þessum quiz vandamál bara að fljótt strokkur í gegnum þetta. Til dæmis, við skulum líta á vandamál 16 sem ég hef fengið allt hér á borð. Við höfum fengið þetta eftirfarandi útreikninga í tvöfaldur, og við viljum sýna hvaða vinna. Allt í lagi, ég ætla að gefa þetta skot. Þú krakkar ættu að fylgja með pappír, og við munum gera það í raun fljótt. Við viljum til að framkvæma eftirfarandi útreikningi í tvöfaldur. Ég hef fengið 00.110.010. Og ég ætla að bæta við það 00.110.010. Fyrir stærðfræði snillinga eftirfarandi eftir heima, Þetta er í raun margfalda með 2. Við skulum byrja. Við ætlum að fylgja sömu viðbót reiknirit sem við gerum þegar við bætt aukastafi tölur saman. Raunverulega er eini munurinn hér að við lykkja til baka um þegar við höfum 1 + 1 stað þegar við fáum til 10. Ef við byrjum frá hægri, mjög fljótt, hvað er fyrsta stafa? [Nemandi] 0. >> [Nate H.] 0. Frábært, annað stafa? [Nemandi] 1. [Nate H.] Er það 1? 1 + 1 er? [Nemandi] 10. [Nate H.] Einmitt, þannig það er stafa að ég skrifa rétt fyrir neðan 2 sjálfur bætt saman? [Nemandi] 1, 0, eða 0 og þá bera 1. [Nate H.] 0 og bera 1, nákvæmlega. Næsta einn upp, Basil, þú ert upp. Hver er þriðji? >> [Basil] 1. [Nate H.] 1, fullkominn. Kevin? [Kevin] 0. >> [Nate H.] 0, Charlotte? [Charlotte] 0. >> [Nate H.] Já, og hvað á ég að gera? [Námsmaður] The 1. [Nate H.] Og hvað á ég að gera? Og svo ég bera 1. Perfect, Sahb? >> [Sahb] Nú hefur þú 1. [Nate H.] Og ég ekki neitt hér? [Sahb] þá fyrir næsta sem þú átt 1 vegna þess að þú fara yfir 1. [Nate H.] Great, svo hér að við getum klárað það upp. Cool. [Nemandi] er 0 + 0 = 0? 0 + 0 = 0. 1 + 1, eins og þú sagðir, er 10, eða 1, 0, frekar. 10 er rangnefni vegna þess að mér 10 merkir númer 10, og það er quirk um hvernig við erum fulltrúar það þegar við erum að skrifa það. Við tákna fjölda 2 um 1, 0, og númer 10 er aðeins öðruvísi. Hvað er svona gott um tvöfaldur er að það eru ekki margir tilfellum þarf að læra. Það er 0 + 0 = 0, 0 + 1 = 1, 1 + 1 er 0, og þá bera 1, og þá er hægt að sjá hér á þriðja dálki frá hægri við höfðum þetta 1, 1 og 1. Og 1 + 1 + 1 er 1, og þú bera annað 1. Þegar þú ert að gera tvöfaldur auki frekar einfalt. Ég myndi gera nokkrar fleiri af þessum andlega heil að nýju stöðva ykkur áður en þú ferð í því að þetta er líklega eitthvað sem við munum sjá á spurningakeppni. Nú skulum gera þetta á næsta einn eins og heilbrigður. Gerum vandamál 17. Við ætlum að breyta eftirfarandi tvöfaldur númer aukastaf. Ég hef 10100111001. Mundu að tvöfaldur vídeó sem ég gerði Ég gekk í gegnum a par af dæmi, og ég sýndi hvernig allt virkar þegar þú ert að gera það í tugabrot. Þegar þú ert að vinna í tugakerfisframsetningu ég held að við séum á þessum tímapunkti í lífi okkar svo reiprennandi í því að það er nokkuð auðvelt að gljái yfir aflfræði af því hvernig það virkar í raun. En til að gera a fljótur ágrip, ef ég númer 137 þetta þýðir-og í raun aftur, þetta er í tugakerfisframsetningu- númer 137 í aukastaf þýðir að ég hef 1 x 100 + 3 x 10 + 7 x 1. Þetta er allt að fara á skjánum. Og svo ef þú horfir á þessar tölur hérna, 100, 10 og 1, sérðu að þeir eru í raun öll völd 10. Ég hef 10 ² 10 ¹ og 10 til núll. Við höfum svipuð svoleiðis í tvöfaldur, nema að undirstaða okkar, eins og við köllum það, er 2 í stað 10. Þessar 10s sem ég skrifaði niður á botn, þetta 10 ², 10 ¹, 10 til núll, 10 er undirstaða okkar, og veldisvísir, 0, 1, eða 2, ef miðað er við stöðu stafa í númer sem við skrifum. 1, ef við lítum á það, þetta 1 er í 2. sæti. The 3 er í 1 stöðu, og 7 er í 0 stöðu. Það er hvernig við fáum mismunandi exponents neðan til bækistöðvar okkar. Eftir allt þetta we'll-raun, þú veist hvað? Við munum gera-þar var losa hnappinn minn fara? Þar sem það fer. Ég elska þetta losa hlutur. Eftir þetta held ég fyrir mig að minnsta kosti auðveldasta leiðin til að byrja að breyta tvöfaldur númer eða sextánskur númer þar sem stöð er 16 og ekki 10 eða 2 er að fara á undan og skrifa út undirstöður og exponents fyrir allar tölur í tvöfaldur fjöldi minni efst. Ef við byrjum frá vinstri til hægri á ný, sem er eins konar counterintuitive, Ég aftur í svart hérna, við höfum 2 í 0 stöðu, og þá höfum við 2 ¹, 2 ², og síðan 2 til 3, 2 til 4, 2 til 5, 6, 7, 8, 9, og 10. Þessar tölur sem ég hef skrifað út eru allir exponents. Ég skrifaði aðeins bækistöðvar hér í fyrsta 3 bara um pláss. Á þessum tímapunkti er ég að fara á undan og ég er í raun að fara að eyða efni sem við gerðum í aukastaf, ef það er í lagi. Þú hefur allt fengið það. Þau ykkar horfa á netinu Ég er viss um að vilja vera fær til að trekkja mig ef þú vilt. Skipt aftur til penna. Nú, það sem við getum gert, ef þið eru ekki alveg upp til hraði á völd þín í 2, það er alveg kúl. Það gerist. Ég skil. Ég var einu sinni starf viðtal þar sem ég var sagt að ég ætti að vita öll völd af 2 upp í gegnum 2 til 30. Það var ekki starf sem ég fékk. Engu að síður, þú krakkar geta farið á undan og gera stærðfræði hér, en tvöfaldur það þýðir í raun ekki skynsamleg, og né hjartarskinn það gera vit við aukastaf eða Sextánskt heldur, að gera stærðfræði út þar sem þú hefur núll. Þú sérð að ég hef 0 hér a 0 hér, 0 hér, 0 hér, 0 hér, 0 hér. Af hverju gæti það ekki gera skilningarvit til að gera í raun stærðfræði til að reikna út viðeigandi afl 2 fyrir þá stöðu? Einmitt, eins og Charlotte sagði, mun það vera 0. Getur alveg eins sparað þér tíma ef reikna völd 2 er ekki sterk föt þinn. Í þessu tilfelli, þurfum við bara að reikna það fyrir 2 til 0, sem er-? [Nemandi] 1. [Nate H.] 1, 2 og 3, sem er-? [Nemandi] 8. >> [Nate H.] 8. 2 til 4? [Nemandi] 2. Fyrirgefðu, 1. [Nate H.] 2 til 4 er 16, nákvæmlega. 2 til 5, Kevin? >> 32. [Nate H.] 32, 2 á 8? [Nemandi] 32 x 8, 256. [Nate H.] Perfect. Og 2 til 10? [Nemandi] 1024. [Nate H.] Já, 1024. Þegar við höfum fengið þessar tölur getum við summa það allt upp. Og þetta er þar sem það er mjög mikilvægt að gera nokkra hluti. Eitt er að fara hægt og athuga vinnu. Þú getur sagt að það er 1 í lok þessa tölu, þannig að ég ætti örugglega að fá stakur tala eins niðurstöðu mína, vegna þess að allar hinar eru að fara að vera jafnvel tölur í ljósi þess að það er tvöfaldur fjöldi. The annar hlutur til gera er að ef þú færð að þessum tímapunkti á prófinu og þú hefur skrifað það út svona langt og þú ert að keyra út af tími líta á nokkrum stöðum að þetta vandamál er þess virði. Þetta vandamál, sem þú getur séð, ef ég selbiti aftur til minn laptop mjög fljótt- þetta vandamál er þess virði 2 stig, þannig að þetta er ekki tegund af auki þú ættir að vera að fara í gegnum ef þú ert virkilega að þrýsta á tíma. En við munum skipta aftur yfir í iPad, og við munum fara í gegnum það mjög fljótt. Ég eins og að gera litlu númer fyrst vegna þess að ég kemst að því að auðveldara. Mér finnst 32 og 8 vegna þess að þeir fara saman mjög auðveldlega, og við fáum 50. 16 og 1 fær 17. Þar fáum við 57, og þá getum við gert restina af þessu, þannig að við getum gert 57, 156. Komdu á. Man vel, við skulum sjá. Við fengum 57, 256, og 1024. Á þessum tímapunkti, myndi ég frekar bara að fara í gegnum. Ég hef ekki hugmynd. Ég þarf greinilega að lesa sér til um þetta. 7, 6 og 4, þá færðu 17. 1, 5, 5, 2, 13. Síðan fáum við 3, og þá fáum við 1. 1337. Easter egg, hver? Hver viðurkenna þetta númer? Chris viðurkennir númer. Hvað þýðir það, Chris? [Chris] Leet. Leet, þannig að ef þú lítur á þetta, það útlit eins leet. Tölvuþrjótur efni. Horfa út fyrir þessi góður af efni á midterm eða prófið frekar. Ef þú sérð svona efni og þú ert að velta fyrir mér "Huh," sem gæti raunverulega þýtt eitthvað. Ég veit ekki. David gaman að setja það inn Það er góð leið til að geðheilbrigði stöðva það. Eins lagi, get ég séð hvað er að gerast. Það er vika 0/Week 1 efni. Ef við skipta aftur laptop okkar nú, minnka, og a par af öðrum hlutum. Það er ASCII, sem við höfum verið að gera mikið með vandamál setur. Þessi hugmynd um höfuðborg A. Hvað er það í raun? Vitandi að það er aukastaf heiltölu. 65 er það sem er varpað í ASCII töflunni, og það er því hvernig tölvan skrifar það, og það er hvernig við höfum verið að fá í burtu með raunverulega skrifa eðli fjármagns A og karakter lágstafir í í sumum þessara lausna og vandamál setur sem þú hefur verið að gera. A par af öðrum hlutum. Við höfum fengið yfirlýsingar, Boolean tjáning, skilyrði, lykkjur, breytur og þræði. Þeir virðast allir að gera grein fyrir að mestu leyti? Sumir af þessum hugtökum er svolítið angurvær á köflum. Ég vil hugsa um yfirlýsingu sem að mestu eitthvað sem endar með semíkommu. Yfirlýsingar eins og x = 7, sem setur breytu, væntanlega kallað x = 7. Væntanlega er x einnig gerð sem hægt er að vista númer 7, svo það er int eða hugsanlega fljóta eða stutt eða bleikju, eitthvað svoleiðis. Boolean tjáningu er að nota þessar tvöfaldur jafngildir og Bang jafn eða ekki jafn, minna en, stærra en, minna en eða jafnt og, öllu svona dóti. Aðstæður eru þá ef annars yfirlýsingar. Ég myndi muna að þú getur ekki haft annað án samsvarandi ef. Sömuleiðis er ekki hægt að hafa annað hvort án samsvarandi ef. Lykkjur, muna 3 tegundir af lykkjum sem við höfum verið að hamar í þig í síðustu tveimur köflum og vandamál setur. Notkun gera en þegar þú ert að fá notandi inntak, nota meðan lykkjur þar til tilteknu ástandi er satt, og þá nota þá til lykkjur ef þú þarft að vita hver endurtekning af lykkju sem þú ert nú á er hvernig ég hugsa um það. Eða ef þú ert að gera a fyrir hvern staf í streng sem ég vil gera eitthvað, fyrir hvert frumefni í fylki sem ég vil gera eitthvað í því frumefni. Málefni og viðburðir. Þetta höfum við ekki fjallað svo skýrt í C, en muna þetta frá grunni. Þetta er hugmyndin um að hafa mismunandi forskriftir. Þetta er líka þessa hugmynd um útsendingar atburð. Sumir ekki nota útsendingar í verkefnum þeirra í upphafi, sem er algerlega kaldur, en þetta eru 2 mismunandi leiðir til að meðhöndla þetta stærra mál sem heitir concurrency, sem er hvernig gera þú fá forrit til að framkvæma eða virðist framkvæma á sama tíma? Mismunandi verkefni í gangi á meðan önnur verkefni eru einnig í gangi. Þetta er hvernig stýrikerfið virðist virka. Þetta er ástæðan þó, til dæmis, Ég hef vafrinn minn í gangi, get ég líka kveikja á Spotify og spila lag. Það er meira af huglægu hlutur að skilja. Ég myndi kíkja á þræði skamms Ef þú vilt fræðast meira um það. Við skulum sjá, tel ég að það hefði verið vandamál á þessu í einn af þessum. Aftur, ég held þræði og atburðir eru ekki eitthvað sem við munum ná í C bara vegna þess að það er mun erfiðara en í grunni. Þú ættir ekki að hafa áhyggjur af því þar, en ákveðið að skilja hugtök, skilja hvað er að gerast. Áður en við færa á einhverjar spurningar um viku 0 efni? Allir líður nokkuð gott? Skilningur breytur og hvað breytu er? Flutningur á. Vika 1. A par af hlutum hér sem voru ekki sérstaklega fjallað í quiz endurskoðun endilega og einnig eru fleiri hugmynda atriði til að hugsa um. Í fyrsta lagi er þessi hugmynd um hvað kóðann, þýðendur og mótmæla kóða er. Hver? Basil. Er mótmæla kóða-ég meina kóðinn er það sem þú setur inn clang, og mótmæla kóða er það clang setur út þannig að tölvan getur lesið program. Einmitt. Kóðinn er C kóða sem þú slærð í raun upp. Object kóða er það sem þú færð út úr clang. Það er 0s og 1s í því tvöfaldur snið. Þá er það sem gerist þegar þú ert með fullt af skrám mótmæla, segja að þú ert að setja saman verkefni eða forrit sem notar margar kóðinn skrár, sem samkvæmt venju gefst. c skrá eftirnafn. Þess vegna höfum við caesar.c, vigenère.c. Ef þú ert að skrifa Java forrit sem þú gefur þeim framlengingu. Java. Python forrit hafa endinguna. PY oft. Þegar þú ert með marga. C skrá, safna saman að þeim. Clang spits út alla þessa tvöfaldur skran. Þá vegna þess að þú vilt bara 1 program þú hefur linker tengja öll þessara mótmæla skrár saman í 1 executable skrá. Þetta er einnig það sem gerist þegar þú notar CS50 bókasafn, til dæmis. The CS50 Bókasafnið er bæði að. H hausaskrár sem þú lest, að # includecs50.h. Og þá er það einnig sérstakt tvöfaldur bókasafn skrá sem hefur verið safnað saman sem er 0s og 1s, og að-L fána, þannig að ef við förum aftur til Spaces okkar og við lítum mjög fljótt á hvað er að gerast hér þegar við líta á stjórn clang okkar, það sem við höfum fengið er að þetta er kóðinn skrá okkar hérna. Þetta eru fullt af flöggum þýðanda. Og þá á enda, þessir-L fánar hlekkur í í raun skrá tvöfaldur fyrir þessar 2 bókasöfnum, sem CS50 bókasafn og þá stærðfræði bókasafn. Skilningur hvers konar tilgangi files ' í samantekt aðferð er eitthvað sem þú þarft að vera fær um að gefa að minnsta kosti mikil yfirsýn yfir. Kóðinn kemur inn Object kóða kemur út. Object kóða skrár tengja saman, og þú færð fallega, executable skrá. Cool. Þetta er einnig þar sem þú getur fengið villur á mörgum stöðum í samantekt aðferð. Þetta er þar sem, til dæmis, ef þú tekur út þessa tengja fána, á CS50 fána og þú sleppt því í rýmum eða þegar þú ert að keyra kóða, þetta er þar sem þú munt fá villa í tengja áfanga, og linker mun segja, "Hey, þú kallaðir fall GetString það er í CS50 bókasafn. " "Þú sagðir mér að það væri í CS50 bókasafn, og ég get ekki fundið kóða fyrir það." Það er þar sem þú þarft að tengja það í, og það er aðskilið frá þýðanda villa vegna þess að þýðandinn er að horfa á setningafræði og þannig dóti. Það er gott að vita hvað er að gerast þegar. Annað atriði sem þarf að vita um. Ég myndi segja að þú vilt örugglega til að taka a líta á the stuttur á typecasting gert með Jordan að skilja hvað ints eru undir hetta, hvaða chars eru undir hetta. Þegar við tölum um ASCII og við lítum í raun á ASCII töflunni, hvað það er að gera er að gefa okkur undir hetta útlit á hvernig tölvan raun táknar Capital og stafa 7 og kommu og spurningarmerki. Tölvan hefur einnig sérstakar leiðir til að tákna númer 7 sem heiltölu. Það hefur sérstaka leið til að tákna fjölda 7 sem fljótandi lið númer, og þeir eru mjög mismunandi. Typecasting er hvernig þú segir tölva "Hey, ég vil að þú að umbreyta frá einum fulltrúa í annan fulltrúa. " Hvers vegna eigum við ekki að líta á það. Ég myndi einnig taka a líta á the stuttur á bókasöfnum og stutt á vistþýðendur. Þeir tala um ferli samantekt, hvað bókasafn er og fara yfir nokkrar af þeim spurningum sem þú gætir fengið að spyrja. Spurningar um Vika 1 efni? Eru allir efni á hér að virðast draga kjark þú vilt ná? Ég er að reyna að blása í gegnum flest þessara fyrri efni svo að við getum fengið að ábendingum og gera a lítill hluti af endurkvæmni. Hugsanir? Eitthvað til að ná? Tími fyrir suma súkkulaði kannski? Þið eru að vinna í gegnum það. Ég ætla að halda sipping á kaffi minn. Vika 2. Good símtal góð kalla. Í viku 2 ræddum við svolítið meira um aðgerðir. Í fyrstu setur vandamál við ekki í raun skrifað hvaða störf á öllum annað en sem virka? [Nemandi] Main. >> Main, nákvæmlega. Og svo við höfum séð á mismunandi búningum sem helstu líður. Það er eitt sem það tekur engin rök, og við segjum bara tóm á milli sviga, og svo er það hitt sem við viljum taka stjórn lína rifrildi, og eins og við sáum, að þar sem þú hefur int argc og band argv fylking eða nú að við höfum í raun og veru verða band að vera char * að það er við erum að fara að byrja að skrifa það sem char * argv og þá hornklofanna. Í Set Vandamál 3, þið sá fullt af störfum, og þú innleitt fullt af aðgerðum, teikna, líta upp, Scramble. Frummyndirnar voru allir skrifað þarna fyrir þig. Það sem ég vildi tala um hérna með virka mjög fljótt er að það eru 3 hlutar til þeirra þegar þú skrifa aðgerð. Þú þarft að tilgreina afturhvarfstag fallsins. Þú verður að tilgreina heiti virka, og þá verður þú að tilgreina þau rök lista eða breytu listanum. Til dæmis, ef ég væri að skrifa fall til að summa upp fullt af heiltölur og síðan aftur til mín summan hvað væri endurkoma mín ef ég vildi að summa heiltölur og þá skila summu? Þá heiti fallsins. Ef ég fer á undan og skrifa í grænu, þessi hluti er aftur gerð. Þessi hluti er nafnið. Og svo á milli sviga er þar sem ég gef rök, oft stytt sem viðföng, stundum kallað params fyrir breytur. Og ef þú hefur einn, tilgreina þér bara einn. Ef þú ert með marga að skilja hvert og eitt með kommu. Og fyrir hvert rifrildi sem þú gefa það 2 hluti sem eru-Kevin? [Kevin] Þú þarft að gefa tegund og síðan nafn. Og þá er nafn, og nafn það nafn sem þú ert að fara að nota að vísa til þess rök innan summan virka, í aðgerð sem þú ert að skrifa. Þú þarft ekki að-til dæmis, ef ég ætla að summa upp, segja, fylki af heiltölum-we'll do int array, og ég ætla að gefa mér nokkur hrokkið axlabönd þar- svo þegar ég fara til fylki summan virka Ég gefa það í fyrstu stöðu rifrildi listanum. En array sem ég fara í þarf ekki að hafa nafnið Arr. Arr er að fara að vera hvernig ég vísa til sem rök í meginmál virka. The annar hlutur sem við þurfum að taka tillit til, og þetta er örlítið öðruvísi aðgerðir, en ég held að það er mikilvægt atriði, er að í C þegar ég er að skrifa virka svona hvernig veit ég hversu margir þættir eru í þessu fylki? Þetta er nokkuð bragð spurningu. Við töluðum um þetta svolítið í kafla síðustu viku. Hvernig veit ég fjölda staka innan fylki í C? Er there a vegur? Það kemur í ljós að það er engin leið að vita. Þú þarft að gefa það í sig. Það er bragð sem þú getur gert ef þú ert í sömu virkni sem fylki hefur verið lýst, og þú ert að vinna með stafla fylkisins. En það virkar bara ef þú ert í sömu aðgerð. Þegar þú standast fylki í annan valkost eða ef þú hefur lýst fjölda og þú setur þessi fylking á hrúga, hefur þú notað malloc  og þannig dót, þá öll veðmál eru slökkt. Síðan sem þú ert í raun að fara í kringum sérstakt rök eða annað viðfang segja þér hversu stór fylki er. Í þessu tilfelli, myndi ég vilja til nota kommu-Ég því miður, það er að fara að slökkva á skjánum hér- og ég myndi fara á öðru rifrildi  og kalla það int Len fyrir lengd. Eitt sem gæti komið upp á spurningakeppni er að biðja þig um að skrifa eða framkvæma ákveðna aðgerð sem heitir eitthvað. Ef við ekki gefa þér frumgerð, þannig að þetta allt hlutur hér, þetta allt sóðaskapur er kallað virka yfirlýsingu eða virka frumgerð, þetta er eitt af því fyrsta sem þú þarft að nagli niður ef það er ekki gefið til þín strax á prófinu. Hin bragð sem ég hef lært er að segja að við gef þér frumgerð fyrir fall, og við segjum: "Hey, þú hefur fengið að skrifa það." Inni í hrokkið axlabönd sem þú ert með á spurningakeppni Ef þú tekur eftir að það er aftur gerð og þú tekur eftir því að endurkoma er eitthvað annað en tóm, sem þýðir að virka ekki aftur neitt, þá er einn hlutur sem þú vilt örugglega að gera skrifa einhvers konar yfirlýsingu aftur aftast í aðgerðina. Aftur, og í þessu tilfelli, munum við setja autt vegna þess að við viljum að fylla inn í auða. En þetta fær þig til að hugsa á réttan hátt um hvernig ég ætla að nálgast þetta vandamál? Og það minnir þig þú ert að fara að hafa til að skila gildi til þess sem hringir á starfsemi. Já. >> [Nemandi] er stíl við þegar við erum að skrifa kóðann á the quiz? Svo sem eins og skerðing og svona dóti? >> [Nemandi] Já. Nei, ekki eins mikið. Ég held að mikið af-þetta er eitthvað sem við munum skýra á spurningakeppni á dag, en oftast nær áhyggjur # og svona efni, það er góður af utan. [Nemandi] Þarft þú að tjá handskrifað kóðann þinn? Þarft þú að tjá handskrifað kóðann þinn? Athugasemd er alltaf gott ef þú ert að hafa áhyggjur að hluta lánsfé eða ef þú vilt senda ásetning á flokkarann. En ég, aftur, mun skýra á spurningakeppni sjálfri og spurningakeppni dag en ég trúi ekki að þú munt vera nauðsynlegt til að skrifa athugasemdir, nr. Venjulega ekki, en það er örugglega svoleiðis þar þú getur tjáð ásetning, eins og "Hey, þetta er þar sem ég er að fara með hana." Og stundum getur hjálpað til með hluta lánsfé. Cool. Basil. [Basil] Hver er munurinn á því að lýsa yfir, segja, int Lang í rökum eða breytur á móti lýsa breytu í aðgerð? Vá, kaffi fór niður barka. [Basil] eins sem hlutir sem við viljum setja í röksemda. Já, það er frábær spurning. Hvernig velur þú hvaða hlutir sem þú vilt setja í röksemda móti hvaða hlutir sem þú ættir að gera inni á virka? Í þessu tilfelli erum við með bæði þessar sem rök vegna þess að þeir eru eitthvað sem hver sem er að fara að nota summu virka þarf að tilgreina þá hluti. Summa virka, eins og við töluðum um, hefur enga leið að vita hversu stór fylki er það fær frá hringir hans eða sá er að nota summu virka. Það hefur enga leið að vita hversu stór þessi fylki. Ástæðan við framhjá í þessari lengd hérna sem rök er vegna þess að það er eitthvað sem við erum í grundvallaratriðum að segja hringir í aðgerð, hver er að fara að nota summu virka, "Hey, ekki bara að þú þarft að gefa okkur fylki á ints, hefur þú einnig að segja okkur hversu stór fylki sem þú hefur gefið okkur er. " [Basil] Þeir vilja báðir vera stjórn lína rifrildi? Nei, eru þetta raunveruleg rök sem þú vilt fara að virka. Leyfðu mér að gera nýja síðu hérna. [Basil] Eins og nafn myndi fara- [Nate H.] Ef ég int helstu (tóm), og ég ætla að setja á 0 aftur minn hérna neðst, og segja að ég vil kalla summu virka. Mig langar að segja int x = SUM (); Til að nota summu virka ég að fara bæði í fylki sem ég vil að summa upp og lengd fylkisins, svo þetta er þar miðað við að ég hafði fjölda ints, segja að ég hafði int numbaz [] = 1, 2, 3, konar notkun sem brotist upp setningafræði rétt þarna, þá það sem ég myndi gera er í lagi að ég myndi vilja fara í bæði numbaz og númer 3 að segja summu virka "Allt í lagi, hér er array Ég vil að þú summa." "Hér er stærð hennar." Er það skynsamleg? Er að svara spurningunni þinni? Að mörgu leyti er samsíða það sem við erum að gera með helstu þegar við höfum stjórn lína rifrildi. A program eins Caesar dulmál, til dæmis, það þarf stjórn lína rifrildi myndi ekki vera fær um að gera neitt. Það myndi ekki vita hvernig á að dulkóða ef þú did ekki að segja hvað það inni að nota eða ef þú hefur ekki sagt það hvað band sem þú vildir að dulkóða. Vekur fyrir hjálpina, þetta er þar sem við höfum fengið 2 mismunandi kerfi fyrir að taka inntak í frá notanda, til að taka upplýsingar í frá notanda. Fyrir Vandamál Set 1 við sáum þetta GetInt, GetString, GetFloat leið að vekur fyrir hjálpina, og það er kallað með því að nota stöðluðu inntak straumi. Það er aðeins öðruvísi. Það er eitthvað sem þú getur gert í einu í stað þess að þegar þú ákalla program, þegar þú byrjar forritið að keyra. Stjórn lína rök allir eru tilgreindar þegar þú ræsir forrit í gangi. Við höfum verið að blanda tveimur þeirra. Þegar við notum rök til að virka, það er mikið eins og stjórn lína rifrildi við helstu. Það er þegar þú ákalla virka sem þú þarft að segja það hvað nákvæmlega þarf til að framkvæma verkefni sín. Annar góður hlutur til að líta á-og ég læt þig líta á það í frítíma þínum, og það var fjallað í spurningakeppni-var þetta hugmynd af umfangi og staðbundnar breytur á móti alþjóðlegum breytur. Ekki borga eftirtekt til það. Nú þegar við erum að fá á þessu önnur efni, í viku 3. við byrjuðum að tala um að leita og flokka. Leita og flokka, að minnsta kosti í CS50, er mjög mikill kynning á sumir af the fleiri fræðilegum hlutum tölvunarfræði. Vandamálið að leita að vandamál flokkun eru stór, Canonical vandamál. Hvernig gera þú finna ákveðna tölu í fjölda milljarða heiltalna? Hvernig gera þú finna tiltekna nafn inni í símaskránni sem er vistað á fartölvu? Og svo við kynna þessa hugmynd af asymptotic sinnum hlaupa að virkilega meta hversu lengi, hversu erfitt þetta vandamál er, hversu lengi þeir taka að leysa. Í, Ég tel, spurningakeppni 2011 er það vandamál sem ég held að verðskuldar nær mjög fljótlega, sem er þessi, vandamál 12. O nei, það er Omega. Hér erum við að tala um hraðasta mögulega hlaupa tíma fyrir tiltekna reiknirit og svo hægur mögulegt hlaupa tíma. Þetta Omega og O eru virkilega bara flýtileiðir. Þeir eru notational flýtileiðir til að segja hversu hratt í besta tilfelli mun reiknirit hlaupa okkar, og hvernig hægt í versta tilfelli verður reiknirit okkar hlaupa? Við skulum gera a par af þeim og þetta var einnig fjallað í stuttu máli á asymptotic merki, sem ég mæli. Jackson gerði mjög gott starf. Með leit tvöfaldur, tala við um tvöfaldur leit sem vera reiknirit, og við tölum yfirleitt um það í skilmálar af stór O. þess Hvað er stór O? Hvað er hægur mögulegt hlaupa tíma leit tvöfaldur? [Nemandi] N ²? Loka, held ég svipað. Það er a einhver fjöldi hraðar en það. [Nemandi] Binary? >> Já, tvöfaldur leit. [Nemandi] Það er log n. Log n, þannig að það er log n meina? Það helminga það hvert endurtekning. Einmitt, svo að hægur mögulega tilviki, segja ef þú ert með raðað fylki af milljón heiltalna og númerið sem þú ert að leita að er annaðhvort mjög fyrstur þáttur í array eða mjög síðustu þáttur í fylki. Mundu að tvöfaldur leita reiknirit virkar með því að horfa á miðju frumefni, sjá hvort það er að passa að þú ert að leita að. Ef svo er, þá frábært, finnst þér það. Í besta mögulega tilfelli, hversu hratt er tvöfaldur leita hlaupa? [Nemendur] 1. 1, það er stöðug tími, stór O 1. Já. [Nemandi] Ég er með spurningu. Þegar þú segir þig á n, áttu með tilliti til stöð 2, ekki satt? Já, svo er annar hlutur. Við segjum log n, og ég giska á þegar ég var í menntaskóla Ég ráð alltaf að þig væri stöð 10. Já, þannig að já, skráðu þig stöð 2 venjulega er það sem við notum. Aftur, að fara aftur til tvöfaldur leit, ef þú ert að leita að annað hvort þáttur á enda eða þáttur í upphafi vegna þess að þú byrjar í miðjunni og þá henda hvort helmingur uppfyllir ekki þau skilyrði sem þú ert að leita að, og þú ferð í næsta hluta og næsta hálfleik og næsta hálft. Ef ég er að leita að stærsti þátturinn í milljón heiltölu fylki Ég ætla að helminga það á flestum log 1 milljón sinnum áður en ég prófa loksins og sjá að þátturinn sem ég er að leita að er stærsta eða í hæsta vísitölu fylking, og það mun taka þig á n, skráðu þig á 1 milljón sinnum. Bubble tagi. Ert þú krakkar muna eins konar kúla reiknirit? Kevin, getur þú gefið mér a fljótur ágrip af því sem gerðist í einhverskonar kúla reiknirit? [Kevin] grundvallaratriðum fer hún með allt á listanum. Það lítur á fyrstu tveimur. Ef sá fyrsti er stærri en hitt það skiptasamningum þeim. Þá ber það annað og þriðja, sama, skiptasamninga, þriðja og fjórða, alla leið niður. Stærri tölur mun fylgja allt til enda. Og eftir þó margar lykkjur þú ert búinn. Einmitt, svo er það sem Kevin sagði að við munum horfa á stærri tölur kúla upp til the endir af the array. Til dæmis, ekki huga að ganga okkur í gegnum þetta dæmi ef þetta er array okkar? [Kevin] Þú munt taka 2 og 3. 3 er stærri en 2, svo þú skipta þeim. [Nate H.] Einmitt, þannig að við skipta þeim og svo fáum við 2, 3, 6, 4, og 9. [Kevin] Síðan sem þú bera saman 3 og 6. 3 er minni en 6, svo þú láta þá, og 6 og 4, vilt þú skipta þeim því 4 er minna en 6. [Nate H.] Einmitt, þannig að ég fá 2, 3, 4, 6, 9. [Kevin] og 9 er stærri en 6, svo þú skilur það. Og þú vilt fara aftur í gegnum það aftur. [Nate H.] Er ég gert á þessum tímapunkti? >> [Kevin] Nei Og hvers vegna er ég að gera ekki á þessu stigi? Vegna þess að það lítur út eins og array mitt er flokkað. Ég er að horfa á það. [Kevin] fara í gegnum það aftur og ganga úr skugga um að það eru ekki fleiri skiptasamninga áður en þú getur alveg hætt. Einmitt, þannig að þú þarft að halda að fara í gegnum og tryggja að það eru engar skiptasamninga sem hægt er að gera á þessum tímapunkti. Það var í raun bara heppinn, eins og þú segir, að við enduðum aðeins að þurfa að gera 1 fara í gegnum og við erum flokkuð. En að gera þetta í almennu máli munum við í raun að gera þetta aftur og aftur. Og í raun, þetta var dæmi um bestu mögulegu tilfelli eins og við sáum í vanda. Við sáum að besta málið var n. Við fórum í gegnum array 1 time. Hver er versta mögulega tilfelli fyrir þessa reiknirit? [Kevin] N ². Og hvað þýðir það líta út? Hvað myndi fylki líta út eins og það myndi taka n ² tíma? [Kevin] [inaudible] raðað. Einmitt, þannig að ef ég hefði fjölda 9, 7, 6, 5, 2, fyrst 9 myndi kúla alla leið upp. Eftir 1 endurtekning við myndum hafa 7, 6, 5, 2, 9. Þá 7 væri kúla upp, 6, 5, 2, 7, 9, og svo framvegis og svo framvegis. Við myndum þurfa að fara í gegnum allt array n sinnum, og þú getur raunverulega fá örlítið nákvæmari en þetta vegna þess að þegar við höfum flutt 9 alla leið upp í síðasta mögulega stöðu við vitum að við aldrei þurft að bera á móti því frumefni aftur. Þegar við byrjum að freyðandi á 7 upp við vitum að við getum hætta þegar 7 er rétt fyrir 9 þar sem við höfum þegar borið saman 9 við það. Ef þú gerir þetta í sviði hátt það er í raun ekki, ég held að mikill tími. Þú ert ekki að fara að bera saman allar mögulegar [inaudible] samsetningar hvert einasta skipti sem þú ferð í gegnum hvert endurtekning. En samt, þegar við tölum um þetta efri við segjum að þú ert að leita á n ² samanburður alla leið í gegnum. Við skulum fara aftur, og þar sem við erum farin að fá smá stutt á réttum tíma Ég myndi segja að þú ættir örugglega að fara í gegnum the hvíla af þessari töflu, fylla það allt út. Hugsaðu um dæmi. Hugsaðu um tiltekin dæmi. Það er mjög handlaginn og gagnlegt að gera. Draga það út. Þetta er tegund af töflu sem eins og þú fara í gegnum í tölvunarfræði þú ættir virkilega að byrja að kynnast þessu af hjarta. Þetta eru tegundir af spurningum sem þú færð í viðtölum. Þetta eru tegundir af hlutum sem gott er að vita, og hugsa um þá brún tilvikum raun vangaveltur út hvernig á að hugsa um vitandi að fyrir kúla raða versta array að raða við það er eitt sem er í öfugri röð. Ábendingum. Við skulum tala svolítið um ábendingum. Á síðustu mínútum sem við höfum hér Ég veit að þetta er eitthvað með skrá I / O það er frekar nýtt. Þegar við tölum um ábendingum ástæðu að við viljum tala um punkta er vegna þess að einn, þegar við erum að vinna í C við erum í raun á tiltölulega lágu stigi miðað við flest nútíma forritunarmál. Við erum í raun fær um að stjórna breytum í minni, reikna út hvar þeir eru í raun staðsett í RAM okkar. Þegar þú hefur farið í að taka stýrikerfi námskeið sem þú munt sjá að það er, aftur, góður af abstrakt. Það er í raun ekki málið. Við höfum fengið raunverulegur minni sem er að fela þær upplýsingar frá okkur. En nú er hægt að gera ráð fyrir að þegar þú ert með forrit, til dæmis, þegar þú byrjar að keyra þinn Caesar dulmál program- Ég skipta aftur iPad minn virkilega hratt- að í upphafi program, ef þú ert að segja, 4 gígabæta vinnsluminni á fartölvu, þú færð að setja hliðar þessa klumpur, og við munum kalla þetta vinnsluminni. Og það byrjar á stað sem við erum að fara að hringja í 0, og það endar á stað sem við munum kalla 4 gígabæta. Ég virkilega get ekki skrifað. Man, er að tölvusnápur. Forritið keyrir stýrikerfið sker upp RAM, og það skilgreinir mismunandi hluti fyrir mismunandi hluta af dagskrá til að lifa inn Down hér þetta svæði er eins konar land enginn maður er. Þegar þú ferð upp smá lengra hér þú hefur fengið í raun staður þar sem númerið fyrir lífi program. Að raunveruleg tvíundatöluforrit, reyndar að executable skrá fær hlaðinn inn í minni þegar þú ert að keyra forrit, og það býr í kóða hluti. Og eins og program keyrir örgjörva lítur á þennan kóða hluti til að reikna út hvað er næsta kennsla? Hvað er næsta lína af kóða sem ég þarf að framkvæma? Það er líka gögn hluti, og þetta er þar sem þessir band fastar fá geymd sem þú hefur verið að nota. Og svo lengra upp það þessi staður kallast hrúga. Við aðgangur minni í það með því að nota malloc, og síðan í átt að efst á forritinu það er á mánudaginn, og það er þar sem við höfum verið að spila í flestum upphafi. Þetta er ekki í mælikvarða eða neitt. A einhver fjöldi af þessu er mjög vél háð, stýrikerfi háð, en þetta er tiltölulega hvernig hlutirnir fá chunked upp. Þegar þú keyrir forritið og þú lýsa breytu sem heitir x- Ég ætla að draga aðra kassa niðri, og þetta er að fara að vera RAM eins og heilbrigður. Og ég ætla að horfa. Við munum draga jagged línur til þess að þetta er bara lítill hluti af RAM og ekki minna en það sem við drögum efst. Ef ég lýsi heiltala breytu sem heitir x, þá er það ég í raun kortlagning sem er geymt í merkinu borð áætlun mína sem tengir nafnið X á þessu svæði af minni sem ég hef dregið hérna á milli lóðrétt bars. Ef ég er með línu af kóða í kerfinu mínu sem segir x = 7 örgjörva veit "Ó, allt í lagi, ég veit að X býr á þessum stað í minni." "Ég ætla að fara á undan og skrifa 7 þar." Hvernig er það veit hvaða stað þetta er í minni? Jæja, er það allt gert á saman tíma. The þýðandinn sér um úthlutun þar sem hver af breytum eru að fara að fara og skapa sérstaka kortlagning eða frekar tengja punkta milli tákn og þar sem það er að fara, nafn breytu er og þar sem það er að fara að lifa í minni. En það kemur í ljós að við getum í raun og veru nálgast það í áætlunum okkar eins og heilbrigður. Þetta verður mikilvægt þegar við byrjum að tala um tiltekin gögn uppbygging, sem er hugtak sem við erum að fara að kynna síðar. En nú, það er hægt að vita er að ég er að búa til bendi að þessum stað, x. Til dæmis, ég get búið til músina breytu. Þegar við búa til músina breytu við notum stjörnu tákn. Í þessu tilfelli, það segir að ég ætla að búa til bendi til INT. Það er tegund eins og allir aðrir. Við gefa honum breytu eins y, og þá erum við að setja það jafnt heimilisfang, til heimilisfang. Í þessu tilfelli getum við sett y til að benda á X með því að taka tölu af x, sem við gerum með þetta merkið, og þá erum við sett y til að benda á það. Hvað þetta í raun er er ef við skoðum RAM okkar Þetta skapar sérstaka breytu. Það er að fara að kalla það y, og þegar þessi lína af kóða keyrir það er reyndar að fara að búa til smá músina sem við drögum yfirleitt eins ör, og það setur Y að benda á x. Já. [Nemandi] Ef x er þegar bendillinn, myndir þú bara int * y = x stað þess að hafa merkið? Já. Ef x er þegar músina, þá er hægt að setja 2 ábendingum jafnan við hvert annað, í því tilviki Y myndi ekki benda til X, en það myndi benda til hvað x er bendir til. Því miður, við erum út á tíma. Það sem ég myndi segja að á þessum tímapunkti, getum við talað um þetta offline, en ég myndi segja að byrja að vinna í þessu vandamáli, # 14. Þú getur séð að það er nú svolítið fyllt í fyrir þig hér. Þú getur séð að þegar við lýsa 2 ábendingum, int * x og * y, og athugaðu að benda á * hliðina á breytu var eitthvað sem var gert á síðasta ári. Það kemur í ljós að þetta er svipað og við erum að gera á þessu ári. Það skiptir ekki máli hvar þú skrifar * Þegar þú ert að lýsa á músina. En við höfum skrifað á * hliðina á gerð því sem gerir það mjög ljóst að þú ert að lýsa á músina breytu. Þú getur séð að lýsa því yfir að 2 punkta gefur okkur 2 kassa. Hér þegar við setjum x jafn malloc hvað þetta er að segja er að setja til hliðar minni í hrúga. Þessi litli kassi hérna, þessi hringur er staðsett á hrúga. X er að benda á það. Athugið að y er ekki enn benda til nokkuð. Til að fá minni til að geyma númer 42 í x við myndum nota hvaða tákn? [Nemandi] * x = 42. Einmitt, * x = 42. Það þýðir að fylgja á örina og kasta 42 þar. Hér þar sem við setjum y og x við höfum Y benda til X.. Aftur, þetta er bara eins og það sem Kevin sagði hvar við setjum Y jöfn x. Y er ekki benda til x. Fremur, það bendir á það sem x bendir á eins og heilbrigður. Og þá að lokum á þessum síðasta kassa eru 2 mögulegar hlutir sem við gætum gert. Eitt er að við gætum sagt * x = 13. The annar hlutur er að við gætum sagt-Alex, veistu hvað við gætum gert hér? Þú gætir sagt * x = 13 eða- [Nemandi] Þú getur sagt int hvað sem er. [Nate H.] Ef þetta var nefnt sem int breytu við gætum gert það. Við gætum líka sagt * y = 13 því að þeir eru báðir að benda á sama stað, svo við gætum notað annaðhvort breyta að komast þangað. Já. >> [Nemandi] Hvað myndi það líta út eins og ef við segjum bara int x er 13? Það væri að lýsa nýja breytu sem heitir x, sem vildi ekki vinna. Við myndum hafa árekstri því við lýst x að vera músina upp hér. [Nemandi] Ef við hefðum bara þessi staðhæfing út af fyrir sig hvað myndi það líta út eins og í skilmálar af hringnum? Ef við hefðum x = 13 þá við myndum hafa kassa, og frekar en að hafa ör kemur út af the kassi sem við myndum draga það eins og bara 13. [Nemandi] í kassanum. Allt í lagi. Þakka þér fyrir að horfa á, og gangi þér vel á Quiz 0. [CS50.TV]