JASON Hirschhorn: Welcome do tří týdnů, všichni. Máme plné ruce práce, ale vzrušující část před námi. Takže první, protože jsme udělali některé Angličtina s kurzem, ale stále mají hodně učení zbývá udělat, jsem ukážu vy nějaké zdroje , která by měla ukázat, že je neuvěřitelně užitečné, protože vám nejen přiblížit svůj problém sady, ale také strávit všechny Materiál jsme vám kluci v přednášky a šortky a část. Pak budeme trávit první 20 do 25 minut po část děje přes GDB, které může nebo nemusí mít použitý v tomto místě, ale je to neuvěřitelně užitečný nástroj, který bude pomůže ladění programů. Mnoho z vás mohl použít printf v uprostřed svého programu přijít co proměnnou rovnal. GDB je ještě lepší než printf a není šroub svůj kód, protože ti spustit na spustitelný soubor. Tak půjdeme přes 10 nejvíce užitečné příkazy, které potřebujete pro GDB, a my jsme jít na cvičení společně, aby v problému nastavit tři a mimo ni, můžete GDB lze používat k ladění pomoc vaše programy. A konečně, budeme jít přes některé třídění a vyhledávání algoritmy které jste viděli v přednášce, a my jsme bude vlastně kód, a to nejen pseudokódu, ale kód binární vyhledávání, bublina třídění a výběr třídit. Tak za prvé, já chci jít nad zdroji. Jedná se o rozsáhlý seznam, a je to menší písmo, protože jsem měl hodně vejde na zde. Ale to vám pomůže nejen, znovu, s problémovými sad a trávení informace, které jste se naučili, ale určitě, no kvíz čas, budou tyto být nesmírně užitečná. Takže nejprve konstatuje, přednáška. Pokud půjdete do cs50.net/lectures a přejděte na konkrétní týden a den, uvidíte, že tam jsou poznámky pro každý přednáška, která není jen Přepis, ale Upravená verze co byla pokryta v přednášce s kódem úryvky a další užitečné kousky. Vřele doporučuji jít přes ty. A pak také, že je zdrojový kód k dispozici od každé přednášce. A opět, bude také tato skluzavky k dispozici on-line na cs50.net/sections dnes večer. Takže druhá jsou šortky každý týden, že Kryt témat, obvykle 5 až 15 minut na délku. A ti, doufejme, že se vám velký nátěr na různá témata. Třetí - a to je zbrusu nový tato rok - je study.cs50.net. Pokud jste si to ověřil, jsem Důrazně doporučujeme, aby si to. Můžete si vybrat téma. Máme desítky témat tam. Tak například, si vyberete funkcí. To vám dává nějaké diapozitivy a bere na vědomí, na funkcích. Ti, kteří jsou ve skutečnosti diapozitivy, že TFS se doporučuje používat při naší prezentace v oddíle. K dispozici je také tipy a triky pro práci s funkcemi, a tam je Problémy praxe, které pomáhají budete pracovat s funkcemi. Také vám odkazy na krátký na funkce a časy, které funguje přišli v přednášce. Takže study.cs50.net, zbrusu nový tato rok, fantastický zdroj. Dále mám muže, který je manuální příkaz, který můžete spustit na příkazového řádku. Takže pokud máte jakékoliv dotazy týkající se příkaz, například, Rand, které se setkal minulý týden v oddíle a vy jste pravděpodobně narazili na váš problém nastavit, když prochází generování kódu, ale pokud jste typ muže rand, dostanete na stránku, která vám řekne vše o rand. To vám dává to, co to znamená, Parametry to trvá, stejně jako návrat Druh a stručný popis této funkce. Tak podívejte se rand. To může být trochu rozvláčný a matoucí, takže někdy jsem zjistil, že jednoduše Googling to, co chci vědět, je Nejlepší způsob, jak najít odpověď. Takže cvičit s firmou Google. Získat dobrý Google. To se stane vaším nejlepším přítelem. Stejně jako Google, pokud nemůžete najít na Google, cs50.net/discuss, je to diskusní fórum. Šance jsou, pokud máte nějakou otázku, kdo Vašich 700 + vrstevníky také, že Otázka a může se zeptal to již v diskusi fóra a byly to odpověděl. Takže pokud máte obecný dotaz nebo Máte otázku, na kterou si myslíte, že Možná, že ostatní lidé mohli narazit, podívejte se na cs50.net/discuss. Konečně, poslední dva, pokud chcete mluvit o skutečné lidské bytosti, v kanceláři hodin od pondělí do pátku. K dispozici je také on-line úřední hodiny pro rozšíření studenty. A poslední, ale určitě ne nejméně, me, vykřičník. Ty mají svou kontaktní informace. Pokud budete něco potřebovat, prosím, nikdy neváhejte mě kontaktovat. Vždy, neváhejte tak učinit. Jen velmi málo z vás, kteří mají mě na Gchat, tak, aby bylo zklamáním, ale doufejme, že bude měnit mezi Tento a další část. Jakékoliv dotazy tak daleko na zdroje? Skvělé. A konečně, další konektor pro zpětná vazba, sayat.me/cs50. Můžete mi dát anonymní zpětnou vazbu o tom, jak dělám. To bylo opravdu užitečné minulý týden. Dostal jsem pár komentářů od vás hned po část, a od ostatní studenti, kteří ho sledovali, v průběhu týdne, a to byla nesmírně užitečná. Budu se snažit a omezit svou použití slovo "sladké", ale já vám ukážu můj nadšení a vzrušení jiným způsobem. Ale byly tam další další věcné zpětné vazby, jak plusy a delta. Takže, prosím, dám vy zpětnou vazbu na vašich problémů sad. Neváhejte a dejte mi zpětnou vazbu na mém učení. Jsem tu pro vás. Skvělé. To je vše, co mám na první část. Má někdo nějaké otázky tak daleko? A mám poznámku k řídící středisko. Prodlužovací studenti mě messaged říká, že nedostávají žádný zvuk, ale to je z mé moci opravit. Takže doufejme, že dostane vyřešen krátce. Pokud sledujete on-line, hi, ale můžete mě slyšet. Takže nejprve se budeme projít GDB. GDB, jak jsem naznačil výše, je ladicí nástroj mnohem lepší než printf. Takže, jak začít s GDB, vás, pokud Chcete-li otevřít svůj přístroj a mít soubor, který jsem zasláno e-mailem na vás dříve - tento soubor bude také k dispozici on-line na chvíli - a spusťte GDB. / název souboru. Za prvé, samozřejmě, budete muset kompilovat soubor, protože GDB lze použít pouze na spustitelné soubory. Ale pokud jste někdy chtěli spustit GDB, první věc, kterou uděláte, spuštění GDB. / Caesara. Tak to je název programu jsme jít s ním hned. Takže budu psát, aby Caesara, který bude mi spustitelný soubor zde zvýrazněny zeleně. A pak budu spouštět GDB. / Cesar. A tam jdete. Vidíte, máme nějaký text mi říct, o verzi GDB, dává mi některé informace o záruce a pak jsme mít dotaz HDP, který vypadá trochu ze jako náš příkazového řádku řádku, ale vidíte, že je to otevřené paren, GDB, v blízkosti závorka. Než budeme pokračovat a ladění tento obrázek že jsem poslal k vám všem, pojďme se podívat na některé užitečné příkazy, takže máme pocit, z toho, co se děje na krytí. Tyto příkazy jsou zde uvedeny v Pořadí, ve kterém jsem se obecně používají je. Takže začnu program běží GBD. / Název programu, V tomto případě, Caesar. A pak první věc, kterou udělám 99.9% v době, kdy je typ přestávka na mysli. To stanoví bod zlomu na hlavní. V podstatě, co jste tam dělal je program, se nezastaví na Hlavním takže můžete začít zkoumat ji linku linkou, spíše než běh všech cesta přes. Můžete rozdělit na různých místech ve váš kód, ale hlavní je obecně dobré místo pro start. Další příkaz spustit, je běh. To začíná běh programu, a Pokud potřebujete zadat příkazový řádek argumenty, můžete to spustit tento příkaz. Běh s argumenty. Takže od té doby jsme se jít přes verzi C, což je program, vy psal pro pset dva - tenhle, samozřejmě, má nějaké chyby v tom, že snad najdeme - budeme běžet běžet s nějakým příkazem argumenty jsou proto Caesar, jak vy víte, na problému nastavit spec, má některé argumenty příkazového řádku. Další pár příkazů, další kdo je vlastně volal další. Ten, kdo se vám řádek po řádku prostřednictvím svého programu. Takže bít n a stiskněte klávesu Enter vám vezme na další řádek, provádění předchozí řádek. Krok vás zavede nejen na další řádek, ale se vám uvnitř funkce. Takže pokud jste napsali funkci Váš kód, nebo pokud si budete chtít prohlédnout na i, například, můžete hit s, a spíše než jít na další řádek soubor, který se chystáte přes pravé teď, budete skutečně krok do tato funkce a vidět jeho kód. Seznam ukazuje, ve velmi uživatelsky přívětivý formát, se 10 nebo tak linky kolem kde se právě nacházíte v kódu takže se můžete skutečně vidět soubor spíše než byste museli vyměnit zpět a přepínat mezi různými zobrazeními. Tisk je jako printf, jak jeho název napovídá. To vám ukáže, co proměnná rovná. Informace o místní je opravdu užitečné. Toto je speciální verze tisku. Informace o místní obyvatelé vám ukáže všechny místní proměnné, vytiskne všechny pro vás které jsou v současné době k dispozici. Takže obecně, spíše než na vytisknout čtyři proměnné, které jsem zvědavý, jestli jsem v cyklu for, pro Například jsem jen napsat info místní obyvatele, a to se mě, co mi počítadlo Ukážu rovná, stejně jako pole, že jsem pracovat na sobě rovnými. A konečně, i nadále. Zadáním přestávku vám zastaví v bodu zlomu. Můžete projít lince linka s další a krok. Pokračovat spustí program pro váš další bod zlomu nebo do dokončení v případě, nejsou žádné další přestávka bodů. Zakázat odstraní body přerušení, pokud vám rozhodl přestávka na hlavní bylo nevhodné, kterou chcete nastavte ji někde jinde. A konečně q, přestat, dostane z GDB. Takže tento program,. / Caesar, budeme prohlédnout právě teď a my se chystáte použít GDB najít chyby v tomto programu. Běžel jsem tento program dříve se Zkontrolujte, zda 50, a mám jeden zamračený pohled. Všechno to existovalo, je sestaven, je prošel mnoho zkoušek, ale nějaký důvod, že neprošel pětinu test, soustružení BARFOO, všechny čepice, do E-D-U-I-R-R, všechny čepice, používat tři jako klíč. Mám docela blízko. Vystoupil jsem jedním písmenem. Takže tam je nějaká malá chyba tady. Díval jsem se přes můj kód. Nemohl jsem na to přijít. Doufejme, že vy mi může pomoci zjistit, co tato chyba je. Tak to je chyba, že jsme vyhledávání. Pojďme do GDB. Opět jsem běžet GDB. / Caesar, takže teď jsme v GDB. A co je první co mám dělat? Právě jsem vstoupil GDB. Někdo mi dát dobrý příkaz zadat. STUDENT: Přestávka hlavní. JASON Hirschhorn: Přestávka hlavní. Fantastic. Pojďme typ, který palců Vy můžete sledovat tady nebo sledovat s sebou na svých počítačích. Přestávka hlavní, a uvidíte, bod zlomu byl nastaven na - to mi dává nějaký divný adresu v paměti, a to mi také dává číslo řádku. Kdybych se ohlédnout na tomto souboru, Já bych si uvědomit, že hlavním stalo na řádku 21. Co bych měl běžet dál? Je můj program běží? Ne. Takže to, co bych měl běžet dál? STUDENT: Spustit. JASON Hirschhorn: Spustit. Měl bych jen spustit běh, nebo by I přidat nějaké další věci? STUDENT: Běh s argumentem. JASON Hirschhorn: Běh s příkaz argumenty. A protože jsem ladění velmi specifické případ, mám zadat, že argument řádek příkaz. Tak jsem si to spustit tři, což je, opět, Výstup jsem dostal od Odjezd 50. Spuštění programu. Jdeme přes několik řádků. Nyní budete vidět, že jsme na řádku 21. Jak mám vědět, že jsme na řádku 21? Protože když se podíváte na levé straně okna mého terminálu, tam se říká, že řádek 21. A to mi dává, ve skutečnosti, kód, který je na řádku 21. Tak jsem misspoke dříve. Hlavní je to vlastně na řádku 21. Hlavní je pár řádků nad 21 let. Ale na řádku 21, který je kde jsme lámání. Tento řádek kódu má ještě není proveden. To je důležité. Linka vidíte nemá byl proveden ještě. To je další řádek kódu se chystáte provést. Takže další řádek, protože vy jste pravděpodobně obeznámeni s, je to kontrolu stavu, zda mám zadali argument příkazového řádku. A aby i to, co je druhý část, která dělá? Co je na i? STUDENT: Změna na celé číslo. JASON Hirschhorn: Je nám líto? STUDENT: Je to mění argument celé číslo. JASON Hirschhorn: Tak se i mění arg v1 z řetězce na celé číslo. A pak to, co je to kontrola? STUDENT: Pokud je druhý Argument příkazového řádku, stranou od spuštění programu. JASON Hirschhorn: A co je Druhá polovina tohoto Kontrola Logický výraz? Tato část sem, aby i? STUDENT: Pokud je to negativní. JASON Hirschhorn: Ujistěte se, co? STUDENT: Ujistěte se, že je, ve skutečnosti, pozitivní. JASON Hirschhorn: Přesně tak. Toto je kontrola, zda je to negativní, a pokud je negativní, jsem mají pocit na další řádek sílu se mi řvát na uživatele. Takže pojďme hit konec k provedení tohoto řádku. Nechceme vidět, že řádek, který vy Možná, že uvidí křičí na uživatel a pak se vracet, protože tento řádek nebylo provedeno. I vstoupil 3. Tak jsem dělal, ve skutečnosti, zadejte dvě příkaz argumenty jsou, a 3 je větší než nula. Takže jsme viděli, že linka, jsme provedli, ale my jsme neměli krokem uvnitř if stavu. Takže teď, příště, vidím, že jsem nastavení int key rovná se i arg v1. Tak to je mi vytvořit proměnnou klíč. Takže pokud jsem vytisknout klíč právě teď, protože , který vám umožní vidět hodnota v proměnné, klíč se rovná 47. To je divné, ale samozřejmě, to proto, že nemám provedeny ještě tento řádek. Takže teď, pokud jsem narazila n, provedení tohoto řádku, a dělat tiskovou klíč, klíč bude rovnat 3, což je to, co očekáváme, že se rovnat. Takže znovu, v GDB, řádek, který vidět dosud provedeny. Musíte se trefit n nebo S nebo číslo dalších příkazů skutečně provedení tohoto řádku. Tisk klíč. Klíčové je na 3. Tak daleko, tak dobrý. String je prostý text. Pojďme spustit tento řádek. Začínám řetězec od uživatele. Pojďme se podívat, v mém Odjezd 50, jsem zadejte BARFOO všechny kryty, takže to je to, co budu zadávat. Kdybych teď vytisknout ve formátu prostého textu. Uvidíte, že se rovná řetězec. To mi dává nějaký jiný podivný šestnáctkové číslo, ale to dělá v Skutečnost, že můj řetězec BARFOO. Pokud bych chtěl vidět, co klíč činil v tento bod, jak bych mohl zjistit klíč? STUDENT: Print klíč. JASON Hirschhorn: Print klíč, přesně tak. A ve skutečnosti, tam je zkratka. Pokud jste unaveni psaní tisk, můžete zadat p. Tak p klíč dělá přesně stejný věc. A opět, vidím, že se rovná 3. Pokud jsem chtěl zjistit, co oba klíče a BARFOO rovnal zároveň ale byl jsem unavený z psaní každého jeden z jednotlivě, I mohl psát info místních obyvatel. To mi dává klíčové rovná 3. Prostý text se rovná BARFOO. To také dává mi tyto dvě podivné věci na vrcholu, je tato proměnná i, a tato proměnná n. Ti, kteří jsou skutečně existující ve svém hlavním programu. Ještě jsme se s nimi setkali ještě, ale jako náhled, ti, existují v mém cyklu for. Takže teď, že se rovnají nějaký divný čísla, protože nebyly inicializován ještě, ale oni ještě existují v paměti, takže jsou to jen nastavit nějaké odpadky hodnotu. Ale my jsme to vidět klíč obyčejný textu právě tam. Tak jdu k provedení tohoto řádku, řádek 34, pro smyčky. Chystáme se skočit do pro smyčce bít n. A my jsme uvnitř smyčky for. Jsme na naší první kontrole. A opět, to by tak nějak vypadat znáte, protože to bylo Caesar program, který byl napsán, ale znovu, má nějaké chyby. A teď když to udělám info místní obyvatele, protože jsem uvnitř, která pro smyčce, uvidíte že i rovná nule, jak jsme očekávali. To je to, co jsme ji nastavit na a inicializován že v cyklu for. n se rovná 6.. To také dává smysl, protože jsme si stanovili je k strlen prostého textu. Tak jsem chtěl dělat info místní obyvatele nebo tisk do proměnné se často, aby se ujistil, že všechno je vždy to, co Očekávám, že se rovnat. V tomto případě, vše je co jsem se očekávat, že se rovnat. Takže začněme pohybující se to pro smyčce. Linka Jsem na je linka 36, ​​pokud je prostý Text i je větší než a prostý text i je menší než nebo rovno Z. Vím, že můj problém není s to můj první dopis, je to s druhým písmenem. Podíváme-li se zpět při příjezdu 50, B jde do E pokuty. Beru na A a na výstupu jako , nemění to D. Takže něco, co je špatného druhý dopis. Takže budu se pohybovat tam ve vteřině. Ale když jsem si chcete zkontrolovat, co prostý Text jsem činil v tomto konkrétním případ, myslím, že by to mělo být, co? Co je třeba prostého textu jsem se rovnají v této První kolo pomocí smyčky for? STUDENT: Zero? JASON Hirschhorn: Prostý text I? Tak to by mělo být hlavním B. Já, samozřejmě, rovná nule, ale holý text držák nula uzavřená závorka rovná B protože řetězce, jak jsme viděli minulý týden, jsou pole, takže dostáváme První znak z toho. Takže ještě jednou, když jsem vytisknout prostý text Já, já, ve skutečnosti se znak B. A to je hezké, že jo? Nemám vlastně mít ve formátu prostého textu I. To není jedna z proměnných I uvedené nebo inicializaci, ale můžete tisknout z celé řady věcí pokud byste chtěli. Ale pojďme projít. Pokud holý text I je větší než A a holý text I je menší než nebo rovno Z, která je samozřejmě pravda, protože máme kapitál B. jdu spustit nějaký příkaz na to. Viděli jsme, že matematika minulý týden, takže budeme brát jako samozřejmost, že to funguje právo podle Kontrola 50. Tyto složené závorky, první ukázal, že jsem se ukončení, pokud stav, druhý ukázal že jsem ukončení cyklu for. A tak teď, když jsem narazila na Next, uvidíme jsme zpátky u cyklu for znovu. Jedeme přes pro znovu smyčky. Pojďme vlastně krok do druhé iterace pro smyčce a typu Informace o místní obyvatelé. Takže jsme ve druhé iteraci naší pro smyčce. Já se rovná 1, které očekáváme. N se rovná 6, který očekáváme. Klíč se rovná 3, které očekáváme. A prostý text, uvidíte, se rovná EARFOO teď, ne BARFOO už proto, že V naší předchozí iteraci, B byl se změnil na kapitálu E. Takže jsme o setkat problém, takže to je místo, kde budeme ponořit do ladění. Ale má někdo nějaké otázky, o tom, co jsme dělali doposud? Fantastic. Takže se chystáme spustit to, zda stav, holý text držák jsem zavřel Držák větší než A a holý text I menší než nebo rovna Z. Ale předtím, než Jdu do toho, protože to je místo, kde Vím, že moje chyba, chci upozornit z prostého textu I. A pojďme dát vytisknout ven. To dělá rovnat znaku A, takže se zdá být tak daleko, všechno je v pořádku. Tak jsem se očekávat, že tento řádek pro mou logiku, tato linka by měla být pravda. Je to velké písmeno. Ale když jsem narazila n, my si uvědomit, že tento linka, ve skutečnosti nebylo provedeno. Seskočil jsem na else if. Proč se to stalo? STUDENT: Protože máte váš stav prostého textu je větší než, není rovno nebo větší než. JASON Hirschhorn: Tak jsem měl prostý text I je větší než A, není větší než nebo rovno. Tak jasně, kapitál ne spustit to, zda podmínka, a my jsme není krok do něj, a my Není to potřebné posun. Tak takhle to je, ve skutečnosti. Jsem přišel na svou chybu. Mohl bych jít zpátky do zdrojového souboru, změnit a aktualizovat ji a spustit znovu zkontrolujte 50. Ale uvidíme, jen pro pedagogika je sake, když jsem dál. Else if neprovede jeden, ale co místo rovná se příkaz které se nemění. Tak to vůbec nezměnila, a když jsem vytisknout prostý text tady, uvidíme děje přes to pro smyčku ne, ve skutečnosti, změnit, že druhý znak vůbec. Je to stále kapitál A. Takže znovu, budeme ladit naše chyba. Uvědomili jsme si, že to tam bylo některé logika chybí. A to ladit se dopředu před skutečného provedení tohoto řádku, ale ty by si všimli, měli jsme jen hit Další a přejdete na jiný, že v případě, to znamená, že v případě, že podmínka Nebyla to pravda. Nechtěli jsme, ve skutečnosti, se výsledek jsme očekávali. Takže bychom mohli být vyzváni, měl jsme nebyli tak chytrý, aby se na , že v případě, stavu a zkontrolovat, zda ve skutečnosti, naše podmínka by měla vyhodnotit na platí v aktuálním kontextu. To je vše pro ladění tohoto programu. Má někdo nějaké otázky? Co příkaz bych mohl zasáhnout přestat GDB? Q. A pak budu vyzván, skončit stejně? Ano, nebo ne. Budu hit ano, a já se přestal GDB. Tak to byl rychlý nátěr na GDB. Ve skutečnosti, v reálném případě, Udělal jsem to v úředních hodinách. GDBed jsem přesně tento program na úřední hodiny se student. A když se vrátíme k příkazům, které jsme viděli předtím, než jsme použili zlomu Main, nejprve věc, kterou jsme udělali. Použili jsme běžet s argumenty příkazového řádku, Druhá věc, kterou jsme udělali. Použili jsme vedle hodně se pohybovat nám prostřednictvím linky. A opět, krátká verze příští n. To je v závorce šedé barvy na snímku. Nepoužili jsme krok, ale my ne nezbytně nutné pro tento případ. Ale my jsme ho mohli použít v trochu později dnes jsme-li ladění, pro příklad, binární vyhledávání, kdy binární hledání se nazývá v samostatné funkce, ale je tu některé chyby s ním. Budeme chtít vstoupit do volání na binární vyhledávání a vlastně ladit. Seznam bychom neměli používat buď proto, že jsme měli dobrý pocit z našeho kódu, ale pokud jsem to chtějí, aby si o tom, co kód I bylo kolem, mohl jsem použít seznam. Vytisknout jsme použili, info místních obyvatel, které jsme použili. Pokračovat jsme nemuseli použít v tomto případ, ani to musíme použít zakázat, ale my jsme použití přestat. Opět platí, že tyto příkazy 10, praxe je. Pokud jste pochopili tyto 10 příkazy, měli byste být nastaven na ladění jakékoliv vydat s GDB. Takže se chystáme jít dál, opět se Jádrem části dnes děje přes Tyto třídění a vyhledávání algoritmy. Než tak učiníme, opět nějaké otázky, připomínky, obav o GDB? Takže se každý bude používat GDB spíše než printf? Takže všichni, pro perpetuita boží, každý je přikyvování hlavou právo teď, tak jsem tě vidět v úředních hodinách a všechny TFS vás a uvidíte, řeknou, ukaž mi, jak používat GDB, a budete se moci jim ukázat, že jo? Druh? Možná, snad. V pohodě. Takže budeme pohybovat do třídění a vyhledávání. Uvidíte Mám seznam již řazeno pro nás, ale to nebude že tomu tak vždy. Takže problém nastavit specifikaci pro problém nastavit tři, máte šortky které můžete sledovat, a to vlastně zeptá se dívat na ty šortky. Také v přednášce minulý týden, jsme šli přes Mnoho z těchto algoritmů, takže jsem nebude trávit čas ve třídě děje nad těmito algoritmy znovu nebo výkresu fotografie pro jak tyto algoritmy pracují. Opět platí, že informace, můžete re-watch přednáška, nebo že informace je zachycen výjimečně na kraťasy pro tato vyhledávání, všechny které jsou k dispozici na cs50.net. Takže místo toho, co budeme udělat, je napsat tyto programy. Máme pocit, mentální model, jak pracují, a tak to, co budeme udělat, je kód je doopravdy. Chystáme se obrátit, že mentální model že obraz, chcete-li, do skutečný kód. A pokud jste trochu zmatený nebo mlhavé na mentální modelu, jsem úplně pochopit. Nejsme ve skutečnosti bude skok na kód rovince. Takže, když to výzva v tomto snímku se ptá jste na kód binární vyhledávání, a ve skutečnosti, iterativní verze binární vyhledávání, první věc, kterou jsem Opravdu chci, abys je napsat nějaký pseudokódu. Takže máte tuto mentální model, jak binární hledání práce. Vezměte si list papíru, pokud máte jeden snadno dostupné, nebo otevřít textový editor, a já bych všichni psát. Potom se provedou čtyři minuty napsat pseudokódu pro binární vyhledávání. Opět, myslím, že o tom, že mentální model. Přijdu kolem, pokud máte dotazy a můžeme nakreslit obrázek ven. Ale nejdřív, než začneme programovat, Chtěl bych napsat pseudokódu pro binární vyhledávání, takže když jsme se ponořit, máme nějaký směr jako tam, kde bychom měli zamířit. STUDENT: Můžeme předpokládat, že pole hodnoty, dostaneme se již řazeno? JASON Hirschhorn: Takže pro binární vyhledávání pracovat - vynikající otázku - jste vzít v seřazené pole hodnot. Takže předpokládám, že to bude fungovat. Vrátíme se k tomuto snímku. Uvidíte ve fialové funkci prohlášení bool binary_search int hodnota, int hodnoty, int n. To by mělo připadat povědomý, pokud jste již dosažena nebo dostali svůj špinavé ruce s problémem sady. Ale to je vaše funkce prohlášení. Opět platí, že by se nemusíte starat o že moc v tomto okamžiku. Co opravdu chci, abyste udělat, je vzít čtyři minuty do pseudokódu binární vyhledávat, a pak půjdeme na které jako skupina. A přijdu okolo. Pokud máte dotazy, pocit zdarma, zvedněte ruku. Proč jste se další dvě minuty dokončit až v pseudokódu? Vím, že se to může zdát směšné, že budeme trávit tolik času na něco, co ani není skutečně C, ale zejména pro ty více náročné algoritmy a problém sady, že máme přijít na to, začíná v pseudokódu nestará o syntaxi, jen starosti logika, je nesmírně užitečná. A to způsobem, nejste řešení dvou neuvěřitelně složité problémy najednou. Jenom se zaměřením na logiku, a pak se přesunout do syntaxe. OK. Začněme prochází pseudokódu. Napsal jsem tady, binární Hledání pseudokódu. Budeme psát o této radě společně. Nebo budu psát to a dám me, že výzvy potřebuji. Takže může mi někdo dát první řádek pseudokódu si psal pro binární vyhledávání? Ano, Annie? STUDENT: I ​​když délka list je větší než nula. JASON Hirschhorn: I když délka ze seznamu větší než nula. A opět, můžeme vidět některé C-hledá syntaktické věci na zde. Ale většina z toho je v angličtině. Měl někdo nějaké linky dali před tím v jejich pseudo-kódu? STUDENT: Získejte pole na řazeny čísel. JASON Hirschhorn: napsal jsi "se Pole tříděných čísel. "Per deklarace funkce, budeme kolem pole seřazených čísel. STUDENT: [neslyšitelné]. JASON Hirschhorn: Tak budeme mít, že. Ale ano, pokud jsme neměli to, že jsme bude muset vyřešit naší nabídku čísla, protože binární vyhledávání funguje pouze na tříděné pole. Takže zatímco délka seznamu se rovná nule, jsem dám v některých složených závorek aby to vypadalo trochu jako C. Ale zatímco se zdá map na zatímco smyčky, takže v této chvíli smyčka co potřebujeme udělat pro binární vyhledávání? Někdo, kdo mi nedal odpověď, ale zatím, kdo to napsal? STUDENT: Jděte do středu seznamu. JASON Hirschhorn: Tom. Přejít na polovině seznamu. A navazující otázka, co budeme dělat, až budeme na střední seznamu? STUDENT: Do kontrolu, zda, který je počet hledáte. JASON Hirschhorn: Výborný. Jděte doprostřed seznamu a zkontrolujte, pokud naše hodnota je tam - fantastické. Měl někdo něco jiného to bylo něco jiného, ​​než tohle? To je přesně to pravé. První věc, kterou děláme v binárním vyhledávání , je jít do středu seznamu a zkontrolujte, zda je naše hodnota je tam. Takže předpokládám, že pokud naše hodnota je tam, co budeme dělat? STUDENT: Vracíme se k nule [neslyšitelný]. JASON Hirschhorn: Jo, pokud naše hodnota je tam, to jsme zjistili. Takže můžeme říci nějaký způsob, nicméně toto Funkce je definována, řekneme uživateli jsme ho našli. Pokud to tam není, i když, to je kde se to dostane složité. Takže pokud to tam není, někdo jiný, kdo pracoval na binární vyhledávání nebo má představu o tom teď, co budeme dělat? STUDENT: Otázka. JASON Hirschhorn: Ano? STUDENT: Je pole již řazeno? JASON Hirschhorn: Ano, my jsme za předpokladu, že Pole je již řazeno. Žák: Takže pak budete muset zkontrolovat, zda hodnota, kterou vidíte, je větší než hodnota, kterou chcete, můžete přesunout do středu druhé poloviny. JASON Hirschhorn: Takže když střed Seznam je větší než to, co jsme hledáte, pak my, co? Stěhujeme kde? STUDENT: Chcete-li přejít na polovina seznamu s čísla nižší, než je. JASON Hirschhorn: Takže budeme volat, že levá. Takže pokud prostřední je větší, můžeme hledat levé polovině seznamu. A pak hledání, co mám na mysli vyhledávání? STUDENT: [neslyšitelné]. JASON Hirschhorn: Jdeme do středu. Vlastně jsme opakovat tuto věc. Jdeme zpátky přes naše smyčce while. Dám vám ten poslední - jinak, v případě, prostřední je menší než to, co děláme, co děláme tady? STUDENT: Jděte doprava. JASON Hirschhorn: Hledat právo. To vypadá dobře, ale někdo cokoliv, co nám může chybět nebo něco jiného, ​​že jste dal v pseudo-kódu? Takže to je to, co máme tak daleko. I když délka seznamu je větší než nula, budeme pokračovat do poloviny seznamu a zkontrolujte, zda naše hodnota je tam. Je-li střední hodnota je vyšší, budeme hledat vlevo, jinak v případě, že střed je méně, budeme hledat právo. Takže jsme všichni měli nějakou znalost termíny, které používáme v informatice a nástroje máme. Ale budete již všimnout, že jsme mluví v angličtině, ale zjistili jsme, Spousta věcí, které se zdálo map na nástroje máme v našem kódování sadě nářadí. Takže hned bat, nejsme bude ještě vlastně kód. Co vidíme zde v angličtině, že mapy na co se můžeme napsat v jazyce C? STUDENT: Zatímco. JASON Hirschhorn: Zatímco. Takže to, když tady Mapy na to, co? STUDENT: while. JASON Hirschhorn: while? Nebo možná, obecněji, smyčka. Chceme udělat něco znovu a znovu. Takže jdeme na kód smyčky. A my už víme, protože jsme udělali to párkrát a my mají spoustu příkladů tam, jak vlastně psát tento index pro smyčce. Tak to by mělo být docela snadné. Měli bychom být schopni se dostat, že začal docela rychle. Co ještě můžeme vidět tady? Jaké další struktury syntaxe, věci že jsme obeznámeni s v C, my Již máte pocit Based off slov jsme použili? Ano, Anna? [Neslyšitelný] jen srandu. Anna, jděte do toho. STUDENT: Je-li a jinde. JASON Hirschhorn: Je-li a jinde - tady. Tak co ty vypadají? STUDENT: v případě jiného prohlášení. JASON Hirschhorn: Jo, podmínky, že jo? Takže budeme pravděpodobně muset napsat nějaké podmínky. A opět, i když možná matoucí Za prvé, mají obecně smysl nyní o tom, jak psát a podmínky Syntaxe podmínky. A když ne, jsme jen vyhledat Syntaxe podmínky, vyjímání a vkládání že, protože my víme, Zde je třeba podmínku. Jakékoliv další věci, které vidíme, že mapy na věci, které bychom mohli potřebovat v C? Jo, Aleha? STUDENT: To by mohlo být zřejmé, jen o kontrolu, zda hodnota se rovná něco. JASON Hirschhorn: Tak jak jsme se zjistit a - tak jděte do středu seznamu a zkontrolujte, zda naše hodnota je tam? Jak to uděláme v C? Co je syntaxe pro to? STUDENT: Rovná, rovná. JASON Hirschhorn: Rovná, rovná. Takže tato kontrola se pravděpodobně bude se být rovná, rovná. Takže budeme vědět, že potřebujeme, aby někde. A skutečně, nejen v psaní, vidíme ty ostatní věci. Budeme muset udělat nějaké Operátory porovnání tam - fantastické. Takže to vlastně vypadá, a a velký, jsme nenapsal Slovo C kódu ještě. Ale máme mentální model, dolů prostřednictvím přednášek a krátkých filmů. Napsali jsme pseudo-kódu jako skupina. A už máme 80% ne-li 90% z toho, co musíme udělat. Nyní, jen je třeba kódovat to, což je opět netriviální problém k řešení. Ale aspoň jsme přilepená na logice. Alespoň teď, když jdeme do úředních hodinách, Mohu říci, já vím, co potřebuji dělat, ale můžete připomenout, mi syntaxe? Nebo i když úřední hodiny jsou přeplněné, vám Může Google pro syntaxi, spíše než je přilepená na logice. A opět, spíše než se snažit vyřešit logika a problémy syntaxe všechny najednou, je často mnohem lepší rozbít ty dva pevné problémy se do dva z nich více zvládnutelné a to pseudo-kódu jako první, a pak kód v jazyce C. Takže pojďme se podívat, co jsem udělal pro pseudo-kódu dopředu. I když délka seznamu je větší než nula, podívejte se na středu seznamu. Pokud je číslo nalezeno vrátil hodnotu true, jinak Pokud je číslo vyšší, hledání vlevo. Else if číslo nižší, hledání právo, vrátí false. Takže to vypadá skoro identické, ne-li téměř totožný s tím, co jsme napsali. Vlastně, Tome, co jsi řekl jako první, lámání uprostřed seznamu a pokud počet nalezeno do dvou výkazech je vlastně to, co jsem udělal. Kombinovaný jsem je tam. Měl jsem poslouchal jste poprvé. Takže to je pseudo-kódu máme. Pokud chcete, aby se, je mi líto, přejděte zpět k naší původní problém. Pojďme kód binary.c. Takže realizovat iterativní verze binární vyhledávání pomocí následujících Deklarace funkce. A nemusíte kopírovat to se jen zatím. Já jsem vlastně jít otevřít až tady binary.c. Takže tam je deklarace funkce ve středu obrazovky. A uvidíte, vzal jsem pseudo-kódu ze na mé straně, ale téměř totožný na to, co jsme napsali, a dal, že pro vás. Takže teď, pojďme pět minut kódovat tuto funkci. A opět, pokud máte nějaké dotazy, zvednout ruku, dejte mi vědět, budu přijít kolem. STUDENT: [neslyšitelné]. JASON Hirschhorn: Tak jsem vzal binární Definice hledání na Nahoru na lince 12. To je to, co jsem dostal k mému snímku. A pak se to všechno pseudo-kód jsem zkopírovat a vložit ze snímku, pseudo-kód slide. Pořád jsem neslyšel [neslyšitelný]. Takže, pokud jste dokončili svůj implementace, chci to zkontrolovat. I e-mailem vám soubor helpers.h dříve v této třídě. A to bude k dispozici on-line, jakož ke stažení pro lidi sledují Tentokrát část zpoždění. A já jsem jen použil obecný distribuci Kód z pset3. Tak jsem vzal find.C, používat svůj helpers.h soubor spíše než soubor helpers.h , který je uveden v distribuční kódu. A musel jsem udělat ještě jednu změnu v find.C spíše než volání jednoduše hledání, volejte binary_search. Takže pokud si chcete vyzkoušet své kód, vím, že to je, jak to udělat. Ve skutečnosti, když budeme spuštění tohoto kódu právě teď, právě jsem udělal kopii můj pset3 adresář, opět odloženy Pomocníci soubory a pak dělal, že změnit find.C volat binary_search spíše než jednoduše vyhledávat. JASON Hirschhorn: Ano. Máte dotaz? STUDENT: Nevermind. JASON Hirschhorn: Žádné starosti. Dobře, pojďme začít. Budeme kódovat to jako skupina. Jeden další poznámka. Znovu, toto je lze snadno zaměnit Pro problémů nastavit tři. Mám helpers.h soubor, který spíše než helpers.h jsme vzhledem, prohlašuje, binární vyhledávání, bublinu třídění a výběr třídit. A v find.c si všimnete, on-line, co je to, linka 68, nazýváme binární hledat spíše než hledání. Takže znovu, kód, který je k dispozici on-line nebo kód, který jste vytváření teď lze snadno vyměnit Pro p set 3 podívat se na to. Ale nejprve pojďme kód binární vyhledávání. Naše funkce prohlášení, se vrací bool. Bereme celé číslo s názvem hodnotu. Bereme pole celých čísel volal hodnoty, a vezmeme n být Velikost pole. Na řádku 10, přímo tady, mám ostré patří stdbool.h. Ví někdo, proč to tam je? Takže co to řádek kódu udělat? STUDENT: To vám umožní použít typ bool návratu. JASON Hirschhorn: Přesně tak. STUDENT: Nebo je to knihovna, která umožňuje použít typ bool návratu. JASON Hirschhorn: Tak ostré patří stdbool.h linka mi něco dává definice a prohlášení pro věci že jsem dovoleno používat v tato knihovna. Takže mezi těmi, se říká, že je Tento typ tzv. bool, a to může být true nebo false. Tak to je to, co to dělá vedení. A kdybych neměl tu linku, bych dostat do problémů pro psaní této slovo tady, bool, hned tam. Přesně tak. Tak jsem třeba, že v tomto kódu. OK. Takže to, opět, je iterativní verze, není rekurzivní jeden. Tak pojďme začít. Začněme s tím prvním řada pseudo kódu. A doufejme, že budeme - nebo ne snad. Chystáme se jít po místnosti. Půjdeme řádek po řádku, a já vám pomůže můžete přijít na řádek, který potřebujeme napsat jako první. Takže zatímco délka seznamu je větší než nula. Začněme v přední části. Co řádku mám napsat Zde, v kódu? STUDENT: Zatímco závorka n je větší než 0. JASON Hirschhorn: Zatímco n je vyšší než 0. Tak n je velikost seznamu, a budeme kontrolovat, zda - [vložením VOICES] JASON Hirschhorn: - Prosím? STUDENT: Jak můžeme vědět, že n je velikost seznamu? JASON Hirschhorn: Omlouvám se. Podle specifikace pset, hledání a druh funkce, které potřebujete psát, n je velikost seznamu. Zapomněl jsem se mu vysvětlit, že tady. Ale ano. n je velikost seznamu, v tomto případě. Takže, když n je větší než 0. OK. To se může ukázat jako trochu problematické i když, pokud to půjde dál. Protože budeme i nadále vědět, velikost seznamu v celém tomto funkce, ale říct, že jsme začít s řadou 5 čísel. A my jsme projít a my máme Nyní ji snížil na pole 2 čísel. Což 2 celá čísla, je, že? Velikost je 2 nyní, že chceme podívejte se na, ale 2 je, že? Má to smysl, na tuto otázku? OK. Budu ho zeptat znovu. Takže začneme s tohoto pole 5 celá čísla, a n se rovná 5, ne? Budeme projít zde. budeme pravděpodobně změnit velikost, Dobře, jak se věci dál. Což je to, co říkáme, že chceme dělat. Nechceme hledat plné věc znovu. Tak, že bychom to změnit na 2. Bereme půl seznam, který je divné. Takže jen vybrat 2. Takže teď n se rovná 2. Omlouvám se za chudé suché markery vymazat. Je to tak? A my prohledávání seznamu opět se seznamem velikosti 2. No, naše pole je stále o velikosti 5. Říkáme, že chceme jen, aby hledat 2 místa v něm. Tak toho 2 místa jsou? Má to smysl? Jsou levé 2 místa? Jsou správné 2 místa? Jsou ve středu 2 body? Jsme prolomili problém dolů, ale my vlastně nevím, která část problém, jsme stále při pohledu na, jen tím, že tyto dvě proměnné. Takže potřebujeme trochu více než, když n je větší než 0. Musíme vědět, kde to n je v našem aktuálním poli. Takže nemá někdo změnit na této trati? Většina z této řady je naprosto správné. Je tu další přírůstek? Můžeme vyměnit něco z pro n do aby tuto linii o něco lepší? Mm-hm? STUDENT: Můžete inicializovat proměnnou jako délku až n, které vám pak mohou být použity později ve funkci? JASON Hirschhorn: Tak inicializovat proměnné délky N, a budeme používat později? Ale pak jsme se jen aktualizovat délku a my ještě narazíte na tento problém, kde jsme snížit délku našeho problému, ale nikdy nevíme, kde vlastně, že délka mapy na. STUDENT: Není to nestane později, když říkáš, hledání vlevo, hledat pravdu? Budeš chodit na různé oblast vašeho - JASON Hirschhorn: Chystáme se jít do prostoru, ale jak víme, které mají jít? Pokud máme jen pole a to n, jak víme, kde jít na v poli. V zadní, ano? STUDENT: Máte, jako, nižší mez a horní mez proměnné nebo něco takového? JASON Hirschhorn: OK. Takže to je další nápad. Spíše než jen sledování velikost, můžeme sledovat nižší a horní mez proměnné. Tak jak vypočítat velikost od dolní mez a horní mez? [vložením VOICES] JASON Hirschhorn: odčítání. A také sledování nižší vázán a horní mez, dejte nám vědět, jsme vyhledávání tyhle dva? Jsme hledání tyhle dva tady? Jsme vyhledávání prostřední dva? Pravděpodobně ne prostřední dva, protože to, ve skutečnosti, je binární vyhledávání. Ale teď budeme mít možnost získat velikost, ale také hranice pole. V podstatě, pokud máme obra telefonní seznam, jsme to rip na polovinu. Nyní víme, kde to menší telefonní seznam. Ale my nejsme ve skutečnosti kopírování telefonní seznam na polovinu. Stále potřebujeme vědět, kde nové hranice našeho problému je. Má někdo nějaké otázky, o tom? Ano? STUDENT: Bude to fungovat vytvořením variabilní, i, že pak stačí posunout pozice i vzhledem k jeho aktuální pozice a délka, n? JASON Hirschhorn: A co je i? STUDENT: Jak jsem byl jako druh - Jako byste inicializovat i být střední poloha pole. A pak, v případě, že hodnota na pozici i v střed pole ve zjištěno, být nižší než hodnoty, kterou provede, i nyní se délka pole, a hodnota i děleno 2. Jako vidět, můžete přesunout i - JASON Hirschhorn: Správně. STUDENT: - do - JASON Hirschhorn: Tak jsem si téměř pozitivní, že bude fungovat. Ale jde o bytost, budete potřebovat dva kousky informací zde. Můžete to udělat s počátkem a koncem, nebo si můžete udělat to s velikostí, a pak někteří značka. Ale vy potřebujete dva kusy odtud informací. Nemůžete dostat se jen jeden. Znamená to, že má smysl? Takže jdeme projít, a budeme dělat, [neslyšitelný] a vytvořit nějaké značky. Tak co píšete ve svém kódu? STUDENT: Jen jsem řekl, int mez jeden je rovno 0. JASON Hirschhorn: Říkejme že int, začíná. STUDENT: OK. JASON Hirschhorn: To dělá větší smysl pro mě. A? STUDENT: Řekl jsem, myslím, int konec. JASON Hirschhorn: int končí. STUDENT: Myslím, n minus 1, nebo něco takového. Jako poslední prvek. JASON Hirschhorn: Takže jsi napsal, int začíná se rovná 0, středník, a int konec se rovná n minus 1, středník. Takže v podstatě, co děláme zde, 0 na první pozici. A jak víme, v polích, nejdou až n, jdou až n minus 1. Takže máme nějaké hranice našeho pole. A tyto počáteční odhady se stalo, že počáteční hranice našeho problému. OK. Tak to zní dobře. Pak, pokud se vrátíme k této linii, zatímco délka seznamu je větší než 0, co, místo N, by měl dáme sem? STUDENT: Napište ukončení minus začátek. JASON Hirschhorn: Při ukončení minus začátek je větší než 0? OK. A co jsme mohli, pokud bychom chtěli aby to trochu hezčí, co jiného jsme mohli dělat? Pokud bychom chtěli vyčistit Tento kód se trochu? Jak se můžeme zbavit 0? To je jen otázka stylu. Je to právě teď správné. STUDENT: Ending není rovná začátek? JASON Hirschhorn: Můžeme dělat, co? [vložením VOICES] STUDENT: Ukončení je větší? JASON Hirschhorn: Jo. Můžeme jen dělat, když končí je větší než začátek. Správně. Přidali jsme začátek na druhou stranu na to, že jsme se zbavili 0. Tak to prostě vypadá trochu čistší. OK. Takže, zatímco délka seznamu je 0, jsme psali , že, zatímco konec je větší než na začátku. Chystáme se dát na naše potřeby složené závorky, a pak první věc, chceme udělat, je podívat se na je v malém seznamu. Vy? Můžeš mi dát - STUDENT: Pokud závorka Hodnota hranatá závorka - JASON Hirschhorn: Pokud závorky hodnota hranatá závorka. STUDENT: Ending děleno 2. JASON Hirschhorn: Ukončení? STUDENT: Vidím problém s - JASON Hirschhorn: OK. No, podívejte se na středu. Jak můžeme vědět, co je uprostřed? Jo. Takže dovolte mi odstranit tento kód. Jak můžeme vědět, co je uprostřed? V ničem, pokud máte začátek a konec, jak si najít střední? STUDENT: Ty průměr. STUDENT: Můžete přidat dohromady a pak - JASON Hirschhorn: Přidat jim dohromady a pak? STUDENT: A vy průměr. Rozdělte ji 2. JASON Hirschhorn: Přidat jim společně a vydělte 2. Takže int střední rovná? Tome, můžete mi to dát? STUDENT: Začátek a konec - JASON Hirschhorn: Začátek a končí. STUDENT: Vše, držák, děleno 2. JASON Hirschhorn: Vše v závorkách, děleno 2. Tak to mi dává střed nic, opravit? STUDENT: Také je potřeba zaokrouhlit nahoru. JASON Hirschhorn: Co si Tedy, musím sehnat to? [vložením VOICES] STUDENT: Vzhledem k tomu, jestli je to divné číslo, pak je to jako - JASON Hirschhorn: Dobře, OK. Tak jsem si to mohl zaokrouhlit nahoru. Ale jestli je to liché číslo, 5, mohu přičemž jeden od středu. Nebo jestli je to sudé číslo, místo, to je lepší případ. Pokud je to 4, jen máme 4, můžu vzít První "střední", citace, konec citátu nebo Druhý "střední" jeden. Buď bude pracovat pro binární vyhledávání, takže nemám skutečně potřebují, aby to zaokrouhlovat. Ale je tu ještě jedna věc, kterou jsem je třeba se podívat na tento řádek. Mohli bychom si to neuvědomujete ještě, ale vrátíme se k ní. Protože tato linka ve skutečnosti stále potřebuje ještě jednu věc. Ale tak daleko, psali jsme čtyři řádky kódu. Máme naši začátek a koncovou značkou. Máme while, který mapuje na přímo na naši pseudokódu. Díváme se na středu, který mapuje přímo na našem pseudokódu. Řekl bych, že to jde do středu seznamu, tento řádek kódu. A pak, jednou půjdeme do středu seznam, další věc, kterou musíme udělat, je zjistit, zda naše hodnota je zde pro pseudokódu jsme psali již dříve. Tak jak jsme se zjistit, zda naše hodnoty je ve středu seznamu? Vy. Proč jste to udělal? STUDENT: Pokud je naše hodnota je je ve středu je rovna co jsme si stanovili - Myslím equal to - JASON Hirschhorn: Je - OK. STUDENT: Nejsem si jistý, co Proměnná hledáme protože i když, je to, že - [vložením VOICES] STUDENT: [neslyšitelné]. JASON Hirschhorn: Přesně tak. Na deklaraci funkce, hledáme hodnotu. Takže jsme hledali hodnotě v poli hodnot. Takže ty jsi naprostou pravdu. Budete dělat, pokud je otevřené závorka hodnota držák střední zavřeno držáku rovná se rovná hodnotě, a uvnitř Co musíme udělat? Pokud se naše hodnota je tam, co to musíme udělat? [vložením VOICES] STUDENT: Návrat na nulu. JASON Hirschhorn: Vrací true. STUDENT: Vrací true. JASON Hirschhorn: Michael, co tento řádek dělat? STUDENT: [neslyšitelné] program spusťte její průběh, a to je u konce, a jste to, co musíte udělat? JASON Hirschhorn: Program nebo co? V tomto případě? STUDENT: funkce. JASON Hirschhorn: funkce. A tak, pro návrat na cokoliv tzv. a dát mu hodnotu, to je pravda. Přesně tak. Hlavní. Co je návratový typ z hlavní, Michael? STUDENT: int, integer? JASON Hirschhorn: int, přesně tak. Číslo. To byla jen otázka, aby se ujistil, vy jste byli na vrcholu. Co je to obvykle vrátí, jestliže všechny věci fungují dobře? STUDENT: Zero. JASON Hirschhorn: Zero. Přesně tak. STUDENT: Pokud je to jen vrátí hodnotu true, není informace jsou uvedeny o tom, co - Oh, je to jen říká, že hodnota je uvnitř pole. JASON Hirschhorn: Přesně tak. Tento program není poskytování informací kde přesně je hodnota. Je to jen říká, ano, jsme zjistili, to, nebo ne, jsme nenašli ho. Takže pokud číslo nalezeno, vrátí hodnotu true. No, vlastně jsme právě udělali, že opravdu rychle, že jeden řádek kódu. Takže budu pohybovat, že řada pseudokódu. STUDENT: Nepotřebujeme pro změnu pole? Mělo by být hodnoty, ne hodnoty, ne? JASON Hirschhorn: Omlouvám se. Děkuju. STUDENT: Jo. JASON Hirschhorn: Tento řádek by měly být hodnoty. Přesně tak. OK. Takže jsme se podíval na střední seznamu. Pokud je číslo nalezeno návrat pravda. Pokračování na naší pseudokódu, pokud prostřední je větší, hledání vlevo. Tak jsem tady, pokud počet vyšší, hledání vlevo. Constantine, můžete dát me tento řádek kódu? STUDENT: Pokud je hodnota uprostřed - JASON Hirschhorn: Takže pokud hodnota - pokud je otevřené závorka hodnoty držák střední závorka - STUDENT: Je menší než hodnota? JASON Hirschhorn: Je menší než. STUDENT: Méně než hodnota. JASON Hirschhorn: Hodnota. No, vlastně, kterou chcete zkontrolujte, zda je číslo - Promiňte. To je trochu matoucí. Ale jinak, pokud je číslo v uprostřed seznamu je větší. STUDENT: Oh, OK. JASON Hirschhorn: budu změnit. Jinak v případě, střední vyšší, jsme chcete vyhledávat doleva, OK? A co budeme dělat dovnitř to, zda podmínka? STUDENT: Mohu si udělat malou změnu stav, změňte ji na else if? JASON Hirschhorn: Else-li? OK. Takže tento kód bude provádět zhruba stejný. Ale pěkná věc, o použití, pokud jiný v případě, jinak v případě, nebo v případě, else if, jinak Znamená to, že pouze jedna z nich bude být kontrolovány, ne všechny tři z nich, potenciálně. A že je to trochu hezčí na počítači, který je spuštěním programu. Tak [? Constantine,?] Jsme v tomto řádku, jinak, pokud jsou hodnoty, držák střední závorka je větší než hodnota. Co musíme udělat? Musíme hledat vlevo. Jak to uděláme? Chystám se vám start. Máme tyto dvě věci zvané začíná a končí. Takže to, co potřebuje, aby se stalo na začátek? Pokud chcete vyhledávat levé straně Seznam, dostaneme naši současnou začátek. Co musíme udělat? STUDENT: My nastavit začátek do poloviny a 1. JASON Hirschhorn: Takže když jsme vyhledávání vlevo? STUDENT: Je nám líto, střední minus - takže konec bude střední minus 1 a začátek - JASON Hirschhorn: A co se stane na začátku? STUDENT: To zůstane stejný. JASON Hirschhorn: Tak význam zůstává stejný. Pokud budeme hledat na levé straně, my jsme použití stejného začátek - Přesně tak. A konec? Omlouváme se, ale to, co dělá končí opět v rovnováze? STUDENT: Střední minus 1. JASON Hirschhorn: Střední minus 1. A teď, proč minus 1, a to nejen střední? STUDENT: uprostřed je z obraz už, protože jsme měli zkontrolovat, že je to venku? JASON Hirschhorn: To je Přesně tak. Střed je z obrázku. Jsme již zkoumali střed. Takže nechceme, "střed", citovat konec citátu, aby i nadále v pole, které se díváme. Tak to je fantastický. Else if hodnoty držák střední větší než hodnota končící rovná střední minus 1. Jeff, co o tomto posledním řádku? STUDENT: Else. Hodnoty prostřední je menší než hodnota? JASON Hirschhorn: Budeme Dáváš mi víc. Takže pokud nechcete, aby mě - STUDENT: Takže začátek by střední plus 1. JASON Hirschhorn: Začátek rovná střední plus 1, opět, pro stejnou Důvod, že Constantine nám dal již dříve. A na konci, který není uveden me řádek kódu ještě? Return false, Aleha, co budeme psát tady? STUDENT: return false. JASON Hirschhorn: Návrat false. A musíme to udělat, protože pokud bychom nenajdete to, musíme říci, že jsme nenašel. A my jsme řekli budeme vracet bool, takže určitě muset vrátit bool někde. Takže pojďme se spuštěním tohoto kódu. Já jsem vlastně bude - takže jsme v terminálu. Budeme vyčistit naše okno. Pojďme Make vše. Zjistili jsme, že je to jedna chyba. Tam je chyba na řádku 15, očekává, že středník na konci roku prohlášení. Takže to, co jsem zapomněl? STUDENT: středník. JASON Hirschhorn: středník až tady. Myslím, že to byl Tomův kód. Takže Tom, [neslyšitelný]. Jen si dělám srandu. Pojďme udělat, aby vše znovu. STUDENT: Jaké adresáře Dropbox Měli bychom být za to? JASON Hirschhorn: Takže můžete Jen pozor na tohoto bitu. Ale na druhou stranu, pokud byste chtěli přesunout tento kód do pset3 adresáře vyzkoušet it out, to je to, co jsem udělal. Pokud si všimnete zde - Omlouvám se, dobrá otázka. [? LS,?] Mám tu find.c kód z tohoto týdne distro kódu. Mám helpers.h. Mám soubor, aby to jsem vlastně upravovat trochu zahrnout tyto nové Soubory jsme psaní. Všechny tohoto kódu bude mít k dispozici, není distribuce kód, ale nový Ujistěte se soubor, bude nový helpers.h soubor být k dispozici on-line ke stažení. Opět, tak ty jsou další kódy máme. Tak, aby všichni, na této trati, dělá si, binární, výběr bublina - značky všechny tři z nich a kompiluje do Tento spustitelný kód najít. Takže obecně, nechceme se rovnou do check50. Chceme udělat nějaké testy na vlastní pěst. Ale stejně tak můžeme urychlit tento kousek, check50 2013 pset3.find přejde v helpers.c-- moje chyba. Nemyslím si, že právě teď. Takže jsme vlastně bude spustit kód pro Real. Usage.find /, víte, co to znamená? STUDENT: Musíte druhý příkazový řádek na něj. JASON Hirschhorn: Potřebuji druhý příkazového řádku. A podle specifikace, musím zadat, co jsme hledali. Tak se pojďme podívat na 42 let. Budeme udržovat ji v tříděný, protože jsme nenapsal funkci třídění ještě - 42, 43, 44. A řízení D nenašel jehla v kupce sena. To je špatné. Je to určitě tam. Zkusme něco jiného. Možná je to proto, že jsem si že na začátku. Pojďme udělat, 41, 42, 43. Tam jdeme. Je to našel. Řekněme to na konci teď, jen takže můžeme být důkladné - 40, 41, 42. Nenašli jehlu. Takže jsem se zmínil již dříve. Bohužel, toto věděl jsem, se bude dít. Ale pro pedagogické účely, to je dobré prozkoumat. To nefunguje. Z nějakého důvodu nemůže najít. Víme, co je tam, ale nejsme najít. Takže jedna věc, kterou můžeme udělat, je jít přes GDB ji najít, ale nemá nikoho, aniž by prostřednictvím GDB, mají Pocit, kde jsme to podělal? [? Madu? ?] STUDENT: Myslím, že by to mohlo být, když končí se rovná začátku, a to je jen seznam jeden prvek. Pak to prostě ignoruje místo skutečně to kontrole. JASON Hirschhorn: To je Přesně tak. Při ukončení se rovná začátku, my ještě prvek v našem seznamu? STUDENT: Ano. JASON Hirschhorn: Ano, ve skutečnosti jsme mají jeden a pouze jeden prvek. A, která bude s největší pravděpodobností stane, když, dle kódu jsme testovali, jsme na přední kupce sena nebo konec kupce sena. To je místo, kde začátek a konec se bude rovnat jeden, s binární vyhledávání. Takže v těchto dvou případech to nebude fungovat, proto, že konec byl roven začátku. Avšak v případě, ukončení se rovná začátku, to while provést? To není. A mohli jsme kontrolovat že opět přes GDB. Takže, jak můžeme opravit tento kód, protože kdy při ukončení se rovná začátek, chceme také tento while spustit. Takže to, co oprava můžeme udělat na linku 18? STUDENT: [neslyšitelné] je větší než nebo rovno. JASON Hirschhorn: Přesně tak. I když konec je větší než nebo rovna na začátek. Takže teď jsme se ujistěte se, že si, že roh případ na konci. A podívejme se. Pojďme spustit tento ještě jednou. Pojďme udělat vše. Opět platí, že budete mít jen postupujte podle zde. Najděte 41 tentokrát. Jen aby to v souladu. Najděte 42. Řekněme to na začátku - 42, 43, 44. Našli jsme ho. Takže to byla opravdu změna jsme potřebovali udělat. To bylo hodně kódování my právě udělal, binární vyhledávání. Má někdo nějaké otázky před I dál do řádků, které jsme udělali v roce binární vyhledávání, nebo jak jsme přišli z toho, co jsme zjistili? Než budeme pokračovat, chci také upozornit se, že i velké, jsme zmapovali náš pseudo-kód, kdo jeden na našeho kódu. My jsme si to ošemetná věc přijít na to, s začíná a končí. Ale měl byste na to přišel, si by psali do značné míry totožný kód, s výjimkou ty horní dva řádky. A pak byste si uvědomili, když jsi ho kontrol a případů, které budete potřebovat něco jiného. Takže i když jste následovali náš pseudo-kód linky na linku, by jste dostali všichni ale dva řádky kód, který potřeboval napsat. A byl bych ochoten se vsadit, že vy by si všechno vymyslel, že se docela rychle, že jste potřebovali dát nějaké značky tam přijít , kde jste byli. To je opět moc dělat pseudo-kódu dopředu. Takže, co můžeme udělat logiku jako první, a pak můžeme starat o syntaxi. Kdyby jsme byli zmateni o logice a zároveň se snaží napsat tento kód v C, bychom se dostali všechno zpackal. A pak bychom se vyptávat logika a syntaxe a záběru je všechny dohromady. A my bychom se ztratit v tom, co se může rychle stát velmi obtížný problém. Takže pojďme dál teď na výběr druhu. Máme 20 minut života. Takže mám pocit, že už nebude moci dostat přes všechny volby druhu a bubble sort. Ale pojďme alespoň pokus dokončit výběr druhu. Takže realizovat výběr třídit pomocí Následující deklarace funkce. Znovu, toto je převzato z problém nastavit specifikaci. Int hodnoty je konzole, je pole celých čísel. A int.n je velikost tohoto pole. Výběr řazení se děje třídit toto pole. Takže na naší mentální model výběru třídění, vytáhneme - Nejprve jsme se projít v seznamu jako první čas, najít nejmenší číslo, dát to na začátku, najít druhé nejmenší číslo, vložte jej do Druhé místo, chceme-li třídit ve vzestupném pořadí. Nebudu vás nutí psát pseudo-kód právě teď. Ale dříve, než budeme dělat kód jako třídy, ve pět minut budeme psát pseudo-kód, takže máme nějaký smysl kde jedeme. Takže pokus o zápis pseudo-kódu na vlastní pěst. A pokuste se obrátit, že pseudo-kódu do kódu. Budeme dělat, že jako skupina za pět minut. A samozřejmě, dejte mi vědět, jestli Máte-li jakékoli dotazy. STUDENT: To, že? JASON Hirschhorn: Podívejte se, jak daleko se můžete dostat do dalších dvou minut. Chápu, že ne být schopni dokončit. Ale půjdeme na to jako skupina. Jste všichni kódování, takže [neslyšitelné], takže jsem Omlouvám se, pozastavit, co děláte. Ale pojďme projít to jako skupina. A opět, binární vyhledávání, všichni dávají mi jeden, ne-li více řádků kódu. Děkuji vám za to. Chystáme se dělat totéž zde, kód společně jako skupina. Takže výběr třídit - pojďme napsat některé rychlé pseudo-kódu. Na duševní modelu, může někdo dát mi první řádek pseudo-kód, prosím? Co chci dělat? STUDENT: Zatímco seznam je mimo provoz. JASON Hirschhorn: OK, zatímco Seznam je mimo provoz. A co myslíš tím "mimo pořadí?" STUDENT: Zatímco [neslyšitelné] nebyla uvedena. JASON Hirschhorn: Zatímco seznam je mimo provoz, co budeme dělat? Dej mi druhou linku, prosím, Marcus. Žák: Takže najít další nejmenší číslo. To bude odsazen. JASON Hirschhorn: Takže zde další nejmenší číslo. A pak někdo jiný? Jakmile najdeme další nejmenší číslo, co budeme dělat? Budu říkat najít nejmenší číslo. To je to, co chceme dělat. Takže najít nejmenší číslo. Tak co budeme dělat? STUDENT: [neslyšitelné] na začátek. JASON Hirschhorn: Je nám líto? STUDENT: umístěte jej do začátku seznamu. JASON Hirschhorn: Tak umístěte jej do začátek seznamu. A co budeme dělat na věc , která byla na začátku seznamu, ne? Jsme přepsání něco. Tak kde jsme to dát? Jo, Anna? STUDENT: Kde nejmenší číslo bylo? JASON Hirshhorn: Tak si na začátek seznamu, pokud Nejmenší číslo je. Takže zatímco seznam je mimo provoz, najít nejmenší číslo, vložte ji do začátek seznamu, dát začátku seznamu, kde Nejmenší číslo je. Marcusi, můžete přeformulovat tento řádek zatímco seznam je mimo provoz? STUDENT: Zatímco počty nebyly řazeny? JASON Hirshhorn: OK, tak aby vědí, že čísla nebyly dále, co musíme udělat? Kolik potřebujeme projít tohoto seznamu? Žák: Takže myslím, že pro smyčce, nebo zatímco, zatímco kontroluje čísla je méně než je délka seznamu? JASON Hirshhorn: OK, to je dobré. Myslím, že misphrased moje otázka špatně. Jen jsem se snažil dostat na budeme muset jít celý seznam. Takže zatímco seznam je mimo provoz, pro mě je těžké zmapovat na. Ale v podstatě, to je jak Myslím, že o tom. Projděte si celý seznam, najít nejmenší číslo, vložte ji do začátek - vlastně, máš pravdu. Pojďme si je oba. Takže zatímco seznam je mimo provoz, se musí projít celý seznam jednou, najít nejmenší číslo, místo se na začátku seznamu, dal začátku seznamu, do kterého nejmenší počet byl, a pak v případě, Seznam je stále mimo provoz, máme musím jít přes tento proces znovu, ne? To je důvod, proč volba druhu, Big-O runtime výběrového druhu, někdo? STUDENT: n na druhou. JASON Hirshhorn: n na druhou. Vzhledem k tomu, jako Marcus a já jsem si uvědomil, tady, budeme muset projít Seznam počet opakování. Takže prochází něco délka n n kolikrát je ve skutečnosti n na druhou. Tak toto je naše pseudokódu. To vypadá velmi dobře. Má někdo nějaké otázky, o pseudokódu? Protože ve skutečnosti volba třídění by pravděpodobně Pojďte na jedno-, kód od pseudokódu. Takže jakékoliv otázky týkající se Logika pseudokódu? Prosím, zeptejte se ho hned. Výběr sort - zatímco seznam je venku objednávky, budeme se projít a najít nejmenší pokaždé a vložte jej do přední části. Takže zatímco seznam je mimo provoz, může někdo mi dát ten řádek kódu, který je mi nedal linku kódu ještě, prosím? Zní to jako co? STUDENT: To je pro smyčce. JASON Hirshhorn: To zní Líbí se mi pro smyčce. OK, můžete mi dát na smyčce? Pro - STUDENT: i rovná 0. JASON Hirshhorn: i nebo - Co nám chybí? Co se děje tady? STUDENT: Int. JASON Hirshhorn: Přesně tak. (Int i = 0; - STUDENT: i