[Powered by Google Translate] [Kafli 3] [Minna Comfortable] [Nate Hardison] [Harvard University] [Þetta er CS50.] [CS50.TV] Allt í lagi, við skulum byrja. Velkomin á viku 4 í CS50. Ef þú krakkar opna vafra og opna pset 3, Scramble með CS50, við erum að fara að byrja að fara gegnum hluta af spurningum þar. Rétt eins og síðustu viku, munum við vera að vinna í CS50 Spaces, Ef þú munt einnig draga það upp eins og heilbrigður, og ef þú ferð á undan og heimsækja þennan tengil sem ég hef fengið upp hér að ofan. Það er kominn tími til að byrja. Við höfum fengið smá hi program okkar hér. Ekkert brjálaður. Einn af the fyrstur hlutur ÉG vilja til að gera við ykkur í dag er að fara yfir nokkrar lausnir til Problem Set 1, konar lausnir dæmis, bara svo þú getur fengið tilfinningu fyrir hvers konar starfsfólk kóða er að skrifa, hvers konar kóða annarra nemenda er að skrifa, og þú taka a líta á það vegna þess að ég veit að það er skrítið þegar þú sendir inn lausn á vandamáli setja og fá athugasemdir á eigin útgáfu, en stundum er það gott að sjá hvernig aðrir gerðu það, sérstaklega þau sem eru ágætur útlit. Fyrir the hluti, ég var hrifinn mjög við þeim lausnum sem þið framleitt. Ég hef ekki enn byrjað að horfa á Vandamál Setja 2s þínum, en ef þeir eru eitthvað eins og það fyrsta, það þýðir ekkert annað en góða hluti. Ef þú líta á endurskoðun minn, við skulum byrja alla leið niður á revision 1, og við erum að fara að taka a fljótur líta á Mario lausn. Ef þú draga þetta upp, eru þessi forrit sem við erum að fara að kynna rétt. Það var ekki rétt mál með þessum vandamálum, heldur viljum við tala svolítið um mismunandi málefni hönnun sem voru að nota hérna. Einn af þeim hlutum sem var áhugavert um lausn er að það nota þessa nýju reisa kallast pund skilgreina, stundum einnig nefndur sem kjötkássa skilgreina. Leyfðu mér að súmma inn á það hér. A # skilgreina gerir þér kleift að gefa nöfn á þessar tölur í forritinu. Í þessu tilviki, að hámarki hæð pýramída í Mario var 23 og frekar en að setja 23 í mínum kóða- myndum við vísa til að sem harður erfðaskrá 23 - staðinn gefur þetta nafn MAX_HEIGHT til að tala, þannig að hérna í do-while lykkju mína þú getur í raun átt við MAX_HEIGHT stað þess að setja fjölda 23 tommur [Nemandi] Hver er kostur á að gera það? Það er frábær spurning. Einn er sýnilegur. Kosturinn við að nota þetta # define er sýnilegur. Þegar ég er að lesa þessa kóða, get ég séð hvað er að gerast. Ég get séð í þessu ástandi hér sem við erum að prófa á hæð að vera <0, sem við gæti hafa einnig skilgreint að vera lágmarks hæð eða mín hæð. Hin kostur er að ég get þá lesið restina af línunni til að sjá að við erum einnig að stöðva til að tryggja að hæð er ekki meiri en max hæð, vegna þess að við erum að fara að halda áfram á meðan hæð er meiri en max hæð. Hin kostur er, ef ég súmma út svolítið hér- Ef ég keyra þetta forrit og ég keyra það, segja, með 23 núna, það verður að prenta út öll 23 línur bara svona. En að segja að ég vildi að breyta hámarks hæð, og nú vil ég að takmarka hámarks hæð pýramýda að vera aðeins segja-maður, sem var angurvær. # Include , # define MAX_HEIGHT, og við skulum segja að við vildum að setja það jafnt og 10. Nú á þessum tímapunkti, allt sem ég þurfti að gera var að breyta því í þessum eina stað. Ég get laun kóðann, og nú ef ég reyni og slá í 12, það mun hvetja mig aftur. Í þessu tilviki erum við aðeins að nota MAX_HEIGHT einu sinni. Það er ekki það stór af a þræta til að fara í og breyta því í while lykkju ef þú þarft til. En í áætlunum þar sem þú ert að vísa í sama galdur númer aftur og aftur, þetta # skilgreina kerfi er mjög vel vegna þess að þú breytir bara það einu sinni efst á skrá-það er yfirleitt þar sem þú setur þær- og breytingin percolates gegnum the hvíla af the skrá. Aðrir hlutir sem ég vildi að hafa í huga í þessu verkefni sem ég hélt að sá mjög gott, einn var nafngiftir á breytum. Þú sérð hér að við höfum fengið heiltölutilviksbreytum kallast róður og kallast hæð. Spaces, kjötkássa, það hjálpar að gera kóðann svolítið læsilegri, gerir það svolítið meira skiljanlegt hvað er í raun að gerast. Þetta er í mótsögn við að nota, segja, af handahófi bréf eða bara gobbledygook öllu. Endanleg sem ég ætla að benda á er að í fyrir lykkjur, Oft Iterator breytur, þessir gegn sem þú notar í þinn fyrir lykkjur, það er staðall og venjulegur til að byrja þá með annað hvort ég og þá j og K og fara þaðan ef þú þarft fleiri breytur, og þetta er bara samningur. There ert hellingur af samningum. Það veltur á forritunarmál þú ert að nota. En C, byrjum við venjulega með i. Það er ekki skynsamleg að nota, segja, a eða b eftir aðstæðum. Það er það fyrir þessa. Ef þú draga nú upp Revision 2, munt þú sjá annað Mario, og þetta er svipað og hitt sem við sáum bara, en það er eitthvað svona kaldur. Ef við skoðum þessa hluti hérna inni í innri for lykkju, þeir nota sumir brjálaður útlit setningafræði hér rétt í þessari línu. Þetta er kallað ternary rekstraraðila. Það er ef annar yfirlýsingu þéttur í eina línu. The ástand er þetta hluti innan sviga. Það jafngildir að segja ef j > Sam. Sam. Eins og Sam segir að línuleg leit ferli er að fara að vera mjög hægur, og í stað þess að við leit tvöfaldur, hvernig þetta virkar er að í hvert skipti sem við förum í gegnum endurtekning á að leita reiknirit okkar, við erum að fara að skipta á lista í tvennt, í meginatriðum, í tvo smærri listum. Og þá á næsta endurtekning af the lykkja, munum við skipta því aftur í öðrum smærri listum. Eins og þú geta sjá, vandamálið heldur fá minni og minni vegna þess að við halda hent helmingi listanum hvert einasta skipti. Hvernig er þetta fargið vinna? Rétt eins og áminning, hvað við erum að fara að gera ef við værum tölva og við vorum að segja, að leita að númer 5 á þessum lista er að við myndum velja tölu í miðjunni. Í miðju á þessum lista, af því að það eru 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 tölur, viljum við velja númer annaðhvort 4. stöðu eða 5. stöðu, og við myndum kalla það á miðju listanum okkar. Veldu fjölda í miðju. Þá, rétt eins og Sam sagði, við munum prófa að sjá hvort þessi tala er jöfn að tala um að við viljum fá eða viðeigandi númer okkar. Ef það er jafnt, þá höfum við fundið það. Við vinna. Ef það er ekki jafn, þá eru nokkrar tilvikum. Þau tvö mál eru annaðhvort hefur fjöldi að vera meiri en sá fjöldi sem við erum að horfa á, eða það er minna en. Ef það er meira, hreyfa við til hægri. Og ef það er minna, hreyfa við til vinstri. Og þá erum við að endurtaka allt ferlið aftur annaðhvort á hægri hluta eða vinstri hluta á listanum. Fyrsta vandamálið í kafla í dag er að reikna út hvernig getum við í raun að byrja að tjá þetta í C kóða. Við höfum fengið sauðakóðanum hér. Það sem við munum byrja að gera er ég draga upp vörumerki-nýtt rými, vista þessa breytingu þannig að við höfum þessar athugasemdir til seinna, Við eyðum allt þetta, og þá afrita og líma frá vandanum setja þessar upplýsingar í rými okkar, og vonandi ekki brjóta. Perfect. Ef þú krakkar að gera, afrita og líma þennan kóða inn í nýja rúm, í auða einn. Reynum Daníel. Ef þú safna saman og keyra þetta forrit, virkar það? Nei >> Hvað er hún að segja? Hún segir stjórn nær enda ekki ógilt virka. Já, svo látið mig reyna að keyra það. Hafið þið séð þetta áður? Veistu hvað þetta þýðir? Jæja, við skulum kryfja þetta svolítið. Það er að segja á file.c á línu 9, 1. dálki við höfum villa, rétt eins og þú sagðir, og það segir að það stafar af villa viðvörun og gerð aftur viðvörun. Það lítur út eins og eitthvað sem er að gerast við aftur gerð, sem er vit í. Við höfum fengið ekki ógilt virka, sem þýðir að við höfum fengið aðgerð sem ekki aftur tóm. A ógilt virka er eitt sem lítur svona út: ógilt foo (), og það er ógilt vegna þess að aftur tegund er ógilt, sem þýðir að ef við hefðum eitthvað hér eins og aftur 1, viljum við fá þýðanda villa fyrir þetta. Hins vegar höfum við ekki ógilt virka. Ekki ógilt virka okkar í þessu tilfelli er að leita virka okkar því að hún hefur aftur gerð Bool. Þegar það er að segja að eftirlit nær lok ekki ógilt virka, það er vegna þess að leita er ekki til baka yfirlýsingu. Það er ekki aftur neitt af bool tegund. Við getum lagað það, og hvað þú krakkar hugsa leit ætti aftur sjálfgefið? Hvað ætti að vera aftur sjálfgefið gildi leit? Vegna þess að það er það sem við getum sett í lokin. Charlotte, hefur þú einhverjar-? Satt eða ósatt? >> Satt eða ósatt. Hver einn? False. Ég veit ekki. False? Við skulum reyna það. Hvers vegna vildi þú segja return false? Það er frábært innsæi. [Charlotte] Ég veit ekki. Við ætlum að fara aftur rangt í þessu tilfelli vegna þess að þetta mun vera sjálfgefið okkar Ef fyrir sumir ástæða the listi er tómur eða nálin sem við erum að leita að er ekki til. Þá á enda, ef við aftur ekki satt fyrr í þessa aðgerð, við vitum alltaf að þessi aðgerð mun segja Nei, það er ekki í fylkinu. Það er ekki í Heysátan. Nú ef við saman og keyra það-láttu mig bjarga þessu svo við getum draga það upp. Nú ef við saman og hlaupa program okkar, byggir það. Við fáum smá hvetja okkar. Ef ég lenti 4-uh-oh. Það var ekki prenta út neitt. Það lítur út eins og allt endaði vel. Við verðum að fylla þetta inn Við ræddum um reiknirit í sauðakóðanum svolítið síðan. Leyfðu mér að sjá, nema þetta, og ég ætla að draga þessi reiknirit upp aftur. Við skulum ná þessu gaur. Nope. Það er það. Hvernig gerum við þetta? Hvað væri góð stefna að byrja á þennan kóða? Þú þarft að velja tölu í miðjunni. Hvernig sæki við fjölda í miðri fylking? Allar uppástungur? [Nemandi] Strlen deilt með 2. Strlen deilt með 2. Það er a mikill einn. Strlen vinnur með sérstökum konar fylki. Hvers konar fylki? Band fylki, eðli fylki. Það er þessi sama tegund af hugmynd sem við viljum að sækja, en við getum ekki notað strlen því við höfum ekki fjölda stafa. Við höfum fjölda ints. En hvað þýðir strlen fá fyrir okkur? Veistu hvað það fær fyrir okkur? [Nemandi] Strlen fær okkur lengd. Einmitt fær það okkur lengd. Strlen fær lengd fylkisins fyrir okkur. Hvernig fáum við að í tvöfaldur leita kerfi okkar? Hvernig viltu fá lengd array? [Nemandi] Strlen? Hægt er að fá lengd á rétt snið C band fylki með strlen. Vandamálið, þó, er að við höfum ekki band fylki. Ef við lítum til baka á þessum kóða, höfum við þetta heiltölu fylki. Hvernig vitum við hversu lengi það er? [Nemandi] Er jafngilt einn fyrir endapunkt eins int l eða eitthvað? Það kemur í ljós að það er í raun ekki, og það á þann hátt, er einn af þeim hlutum sem er bara gott að vita um C, að það er engin leið til að fá lengd fylki Ef allt sem ég gef þér er fylki. Ástæðan það virkar með strengi, ástæðan strlen verk, er vegna þess að ef strengur er rétt sniðinn, það verður að sérstakar \ 0 staf aftast. Þú getur líka ímyndað þér ef þú ert með óviðeigandi sniðinn band og það er engin \ 0 karakter þar, þá er allt sem virkar ekki. [Nemandi] Getur þú bætt \ 0? Við gæti í þessu tilfelli. Við gætum bætt einhverskonar \ 0 eða einhverskonar kynna eðli og þá nota það. En það er ekki alveg að fara að vinna vegna þess að \ 0 er fyrir bleikju tegund, og hér höfum við fengið ints. The annar hlutur er að ef við værum að nota sérstakt gildi eins og -1 til að merkja enda fylki þá gátum við aldrei geyma -1 í heiltölu fylki okkar. Við myndum vera fastur. Það kemur í ljós að eina leiðin til að fá lengd af fjölda í C er að í raun muna það þegar þú setur það upp og þá fara framhjá það í kring með the array þannig að þegar ég er með fall sem er að fara að gera sumir vinna um fjölda heiltalna eða flot eða tvöfaldar eða hvað hefur þú, Ég þarf líka að gefa aðgerðina lengd fylkisins er, og það er nákvæmlega það sem við höfum gert hér í leit virka. Ef þú lítur út, það sem við höfum gert þegar við fara í fylking okkar hér, við framhjá líka í lengd, stærð. Það gerist bara að við höfum kallað þessa breytu hér, þessa breytu eða rifrildi. Þetta er kallað viðfang lista fall er eða breytu listanum, og þetta eru líka kölluð rök eða breytur. Fólk notar mismunandi hugtök á mismunandi tímum. Ég skipti stundum þá sjálfur. Það bara vill svo til að þessi breyta hér heitir álíka þessu skilgreina # upp hér. En þeir eru ekki það sama. Eignfærslu skiptir máli. Ef þú lítur á það sem gerist hér, lýsa við int array okkar, sem við höfum kallað númer. Við höfum gefið það stærð okkar, sem samsvarar okkar # skilgreina upp á toppinn. Það er að fara að vera 8. Og svo þegar við köllum þá leita virka okkar niðri, við fara í fjölda sem við viljum að leita að, sem við höfum beðið, fengið frá notandanum. Við fara í fylking, þessi númer, og þá erum við líka að fara í stærð fylkisins, og þá verðmæti stærð 8 verður geymd eða samþykkt þessari heiltölubreytu heitir stærð. Við höfum stærð fylkisins. Nú ef við förum aftur í það sem við vorum að tala um áðan, Ég held Missy kom upp lið sem það sem við þurftum að gera er að fá lengd fylkisins og deilum í hana með 2, og það mun gefa okkur miðpunkt. Við skulum sjá. Get ég einhvern skrifa þetta og vista það í rúm þeirra? Hvað um Leila? Get ég að skrifa þetta á? Skrifaðu fyrstu línuna þar sem þú tekur lengd fylkisins og fá miðpunkt og geyma í nýjum breytu. Ég skal gefa þér nokkrar sekúndur. Ertu tilbúinn? [Námsmaður inaudible] Jú, gæti ég að reikna miðpunkt á Haystack array inni the leita virka með lengd Heysátan fylkisins, sem er stærð breytu? Ekkert erfiður hér. [Leila] Bara stærð / 2 og bara- Og vista það, og ýta á Vista hnappinn hérna efst, og við munum draga það upp. Perfect. Svona. Awesome. Eins og er, mun þetta þýða? [Leila] Nei, það þarf að vera meiri. [Nate] Já, svo hvað við þurfum að gera? [Leila] Eins int miðju eða eitthvað. Awesome. Já, við skulum gera það, int miðpunkt = stærð. Mun þetta þýða? Við skulum eyða þessari athugasemd og fá það út af the vegur. Hvað mun ekki saman um þetta? Við erum ekki að gera neitt með heiltölu, þannig að við þurfum að prenta það eða eitthvað svoleiðis. Já, nákvæmlega. Við munum fá ónotað breytu. Hvað annað er ekki að fara að vinna þetta? Ég held að þú sagðir eitthvað, Sam. Semikommum. Já, ég er vantar þeim semikommum. Það er að fara að vera stöðug hlutur yfir the rás af the orð. Endanleg sem ég geri er að ég setja nokkrar hvítt pláss á hvorri hlið þessa rekstraraðila hér, þar sem það er yfirleitt hvernig við gerum það í samræmi við stíl fylgja okkar. Við höfum fengið miðpunkt fylking okkar. Nú ef við minnumst aftur á reiknirit okkar, það var annað skrefið sem við þurftum að gera þegar við höfum miðpunkt? [Nemandi] Ef það er meiri [inaudible]. Já, þannig að við verðum að gera einhvers konar samanburð, og hvað erum við að bera saman hér? Þú segir ef það er meira en. Hvað er það í þeirri setningu að vísa til? Talan sem kemur upp, ef það er meira en miðju, þá fara upp í fylki? Einmitt, svo kemur sú tala sem upp þegar við- Nálin, þannig að við erum að bera saman við nálinni Og hvað erum við að bera saman gegn nálinni? Vegna þess að nálin er það sem við erum að leita að. Við erum að bera saman það að fá að miðju. En það gera vit í að athuga Ef nálin = miðpunkt? Er það skynsamleg? Er einhver ósammála? Við skulum gefa það a reyna, ef (nál == miðpunkt). [Nemandi] Ert þú printf fundið það. [Nate] printf ("Við fundum það \ n"); Annars-Ég ætla að byrja að gera eitthvað öðruvísi hér. Ég ætla að byrja að setja axlabönd kring ef yfirlýsingar allra tíma bara vegna þess að ef við bætum fleiri efni, svo Við fæ ekki vistþýðendur. Já, Sam. Þú hefur got a lið. Vandamálið er að miðpunkt táknar stöðu í fylking, en þú getur fengið það til að tákna gildi í þeirri stöðu fylkisins. Þetta er frábær punktur. Vissir allir heyra hvað Sam sagði? Hann sagði að miðpunkt sem er táknar bara stöðu í fylkinu, en það er ekki í raun þáttur í fylki. Ef þú hugsa um kóðann sem skrifað núna, Ef við skoðum þetta fylki niður hér, sem hefur 8 þætti í henni, Hvert er gildi þess að fara miðpunkt til að vera í þessu hlutverki? [Nemandi] 4. [Nate] 4. Ef við lítum á fjölda 4 - og við getum bara keyrt þennan kóða og setja smá sorglegt andlit hér vegna þess að við ekki finna það, ef við keyra þennan kóða eins og er núna, senda það, bygging, láttu mig skruna niður, og ef við erum að leita að númer 4, okkur fannst það, en við fengum ekki að fá þetta til printf já. Ein ástæðan er að við vissum ekki aftur satt, en við fengum að finna raunverulega númer 4? Og Sam er að segja nei. Hvað höfum vér fundið? Við fundum mjög miðpunkt, sem ef við skoðum fjölda hérna, það er að fara að vera þáttur í vísitölu 4 sem við erum að horfa á, sem er 23. Hvernig fáum við reyndar að þáttur á miðju og ekki bara miðpunkt sig? [Nemandi] Við myndum inn bleikju eða eitthvað? Hvað myndi það gera, bara út af forvitni? Getur þú vandaður aðeins meira? Þú þarft að breyta stöðu í fjölda, Svo þú hefur fengið að gera sumir tengsl-Ég held að það er bleikja, en það gæti ekki verið. Já, það er góður punktur. Við höfum verið að gera mikið af þessu umbreyta stöðum í chars, Þessir stafir, í fyrstu tveimur vandamál setur. Það kemur í ljós að hér, þetta er næstum eins aðgangur að ith staf innan band, ef það er vit í. Hér viljum við fá aðgang miðpunkt frumefni. Hvernig eigum við að gera það? Kevin, hefur þú einhverjar tillögur hvernig við gætum gert það? Þú gætir gert Haystack, opið krappi, miðjan, lokað krappi. Getur þú skrifa það fyrir okkur? Vista það hér, og við munum draga þá upp. Við erum að horfa á þessa línu 9, og við erum að átta sig á að við viljum ekki að bera nálina á miðju, en í staðinn viljum við að bera nálinni að frumefni í miðpunkt stöðu innan array Heysátan okkar. Cool. Svona. Já, það lítur mjög gott, ef (nál == Heysátan [miðpunkt]). Við fundum það. Nú ef við keyra kóða-we'll aftur upp smá- það safnar, það keyrir, og nú ef við lítum á 4, við höfum ekki fundið það því nú erum við í raun að fá númer 23. Við erum að fá gildið 23 og það er það sem við erum að bera saman að nál okkar. En það er gott. Það er skref í rétta átt. Það er það sem við erum að reyna að gera. Við erum ekki að reyna að bera saman nálinni gegn stöðum í fylkinu heldur gegn raunverulegum þætti í fylki. Ef við lítum aftur nú á næsta skref í reiknirit okkar, hvað er næsta skref? Leila umtal þegar það stuttlega. [Námsmaður] Athugaðu að sjá hvort það er meiri en eða minna en og ákveða hvaða leið að fara. [Nate] Já, hvernig myndum við gera það? Getur þú sett í einhverju-Ég vista þessa útgáfu, og þá ef þú setur í nokkrar línur sem munu gera það. Já, Charlotte. >> Ég er með spurningu. Ætti það ekki að vera miðpunkt - 1 því fyrsta er það er 0 verðtryggð, þannig að ef við setjum 4, það er ekki í raun og veru eðli sem við erum að leita að? Já, og önnur vandamál við sem er- það er mikill fengur, því að það er að fara að enda gerast hugsanlega ef við halda áfram og við ekki alltaf að stilla í upphafi? Ég giska á hvað við gætum endað að gera er að reyna að fá aðgang þáttur á 8. stöðu í fylkinu, sem í þessu tilfelli er ekki til. Við munum vilja til að gera einhvers konar bókhald fyrir því að við höfum nokkur núll flokkun. [Charlotte] Því miður, ég ætlaði miðpunkt - 1 í hornklofum. Við getum gert það. Við munum koma aftur til þetta mál í bara smá. Þegar við byrjum að fá til the raunverulegur lykkja, það er þegar við munum virkilega sjá þetta koma inn í leik. Fyrir the tími tilvera, við getum gert þetta, en þú ert alveg rétt. Það núll flokkun mun hafa áhrif að við þurfum að gera grein fyrir. Við skulum sjá. Hvernig er meiri en og minna en-? [Nemandi] ég hvernig á að gera meira en og minna en hluti. Ég var bara ekki viss hvað á að prenta ef þú sérð að það er minna en Heysátan miðpunkt eða meiri en. Hér get ég bjarga því I've- [Nate] Já, ef þú hefur vistað það sem þú hefur fengið, og við munum draga það upp. Svona. [Nemandi] Og ég setti spurningarmerki fyrir það sem ég ekki veit. [Nate] Þetta lítur vel út. Hér höfum við fengið spurningarmerki vegna þess að við enn veit ekki hvað við erum að fara að alveg að gera enn. Hvað myndum við vilja gera-Úps, við höfum fengið nokkrar axlabönd allt angurvær á okkur. Við munum leiðrétta þessi axlabönd. Svona. Og svo hvað við viljum gera, samkvæmt reiknirit okkar, ef við finn ekki nálina? Segja að ræða að nálin er minna en það sem við erum að horfa á. Kevin. Aðeins að líta á vinstri helming. Einmitt, þannig að við munum setja athugasemd á hér sem segir "líta á vinstri helming." Og ef nálin er meiri en Heysátan á miðju, hvað við viljum gera? [Nemandi] Svo þú horfir á réttum helming. Horfðu á hægri hluta, "líta á hægri hluta." Ekki of subbulegur. Jæja, svo á þessu stigi, eru hlutirnir að leita nokkuð gott. Vandinn við númerið sem skrifað er það? [Nemandi] Þú þarft ekki endapunktar fyrir helminga. Einmitt, höfum við ekki endapunktar fyrir helminga. Við einnig erum bara að fara að fara í gegnum þetta einu sinni. Við erum bara að fara að horfa á einn miðpunkt. Annaðhvort þáttur er það, eða það er ekki. Til þess að ljúka þessu, þá þurfum við að gera einhvers konar endurtekningu. Við þurfum að halda áfram að endurtaka þangað til við sjáum að annaðhvort frumefni er það vegna þess að við höfum minnkað niður og að lokum fannst það, eða það er ekki þar vegna þess að við höfum litið í gegnum allt það í viðeigandi helminga í fylkingu og fann að ekkert er þar. Alltaf þegar við höfum fengið þetta endurtekning í gangi, hvað ætlum við að nota? [Nemandi] A lykkja. Sumir tegund af lykkju. Já. [Nemandi] Getum við gert do-while lykkju og hafa það gera það og þá á meðan nálin er ekki ekki jafn-Ég viss þar sem ég var að fara með það. En góður af eins og að gera það svo lengi sem það er ekki jafn gildi sem notandi inntak. Já, þannig að við skulum sjá, hvernig gæti þetta skrifa sig? Þú sagðir við skulum nota do-while lykkju. Hvaðan á ég Start? [Nemandi] Rétt eftir stærð / 2. [Nate] Jæja, og hvað ætlum við að gera? Við munum fylla í síðar. Hvað ætlum við að gera? [Nemandi] Ekki að við viljum gera allt efni sem við höfum í ef hluta? [Nate] Gera þetta allt, frábært. Afrita og líma. Ó, maður. Við skulum sjá hvort þetta virkar, ef við getum flipann þetta yfir. Beautiful. Jæja, og við að vista þetta þannig að þú krakkar hafa það. Allt í lagi, og við erum að fara að gera þetta á meðan- það var á meðan ástand sem þú varst eftir? [Nemandi] meðan nálin er ekki jöfn, svo eins og upphrópunarmerki. En ég er ekki viss um nákvæmlega hvað það er ennþá. [Nate] Já, þetta er ein leið til að gera það. Sam, gera þú hafa a athugasemd? [Sam] ég mundi þegar ég horfði á vídeó, Ég tók screenshot af einu af-eins og þegar við gerðum sauðakóðanum fyrir það, það var einhver tengsl á milli max og min. Ég held að það var eitthvað eins og ef Max er alltaf minni en mín. Fékk það. [Sam] eða eins ef hámark er ekki minna en mín eða eitthvað svoleiðis, vegna þess að það myndi þýða að þú hefur leitað allt. Já, svo hvað gerir það hljóð eins og max og mín var að vísa til? [Sam] gildum sem-heiltölur sem eru að fara að breyta miðað við hvar við setjum miðpunkt. Einmitt. [Sam] Á þeim tímapunkti, það er að fara að [inaudible] reikna max og mín. Miðpunktur er þetta max og mín hugmynd. Er það skynsamleg til gott fólk? Ef við værum að byrja að horfa á hvernig við erum að fara að gera þessa endurtekningu, þú ert alveg rétt að við viljum að nota einhvers konar ekki-while lykkju. En ég held að ef við munum það sem er að gerast á staðnum þessa array og hvað er í raun að gerast-Ég ætla að skrifa hérna- á fyrsta endurtekning af tvöfaldur leit, hefur-við Ég ætla að nota b-og e til að tákna upphaf. Og þá enda fylking okkar. Við vitum að í upphafi er á 4 rétt hérna, og við vitum að hætta er á 108. Segja að við erum að leita að númer 15. Í fyrsta skipti sem við gerum þetta, eins og við sáum áðan, miðpunkt er annað hvort að fara að vera 16 eða 23 eftir því hvernig við reiknum það út. Þar jafnt deila í miðju myndi gefa okkur þetta rúm milli 16 og 23, við getum ekki jafnt skipt henni eða skipta því og fá á sanna miðpunkt. Við munum líta á 16. Við munum gera sér grein fyrir "Hey, 16> 15 sem við erum að leita að." Að þá líta á vinstri hluta fylkisins það sem við munum á endanum gera er hent Þetta allt efri hluta og sagði: "Allt í lagi, nú endapunktur okkar er að fara að vera hér." Í næsta endurtekning af lykkju okkar, við erum nú að horfa á þennan fjölda, raun hafa hent þennan hluta því nú ef við erum að taka miðpunkt að vera munur á upphafi og endi, finnum miðpunkt okkar að vera 8, sem við getum þá prófa 8 til að sjá hvar það er í tengslum við fjölda sem við erum að leita að, 15, kemst að því að 15 er meira þannig að við verðum að fara í hægri hluta á listanum, sem við vitum af því að við erum menn, og við getum séð það. Við vitum að rétt hluta er að fara að vera þar sem við finnum það, en tölvan veit ekki, svo það sem við munum gera er að við munum í raun hafa það að fara upp, og nú er upphafið og endir eru á sama stað, svo miðpunkt verður aðeins númer á listanum á þeim tímapunkti, sem er 15, og við höfum fundið það. Er að varpa ljósi á hvar þetta allt max og mín tákn er að fara, halda utan um endapunkta í fylki í því skyni að reikna út hvernig á að þrengja það niður? Hvað myndi gerast ef þetta væri ekki jafn 15 núna? Hvað ef við vorum að leita að 15 og í staðinn, þessi tala var líka 16? Við myndi segja, "Ó, það er meira. Við viljum fara aftur til vinstri. " Og við myndum færa e okkar til hægri, á hver benda að við höfum endapunktur sem væri misvísandi. Það myndi ekki vera fær til að leita að fleiri þætti því að nú höfum við endapunkt okkar og byrjun benda okkar, Max okkar og mín okkar eru nú hreifi. Við leit í gegnum allt fylkisins. Við getum ekki fundið neitt. Það er að benda á þar sem við myndum vilja að segja, "Allt í lagi, við erum að fara að hætta þessum reiknirit. Við höfum ekki fundið neitt. Við vitum að það er ekki hér. " Hvernig er þetta að fara? [Nemandi] Hvernig nákvæmlega er tölva kveikja á enda? Hvernig virkar enda endar fyrir upphaf? Endalok endar fyrir upphaf vegna stærðfræði sem við erum að fara að gera í hvert skipti sem við gerum þetta. Leiðin sem við skipta er ef þú horfir á í fyrsta skipti sem við gerum þetta skipti þar sem við höfum frá klukkan 4 og enda alla leið niður í 108 og miðpunkt okkar, segjum, á 16 - Ég ætla að færa þetta aftur til 15-ef við erum að leita að 15, við vissum að það sem við gerðum þegar við athugum á 16 og sá að það var meiri og langaði að henda öllu hægri hluta lista, sáum við að það sem við vildum að gera er að færa þessa e hérna. Í rauninni fékk e flutt til einn fyrir miðju. Sömuleiðis, þegar við gerðum þessa endurtekningu reiknirit og miðpunkt var 8, Við höfum komist að 8 <15, svo við vildum að færa b einn yfir miðju. Nú eru upphafið og endirinn bæði saman á þessum 15. Ef við hafði verið að gerast til að leita að einhverju öðru gildi, ekki 15, eða ef 15 hefði í staðinn verið 16, við hefðum komist að því að e-við viljum að flytja einn fyrir miðju. Nú e væri það hreifi minna en b. Við skulum ganga í gegnum hvernig við enda í raun allt erfðaskrá þessa reiknirit. Við vitum að við viljum hafa þetta miðpunkt útreikning. Við vitum líka að við viljum fylgjast með upphaf og endi í fylkinu núverandi array okkar svo við getum reikna út þar sem vinstri helmingur listanum er og þar sem hægri helmingur á listanum er. Við gerum það með annað hvort að byrja og enda, eða við getum kallað þá mín og max. Ég nota byrja og enda þessa tíma. Þegar við byrjum, ef við lítum til baka á dæmi hérna, upphaf okkar var sett á upphafi array, sem eðlilegt. Hvaða vísitala var þetta? Hvað ætti okkar byrja að? Daniel. [Daniel] Haystack [0]. [Nate] Já, svo við gætum setja það jafn Heysátan [0]. Vandamálið, þó, er að þetta gefur okkur ekki stöðu fyrsta frumefni. Það gefur okkur vísitölu fyrstu frumefni eða raunvirði á þeim fyrstu stöðu. [Nemandi] Það mun umbreyta til .20? [Nate] Hvað þetta mun gera er-vel, það mun ekki gera allir umbreyta. Hvað það mun gera það mun geyma 4 í byrja, og þá verður erfitt að gera samanburð við byrja því að byrja að vera að halda gildi 4, sem er upphaf array okkar, en við viljum fylgjast með vísitölur í fylki öfugt við gildi. Við munum í raun að nota 0, eins og þessi. Fyrir lok array-Charlotte kom þetta upp aðeins fyrr. Þetta er þar sem við munum taka tillit til núll flokkun. Charlotte, sem er enda fylkisins? Hvað er vísitalan í lok? [Charlotte] Size - 1. Já, og hvaða stærð ætti við að nota? Ættum við að nota fjármagn stærð eða lágstafir stærð? Capital stærð. Í þessu tilfelli, gætum við notað fjármagn stærð. Ef við vildum þessa aðgerð til að vera færanlegt og nota þetta virka í öðrum forritum, getum við í raun að nota lágstafi stærð. Það er allt í lagi líka. En Charlotte er alveg rétt að við viljum hafa stærð - 1. Á þessum tímapunkti- [Nemandi] Hvernig er það sem þú getur notað hástafi stærð? Hvernig er það að við gætum notað hástafi stærð? Það kemur í ljós að þessir # skilgreinir eru í raun, undir hetta, texta eins og finna og skipta, ef það er vit í. Þegar þú saman númerið þitt er forvinnu áfanga af þýðanda fer í gegnum skrána, og það lítur út fyrir allt sem þú hefur skrifað höfuðborg stærð, og það kemur þessi texti bókstaflega með 8, alveg eins og þessi. Í þeim skilningi er þetta mjög mismunandi frá breytu. Það þýðir ekki að taka upp allir pláss í minninu. Það er einfaldur texti Skipta bragð. Í þessu tilfelli erum við að fara að nota stærð. Héðan við viljum að gera einhvers konar endurtekningu, og við erum á réttri leið með do-while lykkju okkar. Við viljum til að gera eitthvað þar til ástand er ekki að halda lengur, og eins og við sáum áðan, sáum við að það ástand var reyndar að við viljum ekki enda að vera minna en að byrja. Þetta er hætt ástand okkar. Ef þetta gerist, viljum við að hætta og segja eins og "Hey, við höfum ekki fundið neitt." Til að tjá þetta, viljum við nota einhvers konar lykkju. Í þessu tilfelli, það vildi vera a do-while lykkju, a for lykkju, á meðan lykkja? Við höfum do-while lykkju hér. Ert þú krakkar eins og þeirri nálgun? Finnst þér að við ættum að reyna aðra nálgun? Kevin, einhverjar hugsanir? Við gætum haft while lykkju vegna þess að við vitum hámarki yrði meiri en mín á að byrja engu að síður. Já, þannig að það er engin frumstilling sem þarf að gerast. Þeir gera-á meðan lykkja er frábært þegar þú ert að frumstilla eitthvað fyrir þá próf, en hér við vitum að við erum ekki að fara að halda reinitializing bæði byrja og enda hverri lotu hliðar. Við vitum að við viljum að frumstilla þá, þá athuga ástand okkar. Í þessu tilfelli, ég í raun fara með einföldum while lykkju. Það kemur í ljós að gera-á meðan lykkja er notuð nokkuð sjaldan. A einhver fjöldi af stöðum ekki einu sinni að kenna ekki þegar lykkjur. Þeir eru góðir fyrir meðhöndlun notandi inntak, þannig að við höfum séð mikið af þeim hingað til. En eðlilegt og þegar lykkjur eru miklu algengari. Það kemur í ljós að þetta ástand eins og skrifað mun ekki raunverulega gera okkur mikið gott, og hvers vegna er það? Fyrirgefðu, ég veit ekki nafnið þitt. Ég er Jerry. >> Miður? Það er B-O-R-U-I. Ó, allt í lagi. Ég sé þig ekki á listanum mínum. Ó, er það vegna þess að-ó, það er vit í. Ert þú með hugmynd um hvers vegna þetta á meðan lykkja gæti ekki vinna eins og ætlað, eins og skrifað með ástandi? [Jerry] Þú átt eins og þú vilt allt draslið eftir hann í-? Já, svo það er einn. Við gætum þurft að setja allt þetta efni í while lykkju, sem er algerlega satt. The annar hlutur sem er svolítið vandamál, þó, er að þetta ástand er ekki vinna. [Nemandi] Þú þarft að fletta henni. Einmitt, þannig að þetta ástand mun ekki alltaf vera satt í upphafi þannig að við ræddum um það. Við viljum til að gera eitthvað til loka > Plus byrja? [Nemandi] Í lok. Vegna þess að það er aðeins reiknað hálfa lengd. Þú þarft að bæta við að byrja. [Nate] Hvað myndi þetta reikna fyrir okkur? Ef við hugsum um lok á þessum fyrsta endurtekning á lykkju, enda er að fara að vera í vísitölu stöðu 7. Byrja er í stöðu 0. Mundu, við erum að leita að annað hvort Staða 3 eða stöðu 4. Ef við skoðum þessa stærðfræði, bara til að gera það svolítið meira áþreifanlegur, setja nokkrar tölur hér, höfum við 7, 0, svo 7-0, og þá / 2 er 3 í heiltölu deild, sem er. Þá þurfum við að þá bæta við aftur okkar byrja? Við gerum ekki í þessu tilfelli. Á fyrstu endurtekning, það verður fínt því að byrja er 0. En eins og við framfarir, eigum við í raun öll bara þörf endir - byrja / 2. Það er eitt annað bragð hér, og það er nefnilega einn af framar. [Nemandi] Ekki þurfum við sviga? [Nate] Einmitt, og það er vegna þess að ef við gerum ekki setja þessar sviga, þá er þetta lína verða túlkuð í staðinn sem (endir) - (byrja / 2), sem við ákveðið vil ekki. Horfa út fyrir þá forgang reglum. [Nemandi] Hvers vegna er það ekki enda + byrja? Hvers vegna er það ekki enda + byrja? [Nemandi] Hvers vegna er það ekki? Hvers vegna væri það +? Ég held að þú ert rétt. [Nemandi] Vegna þess að það er að meðaltali? [Nate] End + byrja, þú ert alveg rétt. Vá, goofed ég algerlega. Þú ert rétt. Ef við vorum að gera mínus, myndum við vilja til bæta við að byrja aftur inn Í þessu tilfelli, þú ert mjög rétt að við viljum taka meðaltal tveggja, þannig að við viljum að bæta þeim, í stað þess að draga þá. [Nemandi] Það myndi einnig vinna ef þú gerðir enda - byrja / 2 + byrja. Það væri ef við gera-ég trúi því. Til dæmis, ef við vorum að horfa á að byrja, og við færst það hérna í 15. Nú byrja er á stöðu 2. End er á stöðu 7. Ef við drögum þá fáum við 5. Skiptu því með 2, fáum við 2. Og þá erum við að bæta við 2 aftur, og það fær okkur til 4. stöðu, sem er hérna, sem er miðpunkt. [Nemandi] Ekki þurfum við að sjá um umbúðir? Í hvaða skilningi þarf við að annast umbúðir? Ef summa eða mismunur eftir því hvernig við gerum það er ekki slétt tala. Þá tölva gets ráðvilltur hvort þegar það er 2,5; þú fara til vinstri eða hægri til að ákvarða hver er miðpunkt? Fékk það. Það kemur í ljós að við heiltölu deild, við gerum ekki alltaf að fá þessar fljótandi tölur benda. Við fáum aldrei aukastaf. Það er algerlega hunsaðar. Ef þú hafa a tölva skipta tvær int breytur, og einn er 7, og hitt er 2, þú munt ekki fá 3,5 vegna. Það mun fá 3. Afgangurinn verður hent, svo það er í raun Námundun ekki umferð heldur hæð, ef þið þekkir það í stærðfræði, þar sem þú hendir alveg aukastaf, og svo þú ert í raun Stytti það niður í næstu heild stöðu, að næstu heilu tölu. [Nemandi] En þá er það erfitt vegna þess að ef þú ert með fjölbreytta 7 þáttum þá tekur það sjálfkrafa 3. þáttur úr miðpunkt stað 4.. Hvernig að takast á við það? Það er erfitt vegna þess að ef við hefðum fjölda 7, það myndi velja 3 í stað 4. Gætirðu útskýrt aðeins meira? [Nemandi] Vegna þess að ef þú ert með 7 þætti þá 4. þáttur væri miðpunkt, ekki satt? Mundu athugasemd um að vera núll verðtryggð, þó. [Nemandi] Já, svo í stað 3. Það myndi vera miðpunkt. Já. Ó, allt í lagi. Ég sé hvað þú átt við. Það er skrýtin tilfinning, eins og við að venjast þessu öllu hugmyndinni um losna við aukastöfum. Þetta er frábær punktur. Við skulum klára þetta upp. Við höfum reiknað miðpunkt okkar. Við erum að prófa að sjá hvort nál okkar er jafn miðju gildi. Við erum prentun að við fundið það, en í raun, hvað við viljum gera í þessum aðstæðum? Við höfum fundið það, þannig að við viljum láta sem hringir vita að við fundum það. Við höfum fengið fall sem er a Boolean tegund virka. Leiðin sem við merki til þess sem hringir í aðgerð okkar að við erum tilbúin til að fara er við segjum, "Hey, það er satt." Hvernig ættum við að gera það, Kevin? Þú ert nodding höfuðið. >> [Kevin] Add aftur satt. [Nate] Einmitt, aftur satt. Nú, ef það er ekki jafn, hvernig ættum við að líta á vinstri helmingi? Einhverjar hugmyndir? Stella, einhverjar hugmyndir? Þú þarft að setja nýja stöðu fyrir árslok. Já. Þannig að við verðum að gera stöðu miðpunkt - enda. Frábært. Við þurfum að setja nýja stöðu fyrir lok að líta á vinstri helming. Þetta var það sem við töluðum um áður þar sem Ég að halda áfram að fara aftur að þessu dæmi. Ég byrja hér, og þá hef ég The End alla leið hérna. Aftur, ef við erum að leita að 15, og miðpunkt okkar er í 16, og við skiljum, "Oops, 16 er meiri. Við viljum fara í vinstri helming. " Við myndum þá að færa enda á 15, og það gerum við með því að taka einn frá miðju og setja það sem nýtt enda okkar. Sömuleiðis, ef við viljum líta á hægri hluta, hvernig myndum við gera það? Ertu með hugmynd? [Nemandi] Þú stillir bara að byrja að miðju + 1. [Nate] Great. Og nú er að ræða sem við finn ekki neitt, er að fá gætt af fyrir okkur? Daníel er að fá gætt af fyrir okkur? [Daniel] Nei [Nate] Ef við tökum það í gegnum allt fylki og við finn ekki neitt, þar yrði að vera gætt af, eða ættum við að hugsa um það? [Daniel] The meðan ástand. [Nate] Já, á meðan ástand, nákvæmlega. Það verður að gæta þess að fara í gegnum allt array ef við finn ekki neitt. Þetta meðan lykkja mun enda. Við munum aldrei hafa fundur this ástand, og við getum aftur rangar. Við getum einnig skilið þetta ef hér svona því ef þetta ef staðhæfing er satt, og hlutverk okkar aftur, og svo við munum fyrst og fremst hætta þessa aðgerð á þessum tímapunkti þegar við aftur satt. En hvað gerist með þessari uppbyggingu hér? Mun þetta virka alveg, eða er nokkur rökrétt galli þar? Það er einhver rökrétt galli þar með hvernig það er sett upp. Hvað gæti það verið? [Nemandi] Hvers vegna þarft þú að - og + 1s? Það setur array okkar upp að nýju vinstri helmingur okkar og hægri helming. [Nemandi] En af hverju getur þú ekki gert það án þess að - 1s og + 1s? [Nate] Við gætum setja það jafnt á miðju? Hvað gæti verið erfitt um það? [Nemandi] Ég giska á að það er óhagkvæmt vegna þess að þú ert að athuga gildi sem þegar hefur verið athugað. [Nate] Einmitt, svo er Sam algerlega rétt. Ef þú stillir á enda og byrja jafn miðju stað - 1 og + 1 reflectively, einhvern tíma í framtíðinni munum við á endanum að stöðva miðpunkt aftur. [Nemandi] Ég byrjaði pset, og svo ég hafði eitthvað eins og þessi þar sem ég gleymdi + 1, og það festist í óendanlega lykkju. Einmitt vegna þess að á einhverjum tímapunkti sem þú ert aldrei að fara að fá að byrja og enda að í raun skarast. Cool. Það er eitt rökrétt galli, og það er að það ætti örugglega að vera er annað hvort. Hvers vegna kann að vera? Ástæðan er ef það er ekki annað ef-sástu hana, Kevin? [Kevin] Já, vegna þess að þú ert að breyta endastað. [Nate] Einmitt. Við erum að breyta endapunkti, og ef það er skrifað svona-we'll gera bil á milli- það mun athuga þetta mál. Þetta mál, ef það tekst, mun hætta út af aðgerðina. Þá mun athuga þetta á næsta tilfelli, og ef þetta tekst, mun það stilla endapunkt, og þá mun það halda áfram og athuga þetta mál. En á þessum tímapunkti, gera við viljum ekki að það að halda áfram að skoða. Sem betur fer, höfum við endurstilla ekki miðpunkt hér, og við vitum að þetta mál mun ekki ná árangri. En við viljum örugglega að setja annað hvort í það jafnvel þó að kannski í þessu tilfelli þar sem við erum ekki að breyta miðpunkt, myndi það gera a mismunur? Nei, vegna þess að þessi mál eru allt einir. Aftur, slæmt minn. Við gerum ekki, held ég, þarf þetta annað hvort. Við getum gefa það a reyna og keyra það og sjá hvað gerist. Building, villa kom upp. Það er líklega vegna þess að ég fór þetta B og er E í hér. Þarf ég að hafa einhverjar fleiri af þeim upp á toppinn? Það lítur ekki eins og það. Við minnka, byggja, Þar fer, svo nú ef við leit að 15, já. Leyfðu mér að þysja inn 15, já. Við getum keyrt það aftur. Senda kóðann, byggja, hlaupandi. Við getum leitað að einhverju eins og 13, og við fáum ekki neitt að prenta út, svo það er ekki að finna það fyrir okkur. Það er frábært, því það er ekki á listanum okkar. Við erum nú út á tíma. Það er að fara að vera það fyrir þessa viku. Takk fyrir að taka þátt, og sjá þig seinna. [CS50.TV]