JASON Hirschhorn: Velkomin að viku þrjú, allir. Við höfum mikið að gera en spennandi kafla á undan okkur. Svo fyrst, vegna þess að við höfum gert nokkrar headway með áfangann en við enn hafa a einhver fjöldi af að læra eftir að gera, ég er að fara að sýna ykkur nokkrar auðlindir sem ætti að sanna til vera ótrúlega hjálpsamur eins og þú ekki aðeins nálgun þinni Vandamálið setur, heldur einnig að melta allar Efnið sem við gefa þér krakkar í fyrirlestrar og stuttbuxur og kafla. Þá erum við að fara að eyða fyrstu 20 að 25 mínútur af kafla að fara yfir GDB, sem þú mega eða mega ekki hafa notuð á þessum tímapunkti, en það er ótrúlega gagnlegt tól sem mun hjálpa þú kemba forrit. A einhver fjöldi af þú gætir hafa notað printf í miðja program til að reikna hvað breytu jafn. GDB er jafnvel betri en printf og ekki skrúfa upp númerið þitt vegna þess að þú keyra það á executable skrá. Þannig að við munum fara yfir 10 mest gagnlegt skipanir sem þú þarft fyrir gdb, og við erum að fara að fara á æfingu saman svo í Heimadæmi þrír og utan, þú getur notað GDB að hjálpa kemba áætlunum þínum. Og að lokum, við erum að fara að fara yfir og flokkun og leita reiknirit sem þú sást í fyrirlestri, og við erum að fara til raunverulega númer, ekki bara sauðakóðanum, en númer Tvíundarleit, kúla flokka, og val konar. Svo fyrst, ég vil fara yfir auðlindum. Þetta er víðtækur lista, og það er Minna letur vegna þess að ég hafði mikið að passa hér. En þetta mun ekki aðeins hjálpa þér, aftur, með vandamál setur og útdráttur upplýsingar sem þú lært, en örugglega, koma quiz tíma, þetta mun verið ótrúlega hjálpsamur. Svo fyrst, Fyrirlestur Skýringar. Ef þú ferð til cs50.net/lectures og skruna að tiltekna viku og degi, þú munt sjá að það eru athugasemdir fyrir hvert fyrirlestur, sem er ekki einfaldlega afrit, en stytt útgáfa af hvað var fjallað í fyrirlestri með kóða sýnishorn og fleiri nytsamlegar lostæti. Ég mæli að fara yfir þær. Og þá eins og heilbrigður, það er kóðinn í boði frá hverjum fyrirlestri. Og aftur, þessi glærur mun einnig vera í boði á netinu á cs50.net/sections í kvöld. Svo annað eru stuttbuxur í hverri viku sem kápa efni, yfirleitt 5 til 15 mínútur að lengd. Og þeir vonandi mun gefa þér mikill grunnur á mismunandi efni. Þriðja - og þetta er glæný þetta ári - er study.cs50.net. Ef þú hefur ekki athugað það út, ég mjög mælum með að þú gerir það. Þú færð að velja efni. Við höfum heilmikið af efni á það. Svo til dæmis, velja þér Aðgerðir. Það gefur þér nokkrar glærur og bendir á aðgerðir. Þeir eru í raun glærur sem TFS eru hvattir til að nota á okkar kynningar í kafla. Það er líka kenndur og bragðarefur fyrir að takast með virka, og það er æfa vandamál sem hjálpa þú vinnur með aðgerðir. Við gefum þér einnig tengla við stutt á virka og sinnum að virka hafa komið upp í fyrirlestri. Svo study.cs50.net, glæný þetta ári, frábær auðlind. Næst hef ég maður, sem er handbók stjórn sem þú getur keyrt á stjórn lína. Svo ef þú hefur einhverjar spurningar um stjórn, til dæmis, Rand, sem við fundur síðustu viku á kafla og þú hefur líklega komið í vandamál þitt stillt þegar að fara í gegnum búa til kóða, en ef þú skrifar maður Rand, munt þú fá síðu sem segir þér allt um Rand. Það gefur þér hvað það tekur að breytur sem það tekur, auk arðsemi tegund og stutt lýsing þeirrar starfsemi. Svo kíkja Rand. Það getur verið svolítið wordy og ruglingslegt, svo stundum finnst mér að einfaldlega Googling það sem ég vil vita er besta leiðin til að finna svarið. Svo æfa með Google. Fá góður á Google. Það mun verða besti vinur þinn. Auk Google, ef þú getur ekki fundið það á Google, cs50.net/discuss, það er á spjallvef. Líklega er ef þú ert með spurningu, einn 700 þinna + jafningja hefur einnig að spurning og kann að hafa spurt það þegar í ræða ráðstefnur og hafa það svarað. Þannig að ef þú ert með sameiginlegt spurningu eða þú hefur spurningu sem þú telur kannski annað fólk gæti hafa rekið inn, kíkja cs50.net/discuss. Að lokum, síðasta tveggja, ef þú vilt að tala við alvöru manneskju, skrifstofa klst mánudagur til föstudags. Það er einnig á vinnutíma um framlengingu nemenda. Og síðast en alls ekki síst, mig, upphrópunarmerki. Þú allir hafa samband við mig. Ef þú þarft eitthvað skaltu aldrei hika við að hafa samband við mig. Þér er alltaf velkomið að gera það. Mjög fáir af ykkur hafa bætt mér á Gchat, svo að hafa valdið vonbrigðum, en vonandi sem mun breytast á milli á þessu og næsta kafla. Einhverjar spurningar svo langt á auðlindum? Great. Að lokum, annar stinga fyrir endurgjöf, sayat.me/cs50. Þú getur gefið mér nafnlaus viðbrögð á hvernig ég er að gera. Sem var mjög hjálpsamur í síðustu viku. Ég fékk nokkrar athugasemdir frá ykkur rétt eftir kafla, auk frá aðrir nemendur sem horfði á það á viku, og það var ótrúlega hjálpsamur. Ég er að fara að reyna að takmarka notkun mína orðið "sæt", en ég mun sýna minn áhuga og spennu á annan hátt. En það voru aðrar viðbótar efnisleg afturverkun, bæði plús-merkjum og Delta. Svo vinsamlegast, ég gef ykkur viðbrögð Á Vandamál setur þinn. Feel frjáls til að gefa mér álit á kennslu mína. Ég er hér fyrir ykkur. Great. Það er allt sem ég hef fyrir Í fyrsta kafla. Hefur einhver hefur einhverjar spurningar svo langt? Og ég er með í huga fyrir stjórnstöð. Eftirnafn nemendur hafa messaged mig segja að þeir eru ekki að fá allir hljómflutnings-, en það er út af mínu valdi til að festa. Svo vonandi, sem fær leyst fljótlega. Ef þú ert að horfa á netinu, hæ, en þú getur ekki heyra mig. Svo fyrst, við erum að fara að fara í gegnum gdb. GDB, eins og ég gaf í skyn í fyrr, er kembiforrit tól miklu betri en printf. Svo til að byrja með gdb, ykkur, ef þú vilt að opna tækið þitt og taka skrána sem ég send til þín fyrr - þessa skrá mun einnig vera í boði á netinu í smá - og hlaupa gdb. / nafnið á skránni. Fyrst, auðvitað, þú þarft að safna saman skrá því GDB virkar aðeins á executable skrá. En ef þú vilt alltaf að byrja GDB, the fyrstur hlutur þú gera, þú keyrir gdb. / keisarann. Svo er það nafn af the program við erum að fara með það núna. Þannig að ég ætla að skrifa gera Caesar, sem mun gefa mér executable skrá hér grænir. Og þá ætla ég að keyra gdb. / Cesar. Og þar sem þú ferð. Þú sérð að við höfum einhver texti segja mér um útgáfu gdb, að gefa mér sumir ábyrgð upplýsingar, og þá erum við hafa landsframleiðslu hvetja, sem lítur svoleiðis af eins okkar stjórn lína hvetja, en þú sérð að það er opið paren, gdb, loka paren. Áður en við höldum áfram og kemba þessa skrá sem ég sendi til ykkar allra, við skulum líta á nokkrar gagnlegar skipanir þannig að við höfum vit af því sem við ætlum að ná. Þessar skipanir eru skráð hér í röð sem ég nota yfirleitt þá. Svo ég byrja að forritið mitt því að keyra GBD. / Nafn af the program, í þessu tilfelli, Caesar. Og þá það fyrsta sem ég geri 99,9% af þeim tíma er gerð brot meina. Sem setur brjóta benda á helstu. Í meginatriðum, hvað þú ert að gera þarna er forrit er að fara að hætta á Helstu svo þú getur byrjað að skoða hann línu með línu, frekar en að keyra alla leið í gegnum. Þú getur skemmt á mismunandi stöðum í númerið þitt, en helsta er yfirleitt góður staður til að byrja. Næsta stjórn sem ég hlaupa er litið. Sem hefst program í gangi og ef þú þarft að slá inn skipunina lína rök, hlaupa þú það sem skipun. Hlaupa með þeim rökum. Svo þar sem við erum að fara yfir útgáfu af C, sem er forritið sem þú krakkar skrifaði fyrir pset tveimur - þetta eitt, að sjálfsögðu, hefur sumir bugs í það að vonandi munum við finna - við erum að fara að hlaupa hlaupa með einhverjum stjórn lína rifrildi vegna Caesar, eins og þú krakkar vita á vandamálinu setja sérstakur, tekur nokkrar stjórn lína rifrildi. Næsta par af skipunum, næsta einn er í raun kallað næst. Að einn tekur þér línu fyrir línu með forritinu. Svo hitting n þá inn tekur þér í næstu línu, framkvæmd fyrri línu. Skref ekki aðeins tekur þig til næsta lína, en það tekur þú inni aðgerðir. Svo ef þú hefur skrifað fall í númerið þitt eða ef þú vilt að kanna til i, til dæmis, getur þú högg s, og frekar en að fara í næstu línu skráin sem þú ert að fara í gegnum hægri nú, þú munt í raun að stíga inn Þessi aðgerð og sjá númerið hennar. Listi sýnir þér, í mjög notendavænt snið, the 10 eða svo línurnar um þar sem þú ert nú í kóðanum þínum svo þú getur raunverulega sjá skrána frekar en að þurfa að skipta aftur og fram milli mismunandi skoðanir. Prent er eins og printf, eins og nafn þess gefur til kynna. Sem sýnir þér hvað breytu jafngildir. Upplýsa heimamenn er mjög gagnlegt. Þetta er sérstakt útgáfa af prenti. Upplýsa heimamenn sýnir þér allt á staðnum breytur, prenta þær allar út fyrir þig sem eru í boði. Þannig að ég almennt, frekar en að þurfa að prenta út fjórum breytum sem ég er forvitinn um hvort ég er á for lykkju, fyrir dæmi, ég skrifa bara upplýsa heimamenn, og það mun sýna mér hvað gegn i minn jafngildir, sem og fylkingu sem I er vinna á jafningja. Að lokum, að halda áfram. Lengd pásu stoppar þig á brot lið. Hægt er að ganga í gegnum línu með lína með næsta og skref. Halda áfram keyrir forritið til næstu þinn brjóta lið eða þar til lokið ef það eru ekki fleiri brot stig. Disable fjarlægir brot stig ef þú ákvað að brjóta á helstu var óviðeigandi, þú vilt setja það einhvers staðar annars. Og að lokum q, hætta, fær út frá gdb. Þannig að þetta forrit,. / Caesar, við erum að fara að horfa í gegnum núna og við eru að fara að nota GDB að finna galla í þessu forriti. Ég hljóp þetta forrit áðan með Athugaðu 50, og ég fékk einn leiður. Allt það hafi verið til, það saman, það samþykkti mikið af prófunum, en fyrir sumir ástæða, gerði það ekki standast fimmtungur próf, beygja BARFOO, allar húfur, í E-D-U-I-R-R, öll hettur, með þremur sem lykill. Ég fékk ansi nálægt. Ég fékk burt með einn staf. Þannig að það er smá mistök hérna. Ég hef litið í gegnum kóðann minn. Ég gat ekki fundið það út. Vonandi verður þú krakkar geta hjálpað mér reikna út hvað þessi villa er. Svo er að villa við erum leita að. Við skulum fara inn í gdb. Aftur, ég hef keyrt gdb. / Caesar, svo nú erum við í gdb. Og hvað er það fyrsta sem ég ætti að gera? Ég hef bara gert gdb. Einhver gefa mér gott skipunina til að slá inn. STUDENT: Brot helstu. JASON Hirschhorn: Brot helstu. Frábær. Skulum slá því inn Þið getið horft upp hér eða fylgja eftir á tölvunni þinni. Brjóta helstu, og þú munt sjá brot lið var sett á - það gefur mér undarlegt minni heimilisfang, og það gefur mér líka línu númer. Ef ég væri að horfa til baka á þessari skrá, Ég myndi átta að helstu gerðist á línu 21. Hvað ætti ég að hlaupa næst? Er áætlun mín í gangi? Nei Svo hvað ætti ég að hlaupa næst? STUDENT: Run. JASON Hirschhorn: Run. Ætti ég að keyra bara hlaupa, eða ætti Ég bæta nokkrum öðrum hlutum í? STUDENT: Hlaupa með rök. JASON Hirschhorn: Run með skipunin rök. Og þar sem ég er kembiforrit mjög sérstakur ræða, ætti ég að slá inn að stjórn lína rifrildi. Svo ég keyri þrjú, sem er, aftur, framleiðsla sem ég fékk frá Check 50. Byrjun program. Við förum í gegnum a par af línum. Þú munt nú sjá að við erum á línu 21. Hvernig veit ég að við erum á línu 21? Vegna þess að ef þú horfir til vinstri stöðvarinnar gluggann minn, þar það segir línu 21. Og það gefur mér, reyndar er kóða sem er á línu 21. Svo ég misspoke áðan. Helstu er í raun ekki í línu 21. Helsta er a par af línum yfir 21. En í línu 21, sem er þar sem við erum að brjóta. Þessi lína af kóða er ekki enn framkvæmt. Það er mikilvægt. Línan sem þú sérð hefur ekki verið keyrð enn. Það er næsta lína af kóða þú ert að fara að framkvæma. Svo næsta lína, eins og þú krakkar eru líklega kunnugt, er þetta ástand stöðva til að sjá hvort ég hef inn a stjórn lína rifrildi. Og að ég, hvað er annað hluti af því að gera? Hvað er að mér? STUDENT: Breyting það til heiltala. JASON Hirschhorn: Fyrirgefðu? STUDENT: Það er að breytast og rök til heiltala. JASON Hirschhorn: Svo að ég breytist Arg v1 úr streng til heiltala. Og þá hvað er það að athuga? STUDENT: Ef það er annað rök stjórn lína, innskot frá hlaupandi the program. JASON Hirschhorn: Og hvað er seinni hluta þessa Boolean tjáningu stöðva? Þessi hluti hérna, er til i? STUDENT: Ef það er neikvætt. JASON Hirschhorn: Gerð viss um hvað? STUDENT: Gerð viss um að það er í raun jákvæður. JASON Hirschhorn: Einmitt. Þetta er stöðva til sjá ef það er neikvæð, og ef það er neikvætt, ég hef á tilfinningunni að næsta lína kannski að mér að öskra á notanda. Svo skulum högg enda til að framkvæma þessa línu. Við sjáum ekki þessi lína sem þú krakkar kannski ráð að sjá æpa á notandi og síðan aftur, því Þessi lína var ekki keyrt. Ég gekk 3. Svo ég gerði í raun, slá tvær stjórn lína rifrildi, og 3 er hærri en núll. Þannig að við sáum að línu, framkvæma við, en við vildum ekki stíga inni í ef ástand. Svo nú, næst, ég sé að ég er að setja INT lykill jafngildir að ég arg v1. Svo er það mér að búa til breytu takkann. Þannig að ef ég prenta út takkann núna, vegna þess að sem leyfir þér að sjá gildi inni í breytu, lykill jafngildir 47. Það er undarlegt, en auðvitað, það er vegna þess að ég hef ekki framkvæma þessi lína ennþá. Svo nú ef ég högg n, framkvæma þessi lína, og gera prenta takkann, lykill verður jafn 3, sem er það sem við búast við það til að jafna. Svo aftur, í gdb, línu sem þú sjá að þú hefur ekki framkvæmt ennþá. Þú þarft að högg n eða S eða númer annarra skipanir til raunverulega framkvæma þessi lína. Print takkann. Lykill er á 3. Svo langt, svo góður. Band er látlaus texti. Skulum framkvæma þessi lína. Ég fæ band af notanda. Skulum sjá í ávísun frá mér 50, ég sláðu BARFOO allar húfur, svo það er það sem ég ætla að slá inn. Ef ég prenta nú texta. Þú munt sjá það jafngildir streng. Það gefur mér eitthvað annað skrýtið sextánskur tala, en það gerir í staðreynd segja að strengur minn er BARFOO. Ef ég vildi sjá hvað lykill jafn á þetta lið, hvernig gæti ég athuga lykillinn? STUDENT: Print takkann. JASON Hirschhorn: Print takkann, einmitt. Og í raun, það er flýtileið. Ef þú færð þreytt á að slá prenta, þú getur einfaldlega skrifað bls. Svo p lykill hjartarskinn the sami nákvæmur hlutur. Og aftur, ég sé að það er 3. Ef ég vildi til að finna út hvað bæði lykil og BARFOO jafn á sama tíma en ég var þreytt á því að slá hvert einn út fyrir sig, ég gæti tegund upplýsa heimamenn. Það gefur mér lykil jafn 3. Látlaus texti jafngildir BARFOO. Það gefur mér líka þessar tvær furðulegur hlutur efst, þessi breyta I og þessa breytu n. Þeir eru í raun að núverandi í helstu forrit mínu. Við höfum ekki komið upp þá enn, en eins og sýnishorn, þá til í mínum fyrir lykkju. Svo núna, jafnt þeir sumir furðulegur tölur því þeir hafa ekki verið frumstilla enn, en þeir eru ennþá í minni, svo þeir eru bara að setja að einhverju sorp gildi. En við sjáum lykill í látlaus texta rétt þar. Þannig að ég ætla að framkvæma þessa línu, lína 34, for lykkjunnar. Við erum að fara að stökkva inn í fyrir lykkju með hitting n. Og við erum inni for lykkjunnar. Við erum á fyrstu athugun okkar. Og aftur, þetta ætti konar líta þekki þig því þetta var Caesar forrit sem var skrifað, en aftur, hefur einhverskonar galla. Og nú ef ég upplýsa heimamenn, því ég er inni að fyrir lykkju, munt þú sjá sem ég er jafn núlli, eins og við gerum ráð fyrir. Það er það sem við setjum það til og frumstillt það er til í for lykkju. n er jafnt og 6. Það gerir einnig skynsamlegt af því að við setjum það að strlen af ​​texta. Svo ég vil gera upplýsa heimamenn eða prenta að breyta oft til að tryggja að allt er alltaf það Ég von á því að jafna. Í þessu tilviki, allt er hvað ég búast við það til að jafna. Svo skulum byrja að flytja í gegnum þetta fyrir lykkju. Línan Ég er á er lína 36, ​​ef látlaus texti I er meiri en a og venjuleg texti I er minna en eða jafnt og z. Ég veit vandamálið mitt er ekki með fyrsta minn bréf, er það með annan stafinn. Ef við lítum til baka á Check 50, B fer til E fínn. Ég ætla að taka á A og skilja það eins og er A, ekki breyta því að D. Svo eitthvað er rangt við Annað bréf. Þannig að ég ætla að flytja það í annað. En ef ég gerði vil athuga hvað látlaus texti ég jafn í þessu tiltekna mál, ég held að það ætti að vera hvað? Hvað ætti látlaus texti ég jafn í þessu Fyrsta umferð í gegnum for lykkjunnar? STUDENT: Zero? JASON Hirschhorn: Ókóðuð I? Þannig að það ætti að vera fé B. I, að sjálfsögðu, jafn núlli, en látlaus texti krappi núll lokað krappi jafngildir B því strengir, eins og við sáum í síðustu viku, eru array, þannig að við erum að fá fyrsta staf frá þeim. Svo aftur, ef ég prenta út texta af Ég, ég, í raun, fá karakterinn B. Og það er sniðugt, ekki satt? Ég er ekki í raun hafa látlaus texti I. Það er ekki einn af þeim breytum sem ég sett eða forsniðinn en þú getur prentað út a heild gestgjafi af hlutum ef þú vilt. En við skulum fara í gegnum. Ef texta I er meiri en A og texta I er minna en eða jafnt og Z, sem augljóslega er satt því við höfum höfuðborg B. Ég ætla að keyra sumir stjórn á því. Við sáum að stærðfræði í síðustu viku, þannig að við munum taka það sem sjálfsagðan hlut að það virkar rétt samkvæmt Athugaðu 50. Þessar hrokkið axlabönd, sá fyrsti sýndi að ég var að fara út úr ef ástand, the second einn sýndi sem ég er spennandi for lykkjunnar. Og svo núna þegar ég högg Næstur, við munum sjá við erum aftur á for lykkjunnar aftur. Við erum að fara í gegnum fyrir lykkju aftur. Skulum stíga í raun inn í annað endurtekning af for lykkjunnar og tegund Upplýsa heimamenn. Þannig að við erum í öðru endurtekning af fyrir lykkja okkar. Ég er 1, sem við gerum ráð fyrir. N jafngildir 6, sem við gerum ráð fyrir. Lykilatriðið er 3, sem við gerum ráð fyrir. Og látlaus texti, munt þú sjá, jafngildir EARFOO nú, ​​ekki BARFOO lengur því í fyrri endurtekning okkar, B var breytt í hlutafé E. Þannig að við erum að fara að lenda í vandræðum, þannig að þetta er þar sem við erum að fara að kafa í kembiforrit. En hefur einhver hafa einhverjar spurningar um hvað við höfum gert svo langt? Frábær. Þannig að við erum að fara að framkvæma þetta ef ástand, látlaus texti krappi ég loka krappi meiri en A og látlaus texti I minna en eða jafnt og Z. En áður Ég fer inn í það, því þetta er þar Ég veit villa mín er, ég vil benda út látlaus texti I. Svo skulum setja prenta út. Það er jafn staf, svo að virðist svo langt, allt er vel og gott. Svo ég búast þessa línu á rökfræði minn, þessi lína ætti að vera satt. Það er höfuðborg bréf. En ef ég högg n, við grein fyrir því að þetta lína, í raun, ekki framkvæma. Ég stökk niður til annars ef. Hvers vegna gerðist það? STUDENT: Þar sem þú hefur ástand þitt af texta er meiri en A, ekki jöfn eða meiri en. JASON Hirschhorn: Svo ég hafði texta minn I er meiri en A, sem er ekki meira en eða jafnt og. Svo skýrt, höfuðborg A gerði ekki kalla þetta ef ástand, og við gerðum ekki stíga inn í það, og við gerðum ekki gera nauðsynlegar breyting. Svo er það það, í raun. Ég mynstrağur út galla mína. Ég gæti farið aftur í uppspretta minn skrá, breyta því, og uppfæra hana og hlaupa Athugaðu 50 aftur. En við munum sjá, bara fyrir kennslufræði er sakir, ef ég halda áfram. The annar ef ekki framkvæma heldur, en hvað í staðinn jafnt er skipunin sem breytist ekki. Svo það hefur ekki breytt á öllum, og ef ég prenta texta hér, munum við sjá fara gegnum að fyrir lykkju gerði ekki, í raun, breyta því annað eðli yfirleitt. Það er samt höfuðborg A. Svo aftur, debugged við villu okkar. Við komust að því að það var sumir rökfræði vantar. Og við debugged það á undan tíma áður raunverulega framkvæmd þessi lína, en þú hefði tekið eftir við höfðum bara högg á Next og hoppa til að annað hvort, sem þýðir að að ef ástand var ekki satt. Við vildum ekki, í raun, fá niðurstaðan sem við ráð fyrir. Svo þá gætum við verið beðið, hafði við ekki verið svo astute, til að líta á að ef ástand og athuga hvort í raun, ástand okkar ætti að meta til sannur í núverandi samhengi. Það er allt fyrir kembiforrit þetta forrit. Hefur einhver hefur einhverjar spurningar? Hvaða stjórn gæti ég högg að hætta GDB? Q. Og þá ég vera beðin, hætta samt? Já eða nei. Ég lenti já, og ég ætla að hafa hætta gdb. Svo það var a fljótur grunnur til gdb. Reyndar í alvöru atburðarás, Ég gerði þetta á skrifstofutíma. Ég GDBed þetta nákvæmlega áætlun á Viðtalstímar með nemanda. Og ef við förum aftur á skipununum við sáum áður notuðum við brot helstu, fyrst sem við gerðum. Við notuðum hlaupa með stjórn lína rifrildi, Annað sem við gerðum. Við notuðum næstu mikið að færa okkur í gegnum línurnar. Og aftur, stutt útgáfa um er næst n. Það er í sviga grár á mynd. Við vildum ekki nota skref, en við gerðum ekki endilega að fyrir þessu tilviki. En við gætum notað það í smá síðar á dag ef við erum kembiforrit, fyrir dæmi, Tvíundarleit þegar tvöfaldur leit er kallað í sérstakri virka en það er einhver villa með það. Við erum að fara til að vilja stíga inn kalla til tvöfaldur leit og reyndar kemba það. Listi við vildum ekki nota annaðhvort því við vorum góða tilfinningu númerið okkar, en ef ég gerði vilja til að fá tilfinningu fyrir því hvað númer ég var um, gæti ég bara nota listann. Prenta sem við notuðum, upplýsa heimamenn við notuðum. Höldum við ekki þurfa að nota í þessu ræða, hvorki gerði við þurfum að nota slökkva, en við gerðum notkun hætta. Aftur, þessir 10 skipanir, æfa þá. Ef þú skilur þetta 10 skipanir, þú ættir að vera stillt fyrir kembiforrit allir mál með gdb. Þannig að við erum að fara að fara á, aftur, að því crux af kafla í dag, að fara yfir þessir flokkun og leita reiknirit. Áður en við gerum það, aftur, einhverjar spurningar, athugasemdir, áhyggjur fyrir gdb? Svo eru allir að fara að nota GDB frekar en printf? Svo allir, fyrir sakir perpetuity er, allir eru nodding rétt höfuð þeirra nú, svo ég mun sjá þig á skrifstofutíma og allar TFS vilja sjá þig og þeir segja, að sýna mér hvernig á að nota GDB, og þú munt geta að sýna þeim, ekki satt? Konar? Kannski vonandi. Cool. Þannig að við erum að fara að flytja inn í flokkun og leita. Þú munt sjá að ég hef lista þegar raðað fyrir okkur, en það er ekki að fara að vera málið og alltaf. Svo í Heimadæmi forskrift Heimadæmi þrjú, þú stuttbuxur að þú getur horft á og það í raun og veru biður þig um að horfa á þær stuttbuxur. Einnig í fyrirlestri í síðustu viku, fórum við yfir A einhver fjöldi af þessum reiknirit, þannig að ég er ekki að fara að eyða tíma í bekknum fara yfir þessum reiknirit aftur eða teikningu myndir um hvernig þessir reiknirit vinna. Aftur, að upplýsingar sem þú getur aftur horfa fyrirlestur, eða að upplýsingar er tekin framúrskarandi á stuttbuxur fyrir þessi leit, allar sem eru í boði á cs50.net. Svo í stað, hvað við erum að fara að gera er að skrifa þessi forrit. Við höfum vit, andlegt líkan, um hvernig þeir vinna, og svo það sem við erum að fara að gera er að kóða þá fyrir alvöru. Við erum að fara að snúa að andlegri fyrirmynd, þessi mynd, ef þú vilt, inn í Raunveruleg kóða. Og ef þú varst lítill ruglaður eða hazy á andlega fyrirmynd, ég algerlega skilja. Við erum í raun ekki að fara að hoppa til að kóða strax. Svo á meðan þetta hvetja í þessari mynd spyr þú að kóða tvöfaldur leit, og reyndar, endurtekningu útgáfa af Tvíundarleit, það fyrsta sem ég virkilega vil að þú gerir er að skrifa nokkur sauðakóðanum. Svo þú hefur þetta andlega líkan um hvernig tvöfaldur leita virkar. Taka út um pappír ef þú ert einn á reiðum höndum, eða opna upp texti ritstjóri, og ég vil allir að skrifa. Taktu fjórar mínútur til að skrifa sauðakóðanum fyrir tvöfaldur leit. Aftur, hugsa um það andlega fyrirmynd. Ég kem í kring ef þú hefur einhverjar spurningar og við getum draga myndina út. En fyrst, áður en við byrjum forritun, Mig langar til að skrifa sauðakóðanum fyrir tvöfaldur leit svo þegar við kafa í, höfum við sumir átt sem hvar við ættum að fara. STUDENT: Getum við ráð fyrir fjölda gildi við fáum er þegar raðað? JASON Hirschhorn: Svo fyrir tvöfaldur leit að vinna - frábær spurning - þú að taka í Raðað array af gildum. Svo taka það vilja vinna. Við munum fara aftur á þessa mynd. Þú munt sjá í fjólubláa aðgerðina yfirlýsing er bool binary_search Int gildi, int gildi, int n. Þetta ætti að líta kunnuglegt ef þú hefur þegar nálgast eða fengið þinn hendur óhreinum með Heimadæmi. En það er virka yfirlýsing þín. Aftur, ætti ekki að þurfa að hafa áhyggjur af það mikið á þessari stundu. Það sem ég vil virkilega að gera er að taka fjórar mínútur sauðakóðanum tvöfaldur leita, og þá munum við fara yfir að sem hópur. Og ég mun koma í kring. Ef þú hefur einhverjar spurningar, finnst frjáls til að hækka hönd þína. Af hverju ertu ekki að taka tvær fleiri mínútur að ljúka upp sauðakóðanum? Ég veit að þetta kann að virðast fáránlegt að við erum að eyða svo miklum tíma í eitthvað sem er ekki einu sinni í raun í C, en sérstaklega fyrir þetta meira krefjandi reiknirit og vandamál setur sem við höfum til að reikna út, byrja í sauðakóðanum ekki áhyggjur um setningafræði, bara að hafa áhyggjur af rökfræði, er ótrúlega gagnlegt. Og þannig, þú ert ekki að leysa tvö ótrúlega erfitt vandamál í einu. Þú ert bara með áherslu á rökfræði og þá þú fara inn í setningafræði. OK. Við skulum byrja að fara í gegnum á sauðakóðanum. Ég hef skrifað hérna, tvöfaldur leita sauðakóðanum. Við munum skrifa þetta á stjórn saman. Eða ég skrifa það og þú munt gefa mig leiðbeiningunum sem ég þarf. Svo getur hver sem er gefið mér fyrsta lína í sauðakóðanum þú skrifaði fyrir tvöfaldur leit? Já, Annie? STUDENT: Þó að lengd listi er hærri en núll. JASON Hirschhorn: Þó lengd upptalningar hærri en núll. Og aftur, sjáum við nokkrar C-útlit syntactical hlutir hér. En mest af þessu er á ensku. Did einhver hafa einhverja línu sem þeir setja áður en þetta í þeirra gervi-kóða? STUDENT: Fá fylki af raðað númer. JASON Hirschhorn: Þú skrifaðir "færð array Raðað númer. "og á virka yfirlýsingu munum við brottför fylki af raðað númer. STUDENT: [inaudible]. JASON Hirschhorn: Svo munum við hafa það. En já, ef við vildum ekki hafa það, við þyrfti að raða array okkar tölur, því Tvíundarleit aðeins virkar á raðað fylki. Svo á meðan lengd lista er jafn núlli, ég er að fara að setja í sumum hrokkið axlabönd til að gera það líta svolítið meira eins og C. En á meðan, virðist að kortleggja á a meðan lykkja, svo innan þessa tíma lykkja hvað þurfum við að gert fyrir tvöfaldur leit? Einhver annar sem hefur ekki gefið mér svara enn en hver skrifaði þetta? STUDENT: Farðu í miðjum listanum. JASON Hirschhorn: Tom. Fara á miðjum listanum. Og eftirfylgni spurningu, hvað eigum við að gera þegar við erum í miðjum listanum? STUDENT: Ekki ávísun hvort sem er númerið sem þú ert að leita að. JASON Hirschhorn: Excellent. Go miðjum listanum og athuga ef gildi okkar er þarna - frábær. Did einhver hafa neitt annað sem var öðruvísi en þetta? Það er einmitt rétt. The fyrstur hlutur sem við gerum í tvöfaldur leit er að fara í miðjum listanum og athuga hvort gildi okkar er þar. Svo ég geri ráð fyrir ef gildi okkar er það, hvað gerum við? STUDENT: Við skila núll [inaudible]. JASON Hirschhorn: Já, ef okkar gildi er þar, fannst við það. Þannig að við getum sagt á einhvern hátt, þó þetta fall er skilgreint, segja við notanda við fundum það. Ef það er ekki þar, þó, það er þar sem þetta verður erfiður. Þannig að ef það er ekki þar, einhver annar sem var að vinna á tvöfaldur leit eða hefur hugmynd nú, hvað gerum við? STUDENT: Spurning. JASON Hirschhorn: Já? STUDENT: Er array þegar raðað? JASON Hirschhorn: Já, við erum að því gefnu array er þegar raðað. STUDENT: Svo þá verður þú að athuga hvort gildi sem þú sérð er meiri en gildi sem þú vilt, getur þú fært til miðju hinn helminginn. JASON Hirschhorn: Svo ef um miðja listinn er meiri en það sem við erum leita að, þá erum við að gera hvað? Við færa hvar? STUDENT: Þú vilt færa til helminginn af listanum með tölur lægri en það. JASON Hirschhorn: Þannig að við munum kalla að vinstri. Þannig að ef miðjan er meiri, getum við leitað vinstri helminginn af listanum. Og þá með því að leita, hvað ég meina með leit? STUDENT: [inaudible]. JASON Hirschhorn: Við förum í miðjunni. Við endurtaka reyndar þetta. Við förum aftur í gegnum while lykkju okkar. Ég skal gefa þér það síðasta - annars, ef, miðja er minna en það við gerum, hvað gerum við hér? STUDENT: Fara til hægri. JASON Hirschhorn: Leita rétt. Þetta lítur vel út, en er einhver hafa eitthvað sem við kunna að vera vantar eða eitthvað annað sem þú setur í þinn gervi-kóða? Svo er þetta það sem við höfum hingað til. Þó að lengd á listanum er meiri en núll, við erum að fara að fara til miðjum listanum og athuga hvort gildi okkar er þar. Ef miðjunni er meiri, þá ætlum við að leita eftir, annars ef miðjunni er minna, við erum að fara að leita sér rétt. Þannig að við höfum öll þurft sumir þekkingu með hugtök sem við notum í tölvunarfræði og verkfæri sem við höfum. En þú munt nú þegar taka við vorum tala á ensku, en við fundum fullt af hlutum sem virtist kortinu á að tæki sem við höfum í erfðaskrá verkfærasett okkar. Svo strax the kylfa, við erum ekki að fara til raunverulega kóða ennþá. Hvað sjáum við hér í ensku að kort á hlutum sem við getum skrifað í C? STUDENT: Þó. JASON Hirschhorn: Þó. Þannig að þetta á meðan hérna kort á að hvað? STUDENT: A meðan lykkja. JASON Hirschhorn: A meðan lykkja? Eða líklega, meira almennt, lykkju. Við viljum gera eitthvað aftur og aftur. Þannig að við erum að fara að kóða lykkju. Og við vitum nú þegar, vegna þess að við höfum gert þetta nokkrum sinnum og við hafa nóg af dæmum þarna úti, hvernig í raun og veru að skrifa Vísitalan fyrir lykkju. Svo sem ætti að vera nokkuð auðvelt. Við ættum að vera fær um að fá að byrjaði ansi fljótt. Hvað annað sjáum við hér? Hvaða önnur mannvirki syntaxes, hlutir að við erum kunnugir í C, gera við þegar hafa tilfinningu Undirstaða burt af þeim orðum sem við notuðum? Já, Anna? [Inaudible] bara að grínast. Anna, fara fram í tímann. STUDENT: Ef og annað. JASON Hirschhorn: Ef og annað - hérna. Svo hvað þeir líta út? STUDENT: An ef annað yfirlýsingu. JASON Hirschhorn: Já, aðstæður, ekki satt? Þannig að við munum líklega þurfa að skrifa nokkrar aðstæður. Og aftur, þó kannski ruglingslegt í fyrst, höfum við tilfinningu fyrir nú um hvernig á að skrifa skilyrði og The setningafræði fyrir aðstæður. Og ef við gerum ekki, horfum við bara upp setningafræði fyrir aðstæður, klippa og líma að vegna þess að við vitum að við þurfa ástand hér. Önnur atriði sjáum við að kort á hlutir sem við gætum þurft að gera í C? Já, Aleha? STUDENT: Þetta gæti verið augljós, bara með því að haka ef gildi er eitthvað. JASON Hirschhorn: Svo hvernig við athugum og - svo fara á miðjum listanum og athuga hvort gildi okkar er þarna? Hvernig gerum við það í C? Hvað er setningafræði fyrir það? STUDENT: Jafnt jafngildir. JASON Hirschhorn: Jafnt jafngildir. Þannig að þetta stöðva er líklega að fara að vera jafnfætis, jafngildir. Þannig að við munum vita að við þurfum að einhvers staðar. Og reyndar, bara í að skrifa það, sjáum við þá annað. Við erum að fara til verða að gera sumir samanburður rekstraraðila þar - frábær. Svo það lítur út í raun eins og, með og stór, höfum við ekki skrifað Orð C kóða ennþá. En við fengum andlega fyrirmynd niður með fyrirlestrum og þeim stuttbuxur. Við skrifaði gervi-kóða sem hópur. Og þegar, höfum við 80% ef ekki 90% af því sem við þurfum að gera. Nú þurfum við bara að kóða það, sem aftur er non-léttvæg vandamál að leysa. En að minnsta kosti við erum fastur á rökfræði. Að minnsta kosti nú þegar við förum skrifstofutíma, Ég get sagt, ég veit hvað ég þarf að gera, en getur þú minna mig setningafræði? Eða jafnvel ef Viðtalstímar eru fjölmennur, þú getur Google fyrir setningafræði, frekar en að vera fastur á rökum. Og aftur, frekar en að reyna að leysa rökfræði og setningafræði öll vandamál í einu, er það oft miklu betra að brjóta þá tvo harða vandamál burt í tveir viðráðanlegri sjálfur og gera gervi-kóða fyrst og síðan númer í C. Svo skulum sjá hvað ég gerði fyrir Gervi-kóðann til batnaðar. Þó að lengd á listanum er meiri en núll, líta á miðjunni af listanum. Ef fjöldi fannst aftur satt, annars ef fjöldi hærri, leita eftir. Annars ef fjöldi minni, leita rétt, return false. Svo lítur það nánast eins ef ekki næstum eins og það sem við skrifuðum. Reyndar, Tom, hvað þú sagðir fyrst, brjóta miðjum listanum og ef fjölda í ljós í tveimur yfirlýsingum er í raun það sem ég gerði. Ég sameina þá. Ég ætti að hafa hlustað á þér í fyrsta sinn. Svo er að gervi-kóða sem við höfum. Ef þú vilt nú, því miður, fara aftur til byrjunar vandamál okkar. Skulum kóða binary.c. Svo framkvæma endurtekningu útgáfu af tvöfaldur leit með eftirfarandi virka yfirlýsingu. Og þú þarft ekki að afrita það niður strax. Ég er reyndar að fara að opna upp hérna binary.c. Svo er það sú aðgerð yfirlýsingu í the miðja af the skjár. Og þú munt sjá að ég tók gervi-kóða frá um hliðum mínum, en nánast eins að það sem við skrifuðum, og setja það í fyrir þig. Svo nú skulum við taka fimm mínútur að kóða þessa aðgerð. Og aftur, ef þú hefur einhverjar spurningar, hækka hönd þína, láttu mig vita, ég koma í kring. STUDENT: [inaudible]. JASON Hirschhorn: Svo ég tók tvöfaldur Leita skilgreining á því efst á línu 12. Það er það sem ég fékk fyrir mynd mína. Og þá allt þetta gervi-kóða ég bara afrita og líma úr mynd, gervi-kóða renna. Ég er enn ekki að heyra [inaudible]. Svo ef þú hefur lokið þinni framkvæmd, ég vilja til stöðva það. Ég send þér helpers.h skrá fyrr í þessum flokki. Og það verður í boði á netinu eins og heilbrigður til niðurhals fyrir fólk að horfa Þessi hluti sinni frestað. Og ég notaði bara almenna dreifingu kóða frá pset3. Svo ég tók find.C, nota helpers.h minn skrá frekar en helpers.h skrá sem er að finna í dreifingu kóða. Og ég þurfti að gera eitt annað breytingu á find.C frekar en að hringja bara einfaldlega leita, kalla binary_search. Svo ef þú vilt prófa númerið þitt, vita að það er hvernig á að gera það. Í raun, þegar við munum vera að keyra þennan kóða núna, ég gerði bara afrit af pset3 skrá minn, aftur, skipti út að framreiðslu skrá og þá gert að breyta í find.C að hringja binary_search frekar en einfaldlega leita. JASON Hirschhorn: Já. Þú ert með spurningu? STUDENT: Nevermind. JASON Hirschhorn: Engar áhyggjur. Jæja, við skulum byrja. Við mun tákna þetta sem hópur. Eitt annað í huga. Aftur, þetta er, getur auðveldlega vera skipti í fyrir Heimadæmi Three. Ég hef helpers.h skrá mína, sem frekar en helpers.h við erum gefið, segir Tvíundarleit, kúla flokka, og val konar. Og í find.c þú munt taka eftir á línu, hvað er að, lína 68, er vér köllum tvöfaldur leita frekar en að leita. Svo aftur, kóðinn sem er í boði netinu eða kóða sem þú ert búa núna getur hæglega skipti í fyrir p setja 3 að athuga það. En fyrst skulum við kóða tvöfaldur leit. Virka yfirlýsingu okkar, við skila bool. Við tökum heiltölu kallast gildi. Við tökum fjölda heiltölur kallast gildi, og við tökum n vera stærð fylkisins. Í línu 10, hérna, hef ég skarpur eru stdbool.h. Hefur einhver vita hvers vegna það er þar? Svo hvaða hjartarskinn þessi lína af kóða gera? STUDENT: Það gerir þér kleift að nota bool aftur tegund. JASON Hirschhorn: Einmitt. STUDENT: Eða það er bókasafn sem gerir að nota bool aftur tegund. JASON Hirschhorn: Svo skarpur eru stdbool.h lína gefur mér nokkrar skilgreiningar og yfirlýsingar fyrir hluti að mér sé heimilt að nota í Þetta safn. Svo meðal þeirra er að segja að það er Þessi tegund heitir bool, og það getur verið satt eða ósatt. Svo er það sem þessi lína gerir. Og ef ég var ekki búin að línu, myndi ég komast í vandræðum fyrir að skrifa þetta orð hérna, bool, rétt þar. Nákvæmlega rétt. Þannig að ég þarf að í þessum kóða. OK. Svo þetta, aftur, er endurtekningu útgáfa, ekki endurkvæma einn. Svo skulum við hefjast handa. Skulum byrja á þessu fyrst lína af gervi kóða. Og vonandi munum við - eða ekki vonandi. Við ætlum að fara í kring the herbergi. Við munum fara á milli lína, og ég mun hjálpa þú reikna út línu sem við þurfum að skrifa fyrst. Svo á meðan lengd lista er hærri en núll. Við skulum byrja á að framan. Hvaða línu ætti ég að skrifa hér, í kóða? STUDENT: Þó sviga n er hærri en 0. JASON Hirschhorn: Þó n er mikill en 0. Svo er n á stærð við listann, og við erum að athuga hvort - [INTERPOSING raddir] JASON Hirschhorn: - Fyrirgefðu? STUDENT: Hvernig vitum við að n er stærð af listanum? JASON Hirschhorn: Því miður. Og á pset forskrift, leita og raða aðgerðir þú þarft að skrifa, n er stærð listanum. Ég gleymdi að útskýra það hér. En já. n er stærð listanum, í þessu tilfelli. Svo er á meðan n hærri en 0.. OK. Það gæti reynst dálítið erfið þó, ef hlutirnir fara á. Þar sem við munum halda áfram að vita stærð listanum í gegnum þetta virka, en segja við byrjað á með fjölda af 5 heiltalna. Og við förum í gegnum og við höfum nú minnkað það niður í fylki af 2 heiltölur. Sem 2 heiltölur er það? Stærð er 2 núna sem við viljum líta á, en sem 2 er það? Er að skynsamleg, þessi spurning? OK. Ég spyr hann aftur. Svo við byrjum burt með þessa fjölbreytta 5 heiltölur, og n er jafnt og 5, ekki satt? Við munum keyra í gegnum hér. trulega breytt stærð, rétt, eins og hlutirnir fara á. Sem er það sem við segjum að við viljum gera. Við viljum ekki að leita fullur hlutur aftur. Svo segja við að breyta því í 2. Við tökum helming lista sem er skrýtið. Svo bara velja 2. Svo nú n jafngildir 2. Ég biðjumst velvirðingar á fátækum þurr eyða merkjum. Satt? Og við erum að leita í gegnum listann aftur með lista af stærð 2. Jæja, array okkar er enn af stærð 5. Við segjum að við viljum bara að Leita 2 blettur í henni. Svo sem 2 blettir eru þeir? Er að skynsamleg? Eru þeir vinstri 2 bletti? Eru þeir rétt 2 bletti? Eru þeir miðjuna 2 bletti? Við höfum brotið vandamál niður, en við reyndar veit ekki hvaða hluta af Vandamálið sem við erum enn að leita á, bara með því að hafa þessar 2 breytur. Þannig að við þurfum aðeins meira þá, á meðan n er hærri en 0. Við þurfum að vita hvar það n er í eiginlegri array okkar. Svo hjartarskinn einhver hafa a breyting í þessa línu? Flest af þessari línu er fullkomlega rétt. Er það annar samlagning? Getum við skipta eitthvað út fyrir n að gera þessa línu svolítið betur? Mm-HM? STUDENT: Getur þú frumstilla breytu eins lengd til N sem mun þá vera notaður síðar í aðgerðina? JASON Hirschhorn: Svo frumstilla A breytilegri lengd á móti n, og við notum það síðar? En þá erum við að uppfæra bara lengd og viljum vér enn að keyra inn í þetta vandamál þar sem við skera niður lengd vandamál okkar, en við vitum aldrei hvar, reyndar, að lengd kort á. STUDENT: Er ekki að fara að gerast síðar þegar þú ert að segja, leita til vinstri, leita rétt? Þú ert að fara að fara til annars svæði, - JASON Hirschhorn: Við erum að fara að fara á svæði, en hvernig vitum við sem eru að fara að? Ef við höfum aðeins array og þetta n, hvernig vitum við hvar á að Flýtival í array. Í bak, já? STUDENT: Áttu, eins og lægri bundið og efri bundið breytu eða eitthvað svoleiðis? JASON Hirschhorn: OK. Svo er þetta önnur hugmynd. Frekar en bara að halda utan um stærð, að halda við utan um neðri og efri breytu. Svo hvernig gera við að reikna út stærð frá lægri bundinn og efri? [INTERPOSING raddir] JASON Hirschhorn: Frádráttur. Og einnig að halda utan um sem lægra bundið og efri bundið að láta okkur vita, erum við að leita þessar tvær? Erum við að leita þessar tvær hérna? Erum við að leita á miðju tvær? Líklega ekki miðja tvö, því þetta, í raun, er tvöfaldur leit. En nú munum við vera fær til fá the stærð, en einnig marka fylkisins. Í raun, ef við höfum risastór okkar símaskrá, rífa við það í tvennt. Við vitum nú hvar þessi minni Síminn er bókin. En við erum í raun ekki stórfínn Síminn bók í tvennt. Við þurfum samt að vita hvar ný mörk af vanda okkar er. Hefur einhver hefur einhverjar spurningar um það? Já? STUDENT: Myndi það vinna með því að skapa breytu, ég, að þú þá bara að skipta stöðu I miðað við sínum núverandi stöðu, og lengd, n? JASON Hirschhorn: Og hvað er ég? STUDENT: Eins og ég sé eins konar - Eins og þú vilt frumstilla ég að vera miðju stöðu vektorsins. Og þá, ef gildi í stöðu i í um miðja array í ljós að vera minna en gildið sem þú þarft, ég nú verður lengd fylkisins, auk gildi i deilt með 2. Eins, sjá, skipta þér i - JASON Hirschhorn: Hægri. STUDENT: - allt að því - JASON Hirschhorn: Þannig að ég er næstum jákvæð sem vilja vinna. En punkturinn vera, þú þarft tvo stykki af upplýsingar hér. Þú getur gert það með upphaf og enda, eða þú getur gert það með stærð, og þá sumir merkið. En þú þarft tvo stykki upplýsinga hér. Þú getur ekki fá með með bara einn. Er að vit? Þannig að við ætlum að fara í gegnum, og við erum að fara að gera [inaudible] og búa sumir merki. Svo Hvað þú skrifar í kóðanum þínum? STUDENT: Ég bara sagði INT bundið einn er jafnt og 0. JASON Hirschhorn: Við skulum kalla sem int hefst. STUDENT: OK. JASON Hirschhorn: Það gerir meira vit fyrir mig. Og? STUDENT: Ég sagði, að ég held, int endar. JASON Hirschhorn: int lýkur. STUDENT: Ég held, n mínus 1, eða eitthvað svoleiðis. Eins, síðustu þáttur. JASON Hirschhorn: Svo þú skrifar, int sem hefst jafngildir 0, semikommu, og INT endingunni jafngildir n mínus 1, semíkommu. Svo í raun, hvað við erum að gera hér, 0 fyrstu stöðunni. Og eins og við vitum í fylki, gera þeir fara ekki upp til n, fara þeir upp til n mínus 1. Þannig að við höfum nokkrar mörk fylking okkar. Og þessar fyrstu mörk verður að vera fyrstu mörk af vanda okkar. OK. Svo hljómar það vel. Þá ef við förum aftur í þessa línu, en lengd listanum er hærri en 0, hvað, í stað þess sem í eru N, ættu við að setja hér inn? STUDENT: Skrifa endar mínus upphafi. JASON Hirschhorn: Þó endar mínus byrjun er stærra en 0? OK. Og við gátum, ef við vildum gera það svolítið betur, hvað annars getum við gert? Ef við vildum að hreinsa þetta númer upp a hluti? Hvernig getum við að losna við 0? Þetta er bara stíll spurning. Það er rétt núna. STUDENT: Ending ekki jafnt upphafi? JASON Hirschhorn: Við getum gert hvað? [INTERPOSING raddir] STUDENT: Ending er meiri? JASON Hirschhorn: Já. Við getum bara gert á meðan endar er meiri en í upphafi. Rétt. Við bættum farin að hinum megin um það, og við got losa af the 0. Þannig að þetta bara lítur svolítið hreinni. OK. Svo, á meðan lengd lista er 0, skrifaði við að á meðan að binda enda er meiri en byrja. Við erum að fara að setja inn nauðsynlegar okkar hrokkið axlabönd, og þá the fyrstur hlutur við viljum gera er að líta á þá í smá lista. Þú? Getur þú gefið mér - STUDENT: Ef sviga gildi ferningur krappi - JASON Hirschhorn: Ef sviga gildi ferningur krappi. STUDENT: Ending deilt með 2. JASON Hirschhorn: Ending? STUDENT: Ég sé vandamál með þinn - JASON Hirschhorn: OK. Jæja, líta á miðjunni. Hvernig vitum við hvað miðjunni er? Já. Svo láta mig eyða kóðann. Hvernig vitum við hvað miðjunni er? Í öllu, þegar þú hefur í upphafi og endirinn, hvernig gera þú finna miðjunni? STUDENT: Þú meðaltali. STUDENT: þú bætir við þeim saman og síðan - JASON Hirschhorn: Bæta þeim saman og síðan? STUDENT: Og þú að meðaltali. Deila því með 2. JASON Hirschhorn: Bæta þeim saman og deila með 2. Svo jafnt Int miðja? Tom, getur þú gefið mér það? STUDENT: Frá plús lýkur - JASON Hirschhorn: Upphaf plús lýkur. STUDENT: All, krappi, deilt með 2. JASON Hirschhorn: Allt í sviga, deilt með 2. Svo gefur það mér á miðju um neitt, rétt? STUDENT: Þú þarft einnig að umferð það upp. JASON Hirschhorn: Hvað heldur þú meina, ég þarf að umferð það upp? [INTERPOSING raddir] STUDENT: Vegna þess að ef það er undarleg tala, þá er það eins - JASON Hirschhorn: Jæja, OK. Svo ég gæti umferð það upp. En ef það er oddatala, 5, ég get taka 1 burtu frá miðju. Eða ef það er slétt tala, heldur það er betra að ræða. Ef það er 4, höfum við aðeins 4, get ég tekið fyrsta "miðju", vitna, unquote eða annað "miðju" einn. Annaðhvort vildi vinna fyrir tvöfaldur leit, svo ég get ekki raunverulega þörf til að umferð það. En það er einn annar hlutur sem ég þarf að líta á þessari línu. Við gætum ekki grein fyrir því ennþá, en við munum koma aftur til það. Vegna þessa línu í raun enn þarf einn annar hlutur. En svo langt, við höfum skrifað fjórar línur af kóða. Við höfum fengið upphaf okkar og endar merkjum. Við höfum meðan lykkja okkar, sem hringja með á beint sauðakóðanum. Við erum að horfa á miðjunni sem Landakort beint á sauðakóðanum. Ég myndi segja að þetta fer í miðju af listanum, þetta lína af kóða. Og þá, þegar við förum í miðju lista, the næstur hlutur sem við þurfum að gera er að athuga hvort gildi okkar er þar um að sauðakóðanum við skrifaði áðan. Og hvernig eigum við að athuga hvort gildi okkar er á miðjum listanum? Þú. Af hverju ertu ekki að gera þetta? STUDENT: Ef gildi er okkar í miðjunni er jafnt og hvað við setjum - Ég meina jafn jafn - JASON Hirschhorn: Það - OK. STUDENT: Ég er ekki viss um hvað breytu við erum að leita fyrir þó, er vegna þess að - [INTERPOSING raddir] STUDENT: [inaudible]. JASON Hirschhorn: Einmitt. Per virka yfirlýsingu, við erum að leita að verðmæti. Þannig að við erum að leita að verðmæti í fjölda gildum. Svo þú ert alveg rétt. Þú verður að gera, ef opin paren gildi krappi miðja lokað krappi jafn jafnt gildi, og þarna inni hvað þurfum við að gera? Ef gildi er okkar þar, hvað þurfum við að gera? [INTERPOSING raddir] STUDENT: Return núll. JASON Hirschhorn: Return satt. STUDENT: Return satt. JASON Hirschhorn: Michael, hvað er þetta lína gera? STUDENT: [inaudible] forritið hefur keyrt auðvitað sitt, og það er yfir, og þú hefur það sem þú þarft að gera? JASON Hirschhorn: The program eða hvað? Í þessu tilviki? STUDENT: Fallið. JASON Hirschhorn: Fallið. Og svo, til að fara aftur til hvað heitir það og gefa því gildi, satt. Nákvæmlega rétt. Main. Hvað er aftur tegund af helstu, Michael? STUDENT: INT, heiltala? JASON Hirschhorn: INT, einmitt. Heiltala. Það var bara spurning til að tryggja þú krakkar hafa verið ofan á það. Hvað þýðir það aftur venjulega, ef allt er að vinna vel? STUDENT: Zero. JASON Hirschhorn: Zero. Nákvæmlega rétt. STUDENT: Ef þetta bara skilar satt, það er engar upplýsingar verið gefin um hvað - Ó, þetta er bara að segja að þessi gildi er inni í array. JASON Hirschhorn: Einmitt. Þetta forrit er ekki að gefa upplýsingar hvar nákvæmlega gildið er. Það er bara að segja, já, fannst við það, eða nei, höfum vér ekki fundið það. Þannig að ef númerið finnst, aftur satt. Ja, reyndar við gerðum bara það virkilega fljótt með þeim eina línu af kóða. Þannig að ég ætla að færa þá línu sauðakóðanum. STUDENT: Eigum við ekki að þurfa að breyta array? Það ætti að vera gildi, ekki gildi, ekki satt? JASON Hirschhorn: Því miður. Þakka þér. STUDENT: Já. JASON Hirschhorn: Þessi lína ætti að vera gildi. Nákvæmlega rétt. OK. Þannig að við höfum horft á miðjum listanum. Ef fjöldi fannst aftur satt. Endurmenntun á með sauðakóðanum, ef miðja er meiri, leita eftir. Svo ég hafði í hér, ef fjöldi hærri, leita eftir. Constantine, getur þú gefið mér þessa línu af kóða? STUDENT: Ef verðmæti miðju - JASON Hirschhorn: Svo ef gildi - ef opinn paren gildi krappi miðja loka krappi - STUDENT: Er minni en virði? JASON Hirschhorn: Er minna en. STUDENT: Minna en gildi. JASON Hirschhorn: Value. Ja, reyndar, þú vilt athuga hvort tala - Sorry. Þetta er svolítið ruglingslegt. En annars ef fjöldi í miðja listanum er meiri. STUDENT: Oh, OK. JASON Hirschhorn: Ég breyta því. Annars ef miðja er hærri, við vilt leita vinstri, OK? Og hvað gerum við inni þetta ef ástand? STUDENT: Get ég gert smá breytingar á ástand, breyta því að annað hvort? JASON Hirschhorn: Annars ef? OK. Þannig að þetta númer mun framkvæma um það sama. En ágætur hlutur óður í using ef annað ef, annars ef eða ef, annars ef, annars þýðir að aðeins einn af þeim er að fara að vera merkt, ekki öll þrjú af þeim, hugsanlega. Og það gerir það svolítið ágætur á tölvu sem er hlaupandi program. Svo [? Constantine,?] við erum innan þessa línu, annars ef gildi, krappi miðja nærri krappi er meiri en gildi. Hvað þurfum við að gera? Við þurfum að leita til vinstri. Hvernig gerum við það? Ég ætla að gefa þér að byrja. Við höfum þessa tvo hluti sem kallast upphaf og endir. Svo þarf það að gerast að í upphafi? Ef þú vilt leita að vinstri á lista, fáum við núverandi upphaf okkar. Hvað þurfum við að gera það? STUDENT: Við settum í upphafi að miðju og 1. JASON Hirschhorn: Svo ef við erum leita á vinstri? STUDENT: Því miður, miðja mínus - svo endirinn yrði miðja mínus 1 og byrjunin - JASON Hirschhorn: Og hvað gerist í upphafi? STUDENT: Það dvöl the sami. JASON Hirschhorn: Svo merkingu helst óbreytt. Ef við erum að leita á vinstri, við erum með sömu byrjun - nákvæmlega rétt. Og endar? Því miður, hvað þýðir endar jafnt aftur? STUDENT: Mið mínus 1. JASON Hirschhorn: Mið mínus 1. Nú, hvers vegna mínus 1, ekki bara miðjunni? STUDENT: The Middle er kominn úr mynd nú þegar, vegna þess að við höfðum athugað að það er út? JASON Hirschhorn: Það er nákvæmlega rétt. Miðjunni er út úr myndinni. Við skoðuðum nú á miðju. Þannig að við viljum ekki "miðju", vitna unquote, að halda áfram að vera í array sem við erum að leita. Þannig að þetta er frábær. Annars ef gildi krappi miðja er meiri en gildi endar jafn miðja mínus 1. Jeff, hvað um þennan síðasta lína? STUDENT: Else. Values ​​miðja er minna en gildi? JASON Hirschhorn: Við munum þú ert að gefa mér annað. Þannig að ef þú gefur mér ekki - STUDENT: Svo byrja væri miðja auk 1. JASON Hirschhorn: Upphafið jafnfætis miðja auk 1, aftur, fyrir sama Ástæðan fyrir því að Constantine gaf okkur áðan. Og í lok, sem hefur ekki gefið mér línu af kóða enn? Return false, Aleha, hvað gera við að skrifa hér? STUDENT: return false. JASON Hirschhorn: return false. Og við þurfum að gera það, vegna þess að ef við ekki finna það, þurfum við að segja að við fundum hann ekki. Og við sögðum að við erum að fara að skila bool, þannig að við höfum ákveðið að fara aftur A bool einhvers staðar. Svo skulum hlaupa þennan kóða. Ég er reyndar að fara til - þannig að við erum í flugstöðinni. Við munum hreinsa gluggann okkar. Skulum gera allt. Við fundum það er ein villa. Það er villa á línu 15, vænta semíkommu í lok á yfirlýsingu. Og hvað gerði ég gleymi? STUDENT: semíkommu. JASON Hirschhorn: semíkommu rétt upp hér. Ég held það hafi kóða Tom '. Svo Tom, [inaudible]. Bara að grínast. Skulum gera allt aftur. STUDENT: Hvað Dropbox möppu ættum við að vera í fyrir þetta? JASON Hirschhorn: Svo þú getur bara horfa á þessa hluti. En aftur, ef þú vildir að færa þetta kóða í pset3 möppuna til að reyna það út, það er það sem ég gerði. Ef þú munt taka eftir hér - Því miður, góð spurning. [? LS,?] Ég hef hér að find.c númer frá þessari viku afvegaleiða kóða. Ég hef helpers.h. Ég hef a gera skrá, sem ég reyndar breytt svolítið að fela þessar nýju skrár sem við erum að skrifa. Öll þessi merkjamál vilja vera til staðar, ekki dreifingu kóða, en nýja Gera skrá, nýja helpers.h skrá vilja vera á netinu til niðurhals. Aftur, svo þeir eru auka kóðar við höfum. Svo gera allt, og á þessari línu, gerir að finna, tvöfaldur, kúla val - gerir öll þrjú af þeim og safnar inn þetta executable kóða find. Svo almennt, gera við viljum ekki til beint til check50. Við viljum að hlaupa sumir próf á okkar eigin. En bara svo við getum flýta þessa hluti, check50 2013 pset3.find mun líða í helpers.c-- my bad. Ég hef ekki núna. Þannig að við erum í raun að fara að keyra kóða fyrir alvöru. Usage.find /, þú veist hvað það þýðir? STUDENT: Þú þarft sekúndu stjórn lína á það. JASON Hirschhorn: Ég þarf annað stjórn lína. Og á forskrift, ég þarf til að slá inn það sem við erum að leita að. Svo skulum líta á 42. Við munum halda því í raðað, vegna þess að við hef ekki skrifað upp flokkunarkóða virka ennþá - 42, 43, 44. Og Control D fann ekki nál í Heysátan. Það er slæmt. Það er ákveðið það. Skulum reyna eitthvað annað. Kannski er það vegna þess að ég setti það í upphafi. Skulum gera 41, 42, 43. Svona. Það fann það. Skulum setja það í lok núna, bara svo við getum verið ítarlegur - 40, 41, 42. Fann ekki nál. Svo ég nefndi þetta áðan. Því miður, ég vissi þetta var að fara að gerast. En fyrir kennslufræðilegum tilgangi, það er gott að kanna það. Það virkar ekki. Fyrir sumir ástæða, það geta ekki fundið það. Við vitum hvað er í það, en við erum ekki að finna það. Svo eitt sem við gætum gert er að fara í gegnum GDB að finna það, en ekki neinn, án þess að fara í gegnum gdb, hafa tilfinningu hvar við ruglaður upp? [? Madu? ?] STUDENT: Ég held að það gæti verið þegar endar er jafn upphafi, og það er bara einn-þáttur lista. Þá hunsar hann bara í staðinn í raun og veru stöðva það. JASON Hirschhorn: Það er nákvæmlega rétt. Þegar endirinn jafngildir upphafi, gera við enn hafa stak í listanum okkar? STUDENT: Já. JASON Hirschhorn: Já, í raun, við hafa einn og aðeins einn þáttur. Og það mun líklega gerast þegar, á kóða við prófað, erum við í framan Heysátan eða á í lok Heysátan. Það er þar sem upphaf og endir er að fara til jafn einn, með tvöfaldur leit. Svo í þessum tveimur tilfellum virkaði ekki, því að binda enda var jöfn upphafi. En ef endirinn er jafn upphafi, hefur þetta á meðan lykkja framkvæma? Það gerir það ekki. Og við hefðum getað athugað sem aftur gegnum gdb. Og hvernig getum við lagað þennan kóða, því þegar á meðan að binda enda á er jafn upphafi, viljum við einnig þetta en lykkja að keyra. Svo hvað festa getum við gert til að línu 18? STUDENT: [inaudible] er meiri en eða jafnt og. JASON Hirschhorn: Einmitt rétt. Þó að endar er meiri en eða jafnt og upphafi. Svo nú, gera við viss um að fá að Corner case í lokin. Og við skulum sjá. Skulum keyra þessa einu sinni enn. Skulum gera allt. Aftur, þú þarft bara að fylgja eftir hér. Finna 41 að þessu sinni. Bara að halda það stöðug. Finna 42. Skulum setja það í upphafi - 42, 43, 44. Við fundum það. Svo sem var örugglega breyting við þurftum að gera. Það var mikið af forritun vér bara gerði, tvöfaldur leit. Hefur einhver hefur einhverjar spurningar áður en Ég flyt á í línum við skrifuðum í Tvíundarleit eða hvernig við mynstrağur hvað við gerðum reikna út? Áður en við fara, ég vil líka að benda út að með því og stór, varpað við okkar gervi-kóða einn til einn á númerið okkar. Við gerðum hafa þessi erfiður hlutur að reikna út með upphaf og endir. En hefði þér ekki mynstrağur það út, sem þú hefði skrifað ansi mikið eins númer, spara fyrir þessum efstu tveimur línum. Og þá hefði veruleika þegar þú gerðir það í eftirlits og málum sem þú þarft eitthvað annað. Svo jafnvel ef þú hefðir fylgt okkar gervi-kóða línu til línu, myndi þú hefur fengið allt en tvær línur af kóða sem þú þarf að skrifa. Og ég væri til í að veðja að þú krakkar hefði allt mynstrağur það út nokkuð fljótt, að þú þurftir að setja einhvers konar merki í það að reikna út hvar þú varst. Að aftur, er kraftur gera Gervi-kóðann til batnaðar. Svo við getum gert rökfræði fyrst, og þá getum við áhyggjur af setningafræði. Við höfðum verið ruglað saman um rökfræði en að reyna að skrifa þennan kóða í C, við hefðum fengið allt boðberi upp. Og þá erum við myndum vera að spyrja spurninga um rökfræði og setningafræði og ánetjun þá alla saman. Og við hefðum villst í hvað getur fljótt orðið mjög erfitt vandamál. Svo skulum fara nú að val tagi. Við höfum 20 mínútur eftir. Þannig að ég hef á tilfinningunni að við munum ekki vera fær um að komast í gegnum öll val tagi og kúla tegund. En við skulum að minnsta kosti tilraun að klára val konar. Svo innleiða úrval konar nota eftirfarandi aðgerð yfirlýsingu. Aftur, þetta er tekið úr Heimadæmi forskrift. Int gildi er sviga, er fylki heiltalna. Og int.n er stærð sem fylki. Val tagi er að fara að raða þessu fylki. Svo á andlegu fyrirmynd okkar val raða, draga við að - fyrst förum við í gegnum listann í fyrsta tíma, finna minnsti fjöldi, setja það í upphafi, finna annað Minnsta númer, setja það í önnur staða ef við viljum Raða í hækkandi röð. Ég ætla ekki að neyða þig til að skrifa Gervi-númer núna. En áður en við gerum kóðann sem tegund í fimm mínútur, og við erum að fara að skrifa gervi-kóða svo að við höfum eitthvað vit þar sem við erum að fara. Svo reyna að skrifa gervi-kóða á eigin spýtur. Og þá reyna að snúa því gervi-kóða inn kóðann. Við munum gera það sem hópur í fimm mínútur. Og auðvitað, láttu mig vita ef þú hefur einhverjar spurningar. STUDENT: Að það? JASON Hirschhorn: Sjá hversu langt þú hægt að fá í tveimur fleiri mínútur. Ég skil að þú munt ekki að vera fær um að klára. En við munum fara yfir þetta sem hópur. Þú ert allt erfðaskrá svo [inaudible], þannig að ég er leitt að gera hlé hvað þú ert að gera. En við skulum fara í gegnum þetta sem hópur. Og aftur, tvöfaldur leita, þú gefa allt mér eitt ef ekki fleiri línur af kóða. Þakka þér fyrir það. Við erum að fara að gera það sama hér, númer saman sem hópur. Svo val Raða - við skulum skrifa sumir fljótur gervi-kóða. Per andlegu fyrirmynd, getur einhver gefið mér Fyrsta lína af gervi-kóða, vinsamlegast? Hvað vil ég að gera? STUDENT: Þótt listinn er út af röð. JASON Hirschhorn: OK, en listinn er út af röð. Og hvað áttu við "úr röð?" STUDENT: Þó [inaudible] hefur ekki verið flokkaður. JASON Hirschhorn: Þótt listinn er út af röð, hvað gerum við? Gefa mér í annarri línu, vinsamlegast, Marcus. STUDENT: Svo finna næsta Minnsta fjölda. Þetta verður inndreginn. JASON Hirschhorn: Svo finna Næsta minnsti fjöldi. Og þá einhver annar? Þegar við finnum næsta minnstu númer, hvað gerum við? Ég ætla að segja finna minnsti fjöldi. Það er það sem við viljum gera. Svo finna minnsti fjöldi. Þá hvað gerum við? STUDENT: [inaudible] að upphafi. JASON Hirschhorn: Fyrirgefðu? STUDENT: Settu það í upphafið af listanum. JASON Hirschhorn: Svo að setja hana í upphaf listanum. Og hvað gerum við til þings sem var í upphafi af listanum, ekki satt? Við erum að skrifa yfir eitthvað. Svo ef við setjum það? Já, Anna? STUDENT: Hvar minnstu tala var? JASON HIRSHHORN: Svo setti í upphafi af listanum þar sem minnsti fjöldi var. Svo á meðan listinn er út af röð, finna minnsti fjöldi, setja hana í upphaf listanum, setja upphafið af listanum þar sem minnsti fjöldi var. Marcus, getur þú umorða þessa línu en listinn er út af röð? STUDENT: Þó tölurnar hafa ekki verið raðað? JASON HIRSHHORN: í lagi, svo í því skyni að vita að tölurnar hafi ekki verið raðað, hvað þurfum við að gera? Hversu mikið þurfum við að fara í gegnum þennan lista? STUDENT: Svo ég giska á fyrir lykkja, eða á meðan, á meðan tölur merkt er minna en lengd listanum? JASON HIRSHHORN: OK, það er gott. Ég held að ég misphrased spurning mín illa. Ég var bara að reyna að komast á við erum að fara til verða að fara í gegnum alla lista. Svo á meðan listinn er út af röð, fyrir mig, er erfitt að kortleggja á. En í grundvallaratriðum, það er hvernig Ég hugsa um þetta. Fara í gegnum allan listann, finna Minnsta númer, setja hana í hefst - í raun, þú ert rétt. Skulum setja þá báða. Svo á meðan listinn er út af röð, við þarf að fara í gegnum allan listann einu sinni, finna minnstu númer, settu það í upphafi listanum, setja upphaf listanum þar sem Minnsta fjölda var, og þá, ef Listinn er enn út af þess, að við höfum fékk að fara í gegnum þetta ferli aftur, ekki satt? Þessi 'hvers vegna val tagi, Big-Ö afturkreistingur val tagi, einhver? STUDENT: n veldi. JASON HIRSHHORN: n veldi. Því eins og Marcus og ég áttaði bara Hér erum við að fara til verða að Fara í gegnum listann lista fjölda skipta. Svo fara í gegnum eitthvað af lengd n n fjöldi af sinnum er í raun n veldi. Svo er þetta sauðakóðanum. Þetta lítur mjög vel út. Hefur einhver hefur einhverjar spurningar um sauðakóðanum? Því í raun val Raða ætti sennilega koma 1-1, kóða frá sauðakóðanum. Svo einhverjar spurningar um rökfræði sauðakóðanum? Vinsamlegast biðja hana núna. Val tegund - en listinn er út röð, við erum að fara að fara í gegnum það og finna minnstu hvert sinn og setja það í framan. Svo á meðan listinn er út af röð, getur einhver gefa mér þessi lína af kóða sem hefur ekki gefið mér línu af kóða enn, vinsamlegast? Það hljómar eins og hvað? STUDENT: Það er til hliðar. JASON HIRSHHORN: Það hljómar eins for lykkju. OK, getur þú gefið mér for lykkjunnar? Fyrir - STUDENT: i Jafnt 0. JASON HIRSHHORN: i eða - hvað erum við að vantar? Hvað gengur hérna? STUDENT: Int. JASON HIRSHHORN: Einmitt. (Int i = 0; - STUDENT: i