[Powered by Google Translate] [Pjesa 3] [Less komode] [Nate Hardison] [Universiteti i Harvardit] [Kjo është CS50.] [CS50.TV] Të gjithë të drejtë, le të ketë filluar. Mirë se vini në Javën 4 të CS50. Në qoftë se ju djema të hapur një shfletues web dhe e hapur deri pset 3, Përleshje me CS50, ne jemi duke shkuar për të filluar do të përmes seksionit të pyetjeve atje. Ashtu si javën e kaluar, ne do të punojmë në CS50 Spaces, në qoftë se ju do të tërheqë që deri si edhe, dhe në qoftë se ju shkoni përpara dhe për të vizituar këtë link që kam marrë deri këtu në krye. Është koha për të marrë filluar. Ne kemi marrë pak programin tonë hi këtu. Asgjë çmendur. Një nga gjërat e para që unë dua të bëj me ju djema shkoni sot është më shumë se një zgjidhje pak Për të vendosur, Problemi 1 lloj i zgjidhjeve shembull, vetëm kështu që ju mund të merrni një të ndjehen për atë që llojet e stafit kodi është shkruar, çfarë lloj të nxënësve kod tjera janë shkruar, dhe a keni marrë një vështrim në atë, sepse unë e di se është e çuditshme Kur ju të paraqesë një zgjidhje për një sërë problemeve dhe për të marrë komente në versionin tuaj, por ndonjëherë është e dobishme për të parë se si njerëzit e tjerë e bëri atë, sidomos ato që janë në kërkim të bukur. Për pjesën më të madhe, unë kam qenë i impresionuar me të vërtetë me zgjidhje që ju djema të prodhuara. Unë nuk kanë filluar ende në kërkim në Set 2s tuaja problem, por në qoftë se ata janë asgjë si i pari, kjo do të thotë asgjë, por gjëra të mira. Nëse ju shikoni në rishikimet e mia, le të fillojë të gjithë rrugën poshtë në Rishikimi 1, dhe ne jemi duke shkuar për të marrë një sy të shpejtë në një zgjidhje Mario. Nëse ju tërheq këtë ide, këto programe që ne jemi duke shkuar për të paraqitur janë të sakta. Nuk ishin çështjet korrektësinë me këto probleme, por më tepër, ne duam të flasim pak në lidhje me çështje të projektimit të ndryshme që janë duke u përdorur këtu. Një nga gjërat që ishte interesante në lidhje me zgjidhjen e është se ai e përdori këtë të ri ndërtimin quajtur kile define, nganjëherë referuar edhe si një hash të përcaktuar. Më lejoni të zoom në në atë këtu. A # define ju lejon për të dhënë emrat e këtyre numrave në programin tuaj. Në këtë rast, lartësia maksimale e një piramide në Mario ishte 23 dhe në vend se të vënë 23 në kodin tim- ne do të referohemi se si coding hard 23 - në vend të kësaj kjo i jep MAX_HEIGHT emrin në atë numër, kështu që këtu poshtë në A-, ndërsa lak tim ju në fakt mund t'i referohet MAX_HEIGHT në vend që të vënë numrin e 23 in [Student] Çfarë është avantazh për të bërë këtë? Kjo është një pyetje e madhe. Njëra është lexueshmëri. Një avantazh i përdorimit të kësaj # define është lexueshmëria. Kur unë jam duke e lexuar këtë kod, unë mund të shoh se çfarë po ndodh. Unë mund të shoh në këtë gjendje këtu se ne jemi testimin për lartësinë e të qenit <0, të cilat ne mund të përcaktohet edhe të jetë një lartësi minimale ose një lartësi min. Përparësia tjetër është se unë pastaj mund të lexoni pjesën tjetër të linjës për të parë se ne jemi gjithashtu të kontrolluar për të siguruar se lartësia nuk është më e madhe se lartësia max, sepse ne jemi duke shkuar për të vazhduar, ndërsa lartësia është më e madhe se lartësia max. Përparësia tjetër është-nëse unë zoom out pak këtu- në qoftë se unë të drejtuar këtë program dhe kam drejtuar atë, të themi, me 23 të drejtë tani, ajo do të shtypura nga të gjitha 23 rreshtave ashtu si kjo. Por thonë se unë të kërkuar për të ndryshuar lartësi max, dhe tani unë dua të kufizojë lartësinë maksimale të piramidave të jenë të them vetëm njeri, që ishte i shokuar. # Include , # define MAX_HEIGHT, dhe le të thonë se ne të kërkuar për të vendosur atë të barabartë me 10. Tani në këtë pikë, të gjitha unë duhej të bëja ishte të ndryshuar atë në këtë vend një të tillë. Unë mund recompile kodin, dhe tani në qoftë se unë të përpiqet dhe të shkruani në 12, kjo do të shkaktonte mua përsëri. Në këtë rast, ne jemi vetëm duke përdorur MAX_HEIGHT herë. Kjo nuk është se i madh i një sherr për të shkuar në dhe për të ndryshuar atë në lak, ndërsa në qoftë se keni nevojë për të. Por në programet ku ju jeni referenca të njëjtin numër magjik pa pushim, ky mekanizëm # define është me të vërtetë i dobishëm sepse ju vetëm të ndryshojë atë një herë në krye të file-kjo është zakonisht ku ju vënë ato- dhe ndryshimi percolates nëpër pjesën tjetër të file. Gjëra të tjera kam kërkuar të vihet në dukje në këtë detyrë që kam menduar dukej me të vërtetë e bukur, njëri ishte emërtimin e variablave. Ju shikoni këtu se ne kemi marrë variabla integer quajtur rresht dhe quajtur lartësi. Hapësira, hashes, ajo ndihmon të bëjë Kodi pak më i lexueshëm, e bën atë një pak më të kuptueshme se çfarë po ndodh në të vërtetë. Kjo është në kontrast me përdorimin e, të themi, letra të rastit ose thjesht gobbledygook krejt. Një gjë e fundit që unë do të theksoj është se në për sythe, shpesh këto variabla iterator, këto sportelet që ju përdorni në tuaj për sythe, kjo është standard dhe konvencionale për të filluar ato me ose unë dhe pastaj j dhe pastaj k dhe shkon në nga atje, nëse keni nevojë për më shumë variabla, dhe kjo është vetëm një konventë. Ka shumë konventa. Kjo varet nga gjuhë programimi që ju jeni duke përdorur. Por në C, ne zakonisht fillojnë me i. Kjo nuk ka kuptim për të përdorur, të themi, një ose b në varësi të situatës. Kjo është ajo për këtë një të tillë. Nëse ju tërheqë deri tani Shqyrtimi 2, ju do të shihni një tjetër Mario, dhe kjo është e ngjashme me një tjetër që sapo pamë, por ajo ka lloj diçka të ftohtë. Nëse ne shikojmë në këtë seksion të drejtë këtu brenda brendshme për lak, ata janë duke përdorur një sintaksë të çmendur kërkoni këtu të drejtë në këtë linjë. Kjo është quajtur një operator tresh. Kjo është një deklaratë në qoftë tjetër kondensuar në një linjë. Gjendja është kjo pjesë në kllapa. Kjo është ekuivalente me thënë në qoftë se j lartësi <- i - 1. Dhe pastaj çfarë përmbajtjen e që në qoftë se blloku do të jetë shumë hapësirë dhe pastaj përmbajtjen e çfarë tjetër do të jetë shumë këtë #. Është në thelb caktimin e një hapësirë ​​për këtë variabël. Është vënë një hapësirë ​​në përmbajtjen e ndryshueshme bllok, nëse ky kusht është plotësuar, dhe nëse gjendja nuk është plotësuar, pastaj ndryshueshme bllok merr këtë #. Dhe pastaj, sigurisht, në vend të ndërtimit të një varg të tërë dhe shtypje gjithçka në fund kjo zgjidhje printon atë një karakter në një kohë. Pretty cool. Një disa gjëra për të parë. Ne do të lëvizin në të babëzitur. Tani në qoftë se ne e shikojmë në babëzitur, kjo zgjidhje e parë përdor këto # përcakton mjaft. Ne kemi marrë një konstante të përcaktuar për secilin nga numra të ndryshëm në këtë program. Ne kemi marrë një për cent për dollar, një për lagjet, dimes, nickels, dhe pennies, dhe tani në qoftë se ne lëvizni poshtë dhe lexoni kodin, ne mund të shohim një standard për ta bërë gjithçka që loop ndërsa shtypi jashtë. Lloji i Thelbi i këtij problemi është kuptuar se ju nevojitet për të kthyer noton që ju lexoni në nga përdoruesit në një numër të plotë të saktë të bëjë matematikë, dhe kjo është për shkak se me numra decimal, si kemi biseduar për një kohë të shkurtër në leksion, kjo nuk është e mundur të saktë të paraqesin çdo vlerë të vetme në numrin linjë sepse nuk janë vlerat pafundësisht shumë ndërmjet 3 dhe, të themi, edhe 3.1. Ju mund të keni dhe 3,01 3,001 3,0001 dhe, dhe ju mund të mbajë. Ajo rezulton sa herë që ju jeni duke punuar me të holla, ju shpesh duan për të kthyer atë në formatin numër i plotë në mënyrë që ju nuk jeni të humbur dhe pennies atë lloj stuff. Bërë që dhe arrestimi ishte kyç. Kjo zgjidhje ka përdorur një algoritëm të përkryer të drejtpërdrejtë, të madh, cilat decremented numrin e mbetura cent, së pari sipas tremujorëve, pastaj nga dimes, pastaj nga nickels, pastaj me pennies, dhe duke shtuar numrin e monedhave çdo herë. Një zgjidhje që ne do të shohim, si unë zoom jashtë dhe të shkojnë në Revision 4, kishte një fillim shumë të ngjashme por div përdorur në vend dhe mod drejtë mbi këtu për të llogaritur numrin e cent. Kjo, numri i tremujorëve është i barabartë me numrin e pjesëtuar me 25 cent, dhe arsyeja është sepse kjo punon ne jemi duke bërë ndarjen numër i plotë, kështu që është e hidhni ndonjë tjetër. [Student] A kemi për të komentuar kërkimin? Me të vërtetë varet. [Student] Ju jeni komentuar më shumë se kodi drejtë këtu. Po, dhe kështu që nuk janë një bandë e ndryshme filozofi për këtë. Filozofia ime personale është se kodi juaj është me të vërtetë e vërtetë, si kodit tuaj është ajo që është në të vërtetë ekzekutimin në kompjuter, dhe kështu kodin tuaj duhet të jetë aq i lexueshëm të jetë e mundur që të mos kërkojnë si shumë komente. Tha se, kur ju jeni duke bërë gjëra që janë lloj i ndërlikuar matematikisht ose algorithmically, ajo është e mirë për të komentuar ato në mënyrë që ju mund të shtoni një dimension shtesë, një shtresë shtesë për këdo që është lexuar kodin tuaj. Në këto zgjidhje, shpesh ato janë komentuar më shumë vetëm për shkak se ne duam të jetë në gjendje për të shpërndarë ato dhe të ketë njerëz të marr ato dhe lexoni ato mjaft lehtë. Por definitivisht, unë do të pajtohem se kjo është e rëndë. [Student] Por, kur në dyshim, të shkojnë të rënda? Kur në dyshim, shkoni rëndë. Disa njerëz do të thonë ndonjëherë 0 kthimit ose diçka të tillë. Unë mendoj se kjo është një koment qesharake. Qartë se është ajo që po ndodh. Unë nuk kam nevojë anglisht të më thoni se. Ndonjëherë njerëzit do të shkruajë gjëra si "kthxbai!" Kjo është lloj i bukur, por edhe jo- se nuk është bërë dallimin në mes të pikave të komentuar apo jo. Këto llojet e Komentet janë vetëm ha, ha. Cool. Në këtë pikë, le të fillojnë të punojnë në problemin Set 3 seksionin e pyetjeve. Në qoftë se ju djema të tërheqë këtë përsëri, si me javën e kaluar, ne nuk jemi duke shkuar për të parë pantallona të shkurtra në këtë seksion. Ne do të le ju djema të bëjë që në kohën tuaj dhe të flasim në lidhje me pyetjet. Por tani në këtë seksion ne do të kalojnë një kohë pak më shumë flasim pak nga bazat kodim si ne e bëmë javën e kaluar, dhe në vend të kësaj, ne do të përqëndrohet më shumë në pak më i teorisë, kështu duke folur për kërkimin binar dhe pastaj klasifikim. Nga ata prej jush të cilët kanë ndjekur së bashku me ligjëratës, dikush mund të më jepni një përmbledhje të asaj që është dallimi mes kërkim binar dhe kërko lineare? Çfarë po ndodh? Sigurt. Kërkimet lineare kërko nëpër çdo element në listën e renditura një nga një nga një nga një nga një, dhe kërko binar ndan listë në 2 grupe, kontrollon nëse vlera çelësat që ju jeni në kërkim për të është më e madhe se ose më pak se vlera e midpoint që ju vetëm e gjeti, dhe nëse kjo është më pak se, ajo shkon me listën më të ulët dhe pastaj e ndan atë përsëri, ka të njëjtin funksion të gjithë rrugën poshtë derisa ai gjen midpoint të jetë e barabartë me vlerën e vetë. Drejtë. Pse nuk kemi kujdes? Pse nuk flasim për kërkimin binar kundrejt kërkim linear? Po. Binary është një shumë më të shpejtë, kështu që nëse ju të dyfishtë madhësinë e problemit ajo merr një hap më tepër se dy herë më shumë. Saktësisht. Kjo është një përgjigje e madhe. Kërkimi lineare është shumë e kontrolluar nga një element në një kohë, dhe siç e pamë në ditën e parë të leksionit kur Davidi shkoi nëpër shembull librin e tij të telefonit dhe grabitur nga një faqe e librit të telefonit në një kohë dhe mbahen bërë që mbi dhe mbi dhe mbi përsëri, ajo do të marrë atij një kohë vërtet të gjatë për të gjetur askënd në librin e telefonit, përveç nëse, natyrisht, ai ishte në kërkim për dikë që në fillim të alfabetit. Me kërkimin binar, ju mund të shkoni shumë më të shpejtë, dhe kjo nuk është vetëm dy herë më shpejt, ose 3 herë më shpejt ose 4 herë më shpejt. Por problemi merr të vogla dhe të vogla dhe të vogla shumë më të shpejtë. Për të ilustruar këtë, ne do të fillojmë të flasim në lidhje me atë që po ndodh në kur kemi shkruar kërkimin binar. Problemi në dorë është se në qoftë se unë kam një rrjet të numrave, thonë, 1, 2, 3, 5, 7, 23, 45, 78, 12323, dhe pastaj 9 me një ton të 0s pas saj, ne duam të jetë në gjendje të kuptoj se çfarë është me të vërtetë më shpejt në ky grup e numrave. Unë e di kjo duket një budalla pak dhe pak ndërtuar, sepse tani është. Ne kemi një grup që nuk ka elemente shumë e shumë në të, dhe në qoftë se unë kërkoj nga ju që të kuptoj se nëse apo jo 23 është në rrjet, ju mund të bëni që shumë shpejt vetëm nga glancing në këtë dhe duke u thënë mua po ose jo. Analog për t'u marrë parasysh është e imagjinoni nëse kjo ishte, të themi, një spreadsheet Excel rreshtave me 10.000, 20.000 rreshtave. Sigurisht, ju mund të bëni F komandës ose F kontrollit dhe të kërkoni diçka. Ju gjithashtu mund të përdorni filtra dhe sende kërkimit, por nëse keni pasur për të kërkuar nëpër atë vijë fotografi nga rresht pas rreshti, ajo do të marrë ju një kohë të gjatë për të gjetur atë. Kjo është lloj i si në shembullin librin e telefonit, gjithashtu, ku askush nuk duket përmes një faqe libri të telefonit në një kohë. Në mënyrë tipike, ata do të hapur atë në mes, ose në rastin e një shumë të librave telefonit dhe fjalorë ku ju në të vërtetë kanë të akorduar në letrën e parë, ju rrokullisje në atë letër të parë dhe të hapur dhe të fillojnë duke kaluar aty. Kujtoj mua e emrit tuaj përsëri. >> Sam. Sam. Ashtu si Sam tha se procesi linear kërkimit do të jetë me të vërtetë i ngadalshëm, dhe në vend me kërkimin binar, mënyra punon kjo është se çdo herë ne do të shkojmë përmes një përsëritje të algorithm tonë kërkim, ne jemi duke shkuar për të ndarë listën në gjysmë, në thelb, në dy listat më të vogla. Dhe pastaj në përsëritje e ardhshëm të lak, ne do të ndajnë atë përsëri në listat e tjera të vogla. Siç mund ta shikoni, problemi vazhdon të bëhet më i vogël dhe të vogla sepse ne kemi mbajtur gjysmën discarding të listës çdo herë të vetme. Si e bën këtë punë hidhni? Ashtu si një kujtesë, ajo që ne jemi duke shkuar për të bërë në qoftë se ne ishim një kompjuter dhe ne u, të themi, në kërkim për numrin 5 në këtë listë është se ne do të zgjedhë një numër në mes. Në mes të këtij lista, sepse ka 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 numra, ne do të vini numrin as në pozitën e 4 ose në pozitën e 5, dhe ne do të thërrasë se mesme e listës sonë. Marr numrin në mes. Pastaj, ashtu si Sam tha, ne do të provuar për të parë nëse ky numër është i barabartë me numrin që ne duam për të marrë ose numrin tonë të dëshiruar. Nëse është e barabartë, atëherë ne kemi gjetur atë. Kemi fituar. Nëse kjo nuk është e barabartë, atëherë ka disa raste. Dy raste janë ose numri duhet të jetë më i madh sesa numri që ne jemi duke kërkuar në, ose ajo është më pak se. Në qoftë se kjo është më e madhe, ne shkojmë në të djathtë. Dhe në qoftë se kjo është pak, ne shkojmë në të majtë. Dhe pastaj ne të përsëritur të gjithë procesin përsëri në të dyja gjysmën e duhur ose gjysmën e majtë të listës. Problemi i parë në seksionin e sotme është të kuptoj se se si ne mund të vërtetë të fillojë për të shprehur këtë në kodin e C. Ne kemi marrë pseudokod këtu. Ajo që ne do të fillojnë të bëjnë është që unë do të tërheqë një markë të re hapësirë, ruani këtë rishikim kështu që ne kemi këto shënime për më vonë, ne do të fshini të gjitha këto, dhe pastaj kopjoni dhe ngjisni nga vendosur problemit këtë informacion në hapësirat tona, dhe shpresojmë se kjo nuk do të thyejnë. Përsosur. Në qoftë se ju djema të gjithë bëjmë atë, kopjoni dhe ngjisni këtë kod në hapësirë ​​tuaj të re, në një njërit bosh. Le të përpiqemi Danielin. Nëse ju përpilojnë dhe për të drejtuar këtë program, e bën këtë punë? Nr. >> Çfarë është ajo duke thënë? Ajo thotë se kontrolli i arrin fundin e jo void funksion. Yeah, kështu që më lejoni të provoni drejtimin e tij. A keni djema parë këtë më parë? A e dini se çfarë do të thotë kjo? Mirë, le të analizoj këtë pak pak. Është thënë në file.c on line 9, kolona 1 ne kemi një gabim, ashtu si ke thënë, dhe ai thotë se është e rrjedhur nga paralajmërimi gabim dhe llojin e kthimit paralajmërim. Ajo duket si diçka po ndodh me llojin e kthimit, që e bën kuptim. Ne kemi marrë një funksion jo void, që do të thotë se ne kemi marrë një funksion që nuk ka kthim pavlefshme. Një funksion i pavlefshëm është ai që duket si ky: void foo (), dhe kjo është e pavlefshme për shkak se kthimi lloji është e pavlefshme, që do të thotë se në qoftë se kemi pasur diçka këtu si kthim 1, ne do të merrni një gabim përpilues për këtë. Megjithatë, ne kemi një funksion jo pavlefshme. Funksioni jo pavlefshëm jonë në këtë rast është funksion tonë të kërkimit sepse ajo ka një lloj të kthimit të bool. Kur është thënë se kontrolli i arrin fundin e një funksion jo void, kjo është për shkak se kërkimi nuk ka një deklaratë e kthimit. Kjo nuk është asgjë e kthyer tipit bool. Ne mund të rregullojmë atë, dhe çfarë mendoni ju djema Kërkimi duhet të kthehen nga default? Çfarë duhet të jetë kthimi vlera e parazgjedhur kërkim? Sepse kjo është ajo që ne mund të vënë në fund. Charlotte, a keni ndonjë-? Vërtetë apo e rreme? >> Vërtetë apo e rreme. Cili? Rreme. Nuk e di. False? Le të provoni. Pse do thoni kthimit të rreme? Kjo është intuita e madhe. [Charlotte] Unë nuk e di. Ne jemi duke shkuar për të kthyer të rreme në këtë rast, sepse kjo do të jetë paracaktuar tonë në qoftë se për ndonjë arsye lista është bosh ose gjilpërë se ne jemi duke kërkuar për nuk ekziston. Pastaj në fund, në qoftë se ne nuk do të kthehen vërtetë më herët në këtë funksion, ne gjithmonë e dimë se ky funksion do të thonë Jo, ajo nuk është në rrjet. Kjo nuk është në kashtë. Tani në qoftë se ne hartimin dhe drejtuar atë, më lejoni të shpëtuar këtë mënyrë ne mund të tërheqë atë. Tani në qoftë se ne përpilojnë dhe të drejtuar programin tonë, ajo ndërton. Ne kemi marrë vëmendjen tonë të shpejtë pak. Nëse unë goditi 4-uh-oh. Ajo nuk ka asgjë të shtypura jashtë. Ajo duket si çdo gjë përfundoi mirë. Ne kemi marrë për të mbushur këtë in Ne biseduam në lidhje me algorithm në pseudokod pak më parë. Më lejoni të shohim, përveç kësaj, dhe unë do të tërheq atë algorithm përsëri. Le të goditur këtë djalë. Jo. Nuk është. Si e bëjmë këtë? Çfarë do të jetë një strategji e mirë për të filluar off këtë kod? Ju duhet të marr një numër në mes. Si mund të marr një numër në mes të një grup? Any suggestions? [Student] Strlen ndarë nga 2. Strlen ndarë nga 2. Kjo është një njeri i madh. Strlen punon me lloje të veçanta të vargjeve. Çfarë lloje të vargjeve? Vargjeve string, vargjeve karakter. Kjo është një lloj i njëjti koncept që ne duam të zbatohen, por ne nuk mund të përdorin strlen, sepse ne nuk kemi një grup të karaktereve. Ne kemi një rrjet të ints. Por çfarë do të strlen marrë për ne? A e dini se çfarë ajo merr për ne? [Student] Strlen na merr gjatësinë. Pikërisht, ajo merr na gjatësi. Strlen merr gjatësinë e vektorit për ne. Si nuk kemi marrë që në programin tonë të kërkimit binar? Si do ta merrni gjatësinë e një grup? [Student] Strlen? Ju mund të merrni gjatësinë e një grup formatuar si duhet C string me strlen. Problemi, megjithatë, është se ne nuk kemi një rrjet string. Nëse ne shikojmë prapa në këtë kod, ne kemi këtë koleksion integer. Si mund ta dimë se sa kohë është? [Student] A ka një një ekuivalent për endpoint, si l int apo diçka? Ajo rezulton se në fakt nuk është, dhe kështu në një mënyrë, kjo është një nga ato gjëra që vetëm e mirë për të dini rreth C, se nuk ka asnjë mënyrë për të marrë gjatësinë e një grup në qoftë se të gjitha unë ju jap është array. Arsyeja ajo punon me vargjet, arsyeja strlen punon, është sepse nëse një varg është formatuar si duhet, ajo do të ketë atë të veçantë karakter \ 0 në fund. Ju gjithashtu mund të imagjinoni nëse ju keni një varg të pashembullt formatuar dhe nuk ka \ 0 karakteri atje, atëherë të gjithë gjë nuk punon. [Student] A mund të shtoni 0 \? Ne mund të në këtë rast. Ne mund të shtoni disa lloj \ 0 ose disa lloj të nënkuptuar karakterin dhe pastaj të përdorin atë. Por kjo nuk është mjaft do të punojë sepse 0 \ është për një lloj char, dhe këtu ne kemi marrë ints. Gjë tjetër është nëse ne do të përdorim një vlerë të veçantë si -1 për të shënuar fundin e një grup atëherë ne kurrë nuk mund të ruani një -1 në vargjeve tona integer. Ne do të jetë i mbërthyer. Ajo rezulton se e vetmja mënyrë për të marrë gjatësi e një grup në C është që në fakt mend atë kur keni vendosur atë dhe pastaj të kalojë atë rreth me grup kështu që kur unë kam një funksion që do të bëjë disa punë në një grup e integers ose gjithandej apo dyshe ose çfarë keni, Unë gjithashtu duhet të japë funksioni gjatësinë array-së, dhe kjo është pikërisht ajo që ne kemi bërë këtu në funksionin e kërkimit. Nëse ju shikoni, ajo që ne kemi bërë, kur ne të kalojë në grup tonë këtu, ne gjithashtu të kalojë në gjatësi, madhësia. Ajo vetëm ndodh që ne kemi quajtur këtë ndryshore këtu, Ky parametër apo argument. Kjo është quajtur një funksion listën e argumentin ose lista parametër, dhe këto janë quajtur edhe argumentet apo parametra. Njerëzit përdorin terma të ndryshëm në kohë të ndryshme. Unë nganjëherë zëvendësoj ato veten. Kjo ndodh pikërisht kështu që kjo është e ndryshueshme këtu është emëruar në mënyrë të ngjashme në këtë # define deri këtu. Por ata nuk janë e njëjta gjë. Kapitalizimi ka rëndësi. Në qoftë se ju shikoni se çfarë ndodh këtu, ne deklarojmë array int tonë, që ne kemi quajtur numra. Ne kemi dhënë atë madhësinë tonë, e cila korrespondon me tonë # define deri në krye. Ajo do të jetë 8. Dhe atëherë kur ne atëherë e quajmë funksion tonë të kërkimit poshtë, ne të kalojë në numrin ne duam të kërkoni për të, të cilën ne e kemi shtyrë, marrë nga përdoruesit. Ne kalojnë në grup, kjo numrat, dhe pastaj ne gjithashtu duhet të kalojnë në madhësinë e vektorit, dhe pastaj vlera e madhësisë 8 merr ruajtur ose kaluar në këtë madhësi të ndryshueshme quajtur integer. Ne kemi madhësinë e vektorit. Tani në qoftë se ne do të shkojmë prapa në atë që ne ishim duke folur në lidhje me herët, Unë mendoj Missy solli deri në pikën që ajo që ne duhet të bëni është të marrë gjatësinë e vektorit dhe ndani atë me 2, dhe që do të na japë midpoint. Le të shohim. Mund të ketë dikush shkruaj këtë dhe për të shpëtuar atë në hapësirën e tyre? Si në lidhje me Leila? Mund ta keni shkruar këtë në? Shkruani rreshtin e parë, ku ju merrni gjatësinë e vektorit dhe për të marrë midpoint dhe ruajtur atë në një variabël të re. Unë do të ju jap disa sekonda. A jeni gati? [Student padëgjueshme] Sure, ju mund të kam llogaritur midpoint e grup kashtë brenda funksionin e kërkimit përdorur gjatësinë e vektorit kashtë, e cila është e ndryshueshme madhësia? Asgjë ndërlikuar këtu. [Leila] Vetëm madhësia / 2 dhe vetëm- Dhe për të shpëtuar atë, dhe goditi butonin Save deri këtu në krye, dhe ne do të tërheqë atë. Përsosur. Nuk shkojmë. Awesome. Siç është, do të këtë përpiloj? [Leila] Jo, ajo duhet të jetë më i lartë. [Nate] Yeah, kështu që çfarë ne duhet të bëjmë? [Leila] Ashtu si midpoint int apo diçka. Awesome. Po, le ta bëjmë këtë, int size = midpoint. Do të këtë përpiloj? Le të fshini këtë koment dhe të marrin atë nga rruga. Çfarë nuk do të hartojë në lidhje me këtë? Ne nuk jemi duke bërë asgjë me numër të plotë, kështu që ne duhet të shtypura atë apo diçka të tillë. Po, pikërisht. Ne do të merrni një ndryshore të papërdorura. Çfarë tjetër nuk do të punojë për këtë? Unë mendoj se ju thënë diçka, Sam. Semicolons. Po, unë jam i humbur ato semicolons. Ajo do të jetë një gjë konstante gjatë gjithë rrjedhës së mandatit. Gjëja e fundit që unë do të bëj është që unë do të vënë një hapësirë ​​të bardhë në të dyja anët i këtij operatori këtu, pasi kjo është tipike si të bëjmë atë në përputhje me udhëzuesin tonë stil. Ne kemi marrë midpoint e array tonë. Tani në qoftë se ne kujtojmë përsëri në algorithm tonë, çfarë ishte hapi i dytë që na u desh të bëjë një herë ne kemi midpoint? [Student] Në qoftë se kjo është më e madhe [e padëgjueshme]. Yeah, kështu që ne duhet të bëjmë një lloj krahasimi, dhe çfarë jemi krahasuar këtu? Ju tha se në qoftë se ajo është më e madhe se. Çfarë është ajo në atë fjali duke iu referuar? Numri që vjen deri, në qoftë se është më e madhe se midpoint, atëherë shkoni deri në rrjet? Pikërisht, kështu që numri që vjen deri kur ne, Gjilpëra, kështu që ne jemi krahasuar me gjilpërë, dhe çfarë jemi krahasuar kundër gjilpërë? Sepse gjilpërë është ajo që ne jemi duke kërkuar për të. Ne jemi duke e krahasuar atë për të shkuar në midpoint. Por nuk ka kuptim për të kontrolluar për të parë nëse gjilpërë = midpoint? Bën që të bëjnë kuptim? A ka dikush nuk pajtoheni? Le t'i jepte një provoni, në qoftë se (== gjilpërë midpoint). [Student] A printf keni gjetur atë. [Nate] printf ("Ne e gjetëm atë \ n"); Përndryshe-Jam duke shkuar për të fillojnë të bëjnë diçka të ndryshme këtu. Unë jam duke shkuar për të filluar vënien formatimin e teksteve rreth nëse deklaratat gjithë kohës vetëm për shkak se në qoftë se ne shtoni gjëra më shumë, atëherë ne nuk do të marrë hartuesit. Po, Sam. Ju keni marrë një pikë. Problemi është se midpoint përfaqëson një pozicion në grup, por ju mund të merrni atë për të përfaqësuar vlerën në atë pozitë të vektorit. Kjo është një pikë e madhe. A të gjithë të dëgjuar se çfarë ka thënë Sam? Ai tha se si është midpoint paraqet vetëm një pozicion në grup, por kjo nuk është elementi aktual në rrjet. Nëse ju mendoni për kodin si me shkrim të drejtë tani, nëse ne shikojmë në këtë grup këtu poshtë, e cila ka 8 elemente në të, çfarë është vlera e midpoint do të jetë në këtë funksion? [Student] 4. [Nate] 4. Nëse ne shikojmë për numrin 4 - dhe ne mund vetëm të drejtuar këtë kod dhe të vënë një fytyrë të trishtuar pak këtu sepse ne nuk e gjejnë, nëse kemi drejtuar këtë kod siç është tani, ngarkimi atë, ndërtimin, më lejoni të lëvizni poshtë, dhe nëse ne shikojmë për numrin 4, kemi gjetur atë, por ne nuk e kam marrë këtë printf po. Një arsye është se ne nuk kemi kthyer vërtetë, por nuk kemi me të vërtetë të gjeni numrin 4? Dhe Sam është thënë nr. Çfarë ne gjejmë? Ne me të vërtetë gjetur midpoint, që nëse ne shikojmë në rrjet këtu poshtë, ajo do të jetë elementi në indeksin 4 që ne jemi duke kërkuar në, cila është 23. Si mund të merrni atë ne fakt element në midpoint dhe jo vetëm midpoint vetë? [Student] Ne do të hyjë char apo diçka? Çfarë do që të bëjë, vetëm nga kurioziteti? Ju mund të përpunojë një më pak? Ju keni për të transformuar qëndrimin në numër, kështu që ju keni marrë për të bërë disa lidhje-Unë mendoj se është char, por kjo nuk mund të jetë. Po, kjo është një pikë e mirë. Ne kemi qenë duke bërë një shumë të këtij pozicioneve konvertimin në karaktere, këto karaktere, në dy grupe para problemeve. Ajo rezulton se këtu, kjo është pothuajse i ngjashëm me hyrë në karakterin ith brenda një varg, në qoftë se ka kuptim. Këtu duam të hyni në elementin midpoint. Si e bëjmë këtë? Kevin, a keni ndonjë sugjerime se si ne mund ta bëjë këtë? Ju mund të bëni Kashtë, kllapa e hapur, në mes, mbyllet kllapa. Ju mund të shkruani se për ne? Për të shpëtuar atë në këtu, dhe ne do të tërheqë atë deri. Ne jemi duke kërkuar në këtë linjë 9, dhe ne jemi duke kuptuar se ne nuk duam për të krahasuar gjilpërës në midpoint, por në vend të kësaj, ne duam të krahasojmë gjilpërë në elementin në midpoint pozicion brenda array tonë kashtë. Cool. Nuk shkojmë. Yeah, se duket goxha e mirë, në qoftë se (== gjilpërë Kashtë [midpoint]). Ne kemi gjetur atë. Tani në qoftë se ne të drejtuar mbrapa-Kodi we'll deri pak pak- ajo harton, ajo shkon, dhe tani në qoftë se ne e shohim për 4, ne nuk kemi gjetur atë, sepse tani ne jemi të vërtetë duke marrë numrin 23. Ne jemi duke marrë vlerën e 23, dhe kjo është ajo që ne jemi krahasuar me gjilpërë tonë. Por kjo është e mirë. Kjo është një hap në drejtimin e duhur. Kjo është ajo që ne jemi duke u përpjekur për të bërë. Ne nuk jemi duke u përpjekur për të krahasuar gjilpërë kundër pozicioneve në rrjet por kundër elementëve aktuale në rrjet. Nëse ne shikojmë përsëri tani në hapin e ardhshëm në algorithm tonë, çfarë është hapi tjetër? Leila përmendur tashmë atë për pak kohë. [Student] Kontrollo për të parë nëse ajo është më e madhe se, ose më pak se dhe pastaj të vendosë se cilat rrugë për të lëvizur. [Nate] Yeah, kështu që si do të bëjmë këtë? Ju mund të vënë në disa-Do të shpëtuar këtë rishikim, dhe pastaj nëse ju vënë në disa linjave që do të bëjë këtë. Po, Charlotte. >> Unë kam një pyetje. Nuk duhet të jetë midpoint - 1 sepse gjëja e parë është ajo 0 indeksuar, kështu që nëse ne kemi vënë 4, që nuk është në të vërtetë personazhi ne jemi duke kërkuar për? Po, dhe problemi tjetër me që është- kjo është një kapur të madh, sepse ajo do të përfundojë ndoshta ndodh në qoftë se ne vazhdojmë të lëvizur dhe ne kurrë nuk përshtaten fillimisht? I guess atë që ne mund të përfundojë duke bërë është duke u përpjekur për të hyrë në elementi në pozitën e 8-të array, që në këtë rast nuk ekziston. Ne do të duan për të bërë një lloj të kontabilitetit për faktin se ne kemi disa indeksimin zero. [Charlotte] Na vjen keq, unë do të thotë midpoint - 1 në kllapa katrore. Ne mund ta bëjë këtë. Ne do të kthehemi në këtë çështje në vetëm një grimë. Sapo ne fillojmë të shkoj në looping aktuale, kjo është kur ne do të shohim këtë të vërtetë vijnë në lojë. Për momentin, ne mund ta bëjmë këtë, por ju jeni krejtësisht të drejtë. Se indeksimit zero do të ketë një efekt që ne kemi nevojë për llogari për të. Le të shohim. Si është më i madh se dhe më pak se-? [Student] kam marrë si të bëni më të madhe se sa dhe më pak se pjesë. Unë thjesht nuk ishte i sigurt se çfarë të printuar në qoftë se ju të gjeni se ai është më pak se midpoint kashtë ose më e madhe se. Këtu unë mund të shpëtojë atë që I've- [Nate] Po, në qoftë se ju ruani atë që ju keni marrë, dhe ne do të tërheqë atë. Nuk shkojmë. [Student] E kam vënë pikëpyetje për atë që unë nuk e di. [Nate] Kjo duket e madhe. Këtu ne kemi marrë pikëpyetje, sepse ne ende nuk e dimë ajo që ne jemi duke shkuar për të bërë mjaft ende. Çfarë do që ne duam të bëjmë-oops, ne kemi marrë disa formatimin e teksteve të gjithë shokuar mbi ne. Ne do të korrigjuar këto formatimin e teksteve. Nuk shkojmë. Dhe kështu çfarë ne duam të bëjmë, sipas algorithm tonë, nëse ne nuk e gjeni gjilpërë? Thonë se në rast se gjilpërë është më pak se ajo që ne jemi duke kërkuar në. Kevin. Vetëm shikoni në gjysmën e majtë. Drejtë, kështu që ne do të vënë një koment në këtu që thotë se "shikoni në gjysmën e majtë." Dhe nëse gjilpëra është më e madhe se kashtë në midpoint, çfarë ne duam të bëjmë? [Student] Pastaj ju shikoni në gjysmën e duhur. Shikoni në gjysmën e duhur, "shikoni në gjysmën e duhur." Jo shumë i vjetër. Mirë, kështu që në këtë pikë, gjërat janë në kërkim të shumë e mirë. Problemi me kodin e shkruar, si është ajo? [Student] Ju nuk keni endpoints për gjysmave. Drejtë, ne nuk kemi endpoints për gjysmave. Ne gjithashtu jemi të vetëm do të kalojnë nëpër këtë herë. Ne jemi vetëm do të shohim në një midpoint. Ose element është atje, ose ajo nuk është. Në mënyrë për të përfunduar këtë, ne do të duhet të bëjë disa lloj përsëritjeje. Ne kemi nevojë për të mbajtur të përsëritur deri sa të gjejmë se ose elementi është në atje, sepse ne kemi ngushtuar dhe më në fund e gjeti atë, ose ajo nuk është në atje, sepse ne kemi shikuar nëpër të gjitha gjërat e në gjysmave përkatëse të vektorit dhe gjeti se asgjë nuk është në atje. Kurdo që ne kemi marrë këtë përsëritje ndodh, çfarë jemi duke shkuar për të përdorur? [Student] Një lak. Disa lloj lak. Po. [Student] A mund të bëjmë një lak për ta bërë kohë dhe e kanë atë të bëjë atë dhe pastaj duke gjilpëra jo nuk barabarta Jam i sigurt se ku isha duke shkuar me këtë. Por lloj si të bëjë që për aq kohë sa ajo nuk e bën të barabartë vlera që input të përdoruesit. Yeah, kështu që le të shohim, se si mund të shkruaj kjo veten? Ju tha se le të përdorin një lak për ta bërë kohë. Ku ka të bëjë fillimin? [Student] Menjëherë pas madhësisë / 2. [Nate] Mirë, dhe çfarë do të shkojmë për të bërë? Ne do të plotësojë në kohë më vonë. Çfarë do të bëjmë ne? [Student] A nuk duam të bëjmë të gjitha stuff kemi në pjesën nëse? [Nate] A të gjitha stuff këtë, e madhe. Copy dhe paste. Oh, njeri. Le të shohim nëse kjo punon, në qoftë se ne mund tab mbi këtë. Bukur. Mirë, dhe ne të shpëtuar këtë mënyrë ju djema keni atë. Të gjithë të drejtë, dhe ne jemi duke shkuar për të bërë këtë, ndërsa- çfarë ishte gjendja, ndërsa ju keni qenë pas? [Student] Ndërsa gjilpëra nuk të barabartë, kështu që si pikë thirrje. Por unë nuk jam i sigurt saktësisht se çka është ende. [Nate] Yeah, kjo është një mënyrë për të bërë atë. Sam, a keni një koment? [Sam] m'u kujtua kur kam shikuar në video, Kam marrë një screenshot të një prej-si kur ne e bëmë pseudokod për të, ka pasur disa marrëdhënie mes max dhe min. Unë mendoj se kjo ishte diçka si në qoftë se max është gjithnjë e më pak se min. Marrë atë. [Sam] Apo si në qoftë se max është jo më pak se min ose diçka të tillë, sepse kjo do të thotë se ju keni kontrolluar gjithçka. Po, kështu që çfarë e bën atë të tingëllojë si max dhe min ishin duke iu referuar? [] Sam vlerat që-integers që do të ndryshojë relative ku ne kemi vënë midpoint. Saktësisht. [Sam] Në këtë pikë, ajo do të [padëgjueshme] llogaritur max dhe min. Midpoint është kjo ide max dhe min. Bën që të ketë kuptim për folks? Nëse ne do të fillojmë të shikojmë se si ne jemi duke shkuar për të bërë këtë përsëritje, ju jeni krejtësisht e drejtë që ne duam të përdorin disa lloj të do-ndërsa lak. Por unë mendoj se në qoftë se ne kujtojmë se çfarë po ndodh në vend të kësaj grup dhe çfarë është në të vërtetë ndodh-Jam duke shkuar për të shkruar mbi këtu- në përsëritje e parë të kërkimit binar, kemi- Unë jam duke shkuar për të përdorur B dhe E për të treguar fillim. Dhe pastaj fundi i array tonë. Ne e dimë se fillimi është në 4 djathtë gjatë këtu, dhe ne e dimë se është në fund 108. Thonë se ne jemi në kërkim për numrin 15. Hera e parë që ne bëjmë këtë, siç e pamë më herët, midpoint është ose do të jetë 16 ose 23 varësisht se si ne të llogaritur gjërat jashtë. Që në mënyrë të barabartë e ndarë në mes do të na japin këtë hapësirë mes 16 dhe 23, ne nuk mund ta ndajë atë në mënyrë të barabartë ose ndajnë dhe për të marrë atë në një midpoint e vërtetë. Ne do të shikojmë në 16. Ne do të kuptojë "Hej, 16> 15 që ne jemi duke kërkuar për të." Për të pastaj të shohim në gjysmën e majtë të array ajo që ne do të përfundojë duke bërë është discarding kjo pjesë e tërë e sipërme dhe duke thënë: "Mirë, tani endpoint ynë do të jetë këtu". Përsëritje e ardhshme e lak tonë, ne jemi tani në kërkim në këtë grup, në mënyrë efektive duke hedhur poshtë këtë pjesë, sepse tani në qoftë se ne jemi duke marrë midpoint të jetë diferenca midis fillimit dhe fundit, ne gjejmë midpoint ynë të jetë 8, të cilat ne pastaj mund të provoni 8 për të parë se ku është në lidhje me numrin Ne jemi në kërkim për të, 15, të gjeni se 15 është më e madhe, kështu që ne duhet të lëvizin në pjesën e djathtë të listës, të cilat ne e dimë, sepse ne jemi njerëz, dhe ne mund të shohim atë. Ne e dimë se pjesa e drejta do të jetë ku ne të gjeni atë, por kompjuteri nuk e di se, kështu që ajo që ne do të bëjmë është që ne do të të vërtetë kanë këtë të shkojnë lart, dhe tani fillimi dhe fundi janë të njëjtin vend, në mënyrë që midpoint bëhet numri i vetëm në listë në atë pikë, që është 15, dhe ne kemi gjetur atë. Bën që të hedhin dritë mbi ku kjo max tërësi dhe simbol min po shkon, mbajtja e endpoints e vektorit në mënyrë që të kuptoj se si për të ngushtuar gjëra poshtë? Çfarë do të ndodhte nëse kjo nuk ishte e barabartë me 15 tani? Çfarë ndodh nëse ne kemi qenë duke kërkuar për 15 dhe, në vend, ky numër ishin edhe 16? Ne do të thonë, "Oh, kjo është më e madhe. Ne duam të kthehemi në të majtë. " Dhe ne do të lëvizë e tona në të djathtë, në të cilën pikë ne kemi një endpoint që do të jetë konfliktuale. Kjo nuk do të jetë në gjendje për të kërkuar për çdo elementet më shumë sepse tani ne kemi endpoint tonë dhe pika jonë fillestar, max min tonë dhe tonë, tani janë kthyer. Ne kërko nëpër rrjet të tërë. Ne nuk mund të gjejnë asgjë. Kjo është pika në të cilën ne do të duan të thonë: "Mirë, ne jemi duke shkuar për të ndaluar këtë algorithm. Ne nuk kemi gjetur asgjë. Ne e dimë se nuk është këtu. " Si është kjo shkon? [Student] Si e bën pikërisht kompjuteri kaloni në fund? Si funksionon në fund përfundojnë para fillimit? Fundi përfundon deri para fillimit për shkak të math që ne do të bëjmë çdo herë kemi bërë këtë. Mënyra se si swap është në qoftë se ju shikoni në kohën e parë të bëjmë këtë shkëmbim ku ne kemi në fillimin dhe fundin 4 të gjithë rrugën poshtë në 108 dhe midpoint tonë, të themi, në 16 - Unë jam duke shkuar për të rivendosur këtë përsëri në 15-nëse ne jemi duke kërkuar për 15, ne e dinim se ajo që ne e bëmë kur ne kontrolluar 16 dhe pashë se ajo ishte më e madhe dhe donte të hidhni pjesën e djathtë të gjithë listën, ne pamë se ajo që kemi dashur të bëni është të lëvizë këtë e drejtë këtu. Efektivisht, E u zhvendos në një para midpoint. Gjithashtu, kur ne e bëmë këtë përsëritje të algorithm dhe midpoint ishte në 8, ne kemi gjetur se 8 <15, kështu që ne të kërkuar për të lëvizur b një midpoint e kaluara. Tani, fillimi dhe mbarimi janë të dyja së bashku në këtë 15. Nëse ne do të ndodhur që të shikoni për disa vlera të tjera, jo 15, ose në qoftë se kjo ishte 15 në vend të një 16, ne do të kemi gjetur se e duam për të lëvizur një para midpoint. Tani e ka kthyer do të jetë më pak se b. Le të ecin nëpër se si ne fakt deri në fund coding këtë algoritëm. Ne e dimë se ne duam të kemi këtë llogaritje midpoint. Ne e dimë gjithashtu se ne duam për të ndjekur fillimin dhe fundin e array e grup tonë të tanishëm kështu që ne mund të kuptoj se ku kjo gjysma e majtë të listës është dhe ku gjysma e djathtë të listës është. Ne bëjmë që me as të fillojë dhe të përfundojë, ose ne mund të telefononi ata min dhe max. Unë do të përdorin të fillojë dhe do të përfundojë këtë kohë. Kur ne fillojmë, nëse ne shikojmë prapa në shembullin tonë këtu poshtë, Fillimi tonë ishte vendosur në fillim të array, si e natyrshme. Çfarë indeksi ishte kjo? Çfarë duhet të fillojë tonë? Daniel. [Daniel] Kashtë [0]. [Nate] Yeah, kështu që ne mund të krijojë atë barabartë me kashtë [0]. Problemi, megjithatë, është se kjo i jep të mos na pozicionin e elementit të parë. Kjo na jep indeksin e elementit të parë ose vlera aktuale në atë vendin e parë. [Student] Kjo do të konvertohet në 0,20? [Nate] Çfarë kjo do të bëni është të-mirë, ajo nuk do të bëjë ndonjë konvertimin. Se çfarë do të bëjë është se do të ruajë një 4 në fillojë, dhe pastaj ajo do të jetë e vështirë për të bërë krahasime ndaj fillojë sepse Begin do të mbajë vlerën e 4, e cila është fillimi i array tonë, por ne duam të ndjekur indekset në rrjet në krahasim me vlerat. Ne do të përdorni të vërtetë një 0, si kjo. Për fund të array-Charlotte sjellë këtë deri pak më parë. Kjo është ajo ku ne do të marrin parasysh indeksimin zero. Charlotte, çfarë është fundi i array? Cili është indeksi i fund? [Charlotte] Size - 1. Yeah, dhe të cilat madhësia duhet të përdorni? Ne duhet të përdorim madhësinë e kapitalit apo madhësinë vogle? Madhësia e kapitalit. Në këtë rast, ne mund të përdorim madhësinë e kapitalit. Nëse ne dëshirojmë ky funksion të jetë i lëvizshëm dhe të përdorni këtë funksion në programe të tjera, ne mund të përdorni të vërtetë madhësinë vogle. Kjo është në rregull shumë. Por Charlotte është krejtësisht e drejtë që ne duam të kemi madhësinë - 1. Në këtë pikë- [Student] Si është e mundur që ju mund të përdorni madhësinë uppercase? Si është e mundur që ne të mund të përdorin madhësinë uppercase? Ajo rezulton se këto janë me të vërtetë përcakton #, nën kapuç, një tekst si të gjeni dhe të zëvendësojë, në qoftë se ka kuptim. Kur ju përpilojnë kodin tuaj, faza preprocessing e përpiluesit shkon përmes dosjes, dhe kjo duket për kudo që ju keni shkruar madhësinë e kapitalit, dhe ajo zëvendëson atë tekstin fjalë për fjalë me një 8, ashtu si kjo. Në këtë kuptim, kjo është shumë e ndryshme nga një ndryshore. Ajo nuk ka marrë ndonjë hapësirë ​​në memorie. Kjo është një e thjeshtë zëvendësojë tekst mashtrim. Në këtë rast, ne jemi duke shkuar për të përdorur madhësinë. Nga këtu ne nuk duam të bëjmë një lloj përsëritjeje, dhe ne jemi në rrugën e duhur me ta bërë, ndërsa loop tonë. Ne duam të bëjmë diçka deri në një gjendje nuk mban më, dhe siç e pamë më parë, pamë se ky kusht ishte me të vërtetë që ne nuk duam fundin të jetë më pak se të fillojë. Kjo është gjendja jonë ndalur. Nëse kjo ndodh, ne duam të ndaluar dhe të deklarojë si, "Hej, ne nuk kemi gjetur asgjë." Për të shprehur këtë, ne do të duan të përdorin disa lloj lak. Në këtë rast, do të jetë një për ta bërë, ndërsa loop, një për lak, një lak, ndërsa? Ne kemi një lak për ta bërë, ndërsa këtu. A ju djema si ajo qasje? A mendoni se ne duhet të provoni një qasje të ndryshme? Kevin, ndonjë mendime? Ne mund të kemi një lak, ndërsa sepse ne e dimë më së shumti do të jetë më e madhe se sa min në anyways fillimit. Po, kështu që nuk ka initialization që duhet të ndodhë. Ato do-ndërsa sythe janë të mëdha kur ju duhet të nisja diçka para se atëherë testimi, ndërsa këtu ne e dimë se ne nuk jemi duke shkuar për të mbajtur të dy reinitializing fillojë dhe të përfundojë çdo raund i lak. Ne e dimë se ne duam të nisja e tyre, atëherë kontrolloni gjendjen tonë. Në këtë rast, unë do të të vërtetë të shkojnë me një lak, ndërsa të thjeshtë. Ajo rezulton se për ta bërë ndërsa sythe janë përdorur mjaft rrallë. Shumë vende nuk e mësojnë edhe duke sythe. Ata janë të mirë për trajtimin e input të përdoruesit, kështu që ne kemi parë një shumë prej tyre deri tani. Por normale për dhe, ndërsa sythe janë shumë më të zakonshme. Ajo rezulton se ky kusht shkruar si nuk do të bëni me të vërtetë na shumë mirë, dhe pse është kjo? Më vjen keq, unë nuk e di emrin tuaj. Unë jam Jerry. >> Na vjen keq? Ajo është B-O-R-U-I. Oh, në rregull. Unë nuk shoh se jeni në listën time. Oh, kjo është për shkak se, oh, që e bën kuptim. A keni një ide se pse kjo lak, ndërsa nuk mund të punojnë si qëllim, shkruar me kusht? [Jerry] Ju do të thotë si ju dëshironi të gjitha stuff pas saj në të-? Yeah, kështu që është një. Ne mund të keni për të vënë të gjithë këtë gjëra në lak, ndërsa, e cila është krejtësisht e vërtetë. Gjë tjetër që është pak më problematike, megjithatë, është se ky kusht nuk funksionon. [Student] Ju duhet të shfletoj atë. Drejtë, kështu që ky kusht nuk do të jetë kurrë e vërtetë fillimisht mënyrë kemi biseduar për këtë. Ne duam të bëjmë diçka deri > Plus fillojë? [Student] Në fund. Për shkak se ajo është llogaritur vetëm gjysmën gjatësinë. Ju duhet të shtoni të fillojë. [Nate] Çfarë kjo do llogaritur për ne? Nëse ne mendojmë për fund në këtë përsëritje e parë të loop, fund do të jetë në pozitë indeksin 7. Filloni është në pozitë 0. Mos harroni, ne jemi duke kërkuar për ose Pozicioni 3 ose 4 pozita. Nëse ne shikojmë në këtë matematikë, vetëm për të bërë atë një pak më të prekshme, vënë disa numra këtu, ne kemi 7, 0, kështu 7 - 0, dhe pastaj / 2 është 3 në ndarjen integer, që është. Atëherë nuk kemi nevojë për të kthyer pastaj shtoni tonë të fillojë? Ne nuk bëjmë në këtë rast. Në përsëritje të parë, ajo do të jetë mirë për shkak të filluar është 0. Por si ne progres, ne bëjmë të vërtetë të gjithë duhet vetëm fund - fillojnë / 2. Ka një mashtrim tjetër këtu, dhe kjo është pikërisht një nga përparësisë. [Student] A kemi nevojë kllapa? [Nate] Pikërisht, dhe kjo është për shkak se nëse ne nuk do të vënë këto kllapa, atëherë kjo linjë do të interpretohet në vend si (fund) - (fillojnë / 2), e cila ne definitivisht nuk duam. Watch për ato rregulla përparësi. [Student] Pse nuk është ajo të përfundojë + fillojë? Pse nuk është ajo të përfundojë + fillojë? [Student] Pse nuk është ajo që? Pse do të jetë ai +? Unë mendoj se ju jeni të drejtë. [Student] Sepse kjo është mesatarja? [Nate] End + fillojë, ju jeni plotësisht të drejtë. Wow, unë plotësisht goofed. Ju jeni të drejtë. Në qoftë se ne ishim duke bërë Minus, ne do të duan për të shtuar fillojë përsëri in Në këtë rast, ju jeni shumë e drejtë që ne duam të marrë mesataren e të dyjave, kështu që ne duam të shtoni ato, në krahasim me ato të zbres. [Student] Kjo gjithashtu do të punojë në qoftë se ju e bëri në fund - të fillojnë / 2 + fillojë. Ajo do të qoftë se ne bëjmë, unë besoj kështu. Për shembull, në qoftë se ne kemi qenë në kërkim në të fillojnë, dhe ne u zhvendos atë mbi këtu në 15. Tani fillojnë është në pozitën 2. Fundi është në pozitën e 7. Nëse ne zbresim atyre, ne kemi marrë 5. Ndani që nga 2, ne kemi marrë 2. Dhe atëherë ne shtoni 2 përsëri në, dhe që na merr në pozitën e 4, cila është e drejtë këtu, e cila është midpoint. [Student] A kemi nevojë për të marrë kujdesin e mbështjellës? Në atë kuptim nuk kemi nevojë për të marrë kujdesin e dhënë? Nëse shuma apo diferenca midis në varësi se si të bëjmë atë nuk është një numër edhe më. Pastaj kompjuteri merr hutuar nëse kur kjo është 2,5; ju lëvizin në të majtë ose në të djathtë për të përcaktuar se cila është midpoint? Marrë atë. Ajo rezulton se me ndarjen numër i plotë, Ne kurrë nuk të marrë këto numra decimal. Ne kurrë nuk merrni decimal. Është hedhur poshtë tërësisht. Nëse ju keni një kompjuter të ndajë dy variablave int, dhe një është 7, dhe tjetra është 2, ju nuk do të merrni 3,5 si rezultat. Ajo do të marrë 3. Pjesa tjetër do të hidhet, kështu që është efektive arrestimi- jo një raund, por më tepër një kat, në qoftë se ju djema jeni të njohur me atë që në matematikë, ku jeni plotësisht hidhni decimal, dhe kështu ju jeni në thelb truncating atë poshtë për të afërt Pozita e tërë, të numrit të plotë më të afërt. [Student] Por atëherë kjo është problematike për shkak se në qoftë se ju keni një koleksion të elementeve 7 pastaj që automatikisht merr elementin 3 nga midpoint në vend të 4. Si mund të merren me këtë? Është problematike, sepse nëse do të kishim një grup të 7, ajo do të marr 3 në vend të 4. A mund ta shpjegoni pak më shumë? [Student] Sepse në qoftë se ju keni 7 elemente pas elementi 4 do të të midpoint, e drejtë? Remember komentin tuaj për të qenë zero indeksuar, pse. [Student] Yeah, kështu që në pozicionin 3. Kjo do të jetë midpoint. Po. Oh, në rregull. Unë shoh atë që ju thotë. Kjo është lloj i pazakontë, si ne të merrni përdorur për këtë nocion të tërë marrjen e shpëtoj decimale. Kjo është një pikë e madhe. Le të mbarojnë këtë ide. Ne kemi llogaritur midpoint tonë. Ne jemi duke testuar për të parë nëse gjilpëra jonë është e barabartë me vlerën e mesme. Ne jemi shtypjen se kemi gjetur atë, por me të vërtetë, çfarë ne duam të bëjmë në këtë situatë? Ne kemi gjetur atë, kështu që ne duam të le telefonuesi e di se kemi gjetur atë. Ne kemi marrë një funksion që është një funksion Boolean shtypen. Mënyra se si sinjal për thirrësit e funksionit tonë se ne jemi gati për të shkuar po ne themi, "Hej, kjo është e vërtetë." Si do të bëjmë këtë, Kevin? Ju jeni nodding kokën tuaj. >> [Kevin] Shto kthimi vërtetë. [Nate] Pikërisht, kthim i vërtetë. Tani, në qoftë se ajo nuk është e barabartë, si do të shohim në gjysmën e majtë? Ndonjë ide? Stella, ndonjë ide? Ju duhet për të vendosur një pozicion të ri për fund. Po. Pra, ne duhet të bëjmë pozicionin e mesit - fund. Madhe. Ne kemi nevojë për të vendosur një pozicion të ri për fund për të parë në gjysmën e majtë. Kjo ishte ajo që ne biseduam për para, ku Unë do të mbajë përsëri në këtë shembull. Unë kam filluar këtu, dhe pastaj unë kam në fund të gjithë rrugën mbi këtu. Përsëri, në qoftë se ne jemi duke kërkuar për 15, dhe midpoint ynë është në 16, dhe ne kemi realizuar ", Oops, 16 është më e madhe. Ne duam të shkojë në gjysmën e majtë. " Ne atëherë do të lëvizë në fund në 15, dhe ne bëjmë këtë duke marrë një larg nga midpoint dhe vendosjen se si në fund tonë të ri. Gjithashtu, në qoftë se ne duam të shikojmë në gjysmën e duhur, si do ta bëjmë këtë? A keni një ide? [Student] Ju vetëm të vendosur të fillojnë të midpoint + 1. [Nate] Madhe. Dhe tani në rast se ne nuk gjejmë asgjë, bën që të merrni mjekuar për ne? Daniel, bën që të merrni marrë kujdesin e për ne? [Daniel] Nr [Nate] Nëse kemi bërë atë nëpër rrjet të tërë dhe nuk gjejmë asgjë, ku do që të marrë kujdesin e, ose ne duhet të kujdeset për atë? [Daniel] Kushti ndërkohë. [Nate] Yeah, ndërsa kushti, pikërisht. Ajo do të kujdeset për të shkuar nëpër rrjet të tërë, nëse nuk gjejmë asgjë. Kjo lak, ndërsa do të përfundojë. Ne kurrë nuk do të keni hasur këtë kusht, dhe ne mund të kthehen rreme. Ne gjithashtu mund të largohet këtë nëse këtu si kjo sepse nëse kjo deklaratë në qoftë se është e vërtetë, dhe funksioni ynë do të kthehet, dhe kështu që ne do të ndërpresin shtatzëninë në thelb ky funksion në këtë pikë kur ne kthim i vërtetë. Por çfarë ndodh me këtë strukturë këtu? Do të këtë punë tërësisht, apo ka disa krisje logjike në atje? Ka disa metë logjike në atje, me mënyrën se si ajo është e ngritur. Çfarë mund të jetë ai? [Student] Pse keni nevojë - dhe + 1s? Që përcakton koleksion tonë deri në jetë gjysma tonë të ri majtë dhe të djathtë gjysmë. [Student] Por pse nuk mund ta bëjë atë pa - 1s dhe + 1s? [Nate] Ne mund të krijojë atë barabartë me midpoint? Çfarë mund të jetë problematike në lidhje me këtë? [Student] Unë mendoj se është joefikas, sepse ju jeni kontrolluar një vlerë që është tashmë janë kontrolluar. [Nate] Pikërisht, kështu Sam është krejtësisht e drejtë. Nëse keni vendosur në fund dhe të fillojnë të barabartë me midpoint në vend të - 1 + 1 dhe mendueshëm, në disa pika në të ardhmen ne do të përfundojë deri kontrolluar midpoint përsëri. [Student] Unë filluar pset, dhe pastaj kam pasur diçka të tillë ku kam harruar + 1, dhe mori mbërthyer në një lak pafund. Drejtë, sepse në disa pika ju nuk jeni do të merrni filluar dhe do të përfundojë të vërtetë përputhen. Cool. Ka një krisje më e logjikshme, dhe që është se kjo duhet të jetë patjetër një tjetër në qoftë se. Pse mund që të jetë? Arsyeja është në qoftë se ajo nuk është një tjetër nëse-keni parë atë, Kevin? [Kevin] Yeah, sepse ju jeni duke ndryshuar pikën fund. [Nate] Pikërisht. Ne jemi duke ndryshuar endpoint, dhe në qoftë se është e shkruar si ky-we'll bërë hapësira mes- ajo do të kontrollojë këtë rast. Në këtë rast, në qoftë se ajo pason, do të përfundojë jashtë funksionit. Atëherë ajo do të kontrollojë këtë rastin tjetër, dhe nëse kjo ka sukses, ajo do të rregullojë endpoint, dhe pastaj ajo do të vazhdojë më dhe shikoni këtë rast. Por në këtë pikë, ne nuk duam që ajo të vazhdojë të kontrolluar. Për fat të mirë, ne nuk kemi rivendosur midpoint këtu, dhe ne e dimë se ky rast nuk do të ketë sukses. Por ne patjetër duan të vënë tjetër në qoftë se në atje edhe pse se mund-në këtë rast pasi ne nuk jemi përshtatur midpoint, do që të bëjë një ndryshim? Jo, sepse këto raste janë të gjitha të veçantë. Përsëri, my bad. Ne nuk e bëjnë, unë mendoj se, duhet të këtë tjetër në qoftë se. Ne mund t'i jepte një provoni dhe të drejtuar atë dhe të shohim se çfarë ndodh. Ndërtimi, është hasur një gabim. Kjo është ndoshta për shkak se kam lënë këto b-së dhe të e në këtu. A keni ndonjë më shumë nga ato deri në krye? Ajo nuk duket si ajo. Ne zoom jashtë, të ndërtuar, atje ajo shkon, kështu që tani në qoftë se ne të kërkuar për 15, po. Më lejoni të zoom in 15, po. Ne mund të kandidojë atë përsëri. Ngarkimi kodin burim, ndërtimin, running. Ne mund të kërkoni për diçka si 13, dhe ne nuk do të marrë asgjë shtypje jashtë, kështu që nuk është gjetur se për ne. Kjo është e madhe, sepse ajo nuk është në listën tonë. Ne jemi tani jashtë kohe. Kjo do të jetë ajo për këtë javë. Faleminderit për t'u bashkuar, dhe të shohim me vone. [CS50.TV]